summaryrefslogtreecommitdiff
path: root/chimere/admin.py
diff options
context:
space:
mode:
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
commit14b6a6c93003b422cb08c5313f64a228e743d2ac (patch)
treecf8ef814f1cc3c305b6eb3e527518c4230bbd293 /chimere/admin.py
parent80e20f22b4e79e79a5bb7d65f602f6642522ca3e (diff)
downloadChimè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.py42
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)