summaryrefslogtreecommitdiff
path: root/chimere/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/admin.py')
-rw-r--r--chimere/admin.py111
1 files changed, 73 insertions, 38 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index a93f96d..2672306 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -25,6 +25,8 @@ import datetime
from django import forms
from django.conf import settings
from django.contrib import admin, messages
+from django.contrib.auth.models import User, Group
+from django.contrib.auth.admin import GroupAdmin
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect
@@ -36,17 +38,30 @@ try:
except ImportError:
pass
-from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
+from chimere.forms import MarkerAdminForm, RouteAdminForm, MapAdminForm,\
NewsAdminForm, CategoryAdminForm, ImporterAdminForm, OSMForm, \
PageAdminForm, PictureFileAdminForm, MultimediaFileAdminForm
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
+ PropertyModel, News, Route, Map, ColorTheme, Color, \
+ MultimediaFile, PictureFile, Importer, Layer, MapLayers,\
+ PropertyModelChoice, MultimediaExtension, Page, MapUsers, MapGroups,\
+ get_maps_for_user, get_users_by_map, ImporterKeyCategories
from chimere.utils import unicode_normalize, ShapefileManager, KMLManager,\
CSVManager
+admin.site.unregister(Group)
+
+class UserInline(admin.StackedInline):
+ model = User.groups.through
+ verbose_name = _(u'User')
+ verbose_name_plural = _(u'User')
+ extra = 1
+
+class GroupAdmin(GroupAdmin):
+ inlines = [ UserInline, ]
+
+admin.site.register(Group, GroupAdmin)
+
def disable(modeladmin, request, queryset):
for item in queryset:
item.status = 'D'
@@ -84,14 +99,18 @@ def export_to_shapefile(modeladmin, request, queryset):
return response
export_to_shapefile.short_description = _(u"Export to Shapefile")
-def export_to_csv(modeladmin, request, queryset):
- u"""
- Export data to CSV
- """
- filename, result = CSVManager.export(queryset)
- response = HttpResponse(result, mimetype='text/csv')
- response['Content-Disposition'] = 'attachment; filename=%s' % filename
- return response
+def _export_to_csv(cols=[]):
+ def func(modeladmin, request, queryset):
+ u"""
+ Export data to CSV
+ """
+ filename, result = CSVManager.export(queryset, cols=cols)
+ response = HttpResponse(result, mimetype='text/csv')
+ response['Content-Disposition'] = 'attachment; filename=%s' % filename
+ return response
+ return func
+
+export_to_csv = _export_to_csv()
export_to_csv.short_description = _(u"Export to CSV")
def managed_modified(modeladmin, request, queryset):
@@ -192,7 +211,7 @@ class MarkerAdmin(admin.ModelAdmin):
form = MarkerAdminForm
fieldsets = ((None, {
'fields': ['point', 'name', 'status', 'categories',
- 'description', 'keywords', 'start_date', 'end_date']
+ 'description', 'weight', 'keywords', 'start_date', 'end_date']
}),
(_(u"Submitter"), {
'classes':('collapse',),
@@ -228,10 +247,10 @@ 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)
+ maps = get_maps_for_user(request.user)
contained = Q()
- for area in areas:
- contained = contained | area.getIncludeMarker()
+ for map in maps:
+ contained = contained | map.getIncludeMarker()
qs = qs.filter(contained)
ordering = self.ordering or ()
if ordering:
@@ -255,7 +274,6 @@ class MarkerAdmin(admin.ModelAdmin):
)
return my_urls + urls
-
class RouteAdmin(MarkerAdmin):
"""
Specialized the Route field.
@@ -294,10 +312,10 @@ 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)
+ maps = get_maps_for_user(request.user)
contained = Q()
- for area in areas:
- contained = contained | area.getIncludeRoute()
+ for map in maps:
+ contained = contained | map.getIncludeRoute()
qs = qs.filter(contained)
ordering = self.ordering or ()
if ordering:
@@ -312,16 +330,24 @@ class RouteAdmin(MarkerAdmin):
Route.objects.filter(pk=item_id))
class LayerInline(admin.TabularInline):
- model = AreaLayers
+ model = MapLayers
+ extra = 1
+
+class UserInline(admin.TabularInline):
+ model = MapUsers
+ extra = 1
+
+class GroupInline(admin.TabularInline):
+ model = MapGroups
extra = 1
-class AreaAdmin(admin.ModelAdmin):
+class MapAdmin(admin.ModelAdmin):
"""
- Specialized the area field.
+ Specialized the map field.
"""
- form = AreaAdminForm
+ form = MapAdminForm
exclude = ['upper_left_corner', 'lower_right_corner']
- inlines = [LayerInline]
+ inlines = [UserInline, GroupInline, LayerInline]
list_display = ['name', 'order', 'available', 'default']
def importing(modeladmin, request, queryset):
@@ -396,7 +422,6 @@ class ImporterAdmin(admin.ModelAdmin):
readonly_fields = ('state',)
actions = [importing, cancel_import, export_to_osm, cancel_export]
inlines = [ImporterKeyInline]
-admin.site.register(Importer, ImporterAdmin)
class PageAdmin(admin.ModelAdmin):
"""
@@ -441,15 +466,25 @@ class PropertyModelChoiceInline(admin.TabularInline):
class PropertyModelAdmin(admin.ModelAdmin):
inlines = [PropertyModelChoiceInline]
-# register of differents database fields
-admin.site.register(Page, PageAdmin)
-admin.site.register(News, NewsAdmin)
-admin.site.register(Category, CategoryAdmin)
-admin.site.register(Icon, IconAdmin)
-admin.site.register(Marker, MarkerAdmin)
-admin.site.register(Route, RouteAdmin)
-if not settings.CHIMERE_HIDE_PROPERTYMODEL:
+# only register if not yet registered: this mecanism allow to specialized admin
+# in projects
+registered_models = admin.site._registry.keys()
+for model, modeladmin in ((Importer, ImporterAdmin),
+ (Page, PageAdmin),
+ (News, NewsAdmin),
+ (Category, CategoryAdmin),
+ (Icon, IconAdmin),
+ (Marker, MarkerAdmin),
+ (Route, RouteAdmin),
+ (Map, MapAdmin),
+ (ColorTheme, ColorThemeAdmin),
+ (Layer, None)):
+ if model not in registered_models:
+ if modeladmin:
+ admin.site.register(model, modeladmin)
+ else:
+ admin.site.register(model)
+
+if PropertyModel not in registered_models and \
+ not settings.CHIMERE_HIDE_PROPERTYMODEL:
admin.site.register(PropertyModel, PropertyModelAdmin)
-admin.site.register(Area, AreaAdmin)
-admin.site.register(ColorTheme, ColorThemeAdmin)
-admin.site.register(Layer)