summaryrefslogtreecommitdiff
path: root/chimere/main/admin.py
diff options
context:
space:
mode:
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.