summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2013-03-14 18:48:00 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2013-03-14 18:48:00 +0100
commit054fdbdf7a1e5106725b8b5a36db99242cfa65c1 (patch)
tree1633b26e884feb1f29afedbb80cef7a6ecbdba2d
parent8a5ba2650678ec22107a1a0a10650b6e0cc14683 (diff)
parentd02ec4246813eb0787bf3ab54af1af9ce32bd376 (diff)
downloadChimère-054fdbdf7a1e5106725b8b5a36db99242cfa65c1.tar.bz2
Chimère-054fdbdf7a1e5106725b8b5a36db99242cfa65c1.zip
Merge branch 'master' into saclay
Conflicts: chimere/locale/fr/LC_MESSAGES/django.po chimere/static/chimere/css/styles.css chimere/static/chimere/js/jquery.chimere.js chimere/templates/chimere/detail.html chimere/templatetags/chimere_tags.py chimere/utils.py chimere/views.py example_project/settings.py
-rw-r--r--CHANGES.txt31
-rw-r--r--DATA_LICENCES.txt1
-rw-r--r--LICENSE.txt (renamed from COPYING)0
-rw-r--r--MANIFEST.in12
-rw-r--r--README3
-rw-r--r--README.txt43
-rw-r--r--apache/django.wsgi5
-rw-r--r--chimere/__init__.py10
-rw-r--r--chimere/admin.py27
-rw-r--r--chimere/default_settings.py36
l---------chimere/external_utils1
-rw-r--r--chimere/external_utils/OsmApi.py (renamed from utils/OsmApi.py)0
-rw-r--r--chimere/external_utils/__init__.py (renamed from example_project/__init__.py)0
-rw-r--r--chimere/fixtures/auth_group.json46
-rw-r--r--chimere/fixtures/initial_data.json44
-rw-r--r--chimere/fixtures/layers-geobretagne.json74
-rw-r--r--chimere/fixtures/layers-opencyclemap.json26
-rw-r--r--chimere/forms.py2
-rw-r--r--chimere/locale/fr/LC_MESSAGES/django.po426
-rw-r--r--chimere/migrations/0042_fix_rights.py261
-rw-r--r--chimere/migrations/0043_auto__add_field_importer_get_description.py245
-rw-r--r--chimere/migrations/0044_auto__add_field_importer_default_description.py246
-rw-r--r--chimere/models.py42
-rw-r--r--chimere/static/bsmSelect/GPL-LICENSE.txt278
-rw-r--r--chimere/static/bsmSelect/MIT-LICENSE.txt21
-rw-r--r--chimere/static/bsmSelect/README.md191
-rw-r--r--chimere/static/bsmSelect/css/jquery.bsmselect.css (renamed from chimere/static/chimere/js/jquery/bsmSelect/css/jquery.bsmselect.css)0
-rw-r--r--chimere/static/bsmSelect/css/jquery.bsmselect.custom.css (renamed from chimere/static/chimere/js/jquery/bsmSelect/css/jquery.bsmselect.custom.css)0
-rw-r--r--chimere/static/bsmSelect/js/jquery.bsmselect.compatibility.js (renamed from chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.compatibility.js)0
-rw-r--r--chimere/static/bsmSelect/js/jquery.bsmselect.js (renamed from chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.js)0
-rw-r--r--chimere/static/bsmSelect/js/jquery.bsmselect.sortable.js (renamed from chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.sortable.js)0
-rw-r--r--chimere/static/chimere/css/styles.css15
-rw-r--r--[-rwxr-xr-x]chimere/static/chimere/img/cloud-popup-relative.pngbin3177 -> 3177 bytes
-rw-r--r--chimere/static/chimere/js/importer_interface.js23
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js14
-rw-r--r--chimere/static/jme/GPL-LICENSE-2.txt278
-rw-r--r--chimere/static/jme/MIT-LICENSE.txt20
-rw-r--r--chimere/static/openlayers/OpenLayers.js (renamed from chimere/static/chimere/js/OpenLayers.js)0
-rw-r--r--chimere/static/openlayers/SimplePanZoom.js (renamed from chimere/static/chimere/js/SimplePanZoom.js)0
-rwxr-xr-xchimere/static/prettyPhoto/README30
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnNext.pngbin1411 -> 1411 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnPrevious.pngbin1442 -> 1442 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/contentPattern.pngbin130 -> 130 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/default_thumbnail.gifbin227 -> 227 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/loader.gifbin2545 -> 2545 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/sprite.pngbin4076 -> 4076 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnNext.pngbin1411 -> 1411 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnPrevious.pngbin1442 -> 1442 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_square/contentPattern.pngbin121 -> 121 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_square/default_thumbnail.gifbin227 -> 227 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_square/loader.gifbin2545 -> 2545 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/dark_square/sprite.pngbin3507 -> 3507 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnNext.pngbin845 -> 845 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnPrevious.pngbin828 -> 828 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternBottom.pngbin142 -> 142 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternLeft.pngbin137 -> 137 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternRight.pngbin136 -> 136 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternTop.pngbin142 -> 142 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/default_thumbnail.gifbin227 -> 227 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/loader.gifbin2545 -> 2545 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/facebook/sprite.pngbin4227 -> 4227 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnNext.pngbin1411 -> 1411 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnPrevious.pngbin1442 -> 1442 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/default_thumbnail.gifbin227 -> 227 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/loader.gifbin2545 -> 2545 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/sprite.pngbin4099 -> 4099 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnNext.pngbin1411 -> 1411 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnPrevious.pngbin1442 -> 1442 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_square/default_thumbnail.gifbin227 -> 227 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_square/loader.gifbin2545 -> 2545 bytes
-rw-r--r--[-rwxr-xr-x]chimere/static/prettyPhoto/images/prettyPhoto/light_square/sprite.pngbin3507 -> 3507 bytes
-rw-r--r--chimere/templates/admin/chimere/marker/change_form.html2
-rw-r--r--chimere/templates/chimere/blocks/areas.html1
-rw-r--r--chimere/templates/chimere/blocks/map.html5
-rw-r--r--chimere/templates/chimere/detail.html6
-rw-r--r--chimere/templates/chimere/edit.html3
-rw-r--r--chimere/templates/chimere/edit_route.html3
-rw-r--r--chimere/templatetags/chimere_tags.py7
-rw-r--r--chimere/tests.py27
-rw-r--r--chimere/tests/data_license1
-rw-r--r--chimere/utils.py45
-rw-r--r--chimere/views.py15
-rw-r--r--chimere/widgets.py8
-rw-r--r--debian/changelog17
-rw-r--r--debian/compat1
-rw-r--r--debian/control64
-rw-r--r--debian/copyright113
-rw-r--r--debian/doc-base10
-rw-r--r--debian/docs2
-rw-r--r--debian/pydist-overrides2
-rwxr-xr-xdebian/rules22
-rw-r--r--debian/source/format1
-rw-r--r--debian/watch2
-rw-r--r--docs/en/configuration.rst11
-rw-r--r--docs/en/import_export.rst7
-rw-r--r--docs/en/install.rst28
-rw-r--r--docs/en/upgrade.rst37
-rw-r--r--docs/fr/configuration.rst13
-rw-r--r--docs/fr/import_export.rst8
-rw-r--r--docs/fr/install.rst34
-rw-r--r--docs/fr/upgrade.rst38
-rw-r--r--example_project/fixtures/initial_data.json853
-rw-r--r--example_project/local_settings.py.pip.sample42
-rw-r--r--example_project/local_settings.py.sample32
-rwxr-xr-xexample_project/manage.py14
-rwxr-xr-xexample_project/media/icons/marker.pngbin606 -> 0 bytes
-rw-r--r--example_project/media/icons/readme1
-rw-r--r--example_project/media/pictures/readme1
-rw-r--r--example_project/media/route_files/readme1
-rw-r--r--example_project/settings.py295
-rw-r--r--example_project/templates/chimere/blocks/overload_templates_here0
-rw-r--r--example_project/templates/chimere/overload_templates_here0
-rw-r--r--example_project/templates/overload_templates_here0
-rw-r--r--example_project/urls.py44
-rw-r--r--requirements.txt5
-rw-r--r--setup.py26
-rw-r--r--utils/__init__.py0
117 files changed, 2571 insertions, 1727 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100644
index 0000000..355b988
--- /dev/null
+++ b/CHANGES.txt
@@ -0,0 +1,31 @@
+2.0.2 (2013-02-19)
+------------------
+
+- map: fix permalink
+- map: error tolerant to marker with no associated category
+- map: better sort of news
+- admin: improve marker list
+
+2.0.1 (2013-02-10)
+------------------
+
+- admin: fix route page when a property is newly set
+- map: add attribution div
+- minor fix on the documentation
+
+2.0.0 (2013-02-02)
+------------------
+
+- improve documentation
+- add a default description for imports
+- minor fix on styles
+- remove the default application to an external repository https://gitorious.org/chimere-example-project/
+- fix upgrade issues
+- small improvements for default templates
+- fix zoom on the map for route's permalinks
+
+2.0 (2013-01-02)
+----------------
+
+- First release for the second version.
+
diff --git a/DATA_LICENCES.txt b/DATA_LICENCES.txt
new file mode 100644
index 0000000..c9532bc
--- /dev/null
+++ b/DATA_LICENCES.txt
@@ -0,0 +1 @@
+chimere/tests/eqs7day-M5.xml is a georss feed from the website http://www.usgs.gov/ published under the US public domain
diff --git a/COPYING b/LICENSE.txt
index 94a9ed0..94a9ed0 100644
--- a/COPYING
+++ b/LICENSE.txt
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..7b2ddd9
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,12 @@
+include *.txt MANIFEST.in
+include chimere/tests/*
+prune docs/*/*/build/
+include docs/*/*.rst
+include docs/*/Makefile
+include docs/*/conf.py
+include docs/*/static/*.png
+recursive-include apache *.conf *.wsgi
+recursive-include chimere/templates *.html *.csv *.kml
+recursive-include chimere/static *.css *.js *.png *.gif *.swf
+recursive-include chimere/locale *.po
+recursive-include chimere/fixtures *.json
diff --git a/README b/README
deleted file mode 100644
index 6faac19..0000000
--- a/README
+++ /dev/null
@@ -1,3 +0,0 @@
-To generate the documentation run the generate script in the docs directory.
-By default the documentation is generated in english. To generate for a
-different language add the appropriate language code as a parameter.
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..3cbfe1e
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,43 @@
+=======
+Chimère
+=======
+
+Chimère is a cartographic mashup using OpenStreetMap as a default map layer.
+This software aims to create online collaborative and thematic maps. Content
+(multimedia, text) are associated to basic geographics items (Point Of Interest,
+routes). Add on the map are open to everybody with no authentification but are
+moderated by a team in charge of the map.
+
+Features:
+ - Display (by default) of the mapnik OpenStreetMap layer.
+ - Display on the map of POIs (with markers) and routes (with colored
+ polylines).
+ - Thematic choices of items to display (POIs and routes).
+ - Filter themes in regard to currently available items.
+ - Display of the detail of a POI (name, description, pictures, multimedia
+ files).
+ - Add of a cartographic item (POI, route) on the map by an user without
+ authentication (the item is only available after moderation).
+ - Admin interface for moderation and configuration.
+ - Cut a Chimère by "areas". Each "area" can have specific themes, a new default
+ center, welcome message, bounding box, allow of restriction to a bounding
+ box, activation of dynamic themes, available themes, themes checked by
+ default.
+ - Import and export of data. Available formats are: ShapeFile, KML, GeoRSS
+ (import only), CSV and OSM.
+ - Configuration of map layers in administration interface. By default these
+ cartographic items are available: OSM Mapnik, MapQuest, OSM Transport,
+ Cyclemap.
+
+
+Full documentation is available on `Read the docs <http://chimere.readthedocs.org/en/latest/>`_.
+
+External libs
+=============
+
+To be fully functional, this package is provided with external libs:
+ - `OpenLayers <http://openlayers.org/>`_ - 2006-2012 OpenLayers Contributors - 2-clause BSD
+ - `OsmApi <http://wiki.openstreetmap.org/wiki/PythonOsmApi>`_ - 2009-2010 Étienne Chové - GPL v3.
+ - `prettyPhoto <http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/>`_ - 2012 Stephane Caron - GPL v2.
+ - `jMediaelement <https://github.com/aFarkas/jMediaelement>`_ - 2010 Alexander Farkas - GPL v2 and MIT.
+ - `bsmSelect <https://github.com/vicb/bsmSelect/>`_ - 2010 Victor Berchet - GPL v2 and MIT.
diff --git a/apache/django.wsgi b/apache/django.wsgi
index 6227ee2..16758e6 100644
--- a/apache/django.wsgi
+++ b/apache/django.wsgi
@@ -1,5 +1,6 @@
import os, sys
-sys.path.append('/var/local/django/chimere/')
-os.environ['DJANGO_SETTINGS_MODULE'] = 'mychimere_project.settings'
+MAIN_PATH = os.path.realpath(os.path.dirname(__file__)) + "/.."
+sys.path.append(MAIN_PATH)
+os.environ['DJANGO_SETTINGS_MODULE'] = 'mychimere_project.settings' # change with your project name
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
diff --git a/chimere/__init__.py b/chimere/__init__.py
index a7083c7..2ef2100 100644
--- a/chimere/__init__.py
+++ b/chimere/__init__.py
@@ -1,14 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2012-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
-from django.utils.translation import ugettext as _
-
-# templates/chimere/edit.html, templates/chimere/edit_route.html
-_(u"Multimedia files")
-_(u"Picture files")
-
-VERSION = (2, 0)
+VERSION = (2, 0, 2)
def get_version():
return u'.'.join((unicode(num) for num in VERSION))
diff --git a/chimere/admin.py b/chimere/admin.py
index 3c24de0..c9107a5 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2013 É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
@@ -97,7 +97,8 @@ export_to_csv.short_description = _(u"Export to CSV")
def managed_modified(modeladmin, request, queryset):
# not very clean... There is must be a better way to do that
redirect_url = request.get_full_path().split('admin_modification')[0]
- if queryset.count() != 1:
+ if queryset.count() != 1 and len(set([i.ref_item or i
+ for i in queryset.all()])) != 1:
messages.error(request, _(u"Only one item can be managed at a "
u"time."))
return HttpResponseRedirect(redirect_url)
@@ -105,8 +106,9 @@ def managed_modified(modeladmin, request, queryset):
item = queryset.all()[0]
if not item.ref_item or item.ref_item == item:
try:
- item = modeladmin.model.objects.get(ref_item=item)
- except ObjectDoesNotExist:
+ item = modeladmin.model.objects.filter(ref_item=item
+ ).exclude(pk=item.pk).all()[0]
+ except IndexError:
messages.error(request, _(u"No modified item associated "
u"to the selected item."))
return HttpResponseRedirect(redirect_url)
@@ -179,8 +181,8 @@ class MarkerAdmin(admin.ModelAdmin):
Specialized the Point field.
"""
search_fields = ("name",)
- list_display = ('name', 'status')
- list_filter = ('status', 'categories')
+ list_display = ('name', 'status', 'start_date', 'end_date')
+ list_filter = ('status', 'categories', 'start_date', 'end_date')
actions = [validate, disable, managed_modified, export_to_kml,
export_to_shapefile, export_to_csv]
exclude = ['submiter_session_key', 'import_key', 'import_version',
@@ -208,17 +210,19 @@ class MarkerAdmin(admin.ModelAdmin):
}),
)
inlines = [MultimediaInline, PictureInline]
+ has_properties = True
def __init__(self, *args, **kwargs):
"""
Manage properties in fieldsets.
"""
- main_fields = self.fieldsets[0][1]['fields']
- for pm in PropertyModel.objects.filter(available=True).order_by('order'
+ if self.has_properties:
+ main_fields = self.fieldsets[0][1]['fields']
+ for pm in PropertyModel.objects.filter(available=True).order_by('order'
).all():
- pm_name = pm.getNamedId()
- if pm_name not in main_fields:
- main_fields.append(pm_name)
+ pm_name = pm.getNamedId()
+ if pm_name not in main_fields:
+ main_fields.append(pm_name)
super(MarkerAdmin, self).__init__(*args, **kwargs)
def queryset(self, request):
@@ -284,6 +288,7 @@ class RouteAdmin(MarkerAdmin):
}),
)
inlines = []
+ has_properties = False
def queryset(self, request):
qs = self.model._default_manager.get_query_set()
diff --git a/chimere/default_settings.py b/chimere/default_settings.py
deleted file mode 100644
index 049520f..0000000
--- a/chimere/default_settings.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-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
-CHIMERE_EPSG_PROJECTION = 900913
-# projection displayed to the end user by openlayers
-# chimere use the same projection to save its data in the database
-CHIMERE_EPSG_DISPLAY_PROJECTION = 4326
-# display of shortcuts for areas
-CHIMERE_DISPLAY_AREAS = True
-# 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
-CHIMERE_DAYS_BEFORE_EVENT = 30
-
-# JS definition of the main map cf. OpenLayers documentation for more details
-CHIMERE_DEFAULT_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map
-
-# display picture inside the description by default or inside a galery?
-CHIMERE_MINIATURE_BY_DEFAULT = True
diff --git a/chimere/external_utils b/chimere/external_utils
deleted file mode 120000
index 19985ba..0000000
--- a/chimere/external_utils
+++ /dev/null
@@ -1 +0,0 @@
-../utils/ \ No newline at end of file
diff --git a/utils/OsmApi.py b/chimere/external_utils/OsmApi.py
index 3b1b9b1..3b1b9b1 100644
--- a/utils/OsmApi.py
+++ b/chimere/external_utils/OsmApi.py
diff --git a/example_project/__init__.py b/chimere/external_utils/__init__.py
index e69de29..e69de29 100644
--- a/example_project/__init__.py
+++ b/chimere/external_utils/__init__.py
diff --git a/chimere/fixtures/auth_group.json b/chimere/fixtures/auth_group.json
new file mode 100644
index 0000000..e04291c
--- /dev/null
+++ b/chimere/fixtures/auth_group.json
@@ -0,0 +1,46 @@
+[
+ {
+ "pk": 1,
+ "model": "auth.group",
+ "fields": {
+ "name": "Application administrator",
+ "permissions": [
+ 67,
+ 68,
+ 40,
+ 41,
+ 42,
+ 37,
+ 38,
+ 39,
+ 34,
+ 35,
+ 36,
+ 43,
+ 44,
+ 45,
+ 49,
+ 50,
+ 51,
+ 55,
+ 56,
+ 57,
+ 28,
+ 29,
+ 30,
+ 58,
+ 59,
+ 60,
+ 64,
+ 65,
+ 66,
+ 61,
+ 62,
+ 63,
+ 46,
+ 47,
+ 48
+ ]
+ }
+ }
+]
diff --git a/chimere/fixtures/initial_data.json b/chimere/fixtures/initial_data.json
index 222c81c..c44eb63 100644
--- a/chimere/fixtures/initial_data.json
+++ b/chimere/fixtures/initial_data.json
@@ -221,49 +221,5 @@
"layer_code": "new OpenLayers.Layer.MapQuestOSM()",
"name": "OSM - MapQuest"
}
- },
- {
- "pk": 1,
- "model": "auth.group",
- "fields": {
- "name": "Application administrator",
- "permissions": [
- 67,
- 68,
- 40,
- 41,
- 42,
- 37,
- 38,
- 39,
- 34,
- 35,
- 36,
- 43,
- 44,
- 45,
- 49,
- 50,
- 51,
- 55,
- 56,
- 57,
- 28,
- 29,
- 30,
- 58,
- 59,
- 60,
- 64,
- 65,
- 66,
- 61,
- 62,
- 63,
- 46,
- 47,
- 48
- ]
- }
}
]
diff --git a/chimere/fixtures/layers-geobretagne.json b/chimere/fixtures/layers-geobretagne.json
new file mode 100644
index 0000000..b5a406e
--- /dev/null
+++ b/chimere/fixtures/layers-geobretagne.json
@@ -0,0 +1,74 @@
+[
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Cassini - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'cassini', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"Collection David Rumsey\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Cassini - G\u00e9obretagne"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Orthophotographie 2010 BMO - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'ortho-bmo-2010', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"Brest Metropole Oceane - SIG - juin 2010\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Orthophotographie 2010 BMO - G\u00e9obretagne"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Orthophotographie 2010 Lannion Tregor - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'ortho-lanniontregor', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"Lannion Tregor agglomeration\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Orthophotographie 2010 Lannion Tregor - G\u00e9obretagne"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Orthophotographie 2011 Rennes Metropole - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'ortho-rennesmetropole', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"Rennes Métropole\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Orthophotographie 2011 Rennes Metropole - G\u00e9obretagne"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Orthophotographie 2004 BMO - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'ortho-bmo-2004', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"Brest Metropole Oceane - SIG - Sept. 2004\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Orthophotographie 2004 BMO - G\u00e9obretagne"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Orthophotographie 2005 Cap l'Orient - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'ortho-caplorient', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"Cap l'Orient 2005\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Orthophotographie 2005 Cap l'Orient - G\u00e9obretagne"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Orthophotographie 2008 Quimper Communauté - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'ortho-quimpercommunaute', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"Quimper Communauté 2008\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Orthophotographie 2008 Quimper Communauté - G\u00e9obretagne"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Orthophotographie 2010 Morbihan - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'ortho-megalis-56', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"e-Megalis - Mars 2010\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Orthophotographie 2010 Morbihan - G\u00e9obretagne"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.WMS(\r\n \"Orthophotographie infrarouge 2010 Morbihan - G\u00e9obretagne\", \"http://geobretagne.fr/wmsouvert\",\r\n { layers: 'ir-megalis-56', format: 'image/png', transparent:\r\nfalse},\r\n {\r\n attribution: \"e-Megalis - Mars 2010\",\r\n visibility: false,\r\n numZoomLevels:19,\r\n projection: new OpenLayers.Projection(\"EPSG:900913\"),\r\n displayProjection: new OpenLayers.Projection(\"EPSG:4326\"),\r\n}\r\n)\r\n",
+ "name": "Orthophotographie infrarouge 2010 Morbihan - G\u00e9obretagne"
+ }
+ }
+]
diff --git a/chimere/fixtures/layers-opencyclemap.json b/chimere/fixtures/layers-opencyclemap.json
new file mode 100644
index 0000000..5f3ef47
--- /dev/null
+++ b/chimere/fixtures/layers-opencyclemap.json
@@ -0,0 +1,26 @@
+[
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.OSM(\"OpenCycleMap - Cycle\", [\r\n 'http://a.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png',\r\n 'http://b.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png',\r\n 'http://c.tile.opencyclemap.org/cycle/${z}/${x}/${y}.png'],\r\n{attribution:\"Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>\"})",
+ "name": "OpenCycleMap - Cycle"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.OSM(\"OpenCycleMap - Transport\", [\r\n 'http://a.tile2.opencyclemap.org/transport/${z}/${x}/${y}.png',\r\n 'http://b.tile2.opencyclemap.org/transport/${z}/${x}/${y}.png',\r\n 'http://c.tile2.opencyclemap.org/transport/${z}/${x}/${y}.png'],\r\n{attribution:\"Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>\"})",
+ "name": "OpenCycleMap - Transport"
+ }
+ },
+ {
+ "pk": null,
+ "model": "chimere.layer",
+ "fields": {
+ "layer_code": "new OpenLayers.Layer.OSM(\"OpenCycleMap - Landscape\", [\r\n 'http://a.tile3.opencyclemap.org/landscape/${z}/${x}/${y}.png',\r\n 'http://b.tile3.opencyclemap.org/landscape/${z}/${x}/${y}.png',\r\n 'http://c.tile3.opencyclemap.org/landscape/${z}/${x}/${y}.png'],\r\n{attribution:\"Tiles courtesy of <a href='http://www.opencyclemap.org/' target='_blank'>Andy Allan</a>\"})",
+ "name": "OpenCycleMap - Landscape"
+ }
+ }
+]
diff --git a/chimere/forms.py b/chimere/forms.py
index 1d403c8..22cdc8f 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -139,6 +139,8 @@ class ImporterAdminForm(forms.ModelForm):
filtr = forms.CharField(widget=ImportFiltrWidget, required=False)
importer_type = forms.ChoiceField(widget=ImporterChoicesWidget,
choices=[('', '--')]+list(IMPORTER_CHOICES))
+ default_description = forms.CharField(widget=TextareaAdminWidget,
+ required=False)
class Meta:
model = Importer
widgets = {
diff --git a/chimere/locale/fr/LC_MESSAGES/django.po b/chimere/locale/fr/LC_MESSAGES/django.po
index d15aa9a..9cdf92a 100644
--- a/chimere/locale/fr/LC_MESSAGES/django.po
+++ b/chimere/locale/fr/LC_MESSAGES/django.po
@@ -1,5 +1,5 @@
# Chimère
-# Copyright (C) 2008-2012
+# Copyright (C) 2008-2013
# This file is distributed under the same license as the Chimère package.
# Étienne Loks <etienne.loks@peacefrogs.net>, 2008-2011.
#
@@ -7,21 +7,13 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-12-13 15:52+0100\n"
+"POT-Creation-Date: 2013-03-14 18:43+0100\n"
"PO-Revision-Date: 2010-03-20 20:00+0100\n"
"Last-Translator: Étienne Loks <etienne.loks@peacefrogs.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: __init__.py:8 models.py:768
-msgid "Multimedia files"
-msgstr "Fichiers multimedias"
-
-#: __init__.py:9 models.py:840
-msgid "Picture files"
-msgstr "Fichiers d'image"
-
#: actions.py:39
msgid "View"
msgstr "Voir"
@@ -67,73 +59,73 @@ msgstr "Exporter en Shapefile"
msgid "Export to CSV"
msgstr "Exporter en CSV"
-#: admin.py:101
+#: admin.py:102
msgid "Only one item can be managed at a time."
msgstr "Seul un élément à la fois peut-être géré."
-#: admin.py:110
+#: admin.py:112
msgid "No modified item associated to the selected item."
msgstr "Pas d'élément modifié associé à l'élément sélectionné."
-#: admin.py:156
+#: admin.py:158
msgid "Modified item traited."
msgstr "Élément modifié traité."
-#: admin.py:161
+#: admin.py:163
msgid "Managed modified items"
msgstr "Gérer les éléments modifiés"
-#: admin.py:195 admin.py:270
+#: admin.py:197 admin.py:274
msgid "Submitter"
msgstr "Demandeur"
-#: admin.py:200 admin.py:275 admin.py:326
+#: admin.py:202 admin.py:279 admin.py:331
msgid "Import"
msgstr "Import"
-#: admin.py:205 admin.py:280
+#: admin.py:207 admin.py:284
msgid "Associated items"
msgstr "Éléments associés"
-#: admin.py:332
+#: admin.py:337
msgid "Cancel import"
msgstr "Annuler l'import"
-#: admin.py:338
+#: admin.py:343
msgid "Cancel export"
msgstr "Annuler l'export"
-#: admin.py:342
+#: admin.py:347
msgid "Can manage only one OSM export at a time."
msgstr "Ne peux gérer qu'un seul export OSM à la fois."
-#: admin.py:347
+#: admin.py:352
msgid ""
"You must treat all item with the status \"imported\" before exporting to OSM."
msgstr ""
"Vous devez traiter tous les éléments avec le status « importé » avant "
"d'exporter vers OSM."
-#: admin.py:351
+#: admin.py:356
msgid "Only OSM importer are managed for export."
msgstr "Seul les imports de type OSM peuvent être gérés pour les exports."
-#: admin.py:358
+#: admin.py:363
msgid "No point of interest are concerned by this export."
msgstr "Aucun point d'intérêt n'est concerné par cet export."
-#: admin.py:370
+#: admin.py:375
msgid "Export launched."
msgstr "Export lancé."
-#: admin.py:374
+#: admin.py:379
#, python-format
msgid ""
"%s point(s) of interest concerned by this export before bounding box filter."
msgstr ""
"%s point(s) d'intérêt concerné par cet export (avant le filtre sur la zone)"
-#: admin.py:379
+#: admin.py:384
msgid "Export to osm"
msgstr "Exporter vers osm"
@@ -174,7 +166,7 @@ msgstr "Objet"
msgid "OSM user"
msgstr "Utilisateur OSM"
-#: forms.py:118 models.py:1457
+#: forms.py:118 models.py:1500
msgid "Password"
msgstr "Mot de passe"
@@ -192,7 +184,7 @@ msgstr "API de test - %s"
msgid "Main API - %s"
msgstr "API principale - %s"
-#: forms.py:156 forms.py:160
+#: forms.py:158 forms.py:162
msgid ""
"For OSM import you must be provide a filter. Select an area and node/way "
"filter."
@@ -200,73 +192,73 @@ msgstr ""
"Pour les imports OSM vous devez fournir un filtre. Sélectionnez une zone et "
"un filtre sur les nœuds/routes."
-#: forms.py:164
+#: forms.py:166
msgid "Shapefiles must be provided in a zipped archive."
msgstr ""
"Les fichiers Shapefiles doivent être fournis regroupés dans une archive zip."
-#: forms.py:168
+#: forms.py:170
msgid "You have to set \"source\" or \"source file\" but not both."
msgstr ""
"Vous devez spécifier le champ « Source » ou « Fichier source » mais pas les "
"deux."
-#: forms.py:173
+#: forms.py:175
msgid "You have to set \"source\" or \"source file\"."
msgstr "Vous devez spécifier le champ « Source » ou « Fichier source »."
-#: forms.py:234
+#: forms.py:236
msgid "End date has been set with no start date"
msgstr "Une date de fin a été donnée sans date de début"
-#: forms.py:238
+#: forms.py:240
msgid "End date can't be before start date"
msgstr "La date de fin ne peut pas être antérieure à la date de début"
-#: forms.py:248
+#: forms.py:250
msgid "This field is mandatory for the selected categories"
msgstr "Ce champ est obligatoire pour les catégories sélectionnées"
-#: forms.py:499
+#: forms.py:501
msgid "File"
msgstr "Fichier"
-#: forms.py:505
+#: forms.py:507
msgid "Bad file format: this must be a GPX or KML file"
msgstr "Mauvais format de fichier : KML et GPX sont supportés"
-#: forms.py:510 models.py:53 models.py:101 models.py:163 models.py:184
-#: models.py:197 models.py:212 models.py:364 models.py:702 models.py:758
-#: models.py:817 models.py:933 models.py:1262 models.py:1274 models.py:1447
-#: utils.py:470 templates/admin/chimere/managed_modified.html:23
-#: templates/chimere/edit.html:39 templates/chimere/edit_route.html:36
+#: forms.py:512 models.py:53 models.py:101 models.py:163 models.py:184
+#: models.py:197 models.py:212 models.py:375 models.py:720 models.py:776
+#: models.py:835 models.py:953 models.py:1304 models.py:1316 models.py:1490
+#: utils.py:485 templates/admin/chimere/managed_modified.html:23
+#: templates/chimere/edit.html:40 templates/chimere/edit_route.html:37
#: templates/chimere/blocks/alternate_multimedia.html:39
msgid "Name"
msgstr "Nom"
-#: forms.py:519 models.py:1311
+#: forms.py:521 models.py:1353
msgid "Area"
msgstr "Zone"
-#: forms.py:559
+#: forms.py:561
msgid "No area selected."
msgstr "Pas de zone sélectionnée."
-#: forms.py:566
+#: forms.py:568
#, python-format
msgid "The area \"%s\" has the same order, you need to choose another one."
msgstr ""
"La zone « %s » a le même numéro d'ordre, vous devez un choisir un autre."
-#: forms.py:611
+#: forms.py:613
msgid "Start"
msgstr "Départ"
-#: forms.py:612
+#: forms.py:614
msgid "Finish"
msgstr "Arrivée"
-#: forms.py:613
+#: forms.py:615
msgid "Speed"
msgstr "Vitesse"
@@ -274,13 +266,13 @@ msgstr "Vitesse"
msgid "Mnemonic"
msgstr "Mnémonique"
-#: models.py:56 models.py:102 models.py:185 models.py:213 models.py:375
-#: models.py:706 models.py:1280 models.py:1449 models.py:1490
+#: models.py:56 models.py:102 models.py:185 models.py:213 models.py:368
+#: models.py:724 models.py:1322 models.py:1492 models.py:1533
msgid "Available"
msgstr "Disponible"
-#: models.py:57 models.py:173 models.py:186 models.py:230 models.py:760
-#: models.py:832 models.py:1279 models.py:1436 models.py:1448
+#: models.py:57 models.py:173 models.py:186 models.py:230 models.py:778
+#: models.py:850 models.py:1321 models.py:1479 models.py:1491
msgid "Order"
msgstr "Ordre"
@@ -292,15 +284,15 @@ msgstr "Chemin du patron"
msgid "Page"
msgstr "Page"
-#: models.py:103 models.py:457
+#: models.py:103 models.py:469
msgid "Is front page"
msgstr "Est en page principale"
-#: models.py:105 models.py:1458
+#: models.py:105 models.py:1501
msgid "Date"
msgstr "Date"
-#: models.py:107 models.py:759
+#: models.py:107 models.py:777
msgid "Url"
msgstr "Url"
@@ -337,16 +329,16 @@ msgstr "Couleur"
msgid "Category"
msgstr "Catégorie"
-#: models.py:198 models.py:698 models.py:818 models.py:999
+#: models.py:198 models.py:716 models.py:836 models.py:1019
#: templates/chimere/blocks/alternate_multimedia.html:43
msgid "Image"
msgstr "Image"
-#: models.py:200 models.py:820 models.py:1001
+#: models.py:200 models.py:838 models.py:1021
msgid "Height"
msgstr "Hauteur"
-#: models.py:201 models.py:821 models.py:1002
+#: models.py:201 models.py:839 models.py:1022
msgid "Width"
msgstr "Largeur"
@@ -362,8 +354,8 @@ msgstr "Disponible pour soumission"
msgid "Marker"
msgstr "Point d'intérêt"
-#: models.py:217 models.py:995 models.py:1012
-#: templates/chimere/edit_route.html:27
+#: models.py:217 models.py:1015 models.py:1032
+#: templates/chimere/edit_route.html:28
msgid "Route"
msgstr "Trajet"
@@ -431,283 +423,299 @@ msgstr "Fichier zippé"
msgid "Overwrite existing data"
msgstr "Écraser les données existantes"
-#: models.py:334 models.py:391
+#: models.py:334
+msgid "Get description from source"
+msgstr "Obtenir une description depuis la source"
+
+#: models.py:336
+msgid "Default description"
+msgstr "Description par défaut"
+
+#: models.py:338 models.py:396
msgid "Origin"
msgstr "Origine"
-#: models.py:336 models.py:393
+#: models.py:340 models.py:398
msgid "License"
msgstr "Licence"
-#: models.py:339
+#: models.py:343
msgid "Associated subcategories"
msgstr "Sous-catégories associées"
-#: models.py:340 utils.py:474
+#: models.py:344 utils.py:489
msgid "State"
msgstr "État"
-#: models.py:342
+#: models.py:346
msgid "Automatically associate a marker to a way"
msgstr "Associer automatiquement un marqueur à une route"
-#: models.py:346
+#: models.py:350
msgid "Importer"
msgstr "Import"
-#: models.py:366
-msgid "Submitter session key"
-msgstr "Clé de session du demandeur"
-
-#: models.py:368
-msgid "Submitter name or nickname"
-msgstr "Nom ou pseudo du demandeur"
-
-#: models.py:370
-msgid "Submitter email"
-msgstr "Courriel du demandeur"
-
-#: models.py:372
-msgid "Submitter comment"
-msgstr "Commentaire du demandeur"
-
-#: models.py:374
+#: models.py:367
msgid "Submited"
msgstr "Soumis"
-#: models.py:376
+#: models.py:369
msgid "Modified"
msgstr "Modifié"
-#: models.py:377
+#: models.py:370
msgid "Disabled"
msgstr "Désactivé"
-#: models.py:378
+#: models.py:371
msgid "Imported"
msgstr "Importé"
-#: models.py:380
+#: models.py:377
+msgid "Submitter session key"
+msgstr "Clé de session du demandeur"
+
+#: models.py:379
+msgid "Submitter name or nickname"
+msgstr "Nom ou pseudo du demandeur"
+
+#: models.py:381
+msgid "Submitter email"
+msgstr "Courriel du demandeur"
+
+#: models.py:383
+msgid "Submitter comment"
+msgstr "Commentaire du demandeur"
+
+#: models.py:385 models.py:1195
msgid "Status"
msgstr "État"
-#: models.py:381
+#: models.py:386
msgid "Import key"
msgstr "Clé d'import"
-#: models.py:383
+#: models.py:388
msgid "Import version"
msgstr "Version de l'import"
-#: models.py:385
+#: models.py:390
msgid "Source"
msgstr "Source"
-#: models.py:387
+#: models.py:392
msgid "Modified since last import"
msgstr "Modifié depuis le dernier import"
-#: models.py:389
+#: models.py:394
msgid "Not to be exported to OSM"
msgstr "À ne pas exporter vers OSM"
-#: models.py:395 templates/chimere/edit.html:56
-#: templates/chimere/edit_route.html:52
+#: models.py:400 templates/chimere/edit.html:57
+#: templates/chimere/edit_route.html:53
msgid "Start date"
msgstr "Date de début"
-#: models.py:396
+#: models.py:401
msgid "Not mandatory. Set it for dated item such as event. Format YYYY-MM-DD"
msgstr ""
"Optionnel. Précisez ce champ pour les éléments datés comme un événement. "
"Format du champ : AAAA-MM-JJ"
-#: models.py:398 templates/chimere/edit.html:62
-#: templates/chimere/edit_route.html:58
+#: models.py:403 templates/chimere/edit.html:63
+#: templates/chimere/edit_route.html:59
msgid "End date"
msgstr "Date de fin"
-#: models.py:399
+#: models.py:404
msgid ""
"Not mandatory. Set it only if you have a multi-day event. Format YYYY-MM-DD"
msgstr ""
"Optionnel. Précisez ce champ seulement pour des événements durant plusieurs "
"jours. Format du champ : AAAA-MM-JJ"
-#: models.py:449
+#: models.py:461
msgid "Reference marker"
msgstr "Point d'intérêt de référence"
-#: models.py:450 utils.py:476
+#: models.py:462 utils.py:491
msgid "Localisation"
msgstr "Localisation"
-#: models.py:452
+#: models.py:464
msgid "Available Date"
msgstr "Date de mise en disponibilité"
-#: models.py:456 utils.py:475 templates/admin/chimere/managed_modified.html:31
-#: templates/chimere/edit.html:49 templates/chimere/edit_route.html:46
+#: models.py:468 utils.py:490 templates/admin/chimere/managed_modified.html:31
+#: templates/chimere/edit.html:50 templates/chimere/edit_route.html:47
msgid "Description"
msgstr "Description"
-#: models.py:524 models.py:1500
+#: models.py:539 models.py:1543
msgid "Point of interest"
msgstr "Point d'intérêt"
-#: models.py:696
+#: models.py:714
msgid "Audio"
msgstr "Audio"
-#: models.py:697
+#: models.py:715
msgid "Video"
msgstr "Vidéo"
-#: models.py:699
+#: models.py:717
msgid "Other"
msgstr "Autre"
-#: models.py:700
+#: models.py:718
msgid "Media type"
msgstr "Type de media"
-#: models.py:703
+#: models.py:721
msgid "Mime type"
msgstr "Type mime"
-#: models.py:705
+#: models.py:723
msgid "Inside an iframe"
msgstr "À l'intérieur d'un iframe"
-#: models.py:709
+#: models.py:727
msgid "Multimedia type"
msgstr "Type de multimedia"
-#: models.py:710
+#: models.py:728
msgid "Multimedia types"
msgstr "Types de multimedia"
-#: models.py:719
+#: models.py:737
msgid "Automatic recognition"
msgstr "Reconnaissance automatique"
-#: models.py:745
+#: models.py:763
msgid "Extension name"
msgstr "Nom de l'extension"
-#: models.py:747
+#: models.py:765
msgid "Associated multimedia type"
msgstr "Type de multimedia associé"
-#: models.py:751
+#: models.py:769
msgid "Multimedia extension"
msgstr "Extension multimedia"
-#: models.py:752
+#: models.py:770
msgid "Multimedia extensions"
msgstr "Extensions multimedia"
-#: models.py:762 models.py:822
+#: models.py:780 models.py:840
msgid "Display inside the description?"
msgstr "Apparaît dans la description ?"
-#: models.py:767
+#: models.py:785
msgid "Multimedia file"
msgstr "Fichier multimedia"
-#: models.py:824
+#: models.py:786
+msgid "Multimedia files"
+msgstr "Fichiers multimedias"
+
+#: models.py:842
msgid "Thumbnail"
msgstr "Miniature"
-#: models.py:828
+#: models.py:846
msgid "Thumbnail height"
msgstr "Hauteur de la miniature"
-#: models.py:830
+#: models.py:848
msgid "Thumbnail width"
msgstr "Largeur de la miniature"
-#: models.py:839
+#: models.py:857
msgid "Picture file"
msgstr "Fichier d'image"
-#: models.py:934
+#: models.py:858
+msgid "Picture files"
+msgstr "Fichiers d'image"
+
+#: models.py:954
msgid "Raw file (gpx or kml)"
msgstr "Fichier brut (gpx ou kml)"
-#: models.py:936
+#: models.py:956
msgid "Simplified file"
msgstr "Fichier simplifié"
-#: models.py:938
+#: models.py:958
msgid "KML"
msgstr "KML"
-#: models.py:938
+#: models.py:958
msgid "GPX"
msgstr "GPX"
-#: models.py:943
+#: models.py:963
msgid "Route file"
msgstr "Fichier de trajet"
-#: models.py:944
+#: models.py:964
msgid "Route files"
msgstr "Fichiers de trajet"
-#: models.py:994
+#: models.py:1014
msgid "Reference route"
msgstr "Trajet de référence"
-#: models.py:998
+#: models.py:1018
msgid "Associated file"
msgstr "Fichier associé"
-#: models.py:1003
+#: models.py:1023
msgid "Has an associated marker"
msgstr "Dispose d'un marqueur associé"
-#: models.py:1263
+#: models.py:1305
msgid "Layer code"
msgstr "Code pour la couche"
-#: models.py:1269
+#: models.py:1311
msgid "Layer"
msgstr "Couche"
-#: models.py:1275
+#: models.py:1317
msgid "Area urn"
msgstr "Urn de la zone"
-#: models.py:1277 templates/chimere/blocks/welcome.html:3
+#: models.py:1319 templates/chimere/blocks/welcome.html:3
msgid "Welcome message"
msgstr "Message d'accueil"
-#: models.py:1281
+#: models.py:1323
msgid "Upper left corner"
msgstr "Coin en haut à gauche"
-#: models.py:1283
+#: models.py:1325
msgid "Lower right corner"
msgstr "Coin en bas à droite"
-#: models.py:1285
+#: models.py:1327
msgid "Default area"
msgstr "Zone par défaut"
-#: models.py:1286
+#: models.py:1328
msgid "Only one area is set by default"
msgstr "Seule une zone est définie par défaut"
-#: models.py:1290
+#: models.py:1332
msgid "Sub-categories checked by default"
msgstr "Sous-catégories cochées par défaut"
-#: models.py:1292
+#: models.py:1334
msgid "Sub-categories dynamicaly displayed"
msgstr "Sous-categories affichées dynamiquement"
-#: models.py:1293
+#: models.py:1335
msgid ""
"If checked, categories are only displayed in the menu if they are available "
"on the current extent."
@@ -715,72 +723,72 @@ msgstr ""
"Si coché, les catégories sont disponibles sur le menu seulement si elles "
"apparaissent sur la zone affichée."
-#: models.py:1297 models.py:1452
+#: models.py:1339 models.py:1495
msgid "Restricted to theses sub-categories"
msgstr "Restreindre à ces sous-categories"
-#: models.py:1298
+#: models.py:1340
msgid "If no sub-category is set all sub-categories are available"
msgstr ""
"Si aucune sous-catégorie n'est définie toutes les sous-catégories sont "
"disponibles"
-#: models.py:1300
+#: models.py:1342
msgid "Link to an external CSS"
msgstr "Lien vers une feuille de style externe"
-#: models.py:1302
+#: models.py:1344
msgid "Restrict to the area extent"
msgstr "Restreindre à l'étendue de la zone"
-#: models.py:1437 widgets.py:88
+#: models.py:1480 widgets.py:88
msgid "Default layer"
msgstr "Couche par défaut"
-#: models.py:1441 models.py:1442
+#: models.py:1484 models.py:1485
msgid "Layers"
msgstr "Couches"
-#: models.py:1450
+#: models.py:1493
msgid "Mandatory"
msgstr "Obligatoire"
-#: models.py:1453
+#: models.py:1496
msgid ""
"If no sub-category is set all the property applies to all sub-categories"
msgstr ""
"Si aucune sous-catégorie n'est précisée, cette propriété est disponible pour "
"toutes les sous-catégories"
-#: models.py:1455
+#: models.py:1498
msgid "Text"
msgstr "Texte"
-#: models.py:1456
+#: models.py:1499
msgid "Long text"
msgstr "Texte long"
-#: models.py:1459
+#: models.py:1502
msgid "Choices"
msgstr "Choix"
-#: models.py:1467
+#: models.py:1510
msgid "Type"
msgstr "Type"
-#: models.py:1472 models.py:1488 models.py:1502
+#: models.py:1515 models.py:1531 models.py:1545
msgid "Property model"
msgstr "Modèle de propriété"
-#: models.py:1489 models.py:1503
+#: models.py:1532 models.py:1546
msgid "Value"
msgstr "Valeur"
-#: models.py:1495
+#: models.py:1538
msgid "Model property choice"
msgstr "Choix pour les modèles de propriété"
-#: models.py:1514
+#: models.py:1557
msgid "Property"
msgstr "Propriété"
@@ -834,69 +842,69 @@ msgstr "Export échoué"
msgid "Export canceled"
msgstr "Export annulé"
-#: utils.py:135 utils.py:184
+#: utils.py:148 utils.py:197
msgid "Bad zip file"
msgstr "Mauvais fichier zip"
-#: utils.py:187
+#: utils.py:200
msgid "Missing file(s) inside the zip file"
msgstr "Fichier(s) manquant(s) dans l'archive zip"
-#: utils.py:228
+#: utils.py:241
msgid "Bad XML file"
msgstr "Mauvais fichier XML"
-#: utils.py:313
+#: utils.py:328
msgid "Error while reading the data source."
msgstr "Erreur lors de la lecture de la source."
-#: utils.py:331
+#: utils.py:346
#, python-format
msgid "SRID cannot be guessed. The default SRID (%s) has been used."
msgstr "Le SRID n'a pu être trouvé. Le SRID par défaut (%s) a été utilisé."
-#: utils.py:352
+#: utils.py:367
msgid "Type of geographic item of this shapefile is not managed by Chimère."
msgstr ""
"Les types des éléments géographiques de ce fichier Shapefile ne sont pas "
"gérés par Chimère."
-#: utils.py:372
+#: utils.py:387
msgid "Bad Shapefile"
msgstr "Mauvais fichier Shapefile"
-#: utils.py:414
+#: utils.py:429
msgid "Could not create file!"
msgstr "Ne peut pas créer le fichier !"
-#: utils.py:425
+#: utils.py:440
msgid "Failed to create field"
msgstr "Ne peut pas créer un champ"
-#: utils.py:471 templates/admin/chimere/managed_modified.html:25
-#: templates/chimere/edit.html:44 templates/chimere/edit_route.html:41
+#: utils.py:486 templates/admin/chimere/managed_modified.html:25
+#: templates/chimere/edit.html:45 templates/chimere/edit_route.html:42
#: templates/chimere/main_map.html:13
#: templates/chimere/main_map_simple.html:10
msgid "Categories"
msgstr "Catégories"
-#: utils.py:504
+#: utils.py:519
msgid "Invalid CSV format"
msgstr "Fichier CSV non valide"
-#: utils.py:579
+#: utils.py:597
msgid "RSS feed is not well formed"
msgstr "Flux RSS non valide"
-#: utils.py:654
+#: utils.py:673
msgid "Nothing to import"
msgstr "Rien à importer"
-#: utils.py:742
+#: utils.py:757
msgid "New items imported - validate them before exporting"
msgstr "Nouveaux éléments importés - valider ceux-ci avant d'exporter"
-#: utils.py:744
+#: utils.py:759
msgid ""
"There are items from a former import not yet validated - validate them "
"before exporting"
@@ -904,19 +912,19 @@ msgstr ""
"Il y a des éléments d'un import précédent pas encore validé - Validez les "
"avant d'exporter"
-#: utils.py:756
+#: utils.py:771
msgid "Bad params - programming error"
msgstr "Mauvais paramètres - erreur de programmation"
-#: utils.py:766
+#: utils.py:781
msgid "Bad param"
msgstr "Mauvais paramètre"
-#: utils.py:781
+#: utils.py:796
msgid "No non ambigious tag is defined in the XAPI request"
msgstr "Pas de tag non ambigü définis dans la requête XAPI"
-#: utils.py:783
+#: utils.py:798
msgid ""
"No bounding box is defined in the XAPI request.If you are sure to manage the "
"entire planet set the bounding box to -180,-90,180,90"
@@ -925,19 +933,19 @@ msgstr ""
"vouloir lancer la requête sur la planète entière fixez la « bounding box » "
"à -180,-90,180,90"
-#: views.py:278
+#: views.py:290
msgid "There are missing field(s) and/or errors in the submited form."
msgstr "Il y a des champs manquants ou des erreurs dans ce formulaire."
-#: views.py:363
+#: views.py:375
msgid "Bad file. Please check it with an external software."
msgstr "Fichier incohérent. Merci de le vérifier avec un logiciel externe."
-#: views.py:475
+#: views.py:487
msgid "Comments/request on the map"
msgstr "Commentaires/requètes sur la carte"
-#: views.py:478
+#: views.py:490
msgid ""
"Thank you for your contribution. It will be taken into account. If you have "
"left your email you may be contacted soon for more details."
@@ -946,19 +954,19 @@ msgstr ""
"laissé votre courriel vous serez peut-être contacté bientôt pour plus de "
"détails."
-#: views.py:482
+#: views.py:494
msgid "Temporary error. Renew your message later."
msgstr "Erreur temporaire. Réenvoyez votre message plus tard."
-#: views.py:656
+#: views.py:663
msgid "No category available in this area."
msgstr "Pas de catégorie disponible sur cette zone."
-#: views.py:756
+#: views.py:763
msgid "Bad geometry"
msgstr "Géométrie incorrecte"
-#: views.py:841
+#: views.py:848
msgid "Incorrect choice in the list"
msgstr "Choix incorrect dans la liste"
@@ -1267,27 +1275,39 @@ msgstr "Je souhaiterais proposer une modification pour cet élément :"
msgid "Error"
msgstr "Erreur"
-#: templates/chimere/edit.html:24
-msgid "Add/modify a point of interest"
+#: templates/chimere/edit.html:23 templates/chimere/edit_route.html:20
+msgid ""
+"You are logged as an administrator. Your modifications will be taking into "
+"account immediately."
+msgstr ""
+"Vous êtes connecté comme administrateur. Vos modifications vont être prises "
+"en compte immédiatement."
+
+#: templates/chimere/edit.html:25
+msgid "Modify a point of interest"
+msgstr "Modifier un point d'intérêt"
+
+#: templates/chimere/edit.html:25
+msgid "Add a point of interest"
msgstr "Ajout d'un point d'intérêt"
-#: templates/chimere/edit.html:30
+#: templates/chimere/edit.html:31
msgid "Point"
msgstr "Point"
-#: templates/chimere/edit.html:31 templates/chimere/edit_route.html:28
+#: templates/chimere/edit.html:32 templates/chimere/edit_route.html:29
msgid "Select a location for this new site"
msgstr "Choisissez une localisation pour ce nouveau site"
-#: templates/chimere/edit.html:37 templates/chimere/edit_route.html:34
+#: templates/chimere/edit.html:38 templates/chimere/edit_route.html:35
msgid "indicates a mandatory field"
msgstr "indique un champ obligatoire"
-#: templates/chimere/edit.html:113
+#: templates/chimere/edit.html:114
msgid "Personal information"
msgstr "Informations personnelles"
-#: templates/chimere/edit.html:115
+#: templates/chimere/edit.html:116
msgid ""
"This fields are not mandatory. If you provided them they not will be made "
"public and they will only used to join you for this project."
@@ -1296,29 +1316,33 @@ msgstr ""
"pas publiés et ne seront utilisés seulement pour vous joindre dans le cadre "
"de ce projet."
-#: templates/chimere/edit.html:118
+#: templates/chimere/edit.html:119
msgid "Your name or nickname"
msgstr "Votre nom ou pseudo"
-#: templates/chimere/edit.html:123
+#: templates/chimere/edit.html:124
msgid "Your email"
msgstr "Votre courriel"
-#: templates/chimere/edit.html:128
+#: templates/chimere/edit.html:129
msgid "Comments about your submission"
msgstr "Commentaires au sujet de votre proposition"
-#: templates/chimere/edit.html:134
+#: templates/chimere/edit.html:135
msgid "Upload in progress. Please wait..."
msgstr "Dépôt en cours. Veuillez patienter..."
-#: templates/chimere/edit.html:152 templates/chimere/edit_route.html:77
+#: templates/chimere/edit.html:153 templates/chimere/edit_route.html:78
msgid "Propose"
msgstr "Proposez"
-#: templates/chimere/edit_route.html:21
-msgid "Add/modify a route"
-msgstr "Ajout ou modifier un trajet"
+#: templates/chimere/edit_route.html:22
+msgid "Modify a route"
+msgstr "Modifier un trajet"
+
+#: templates/chimere/edit_route.html:22
+msgid "Add a route"
+msgstr "Ajout d'un nouveau trajet"
#: templates/chimere/main_map.html:35
msgid "Simple map"
diff --git a/chimere/migrations/0042_fix_rights.py b/chimere/migrations/0042_fix_rights.py
new file mode 100644
index 0000000..6b64313
--- /dev/null
+++ b/chimere/migrations/0042_fix_rights.py
@@ -0,0 +1,261 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import DataMigration
+from django.db import models
+from django.contrib.auth.models import ContentType, Permission, Group, User
+
+class Migration(DataMigration):
+
+ def forwards(self, orm):
+ "Fix bad migration of content type."
+ # chimère migration: we can use auth models directly
+ for ct in ContentType.objects.filter(app_label='main').all():
+ new_ct, n = ContentType.objects.get_or_create(app_label='chimere',
+ model=ct.model,
+ defaults={'name':ct.name})
+ if not new_ct.name and ct.name:
+ new_ct.name = ct.name
+ new_ct.save()
+ for perm in Permission.objects.filter(content_type_id=ct.pk).all():
+ new_perm, n = Permission.objects.get_or_create(
+ content_type=new_ct, codename=perm.codename,
+ defaults={'name':perm.name})
+ groups = Group.objects.filter(permissions=perm).distinct()
+ for group in groups.all():
+ group.permissions.remove(perm)
+ group.permissions.add(new_perm)
+ users = User.objects.filter(user_permissions=perm).distinct()
+ for user in users.all():
+ user.user_permissions.remove(perm)
+ user.user_permissions.add(new_perm)
+ perm.delete()
+ ct.delete()
+
+ def backwards(self, orm):
+ pass
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ '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', [], {'unique': 'True'}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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': {'ordering': "['order']", 'object_name': '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'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': '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.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'associate_marker_to_way': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'source_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']", 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'to': "orm['chimere.Area']", 'null': 'True', 'blank': 'True'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': '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': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': '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'}),
+ 'has_associated_marker': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': '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': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'subcategories'", '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', [], {'default': '1000'}),
+ 'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere']
+ symmetrical = True
diff --git a/chimere/migrations/0043_auto__add_field_importer_get_description.py b/chimere/migrations/0043_auto__add_field_importer_get_description.py
new file mode 100644
index 0000000..295d3b2
--- /dev/null
+++ b/chimere/migrations/0043_auto__add_field_importer_get_description.py
@@ -0,0 +1,245 @@
+# -*- coding: 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 field 'Importer.get_description'
+ db.add_column('chimere_importer', 'get_description',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'Importer.get_description'
+ db.delete_column('chimere_importer', 'get_description')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ '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', [], {'unique': 'True'}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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': {'ordering': "['order']", 'object_name': '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'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': '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.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'associate_marker_to_way': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'get_description': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'source_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']", 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'to': "orm['chimere.Area']", 'null': 'True', 'blank': 'True'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': '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': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': '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'}),
+ 'has_associated_marker': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': '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': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'subcategories'", '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', [], {'default': '1000'}),
+ 'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/migrations/0044_auto__add_field_importer_default_description.py b/chimere/migrations/0044_auto__add_field_importer_default_description.py
new file mode 100644
index 0000000..ccabcd4
--- /dev/null
+++ b/chimere/migrations/0044_auto__add_field_importer_default_description.py
@@ -0,0 +1,246 @@
+# -*- coding: 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 field 'Importer.default_description'
+ db.add_column('chimere_importer', 'default_description',
+ self.gf('django.db.models.fields.TextField')(null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'Importer.default_description'
+ db.delete_column('chimere_importer', 'default_description')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}),
+ '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', [], {'unique': 'True'}),
+ 'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}),
+ 'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.arealayers': {
+ 'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'},
+ 'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}),
+ 'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.category': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Category'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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': {'ordering': "['order']", 'object_name': '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'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': '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.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'associate_marker_to_way': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'default_description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'get_description': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'source_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.layer': {
+ 'Meta': {'object_name': 'Layer'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.marker': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'},
+ 'available_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.multimediaextension': {
+ 'Meta': {'object_name': 'MultimediaExtension'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'})
+ },
+ 'chimere.multimediafile': {
+ 'Meta': {'object_name': 'MultimediaFile'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']", 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
+ },
+ 'chimere.multimediatype': {
+ 'Meta': {'object_name': 'MultimediaType'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News'},
+ 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'to': "orm['chimere.Area']", 'null': 'True', 'blank': 'True'}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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.picturefile': {
+ 'Meta': {'object_name': 'PictureFile'},
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}),
+ 'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': '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': {'ordering': "('order',)", 'object_name': 'PropertyModel'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.route': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': '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'}),
+ 'has_associated_marker': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'submiter_comment': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'ordering': "('name',)", 'object_name': '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': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'subcategories'", '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', [], {'default': '1000'}),
+ 'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/models.py b/chimere/models.py
index a059b35..90cb06a 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2013 É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
@@ -331,6 +331,10 @@ class Importer(models.Model):
zipped = models.BooleanField(_(u"Zipped file"), default=False)
overwrite = models.BooleanField(_(u"Overwrite existing data"),
default=False)
+ get_description = models.BooleanField(_(u"Get description from source"),
+ default=False)
+ default_description = models.TextField(_(u"Default description"),
+ blank=True, null=True)
origin = models.CharField(_(u"Origin"), max_length=100,
blank=True, null=True)
license = models.CharField(_(u"License"), max_length=100,
@@ -425,6 +429,13 @@ class GeographicItem(models.Model):
self.import_key = new_keys
self.save()
+ def has_modified(self):
+ if (self.ref_item and self.ref_item != self) \
+ or self.__class__.objects.filter(ref_item=self
+ ).exclude(pk=self.pk).count():
+ return True
+ return False
+
@classmethod
def properties(cls):
return [pm for pm in PropertyModel.objects.filter(available=True)]
@@ -505,7 +516,10 @@ class Marker(GeographicItem):
@property
def date(self):
- if settings.CHIMERE_DAYS_BEFORE_EVENT:
+ if settings.CHIMERE_DAYS_BEFORE_EVENT and self.start_date:
+ today = datetime.date.today()
+ if self.end_date and self.start_date < today:
+ return self.end_date
return self.start_date
@property
@@ -629,11 +643,14 @@ class Marker(GeographicItem):
def default_category(self):
# Should we select only available ones ?
# Should we catch if not exists ?
- return self.categories.all()[0]
+ cats = self.categories
+ if cats.count():
+ return cats.all()[0]
def get_absolute_url(self, area_name=''):
- parameters = 'current_feature=%d&checked_categories=%s' % (self.id,
- self.default_category.pk)
+ parameters = 'current_feature=%d' % self.id
+ if self.default_category:
+ parameters += '&checked_categories=%s' % self.default_category.pk
urn = TinyUrl.getUrnByParameters(parameters)
area_name = area_name + '/' if area_name else ''
url = reverse('chimere:tiny', args=[area_name, urn])
@@ -890,7 +907,7 @@ def picturefile_post_save(sender, **kwargs):
basename, format = os.path.splitext(filetail)
basename = defaultfilters.slugify(basename)
basename = re.sub(r'-','_', basename)
- miniature = basename + '_thumb' + format
+ miniature = basename + '_thumb.jpg'
filename = file.path
miniature_filename = os.path.join(filehead, miniature)
try:
@@ -910,10 +927,12 @@ def picturefile_post_save(sender, **kwargs):
image.thumbnail([image_x, image_y], Image.ANTIALIAS)
temp_image = open(miniature_filename, 'w')
+ if image.mode != "RGB":
+ image = image.convert('RGB')
try:
- image.save(temp_image, image.format, quality=90, optimize=1)
+ image.save(temp_image, 'JPEG', quality=90, optimize=1)
except:
- image.save(temp_image, image.format, quality=90)
+ image.save(temp_image, 'JPEG', quality=90)
short_name = miniature_filename[len(settings.MEDIA_ROOT):]
picturefile.thumbnailfile = short_name
@@ -1396,8 +1415,8 @@ def area_post_save(sender, **kwargs):
perm = Permission.objects.filter(codename=mnemo)
lbl = "Can change " + area.name
if not perm.count():
- content_type = ContentType.objects.get(app_label="chimere",
- model="area")
+ content_type, created = ContentType.objects.get_or_create(
+ app_label="chimere", model="area")
perm = Permission(name=lbl, content_type_id=content_type.id,
codename=mnemo)
perm.save()
@@ -1424,7 +1443,8 @@ def area_post_save(sender, **kwargs):
('chimere', 'multimediafile'),
('chimere', 'picturefile'),
('chimere', 'routefile')):
- ct = ContentType.objects.get(app_label=app_label, model=model)
+ ct, created = ContentType.objects.get_or_create(app_label=app_label,
+ model=model)
for p in Permission.objects.filter(content_type=ct).all():
group.permissions.add(p)
diff --git a/chimere/static/bsmSelect/GPL-LICENSE.txt b/chimere/static/bsmSelect/GPL-LICENSE.txt
new file mode 100644
index 0000000..76927f5
--- /dev/null
+++ b/chimere/static/bsmSelect/GPL-LICENSE.txt
@@ -0,0 +1,278 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES. \ No newline at end of file
diff --git a/chimere/static/bsmSelect/MIT-LICENSE.txt b/chimere/static/bsmSelect/MIT-LICENSE.txt
new file mode 100644
index 0000000..908016b
--- /dev/null
+++ b/chimere/static/bsmSelect/MIT-LICENSE.txt
@@ -0,0 +1,21 @@
+Copyright (c) 2008 by Ryan Cramer, http://www.ryancramer.com
+Copyright (c) 2010 by Victor Berchet
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/chimere/static/bsmSelect/README.md b/chimere/static/bsmSelect/README.md
new file mode 100644
index 0000000..bd14c6a
--- /dev/null
+++ b/chimere/static/bsmSelect/README.md
@@ -0,0 +1,191 @@
+# bsmSelect - Better Select Multiple #
+
+based on asmSelect - Alternate Select Multiple by Ryan Cramer
+
+ * [Google code project](http://code.google.com/p/jquery-asmselect/)
+ * [Github page](http://github.com/ryancramerdesign/jquery-asmSelect)
+ * [Ryan's article about asmSelect](http://www.ryancramer.com/journal/entries/select_multiple/)
+ * the original README can be found in the project root folder
+
+## Demo ##
+
+[bsmSelect demo](http://www.suumit.com/projects/bsmSelect/examples/index.html)
+
+## Usage ##
+
+Include jquery, bsmSelect, and css in document head:
+
+ <script type="text/javascript" src="jquery.js"></script>
+ <script type="text/javascript" src="jquery.bsmselect.js"></script>
+ <link rel="stylesheet" type="text/css" href="jquery.bsmselect.css" />
+
+Use a jQuery selector in your document ready function:
+
+ jQuery(function($) {
+ $("select[multiple]").bsmSelect();
+ });
+
+If desired, you can specify options when you call the plugin:
+
+ jQuery(function($) {
+ $("select[multiple]").bsmSelect({
+ addItemTarget: 'top'
+ });
+ });
+
+The newly created select default option is the original select title attribute:
+
+ <select name="cities" multiple="multiple" title="Please select a city">
+ ...
+ </select>
+
+## Requirements ##
+
+* jQuery 1.4+ (you might need a newer version for IE9 compatibility)
+
+## Options ##
+
+### Primary Options ###
+
+* listType:
+
+ * Specify what list will be created or used as part of the bsmSelect.
+ * Can accept a callback that accepts the original <select> as an argument and returns a jQuery object with a single list.
+ * Allowed values:
+ * 'ol'
+ * 'ul'
+ * function(originalSelect) { // your code; return $('&lt;ul&gt;'); }
+ * Default: 'ol'
+
+* highlightEffect:
+
+ * Show a quick highlight of what item was added or removed?
+ * Allowed values:
+ * an animation function
+ * Default: $.noop (no effect)
+
+* showEffect:
+
+ * Animate the addition of an item to the list
+ * Allowed values:
+ * an animation function
+ * Default: $.bsmSelect.effects.show
+
+* hideEffect:
+
+ * Animate the removal of an items from the list
+ * Allowed values:
+ * an animation function
+ * Default: $.bsmSelect.effects.remove
+
+* hideWhenAdded:
+
+ * Stop showing in select after item has been added?
+ * Allowed values: true or false
+ * Default: false
+ * Note: Only functional in Firefox 3 at this time.
+
+* addItemTarget:
+
+ * Where to place new selected items that are added to the list.
+ * Allowed values: 'top' or 'bottom' or 'original' to keep the original select sort order
+ * Default: 'bottom'
+ * Note: When using the 'original' mode, the sort order can be overriden by setting the 'bsm-order' data on each option.
+
+* debugMode:
+
+ * Keeps original select multiple visible so that you can monitor live changes made to it when debugging.
+ * Default: false
+
+* extractLabel:
+
+ * A function to compute the list element name from the option object
+ * Default: extract the option html
+
+* plugins
+
+ * An array of plugins objects to enable (they only are required to have an `init` method which is called on init with the Bsmselect instance as single argument).
+ * Default: an empty array (no plugin enabled by default)
+
+### Text Labels ###
+
+* title
+
+ * Text used for the default select label (when original select title attribute is not set)
+ * Default: 'Select...'
+
+* removeLabel:
+
+ * Text used for the remove link of each list item.
+ * Default: 'remove'
+
+* highlightAddedLabel:
+
+ * Text that precedes highlight of item added.
+ * Default: 'Added: '
+
+* highlightRemovedLabel:
+
+ * Text that precedes highlight of item removed.
+ * Default: 'Removed: '
+
+### Modifiable CSS Classes ###
+
+* containerClass:
+
+ * Class for container that wraps the entire bsmSelect.
+ * Default: 'bsmContainer'
+
+* selectClass:
+
+ * Class for the newly created <select>.
+ * Default: 'bsmSelect'
+
+* listClass:
+
+ * Class for the newly created list of listType (ol or ul).
+ * Default: 'bsmList'
+
+* listSortableClass:
+
+ * Another class given to the list when sortable is active.
+ * Default: 'bsmListSortable'
+
+* listItemClass:
+
+ * Class given to the <li> list items.
+ * Default: 'bsmListItem'
+
+* listItemLabelClass:
+
+ * Class for the label text that appears in list items.
+ * Default: 'bsmListItemLabel'
+
+* removeClass:
+
+ * Class given to the remove link in each list item.
+ * Any element found in the <li> with this class will remove it.
+ * If you give the <li> this class, clicking anywhere on the <li> will remove it.
+ * Default: 'bsmListItemRemove'
+
+* highlightClass:
+
+ * Class given to the highlight <span>.
+ * Default: 'bsmHighlight'
+
+## Authors and contributors ##
+
+ * [Ryan Cramer](http://www.ryancramer.com/) is the author of the original asmSelect
+ * [Victor Berchet](http://github.com/vicb) is the author of bsmSelect
+ * [Andy Fowler](http://github.com/andyfowler) has contributed many enhancements
+ * [Cracky](https://github.com/Cracky)
+ * [Marc Busqué](https://github.com/laMarciana) has contributed to fix [issue #21](https://github.com/vicb/bsmSelect/issues/21) and with minimal CSS
+
+## History ##
+
+see [history.md](history.md).
+
+## Related Projects ##
+
+ * [Chosen](https://github.com/harvesthq/chosen/)
+
diff --git a/chimere/static/chimere/js/jquery/bsmSelect/css/jquery.bsmselect.css b/chimere/static/bsmSelect/css/jquery.bsmselect.css
index ad770d0..ad770d0 100644
--- a/chimere/static/chimere/js/jquery/bsmSelect/css/jquery.bsmselect.css
+++ b/chimere/static/bsmSelect/css/jquery.bsmselect.css
diff --git a/chimere/static/chimere/js/jquery/bsmSelect/css/jquery.bsmselect.custom.css b/chimere/static/bsmSelect/css/jquery.bsmselect.custom.css
index 8c48aeb..8c48aeb 100644
--- a/chimere/static/chimere/js/jquery/bsmSelect/css/jquery.bsmselect.custom.css
+++ b/chimere/static/bsmSelect/css/jquery.bsmselect.custom.css
diff --git a/chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.compatibility.js b/chimere/static/bsmSelect/js/jquery.bsmselect.compatibility.js
index a743a07..a743a07 100644
--- a/chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.compatibility.js
+++ b/chimere/static/bsmSelect/js/jquery.bsmselect.compatibility.js
diff --git a/chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.js b/chimere/static/bsmSelect/js/jquery.bsmselect.js
index 25527c6..25527c6 100644
--- a/chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.js
+++ b/chimere/static/bsmSelect/js/jquery.bsmselect.js
diff --git a/chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.sortable.js b/chimere/static/bsmSelect/js/jquery.bsmselect.sortable.js
index 3e4b9f8..3e4b9f8 100644
--- a/chimere/static/chimere/js/jquery/bsmSelect/js/jquery.bsmselect.sortable.js
+++ b/chimere/static/bsmSelect/js/jquery.bsmselect.sortable.js
diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css
index 67a28a4..41502c2 100644
--- a/chimere/static/chimere/css/styles.css
+++ b/chimere/static/chimere/css/styles.css
@@ -90,16 +90,6 @@ div.warning,
border:1px solid #ff3f3f;
}
-/* opacity */
-
-#welcome{
- opacity:0.9;
-}
-
-#panel, #areas, #detail, #category_description, #chimere_itinerary_panel{
- opacity:0.8;
-}
-
/* rounded */
/* entête */
@@ -1107,3 +1097,8 @@ div.pp_default .pp_expand{
left:10px;
background-position: -15px -80px;
}
+
+.olControlAttribution{
+ left:6px;
+ bottom:5px;
+}
diff --git a/chimere/static/chimere/img/cloud-popup-relative.png b/chimere/static/chimere/img/cloud-popup-relative.png
index 1215a36..1215a36 100755..100644
--- a/chimere/static/chimere/img/cloud-popup-relative.png
+++ b/chimere/static/chimere/img/cloud-popup-relative.png
Binary files differ
diff --git a/chimere/static/chimere/js/importer_interface.js b/chimere/static/chimere/js/importer_interface.js
index aa332d4..b14b986 100644
--- a/chimere/static/chimere/js/importer_interface.js
+++ b/chimere/static/chimere/js/importer_interface.js
@@ -4,16 +4,18 @@ django.jQuery(function($) {
'field-source', 'field-overwrite'),
KML:new Array('field-source', 'field-source_file', 'field-default_name',
'field-filtr', 'field-zipped', 'field-origin',
- 'field-license', 'field-categories', 'field-overwrite'),
+ 'field-license', 'field-categories', 'field-overwrite',
+ 'field-get_description'),
SHP:new Array('field-source', 'field-source_file', 'field-default_name',
'field-zipped', 'field-origin', 'field-srid',
'field-license', 'field-categories', 'field-overwrite'),
RSS:new Array('field-source', 'field-default_name', 'field-origin',
'field-srid', 'field-license', 'field-categories',
- 'field-overwrite'),
+ 'field-overwrite', 'field-get_description'),
CSV:new Array('field-source', 'field-source_file', 'field-default_name',
'field-origin', 'field-srid', 'field-license',
- 'field-categories', 'field-overwrite')
+ 'field-categories', 'field-overwrite',
+ 'field-get_description')
}
var map_initialized;
function refresh_importer_form(){
@@ -50,9 +52,24 @@ django.jQuery(function($) {
$('.input-osm').hide();
if($('#id_source').val() == default_xapi) $('#id_source').val('');
}
+ refresh_default_desc();
+ }
+ function refresh_default_desc(){
+ if (!$('.form-row.field-get_description').is(':visible')){
+ $('.form-row.field-default_description').show();
+ $('.form-row.field-get_description input').attr('checked', false);
+ } else {
+ if (!$('.form-row.field-get_description input').is(':checked')){
+ $('.form-row.field-default_description').show();
+ } else {
+ $('.form-row.field-default_description').hide();
+ $('.form-row.field-default_description textarea').val("");
+ }
+ }
}
refresh_importer_form();
$('.field-importer_type select').change(refresh_importer_form);
+ $('.field-get_description input').change(refresh_default_desc);
function refresh_filtr_form(){
if (!$('#upper_left_lat').val() ||
!parseFloat($('#upper_left_lat').val())){
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index 3e148b0..104e527 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -61,6 +61,7 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
dynamic_categories: false,
display_submited: false,
display_feature: null,
+ display_route: null,
area_id: null,
checked_categories: [],
zoom: null,
@@ -174,6 +175,8 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
/* Create map object */
settings.map = map = new OpenLayers.Map(map_element, map_options);
+ map.addControl(new OpenLayers.Control.Attribution());
+
/* Manage permalink */
if (!settings.edition){
if (settings.permalink == null && !settings.edition) {
@@ -372,7 +375,6 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
if (settings.zoom && settings.lon && settings.lat) {
var centerLonLat = new OpenLayers.LonLat(settings.lon,
settings.lat);
- centerLonLat.transform(EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION);
settings.map.setCenter(centerLonLat, settings.zoom);
}
/* if not zoom to the extent in cookies */
@@ -901,7 +903,10 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
settings.current_feature = feature;
_popup(feature);
methods.display_feature_detail(feature.pk);
- _repan_popup();
+ if (!settings.display_route){
+ settings.map.setCenter(feature.lonlat, 16);
+ _repan_popup();
+ }
settings.display_feature = null;
//methods.loadCategories();
}
@@ -943,6 +948,11 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
settings.current_feature.style = style;
settings.current_feature.geometry = linestring;
settings.layerVectors.addFeatures([settings.current_feature]);
+ if (settings.display_route && settings.display_route == route.properties.pk){
+ var dataExtent = settings.current_feature.geometry.getBounds();
+ map.zoomToExtent(dataExtent, closest=true);
+ methods.loadCategories();
+ }
},
/*
* Put a multiline on the map
diff --git a/chimere/static/jme/GPL-LICENSE-2.txt b/chimere/static/jme/GPL-LICENSE-2.txt
new file mode 100644
index 0000000..3c993fd
--- /dev/null
+++ b/chimere/static/jme/GPL-LICENSE-2.txt
@@ -0,0 +1,278 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES. \ No newline at end of file
diff --git a/chimere/static/jme/MIT-LICENSE.txt b/chimere/static/jme/MIT-LICENSE.txt
new file mode 100644
index 0000000..e197885
--- /dev/null
+++ b/chimere/static/jme/MIT-LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2010 Alexander Farkas, http://protofunc.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/chimere/static/chimere/js/OpenLayers.js b/chimere/static/openlayers/OpenLayers.js
index d94ff5b..d94ff5b 100644
--- a/chimere/static/chimere/js/OpenLayers.js
+++ b/chimere/static/openlayers/OpenLayers.js
diff --git a/chimere/static/chimere/js/SimplePanZoom.js b/chimere/static/openlayers/SimplePanZoom.js
index 45619c3..45619c3 100644
--- a/chimere/static/chimere/js/SimplePanZoom.js
+++ b/chimere/static/openlayers/SimplePanZoom.js
diff --git a/chimere/static/prettyPhoto/README b/chimere/static/prettyPhoto/README
new file mode 100755
index 0000000..1e56842
--- /dev/null
+++ b/chimere/static/prettyPhoto/README
@@ -0,0 +1,30 @@
+prettyPhoto v3.1.4
+© Copyright, Stephane Caron
+http://www.no-margin-for-errors.com
+
+
+============================= Released under =============================
+
+Creative Commons 2.5
+http://creativecommons.org/licenses/by/2.5/
+
+OR
+
+GPLV2 license
+http://www.gnu.org/licenses/gpl-2.0.html
+
+You are free to use prettyPhoto in commercial projects as long as the
+copyright header is left intact.
+
+============================ More information ============================
+http://www.no-margin-for-errors.com/projects/prettyPhoto/
+
+
+============================== Description ===============================
+
+prettyPhoto is a jQuery based lightbox clone. Not only does it support images,
+it also add support for videos, flash, YouTube, iFrame. It's a full blown
+media modal box.
+
+Please refer to http://www.no-margin-for-errors.com/projects/prettyPhoto/
+for all the details on how to use.
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnNext.png b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnNext.png
index b28c1ef..b28c1ef 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnNext.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnNext.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnPrevious.png b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnPrevious.png
index e0cd9c4..e0cd9c4 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnPrevious.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/btnPrevious.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/contentPattern.png b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/contentPattern.png
index e5a047c..e5a047c 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/contentPattern.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/contentPattern.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/default_thumbnail.gif b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/default_thumbnail.gif
index 2b1280f..2b1280f 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/default_thumbnail.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/default_thumbnail.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/loader.gif b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/loader.gif
index 50820ee..50820ee 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/loader.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/loader.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/sprite.png b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/sprite.png
index fb8c0f8..fb8c0f8 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/sprite.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_rounded/sprite.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnNext.png b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnNext.png
index b28c1ef..b28c1ef 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnNext.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnNext.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnPrevious.png b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnPrevious.png
index e0cd9c4..e0cd9c4 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnPrevious.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/btnPrevious.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/contentPattern.png b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/contentPattern.png
index 7b50aff..7b50aff 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/contentPattern.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/contentPattern.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/default_thumbnail.gif b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/default_thumbnail.gif
index 2b1280f..2b1280f 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/default_thumbnail.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/default_thumbnail.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/loader.gif b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/loader.gif
index 50820ee..50820ee 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/loader.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/loader.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/sprite.png b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/sprite.png
index 4fe3547..4fe3547 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/sprite.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/dark_square/sprite.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnNext.png b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnNext.png
index e809c3b..e809c3b 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnNext.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnNext.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnPrevious.png b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnPrevious.png
index 0812542..0812542 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnPrevious.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/btnPrevious.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternBottom.png b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternBottom.png
index a9be3b2..a9be3b2 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternBottom.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternBottom.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternLeft.png b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternLeft.png
index 277c87a..277c87a 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternLeft.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternLeft.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternRight.png b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternRight.png
index 76e50d0..76e50d0 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternRight.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternRight.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternTop.png b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternTop.png
index 8b110ba..8b110ba 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternTop.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/contentPatternTop.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/default_thumbnail.gif b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/default_thumbnail.gif
index 2b1280f..2b1280f 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/default_thumbnail.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/default_thumbnail.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/loader.gif b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/loader.gif
index 7ac990c..7ac990c 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/loader.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/loader.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/sprite.png b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/sprite.png
index 660a254..660a254 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/facebook/sprite.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/facebook/sprite.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnNext.png b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnNext.png
index b28c1ef..b28c1ef 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnNext.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnNext.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnPrevious.png b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnPrevious.png
index e0cd9c4..e0cd9c4 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnPrevious.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/btnPrevious.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/default_thumbnail.gif b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/default_thumbnail.gif
index 2b1280f..2b1280f 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/default_thumbnail.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/default_thumbnail.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/loader.gif b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/loader.gif
index 7ac990c..7ac990c 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/loader.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/loader.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/sprite.png b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/sprite.png
index 7f28379..7f28379 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/sprite.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_rounded/sprite.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnNext.png b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnNext.png
index b28c1ef..b28c1ef 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnNext.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnNext.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnPrevious.png b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnPrevious.png
index e0cd9c4..e0cd9c4 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnPrevious.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/btnPrevious.png
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/default_thumbnail.gif b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/default_thumbnail.gif
index 2b1280f..2b1280f 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/default_thumbnail.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/default_thumbnail.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/loader.gif b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/loader.gif
index 7ac990c..7ac990c 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/loader.gif
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/loader.gif
Binary files differ
diff --git a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/sprite.png b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/sprite.png
index 4fe3547..4fe3547 100755..100644
--- a/chimere/static/prettyPhoto/images/prettyPhoto/light_square/sprite.png
+++ b/chimere/static/prettyPhoto/images/prettyPhoto/light_square/sprite.png
Binary files differ
diff --git a/chimere/templates/admin/chimere/marker/change_form.html b/chimere/templates/admin/chimere/marker/change_form.html
index 64c48f9..3b3d238 100644
--- a/chimere/templates/admin/chimere/marker/change_form.html
+++ b/chimere/templates/admin/chimere/marker/change_form.html
@@ -1,7 +1,7 @@
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block field_sets %}
-{% if original.ref_item and original.ref_item != orginal %}
+{% if original.has_modified %}
<p class='errornote'>
{% url admin:admin-modification object_id as rapprochement_form %}
{% blocktrans %}
diff --git a/chimere/templates/chimere/blocks/areas.html b/chimere/templates/chimere/blocks/areas.html
index 8c4b981..a1ebe76 100644
--- a/chimere/templates/chimere/blocks/areas.html
+++ b/chimere/templates/chimere/blocks/areas.html
@@ -3,6 +3,7 @@
<div id='areas-div'>
<label for='areas-select'>{% trans "Areas:" %}</label>
<select id='areas-select'>
+ {% if not has_default_area %}<option value=''>--</option>{% endif %}
{% for area in areas %}
<option value='{{area.urn}}'{% if area_name and area.urn == area_name %} selected='selected'{% endif %}{% if not area_name and area.default %} selected='selected'{% endif %}>{{area.name}}</option>
{% endfor %}
diff --git a/chimere/templates/chimere/blocks/map.html b/chimere/templates/chimere/blocks/map.html
index 6304e13..4affb19 100644
--- a/chimere/templates/chimere/blocks/map.html
+++ b/chimere/templates/chimere/blocks/map.html
@@ -43,8 +43,9 @@
chimere_init_options["checked_categories"] = [{% for cc in checked_categories %}{% if forloop.counter0 > 0 %}, {% endif %}{{cc}}{% endfor %}];
{% if area_id %}chimere_init_options['area_id'] = "{{area_id}}";{% endif %}
{% if p_current_feature %}
- chimere_init_options["display_feature"] = {{ p_current_feature }};
- {% endif %}
+ chimere_init_options["display_feature"] = {{ p_current_feature }};{% endif %}
+ {% if p_current_route %}
+ chimere_init_options["display_route"] = {{ p_current_route }};{% endif %}
{% if restricted_extent %}{{ restricted_extent }}
chimere_init_options["restricted_extent"] = bounds;
{% endif %}
diff --git a/chimere/templates/chimere/detail.html b/chimere/templates/chimere/detail.html
index 134c03e..4b5c168 100644
--- a/chimere/templates/chimere/detail.html
+++ b/chimere/templates/chimere/detail.html
@@ -24,11 +24,11 @@
{% endfor %}
{% if marker.origin %}<p class='detail_source'><strong>{% trans "Source:" %}</strong> <span>{{marker.origin}}</span></p>{% endif %}
{% if marker.license %}<p class='detail_license'><strong>{% trans "License:" %}</strong> <span>{{marker.license}}</span></p>{% endif %}
- {% if marker.multimedia_items %}
+ {% if marker.multimedia_items %}<p class='detail_multimedia'>
<a href='#' class='show_gallery_link'>{% trans "Show multimedia gallery" %}</a>
- {% endif %}
+ </p>{% endif %}
</div>
- <a href='{% if marker.route %}{% url chimere:editroute-item area_name_slash|default_if_none:"" marker.route.pk "" %}{%else%}{% url chimere:edit-item area_name_slash|default_if_none:"" marker.pk "" %}{%endif%}'>
+ <p class='detail_amendment'><a href='{% if marker.route %}{% url chimere:editroute-item area_name_slash|default_if_none:"" marker.route.pk "" %}{%else%}{% url chimere:edit-item area_name_slash|default_if_none:"" marker.pk "" %}{%endif%}'>
{% trans "Submit an amendment" %}
</a>
{% if moderator_emails %}
diff --git a/chimere/templates/chimere/edit.html b/chimere/templates/chimere/edit.html
index 9732005..f9706d3 100644
--- a/chimere/templates/chimere/edit.html
+++ b/chimere/templates/chimere/edit.html
@@ -20,8 +20,9 @@
<legend>{% trans "Error" %}</legend>
<p>{{ error_message }}</p>
{% endif %}</fieldset>
+ {% if is_modification and is_superuser %}<div class='warning'><p>{% trans "You are logged as an administrator. Your modifications will be taking into account immediately." %}</p></div>{% endif %}
<fieldset class='edit'>
- <legend>{% trans "Add/modify a point of interest" %}</legend>
+ <legend>{% if is_modification %}{% trans "Modify a point of interest" %}{% else %}{% trans "Add a point of interest" %}{% endif %}</legend>
<form enctype="multipart/form-data" method='post' action='.'>
{% csrf_token %}
<div class='rightWrapper'>
diff --git a/chimere/templates/chimere/edit_route.html b/chimere/templates/chimere/edit_route.html
index 0221949..10f4d5e 100644
--- a/chimere/templates/chimere/edit_route.html
+++ b/chimere/templates/chimere/edit_route.html
@@ -17,8 +17,9 @@
{{ block.super }}
{% if submited %}{% submited %}{% endif %}
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
+ {% if is_modification and is_superuser %}<div class='warning'><p>{% trans "You are logged as an administrator. Your modifications will be taking into account immediately." %}</p></div>{% endif %}
<fieldset class='edit'>
- <legend>{% trans "Add/modify a route" %}</legend>
+ <legend>{% if is_modification %}{% trans "Modify a route" %}{% else %}{% trans "Add a route" %}{% endif %}</legend>
<form enctype="multipart/form-data" method='post' action='.'>
{% csrf_token %}
<div class='rightWrapper'>
diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py
index b73413a..14860b8 100644
--- a/chimere/templatetags/chimere_tags.py
+++ b/chimere/templatetags/chimere_tags.py
@@ -51,9 +51,9 @@ def get_news(area=None):
# Retrieve active markers
today = date.today()
after = today + timedelta(settings.CHIMERE_DAYS_BEFORE_EVENT)
- q = Q(end_date__gte=today) | Q(end_date__isnull=True)
- q = Marker.objects.filter(status='A', start_date__lte=after,
- is_front_page=True).filter(q)
+ q = Marker.objects.filter(status='A').filter(start_date__lte=after,
+ is_front_page=True).filter(Q(end_date__gte=today)|
+ (Q(end_date__isnull=True) & Q(start_date__gte=today)))
if area:
q = q.filter(area.getIncludeMarker())
news += list(q)
@@ -246,6 +246,7 @@ bounds.extend(new OpenLayers.LonLat(%f, %f));
return context_data
request = context['request']
# Default values
+ context_data['p_current_route'] = context.get('current_route')
if request.GET:
for key in ('zoom', 'lon', 'lat', 'display_submited',
'current_feature', 'routing_start_lon', 'routing_start_lat',
diff --git a/chimere/tests.py b/chimere/tests.py
index af342c5..fb48205 100644
--- a/chimere/tests.py
+++ b/chimere/tests.py
@@ -189,12 +189,31 @@ class KMLImporterTest(TestCase, ImporterTest):
importer3.categories.add(subcategories[2])
importer4 = Importer.objects.create(importer_type='KML',
- source=test_dir_path+'tests/sample.kml.zip', zipped=True)
+ source=test_dir_path+'tests/sample.kml.zip', zipped=True,
+ default_description="Default description")
importer4.categories.add(subcategories[3])
self.marker_importers = [(importer1, 1), (importer2, 3), (importer3, 0),
(importer4, 4)]
+ def test_defaultdescription(self):
+ Marker.objects.all().delete()
+ importer = self.marker_importers[-1][0]
+ importer.overwrite = True
+ importer.save()
+ importer.manager.get()
+ last_marker = Marker.objects.order_by('-pk').all()[0]
+ self.assertEqual(last_marker.description,
+ importer.default_description)
+ # don't overwrite description on update
+ new_desc = u"Description set by an user"
+ last_marker.description = new_desc
+ last_marker.save()
+ importer.manager.get()
+ last_marker = Marker.objects.order_by('-pk').all()[0]
+ self.assertEqual(last_marker.description,
+ new_desc)
+
class ShapefileImporterTest(TestCase, ImporterTest):
def setUp(self):
self.subcategories = subcategory_setup()
@@ -401,6 +420,12 @@ class NewsTest(TestCase):
def setUp(self):
self.areas = areas_setup()
self.markers = marker_setup()
+ current_date = datetime.datetime.now()
+ marker = Marker.objects.create(name="Marker 4", status='A',
+ point='SRID=4326;POINT(-4.5 48.45)',
+ available_date=current_date - datetime.timedelta(days=90),
+ start_date=current_date - datetime.timedelta(days=90),
+ end_date=None)
self.news = []
self.news.append(News.objects.create(is_front_page=True,
title=u"Test news 1", available=True))
diff --git a/chimere/tests/data_license b/chimere/tests/data_license
deleted file mode 100644
index bee3231..0000000
--- a/chimere/tests/data_license
+++ /dev/null
@@ -1 +0,0 @@
-eqs7day-M5.xml is a georss feed from the website http://www.usgs.gov/ published under the US public domain
diff --git a/chimere/utils.py b/chimere/utils.py
index 0d97757..33ebdf7 100644
--- a/chimere/utils.py
+++ b/chimere/utils.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2012-2013 É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
@@ -46,11 +46,13 @@ from chimere import get_version
from external_utils import OsmApi
def unicode_normalize(string):
+ if type(string) == str:
+ string = unicode(string.decode('utf-8'))
return ''.join(
(c for c in unicodedata.normalize('NFD', string)
if unicodedata.category(c) != 'Mn'))
-class ImportManager:
+class ImportManager(object):
u"""
Generic class for specific importers
"""
@@ -74,8 +76,11 @@ class ImportManager:
key='', pk=None):
updated, created, item = False, False, None
import_key = unicode(import_key).replace(':', '^')
+ if not values.get('name'):
+ values['name'] = self.default_name
if not key:
key = self.importer_instance.importer_type
+ item = None
if import_key or pk:
dct_import = {
'import_key__icontains':'%s:%s;' % (key, import_key),
@@ -85,7 +90,10 @@ class ImportManager:
if pk:
ref_item = cls.objects.get(pk=pk)
else:
- ref_item = cls.objects.get(**dct_import)
+ ref_item = cls.objects.filter(**dct_import)
+ if not ref_item.count():
+ raise ObjectDoesNotExist
+ ref_item = ref_item.all()[0]
if version and ref_item.import_version == int(version):
# no update since the last import
return ref_item, None, None
@@ -95,7 +103,8 @@ class ImportManager:
else:
item = ref_item
for k in values:
- setattr(item, k, values[k])
+ if values[k]:
+ setattr(item, k, values[k])
try:
item.save()
# force the modified_since_import status
@@ -108,6 +117,10 @@ class ImportManager:
except ObjectDoesNotExist:
pass
if not item:
+ if not self.importer_instance.get_description and \
+ self.importer_instance.default_description:
+ values['description'] = \
+ self.importer_instance.default_description
values.update({
'import_source':self.importer_instance.source})
values['status'] = 'I'
@@ -197,7 +210,7 @@ class KMLManager(ImportManager):
XPATH = '//kml:Folder/kml:name[text()="%s"]/../kml:Placemark'
DEFAULT_XPATH = '//kml:Placemark'
def __init__(self, importer_instance, ns=''):
- self.importer_instance = importer_instance
+ super(KMLManager, self).__init__(importer_instance)
self.ns = ns
def get(self):
@@ -237,6 +250,7 @@ class KMLManager(ImportManager):
pl_id = placemark.attrib.get('id')
pl_key = 'kml-%d' % self.importer_instance.pk
ns = '{%s}' % self.ns
+ description = ''
for item in placemark:
if item.tag == ns + 'name':
name = item.text
@@ -244,7 +258,8 @@ class KMLManager(ImportManager):
# if no ID is provided assume that name is a key
pl_id = name
elif item.tag == ns + 'description':
- description = item.text
+ if self.importer_instance.get_description:
+ description = item.text
elif item.tag == ns + 'Point':
for coord in item:
if coord.tag == ns + 'coordinates':
@@ -506,7 +521,10 @@ class CSVManager(ImportManager):
if len(row) < len(cols):
continue
pk, name, cats, state = row[0], row[1], row[2], row[3]
- description, geom = row[4], row[5].upper()
+ geom = row[5]
+ description = ''
+ if self.importer_instance.get_description:
+ description = row[4]
COL_INDEX = 6
dct = {'description':description,
'name':name,
@@ -595,10 +613,11 @@ class GeoRSSManager(ImportManager):
y = item['geo_lat']
x = item['geo_long']
dct['point'] = 'SRID=4326;POINT(%s %s)' % (x, y)
- for k in ['description', 'summary', 'value']:
- if k in item:
- dct['description'] = item[k]
- break
+ if self.importer_instance.get_description:
+ for k in ['description', 'summary', 'value']:
+ if k in item:
+ dct['description'] = item[k]
+ break
else:
cls = Route
points = item['georss_line'].split(' ')
@@ -675,8 +694,6 @@ class OSMManager(ImportManager):
name = item.attrib.get('v')
if item.tag == 'nd':
points.append(item.get('ref'))
- if not name:
- name = self.default_name
if not points:
continue
wkt = 'SRID=4326;LINESTRING(%s)' % ",".join([nodes[point_id]
@@ -710,8 +727,6 @@ class OSMManager(ImportManager):
k = item.attrib.get('k')
if k == 'name':
name = item.attrib.get('v')
- if not name:
- name = self.default_name
point = 'SRID=4326;POINT(%s %s)' % (node.get('lon'),
node.get('lat'))
dct = {'point':point,
diff --git a/chimere/views.py b/chimere/views.py
index 47ce281..a8c3f19 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
#
# RSS : Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>,
# Samuel Renard <renard.samuel_AT_gmailDOTcom>,
@@ -158,6 +158,13 @@ def index(request, area_name=None, default_area=None, simple=False,
if settings.CHIMERE_ENABLE_ROUTING:
response_dct['itinerary_form'] = RoutingForm()
response_dct['routing_transport'] = settings.CHIMERE_ROUTING_TRANSPORT
+ if request.GET and 'current_feature' in request.GET:
+ try:
+ m = Marker.objects.get(pk=request.GET['current_feature'])
+ if m.route:
+ response_dct['current_route'] = m.route.pk
+ except:
+ pass
response_dct.update({
'actions':actions(response_dct['area_name']),
'action_selected':('view',),
@@ -167,7 +174,9 @@ def index(request, area_name=None, default_area=None, simple=False,
'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER,
'dynamic_categories':response_dct['dynamic_categories'],
'zoomout':zoomout,
- 'contact_email':settings.CONTACT_EMAIL
+ 'contact_email':settings.CONTACT_EMAIL,
+ 'has_default_area':Area.objects.filter(default=True).count(),
+ 'zoomout':zoomout
})
response_dct['share_networks'], net_dct = \
getShareNetwork(request, response_dct['area_name'])
@@ -211,6 +220,7 @@ def get_edit_page(redirect_url, item_cls, item_form,
submiter_session_key=request.session.session_key)
if modified_item.count():
init_item = modified_item.all()[0]
+ response_dct['is_modification'] = True
init_multi = init_item.get_init_multi() if init_item else None
init_picture = init_item.get_init_picture() if init_item else None
@@ -220,6 +230,7 @@ def get_edit_page(redirect_url, item_cls, item_form,
# hide personal information
for k in ('submiter_name', 'submiter_email', 'submiter_comment'):
setattr(init_item, k, '')
+ response_dct['is_superuser'] = request.user.is_superuser
# If the form has been submited
if request.method == 'POST':
inst = None
diff --git a/chimere/widgets.py b/chimere/widgets.py
index 481a5c9..45161e1 100644
--- a/chimere/widgets.py
+++ b/chimere/widgets.py
@@ -675,13 +675,13 @@ class AreaField(forms.MultiValueField):
class MultiSelectWidget(forms.SelectMultiple):
class Media:
css = {'all': list(settings.JQUERY_CSS_URLS) + [
- settings.STATIC_URL + 'chimere/js/jquery/bsmSelect/css/jquery.bsmselect.css',
- settings.STATIC_URL + 'chimere/js/jquery/bsmSelect/css/jquery.bsmselect.custom.css',
+ settings.STATIC_URL + 'bsmSelect/css/jquery.bsmselect.css',
+ settings.STATIC_URL + 'bsmSelect/css/jquery.bsmselect.custom.css',
]
}
js = list(settings.JQUERY_JS_URLS) + [
- settings.STATIC_URL + 'chimere/js/jquery/bsmSelect/js/jquery.bsmselect.js',
- settings.STATIC_URL + 'chimere/js/jquery/bsmSelect/js/jquery.bsmselect.compatibility.js',
+ settings.STATIC_URL + 'bsmSelect/js/jquery.bsmselect.js',
+ settings.STATIC_URL + 'bsmSelect/js/jquery.bsmselect.compatibility.js',
]
def render(self, name, value, attrs=None):
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..5b0d8a2
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,17 @@
+python-django-chimere (2.0.2-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Étienne Loks <etienne.loks@peacefrogs.net> Tue, 19 Feb 2013 13:29:21 +0100
+
+python-django-chimere (2.0.1-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Étienne Loks <etienne.loks@peacefrogs.net> Sun, 10 Feb 2013 17:01:34 +0100
+
+python-django-chimere (2.0.0-1) unstable; urgency=low
+
+ * Initial release (Closes: #699579)
+
+ -- Étienne Loks <etienne.loks@peacefrogs.net> Sat, 02 Feb 2013 00:51:40 +0100
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+8
diff --git a/debian/control b/debian/control
index 1d89b61..71b2461 100644
--- a/debian/control
+++ b/debian/control
@@ -1,10 +1,56 @@
+Source: python-django-chimere
+Section: python
+Priority: optional
+Maintainer: Étienne Loks <etienne.loks@peacefrogs.net>
+Build-Depends: debhelper (>= 8.0.0),
+ python | python-all | python-dev | python-all-dev,
+ python-sphinx (>= 1.0.7+dfsg) | python3-sphinx,
+ python-setuptools
+Standards-Version: 3.9.3
+Homepage: http://pypi.python.org/pypi/chimere
+#Vcs-Git: git://git.debian.org/collab-maint/python-django-chimere.git
+#Vcs-Browser: http://git.debian.org/?p=collab-maint/python-django-chimere.git;a=summary
+
Package: python-django-chimere
-Version: 2.0
-Depends: python-django (>=1.4), python-gdal, python-psycopg2,
- python-beautifulsoup, python-imaging, libjs-jquery,
- libjs-jquery-ui, libjs-jquery-ui-theme-base,
- postgresql-9.1, postgresql-9.1-postgis, gettext,
- python-simplejson, gpsbabel, python-django-south,
- python-pyexiv2 python-feedparser javascript-common
-Recommends: tinymce, python-django-celery, python-kombu
-Suggests: libjs-jquery-ui-theme-south-street
+Architecture: all
+Depends: ${misc:Depends},
+ ${python:Depends},
+ python-django (>= 1.4),
+ python-django (<< 1.5),
+ python-gdal,
+ python-psycopg2,
+ python-beautifulsoup,
+ python-imaging,
+ python-simplejson,
+ python-django-south,
+ python-pyexiv2,
+ python-feedparser
+Recommends: javascript-common,
+ libjs-jquery,
+ libjs-jquery-ui,
+ libjs-jquery-ui-theme-base,
+ gpsbabel
+Description: collaborative and thematic maps application for Django
+ Chimère is a cartographic mashup using OpenStreetMap as a default map
+ layer. This software aims to create online collaborative and thematic
+ maps. Content (multimedia, text) are associated to basic geographic
+ items (Point Of Interest, routes). Adds on the map are open to everybody
+ with no authentication but are moderated by a team in charge of the map.
+ .
+ Main features:
+ * Display (by default) of the mapnik OpenStreetMap layer.
+ * Display on the map of POIs (with markers) and routes (with colored
+ polylines).
+ * Thematic choices of items to display (POIs and routes).
+ * Filter themes in regard to currently available items.
+ * Display of the detail of a POI (name, description, pictures, multimedia
+ files).
+ * Management of multimedia files and images associated to POIs.
+ * Add of a cartographic item (POI, route) on the map by an user without
+ authentication (the item is only available after moderation).
+ * Admin interface for moderation and configuration.
+ * Cut a Chimère by "areas". Each "area" can have specific themes, a new
+ default center, etc.
+ * Configuration of map layers in administration interface.
+ * Import and export of data from/to various formats: ShapeFile, KML, GeoRSS
+ (import only), CSV and OpenStreetMap.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..bee08dd
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,113 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: chimere
+Source: http://pypi.python.org/pypi/chimere
+
+Files: *
+Copyright: 2013 Étienne Loks <etienne.loks@peacefrogs.net>
+License: GPL-3.0+
+
+Files: debian/*
+Copyright: 2013 Étienne Loks <etienne.loks@peacefrogs.net>
+License: GPL-3.0+
+
+Files: chimere/external_utils/OsmApi.py
+Copyright: 2009-2010 Étienne Chové <chove@crans.org>
+License: GPL-3.0+
+
+Files: chimere/jme/*
+Copyright: 2010 Alexander Farkas <info@corrupt-system.de>
+License: MIT or GPL-2
+
+Files: chimere/bsmSelect/*
+Copyright: 2008 Ryan Cramer
+ 2010 Victor Berchet
+License: MIT or GPL-2
+
+Files: chimere/prettyPhoto/*
+Copyright: 2012 Stephane Caron
+License: GPL-2
+
+Files: chimere/openlayers/*
+Copyright: 2006-2012 OpenLayers Contributors
+License: BSD-2-clause
+
+License: MIT
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License: GPL-2
+ This package 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 2 of the License, or
+ (at your option) any later version.
+ .
+ This package 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 package; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ .
+ On Debian systems, the full license can be found at
+ "/usr/share/common-licenses/GPL-2".
+
+License: GPL-3.0+
+ 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 package 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/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
+License: BSD-2-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ .
+ 1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ .
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY OPENLAYERS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ .
+ The views and conclusions contained in the software and documentation are those
+ of the authors and should not be interpreted as representing official policies,
+ either expressed or implied, of OpenLayers Contributors.
diff --git a/debian/doc-base b/debian/doc-base
new file mode 100644
index 0000000..b7c033a
--- /dev/null
+++ b/debian/doc-base
@@ -0,0 +1,10 @@
+Document: python-django-chimere
+Title: Chimère
+Author: Étienne Loks
+Abstract: This manual describes how to install and use Chimère a web
+ collaborative and thematic maps.
+Section: Data Management
+
+Format: html
+Index: /usr/share/doc/python-django-chimere/html/index.html
+Files: /usr/share/doc/python-django-chimere/html/*.html
diff --git a/debian/docs b/debian/docs
new file mode 100644
index 0000000..e953f2c
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1,2 @@
+CHANGES.txt
+README.txt
diff --git a/debian/pydist-overrides b/debian/pydist-overrides
new file mode 100644
index 0000000..0d69808
--- /dev/null
+++ b/debian/pydist-overrides
@@ -0,0 +1,2 @@
+django_tinymce tinymce
+pil python-imaging
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..5d9478f
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,22 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+PYTHON2=$(shell pyversions -vr)
+
+# Prevent setuptools/distribute from accessing the internet.
+export http_proxy = http://127.0.9.1:9
+
+%:
+ dh $@ --with python2,sphinxdoc
+
+override_dh_installdocs:
+ python setup.py build_sphinx --source-dir=docs/en/
+ dh_installdocs build/sphinx/html
+
+override_dh_auto_clean:
+ dh_auto_clean
+ rm -rf build
+ rm -rf *.egg-info
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..a67dad8
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,2 @@
+version=3
+http://pypi.python.org/packages/source/c/chimere-([0-9a-z.]*)\.tar\.gz
diff --git a/docs/en/configuration.rst b/docs/en/configuration.rst
index e5870bb..2a7f4d0 100644
--- a/docs/en/configuration.rst
+++ b/docs/en/configuration.rst
@@ -5,7 +5,7 @@ Configuration
=============
:Author: Étienne Loks
-:date: 2012-10-08
+:date: 2013-02-01
:Copyright: CC-BY 3.0
This document presents the first steps to configure your Chimère.
@@ -32,15 +32,6 @@ To access these pages you have to identify with an account with *staff* and
A *superuser* account is created at the initialization of the database.
-Configuring the Sites framework
--------------------------------
-
-*Sites* framework allow you to serve the same content on different domains.
-Most of you will probably use only one domain but this unique domain has to
-be configured. This is done in the web administration interface in *Sites > Sites*.
-You only need to change *example.com* by your domain name. If you forget to
-do that, some functionalities such as RSS feeds will not work properly.
-
.. _managing-areas:
Managing areas
diff --git a/docs/en/import_export.rst b/docs/en/import_export.rst
index 6dd1d7a..9144938 100644
--- a/docs/en/import_export.rst
+++ b/docs/en/import_export.rst
@@ -5,7 +5,7 @@ Import/export
=============
:Author: Étienne Loks
-:date: 2012-11-28
+:date: 2013-02-01
:Copyright: CC-BY 3.0
This document presents the import/export functionnalities of Chimère.
@@ -49,6 +49,11 @@ Common fields
be reconciled with the :ref:`amendment form <managing-modified>`. If you don't
want to use this form and then overwrite with the data from the external
source, check this option.
+- **Get description from source**: If this case is checked, the importer will
+ try to get the description from the source file. This option is only available
+ for certain file formats.
+- **Default description**: A default description to be added to new items. This
+ field is only available when **Get description from source** is not checked.
- **Origin**: if not null this field will be associated to each item imported in
order to easily identify where the item came from. For OSM import the source
is automatically added.
diff --git a/docs/en/install.rst b/docs/en/install.rst
index ea27efc..1bb5771 100644
--- a/docs/en/install.rst
+++ b/docs/en/install.rst
@@ -5,7 +5,7 @@ Installation
============
:Author: Étienne Loks
-:date: 2012-11-28
+:date: 2013-02-01
:Copyright: CC-BY 3.0
This document presents the installation of Chimère.
@@ -141,11 +141,14 @@ Another solution is to get it from the Git repository::
Creating a custom project template
**********************************
-There, a default project is provided (*example_project*). Copy and modify
-it (or get another project based on Chimère)::
+A default project can be found on `Gitorious
+<https://gitorious.org/chimere-example-project/chimere-example-project>`_. Get
+it and start a new project with it (or get another project based on Chimère)::
cd $INSTALL_PATH/chimere
- cp -ra example_project mychimere_project
+ git clone git://gitorious.org/chimere-example-project/chimere-example-project.git
+ django-admin startproject --template=chimere-example-project mychimere_project
+ rm -rf chimere-example-project
Your project name is used for the name of the Python package of your template.
As a Python package it should follow the rule of Python variable name:
@@ -244,6 +247,10 @@ to create tables managed with Django-South::
The database is set, congratulations!
+You can load the default group permissions (it is at least a good start)::
+
+ ./manage.py loaddata ../chimere/fixtures/auth_group.json
+
If you want to populate your installation with default data (don't do this on
an already populated instance!)::
@@ -272,8 +279,8 @@ Create and edit a configuration for Chimère::
mkdir /var/log/apache2/chimere/
chown www-data /var/log/apache2/chimere/
-Adapt the files *mydjango.wsgi* (with the correct sys path and the correct
-module) and Apache *chimere* (with the correct servername and correct paths).
+Adapt the files *mydjango.wsgi* (with the correct module) and Apache
+*chimere* (with the correct servername and correct paths).
To activate the website, reload apache::
@@ -288,3 +295,12 @@ line::
. /etc/default/locale
+Configuring the Sites framework
+*******************************
+
+*Sites* framework allow you to serve the same content on different domains.
+Most of you will probably use only one domain but this unique domain has to
+be configured. This is done in the web administration interface in *Sites > Sites*.
+You only need to change *example.com* by your domain name. If you forget to
+do that, some functionalities such as RSS feeds will not work properly.
+
diff --git a/docs/en/upgrade.rst b/docs/en/upgrade.rst
index d44ae02..d0eaa4c 100644
--- a/docs/en/upgrade.rst
+++ b/docs/en/upgrade.rst
@@ -5,7 +5,7 @@ Upgrade
=======
:Author: Étienne Loks
-:date: 2012-10-08
+:date: 2013-02-01
:Copyright: CC-BY 3.0
This document presents the upgrade of Chimère.
@@ -146,13 +146,16 @@ Version 1.2 -> 2.0
Project template
................
-Create a new project template:
+A default project can be found on `Gitorious
+<https://gitorious.org/chimere-example-project/chimere-example-project>`_. Get
+it and start a new project with it (or get another project based on Chimère)::
.. code-block:: bash
cd $CHIMERE_PATH
- cp -ra $CHIMERE_PATH/example_project $CHIMERE_LOCALNAME
- CHIMERE_APP_PATH=$CHIMERE_PATH/$CHIMERE_LOCALNAME
+ git clone git://gitorious.org/chimere-example-project/chimere-example-project.git
+ django-admin startproject --template=chimere-example-project mychimere_project
+ rm -rf chimere-example-project
local_settings
..............
@@ -195,6 +198,15 @@ Move old static files to the new static directory:
cp -ra $CHIMERE_PATH/chimere/static/* $CHIMERE_APP_PATH/static/
cp -ra $CHIMERE_PATH/chimere/static/icons/* $CHIMERE_APP_PATH/media/icons/
cp -ra $CHIMERE_PATH/chimere/static/upload $CHIMERE_APP_PATH/media/
+ rm -rf $CHIMERE_PATH/chimere/static/icons
+ rm -rf $CHIMERE_PATH/chimere/static/upload
+
+Update permissions for media directory:
+
+.. code-block:: bash
+
+ chown www-data -R $CHIMERE_APP_PATH/media/
+
Webserver configuration
.......................
@@ -251,7 +263,7 @@ Django South is now used to manage database migrations.
.. code-block:: bash
cd $CHIMERE_APP_PATH
- ./manage.py syncdb
+ ./manage.py syncdb --noinput
./manage.py migrate chimere 0001 --fake # fake the database initialisation
./manage.py migrate chimere
@@ -292,6 +304,7 @@ Version 1.2 -> 2.0 -> master
cd $CHIMERE_PATH/chimere
django-admin compilemessages
+
Forcing the refresh of visitor's web browser cache
--------------------------------------------------
@@ -304,8 +317,20 @@ that edit your local_settings.py and change::
to::
- STATIC_URL = '/static/v2.0.0/'
+ STATIC_URL = '/static-v2.0.0/'
Then change the webserver directive to point to your new path.
Restart the web server to apply this changes.
+Configuring the Sites framework
+-------------------------------
+
+Version 1.2 -> 2.0
+******************
+
+*Sites* framework allow you to serve the same content on different domains.
+Most of you will probably use only one domain but this unique domain has to
+be configured. This is done in the web administration interface in *Sites > Sites*.
+You only need to change *example.com* by your domain name. If you forget to
+do that, some functionalities such as RSS feeds will not work properly.
+
diff --git a/docs/fr/configuration.rst b/docs/fr/configuration.rst
index f419a0d..1ea8f50 100644
--- a/docs/fr/configuration.rst
+++ b/docs/fr/configuration.rst
@@ -5,7 +5,7 @@ Configuration
=============
:Auteur: Étienne Loks
-:date: 2012-11-29
+:date: 2013-02-01
:Copyright: CC-BY 3.0
Ce document présente l'installation de Chimère.
@@ -33,17 +33,6 @@ pour état *équipe* ou *super-utilisateur*.
Un compte *super-utilisateur* est créé à l'initialisation de la base de données.
-Configurer le framework Sites
------------------------------
-
-Le framework *Sites* vous permet de servir le contenu pour différents domaines
-Internet. La plupart des installations serviront le contenu pour un seul domaine
-mais ce domaine unique doit être configuré.
-
-Pour cela allez dans les pages web d'administration *Sites > Sites*.
-Vous avez juste à changer *example.com* par votre nom de domaine. Si vous
-oubliez de faire cela, quelques fonctionnalités comme les flux RSS ne
-fonctionneront pas correctement.
.. _managing-areas:
diff --git a/docs/fr/import_export.rst b/docs/fr/import_export.rst
index beca4e7..4da40dd 100644
--- a/docs/fr/import_export.rst
+++ b/docs/fr/import_export.rst
@@ -5,7 +5,7 @@ Import/export
=============
:Author: Étienne Loks
-:date: 2012-11-28
+:date: 2013-02-01
:Copyright: CC-BY 3.0
Ce document présente les fonctions d'import et d'export de Chimère.
@@ -51,6 +51,12 @@ Champs communs à tous les types de source
gestion des modifications <managing-modified>`. Si vous ne souhaitez pas avoir
à faire ce rapprochement et alors écraser les données existantes avec les
données de la source externe, cochez cette option.
+- **Obtenir la description depuis la source** : si cette case est cochée,
+ l'importeur va essayer d'obtenir une description depuis le fichier source.
+ Cette option n'est valable que pour certains formats.
+- **Description par défaut** : Une description par défaut à ajouter aux nouveaux
+ éléments. Ce champ n'est disponible que lorsque **Obtenir la description
+ depuis la source** n'est pas coché.
- **Origine** : si non nul, ce champ va être associé à chaque élément importé
afin d'identifier facilement d'où l'élément provient. Pour les imports OSM
la source est ajoutée automatiquement.
diff --git a/docs/fr/install.rst b/docs/fr/install.rst
index 841eae2..8e8f8ce 100644
--- a/docs/fr/install.rst
+++ b/docs/fr/install.rst
@@ -5,7 +5,7 @@ Installation
============
:Auteur: Étienne Loks
-:date: 2012-11-28
+:date: 2013-02-01
:Copyright: CC-BY 3.0
Ce document présente l'installation de Chimère.
@@ -138,11 +138,14 @@ Une autre solution est d'obtenir les sources depuis le dépôt Git : ::
Créez un patron pour votre projet
*********************************
-Il y a un exemple de projet fourni (*example_project*). Copiez-le et
-modifiez-le (ou utilisez un autre projet basé sur Chimère) : ::
+Un exemple de projet peut être trouvé sur `Gitorious
+<https://gitorious.org/chimere-example-project/chimere-example-project>`_.
+Clonez-le et modifiez-le (ou utilisez un autre projet basé sur Chimère) : ::
cd $INSTALL_PATH/chimere
- cp -ra example_project mychimere_project
+ git clone git://gitorious.org/chimere-example-project/chimere-example-project.git
+ django-admin startproject --template=chimere-example-project mychimere_project
+ rm -rf chimere-example-project
Le nom de votre projet est utilisé pour le nom de la bibliothèque Python
correspondant à votre projet.
@@ -252,6 +255,11 @@ données gérées par Django-South : ::
La base de données est en place, félicitations !
+Vous pouvez alors charger les permissions poar défaut pour les groupes
+(c'est au minimum un bon départ) : ::
+
+ ./manage.py loaddata ../chimere/fixtures/auth_group.json
+
Si vous voulez remplir votre installation avec des données par défaut (ne le
faites pas sur une instance de Chimère contenant déjà des données !) : ::
@@ -280,9 +288,9 @@ Créez et éditez la configuration de Chimère en fonction de votre installation
mkdir /var/log/apache2/chimere/
chown www-data /var/log/apache2/chimere/
-Adaptez les fichiers *mydjango.wsgi* (avec le chemin correct *sys* des
-bibliothèques Python de Chimère et le nom correct pour le module) et le fichier
-*chimere* de Apache (avec le nom de serveur correct et les chemins corrects).
+Adaptez les fichiers *mydjango.wsgi* (avec le nom correct pour le module) et le
+fichier *chimere* de Apache (avec le nom de serveur correct et les chemins
+corrects).
Pour activer le site web, rechargez Apache : ::
@@ -297,3 +305,15 @@ décommentez la ligne suivante : ::
. /etc/default/locale
+Configurer le framework Sites
+*****************************
+
+Le framework *Sites* vous permet de servir le contenu pour différents domaines
+Internet. La plupart des installations serviront le contenu pour un seul domaine
+mais ce domaine unique doit être configuré.
+
+Pour cela allez dans les pages web d'administration *Sites > Sites*.
+Vous avez juste à changer *example.com* par votre nom de domaine. Si vous
+oubliez de faire cela, quelques fonctionnalités comme les flux RSS ne
+fonctionneront pas correctement.
+
diff --git a/docs/fr/upgrade.rst b/docs/fr/upgrade.rst
index a092b4b..841485b 100644
--- a/docs/fr/upgrade.rst
+++ b/docs/fr/upgrade.rst
@@ -5,7 +5,7 @@ Mise à jour
===========
:Auteur: Étienne Loks
-:date: 2012-11-29
+:date: 2013-02-01
:Copyright: CC-BY 3.0
Ce document présente la mise à jour de Chimère.
@@ -154,13 +154,16 @@ Version 1.2 -> 2.0
Patron de projet
................
-Créez un nouveau patron de projet :
+Un exemple de projet peut être trouvé sur `Gitorious
+<https://gitorious.org/chimere-example-project/chimere-example-project>`_.
+Clonez-le et modifiez-le (ou utilisez un autre projet basé sur Chimère) : ::
.. code-block:: bash
cd $CHIMERE_PATH
- cp -ra $CHIMERE_PATH/example_project $CHIMERE_LOCALNAME
- CHIMERE_APP_PATH=$CHIMERE_PATH/$CHIMERE_LOCALNAME
+ git clone git://gitorious.org/chimere-example-project/chimere-example-project.git
+ django-admin startproject --template=chimere-example-project mychimere_project
+ rm -rf chimere-example-project
local_settings
..............
@@ -207,6 +210,14 @@ Déplacez vos anciens fichiers statiques vers le nouveau répertoire :
cp -ra $CHIMERE_PATH/chimere/static/* $CHIMERE_APP_PATH/static/
cp -ra $CHIMERE_PATH/chimere/static/icons/* $CHIMERE_APP_PATH/media/icons/
cp -ra $CHIMERE_PATH/chimere/static/upload $CHIMERE_APP_PATH/media/
+ rm -rf $CHIMERE_PATH/chimere/static/icons
+ rm -rf $CHIMERE_PATH/chimere/static/upload
+
+Mettre à jour les permissions des répertoires media :
+
+.. code-block:: bash
+
+ chown www-data -R $CHIMERE_APP_PATH/media/
Configuration du serveur Web
............................
@@ -268,7 +279,7 @@ Django South est maintenant utilisé pour les migrations de base de données.
.. code-block:: bash
cd $CHIMERE_APP_PATH
- ./manage.py syncdb
+ ./manage.py syncdb --noinput
./manage.py migrate chimere 0001 --fake # simule l'initialisation de la base
# de données
./manage.py migrate chimere
@@ -326,9 +337,24 @@ changez : ::
en : ::
- STATIC_URL = '/static/v2.0.0/'
+ STATIC_URL = '/static-v2.0.0/'
Changez la directive concernant les fichiers statiques sur le fichier de
configuration de votre serveur web.
Redémarrez alors le serveur web pour appliquer les changements.
+Configurer le framework Sites
+-----------------------------
+
+Version 1.2 -> 2.0
+******************
+
+Le framework *Sites* vous permet de servir le contenu pour différents domaines
+Internet. La plupart des installations serviront le contenu pour un seul domaine
+mais ce domaine unique doit être configuré.
+
+Pour cela allez dans les pages web d'administration *Sites > Sites*.
+Vous avez juste à changer *example.com* par votre nom de domaine. Si vous
+oubliez de faire cela, quelques fonctionnalités comme les flux RSS ne
+fonctionneront pas correctement.
+
diff --git a/example_project/fixtures/initial_data.json b/example_project/fixtures/initial_data.json
deleted file mode 100644
index 814e8e0..0000000
--- a/example_project/fixtures/initial_data.json
+++ /dev/null
@@ -1,853 +0,0 @@
-[
- {
- "pk": 20,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "area",
- "name": "Area",
- "app_label": "chimere"
- }
- },
- {
- "pk": 14,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "category",
- "name": "Category",
- "app_label": "chimere"
- }
- },
- {
- "pk": 13,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "color",
- "name": "Color",
- "app_label": "chimere"
- }
- },
- {
- "pk": 12,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "colortheme",
- "name": "Color theme",
- "app_label": "chimere"
- }
- },
- {
- "pk": 6,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "contenttype",
- "name": "content type",
- "app_label": "contenttypes"
- }
- },
- {
- "pk": 2,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "group",
- "name": "group",
- "app_label": "auth"
- }
- },
- {
- "pk": 15,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "icon",
- "name": "Icon",
- "app_label": "chimere"
- }
- },
- {
- "pk": 5,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "logentry",
- "name": "log entry",
- "app_label": "admin"
- }
- },
- {
- "pk": 4,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "message",
- "name": "message",
- "app_label": "auth"
- }
- },
- {
- "pk": 9,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "migrationhistory",
- "name": "migration history",
- "app_label": "south"
- }
- },
- {
- "pk": 10,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "news",
- "name": "News",
- "app_label": "chimere"
- }
- },
- {
- "pk": 1,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "permission",
- "name": "permission",
- "app_label": "auth"
- }
- },
- {
- "pk": 17,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "marker",
- "name": "Point of interest",
- "app_label": "chimere"
- }
- },
- {
- "pk": 22,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "property",
- "name": "Property",
- "app_label": "chimere"
- }
- },
- {
- "pk": 21,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "propertymodel",
- "name": "Property model",
- "app_label": "chimere"
- }
- },
- {
- "pk": 19,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "route",
- "name": "Route",
- "app_label": "chimere"
- }
- },
- {
- "pk": 18,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "routefile",
- "name": "Route file",
- "app_label": "chimere"
- }
- },
- {
- "pk": 7,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "session",
- "name": "session",
- "app_label": "sessions"
- }
- },
- {
- "pk": 8,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "site",
- "name": "site",
- "app_label": "sites"
- }
- },
- {
- "pk": 16,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "subcategory",
- "name": "Subcategory",
- "app_label": "chimere"
- }
- },
- {
- "pk": 11,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "tinyurl",
- "name": "TinyUrl",
- "app_label": "chimere"
- }
- },
- {
- "pk": 3,
- "model": "contenttypes.contenttype",
- "fields": {
- "model": "user",
- "name": "user",
- "app_label": "auth"
- }
- },
- {
- "pk": 1,
- "model": "sites.site",
- "fields": {
- "domain": "example.com",
- "name": "example.com"
- }
- },
- {
- "pk": 13,
- "model": "auth.permission",
- "fields": {
- "codename": "add_logentry",
- "name": "Can add log entry",
- "content_type": 5
- }
- },
- {
- "pk": 14,
- "model": "auth.permission",
- "fields": {
- "codename": "change_logentry",
- "name": "Can change log entry",
- "content_type": 5
- }
- },
- {
- "pk": 15,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_logentry",
- "name": "Can delete log entry",
- "content_type": 5
- }
- },
- {
- "pk": 4,
- "model": "auth.permission",
- "fields": {
- "codename": "add_group",
- "name": "Can add group",
- "content_type": 2
- }
- },
- {
- "pk": 5,
- "model": "auth.permission",
- "fields": {
- "codename": "change_group",
- "name": "Can change group",
- "content_type": 2
- }
- },
- {
- "pk": 6,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_group",
- "name": "Can delete group",
- "content_type": 2
- }
- },
- {
- "pk": 10,
- "model": "auth.permission",
- "fields": {
- "codename": "add_message",
- "name": "Can add message",
- "content_type": 4
- }
- },
- {
- "pk": 11,
- "model": "auth.permission",
- "fields": {
- "codename": "change_message",
- "name": "Can change message",
- "content_type": 4
- }
- },
- {
- "pk": 12,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_message",
- "name": "Can delete message",
- "content_type": 4
- }
- },
- {
- "pk": 1,
- "model": "auth.permission",
- "fields": {
- "codename": "add_permission",
- "name": "Can add permission",
- "content_type": 1
- }
- },
- {
- "pk": 2,
- "model": "auth.permission",
- "fields": {
- "codename": "change_permission",
- "name": "Can change permission",
- "content_type": 1
- }
- },
- {
- "pk": 3,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_permission",
- "name": "Can delete permission",
- "content_type": 1
- }
- },
- {
- "pk": 7,
- "model": "auth.permission",
- "fields": {
- "codename": "add_user",
- "name": "Can add user",
- "content_type": 3
- }
- },
- {
- "pk": 8,
- "model": "auth.permission",
- "fields": {
- "codename": "change_user",
- "name": "Can change user",
- "content_type": 3
- }
- },
- {
- "pk": 9,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_user",
- "name": "Can delete user",
- "content_type": 3
- }
- },
- {
- "pk": 58,
- "model": "auth.permission",
- "fields": {
- "codename": "add_area",
- "name": "Can add Area",
- "content_type": 20
- }
- },
- {
- "pk": 59,
- "model": "auth.permission",
- "fields": {
- "codename": "change_area",
- "name": "Can change Area",
- "content_type": 20
- }
- },
- {
- "pk": 60,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_area",
- "name": "Can delete Area",
- "content_type": 20
- }
- },
- {
- "pk": 40,
- "model": "auth.permission",
- "fields": {
- "codename": "add_route",
- "name": "Can add Route",
- "content_type": 14
- }
- },
- {
- "pk": 41,
- "model": "auth.permission",
- "fields": {
- "codename": "change_route",
- "name": "Can change Route",
- "content_type": 14
- }
- },
- {
- "pk": 42,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_route",
- "name": "Can delete Route",
- "content_type": 14
- }
- },
- {
- "pk": 37,
- "model": "auth.permission",
- "fields": {
- "codename": "add_marker",
- "name": "Can add Point of interest",
- "content_type": 13
- }
- },
- {
- "pk": 38,
- "model": "auth.permission",
- "fields": {
- "codename": "change_marker",
- "name": "Can change Point of interest",
- "content_type": 13
- }
- },
- {
- "pk": 39,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_marker",
- "name": "Can delete Point of interest",
- "content_type": 13
- }
- },
- {
- "pk": 34,
- "model": "auth.permission",
- "fields": {
- "codename": "add_subcategory",
- "name": "Can add Subcategory",
- "content_type": 12
- }
- },
- {
- "pk": 35,
- "model": "auth.permission",
- "fields": {
- "codename": "change_subcategory",
- "name": "Can change Subcategory",
- "content_type": 12
- }
- },
- {
- "pk": 36,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_subcategory",
- "name": "Can delete Subcategory",
- "content_type": 12
- }
- },
- {
- "pk": 43,
- "model": "auth.permission",
- "fields": {
- "codename": "add_area",
- "name": "Can add Area",
- "content_type": 15
- }
- },
- {
- "pk": 44,
- "model": "auth.permission",
- "fields": {
- "codename": "change_area",
- "name": "Can change Area",
- "content_type": 15
- }
- },
- {
- "pk": 45,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_area",
- "name": "Can delete Area",
- "content_type": 15
- }
- },
- {
- "pk": 49,
- "model": "auth.permission",
- "fields": {
- "codename": "add_property",
- "name": "Can add Property",
- "content_type": 17
- }
- },
- {
- "pk": 50,
- "model": "auth.permission",
- "fields": {
- "codename": "change_property",
- "name": "Can change Property",
- "content_type": 17
- }
- },
- {
- "pk": 51,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_property",
- "name": "Can delete Property",
- "content_type": 17
- }
- },
- {
- "pk": 28,
- "model": "auth.permission",
- "fields": {
- "codename": "add_category",
- "name": "Can add Category",
- "content_type": 10
- }
- },
- {
- "pk": 29,
- "model": "auth.permission",
- "fields": {
- "codename": "change_category",
- "name": "Can change Category",
- "content_type": 10
- }
- },
- {
- "pk": 30,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_category",
- "name": "Can delete Category",
- "content_type": 10
- }
- },
- {
- "pk": 64,
- "model": "auth.permission",
- "fields": {
- "codename": "add_property",
- "name": "Can add Property",
- "content_type": 22
- }
- },
- {
- "pk": 65,
- "model": "auth.permission",
- "fields": {
- "codename": "change_property",
- "name": "Can change Property",
- "content_type": 22
- }
- },
- {
- "pk": 66,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_property",
- "name": "Can delete Property",
- "content_type": 22
- }
- },
- {
- "pk": 61,
- "model": "auth.permission",
- "fields": {
- "codename": "add_propertymodel",
- "name": "Can add Property model",
- "content_type": 21
- }
- },
- {
- "pk": 62,
- "model": "auth.permission",
- "fields": {
- "codename": "change_propertymodel",
- "name": "Can change Property model",
- "content_type": 21
- }
- },
- {
- "pk": 63,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_propertymodel",
- "name": "Can delete Property model",
- "content_type": 21
- }
- },
- {
- "pk": 55,
- "model": "auth.permission",
- "fields": {
- "codename": "add_route",
- "name": "Can add Route",
- "content_type": 19
- }
- },
- {
- "pk": 56,
- "model": "auth.permission",
- "fields": {
- "codename": "change_route",
- "name": "Can change Route",
- "content_type": 19
- }
- },
- {
- "pk": 57,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_route",
- "name": "Can delete Route",
- "content_type": 19
- }
- },
- {
- "pk": 52,
- "model": "auth.permission",
- "fields": {
- "codename": "add_routefile",
- "name": "Can add Route file",
- "content_type": 18
- }
- },
- {
- "pk": 53,
- "model": "auth.permission",
- "fields": {
- "codename": "change_routefile",
- "name": "Can change Route file",
- "content_type": 18
- }
- },
- {
- "pk": 54,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_routefile",
- "name": "Can delete Route file",
- "content_type": 18
- }
- },
- {
- "pk": 46,
- "model": "auth.permission",
- "fields": {
- "codename": "add_propertymodel",
- "name": "Can add Property model",
- "content_type": 16
- }
- },
- {
- "pk": 47,
- "model": "auth.permission",
- "fields": {
- "codename": "change_propertymodel",
- "name": "Can change Property model",
- "content_type": 16
- }
- },
- {
- "pk": 48,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_propertymodel",
- "name": "Can delete Property model",
- "content_type": 16
- }
- },
- {
- "pk": 31,
- "model": "auth.permission",
- "fields": {
- "codename": "add_icon",
- "name": "Can add Icon",
- "content_type": 11
- }
- },
- {
- "pk": 32,
- "model": "auth.permission",
- "fields": {
- "codename": "change_icon",
- "name": "Can change Icon",
- "content_type": 11
- }
- },
- {
- "pk": 33,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_icon",
- "name": "Can delete Icon",
- "content_type": 11
- }
- },
- {
- "pk": 16,
- "model": "auth.permission",
- "fields": {
- "codename": "add_contenttype",
- "name": "Can add content type",
- "content_type": 6
- }
- },
- {
- "pk": 17,
- "model": "auth.permission",
- "fields": {
- "codename": "change_contenttype",
- "name": "Can change content type",
- "content_type": 6
- }
- },
- {
- "pk": 18,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_contenttype",
- "name": "Can delete content type",
- "content_type": 6
- }
- },
- {
- "pk": 19,
- "model": "auth.permission",
- "fields": {
- "codename": "add_session",
- "name": "Can add session",
- "content_type": 7
- }
- },
- {
- "pk": 20,
- "model": "auth.permission",
- "fields": {
- "codename": "change_session",
- "name": "Can change session",
- "content_type": 7
- }
- },
- {
- "pk": 21,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_session",
- "name": "Can delete session",
- "content_type": 7
- }
- },
- {
- "pk": 22,
- "model": "auth.permission",
- "fields": {
- "codename": "add_site",
- "name": "Can add site",
- "content_type": 8
- }
- },
- {
- "pk": 23,
- "model": "auth.permission",
- "fields": {
- "codename": "change_site",
- "name": "Can change site",
- "content_type": 8
- }
- },
- {
- "pk": 24,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_site",
- "name": "Can delete site",
- "content_type": 8
- }
- },
- {
- "pk": 25,
- "model": "auth.permission",
- "fields": {
- "codename": "add_news",
- "name": "Can add News",
- "content_type": 9
- }
- },
- {
- "pk": 26,
- "model": "auth.permission",
- "fields": {
- "codename": "change_news",
- "name": "Can change News",
- "content_type": 9
- }
- },
- {
- "pk": 27,
- "model": "auth.permission",
- "fields": {
- "codename": "delete_news",
- "name": "Can delete News",
- "content_type": 9
- }
- },
- {
- "pk": 1,
- "model": "auth.group",
- "fields": {
- "name": "Moderator",
- "permissions": [
- 40,
- 41,
- 42,
- 37,
- 38,
- 39,
- 49,
- 50,
- 51
- ]
- }
- },
- {
- "pk": 2,
- "model": "auth.group",
- "fields": {
- "name": "Application administrator",
- "permissions": [
- 40,
- 41,
- 42,
- 37,
- 38,
- 39,
- 34,
- 35,
- 36,
- 43,
- 44,
- 45,
- 49,
- 50,
- 51,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 25,
- 26,
- 27
- ]
- }
- }
-]
diff --git a/example_project/local_settings.py.pip.sample b/example_project/local_settings.py.pip.sample
deleted file mode 100644
index 6b6cffc..0000000
--- a/example_project/local_settings.py.pip.sample
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# rename this file to local_settings.py and overload settings in this file
-
-import os
-
-STATIC_URL = '/static/'
-
-CHIMERE_OSM_API_URL = 'api06.dev.openstreetmap.org' # test URL
-CHIMERE_OSM_USER = 'osm_user'
-CHIMERE_OSM_PASSWORD = 'osm_pass'
-
-# Make this string unique, and don't share it with anybody.
-SECRET_KEY = ''
-
-ADMINS = (
- # ('Your Name', 'your_email@domain.com'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'NAME': 'chimere',
- 'ENGINE': 'django.contrib.gis.db.backends.postgis',
- 'HOST': 'localhost',
- 'PORT': '5432',
- 'USER': 'postgres',
- 'PASSWORD': '',
- },
-}
-
-ROOT_URLCONF = 'example_project.urls'
-
-INSTALLED_APPS += ['django_extensions',
- 'tinymce']
-
-TINYMCE_URL = '%stiny_mce/' % STATIC_URL
-JQUERY_JS_URLS = ('%sjquery/jquery.js' % STATIC_URL,
- 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.min.js')
-JQUERY_CSS_URLS = ('https://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css')
diff --git a/example_project/local_settings.py.sample b/example_project/local_settings.py.sample
deleted file mode 100644
index b5939af..0000000
--- a/example_project/local_settings.py.sample
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# rename this file to local_settings.py and overload settings in this file
-
-import os
-
-CHIMERE_OSM_API_URL = 'api06.dev.openstreetmap.org' # test URL
-CHIMERE_OSM_USER = 'osm_user'
-CHIMERE_OSM_PASSWORD = 'osm_pass'
-
-# Make this string unique, and don't share it with anybody.
-SECRET_KEY = ''
-
-ADMINS = (
- # ('Your Name', 'your_email@domain.com'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'NAME': 'chimere',
- 'ENGINE': 'django.contrib.gis.db.backends.postgis',
- 'HOST': 'localhost',
- 'PORT': '5432',
- 'USER': 'postgres',
- 'PASSWORD': '',
- },
-}
-
-ROOT_URLCONF = 'example_project.urls'
diff --git a/example_project/manage.py b/example_project/manage.py
deleted file mode 100755
index 301acc2..0000000
--- a/example_project/manage.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env python
-import os, sys
-from django.core.management import execute_manager
-sys.path.insert(0, os.path.abspath('./..'))
-
-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/example_project/media/icons/marker.png b/example_project/media/icons/marker.png
deleted file mode 100755
index ccd1913..0000000
--- a/example_project/media/icons/marker.png
+++ /dev/null
Binary files differ
diff --git a/example_project/media/icons/readme b/example_project/media/icons/readme
deleted file mode 100644
index 560759a..0000000
--- a/example_project/media/icons/readme
+++ /dev/null
@@ -1 +0,0 @@
-Icons are stored here
diff --git a/example_project/media/pictures/readme b/example_project/media/pictures/readme
deleted file mode 100644
index c0d20b7..0000000
--- a/example_project/media/pictures/readme
+++ /dev/null
@@ -1 +0,0 @@
-Pictures are stored here
diff --git a/example_project/media/route_files/readme b/example_project/media/route_files/readme
deleted file mode 100644
index 90d72ab..0000000
--- a/example_project/media/route_files/readme
+++ /dev/null
@@ -1 +0,0 @@
-Route files are stored here
diff --git a/example_project/settings.py b/example_project/settings.py
deleted file mode 100644
index f89a9b8..0000000
--- a/example_project/settings.py
+++ /dev/null
@@ -1,295 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# Don't edit this file:
-# overload all theses settings in your local_settings.py file
-
-import os
-_ = lambda s: s
-
-DEBUG = False
-TEMPLATE_DEBUG = DEBUG
-
-# Django settings for chimere project.
-PROJECT_NAME = u'Chimère'
-ROOT_PATH = os.path.realpath(os.path.dirname(__file__)) + "/"
-
-EMAIL_HOST = 'localhost'
-CONTACT_EMAIL = ''
-STATIC_URL = '/static/'
-STATIC_ROOT = ROOT_PATH + 'static/'
-
-TINYMCE_URL = '/tinymce/'
-JQUERY_JS_URLS = ('/javascript/jquery/jquery.js',
- '/javascript/jquery-ui/jquery-ui.js',)
-JQUERY_CSS_URLS = ('/javascript/jquery-ui/css/smoothness/jquery-ui.css',
- '/javascript/jquery-ui-themes/base/jquery.ui.all.css')
-
-OSM_CSS_URLS = ["http://www.openlayers.org/api/theme/default/style.css"]
-
-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 ##
-CHIMERE_DEFAULT_ZOOM = 10
-# center of the map
-CHIMERE_DEFAULT_CENTER = (-1.679444, 48.114722)
-# projection used by the main map
-# most public map providers use spherical mercator : 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
-CHIMERE_EPSG_DISPLAY_PROJECTION = 4326
-# display of shortcuts for areas
-CHIMERE_DISPLAY_AREAS = True
-# 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
-CHIMERE_DAYS_BEFORE_EVENT = 30
-# allow feeds
-CHIMERE_FEEDS = True
-
-CHIMERE_ICON_WIDTH = 21
-CHIMERE_ICON_HEIGHT = 25
-CHIMERE_ICON_OFFSET_X = -10
-CHIMERE_ICON_OFFSET_Y = -25
-
-# display picture inside the description by default or inside a galery?
-CHIMERE_MINIATURE_BY_DEFAULT = False
-
-# JS definition of the default map (for admin and when no map are defined in
-# the application)
-# cf. OpenLayers documentation for more details
-CHIMERE_DEFAULT_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map
-
-CHIMERE_XAPI_URL = 'http://open.mapquestapi.com/xapi/api/0.6/'
-CHIMERE_OSM_API_URL = 'api06.dev.openstreetmap.org' # test URL
-CHIMERE_OSM_USER = 'test'
-CHIMERE_OSM_PASSWORD = 'test'
-
-# as the web server need to be reloaded when property models are changed
-# it could be a good idea to hide it to an admin who could'nt do that
-CHIMERE_HIDE_PROPERTYMODEL = False
-
-# encoding for shapefile import
-CHIMERE_SHAPEFILE_ENCODING = 'ISO-8859-1'
-
-# enable routing in Chimère
-CHIMERE_ENABLE_ROUTING = False
-
-CHIMERE_ROUTING_TRANSPORT = (('foot', _(u"Foot")),
- ('bicycle', _(u"Bicycle")),
- ('motorcar', _(u"Motorcar")),
- )
-
-CHIMERE_ROUTING_SPEEDS = {'foot':((3, _(u"You are walking slowly")),
- (6, _(u"You are walking pretty quickly")),),
- 'bicycle':((16, _(u"You are riding pretty slowly")),
- (22, _(u"You are riding pretty quickly")),)
- }
-
-# available routing engine: 'routino'
-CHIMERE_ROUTING_ENGINE = {
- 'ENGINE': 'routino',
- 'PATH': '/usr/local/src/web/bin/router',
- 'DB_PATH': '/var/local/routino/',
-}
-
-CHIMERE_ROUTING_FAIL_MESSAGE = _(u"Routing engine has failed to find an "
- u"appropriate route. Start point or end point may be too far from "
- u"an existing path.")
-
-NOMINATIM_URL = 'http://nominatim.openstreetmap.org/search'
-
-# thumbnail
-CHIMERE_THUMBS_SCALE_HEIGHT=250
-CHIMERE_THUMBS_SCALE_WIDTH=None
-
-# length of short description
-CHIMERE_SHORT_DESC_LENGTH = 400
-
-CHIMERE_MODIF_EMAIL = _(u"""Hello, I would like to propose you a modification about this item: """)
-CHIMERE_CSV_ENCODING = 'ISO-8859-1'
-
-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 + 'media/'
-
-# URL that handles the media served from MEDIA_ROOT.
-# Example: "http://media.lawrence.com"
-MEDIA_URL = '/media/'
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
-# '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',
- 'django.contrib.messages.middleware.MessageMiddleware'
-)
-
-ROOT_URLCONF = 'example_project.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',
- ROOT_PATH + '../chimere/templates',
-]
-
-TEMPLATE_CONTEXT_PROCESSORS = (
- "django.contrib.auth.context_processors.auth",
- "django.core.context_processors.debug",
- "django.core.context_processors.i18n",
- "django.core.context_processors.media",
- "django.core.context_processors.static",
- "django.contrib.messages.context_processors.messages",
- "django.core.context_processors.request",
-)
-
-INSTALLED_APPS = [
- 'django.contrib.auth',
- 'django.contrib.admin',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.gis',
- 'django.contrib.staticfiles',
- 'south',
- 'chimere',
- # activate it if you want to use old migration scripts
- #'chimere.scripts',
-]
-
-# celery
-try:
- import djcelery
- import kombu
- djcelery.setup_loader()
- BROKER_URL = 'django://'
- INSTALLED_APPS += ['kombu.transport.django',
- 'djcelery']
-except ImportError:
- # some import and export will not be available
- pass
-
-INSTALLED_APPS += [
- 'south',
- 'chimere',
- # activate it if you want to use old migration scripts
- #'chimere.scripts',
-]
-
-LOGGING = {'version': 1,
- 'disable_existing_loggers': False,
- 'handlers': {
- # Include the default Django email handler for errors
- # This is what you'd get without configuring logging at all.
- 'mail_admins': {
- 'class': 'django.utils.log.AdminEmailHandler',
- 'level': 'ERROR',
- # But the emails are plain text by default - HTML is nicer
- 'include_html': True,
- },
- # Log to a text file that can be rotated by logrotate
- 'logfile': {
- 'class': 'logging.handlers.WatchedFileHandler',
- 'filename': '/var/log/django/chimere.log'
- },
- },
- 'loggers': {
- # Again, default Django configuration to email unhandled exceptions
- 'django.request': {
- 'handlers': ['mail_admins'],
- 'level': 'ERROR',
- 'propagate': True,
- },
- # Might as well log any errors anywhere else in Django
- 'django': {
- 'handlers': ['logfile'],
- 'level': 'ERROR',
- 'propagate': False,
- },
- # Your own app - this assumes all your logger names start with "myapp."
- 'chimere': {
- 'handlers': ['logfile'],
- 'level': 'WARNING', # Or maybe INFO or DEBUG
- 'propogate': False
- },
- },
-}
-
-try:
- from local_settings import *
-except ImportError, e:
- print 'Unable to load local_settings.py:', e
-
-if 'CHIMERE_SHARE_NETWORKS' not in globals():
- # after the locals to get the right STATIC_URL
-
- # share with
- global CHIMERE_SHARE_NETWORKS
- CHIMERE_SHARE_NETWORKS = (
- ("Email", 'mailto:?subject=%(text)s&body=%(url)s',
- STATIC_URL + 'chimere/img/email.png'),
- ("Facebook", 'http://www.facebook.com/sharer.php?t=%(text)s&u=%(url)s',
- STATIC_URL + 'chimere/img/facebook.png'),
- ("Twitter", 'http://twitter.com/home?status=%(text)s %(url)s',
- STATIC_URL + 'chimere/img/twitter.png'),
- ("Identi.ca", 'http://identi.ca/index.php?action=newnotice&status_textarea=%(text)s %(url)s',
- STATIC_URL + 'chimere/img/identica.png'),
- )
-
-if 'OSM_JS_URLS' not in globals():
- global OSM_JS_URLS
- OSM_JS_URLS = [STATIC_URL + "chimere/js/OpenLayers.js",
- STATIC_URL + "chimere/js/SimplePanZoom.js",
- "http://www.openstreetmap.org/openlayers/OpenStreetMap.js"]
-
diff --git a/example_project/templates/chimere/blocks/overload_templates_here b/example_project/templates/chimere/blocks/overload_templates_here
deleted file mode 100644
index e69de29..0000000
--- a/example_project/templates/chimere/blocks/overload_templates_here
+++ /dev/null
diff --git a/example_project/templates/chimere/overload_templates_here b/example_project/templates/chimere/overload_templates_here
deleted file mode 100644
index e69de29..0000000
--- a/example_project/templates/chimere/overload_templates_here
+++ /dev/null
diff --git a/example_project/templates/overload_templates_here b/example_project/templates/overload_templates_here
deleted file mode 100644
index e69de29..0000000
--- a/example_project/templates/overload_templates_here
+++ /dev/null
diff --git a/example_project/urls.py b/example_project/urls.py
deleted file mode 100644
index e37ae53..0000000
--- a/example_project/urls.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# Copyright (C) 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
-# 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 import settings
-from django.conf.urls.defaults import *
-
-from django.contrib import admin
-from django.contrib.staticfiles.urls import staticfiles_urlpatterns
-
-admin.autodiscover()
-urlpatterns = patterns('django.views.static',
- (r'^%s(?P<path>.*)' % settings.MEDIA_URL[1:], 'serve',
- {'document_root': settings.MEDIA_ROOT}),
-)
-
-if "tinymce" in settings.INSTALLED_APPS:
- urlpatterns += patterns('django.views.static',
- (r'^tinymce/', include('tinymce.urls')),)
-
-urlpatterns += staticfiles_urlpatterns()
-
-urlpatterns += patterns('',
- (r'^admin/doc/', include('django.contrib.admindocs.urls')),
- (r'^admin/', include(admin.site.urls)),
- url(r'^', include('chimere.urls', namespace="chimere")),
-)
-
-
diff --git a/requirements.txt b/requirements.txt
index f458f31..ca8db85 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,10 +1,9 @@
-django==1.4
+django>=1.4,<1.4.99
beautifulsoup
psycopg2
pil
lxml
-south==0.7.3
+south>=0.7.3,<0.7.99
simplejson
feedparser
-django-extensions
django-tinymce
diff --git a/setup.py b/setup.py
index ca0c460..b7bf65b 100644
--- a/setup.py
+++ b/setup.py
@@ -10,31 +10,23 @@ try:
except (IOError, OSError):
reqs = ''
-def list_folder(path, extensions):
- """
- Recursive function to list folders
- extensions may be a list like ["css", "js", "html"]
- """
- final = []
- for root, subfolders, filenames in os.walk(path):
- for subfolder in subfolders:
- for ext in extensions:
- final.append("%s/%s/*.%s" % (root[len("chimere/"):], subfolder, ext))
- return final
-
setup(
name='chimere',
version=chimere.get_version(),
description=
- """Chimere is a kind of online “mashup” which is designed to aggregate geographic data from several sources. Chimere gets a map from OpenStreetMap and display other data added by users. Datas are freely submitted by visitors and then validated by an administrator.""",
- author='Étienne Loks',
+ "Chimere is a kind of online “mashup” which is designed to aggregate "\
+ "geographic data from several sources. Chimere gets a map from "\
+ "OpenStreetMap and display other data added by users. Datas are freely "\
+ "submitted by visitors and then validated by an administrator.",
+ long_description=open('README.txt').read(),
+ author=u'Étienne Loks',
author_email='etienne.loks@peacefrogs.net',
url='http://blog.peacefrogs.net/nim/chimere/',
- packages=find_packages(exclude=["example", "example.*",]),
+ license='GPL v3 licence, see COPYING',
+ packages=find_packages(),
include_package_data=True,
- package_data={
- 'chimere': list_folder(os.path.join('chimere', 'static'), ["css", "js", "png"]) + list_folder(os.path.join('chimere', 'templates'), ["html"])},
install_requires=reqs,
+ #test_suite = "chimere.runtests.runtests",
classifiers=[
'Development Status :: 4 - Beta',
'Environment :: Web Environment',
diff --git a/utils/__init__.py b/utils/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/utils/__init__.py
+++ /dev/null