diff options
Diffstat (limited to 'chimere')
| -rw-r--r-- | chimere/actions.py (renamed from chimere/main/actions.py) | 0 | ||||
| -rw-r--r-- | chimere/admin.py (renamed from chimere/main/admin.py) | 14 | ||||
| -rw-r--r-- | chimere/default_settings.py | 160 | ||||
| -rw-r--r-- | chimere/forms.py (renamed from chimere/main/forms.py) | 8 | ||||
| -rwxr-xr-x | chimere/manage.py | 11 | ||||
| -rw-r--r-- | chimere/migrations/0001_initial.py | 341 | ||||
| -rw-r--r-- | chimere/migrations/0002_rename_models.py | 154 | ||||
| -rw-r--r-- | chimere/migrations/__init__.py (renamed from chimere/main/__init__.py) | 0 | ||||
| -rw-r--r-- | chimere/models.py (renamed from chimere/main/models.py) | 179 | ||||
| -rw-r--r-- | chimere/rss/__init__.py | 1 | ||||
| -rw-r--r-- | chimere/rss/feeds.py | 230 | ||||
| -rw-r--r-- | chimere/rss/templates/rss.html | 73 | ||||
| -rw-r--r-- | chimere/rss/templates/rss_descr.html | 8 | ||||
| -rw-r--r-- | chimere/rss/templates/rss_title.html | 2 | ||||
| -rw-r--r-- | chimere/rss/urls.py | 42 | ||||
| -rw-r--r-- | chimere/rss/views.py | 140 | ||||
| -rw-r--r-- | chimere/templatetags/__init__.py (renamed from chimere/main/templatetags/__init__.py) | 0 | ||||
| -rw-r--r-- | chimere/templatetags/sanitize.py (renamed from chimere/main/templatetags/sanitize.py) | 0 | ||||
| -rw-r--r-- | chimere/templatetags/unlocalize_point.py (renamed from chimere/main/templatetags/unlocalize_point.py) | 0 | ||||
| -rw-r--r-- | chimere/urls.py | 82 | ||||
| -rw-r--r-- | chimere/views.py (renamed from chimere/main/views.py) | 8 | ||||
| -rw-r--r-- | chimere/widgets.py (renamed from chimere/main/widgets.py) | 11 |
22 files changed, 661 insertions, 803 deletions
diff --git a/chimere/main/actions.py b/chimere/actions.py index 6f82028..6f82028 100644 --- a/chimere/main/actions.py +++ b/chimere/actions.py diff --git a/chimere/main/admin.py b/chimere/admin.py index c3333c7..2ad749c 100644 --- a/chimere/main/admin.py +++ b/chimere/admin.py @@ -22,11 +22,11 @@ Settings for administration pages """ from chimere import settings -from chimere.main.models import Category, Icon, SubCategory, Marker, \ - PropertyModel, News, Route, Area, ColorTheme, Color, RouteFile -from chimere.main.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\ - NewsAdminForm, CategoryAdminForm -from chimere.main.widgets import TextareaWidget +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 @@ -36,7 +36,7 @@ def get_areas_for_user(user): """ perms = user.get_all_permissions() areas = set() - prefix = 'main.change_area_' + prefix = 'chimere.change_area_' for perm in perms: if perm.startswith(prefix): area = Area.objects.get(urn=perm[len(prefix):]) @@ -84,7 +84,7 @@ class RouteAdmin(admin.ModelAdmin): areas = get_areas_for_user(request.user) if areas: in_areas = " or ".join([area.getIncludeSql( - geometry='"main_route".route') for area in areas]) + geometry='"chimere_route".route') for area in areas]) qs = qs.extra(where=[in_areas]) ordering = self.ordering or () if ordering: diff --git a/chimere/default_settings.py b/chimere/default_settings.py index 5a1d1fe..fc5177a 100644 --- a/chimere/default_settings.py +++ b/chimere/default_settings.py @@ -1,158 +1,46 @@ -#!/usr/bin/env python # -*- coding: utf-8 -*- - -# Django settings for chimere project. -PROJECT_NAME = u'Chimère' - -ROOT_PATH = '/var/local/django/chimere/' - -SERVER_URL = "http://www.peacefrogs.net/" -EXTRA_URL = 'chimere/' -BASE_URL = SERVER_URL + EXTRA_URL -EMAIL_HOST = 'localhost' - -TINYMCE_URL = SERVER_URL + 'tinymce/' -JQUERY_URL = SERVER_URL + 'jquery/jquery-1.4.4.min.js' -GPSBABEL = '/usr/bin/gpsbabel' -GPSBABEL_OPTIONS = 'simplify,crosstrack,error=0.005k' # simplify with an - # error of 5 meters -#GPSBABEL_OPTIONS = 'simplify,count=100' - -## chimere specific ## -# center of the map -DEFAULT_CENTER = (-1.679444, 48.114722) +""" +Here are the default settings for the Chimere app. +Feel free to set these settings in your project, they will override these defaults. +""" +# The height and width of the POI icons +CHIMERE_ICON_HEIGHT = 20 +CHIMERE_ICON_WIDTH = 20 +# The offset of the POI icons +CHIMERE_ICON_OFFSET_X = 0 +CHIMERE_ICON_OFFSET_Y = 0 + +# default center of the map +CHIMERE_DEFAULT_CENTER = (2.49, 48.7) +# Default zoom level +CHIMERE_DEFAULT_ZOOM = 10 # projection used by the main map # most public map providers use spherical mercator : 900913 -EPSG_PROJECTION = 900913 +CHIMERE_EPSG_PROJECTION = 900913 # projection displayed to the end user by openlayers # chimere use the same projection to save its data in the database -EPSG_DISPLAY_PROJECTION = 4326 +CHIMERE_EPSG_DISPLAY_PROJECTION = 4326 # to restrict the map to a defined bounding box set it here # (left, bottom, right, top) -RESTRICTED_EXTENT = None +CHIMERE_RESTRICTED_EXTENT = None # dynamic load of categories on the main map -DYNAMIC_CATEGORIES = False +CHIMERE_DYNAMIC_CATEGORIES = False # display of shortcuts for areas -DISPLAY_AREAS = True +CHIMERE_DISPLAY_AREAS = True # specific css for areas -CSS_AREAS = True +CHIMERE_CSS_AREAS = False # number of day before an event to display # if equal to 0: disable event management # if you change this value from 0 to a value in a production environnement # don't forget to run the upgrade.py script to create appropriate fields in # the database -DAYS_BEFORE_EVENT = 30 +CHIMERE_DAYS_BEFORE_EVENT = 30 # default id category to check on the map -DEFAULT_CATEGORIES = [1] +CHIMERE_DEFAULT_CATEGORIES = [1] # JS definition of the main map cf. OpenLayers documentation for more details #MAP_LAYER = '''new OpenLayers.Layer.OSM.CycleMap("Cycle map", { #displayOutsideMaxExtent: true, wrapDateLine: true})''' # OSM cyclemap -MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map - -DEBUG = True -TEMPLATE_DEBUG = DEBUG - -ADMINS = ( - # ('Your Name', 'your_email@domain.com'), -) - -MANAGERS = ADMINS - -DATABASES = { - 'default': { - 'NAME': 'ratatouille', - 'ENGINE': 'django.contrib.gis.db.backends.postgis', - 'HOST': 'localhost', - 'PORT': '5432', - 'USER': 'ratatouille', - 'PASSWORD': 'wiki', - }, -} - -# Local time zone for this installation. Choices can be found here: -# http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE -# although not all variations may be possible on all operating systems. -# If running in a Windows environment this must be set to the same as your -# system time zone. -TIME_ZONE = 'Europe/Paris' - -# Language code for this installation. All choices can be found here: -# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes -# http://blogs.law.harvard.edu/tech/stories/storyReader$15 -LANGUAGE_CODE = 'fr-fr' - -SITE_ID = 1 - -# If you set this to False, Django will make some optimizations so as not -# to load the internationalization machinery. -USE_I18N = True -USE_L10N = True - -# Absolute path to the directory that holds media. -# Example: "/home/media/media.lawrence.com/" -MEDIA_ROOT = ROOT_PATH + 'static/' - -# URL that handles the media served from MEDIA_ROOT. -# Example: "http://media.lawrence.com" -MEDIA_URL = '/' + EXTRA_URL + 'static/' - -# share with -SHARE_NETWORKS = ( -("Email", 'mailto:?subject=%(text)s&body=%(url)s', - MEDIA_URL + 'icons/email.png'), -("Facebook", 'http://www.facebook.com/sharer.php?t=%(text)s&u=%(url)s', - MEDIA_URL + 'icons/facebook.png'), -("Twitter", 'http://twitter.com/home?status=%(text)s %(url)s', - MEDIA_URL + 'icons/twitter.png'), -("Identi.ca", 'http://identi.ca/index.php?action=newnotice&status_textarea=%(text)s %(url)s', - MEDIA_URL + 'icons/identica.png'), -) - -# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a -# trailing slash. -# Examples: "http://foo.com/media/", "/media/". -ADMIN_MEDIA_PREFIX = '/' + EXTRA_URL + 'media/' - -# Make this unique, and don't share it with anybody. -SECRET_KEY = 'achanger_!ToChange!' - -# List of callables that know how to import templates from various sources. -TEMPLATE_LOADERS = ( - 'django.template.loaders.filesystem.load_template_source', - 'django.template.loaders.app_directories.load_template_source', -# 'django.template.loaders.eggs.load_template_source', -) - -MIDDLEWARE_CLASSES = ( - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.middleware.doc.XViewMiddleware', -) - -ROOT_URLCONF = 'chimere.urls' - -TEMPLATE_DIRS = [ - # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". - # Always use forward slashes, even on Windows. - # Don't forget to use absolute paths, not relative paths. - ROOT_PATH + 'templates', -] - -INSTALLED_APPS = ( - 'django.contrib.auth', - 'django.contrib.admin', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - 'chimere.main', - # activate it if you want to use migration scripts - 'chimere.scripts', - # activate it if you want to use RSS feeds - 'chimere.rss' -) +CHIMERE_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map -if 'chimere.rss' in INSTALLED_APPS: - TEMPLATE_DIRS.append(ROOT_PATH + 'rss/templates') diff --git a/chimere/main/forms.py b/chimere/forms.py index 20027ee..3691408 100644 --- a/chimere/main/forms.py +++ b/chimere/forms.py @@ -29,9 +29,9 @@ from django.core.mail import EmailMessage, BadHeaderError from chimere import settings -from chimere.main.models import Marker, Route, PropertyModel, Property, Area,\ +from chimere.models import Marker, Route, PropertyModel, Property, Area,\ News, Category, SubCategory, RouteFile -from chimere.main.widgets import AreaField, PointField, TextareaWidget +from chimere.widgets import AreaField, PointField, TextareaWidget from datetime import timedelta, datetime, tzinfo @@ -305,8 +305,8 @@ class AreaAdminForm(forms.ModelForm): new_area.upper_left_corner = 'POINT(%s %s)' % (area[0][0], area[0][1]) new_area.lower_right_corner = 'POINT(%s %s)' % (area[1][0], area[1][1]) - content_type = ContentType.objects.get(app_label="main", - model="area") + content_type = ContentType.objects.get(app_label="chimere", + model="area") if new_area.urn: mnemo = 'change_area_' + new_area.urn perm = Permission.objects.filter(codename=mnemo) diff --git a/chimere/manage.py b/chimere/manage.py deleted file mode 100755 index bcdd55e..0000000 --- a/chimere/manage.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/python -from django.core.management import execute_manager -try: - import settings # Assumed to be in the same directory. -except ImportError: - import sys - sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) - sys.exit(1) - -if __name__ == "__main__": - execute_manager(settings) diff --git a/chimere/migrations/0001_initial.py b/chimere/migrations/0001_initial.py new file mode 100644 index 0000000..3ba693f --- /dev/null +++ b/chimere/migrations/0001_initial.py @@ -0,0 +1,341 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'News' + db.create_table('main_news', ( + ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('date', self.gf('django.db.models.fields.DateField')(auto_now_add=True, blank=True)), + ('content', self.gf('django.db.models.fields.TextField')()), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=150)), + )) + db.send_create_signal('chimere', ['News']) + + # Adding model 'TinyUrl' + db.create_table('main_tinyurl', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('parameters', self.gf('django.db.models.fields.CharField')(max_length=500)), + )) + db.send_create_signal('chimere', ['TinyUrl']) + + # Adding model 'ColorTheme' + db.create_table('main_colortheme', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + )) + db.send_create_signal('chimere', ['ColorTheme']) + + # Adding model 'Color' + db.create_table('main_color', ( + ('code', self.gf('django.db.models.fields.CharField')(max_length=6)), + ('color_theme', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.ColorTheme'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('order', self.gf('django.db.models.fields.IntegerField')()), + )) + db.send_create_signal('chimere', ['Color']) + + # Adding model 'Category' + db.create_table('main_category', ( + ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('order', self.gf('django.db.models.fields.IntegerField')()), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + )) + db.send_create_signal('chimere', ['Category']) + + # Adding model 'Icon' + db.create_table('main_icon', ( + ('width', self.gf('django.db.models.fields.IntegerField')()), + ('image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)), + ('height', self.gf('django.db.models.fields.IntegerField')()), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + )) + db.send_create_signal('chimere', ['Icon']) + + # Adding model 'SubCategory' + db.create_table('main_subcategory', ( + ('category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.Category'])), + ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + ('order', self.gf('django.db.models.fields.IntegerField')()), + ('item_type', self.gf('django.db.models.fields.CharField')(max_length=1)), + ('color_theme', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.ColorTheme'], null=True, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('icon', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.Icon'])), + )) + db.send_create_signal('chimere', ['SubCategory']) + + # Adding M2M table for field areas on 'SubCategory' + db.create_table('main_subcategory_areas', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('subcategory', models.ForeignKey(orm['chimere.subcategory'], null=False)), + ('area', models.ForeignKey(orm['chimere.area'], null=False)) + )) + db.create_unique('main_subcategory_areas', ['subcategory_id', 'area_id']) + + # Adding model 'Marker' + db.create_table('main_marker', ( + ('status', self.gf('django.db.models.fields.CharField')(max_length=1)), + ('picture', self.gf('django.db.models.fields.files.ImageField')(max_length=100, null=True, blank=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + ('end_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('point', self.gf('chimere.widgets.PointField')()), + ('route', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.Route'], null=True, blank=True)), + ('height', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + ('width', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + ('start_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal('chimere', ['Marker']) + + # Adding M2M table for field categories on 'Marker' + db.create_table('main_marker_categories', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('marker', models.ForeignKey(orm['chimere.marker'], null=False)), + ('subcategory', models.ForeignKey(orm['chimere.subcategory'], null=False)) + )) + db.create_unique('main_marker_categories', ['marker_id', 'subcategory_id']) + + # Adding model 'RouteFile' + db.create_table('main_routefile', ( + ('file_type', self.gf('django.db.models.fields.CharField')(max_length=1)), + ('raw_file', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + ('simplified_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, null=True, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + )) + db.send_create_signal('chimere', ['RouteFile']) + + # Adding model 'Route' + db.create_table('main_route', ( + ('status', self.gf('django.db.models.fields.CharField')(max_length=1)), + ('picture', self.gf('django.db.models.fields.files.ImageField')(max_length=100, null=True, blank=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + ('end_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('route', self.gf('chimere.widgets.RouteField')()), + ('height', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + ('width', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + ('associated_file', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.RouteFile'], null=True, blank=True)), + ('start_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + )) + db.send_create_signal('chimere', ['Route']) + + # Adding M2M table for field categories on 'Route' + db.create_table('main_route_categories', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('route', models.ForeignKey(orm['chimere.route'], null=False)), + ('subcategory', models.ForeignKey(orm['chimere.subcategory'], null=False)) + )) + db.create_unique('main_route_categories', ['route_id', 'subcategory_id']) + + # Adding model 'Area' + db.create_table('chimere_area', ( + ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + ('urn', self.gf('django.db.models.fields.SlugField')(db_index=True, unique=True, max_length=50, blank=True)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('upper_left_corner', self.gf('django.contrib.gis.db.models.fields.PointField')(default='POINT(0 0)')), + ('order', self.gf('django.db.models.fields.IntegerField')()), + ('lower_right_corner', self.gf('django.contrib.gis.db.models.fields.PointField')(default='POINT(0 0)')), + )) + db.send_create_signal('chimere', ['Area']) + + # Adding model 'PropertyModel' + db.create_table('main_propertymodel', ( + ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), + ('order', self.gf('django.db.models.fields.IntegerField')()), + ('type', self.gf('django.db.models.fields.CharField')(max_length=1)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=150)), + )) + db.send_create_signal('chimere', ['PropertyModel']) + + # Adding model 'Property' + db.create_table('main_property', ( + ('marker', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.Marker'])), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('value', self.gf('django.db.models.fields.TextField')()), + ('propertymodel', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.PropertyModel'])), + )) + db.send_create_signal('chimere', ['Property']) + + + def backwards(self, orm): + + # Deleting model 'News' + db.delete_table('main_news') + + # Deleting model 'TinyUrl' + db.delete_table('main_tinyurl') + + # Deleting model 'ColorTheme' + db.delete_table('main_colortheme') + + # Deleting model 'Color' + db.delete_table('main_color') + + # Deleting model 'Category' + db.delete_table('main_category') + + # Deleting model 'Icon' + db.delete_table('main_icon') + + # Deleting model 'SubCategory' + db.delete_table('main_subcategory') + + # Removing M2M table for field areas on 'SubCategory' + db.delete_table('main_subcategory_areas') + + # Deleting model 'Marker' + db.delete_table('main_marker') + + # Removing M2M table for field categories on 'Marker' + db.delete_table('main_marker_categories') + + # Deleting model 'RouteFile' + db.delete_table('main_routefile') + + # Deleting model 'Route' + db.delete_table('main_route') + + # Removing M2M table for field categories on 'Route' + db.delete_table('main_route_categories') + + # Deleting model 'Area' + db.delete_table('chimere_area') + + # Deleting model 'PropertyModel' + db.delete_table('main_propertymodel') + + # Deleting model 'Property' + db.delete_table('main_property') + + + models = { + 'chimere.area': { + 'Meta': {'object_name': 'Area'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}), + 'urn': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'unique': 'True', 'max_length': '50', 'blank': 'True'}) + }, + 'chimere.category': { + 'Meta': {'object_name': 'Category', 'db_table': "'main_category'"}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.color': { + 'Meta': {'object_name': 'Color', 'db_table': "'main_color'"}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}), + 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.colortheme': { + 'Meta': {'object_name': 'ColorTheme', 'db_table': "'main_colortheme'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + 'chimere.icon': { + 'Meta': {'object_name': 'Icon', 'db_table': "'main_icon'"}, + 'height': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'width': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.marker': { + 'Meta': {'object_name': 'Marker', 'db_table': "'main_marker'"}, + 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'point': ('chimere.widgets.PointField', [], {}), + 'route': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Route']", 'null': 'True', 'blank': 'True'}), + 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'chimere.news': { + 'Meta': {'object_name': 'News', 'db_table': "'main_news'"}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content': ('django.db.models.fields.TextField', [], {}), + 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + 'chimere.property': { + 'Meta': {'object_name': 'Property', 'db_table': "'main_property'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}), + 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}), + 'value': ('django.db.models.fields.TextField', [], {}) + }, + 'chimere.propertymodel': { + 'Meta': {'object_name': 'PropertyModel', 'db_table': "'main_propertymodel'"}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'}) + }, + 'chimere.route': { + 'Meta': {'object_name': 'Route', 'db_table': "'main_route'"}, + 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}), + 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'route': ('chimere.widgets.RouteField', [], {}), + 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'chimere.routefile': { + 'Meta': {'object_name': 'RouteFile', 'db_table': "'main_routefile'"}, + 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}) + }, + 'chimere.subcategory': { + 'Meta': {'object_name': 'SubCategory', 'db_table': "'main_subcategory'"}, + 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'to': "orm['chimere.Area']"}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}), + 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}), + 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.tinyurl': { + 'Meta': {'object_name': 'TinyUrl', 'db_table': "'main_tinyurl'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'}) + } + } + + complete_apps = ['chimere'] diff --git a/chimere/migrations/0002_rename_models.py b/chimere/migrations/0002_rename_models.py new file mode 100644 index 0000000..84a91b8 --- /dev/null +++ b/chimere/migrations/0002_rename_models.py @@ -0,0 +1,154 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + db.rename_table('main_news', 'chimere_news') + db.rename_table('main_tinyurl', 'chimere_tinyurl') + db.rename_table('main_colortheme', 'chimere_colortheme') + db.rename_table('main_color', 'chimere_color') + db.rename_table('main_category', 'chimere_category') + db.rename_table('main_icon', 'chimere_icon') + db.rename_table('main_subcategory', 'chimere_subcategory') + db.rename_table('main_marker', 'chimere_marker') + db.rename_table('main_routefile', 'chimere_routefile') + db.rename_table('main_route', 'chimere_route') + db.rename_table('main_propertymodel', 'chimere_propertymodel') + db.rename_table('main_property', 'chimere_property') + + def backwards(self, orm): + db.rename_table('chimere_news', 'main_news') + db.rename_table('chimere_tinyurl', 'main_tinyurl') + db.rename_table('chimere_colortheme', 'main_colortheme') + db.rename_table('chimere_color', '_color') + db.rename_table('chimere_category', 'main_category') + db.rename_table('chimere_icon', 'main_icon') + db.rename_table('chimere_subcategory', 'main_subcategory') + db.rename_table('chimere_marker', 'main_marker') + db.rename_table('chimere_routefile', 'main_routefile') + db.rename_table('chimere_route', 'main_route') + db.rename_table('chimere_propertymodel', 'main_propertymodel') + db.rename_table('chimere_property', 'main_property') + + models = { + 'chimere.area': { + 'Meta': {'object_name': 'Area'}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}), + 'urn': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'unique': 'True', 'max_length': '50', 'blank': 'True'}) + }, + 'chimere.category': { + 'Meta': {'object_name': 'Category', 'db_table': "'main_category'"}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.color': { + 'Meta': {'object_name': 'Color', 'db_table': "'main_color'"}, + 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}), + 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.colortheme': { + 'Meta': {'object_name': 'ColorTheme', 'db_table': "'main_colortheme'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + 'chimere.icon': { + 'Meta': {'object_name': 'Icon', 'db_table': "'main_icon'"}, + 'height': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'width': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.marker': { + 'Meta': {'object_name': 'Marker', 'db_table': "'main_marker'"}, + 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'point': ('chimere.widgets.PointField', [], {}), + 'route': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Route']", 'null': 'True', 'blank': 'True'}), + 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'chimere.news': { + 'Meta': {'object_name': 'News', 'db_table': "'main_news'"}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'content': ('django.db.models.fields.TextField', [], {}), + 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}) + }, + 'chimere.property': { + 'Meta': {'object_name': 'Property', 'db_table': "'main_property'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}), + 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}), + 'value': ('django.db.models.fields.TextField', [], {}) + }, + 'chimere.propertymodel': { + 'Meta': {'object_name': 'PropertyModel', 'db_table': "'main_propertymodel'"}, + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'}) + }, + 'chimere.route': { + 'Meta': {'object_name': 'Route', 'db_table': "'main_route'"}, + 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}), + 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}), + 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'route': ('chimere.widgets.RouteField', [], {}), + 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) + }, + 'chimere.routefile': { + 'Meta': {'object_name': 'RouteFile', 'db_table': "'main_routefile'"}, + 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), + 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}) + }, + 'chimere.subcategory': { + 'Meta': {'object_name': 'SubCategory', 'db_table': "'main_subcategory'"}, + 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'to': "orm['chimere.Area']"}), + 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}), + 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}), + 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + 'chimere.tinyurl': { + 'Meta': {'object_name': 'TinyUrl', 'db_table': "'main_tinyurl'"}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'}) + } + } + + complete_apps = ['chimere'] diff --git a/chimere/main/__init__.py b/chimere/migrations/__init__.py index e69de29..e69de29 100644 --- a/chimere/main/__init__.py +++ b/chimere/migrations/__init__.py diff --git a/chimere/main/models.py b/chimere/models.py index 144b49d..8c80fab 100644 --- a/chimere/main/models.py +++ b/chimere/models.py @@ -25,39 +25,37 @@ import lxml.etree as ElementTree from datetime import datetime, timedelta from subprocess import Popen, PIPE -from django.core.files import File - -from django.utils.translation import ugettext_lazy as _ - +from django.conf import settings from django.contrib.gis.db import models from django.contrib.gis.gdal import SpatialReference from django.contrib import admin +from django.core.files import File +from django.utils.translation import ugettext_lazy as _ -from chimere import settings -from chimere.main.widgets import PointField, RouteField, SelectMultipleField +from chimere.widgets import PointField, RouteField, SelectMultipleField class News(models.Model): """News of the site """ - title = models.CharField(_("Name"), max_length=150) - available = models.BooleanField(_("Available")) - date = models.DateField(_("Date"), auto_now_add=True) + title = models.CharField(_(u"Name"), max_length=150) + available = models.BooleanField(_(u"Available")) + date = models.DateField(_(u"Date"), auto_now_add=True) content = models.TextField() def __unicode__(self): ordering = ["-date"] return self.title class Meta: - verbose_name = _("News") - verbose_name_plural = _("News") + verbose_name = _(u"News") + verbose_name_plural = _(u"News") class TinyUrl(models.Model): """Tinyfied version of permalink parameters """ - parameters = models.CharField(_("Parameters"), max_length=500) + parameters = models.CharField(_("uParameters"), max_length=500) def __unicode__(self): return self.parameters class Meta: - verbose_name = _("TinyUrl") + verbose_name = _(u"TinyUrl") digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" base = len(digits) @@ -92,70 +90,70 @@ class TinyUrl(models.Model): class ColorTheme(models.Model): """Color theme """ - name = models.CharField(_("Name"), max_length=150) + name = models.CharField(_(u"Name"), max_length=150) def __unicode__(self): return self.name class Meta: - verbose_name = _("Color theme") + verbose_name = _(u"Color theme") class Color(models.Model): """Color """ - code = models.CharField(_("Code"), max_length=6) - order = models.IntegerField(_("Order")) - color_theme = models.ForeignKey(ColorTheme, verbose_name=_("Color theme")) + code = models.CharField(_(u"Code"), max_length=6) + order = models.IntegerField(_(u"Order")) + color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme")) def __unicode__(self): return self.code class Meta: ordering = ["order"] - verbose_name = _("Color") + verbose_name = _(u"Color") class Category(models.Model): """Category of Point Of Interest (POI) """ - name = models.CharField(_("Name"), max_length=150) - available = models.BooleanField(_("Available")) - order = models.IntegerField(_("Order")) + name = models.CharField(_(u"Name"), max_length=150) + available = models.BooleanField(_(u"Available")) + order = models.IntegerField(_(u"Order")) description = models.TextField(blank=True, null=True) def __unicode__(self): return self.name class Meta: ordering = ["order"] - verbose_name = _("Category") + verbose_name = _(u"Category") class Icon(models.Model): '''Icon ''' - name = models.CharField(_("Name"), max_length=150) - image = models.ImageField(_("Image"), upload_to='icons', + name = models.CharField(_(u"Name"), max_length=150) + image = models.ImageField(_(u"Image"), upload_to='icons', height_field='height', width_field='width') - height = models.IntegerField(_("Height")) - width = models.IntegerField(_("Width")) + height = models.IntegerField(_(u"Height")) + width = models.IntegerField(_(u"Width")) def __unicode__(self): return self.name class Meta: - verbose_name = _("Icon") + verbose_name = _(u"Icon") class SubCategory(models.Model): '''Sub-category ''' - category = models.ForeignKey(Category, verbose_name=_("Category")) - name = models.CharField(_("Name"), max_length=150) - available = models.BooleanField(_("Available")) + category = models.ForeignKey(Category, verbose_name=_(u"Category")) + name = models.CharField(_(u"Name"), max_length=150) + available = models.BooleanField(_(u"Available")) areas = SelectMultipleField('Area', related_name='areas', blank=True) - icon = models.ForeignKey(Icon, verbose_name=_("Icon")) - color_theme = models.ForeignKey(ColorTheme, verbose_name=_("Color theme"), + icon = models.ForeignKey(Icon, verbose_name=_(u"Icon")) + color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme"), blank=True, null=True) - order = models.IntegerField(_("Order")) - TYPE = (('M', _('Marker')), - ('R', _('Route')), - ('B', _('Both')),) - item_type = models.CharField(_("Item type"), max_length=1, choices=TYPE) + order = models.IntegerField(_(u"Order")) + TYPE = (('M', _(u'Marker')), + ('R', _(u'Route')), + ('B', _(u'Both')),) + item_type = models.CharField(_(u"Item type"), max_length=1, choices=TYPE) def __unicode__(self): return u"%s / %s" % (self.category.name, self.name) class Meta: ordering = ["category", "order"] - verbose_name = _("Subcategory") + verbose_name = _(u"Subcategory") @classmethod def getAvailable(cls, item_types=None, area_name=None): @@ -190,31 +188,32 @@ class SubCategory(models.Model): class Marker(models.Model): '''Marker for a POI ''' - name = models.CharField(_("Name"), max_length=150) + name = models.CharField(_(u"Name"), max_length=150) categories = SelectMultipleField(SubCategory) - point = PointField(_("Localisation"), srid=settings.EPSG_DISPLAY_PROJECTION) - picture = models.ImageField(_("Image"), upload_to='upload', blank=True, + point = PointField(_(u"Localisation"), + srid=settings.EPSG_DISPLAY_PROJECTION) + picture = models.ImageField(_(u"Image"), upload_to='upload', blank=True, null=True, height_field='height', width_field='width') - height = models.IntegerField(_("Height"), blank=True, null=True) - width = models.IntegerField(_("Width"), blank=True, null=True) - STATUS = (('S', _('Submited')), - ('A', _('Available')), - ('D', _('Disabled')),) + height = models.IntegerField(_(u"Height"), blank=True, null=True) + width = models.IntegerField(_(u"Width"), blank=True, null=True) + STATUS = (('S', _(u'Submited')), + ('A', _(u'Available')), + ('D', _(u'Disabled')),) STATUS_DCT = {} for key, label in STATUS: STATUS_DCT[key] = label - status = models.CharField(_("Status"), max_length=1, choices=STATUS) + status = models.CharField(_(u"Status"), max_length=1, choices=STATUS) if settings.DAYS_BEFORE_EVENT: - start_date = models.DateField(_("Start date"), blank=True, null=True, + start_date = models.DateField(_(u"Start date"), blank=True, null=True, help_text=_(u"Not mandatory. Set it for dated item such as event. "\ u"Format YYYY-MM-DD")) - end_date = models.DateField(_("End date"), blank=True, null=True, + end_date = models.DateField(_(u"End date"), blank=True, null=True, help_text=_(u"Not mandatory. Set it only if you have a multi-day "\ - u"event. Format YYYY-MM-DD")) + u"event. Format YYYY-MM-DD")) if 'chimere.rss' in settings.INSTALLED_APPS: - available_date = models.DateTimeField(_("Available Date"), blank=True, - null=True) - route = models.ForeignKey("Route", blank=True, null=True) + available_date = models.DateTimeField(_(u"Available Date"), blank=True, + null=True) + route = models.ForeignKey(u"Route", blank=True, null=True) objects = models.GeoManager() def __unicode__(self): @@ -227,7 +226,7 @@ class Marker(models.Model): class Meta: ordering = ('status', 'name') - verbose_name = _("Point of interest") + verbose_name = _(u"Point of interest") def getLatitude(self): '''Return the latitude @@ -319,6 +318,10 @@ class RouteFile(models.Model): TYPE = (('K', _(u'KML')), ('G', _(u'GPX'))) file_type = models.CharField(max_length=1, choices=TYPE) + class Meta: + ordering = ('name',) + verbose_name = _(u"Route file") + def __unicode__(self): return self.name @@ -365,29 +368,29 @@ class RouteFile(models.Model): class Route(models.Model): '''Route on the map ''' - name = models.CharField(_("Name"), max_length=150) + name = models.CharField(_(u"Name"), max_length=150) categories = SelectMultipleField(SubCategory) - route = RouteField(_("Route"), srid=settings.EPSG_DISPLAY_PROJECTION) + route = RouteField(_(u"Route"), srid=settings.EPSG_DISPLAY_PROJECTION) associated_file = models.ForeignKey(RouteFile, blank=True, null=True, verbose_name=_(u"Associated file")) - picture = models.ImageField(_("Image"), upload_to='upload', blank=True, + picture = models.ImageField(_(u"Image"), upload_to='upload', blank=True, null=True, height_field='height', width_field='width') - height = models.IntegerField(_("Height"), blank=True, null=True) - width = models.IntegerField(_("Width"), blank=True, null=True) - STATUS = (('S', _('Submited')), - ('A', _('Available')), - ('D', _('Disabled')),) + height = models.IntegerField(_(u"Height"), blank=True, null=True) + width = models.IntegerField(_(u"Width"), blank=True, null=True) + STATUS = (('S', _(u'Submited')), + ('A', _(u'Available')), + ('D', _(u'Disabled')),) STATUS_DCT = {} for key, label in STATUS: STATUS_DCT[key] = label if settings.DAYS_BEFORE_EVENT: - start_date = models.DateField(_("Start date"), blank=True, null=True, + start_date = models.DateField(_(u"Start date"), blank=True, null=True, help_text=_(u"Not mandatory. Set it for dated item such as event. "\ u"Format YYYY-MM-DD")) - end_date = models.DateField(_("End date"), blank=True, null=True, + end_date = models.DateField(_(u"End date"), blank=True, null=True, help_text=_(u"Not mandatory. Set it only if you have a multi-day "\ u"event. Format YYYY-MM-DD")) - status = models.CharField(_("Status"), max_length=1, choices=STATUS) + status = models.CharField(_(u"Status"), max_length=1, choices=STATUS) objects = models.GeoManager() def __unicode__(self): @@ -395,7 +398,7 @@ class Route(models.Model): class Meta: ordering = ('status', 'name') - verbose_name = _("Route") + verbose_name = _(u"Route") def getProperty(self, propertymodel, safe=None): """Get the property of an associated property model. @@ -505,27 +508,27 @@ class SimpleArea: subcat.name as name, subcat.available as available, subcat.icon_id as icon_id, subcat.color_theme_id as color_theme_id, subcat.order as order, subcat.item_type as item_type - from main_subcategory subcat - inner join main_category cat on cat.id=subcat.category_id''' + from chimere_subcategory subcat + inner join chimere_category cat on cat.id=subcat.category_id''' sql = sql_main + ''' - inner join main_marker mark on ST_Contains(%s, mark.point)''' % area + inner join chimere_marker mark on ST_Contains(%s, mark.point)''' % area if equal_status: sql += ' and mark.status' + equal_status sql += date_condition % {'alias':'mark'} sql += ''' - inner join main_marker_categories mc on mc.subcategory_id=subcat.id and + inner join chimere_marker_categories mc on mc.subcategory_id=subcat.id and mc.marker_id=mark.id''' if filter_available: sql += ' where subcat.available = TRUE and cat.available = TRUE' subcats = set(SubCategory.objects.raw(sql)) sql = sql_main + ''' - inner join main_route rt on (ST_Intersects(%s, rt.route) or + inner join chimere_route rt on (ST_Intersects(%s, rt.route) or ST_Contains(%s, rt.route))''' % (area, area) if equal_status: sql += ' and rt.status' + equal_status sql += date_condition % {'alias':'rt'} sql += ''' - inner join main_route_categories rc on rc.subcategory_id=subcat.id and + inner join chimere_route_categories rc on rc.subcategory_id=subcat.id and rc.route_id=rt.id''' if filter_available: sql += ' where subcat.available = TRUE and cat.available = TRUE' @@ -535,14 +538,14 @@ class SimpleArea: class Area(models.Model, SimpleArea): """Rectangular area of the map """ - name = models.CharField(_("Name"), max_length=150) - urn = models.SlugField(_("Area urn"), max_length=50, blank=True, + name = models.CharField(_(u"Name"), max_length=150) + urn = models.SlugField(_(u"Area urn"), max_length=50, blank=True, unique=True) - order = models.IntegerField(_("Order")) - available = models.BooleanField(_("Available")) - upper_left_corner = models.PointField(_("Upper left corner"), + order = models.IntegerField(_(u"Order")) + available = models.BooleanField(_(u"Available")) + upper_left_corner = models.PointField(_(u"Upper left corner"), default='POINT(0 0)', srid=settings.EPSG_DISPLAY_PROJECTION) - lower_right_corner = models.PointField(_("Lower right corner"), + lower_right_corner = models.PointField(_(u"Lower right corner"), default='POINT(0 0)', srid=settings.EPSG_DISPLAY_PROJECTION) objects = models.GeoManager() @@ -559,7 +562,7 @@ class Area(models.Model, SimpleArea): ''' return cls.objects.filter(available=True) - def getIncludeSql(self, geometry='"main_marker".point'): + def getIncludeSql(self, geometry='"chimere_marker".point'): """ Get the sql statement for the test if the point is included in the area """ @@ -577,16 +580,16 @@ class Area(models.Model, SimpleArea): class PropertyModel(models.Model): '''Model for a property ''' - name = models.CharField(_("Name"), max_length=150) - order = models.IntegerField(_("Order")) - available = models.BooleanField(_("Available")) + name = models.CharField(_(u"Name"), max_length=150) + order = models.IntegerField(_(u"Order")) + available = models.BooleanField(_(u"Available")) TYPE = (('T', _('Text')), ('L', _('Long text')), ('P', _('Password'))) TYPE_WIDGET = {'T':'forms.TextInput', 'L':'TextareaWidget', 'P':'forms.PasswordInput'} - type = models.CharField(_("Type"), max_length=1, choices=TYPE) + type = models.CharField(_(u"Type"), max_length=1, choices=TYPE) def __unicode__(self): return self.name class Meta: @@ -601,12 +604,12 @@ class PropertyModel(models.Model): class Property(models.Model): '''Property for a POI ''' - marker = models.ForeignKey(Marker, verbose_name=_("Point of interest")) + marker = models.ForeignKey(Marker, verbose_name=_(u"Point of interest")) propertymodel = models.ForeignKey(PropertyModel, - verbose_name=_("Property model")) - value = models.TextField(_("Value")) + verbose_name=_(u"Property model")) + value = models.TextField(_(u"Value")) def __unicode__(self): return "%s : %s" % (str(self.propertymodel), self.value) class Meta: - verbose_name = _("Property") + verbose_name = _(u"Property") diff --git a/chimere/rss/__init__.py b/chimere/rss/__init__.py deleted file mode 100644 index 792d600..0000000 --- a/chimere/rss/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# diff --git a/chimere/rss/feeds.py b/chimere/rss/feeds.py deleted file mode 100644 index 18a4259..0000000 --- a/chimere/rss/feeds.py +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>, -# Samuel Renard <renard.samuel_AT_gmailDOTcom>, -# É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. - -from django.utils.translation import ugettext as _ -from django.contrib.syndication.feeds import Feed -from django.contrib.syndication.feeds import FeedDoesNotExist -from chimere.main.models import Category, SubCategory, Marker, Area -from django.core.exceptions import ObjectDoesNotExist -from django.contrib.gis.geos import * - -from chimere import settings - -class BaseFeed(Feed): - """ - Base feed for Chimere objects - """ - def item_link(self, item): - ''' Return POI permalink ''' - coord = item.point - cat = 0 - if item.categories.all() and item.categories.all()[0]: - cat = item.categories.all()[0].pk - return settings.BASE_URL + '?zoom=16&lat=%d&lon=%d¤t_feature=%d&\ -checked_categories=%d' % (coord.y, coord.x, item.id, cat) - - def item_pubdate(self, item): - """ - Date of the Marker when it has been available - """ - return item.available_date - - def description(self, obj): - return "" - -class LatestPOIsByCategory(BaseFeed): - ''' - Last Points of interests by category in Feeds - ''' - title_template = "rss_title.html" - description_template = "rss_descr.html" - - def get_object(self, bits): - """ - Get extra url, after rss/category/ id of category - """ - if len(bits) != 1: - raise ObjectDoesNotExist - return Category.objects.get(id__exact=bits[0]) - - def title(self, obj): - """ - Define the title of the feed - """ - return u"%s - %s" % (settings.PROJECT_NAME, obj.name) - - def link(self, obj): - """ - Define the link of the feed. - """ - if not obj: - raise FeedDoesNotExist - return settings.BASE_URL + 'rss/category/' + str(obj.id) - - def items(self, obj): - """ - Requests to marker where its category match the category is requested - and its status is available - This returns a list of the 15 last markers/POIs ordering by date - """ - q = Marker.objects.filter(status__exact='A', - categories__category__id__exact=obj.id, - available_date__isnull=False).order_by('-available_date')[:15] - return q - -class LatestPOIsBySubCategory(BaseFeed): - ''' - Last Points of interests by SubCategory in Feeds - ''' - title_template = "rss_title.html" - description_template = "rss_descr.html" - - def get_object(self, bits): - if len(bits) != 1: - raise ObjectDoesNotExist - return SubCategory.objects.get(id__exact=bits[0]) - - def title(self, obj): - return u"%s - %s - %s" % (settings.PROJECT_NAME, obj.category.name, - obj.name) - - def link(self, obj): - if not obj: - raise FeedDoesNotExist - return settings.BASE_URL + 'rss/subcategory/' + str(obj.id) - - def items(self, obj): - q = Marker.objects.filter(categories__id__exact=obj.id, - available_date__isnull=False, status__exact='A').order_by( - '-available_date')[:15] - return q - -class LatestPOIs(BaseFeed): - ''' - Last Points of interests - ''' - title_template = "rss_title.html" - description_template = "rss_descr.html" - - def title(self): - return settings.PROJECT_NAME + u" - " + _(u"Last points of interest") - - def link(self): - return settings.BASE_URL + 'rss/categories/' - - def description(self): - return _("Latest points of interest from ") + settings.PROJECT_NAME - - def items(self): - q = Marker.objects.filter(status__exact='A', - available_date__isnull=False).order_by('-available_date')[:15] - return q - -class LatestPOIsByZone(BaseFeed): - ''' - Last Points of interests by zone by coordinates - ''' - title_template = "rss_title.html" - description_template = "rss_descr.html" - upper_left_lat = 0 - upper_left_lon = 0 - lower_right_lat = 0 - lower_right_lon = 0 - - def get_object(self, bits): - """ - Get the extra url. Parameters are the coordinates of the zone (the - upper left and lower right points) - """ - if len(bits) != 1: - raise ObjectDoesNotExist - # Then define the upper right and lower left points - coordinates = str(bits[0]).split('_') - upper_left_lat = float(coordinates[0]) - upper_left_lon = float(coordinates[1]) - lower_right_lat = float(coordinates[2]) - lower_right_lon = float(coordinates[3]) - upper_right_lat = upper_left_lat - upper_right_lon = lower_right_lon - lower_left_lat = lower_right_lat - lower_left_lon = upper_left_lon - # Define a Polygon with the 4 points of the zone. - areaBox = Polygon(((upper_left_lon, upper_left_lat), - (upper_right_lon, upper_right_lat), - (lower_right_lon, lower_right_lat), - (lower_left_lon, lower_left_lat), - (upper_left_lon, upper_left_lat)), - srid=settings.EPSG_DISPLAY_PROJECTION) - return areaBox - - def title(self, obj): - return settings.PROJECT_NAME + u" - " +\ - _(u"Last points of interest by area") - - def link(self, obj): - """ - Define the link of the feed. It's the same url as we get in the method - get_object - """ - if not obj: - raise FeedDoesNotExist - return settings.BASE_URL + 'rss/area/' \ - + str(self.upper_left_lat) + '_' + str(self.upper_left_lon) + \ - '_' + str(self.lower_right_lat) + '_' + str(self.lower_right_lon) - - def items(self, obj): - """ - Request to return Markers WHERE there points are containes in the zone - which is requested. - This returns a list of the 15 last markers/POIs ordering by date - """ - q = Marker.objects.filter(point__contained=obj, status__exact='A', - available_date__isnull=False).order_by('-available_date')[:15] - return q - -class LatestPOIsByZoneID(BaseFeed): - ''' - Last Points of interests by zone by id - ''' - title_template = "rss_title.html" - description_template = "rss_descr.html" - - def get_object(self, bits): - if len(bits) != 1: - raise ObjectDoesNotExist - return Area.objects.get(id__exact=bits[0]) - - def title(self, obj): - return settings.PROJECT_NAME + u" - " + \ - _(u"Last points of interest") + u" - " + obj.name - - def link(self, obj): - if not obj: - raise FeedDoesNotExist - return settings.BASE_URL + 'rss/areaid/' + str(obj.id) - - def items(self, obj): - sql = 'select * from "main_marker" where ' + obj.getIncludeSql() - sql += ' and "main_marker".available_date is not null' - sql += ' and "main_marker".status=\'A\'' - sql += ' order by "main_marker".available_date desc limit 15' - q = Marker.objects.raw(sql) - return q diff --git a/chimere/rss/templates/rss.html b/chimere/rss/templates/rss.html deleted file mode 100644 index 0c895ed..0000000 --- a/chimere/rss/templates/rss.html +++ /dev/null @@ -1,73 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block sidebar %} -{% endblock %} - -{% block content %} -<div id='content'> -<fieldset class='edit'> -<legend>{% trans "Subscribe to RSS feed" %}</legend> - -<p><font color='red'> {{ error_message }} </font></p> - -<form method='post' id='rss_form' name='rss_form' action=''> -{%if not category_rss_feed %} -<div class="fieldWrapper"> - <label for="rss_category">{% trans "Type of RSS feed" %}</label> - <select name='rss_category' id='rss_category' onchange='document.forms["rss_form"].submit();'> - <option value=""> ---- </option> - <option value="global">{% trans "All new points of interest" %}</option> - <option value="poi">{% trans "New points of interest by category" %}</option> - <option value="area">{% trans "New points of interest by area" %}</option> - </select> -</div> -{% endif %} - -{%ifequal category_rss_feed "category" %} -<h3>{% trans "New points of interest by category" %}</h3> -<div class="fieldWrapper"> - <label for="id_subcategory">{% trans "Choose a category" %}</label> - <select name='subcategory' id='subcategory' onchange='document.forms["rss_form"].submit();'> - {% for cat_subcat in sub_categories %} - <option value ="cat_{{cat_subcat.0.id}}"> ---- {{cat_subcat.0.name}} ---- - {% for sub_category in cat_subcat.1 %} - <option value='{{sub_category.id}}'{% ifequal sub_category.id current_category %} selected='selected'{% endifequal %}> - {% trans sub_category.name %} - </option>{% endfor %} - </option>{% endfor %} - </select> -</div> -{% endifequal %} - -{%ifequal category_rss_feed "area" %} -<h3>{% trans "New points of interest by area" %}</h3> -{% if area_id %} -<div class="fieldWrapper"> - <label for="id_area">{% trans "Choose a pre-defined areas" %}</label> - <select name='id_area' id='id_area' onchange='document.forms["rss_form"].submit();'> - <option value="" selected="selected"> ---- </option> - {% for areaID in area_id %} - <option value ={{areaID.id}}>{{areaID.name}}</option> - {% endfor %} - </select> -</div> - -</form> - -<form method='post' action=''> -{% endif %} -<div class='fieldWrapper'> -<label>{% trans "Or select the area by zooming and panning this map" %}</label> -<div class="map"> - {{form.area}} -</div> -</div> -<p><input type="submit" value="{% trans "Validate" %}" /></p> -{% endifequal %} - -</form> - -</fieldset> -</div> -{% endblock %} diff --git a/chimere/rss/templates/rss_descr.html b/chimere/rss/templates/rss_descr.html deleted file mode 100644 index 4f75ac6..0000000 --- a/chimere/rss/templates/rss_descr.html +++ /dev/null @@ -1,8 +0,0 @@ -{% load i18n %} -{% load sanitize %} -<div id='detail_content'> -{% if obj.picture %}<img src='{{obj.picture.url}}' alt="{{obj.name}}"/>{%endif%} -<div>{% for property in obj.getProperties %} -<p id='{{property.propertymodel.getNamedId}}'>{{ property.value|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4"|safe }}</p> -{% endfor %}</div> -</div> diff --git a/chimere/rss/templates/rss_title.html b/chimere/rss/templates/rss_title.html deleted file mode 100644 index 5b379e7..0000000 --- a/chimere/rss/templates/rss_title.html +++ /dev/null @@ -1,2 +0,0 @@ -{% load i18n %} -{{ obj.name }} diff --git a/chimere/rss/urls.py b/chimere/rss/urls.py deleted file mode 100644 index e5e9a24..0000000 --- a/chimere/rss/urls.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>, -# Samuel Renard <renard.samuel_AT_gmailDOTcom>, -# É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. - - -from django.conf.urls.defaults import * - -from chimere.rss.feeds import LatestPOIsByCategory, LatestPOIsBySubCategory, \ - LatestPOIs, LatestPOIsByZone, LatestPOIsByZoneID -from chimere.urls import EXTRA_NO_AREA as EXTRA - -feeds = { - 'category': LatestPOIsByCategory, - 'subcategory': LatestPOIsBySubCategory, - 'global': LatestPOIs, - 'area': LatestPOIsByZone, - 'areaid': LatestPOIsByZoneID -} - -urlpatterns = patterns('', - (EXTRA + r'rss/$', 'chimere.rss.views.rss'), - (EXTRA + r'rss/(?P<url>.*)/$', - 'django.contrib.syndication.views.feed', {'feed_dict': feeds}), -) - diff --git a/chimere/rss/views.py b/chimere/rss/views.py deleted file mode 100644 index 1d6381d..0000000 --- a/chimere/rss/views.py +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>, -# Samuel Renard <renard.samuel_AT_gmailDOTcom>, -# É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. - -""" -Views of the project -""" - -from django.shortcuts import render_to_response -from django.http import HttpResponseRedirect -from django.utils.translation import ugettext as _ - -from chimere import settings -from chimere.main.views import get_base_response -from chimere.main.actions import actions -from chimere.main.models import SubCategory,Area -from chimere.main.forms import AreaForm -from chimere.main.widgets import AreaWidget - -def rss(request, area_name=''): - ''' - Redirect to RSS subscription page - ''' - response_dct = get_base_response() - response_dct.update({'actions':actions, 'action_selected':('rss',), - 'category_rss_feed':'',}) - # If the form has been submited - if request.method == "POST": - # User has defined the kind of POI he is interested in : POI in a area - # (GET method is used for the link with RSS icon in the browser) - if 'rss_category' in request.POST: - #User wants to follow all the new POI - if request.POST['rss_category'] == 'global': - feeds_link = '/' + settings.EXTRA_URL + 'rss/global/' - return HttpResponseRedirect(feeds_link) - # User wants to follow all the new POI by category or subcategory - elif request.POST['rss_category'] == 'poi': - response_dct['category_rss_feed'] = 'category' - response_dct['sub_categories'] = SubCategory.getAvailable() - return render_to_response('rss.html', response_dct) - # User wants to follow all the new POI situated in a defined area - elif request.POST['rss_category'] == 'area': - # An unbound form - form = AreaForm() - area_widget = AreaWidget().render('area', None) - response_dct.update({'map_layer':settings.MAP_LAYER, - 'extra_head':form.media, - 'form':form, - 'category_rss_feed':'area', - 'area_id':Area.getAvailable(), - 'area_widget':area_widget - }) - return render_to_response('rss.html', response_dct) - # Error when submitting the form - else: - error = _("Incorrect choice in the list") - response_dct.update({'error_message':error, - 'category_rss_feed':'', - 'sub_categories':SubCategory.getAvailable()}) - return render_to_response('rss.html', response_dct) - - # User has specified the category or subcategory he wants to follow => - # we redirect him towards the related rss feed - if 'subcategory' in request.POST and request.POST['subcategory'] != '': - idCat = request.POST['subcategory'] - if idCat.find("cat_") != -1 : - list_Cat = idCat.split('_') - feeds_link = '/' + settings.EXTRA_URL + 'rss/category/' - feeds_link += list_Cat[1] - return HttpResponseRedirect(feeds_link) - - else: - feeds_link = '/' + settings.EXTRA_URL + 'rss/subcategory/' + \ - idCat - return HttpResponseRedirect(feeds_link) - - # User has specified the ID of the area he wants to follow - if 'id_area' in request.POST and request.POST['id_area'] != '': - feeds_link = '/' + settings.EXTRA_URL + 'rss/areaid/' \ - + request.POST['id_area'] - return HttpResponseRedirect(feeds_link) - - # User has specified the area he wants to follow => we redirect him - # towards the related rss feed (using upper left and lower right - # coordinates) - elif 'upper_left_lat' in request.POST and \ - request.POST['upper_left_lat'] != '' and \ - 'upper_left_lon' in request.POST and \ - request.POST['upper_left_lon'] != '' and \ - 'lower_right_lon' in request.POST and \ - request.POST['lower_right_lon'] != '' and \ - 'lower_right_lat' in request.POST and \ - request.POST['lower_right_lat'] != '' : - feeds_link = '/' + settings.EXTRA_URL + 'rss/area/' + \ -request.POST['upper_left_lat'] + '_' + request.POST['upper_left_lon'] + '_' + \ -request.POST['lower_right_lat'] + '_' + request.POST['lower_right_lon'] - return HttpResponseRedirect(feeds_link) - - - # GET method is used for linking with the RSS icon in the browser when user - # wants to choose a category to follow - elif request.method == "GET" and 'rss_category' in request.GET: - if request.GET['rss_category'] == 'global': - feeds_link = '/' + settings.EXTRA_URL + 'rss/global/' - return HttpResponseRedirect(feeds_link) - if request.GET['rss_category'] == 'poi': - response_dct['category_rss_feed'] = 'category' - response_dct['sub_categories'] = SubCategory.getAvailable(['M','B']) - return render_to_response('rss.html', response_dct) - if request.GET['rss_category'] == 'area': - # An unbound form - form = AreaForm() - response_dct.update({'map_layer':settings.MAP_LAYER, - 'extra_head':form.media, - 'form':form, - 'category_rss_feed':'area', - 'area_id':Area.getAvailable(), - 'area_widget':AreaWidget().render('area', None)}) - return render_to_response('rss.html', response_dct) - - # User access to the RSS tab - else: - return render_to_response('rss.html', response_dct) diff --git a/chimere/main/templatetags/__init__.py b/chimere/templatetags/__init__.py index 792d600..792d600 100644 --- a/chimere/main/templatetags/__init__.py +++ b/chimere/templatetags/__init__.py diff --git a/chimere/main/templatetags/sanitize.py b/chimere/templatetags/sanitize.py index ccb936c..ccb936c 100644 --- a/chimere/main/templatetags/sanitize.py +++ b/chimere/templatetags/sanitize.py diff --git a/chimere/main/templatetags/unlocalize_point.py b/chimere/templatetags/unlocalize_point.py index f52a90a..f52a90a 100644 --- a/chimere/main/templatetags/unlocalize_point.py +++ b/chimere/templatetags/unlocalize_point.py diff --git a/chimere/urls.py b/chimere/urls.py index 41a3729..6aebf72 100644 --- a/chimere/urls.py +++ b/chimere/urls.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2008-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2008-2012 É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 @@ -17,70 +17,46 @@ # See the file COPYING for details. - +from django.conf import settings from django.conf.urls.defaults import * - from django.contrib import admin admin.autodiscover() -from settings import ROOT_PATH, EXTRA_URL, INSTALLED_APPS - -from main.models import Area +from chimere.models import Area def i18n_javascript(request): return admin.site.i18n_javascript(request) -BASE = '^' + EXTRA_URL -urlpatterns = patterns('', - (BASE + r'admin/jsi18n/$', i18n_javascript), - (BASE + r'admin/(.*)', admin.site.root), - (BASE + r'static/(?P<path>.*)$', 'django.views.static.serve', - {'document_root': ROOT_PATH + 'static/'}), - (BASE + r'media/(?P<path>.*)$', 'django.views.static.serve', - {'document_root': ROOT_PATH + 'media/'}), - (BASE + r'charte/$', 'chimere.main.views.charte'), +urlpatterns = patterns('chimere.views', + url(r'^simple(/?P<area_name>\w+)?$', 'index', {'simple':True}, + name="simple_index") ) -urlpatterns += patterns('chimere.main.views', +urlpatterns += patterns('chimere.views', + url(r'^charte/?$', 'charte', name="charte"), + url(r'^(?P<area_name>\w+)?/?contact/?$', 'contactus', name="contact"), + url(r'^(?P<area_name>\w+)?/?submited/(?P<action>\w+)/?$', 'submited', + name="submit"), + url(r'^(?P<area_name>\w+)?/?edit/?$', 'edit', + name="edit"), + url(r'^(?P<area_name>\w+)?/?edit_route/?$', 'editRoute', + name="edit_route"), + url(r'^(?P<area_name>\w+)?/?getDetail/(?P<marker_id>\d+)/?$', 'getDetail', + name="get_detail"), + url(r'^(?P<area_name>\w+)?/?getDescriptionDetail/?(?P<category_id>\d+)/?$', + 'getDescriptionDetail', name="get_description_detail"), + url(r'^(?:(?P<area_name>\w+)?/)?getGeoObjects/(?P<category_ids>\w+)(/(?P<status>\w+))?$', + 'getGeoObjects', name="getgeoobjects"), + url(r'^(?P<area_name>\w+)?/?getAvailableCategories/$', + 'get_available_categories', name="get_categories"), + url(r'^(?P<area_name>\w+)?/?ty/(?P<tiny_urn>\w+)$', + 'redirectFromTinyURN', name="tiny"), ) -url_areas = Area.objects.filter(urn__isnull=False) -urlpatterns += patterns('chimere.main.views', (BASE + r'$', 'index'), - (BASE + r'simple/?$', 'index', {'simple':True}) ) - -for area in url_areas: - urlpatterns += patterns('chimere.main.views', - (BASE + '(' + area.urn + ')/?$', 'index', {'default_area':area}), - (BASE + '(' + area.urn + ')/simple/?$', 'index', {'default_area':area, - 'simple':True}),) - -EXTRA = "|".join([area.urn for area in url_areas]) -default_dct = {} -EXTRA_NO_AREA = EXTRA -if EXTRA: - EXTRA_NO_AREA = "(%s)?/?" % EXTRA - EXTRA = "(?P<area_name>%s)?/?" % EXTRA -else: - default_dct = {'area_name':''} -urlpatterns += patterns('chimere.main.views', -(BASE + EXTRA + r'contact/$', 'contactus', default_dct), -(BASE + EXTRA + r'edit/$', 'edit', default_dct), -(BASE + EXTRA + r'edit_route/$', 'editRoute', default_dct), -(BASE + EXTRA + r'upload_file/((?P<category_id>\w+)/)?$', 'uploadFile', - default_dct), -(BASE + EXTRA + r'process_route_file/(?P<file_id>\d+)/$', 'processRouteFile', default_dct), -(BASE + EXTRA + r'submited/(?P<action>\w+)/$', 'submited', default_dct), -(BASE + EXTRA + r'getDetail/(?P<marker_id>\d+)/$', 'getDetail', default_dct), -(BASE + EXTRA + r'getDescriptionDetail/(?P<category_id>\d+)/$', - 'getDescriptionDetail', default_dct), -(BASE + EXTRA + r'getGeoObjects/(?P<category_ids>\w+)(/(?P<status>\w+))?$', - 'getGeoObjects', default_dct), -(BASE + EXTRA + r'getAvailableCategories/((?P<area>\w+))?(/(?P<status>\w+))?(/(?P<force>\w+))?$', - 'getAvailableCategories', default_dct), -(BASE + EXTRA + r'ty/(?P<tiny_urn>\w+)$', 'redirectFromTinyURN', default_dct), +# At the end, because it catches large +urlpatterns += patterns('chimere.views', + url(r'^(?P<area_name>\w+)?', 'index', name="index"), ) -if 'chimere.rss' in INSTALLED_APPS: - urlpatterns += patterns('', - (r'^' + EXTRA_URL, include('chimere.rss.urls')),) + diff --git a/chimere/main/views.py b/chimere/views.py index 25ad630..24948ad 100644 --- a/chimere/main/views.py +++ b/chimere/views.py @@ -34,13 +34,13 @@ from django.db.models import Q from django.utils import simplejson from chimere import settings -from chimere.main.actions import actions -from chimere.main.models import Category, SubCategory, PropertyModel, \ +from chimere.actions import actions +from chimere.models import Category, SubCategory, PropertyModel, \ Marker, Route, News, SimpleArea, Area, Color, TinyUrl, RouteFile -from chimere.main.widgets import getMapJS, PointChooserWidget, \ +from chimere.widgets import getMapJS, PointChooserWidget, \ RouteChooserWidget, URL_OSM_JS, URL_OSM_CSS -from chimere.main.forms import MarkerForm, RouteForm, ContactForm, \ +from chimere.forms import MarkerForm, RouteForm, ContactForm, \ FileForm, FullFileForm, notifySubmission, notifyStaff def get_base_response(area_name=""): diff --git a/chimere/main/widgets.py b/chimere/widgets.py index 1af6637..ec63ea3 100644 --- a/chimere/main/widgets.py +++ b/chimere/widgets.py @@ -22,12 +22,11 @@ Extra widgets and fields """ from django import forms +from django.conf import settings +from django.contrib.gis.db import models +from django.contrib.gis.geos import fromstr from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ -from django.contrib.gis.geos import fromstr - -from chimere import settings -from django.contrib.gis.db import models URL_OSM_CSS = ["http://www.openlayers.org/api/theme/default/style.css"] URL_OSM_JS = [settings.MEDIA_URL+"OpenLayers.js", @@ -352,3 +351,7 @@ class SelectMultipleField(models.ManyToManyField): keys.update(defaults) return super(SelectMultipleField, self).formfield(**keys) +from south.modelsinspector import add_introspection_rules +add_introspection_rules([], ["^chimere\.widgets\.PointField"]) +add_introspection_rules([], ["^chimere\.widgets\.SelectMultipleField"]) +add_introspection_rules([], ["^chimere\.widgets\.RouteField"]) |
