summaryrefslogtreecommitdiff
path: root/chimere/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/admin.py')
-rw-r--r--chimere/admin.py142
1 files changed, 142 insertions, 0 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
new file mode 100644
index 0000000..2ad749c
--- /dev/null
+++ b/chimere/admin.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2008-2010 É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
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+"""
+Settings for administration pages
+"""
+
+from chimere import settings
+from chimere.models import Category, Icon, SubCategory, Marker, \
+ PropertyModel, News, Route, Area, ColorTheme, Color, RouteFile
+from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
+ NewsAdminForm, CategoryAdminForm
+from chimere.widgets import TextareaWidget
+
+from django.contrib import admin
+
+def get_areas_for_user(user):
+ """
+ Getting subcats for a specific user
+ """
+ perms = user.get_all_permissions()
+ areas = set()
+ prefix = 'chimere.change_area_'
+ for perm in perms:
+ if perm.startswith(prefix):
+ area = Area.objects.get(urn=perm[len(prefix):])
+ areas.add(area)
+ return areas
+
+class MarkerAdmin(admin.ModelAdmin):
+ """
+ Specialized the Point field.
+ """
+ search_fields = ("name",)
+ list_display = ('name', 'status')
+ list_filter = ('status', 'categories')
+ exclude = ['height', 'width']
+ if 'chimere.rss' in settings.INSTALLED_APPS:
+ exclude.append('available_date')
+ form = MarkerAdminForm
+
+ 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)
+ if areas:
+ in_areas = " or ".join([area.getIncludeSql() for area in areas])
+ qs = qs.extra(where=[in_areas])
+ ordering = self.ordering or ()
+ if ordering:
+ qs = qs.order_by(*ordering)
+ return qs
+
+class RouteAdmin(admin.ModelAdmin):
+ """
+ Specialized the Route field.
+ """
+ search_fields = ("name",)
+ list_display = ('name', 'status')
+ list_filter = ('status', 'categories')
+ exclude = ['height', 'width']
+ form = RouteAdminForm
+ readonly_fields = ('associated_file',)
+
+ 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)
+ if areas:
+ in_areas = " or ".join([area.getIncludeSql(
+ geometry='"chimere_route".route') for area in areas])
+ qs = qs.extra(where=[in_areas])
+ ordering = self.ordering or ()
+ if ordering:
+ qs = qs.order_by(*ordering)
+ return qs
+
+class AreaAdmin(admin.ModelAdmin):
+ """
+ Specialized the area field.
+ """
+ form = AreaAdminForm
+ exclude = ['upper_left_corner', 'lower_right_corner']
+
+class SubCategoryAdmin(admin.ModelAdmin):
+ """
+ Specialized the subcategory admin
+ """
+ list_display = ('name', 'category', 'available')
+ list_filter = ('category',)
+
+class NewsAdmin(admin.ModelAdmin):
+ """
+ Use the TinyMCE widget for the news content
+ """
+ form = NewsAdminForm
+
+class CategoryAdmin(admin.ModelAdmin):
+ """
+ Use the TinyMCE widget for categories
+ """
+ form = CategoryAdminForm
+
+class ColorInline(admin.TabularInline):
+ model = Color
+
+class ColorThemeAdmin(admin.ModelAdmin):
+ inlines = [ColorInline,]
+
+class IconAdmin(admin.ModelAdmin):
+ exclude = ['height', 'width']
+
+class RouteFileAdmin(admin.ModelAdmin):
+ list_display = ['name', 'file_type']
+
+# register of differents database fields
+admin.site.register(News, NewsAdmin)
+admin.site.register(Category, CategoryAdmin)
+admin.site.register(Icon, IconAdmin)
+admin.site.register(SubCategory, SubCategoryAdmin)
+admin.site.register(Marker, MarkerAdmin)
+admin.site.register(RouteFile, RouteFileAdmin)
+admin.site.register(Route, RouteAdmin)
+admin.site.register(PropertyModel)
+admin.site.register(Area, AreaAdmin)
+admin.site.register(ColorTheme, ColorThemeAdmin)