summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/actions.py3
-rw-r--r--chimere/fixtures/initial_data.json2
-rw-r--r--chimere/forms.py33
-rw-r--r--chimere/migrations/0024_auto__add_field_picturefile_polygon__chg_field_picturefile_marker__add.py392
-rw-r--r--chimere/models.py114
-rw-r--r--chimere/static/chimere/css/forms.css23
-rw-r--r--chimere/static/chimere/css/styles.css2
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js2
-rw-r--r--chimere/templates/chimere/blocks/polygon_edit.html2
-rw-r--r--chimere/templates/chimere/edit.html26
-rw-r--r--chimere/templates/chimere/edit_polygon.html12
-rw-r--r--chimere/urls.py5
-rw-r--r--chimere/views.py47
-rw-r--r--chimere/widgets.py2
14 files changed, 577 insertions, 88 deletions
diff --git a/chimere/actions.py b/chimere/actions.py
index 49f4a90..ac2bbaf 100644
--- a/chimere/actions.py
+++ b/chimere/actions.py
@@ -48,7 +48,8 @@ default_actions = [
(Action('view', 'chimere:index', _('View')), []),
(Action('contribute', 'chimere:edit', _('Contribute')),
(Action('edit', 'chimere:edit', _('Add a new point of interest')),
- Action('edit-route', 'chimere:editroute', _('Add a new route'))),
+ Action('edit-route', 'chimere:editroute', _('Add a new route')),
+ Action('edit-polygon', 'chimere:editpolygon', _('Add a new polygon'))),
)]
if hasattr(settings, 'CHIMERE_DIRECTORY') and settings.CHIMERE_DIRECTORY:
diff --git a/chimere/fixtures/initial_data.json b/chimere/fixtures/initial_data.json
index bd13fa4..b93ee4a 100644
--- a/chimere/fixtures/initial_data.json
+++ b/chimere/fixtures/initial_data.json
@@ -194,7 +194,7 @@
"pk": 1,
"model": "chimere.layer",
"fields": {
- "layer_code": "new ol.layer.Tile({\r\n source: new ol.source.OSM()\r\n}),",
+ "layer_code": "new ol.layer.Tile({\r\n source: new ol.source.OSM()\r\n})",
"name": "OSM - Mapnik"
}
},
diff --git a/chimere/forms.py b/chimere/forms.py
index 312512e..55bb57a 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -369,6 +369,11 @@ MarkerBaseForm = type(
get_properties(PropertyModel.objects.filter(available=True)))
+EXCLUDED_FIELDS = ['status']
+if not settings.CHIMERE_SEARCH_ENGINE:
+ EXCLUDED_FIELDS.append('keywords')
+
+
class MarkerForm(MarkerBaseForm):
"""
Form for the edit page
@@ -376,11 +381,12 @@ class MarkerForm(MarkerBaseForm):
ref_pk = forms.IntegerField(label=u" ", widget=forms.HiddenInput(),
required=False)
description = forms.CharField(widget=TextareaWidget, required=False)
- keywords = forms.CharField(max_length=200, required=False)
+ keywords = forms.CharField(widget=TextareaWidget, max_length=200,
+ required=False)
class Meta:
model = Marker
- exclude = ('status',)
+ exclude = EXCLUDED_FIELDS
widgets = {
'description': TextareaWidget(),
}
@@ -437,10 +443,12 @@ class RouteForm(RouteAdminForm):
widget=forms.HiddenInput)
associated_file_id = forms.CharField(
label=" ", required=False, widget=forms.HiddenInput)
+ keywords = forms.CharField(widget=TextareaWidget, max_length=200,
+ required=False)
class Meta:
model = Route
- exclude = ('status',)
+ exclude = EXCLUDED_FIELDS
def __init__(self, *args, **kwargs):
if kwargs.get('instance'):
@@ -501,6 +509,17 @@ class PolygonAdminForm(RouteAdminForm):
model = Polygon
+class PolygonForm(PolygonAdminForm):
+ """
+ Form for the edit page
+ """
+ description = forms.CharField(widget=TextareaWidget, required=False)
+
+ class Meta:
+ model = Polygon
+ exclude = EXCLUDED_FIELDS
+
+
class BaseFileForm(forms.ModelForm):
id = forms.IntegerField(label=u"", widget=forms.HiddenInput(),
required=False)
@@ -510,8 +529,9 @@ class BaseFileForm(forms.ModelForm):
raise ImproperlyConfigured
super(BaseFileForm, self).__init__(*args, **kwargs)
self.fields.pop('marker')
+ self.fields.pop('polygon')
- def save(self, associated_marker):
+ def save(self, associated_item):
if not hasattr(self, 'cleaned_data') or not self.cleaned_data:
return
instance = None
@@ -527,7 +547,10 @@ class BaseFileForm(forms.ModelForm):
instance.delete()
return
self.cleaned_data.pop('DELETE')
- self.cleaned_data['marker'] = associated_marker
+ if type(associated_item) == Marker:
+ self.cleaned_data['marker'] = associated_item
+ if type(associated_item) == Polygon:
+ self.cleaned_data['polygon'] = associated_item
if instance:
for k in self.cleaned_data:
setattr(instance, k, self.cleaned_data[k])
diff --git a/chimere/migrations/0024_auto__add_field_picturefile_polygon__chg_field_picturefile_marker__add.py b/chimere/migrations/0024_auto__add_field_picturefile_polygon__chg_field_picturefile_marker__add.py
new file mode 100644
index 0000000..7a83c9e
--- /dev/null
+++ b/chimere/migrations/0024_auto__add_field_picturefile_polygon__chg_field_picturefile_marker__add.py
@@ -0,0 +1,392 @@
+# -*- 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 'PictureFile.polygon'
+ db.add_column('chimere_picturefile', 'polygon',
+ self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='pictures', null=True, to=orm['chimere.Polygon']),
+ keep_default=False)
+
+
+ # Changing field 'PictureFile.marker'
+ db.alter_column('chimere_picturefile', 'marker_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['chimere.Marker']))
+ # Adding field 'MultimediaFile.polygon'
+ db.add_column('chimere_multimediafile', 'polygon',
+ self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='multimedia_files', null=True, to=orm['chimere.Polygon']),
+ keep_default=False)
+
+
+ # Changing field 'MultimediaFile.marker'
+ db.alter_column('chimere_multimediafile', 'marker_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['chimere.Marker']))
+
+ def backwards(self, orm):
+ # Deleting field 'PictureFile.polygon'
+ db.delete_column('chimere_picturefile', 'polygon_id')
+
+
+ # User chose to not deal with backwards NULL issues for 'PictureFile.marker'
+ raise RuntimeError("Cannot reverse this migration. 'PictureFile.marker' and its values cannot be restored.")
+ # Deleting field 'MultimediaFile.polygon'
+ db.delete_column('chimere_multimediafile', 'polygon_id')
+
+
+ # User chose to not deal with backwards NULL issues for 'MultimediaFile.marker'
+ raise RuntimeError("Cannot reverse this migration. 'MultimediaFile.marker' and its values cannot be restored.")
+
+ models = {
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ 'chimere.aggregatedroute': {
+ 'Meta': {'object_name': 'AggregatedRoute', 'db_table': "'chimere_aggregated_routes'", 'managed': 'False'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'route': ('django.contrib.gis.db.models.fields.MultiLineStringField', [], {}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'subcategory': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.SubCategory']"})
+ },
+ 'chimere.area': {
+ 'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'},
+ 'allow_point_edition': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'allow_polygon_edition': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'allow_route_edition': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ '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': '200'}),
+ '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'}),
+ 'offset_x': ('django.db.models.fields.IntegerField', [], {'default': '10'}),
+ 'offset_y': ('django.db.models.fields.IntegerField', [], {'default': '20'}),
+ 'popup_offset_x': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'popup_offset_y': ('django.db.models.fields.IntegerField', [], {'default': '20'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.importer': {
+ 'Meta': {'object_name': 'Importer'},
+ 'associate_marker_to_way': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'automatic_update': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'to': "orm['chimere.SubCategory']", 'null': 'True', 'blank': 'True'}),
+ 'default_description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_localisation': ('chimere.widgets.PointField', [], {'null': 'True', 'blank': 'True'}),
+ 'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'default_status': ('django.db.models.fields.CharField', [], {'default': "'I'", 'max_length': '1'}),
+ 'filtr': ('django.db.models.fields.TextField', [], {'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': '1000', 'null': 'True', 'blank': 'True'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '1000', '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'}),
+ 'source_file_alt': ('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.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'chimere.importerkeycategories': {
+ 'Meta': {'object_name': 'ImporterKeyCategories'},
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.SubCategory']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'importer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'key_categories'", 'to': "orm['chimere.Importer']"}),
+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '200'})
+ },
+ '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'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'keywords': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '1000', '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', [], {'blank': 'True', 'related_name': "'multimedia_files'", 'null': 'True', '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'}),
+ 'polygon': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'multimedia_files'", 'null': 'True', 'to': "orm['chimere.Polygon']"}),
+ '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': {'ordering': "['-date']", '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', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_front_page': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.page': {
+ 'Meta': {'ordering': "['order']", 'object_name': 'Page'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'mnemonic': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '10', 'null': 'True', 'blank': 'True'}),
+ 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': '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', [], {'blank': 'True', 'related_name': "'pictures'", 'null': 'True', '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'}),
+ 'polygon': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'pictures'", 'null': 'True', 'to': "orm['chimere.Polygon']"}),
+ '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.polygon': {
+ 'Meta': {'ordering': "('status', 'name')", 'object_name': 'Polygon'},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'color': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ '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'}),
+ 'inner_color': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'keywords': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True', 'blank': 'True'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'polygon': ('chimere.widgets.PolygonField', [], {}),
+ 'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_polygon'", 'null': 'True', 'to': "orm['chimere.Polygon']"}),
+ '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.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.propertymodelchoice': {
+ 'Meta': {'object_name': 'PropertyModelChoice'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'choices'", 'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ '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'}),
+ 'color': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ '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'}),
+ 'keywords': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'license': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True', 'blank': 'True'}),
+ 'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'name': ('django.db.models.fields.TextField', [], {}),
+ 'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'origin': ('django.db.models.fields.CharField', [], {'max_length': '1000', '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'},
+ 'as_layer': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ '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'}),
+ 'dated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'hover_icon': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'subcat_hovered'", 'null': 'True', 'to': "orm['chimere.Icon']"}),
+ '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'}),
+ 'keywords': ('django.db.models.fields.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {'default': '1000'}),
+ 'routing_warn': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
+ },
+ 'chimere.subcategoryuserlimit': {
+ 'Meta': {'object_name': 'SubCategoryUserLimit'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'subcategory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'limited_for_user'", 'to': "orm['chimere.SubCategory']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'subcategory_limit_to'", 'to': "orm['auth.User']"})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '500'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['chimere'] \ No newline at end of file
diff --git a/chimere/models.py b/chimere/models.py
index f27562b..5d0b93c 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -494,8 +494,8 @@ class ImporterKeyCategories(models.Model):
class GeographicItem(models.Model):
- name = models.TextField(_(u"Name"))
categories = SelectMultipleField(SubCategory)
+ name = models.TextField(_(u"Name"))
submiter_session_key = models.CharField(
_(u"Submitter session key"), blank=True, null=True, max_length=40)
submiter_name = models.CharField(_(u"Submitter name or nickname"),
@@ -664,6 +664,16 @@ class GeographicItem(models.Model):
def all_properties(cls):
return [pm for pm in PropertyModel.objects.all()]
+ def get_init_multi(self):
+ multis = [forms.model_to_dict(multi)
+ for multi in self.multimedia_files.all()]
+ return multis
+
+ def get_init_picture(self):
+ picts = [forms.model_to_dict(pict)
+ for pict in self.pictures.all()]
+ return picts
+
def property_setter(cls, propertymodel):
def setter(self, value):
@@ -697,16 +707,6 @@ class Marker(GeographicItem):
ordering = ('status', 'name')
verbose_name = _(u"Point of interest")
- def get_init_multi(self):
- multis = [forms.model_to_dict(multi)
- for multi in self.multimedia_files.all()]
- return multis
-
- def get_init_picture(self):
- picts = [forms.model_to_dict(pict)
- for pict in self.pictures.all()]
- return picts
-
@property
def multimedia_items(self):
pict = list(self.pictures.filter(miniature=False).all())
@@ -864,6 +864,47 @@ def marker_post_save(sender, **kwargs):
post_save.connect(marker_post_save, sender=Marker)
+class Polygon(GeographicItem):
+ '''Polygon on the map
+ '''
+ ref_item = models.ForeignKey(
+ "Polygon", blank=True, null=True, verbose_name=_(u"Reference polygon"),
+ related_name='submited_polygon')
+ polygon = PolygonField(
+ _(u"Polygon"), srid=settings.CHIMERE_EPSG_DISPLAY_PROJECTION)
+ picture = models.ImageField(
+ _(u"Image"), upload_to='upload', blank=True, null=True,
+ height_field='height', width_field='width')
+ height = models.IntegerField(_(u"Height"), blank=True, null=True)
+ width = models.IntegerField(_(u"Width"), blank=True, null=True)
+ color = models.CharField(
+ _(u"Color"), max_length=200, help_text=_(u"HTML code/name"),
+ blank=True, null=True)
+ inner_color = models.CharField(
+ _(u"Inner color"), max_length=200,
+ help_text=_(u"HTML code/name"), blank=True, null=True)
+ objects = models.GeoManager()
+
+ class Meta:
+ ordering = ('status', 'name')
+ verbose_name = _(u"Polygon")
+
+ @property
+ def geom_attr(self):
+ return 'polygon'
+
+ def getGeoJSON(self, color="#000", inner_color='#0F0'):
+ '''Return a GeoJSON string
+ '''
+ attributes = {"type": "Feature",
+ "geometry": json.loads(self.polygon.geojson),
+ "properties": {"pk": self.id, "name": self.name,
+ 'key': "polygon-{}".format(self.pk),
+ "color": color,
+ "inner_color": inner_color}}
+ return json.dumps(attributes)
+
+
class MultimediaType(models.Model):
MEDIA_TYPES = (('A', _(u"Audio")),
('V', _(u"Video")),
@@ -937,7 +978,10 @@ class MultimediaFile(models.Model):
miniature = models.BooleanField(
_(u"Display inside the description?"),
default=settings.CHIMERE_MINIATURE_BY_DEFAULT)
- marker = models.ForeignKey(Marker, related_name='multimedia_files')
+ marker = models.ForeignKey(Marker, related_name='multimedia_files',
+ blank=True, null=True)
+ polygon = models.ForeignKey(Polygon, related_name='multimedia_files',
+ blank=True, null=True)
class Meta:
verbose_name = _(u"Multimedia file")
@@ -1011,7 +1055,10 @@ class PictureFile(models.Model):
thumbnailfile_width = models.IntegerField(_(u"Thumbnail width"),
blank=True, null=True)
order = models.IntegerField(_(u"Order"), default=1)
- marker = models.ForeignKey(Marker, related_name='pictures')
+ marker = models.ForeignKey(Marker, related_name='pictures', blank=True,
+ null=True)
+ polygon = models.ForeignKey(Polygon, related_name='pictures', blank=True,
+ null=True)
def __unicode__(self):
return self.name or u""
@@ -1352,47 +1399,6 @@ class AggregatedRoute(models.Model):
return json.dumps(attributes)
-class Polygon(GeographicItem):
- '''Polygon on the map
- '''
- ref_item = models.ForeignKey(
- "Polygon", blank=True, null=True, verbose_name=_(u"Reference polygon"),
- related_name='submited_polygon')
- polygon = PolygonField(
- _(u"Polygon"), srid=settings.CHIMERE_EPSG_DISPLAY_PROJECTION)
- picture = models.ImageField(
- _(u"Image"), upload_to='upload', blank=True, null=True,
- height_field='height', width_field='width')
- height = models.IntegerField(_(u"Height"), blank=True, null=True)
- width = models.IntegerField(_(u"Width"), blank=True, null=True)
- color = models.CharField(
- _(u"Color"), max_length=200, help_text=_(u"HTML code/name"),
- blank=True, null=True)
- inner_color = models.CharField(
- _(u"Inner color"), max_length=200,
- help_text=_(u"HTML code/name"), blank=True, null=True)
- objects = models.GeoManager()
-
- class Meta:
- ordering = ('status', 'name')
- verbose_name = _(u"Polygon")
-
- @property
- def geom_attr(self):
- return 'polygon'
-
- def getGeoJSON(self, color="#000", inner_color='#0F0'):
- '''Return a GeoJSON string
- '''
- attributes = {"type": "Feature",
- "geometry": json.loads(self.polygon.geojson),
- "properties": {"pk": self.id, "name": self.name,
- 'key': "polygon-{}".format(self.pk),
- "color": color,
- "inner_color": inner_color}}
- return json.dumps(attributes)
-
-
class SimplePoint:
"""
Point in the map (not in the database)
diff --git a/chimere/static/chimere/css/forms.css b/chimere/static/chimere/css/forms.css
index 2c852d7..99c522f 100644
--- a/chimere/static/chimere/css/forms.css
+++ b/chimere/static/chimere/css/forms.css
@@ -15,19 +15,17 @@
/**/
div.rightWrapper{
- width: 100%;
- float:left;
+ /* width: 100%;
+ float:left;*/
}
div.rightform{
- margin-left:400px;
- height:400px;
+ /*margin-left:400px;*/
+ height:450px;
}
div.leftform{
- float: left;
- width: 400px;
- margin-left: -100%;
+ /* width: 400px;*/
}
div.bottomform{
@@ -35,11 +33,21 @@ div.bottomform{
width: 100%;
}
+.edit .fieldWrapper{
+ display:inline-block;
+}
+
+.fieldWrapper.full{
+ width:100%;
+ display:block;
+}
+
#map_edit, #map_edit_area{
margin:0;
border: 1px solid black;
width:100%;
height:350px;
+ clear: both;
}
#map_edit #OpenLayers_Control_MaximizeDiv,
@@ -69,7 +77,6 @@ div.bottomform{
#live_lonlat{
margin:1em;
- float:left;
}
#live_lonlat p{
diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css
index 9a0e4fb..645bfa5 100644
--- a/chimere/static/chimere/css/styles.css
+++ b/chimere/static/chimere/css/styles.css
@@ -173,7 +173,7 @@ fieldset{
}
.edit label{
- display:block;
+ display:inline;
}
a:link[disabled],
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index 79a9e37..f7f11cb 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -1952,7 +1952,7 @@ function transform(obj) {
initFeature: function(wkt_geometry){
feature = settings.WKT.readFeature(wkt_geometry, {
dataProjection: EPSG_DISPLAY_PROJECTION,
- featureProjectsion: EPSG_PROJECTION});
+ featureProjection: EPSG_PROJECTION});
if (settings.draw_activated){
settings.map.removeInteraction(settings.draw);
settings.draw_activated = false;
diff --git a/chimere/templates/chimere/blocks/polygon_edit.html b/chimere/templates/chimere/blocks/polygon_edit.html
index 98d5f7f..be112d2 100644
--- a/chimere/templates/chimere/blocks/polygon_edit.html
+++ b/chimere/templates/chimere/blocks/polygon_edit.html
@@ -17,8 +17,6 @@
{% if default_area %} chimere_init_options['selected_map_layer'] = {{default_area}};{% endif %}
</script>
-</div>
-
<div id='popup'></div>
<div id='map_edit'></div>
<div class='help'>{% trans "To delete a vertice, hold the SHIFT key and click." %}</div>
diff --git a/chimere/templates/chimere/edit.html b/chimere/templates/chimere/edit.html
index 0e1b849..ff4e514 100644
--- a/chimere/templates/chimere/edit.html
+++ b/chimere/templates/chimere/edit.html
@@ -22,50 +22,52 @@
{% 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>{% if is_modification %}{% trans "Modify a point of interest" %}{% else %}{% trans "Add a point of interest" %}{% endif %}</legend>
+ {% block legend %}<legend>{% if is_modification %}{% trans "Modify a point of interest" %}{% else %}{% trans "Add a point of interest" %}{% endif %}</legend>{% endblock %}
<form enctype="multipart/form-data" method='post' action='.'>
{% csrf_token %}
<div class='rightWrapper'>
<div class='rightform'>
- <div class="fieldWrapper">
+ <div class="fieldWrapper full">
+ {% block geometry %}
<label for="id_point">{% trans "Point"%} *</label>
{%if form.point.errors %}<ul class="errorlist"><li>{% trans "Select a location for this new site" %}</li></ul>{%endif%}
{{point_widget}}
+ {% endblock %}
</div>
</div>
</div>
<div class='leftform'>
<p>* {% trans "indicates a mandatory field" %}</p>
+ <div class="fieldWrapper full">
+ <label for="id_subcategory">{% trans "Categories" %} *</label>
+ {% if form.categories.errors %}<div class='errors'>{{ form.categories.errors }}</div>{% endif %}
+ {{ form.categories }}
+ </div>
<div class="fieldWrapper">
<label for="id_name">{% trans "Name"%} *</label>
{% if form.name.errors %}<div class='errors'>{{ form.name.errors }}</div>{% endif %}
{{ form.name }}
</div>
<div class="fieldWrapper">
- <label for="id_subcategory">{% trans "Categories" %} *</label>
- {% if form.categories.errors %}<div class='errors'>{{ form.categories.errors }}</div>{% endif %}
- {{ form.categories }}
- </div>
- <div class="fieldWrapper">
<label for="id_description">{% trans "Description" %}</label>
{{ form.description.errors }}
{{ form.description }}
<p class="help">{{ form.description.help_text }}</p>
</div>
- <div class="fieldWrapper">
+ {% if form.keywords %}<div class="fieldWrapper">
<label for="id_keywords">{% trans "Keywords" %}</label>
{{ form.keywords.errors }}
{{ form.keywords }}
<p class="help">{{ form.keywords.help_text }}</p>
- </div>
+ </div>{% endif %}
{% if dated %}
- <div class="fieldWrapper">
+ <div class="fieldWrapper full">
<label for="id_start_date">{% trans "Start date" %}</label>
{{ form.start_date.errors }}
{{ form.start_date }}
<p class="help">{{ form.start_date.help_text }}</p>
</div>
- <div class="fieldWrapper">
+ <div class="fieldWrapper full">
<label for="id_end_date">{% trans "End date" %}</label>
{{ form.end_date.errors }}
{{ form.end_date }}
@@ -131,7 +133,7 @@
{% if form.submiter_email.errors %}<div class='errors'>{{ form.submiter_email.errors }}</div>{% endif %}
{{ form.submiter_email }}
</div>
- <div class="fieldWrapper">
+ <div class="fieldWrapper full">
<label for="id_submiter_comment">{% trans "Comments about your submission"%}</label>
{% if form.submiter_comment.errors %}<div class='errors'>{{ form.submiter_comment.errors }}</div>{% endif %}
{{ form.submiter_comment }}
diff --git a/chimere/templates/chimere/edit_polygon.html b/chimere/templates/chimere/edit_polygon.html
new file mode 100644
index 0000000..7bba0d0
--- /dev/null
+++ b/chimere/templates/chimere/edit_polygon.html
@@ -0,0 +1,12 @@
+{% extends "chimere/edit.html" %}
+{% load i18n chimere_tags adminmedia inline_formset%}
+
+{% block legend %}
+<legend>{% if is_modification %}{% trans "Modify a polygon" %}{% else %}{% trans "Add a polygon" %}{% endif %}</legend>
+{% endblock %}
+
+{% block geometry %}
+<label for="id_polygon">{% trans "Polygon"%} *</label>
+{%if form.polygon.errors %}<ul class="errorlist"><li>{% trans "Draw the associated polygon" %}</li></ul>{%endif%}
+{{polygon_widget}}
+{% endblock %}
diff --git a/chimere/urls.py b/chimere/urls.py
index b8ac58b..5fd8002 100644
--- a/chimere/urls.py
+++ b/chimere/urls.py
@@ -106,6 +106,11 @@ urlpatterns += patterns(
url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-route/(?P<item_id>\w+)/'
r'(?P<submited>\w+)?$',
'editRoute', name="editroute-item"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-polygon/$', 'editPolygon',
+ name="editpolygon"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-polygon/(?P<item_id>\w+)/'
+ r'(?P<submited>\w+)?$',
+ 'editPolygon', name="editpolygon-item"),
url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?getDetail/'
r'(?P<key>[a-zA-Z_-]*\d+)/?$',
'getDetail', name="get_detail"),
diff --git a/chimere/views.py b/chimere/views.py
index 7315ee1..9ecd240 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -49,10 +49,11 @@ from chimere.models import Category, SubCategory, PropertyModel, Page,\
Marker, Route, Polygon, SimpleArea, Area, Color, TinyUrl, RouteFile,\
AggregatedRoute
-from chimere.widgets import PointChooserWidget, RouteChooserWidget, AreaWidget
+from chimere.widgets import PointChooserWidget, RouteChooserWidget, AreaWidget,\
+ PolygonChooserWidget
from chimere.forms import MarkerForm, RouteForm, ContactForm, FileForm, \
FullFileForm, MultimediaFileFormSet, PictureFileFormSet, notifySubmission,\
- notifyStaff, AreaForm, RoutingForm
+ notifyStaff, AreaForm, RoutingForm, PolygonForm
from chimere.route import router
@@ -295,6 +296,7 @@ def get_edit_page(redirect_url, item_cls, item_form,
marker = item
if not isinstance(marker, Marker) \
+ and hasattr(item, 'associated_marker') \
and item.associated_marker.count():
marker = item.associated_marker.all()[0]
if marker:
@@ -482,6 +484,47 @@ def editRoute(request, area_name="", item_id=None, submited=False):
return render_to_response('chimere/edit_route.html', response_dct,
context_instance=RequestContext(request))
+get_edit_polygon = get_edit_page('chimere:editpolygon', Polygon, PolygonForm)
+
+
+def editPolygon(request, area_name="", item_id=None, submited=False):
+ """
+ Polygon edition page
+ """
+ response, values, sub_categories = get_edit_polygon(request, area_name,
+ item_id, ['R', 'B'])
+ if response:
+ return response
+ item_id, init_item, response_dct, form, formset_multi, formset_picture = \
+ values
+
+ # get the "manualy" declared_fields. Ie: properties
+ declared_fields = form.declared_fields.keys()
+ polygon_value = init_item.polygon if init_item else None
+ if request.POST and request.POST.get('polygon'):
+ polygon_value = request.POST.get('polygon')
+ response_dct.update({
+ 'actions': actions(response_dct['area_name']),
+ 'action_selected': ('contribute', 'edit-polygon'),
+ 'error_message': '',
+ 'map_layer': settings.CHIMERE_DEFAULT_MAP_LAYER,
+ 'form': form,
+ 'formset_multi': formset_multi,
+ 'formset_picture': formset_picture,
+ 'dated': settings.CHIMERE_DAYS_BEFORE_EVENT,
+ 'extra_head': form.media,
+ 'sub_categories': sub_categories,
+ 'polygon_widget': PolygonChooserWidget().render(
+ 'polygon', polygon_value, area_name=response_dct['area_name'],),
+ 'properties': declared_fields,
+ 'submited': submited
+ })
+ # manualy populate the custom widget
+ if 'subcategory' in form.data and form.data['subcategory']:
+ response_dct['current_category'] = int(form.data['subcategory'])
+ return render_to_response('chimere/edit_polygon.html', response_dct,
+ context_instance=RequestContext(request))
+
def submited(request, area_name="", action=""):
"""
diff --git a/chimere/widgets.py b/chimere/widgets.py
index d8c6de1..7fccca4 100644
--- a/chimere/widgets.py
+++ b/chimere/widgets.py
@@ -411,7 +411,7 @@ class RouteChooserWidget(forms.TextInput):
chimere_init_options['edition'] = true;
chimere_init_options['edition_type_is_route'] = true;
chimere_init_options["checked_categories"] = [];
- """ % (reverse("chimere:index"), settings.STATIC_URL,
+ """ % (reverse("chimere:index"),
settings.CHIMERE_EPSG_DISPLAY_PROJECTION,
settings.CHIMERE_EPSG_PROJECTION,
settings.CHIMERE_DEFAULT_CENTER[0],