diff options
Diffstat (limited to 'chimere/admin.py')
-rw-r--r-- | chimere/admin.py | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 5a95ece..fb3b15c 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -231,6 +231,25 @@ class HasCategoriesListFilter(SimpleListFilter): return queryset.exclude(categories__isnull=True) return queryset + +def moderator_right(user, qs, geo_type='marker'): + if user.is_superuser: + return qs + areas = get_areas_for_user(user) + if areas: + contained = Q() + for area in areas: + if geo_type == 'marker': + contained = contained | area.getIncludeMarker() + elif geo_type == 'route': + contained = contained | area.getIncludeRoute() + qs = qs.filter(contained) + if user.subcategory_limit_to.count(): + qs = qs.filter(categories__in=SubCategory.objects.filter( + limited_for_user__user=user).all()) + return qs + + class MarkerAdmin(admin.ModelAdmin): """ Specialized the Point field. @@ -283,12 +302,7 @@ 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) - contained = Q() - for area in areas: - contained = contained | area.getIncludeMarker() - qs = qs.filter(contained) + qs = moderator_right(request.user, qs, geo_type='marker') ordering = self.ordering or () if ordering: qs = qs.order_by(*ordering) @@ -311,6 +325,7 @@ class MarkerAdmin(admin.ModelAdmin): ) return my_urls + urls + class RouteAdmin(MarkerAdmin): """ Specialized the Route field. @@ -348,12 +363,7 @@ 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) - contained = Q() - for area in areas: - contained = contained | area.getIncludeRoute() - qs = qs.filter(contained) + qs = moderator_right(request.user, qs, geo_type='route') ordering = self.ordering or () if ordering: qs = qs.order_by(*ordering) |