diff options
Diffstat (limited to 'chimere/admin.py')
| -rw-r--r-- | chimere/admin.py | 111 | 
1 files changed, 73 insertions, 38 deletions
| diff --git a/chimere/admin.py b/chimere/admin.py index a93f96d..2672306 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -25,6 +25,8 @@ import datetime  from django import forms  from django.conf import settings  from django.contrib import admin, messages +from django.contrib.auth.models import User, Group +from django.contrib.auth.admin import GroupAdmin  from django.core.exceptions import ObjectDoesNotExist  from django.db.models import Q  from django.http import HttpResponse, HttpResponseRedirect @@ -36,17 +38,30 @@ try:  except ImportError:      pass -from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\ +from chimere.forms import MarkerAdminForm, RouteAdminForm, MapAdminForm,\       NewsAdminForm, CategoryAdminForm, ImporterAdminForm, OSMForm, \       PageAdminForm, PictureFileAdminForm, MultimediaFileAdminForm  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 +     PropertyModel, News, Route, Map, ColorTheme, Color, \ +     MultimediaFile, PictureFile, Importer, Layer, MapLayers,\ +     PropertyModelChoice, MultimediaExtension, Page, MapUsers, MapGroups,\ +     get_maps_for_user, get_users_by_map, ImporterKeyCategories  from chimere.utils import unicode_normalize, ShapefileManager, KMLManager,\                            CSVManager +admin.site.unregister(Group) + +class UserInline(admin.StackedInline): +    model = User.groups.through +    verbose_name = _(u'User') +    verbose_name_plural = _(u'User') +    extra = 1 + +class GroupAdmin(GroupAdmin): +    inlines = [ UserInline, ] + +admin.site.register(Group, GroupAdmin) +  def disable(modeladmin, request, queryset):      for item in queryset:          item.status = 'D' @@ -84,14 +99,18 @@ 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 -    """ -    filename, result = CSVManager.export(queryset) -    response = HttpResponse(result, mimetype='text/csv') -    response['Content-Disposition'] = 'attachment; filename=%s' % filename -    return response +def _export_to_csv(cols=[]): +    def func(modeladmin, request, queryset): +        u""" +        Export data to CSV +        """ +        filename, result = CSVManager.export(queryset, cols=cols) +        response = HttpResponse(result, mimetype='text/csv') +        response['Content-Disposition'] = 'attachment; filename=%s' % filename +        return response +    return func + +export_to_csv = _export_to_csv()  export_to_csv.short_description = _(u"Export to CSV")  def managed_modified(modeladmin, request, queryset): @@ -192,7 +211,7 @@ class MarkerAdmin(admin.ModelAdmin):      form = MarkerAdminForm      fieldsets = ((None, {                      'fields': ['point', 'name', 'status', 'categories', -                           'description', 'keywords', 'start_date', 'end_date'] +               'description', 'weight', 'keywords', 'start_date', 'end_date']                    }),                   (_(u"Submitter"), {                      'classes':('collapse',), @@ -228,10 +247,10 @@ class MarkerAdmin(admin.ModelAdmin):      def queryset(self, request):          qs = self.model._default_manager.get_query_set()          if not request.user.is_superuser: -            areas = get_areas_for_user(request.user) +            maps = get_maps_for_user(request.user)              contained = Q() -            for area in areas: -                contained = contained | area.getIncludeMarker() +            for map in maps: +                contained = contained | map.getIncludeMarker()              qs = qs.filter(contained)          ordering = self.ordering or ()          if ordering: @@ -255,7 +274,6 @@ class MarkerAdmin(admin.ModelAdmin):          )          return my_urls + urls -  class RouteAdmin(MarkerAdmin):      """      Specialized the Route field. @@ -294,10 +312,10 @@ class RouteAdmin(MarkerAdmin):      def queryset(self, request):          qs = self.model._default_manager.get_query_set()          if not request.user.is_superuser: -            areas = get_areas_for_user(request.user) +            maps = get_maps_for_user(request.user)              contained = Q() -            for area in areas: -                contained = contained | area.getIncludeRoute() +            for map in maps: +                contained = contained | map.getIncludeRoute()              qs = qs.filter(contained)          ordering = self.ordering or ()          if ordering: @@ -312,16 +330,24 @@ class RouteAdmin(MarkerAdmin):                                  Route.objects.filter(pk=item_id))  class LayerInline(admin.TabularInline): -    model = AreaLayers +    model = MapLayers +    extra = 1 + +class UserInline(admin.TabularInline): +    model = MapUsers +    extra = 1 + +class GroupInline(admin.TabularInline): +    model = MapGroups      extra = 1 -class AreaAdmin(admin.ModelAdmin): +class MapAdmin(admin.ModelAdmin):      """ -    Specialized the area field. +    Specialized the map field.      """ -    form = AreaAdminForm +    form = MapAdminForm      exclude = ['upper_left_corner', 'lower_right_corner'] -    inlines = [LayerInline] +    inlines = [UserInline, GroupInline, LayerInline]      list_display = ['name', 'order', 'available', 'default']  def importing(modeladmin, request, queryset): @@ -396,7 +422,6 @@ class ImporterAdmin(admin.ModelAdmin):      readonly_fields = ('state',)      actions = [importing, cancel_import, export_to_osm, cancel_export]      inlines = [ImporterKeyInline] -admin.site.register(Importer, ImporterAdmin)  class PageAdmin(admin.ModelAdmin):      """ @@ -441,15 +466,25 @@ class PropertyModelChoiceInline(admin.TabularInline):  class PropertyModelAdmin(admin.ModelAdmin):      inlines = [PropertyModelChoiceInline] -# register of differents database fields -admin.site.register(Page, PageAdmin) -admin.site.register(News, NewsAdmin) -admin.site.register(Category, CategoryAdmin) -admin.site.register(Icon, IconAdmin) -admin.site.register(Marker, MarkerAdmin) -admin.site.register(Route, RouteAdmin) -if not settings.CHIMERE_HIDE_PROPERTYMODEL: +# only register if not yet registered: this mecanism allow to specialized admin +# in projects +registered_models = admin.site._registry.keys() +for model, modeladmin in ((Importer, ImporterAdmin), +                          (Page, PageAdmin), +                          (News, NewsAdmin), +                          (Category, CategoryAdmin), +                          (Icon, IconAdmin), +                          (Marker, MarkerAdmin), +                          (Route, RouteAdmin), +                          (Map, MapAdmin), +                          (ColorTheme, ColorThemeAdmin), +                          (Layer, None)): +    if model not in registered_models: +        if modeladmin: +            admin.site.register(model, modeladmin) +        else: +            admin.site.register(model) + +if PropertyModel not in registered_models and \ +   not settings.CHIMERE_HIDE_PROPERTYMODEL:      admin.site.register(PropertyModel, PropertyModelAdmin) -admin.site.register(Area, AreaAdmin) -admin.site.register(ColorTheme, ColorThemeAdmin) -admin.site.register(Layer) | 
