#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2008-2010 Étienne Loks # 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 . # See the file COPYING for details. """ Settings for administration pages """ from chimere import settings from chimere.main.models import Category, Icon, SubCategory, Marker, \ PropertyModel, News, Route, Area, ColorTheme, Color from chimere.main.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\ NewsAdminForm, CategoryAdminForm from chimere.main.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 = 'main.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 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='"main_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'] # 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(Route, RouteAdmin) admin.site.register(PropertyModel) admin.site.register(Area, AreaAdmin) admin.site.register(ColorTheme, ColorThemeAdmin)