diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-10-09 00:50:54 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-10-09 00:50:54 +0200 | 
| commit | 14b6a6c93003b422cb08c5313f64a228e743d2ac (patch) | |
| tree | cf8ef814f1cc3c305b6eb3e527518c4230bbd293 /chimere/admin.py | |
| parent | 80e20f22b4e79e79a5bb7d65f602f6642522ca3e (diff) | |
| download | Chimère-14b6a6c93003b422cb08c5313f64a228e743d2ac.tar.bz2 Chimère-14b6a6c93003b422cb08c5313f64a228e743d2ac.zip  | |
Admin: fix and improve moderation groups management
Diffstat (limited to 'chimere/admin.py')
| -rw-r--r-- | chimere/admin.py | 42 | 
1 files changed, 13 insertions, 29 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 42835a2..7663bd5 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -25,6 +25,7 @@ import datetime  from django import forms  from django.conf import settings  from django.contrib import admin +from django.db.models import Q  from django.http import HttpResponse  from django.shortcuts import render_to_response  from django.utils.translation import ugettext_lazy as _ @@ -38,25 +39,13 @@ from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\                            NewsAdminForm, CategoryAdminForm, ImporterAdminForm, \                            PictureFileAdminForm, MultimediaFileAdminForm  from chimere.models import Category, Icon, SubCategory, Marker, \ -     PropertyModel, News, Route, Area, ColorTheme, Color, MultimediaType, \ -     MultimediaFile, PictureFile, Importer, Layer, AreaLayers +     PropertyModel, News, Route, Area, ColorTheme, Color, \ +     MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\ +     get_areas_for_user, get_users_by_area  from chimere.utils import unicode_normalize, ShapefileManager, KMLManager,\                            CSVManager  from chimere.widgets import TextareaWidget -def get_areas_for_user(user): -    """ -    Getting subcats for a specific user -    """ -    perms = user.get_all_permissions() -    areas = set() -    prefix = 'chimere.change_area_' -    for perm in perms: -        if perm.startswith(prefix): -            area = Area.objects.get(urn=perm[len(prefix):]) -            areas.add(area) -    return areas -  def validate(modeladmin, request, queryset):      for item in queryset:          item.status = 'A' @@ -131,13 +120,14 @@ class MarkerAdmin(admin.ModelAdmin):          qs = self.model._default_manager.get_query_set()          if not request.user.is_superuser:              areas = get_areas_for_user(request.user) -            if areas: -                in_areas = " or ".join([area.getIncludeSql() for area in areas]) -                qs = qs.extra(where=[in_areas]) +            contained = Q() +            for area in areas: +                contained = contained | area.getIncludeMarker() +            qs = qs.filter(contained)          ordering = self.ordering or ()          if ordering:              qs = qs.order_by(*ordering) -        return qs +        return qs.distinct()  class RouteAdmin(admin.ModelAdmin):      """ @@ -155,10 +145,10 @@ class RouteAdmin(admin.ModelAdmin):          qs = self.model._default_manager.get_query_set()          if not request.user.is_superuser:              areas = get_areas_for_user(request.user) -            if areas: -                in_areas = " or ".join([area.getIncludeSql( -                           geometry='"chimere_route".route') for area in areas]) -                qs = qs.extra(where=[in_areas]) +            contained = Q() +            for area in areas: +                contained = contained | area.getIncludeRoute() +            qs = qs.filter(contained)          ordering = self.ordering or ()          if ordering:              qs = qs.order_by(*ordering) @@ -240,11 +230,6 @@ class ColorThemeAdmin(admin.ModelAdmin):  class IconAdmin(admin.ModelAdmin):      exclude = ['height', 'width'] -class MultimediaTypeAdmin(admin.ModelAdmin): -    search_fields = ("name",) -    list_display = ('name', 'media_type', 'mime_type', 'iframe', 'available') -    list_filter = ('media_type', 'available') -  # register of differents database fields  admin.site.register(News, NewsAdmin)  admin.site.register(Category, CategoryAdmin) @@ -254,5 +239,4 @@ admin.site.register(Route, RouteAdmin)  admin.site.register(PropertyModel)  admin.site.register(Area, AreaAdmin)  admin.site.register(ColorTheme, ColorThemeAdmin) -admin.site.register(MultimediaType, MultimediaTypeAdmin)  admin.site.register(Layer)  | 
