summaryrefslogtreecommitdiff
path: root/chimere/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2016-01-05 22:17:44 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2016-01-05 22:17:44 +0100
commit9ce61bc6de5e98397e84c24a00d30002d4e04de5 (patch)
tree8ab9d19530ca3026fb21aff1993982f487dc7a28 /chimere/admin.py
parent2ca084384e6bf0596822938a607a189b507f60ed (diff)
parent89c4baf537a590dbe80c5f6a4c20f202c63ebb15 (diff)
downloadChimère-9ce61bc6de5e98397e84c24a00d30002d4e04de5.tar.bz2
Chimère-9ce61bc6de5e98397e84c24a00d30002d4e04de5.zip
Merge branch 'v2.2'
Conflicts: chimere/actions.py chimere/admin.py chimere/locale/fr/LC_MESSAGES/django.po chimere/models.py chimere/urls.py chimere/utils.py chimere/views.py
Diffstat (limited to 'chimere/admin.py')
-rw-r--r--chimere/admin.py156
1 files changed, 81 insertions, 75 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index 2672306..60d1141 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -25,8 +25,7 @@ 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.contrib.admin import SimpleListFilter
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
from django.http import HttpResponse, HttpResponseRedirect
@@ -38,30 +37,18 @@ try:
except ImportError:
pass
-from chimere.forms import MarkerAdminForm, RouteAdminForm, MapAdminForm,\
+from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
NewsAdminForm, CategoryAdminForm, ImporterAdminForm, OSMForm, \
PageAdminForm, PictureFileAdminForm, MultimediaFileAdminForm
+from chimere import models
from chimere.models import Category, Icon, SubCategory, Marker, \
- 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
+ PropertyModel, News, Route, Area, ColorTheme, Color, \
+ MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\
+ PropertyModelChoice, MultimediaExtension, Page,\
+ get_areas_for_user, get_users_by_area, 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'
@@ -99,18 +86,14 @@ def export_to_shapefile(modeladmin, request, queryset):
return response
export_to_shapefile.short_description = _(u"Export to Shapefile")
-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()
+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
export_to_csv.short_description = _(u"Export to CSV")
def managed_modified(modeladmin, request, queryset):
@@ -195,13 +178,53 @@ class MultimediaInline(admin.TabularInline):
ordering = ('order',)
form = MultimediaFileAdminForm
+class AreaMarkerListFilter(admin.SimpleListFilter):
+ title = _('area')
+ parameter_name = 'area'
+
+ def lookups(self, request, model_admin):
+ return [(area.urn, area.name) for area in models.Area.objects.all()]
+
+ def queryset(self, request, queryset):
+ try:
+ area = models.Area.objects.get(urn=self.value())
+ except models.Area.DoesNotExist:
+ return queryset
+ return queryset.filter(area.getIncludeMarker())
+
+class AreaRouteListFilter(AreaMarkerListFilter):
+ def queryset(self, request, queryset):
+ try:
+ area = models.Area.objects.get(urn=self.value())
+ except models.Area.DoesNotExist:
+ return queryset
+ return queryset.filter(area.getIncludeRoute())
+
+class HasCategoriesListFilter(SimpleListFilter):
+ title = _('Has categories')
+ parameter_name = 'has_category'
+
+ def lookups(self, request, model_admin):
+ return (
+ ('true', _('Yes')),
+ ('false', _('No')),
+ )
+
+ def queryset(self, request, queryset):
+ if self.value() == 'false':
+ return queryset.filter(categories__isnull=True)
+ elif self.value() == 'true':
+ return queryset.exclude(categories__isnull=True)
+ return queryset
+
class MarkerAdmin(admin.ModelAdmin):
"""
Specialized the Point field.
"""
search_fields = ("name",)
list_display = ('name', 'status', 'start_date', 'end_date')
- list_filter = ('status', 'categories', 'start_date', 'end_date')
+ list_filter = ('status', AreaMarkerListFilter, 'categories',
+ HasCategoriesListFilter, 'start_date', 'end_date')
actions = [validate, disable, managed_modified, export_to_kml,
export_to_shapefile, export_to_csv]
exclude = ['submiter_session_key', 'import_key', 'import_version',
@@ -211,7 +234,7 @@ class MarkerAdmin(admin.ModelAdmin):
form = MarkerAdminForm
fieldsets = ((None, {
'fields': ['point', 'name', 'status', 'categories',
- 'description', 'weight', 'keywords', 'start_date', 'end_date']
+ 'description', 'keywords', 'start_date', 'end_date']
}),
(_(u"Submitter"), {
'classes':('collapse',),
@@ -247,10 +270,10 @@ class MarkerAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = self.model._default_manager.get_query_set()
if not request.user.is_superuser:
- maps = get_maps_for_user(request.user)
+ areas = get_areas_for_user(request.user)
contained = Q()
- for map in maps:
- contained = contained | map.getIncludeMarker()
+ for area in areas:
+ contained = contained | area.getIncludeMarker()
qs = qs.filter(contained)
ordering = self.ordering or ()
if ordering:
@@ -280,7 +303,7 @@ class RouteAdmin(MarkerAdmin):
"""
search_fields = ("name",)
list_display = ('name', 'status')
- list_filter = ('status', 'categories')
+ list_filter = ('status', AreaRouteListFilter, 'categories')
exclude = ['height', 'width']
form = RouteAdminForm
readonly_fields = ('associated_file', 'ref_item', 'has_associated_marker')
@@ -312,10 +335,10 @@ class RouteAdmin(MarkerAdmin):
def queryset(self, request):
qs = self.model._default_manager.get_query_set()
if not request.user.is_superuser:
- maps = get_maps_for_user(request.user)
+ areas = get_areas_for_user(request.user)
contained = Q()
- for map in maps:
- contained = contained | map.getIncludeRoute()
+ for area in areas:
+ contained = contained | area.getIncludeRoute()
qs = qs.filter(contained)
ordering = self.ordering or ()
if ordering:
@@ -330,24 +353,16 @@ class RouteAdmin(MarkerAdmin):
Route.objects.filter(pk=item_id))
class LayerInline(admin.TabularInline):
- model = MapLayers
- extra = 1
-
-class UserInline(admin.TabularInline):
- model = MapUsers
- extra = 1
-
-class GroupInline(admin.TabularInline):
- model = MapGroups
+ model = AreaLayers
extra = 1
-class MapAdmin(admin.ModelAdmin):
+class AreaAdmin(admin.ModelAdmin):
"""
- Specialized the map field.
+ Specialized the area field.
"""
- form = MapAdminForm
+ form = AreaAdminForm
exclude = ['upper_left_corner', 'lower_right_corner']
- inlines = [UserInline, GroupInline, LayerInline]
+ inlines = [LayerInline]
list_display = ['name', 'order', 'available', 'default']
def importing(modeladmin, request, queryset):
@@ -422,6 +437,7 @@ 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):
"""
@@ -466,25 +482,15 @@ class PropertyModelChoiceInline(admin.TabularInline):
class PropertyModelAdmin(admin.ModelAdmin):
inlines = [PropertyModelChoiceInline]
-# 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:
+# 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:
admin.site.register(PropertyModel, PropertyModelAdmin)
+admin.site.register(Area, AreaAdmin)
+admin.site.register(ColorTheme, ColorThemeAdmin)
+admin.site.register(Layer)