diff options
Diffstat (limited to 'chimere/admin.py')
| -rw-r--r-- | chimere/admin.py | 165 | 
1 files changed, 90 insertions, 75 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 686a656..3ea5b7b 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -37,17 +37,16 @@ except ImportError:      pass  from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\ -     NewsAdminForm, CategoryAdminForm, ImporterAdminForm, OSMForm, \ -     PageAdminForm, PictureFileAdminForm, MultimediaFileAdminForm +    NewsAdminForm, CategoryAdminForm, ImporterAdminForm, OSMForm, \ +    PageAdminForm, PictureFileAdminForm, MultimediaFileAdminForm  from chimere import models  from chimere.models import Category, Icon, SubCategory, Marker, \ -     PropertyModel, News, Route, Area, ColorTheme, Color, \ -     MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\ -     PropertyModelChoice, MultimediaExtension, Page,\ -     get_areas_for_user, get_users_by_area, ImporterKeyCategories,\ -     SubCategoryUserLimit -from chimere.utils import unicode_normalize, ShapefileManager, KMLManager,\ -                          CSVManager +    PropertyModel, News, Route, Area, ColorTheme, Color, \ +    MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\ +    PropertyModelChoice, Page, get_areas_for_user, \ +    ImporterKeyCategories, SubCategoryUserLimit +from chimere.utils import ShapefileManager, KMLManager, CSVManager +  def disable(modeladmin, request, queryset):      for item in queryset: @@ -55,23 +54,26 @@ def disable(modeladmin, request, queryset):          item.save()  disable.short_description = _(u"Disable") +  def validate(modeladmin, request, queryset):      for item in queryset:          item.status = 'A'          item.save()  validate.short_description = _(u"Validate") +  def export_to_kml(modeladmin, request, queryset):      u"""      Export data to KML      """      filename, result = KMLManager.export(queryset)      response = HttpResponse(result, -                        mimetype='application/vnd.google-earth.kml+xml') +                            mimetype='application/vnd.google-earth.kml+xml')      response['Content-Disposition'] = 'attachment; filename=%s' % filename      return response  export_to_kml.short_description = _(u"Export to KML") +  def export_to_shapefile(modeladmin, request, queryset):      u"""      Export data to Shapefile @@ -86,6 +88,7 @@ def export_to_shapefile(modeladmin, request, queryset):      return response  export_to_shapefile.short_description = _(u"Export to Shapefile") +  def export_to_csv(modeladmin, request, queryset):      u"""      Export data to CSV @@ -96,6 +99,7 @@ def export_to_csv(modeladmin, request, queryset):      return response  export_to_csv.short_description = _(u"Export to CSV") +  def managed_modified(modeladmin, request, queryset):      # not very clean... There is must be a better way to do that      redirect_url = request.get_full_path().split('admin_modification')[0] @@ -108,8 +112,8 @@ def managed_modified(modeladmin, request, queryset):      item = queryset.all()[0]      if not item.ref_item or item.ref_item == item:          try: -            item = modeladmin.model.objects.filter(ref_item=item -                                          ).exclude(pk=item.pk).all()[0] +            item = modeladmin.model.objects.filter(ref_item=item)\ +                                           .exclude(pk=item.pk).all()[0]          except IndexError:              messages.error(request, _(u"No modified item associated "                                        u"to the selected item.")) @@ -160,7 +164,7 @@ def managed_modified(modeladmin, request, queryset):          messages.success(request, _(u"Modified item traited."))          return HttpResponseRedirect(redirect_url)      return render_to_response('admin/chimere/managed_modified.html', -                              {'item':item, 'item_ref':item_ref}, +                              {'item': item, 'item_ref': item_ref},                                context_instance=RequestContext(request))  managed_modified.short_description = _(u"Managed modified items") @@ -284,28 +288,24 @@ class MarkerAdmin(admin.ModelAdmin):                 export_to_shapefile, export_to_csv]      exclude = ['submiter_session_key', 'import_key', 'import_version',                 'available_date', 'ref_item'] -    readonly_fields = ['submiter_email', 'submiter_comment', 'import_source', -               'submiter_name', 'ref_item', 'modified_since_import', 'route'] +    readonly_fields = [ +        'submiter_email', 'submiter_comment', 'import_source', +        'submiter_name', 'ref_item', 'modified_since_import', 'route']      form = MarkerAdminForm      fieldsets = ((None, { -                    'fields': ['point', 'name', 'status', 'categories', -                           'description', 'keywords', 'start_date', 'end_date'] -                  }), -                 (_(u"Submitter"), { -                    'classes':('collapse',), -                    'fields': ('submiter_name', 'submiter_email', -                               'submiter_comment') -                 }), -                 (_(u"Import"), { -                    'classes':('collapse',), -                    'fields': ('not_for_osm', 'modified_since_import', -                               'import_source', 'origin', 'license') -                 }), -                 (_(u"Associated items"), { -                    'classes':('collapse',), -                    'fields': ('ref_item', 'route',) -                 }), -                ) +        'fields': ['point', 'name', 'status', 'categories', 'description', +                   'keywords', 'start_date', 'end_date'] +    }), (_(u"Submitter"), { +        'classes': ('collapse',), +        'fields': ('submiter_name', 'submiter_email', 'submiter_comment') +    }), (_(u"Import"), { +        'classes': ('collapse',), +        'fields': ('not_for_osm', 'modified_since_import', 'import_source', +                   'origin', 'license') +    }), (_(u"Associated items"), { +        'classes': ('collapse',), +        'fields': ('ref_item', 'route',) +    }),)      inlines = [MultimediaInline, PictureInline]      has_properties = True @@ -315,8 +315,8 @@ class MarkerAdmin(admin.ModelAdmin):          """          if self.has_properties:              main_fields = self.fieldsets[0][1]['fields'] -            for pm in PropertyModel.objects.filter(available=True).order_by('order' -                                               ).all(): +            for pm in PropertyModel.objects.filter(available=True)\ +                                           .order_by('order').all():                  pm_name = pm.getNamedId()                  if pm_name not in main_fields:                      main_fields.append(pm_name) @@ -334,13 +334,14 @@ class MarkerAdmin(admin.ModelAdmin):          '''          Redirect to the marker modification form          ''' -        return managed_modified(self, request, -                            Marker.objects.filter(pk=item_id)) +        return managed_modified( +            self, request, Marker.objects.filter(pk=item_id))      def get_urls(self):          from django.conf.urls.defaults import patterns, url          urls = super(MarkerAdmin, self).get_urls() -        my_urls = patterns('', +        my_urls = patterns( +            '',              url(r'^admin_modification/(?P<item_id>\d+)/$',                  self.admin_site.admin_view(self.admin_modification),                  name='admin-modification'), @@ -372,25 +373,19 @@ class RouteAdmin(MarkerAdmin):      actions = [validate, disable, managed_modified, export_to_kml,                 export_to_shapefile, export_to_csv]      fieldsets = ((None, { -                    'fields': ['route', 'name', 'status', 'categories', -                               'start_date', 'end_date'] -                  }), -                 (_(u"Submitter"), { -                    'classes':('collapse',), -                    'fields': ('submiter_name', 'submiter_email', -                               'submiter_comment') -                 }), -                 (_(u"Import"), { -                    'classes':('collapse',), -                    'fields': ('modified_since_import', 'import_source', -                               'origin', 'license') -                 }), -                 (_(u"Associated items"), { -                    'classes':('collapse',), -                    'fields': ('ref_item', 'associated_file', -                               'has_associated_marker') -                 }), -                ) +        'fields': ['route', 'name', 'status', 'categories', 'start_date', +                   'end_date'] +    }), (_(u"Submitter"), { +        'classes': ('collapse',), +        'fields': ('submiter_name', 'submiter_email', 'submiter_comment') +    }), (_(u"Import"), { +        'classes': ('collapse',), +        'fields': ('modified_since_import', 'import_source', 'origin', +                   'license') +    }), (_(u"Associated items"), { +        'classes': ('collapse',), +        'fields': ('ref_item', 'associated_file', 'has_associated_marker') +    }),)      inlines = []      has_properties = False @@ -409,10 +404,12 @@ class RouteAdmin(MarkerAdmin):          return managed_modified(self, request,                                  Route.objects.filter(pk=item_id)) +  class LayerInline(admin.TabularInline):      model = AreaLayers      extra = 1 +  class AreaAdmin(admin.ModelAdmin):      """      Specialized the area field. @@ -422,6 +419,7 @@ class AreaAdmin(admin.ModelAdmin):      inlines = [LayerInline]      list_display = ['name', 'order', 'available', 'default'] +  def importing(modeladmin, request, queryset):      for importer in queryset:          importer.state = unicode(tasks.IMPORT_MESSAGES['import_pending'][0]) @@ -429,63 +427,72 @@ def importing(modeladmin, request, queryset):          tasks.importing(importer.pk)  importing.short_description = _(u"Import") +  def cancel_import(modeladmin, request, queryset):      for importer in queryset:          importer.state = tasks.IMPORT_MESSAGES['import_cancel'][0]          importer.save()  cancel_import.short_description = _(u"Cancel import") +  def cancel_export(modeladmin, request, queryset):      for importer in queryset:          importer.state = tasks.IMPORT_MESSAGES['export_cancel'][0]          importer.save()  cancel_export.short_description = _(u"Cancel export") +  def export_to_osm(modeladmin, request, queryset):      if queryset.count() > 1: -        messages.error(request, _(u"Can manage only one OSM export at a time.")) +        messages.error(request, +                       _(u"Can manage only one OSM export at a time."))          return HttpResponseRedirect(request.get_full_path())      importer = queryset.all()[0]      if Marker.objects.filter(categories__in=importer.categories.all(),                               status='I').count(): -        messages.error(request, _(u"You must treat all item with the status "\ +        messages.error(request, _(u"You must treat all item with the status "                                    u"\"imported\" before exporting to OSM."))          return HttpResponseRedirect(request.get_full_path())      if importer.importer_type != 'OSM': -        messages.error(request, _(u"Only OSM importer are managed for export.")) +        messages.error(request, +                       _(u"Only OSM importer are managed for export."))          return HttpResponseRedirect(request.get_full_path()) -    item_nb = Marker.objects.filter(status='A', -                categories=importer.categories.all(), -                not_for_osm=False, modified_since_import=True, -                route=None).count() +    item_nb = Marker.objects.filter( +        status='A', categories=importer.categories.all(), not_for_osm=False, +        modified_since_import=True, route=None).count()      if not item_nb: -        messages.error(request, _(u"No point of interest are concerned by this " -                                  u"export.")) +        messages.error(request, +                       _(u"No point of interest are concerned by this " +                         u"export."))          return HttpResponseRedirect(request.get_full_path())      form = None      if request.method == 'POST' and ( -      'email' in request.POST or 'api' in request.POST -      or 'password' in request.POST): +       'email' in request.POST or 'api' in request.POST +       or 'password' in request.POST):          form = OSMForm(request.POST)          if form.is_valid(): -            importer.state = unicode(tasks.IMPORT_MESSAGES['export_pending'][0]) +            importer.state = unicode( +                tasks.IMPORT_MESSAGES['export_pending'][0])              importer.save()              tasks.exporting(importer.pk, form.cleaned_data)              messages.success(request, _(u"Export launched."))              return HttpResponseRedirect(request.get_full_path())      else:          form = OSMForm() -    msg_item = _(u"%s point(s) of interest concerned by this export before "\ +    msg_item = _(u"%s point(s) of interest concerned by this export before "                   u"bounding box filter.") % item_nb -    return render_to_response('admin/chimere/osm_export.html', {'item':importer, -                                             'form':form, 'msg_item':msg_item}, +    return render_to_response('admin/chimere/osm_export.html', +                              {'item': importer, 'form': form, +                               'msg_item': msg_item},                                context_instance=RequestContext(request))  export_to_osm.short_description = _(u"Export to osm") +  class ImporterKeyInline(admin.TabularInline):      model = ImporterKeyCategories      extra = 1 +  class ImporterAdmin(admin.ModelAdmin):      form = ImporterAdminForm      list_display = ('importer_type', 'display_categories', 'default_name', @@ -496,14 +503,13 @@ class ImporterAdmin(admin.ModelAdmin):      inlines = [ImporterKeyInline]  admin.site.register(Importer, ImporterAdmin) +  class PageAdmin(admin.ModelAdmin):      """      Use the TinyMCE widget for the page content      """      form = PageAdminForm -class PropertyModelAdmin(admin.ModelAdmin): -    list_display = ('name', 'order', 'available')  class NewsAdmin(admin.ModelAdmin):      """ @@ -511,10 +517,12 @@ class NewsAdmin(admin.ModelAdmin):      """      form = NewsAdminForm +  class SubcatInline(admin.TabularInline):      model = SubCategory      extra = 1 +  class CategoryAdmin(admin.ModelAdmin):      """      Use the TinyMCE widget for categories @@ -523,20 +531,27 @@ class CategoryAdmin(admin.ModelAdmin):      inlines = [SubcatInline]      list_display = ['name', 'order'] +  class ColorInline(admin.TabularInline):      model = Color +  class ColorThemeAdmin(admin.ModelAdmin): -    inlines = [ColorInline,] +    inlines = [ColorInline] +  class IconAdmin(admin.ModelAdmin):      exclude = ['height', 'width']      list_display = ['name'] +  class PropertyModelChoiceInline(admin.TabularInline):      model = PropertyModelChoice      extra = 1 + +  class PropertyModelAdmin(admin.ModelAdmin): +    list_display = ('name', 'order', 'available')      inlines = [PropertyModelChoiceInline]  # register of differents database fields  | 
