summaryrefslogtreecommitdiff
path: root/chimere/main/admin.py
diff options
context:
space:
mode:
authoretienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864>2010-03-14 18:35:23 +0000
committeretienne <etienne@9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864>2010-03-14 18:35:23 +0000
commit64acbb356f5a177dc5bd80e7ad493ee554ca0e09 (patch)
tree8d3708eb5a235581d598cdbe672524f1d453df35 /chimere/main/admin.py
parent63a9537e7deeb473145512fe8a080c62ea62c2c7 (diff)
downloadChimère-64acbb356f5a177dc5bd80e7ad493ee554ca0e09.tar.bz2
Chimère-64acbb356f5a177dc5bd80e7ad493ee554ca0e09.zip
Correct projection problems on database #87 - Filter categories for moderator by area #88
git-svn-id: http://www.peacefrogs.net/svn/chimere/trunk@72 9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864
Diffstat (limited to 'chimere/main/admin.py')
-rw-r--r--chimere/main/admin.py42
1 files changed, 41 insertions, 1 deletions
diff --git a/chimere/main/admin.py b/chimere/main/admin.py
index 195e7c4..31c9d5c 100644
--- a/chimere/main/admin.py
+++ b/chimere/main/admin.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2010 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
@@ -29,6 +29,19 @@ from chimere.main.widgets import TextareaWidget
from django.contrib import admin
+def get_areas_for_user(user):
+ """
+ Getting subcats for a specific user
+ """
+ perms = user.get_all_permissions()
+ areas = set()
+ prefix = 'main.change_area_'
+ for perm in perms:
+ if perm.startswith(prefix):
+ area = Area.objects.get(urn=perm[len(prefix):])
+ areas.add(area)
+ return areas
+
class MarkerAdmin(admin.ModelAdmin):
"""
Specialized the Point field.
@@ -38,6 +51,19 @@ class MarkerAdmin(admin.ModelAdmin):
list_filter = ('status', 'subcategory')
form = MarkerAdminForm
+ 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)
+ if not areas:
+ return self.model.objects.extra(where=['1=0'])
+ in_areas = " or ".join([area.getIncludeSql() for area in areas])
+ qs = qs.extra(where=[in_areas])
+ ordering = self.ordering or ()
+ if ordering:
+ qs = qs.order_by(*ordering)
+ return qs
+
class RouteAdmin(admin.ModelAdmin):
"""
Specialized the Route field.
@@ -47,6 +73,20 @@ class RouteAdmin(admin.ModelAdmin):
list_filter = ('status', 'subcategory')
form = RouteAdminForm
+ 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)
+ if not areas:
+ return self.model.objects.extra(where=['1=0'])
+ in_areas = " or ".join([area.getIncludeSql(
+ geometry='"main_route".route') for area in areas])
+ qs = qs.extra(where=[in_areas])
+ ordering = self.ordering or ()
+ if ordering:
+ qs = qs.order_by(*ordering)
+ return qs
+
class AreaAdmin(admin.ModelAdmin):
"""
Specialized the area field.