summaryrefslogtreecommitdiff
path: root/chimere/admin.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-02-21 17:13:43 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-02-21 17:13:43 +0100
commitfee4daab6598a3d6e51a31e2e70e059fc5419908 (patch)
treeabd3460120b64a054600cfbd04cf4ae18ee6ce30 /chimere/admin.py
parentc3f043e4937bd9ed7c68a38488e588866943f4c5 (diff)
downloadChimère-fee4daab6598a3d6e51a31e2e70e059fc5419908.tar.bz2
Chimère-fee4daab6598a3d6e51a31e2e70e059fc5419908.zip
Basic integration of polygons
Diffstat (limited to 'chimere/admin.py')
-rw-r--r--chimere/admin.py99
1 files changed, 68 insertions, 31 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index 3ea5b7b..e51bc3d 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2016 É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
@@ -20,6 +20,9 @@
"""
Settings for administration pages
"""
+
+from copy import deepcopy
+
from django.conf import settings
from django.contrib import admin, messages
from django.contrib.admin import SimpleListFilter
@@ -38,7 +41,8 @@ except ImportError:
from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
NewsAdminForm, CategoryAdminForm, ImporterAdminForm, OSMForm, \
- PageAdminForm, PictureFileAdminForm, MultimediaFileAdminForm
+ PageAdminForm, PictureFileAdminForm, MultimediaFileAdminForm, \
+ PolygonAdminForm
from chimere import models
from chimere.models import Category, Icon, SubCategory, Marker, \
PropertyModel, News, Route, Area, ColorTheme, Color, \
@@ -222,6 +226,15 @@ class AreaRouteListFilter(AreaMarkerListFilter):
return queryset.filter(area.getIncludeRoute())
+class AreaPolygonListFilter(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.getIncludePolygon())
+
+
class HasCategoriesListFilter(SimpleListFilter):
title = _('Has categories')
parameter_name = 'has_category'
@@ -275,6 +288,38 @@ def moderator_right(user, qs, geo_type='marker'):
limited_for_user__user=user).all())
return qs
+MARKER_FIELDSETS = [
+ [None, {
+ 'fields': ['point', 'name', 'status', 'categories', 'description',
+ 'keywords', 'start_date', 'end_date']
+ }],
+ [_(u"Submitter"), {
+ 'classes': ('collapse',),
+ 'fields': ('submiter_name', 'submiter_email', 'submiter_comment')
+ }],
+ [_(u"Import"), {
+ 'classes': ('collapse',),
+ 'fields': ('not_for_osm', 'modified_since_import', 'import_source',
+ 'origin', 'license')
+ }],
+ [_(u"Associated items"), {
+ 'classes': ('collapse',),
+ 'fields': ['ref_item', 'route']
+ }]
+]
+
+ROUTE_FIELDSETS = deepcopy(MARKER_FIELDSETS)
+ROUTE_FIELDSETS[0][1]['fields'][0] = 'route'
+ROUTE_FIELDSETS[0][1]['fields'].pop(ROUTE_FIELDSETS[0][1]['fields'].index(
+ 'description'))
+ROUTE_FIELDSETS[3][1]['fields'] = ('ref_item', 'associated_file',
+ 'has_associated_marker')
+POLYGON_FIELDSETS = deepcopy(MARKER_FIELDSETS)
+POLYGON_FIELDSETS[0][1]['fields'][0] = 'polygon'
+POLYGON_FIELDSETS[0][1]['fields'].pop(POLYGON_FIELDSETS[0][1]['fields'].index(
+ 'description'))
+POLYGON_FIELDSETS.pop(3)
+
class MarkerAdmin(admin.ModelAdmin):
"""
@@ -292,20 +337,7 @@ class MarkerAdmin(admin.ModelAdmin):
'submiter_email', 'submiter_comment', 'import_source',
'submiter_name', 'ref_item', 'modified_since_import', 'route']
form = MarkerAdminForm
- fieldsets = ((None, {
- 'fields': ['point', 'name', 'status', 'categories', 'description',
- 'keywords', 'start_date', 'end_date']
- }), (_(u"Submitter"), {
- 'classes': ('collapse',),
- 'fields': ('submiter_name', 'submiter_email', 'submiter_comment')
- }), (_(u"Import"), {
- 'classes': ('collapse',),
- 'fields': ('not_for_osm', 'modified_since_import', 'import_source',
- 'origin', 'license')
- }), (_(u"Associated items"), {
- 'classes': ('collapse',),
- 'fields': ('ref_item', 'route',)
- }),)
+ fieldsets = MARKER_FIELDSETS
inlines = [MultimediaInline, PictureInline]
has_properties = True
@@ -372,20 +404,7 @@ class RouteAdmin(MarkerAdmin):
readonly_fields = ('associated_file', 'ref_item', 'has_associated_marker')
actions = [validate, disable, managed_modified, export_to_kml,
export_to_shapefile, export_to_csv]
- fieldsets = ((None, {
- 'fields': ['route', 'name', 'status', 'categories', 'start_date',
- 'end_date']
- }), (_(u"Submitter"), {
- 'classes': ('collapse',),
- 'fields': ('submiter_name', 'submiter_email', 'submiter_comment')
- }), (_(u"Import"), {
- 'classes': ('collapse',),
- 'fields': ('modified_since_import', 'import_source', 'origin',
- 'license')
- }), (_(u"Associated items"), {
- 'classes': ('collapse',),
- 'fields': ('ref_item', 'associated_file', 'has_associated_marker')
- }),)
+ fieldsets = ROUTE_FIELDSETS
inlines = []
has_properties = False
@@ -405,6 +424,23 @@ class RouteAdmin(MarkerAdmin):
Route.objects.filter(pk=item_id))
+class PolygonAdmin(MarkerAdmin):
+ """
+ Specialized the Polygon field.
+ """
+ list_filter = ('status', AreaPolygonListFilter, 'categories')
+ form = PolygonAdminForm
+ actions = [validate, disable, managed_modified, export_to_kml,
+ export_to_shapefile, export_to_csv]
+ readonly_fields = [
+ 'submiter_email', 'submiter_comment', 'import_source',
+ 'submiter_name', 'ref_item', 'modified_since_import',]
+ exclude = ['submiter_session_key', 'import_key', 'import_version',
+ 'ref_item']
+ inlines = []
+ fieldsets = POLYGON_FIELDSETS
+
+
class LayerInline(admin.TabularInline):
model = AreaLayers
extra = 1
@@ -560,7 +596,8 @@ 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)
+admin.site.register(models.Route, RouteAdmin)
+admin.site.register(models.Polygon, PolygonAdmin)
if not settings.CHIMERE_HIDE_PROPERTYMODEL:
admin.site.register(PropertyModel, PropertyModelAdmin)
admin.site.register(Area, AreaAdmin)