summaryrefslogtreecommitdiff
path: root/chimere/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-01-23 21:31:53 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-01-23 21:31:53 +0100
commit93a9a0b569c9d92a0a9df3becbe39dc10a566cb6 (patch)
treeb9f8fd47ae36170af2dfb1e988de335156184f78 /chimere/admin.py
parentb834a47ecafc41d5bafe38e7b085b2845406a47c (diff)
parent924f470f4e137b1b178e852ec30bffce01aaad24 (diff)
downloadChimère-93a9a0b569c9d92a0a9df3becbe39dc10a566cb6.tar.bz2
Chimère-93a9a0b569c9d92a0a9df3becbe39dc10a566cb6.zip
Merge branch 'v2.2'
Diffstat (limited to 'chimere/admin.py')
-rw-r--r--chimere/admin.py56
1 files changed, 40 insertions, 16 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index 60d1141..fb3b15c 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -20,12 +20,11 @@
"""
Settings for administration pages
"""
-import datetime
-
-from django import forms
from django.conf import settings
from django.contrib import admin, messages
from django.contrib.admin import SimpleListFilter
+from django.contrib.auth.admin import UserAdmin as VanillaUserAdmin
+from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect
@@ -45,7 +44,8 @@ from chimere.models import Category, Icon, SubCategory, Marker, \
PropertyModel, News, Route, Area, ColorTheme, Color, \
MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\
PropertyModelChoice, MultimediaExtension, Page,\
- get_areas_for_user, get_users_by_area, ImporterKeyCategories
+ get_areas_for_user, get_users_by_area, ImporterKeyCategories,\
+ SubCategoryUserLimit
from chimere.utils import unicode_normalize, ShapefileManager, KMLManager,\
CSVManager
@@ -164,6 +164,20 @@ def managed_modified(modeladmin, request, queryset):
context_instance=RequestContext(request))
managed_modified.short_description = _(u"Managed modified items")
+
+class CatLimitInline(admin.TabularInline):
+ model = SubCategoryUserLimit
+ extra = 5
+
+
+class UserAdmin(VanillaUserAdmin):
+ list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
+ inlines = (CatLimitInline,)
+
+admin.site.unregister(User)
+admin.site.register(User, UserAdmin)
+
+
class PictureInline(admin.TabularInline):
model = PictureFile
extra = 1
@@ -217,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.
@@ -269,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)
@@ -297,6 +325,7 @@ class MarkerAdmin(admin.ModelAdmin):
)
return my_urls + urls
+
class RouteAdmin(MarkerAdmin):
"""
Specialized the Route field.
@@ -334,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)