diff options
Diffstat (limited to 'chimere/admin.py')
-rw-r--r-- | chimere/admin.py | 142 |
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) |