summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/admin.py56
-rw-r--r--chimere/forms.py2
-rw-r--r--chimere/models.py8
-rw-r--r--chimere/templates/admin/managed_modified.html47
-rw-r--r--chimere/templates/chimere/blocks/ol_map.html26
-rw-r--r--chimere/templatetags/chimere_tags.py7
6 files changed, 113 insertions, 33 deletions
diff --git a/chimere/admin.py b/chimere/admin.py
index 4f7a49d..399e6e1 100644
--- a/chimere/admin.py
+++ b/chimere/admin.py
@@ -94,35 +94,42 @@ def managed_modified(modeladmin, request, queryset):
u"time."))
return HttpResponseRedirect(request.get_full_path())
- marker = queryset.all()[0]
- if not marker.status == 'M':
+ item = queryset.all()[0]
+ if not item.status == 'M':
try:
- marker = Marker.objects.get(ref_item=marker, status='M')
+ item = modeladmin.model.objects.get(ref_item=item, status='M')
except ObjectDoesNotExist:
messages.error(request, _(u"No modified item associated "
- u"to the selected marker."))
+ u"to the selected item."))
return HttpResponseRedirect(request.get_full_path())
- marker_ref = marker.ref_item
+ item_ref = item.ref_item
if request.POST.get('rapprochement'):
- for k in request.POST:
- if not request.POST[k]:
- continue
- if hasattr(marker_ref, k):
- setattr(marker_ref, k, getattr(marker, k))
- marker_ref.save()
- elif k.startswith('property_'):
- try:
- pm = PropertyModel.get(pk=int(k[len('property_'):]))
- marker_ref.setProperty(pm, marker.getProperty(pm))
- except (ValueError, ObjectDoesNotExist):
- pass
- marker.delete()
+ couple = [(item, item_ref)]
+ if hasattr(item, 'associated_marker'):
+ couple.append((item.associated_marker, item_ref.associated_marker))
+ for it, it_ref in couple:
+ for k in request.POST:
+ if not request.POST[k]:
+ continue
+ if hasattr(it_ref, k):
+ setattr(it_ref, k, getattr(it, k))
+ it_ref.save()
+ elif k.startswith('property_'):
+ try:
+ pm = PropertyModel.get(pk=int(k[len('property_'):]))
+ it_ref.setProperty(pm, it.getProperty(pm))
+ except (ValueError, ObjectDoesNotExist):
+ pass
+ if hasattr(item, 'associated_marker'):
+ for it in item.associated_marker.all():
+ it.delete()
+ item.delete()
messages.success(request, _(u"Modified item traited."))
return HttpResponseRedirect(request.get_full_path())
- return render_to_response('admin/managed_modified_marker.html',
- {'marker':marker, 'marker_ref':marker_ref},
+ return render_to_response('admin/managed_modified.html',
+ {'item':item, 'item_ref':item_ref},
context_instance=RequestContext(request))
-
+managed_modified.short_description = _(u"Managed modified items")
class PictureInline(admin.TabularInline):
model = PictureFile
@@ -145,8 +152,8 @@ class MarkerAdmin(admin.ModelAdmin):
search_fields = ("name",)
list_display = ('name', 'status')
list_filter = ('status', 'categories')
- actions = [validate, export_to_kml, export_to_shapefile, export_to_csv,
- managed_modified]
+ actions = [validate, managed_modified, export_to_kml, export_to_shapefile,
+ export_to_csv]
exclude = ['submiter_session_key', 'import_key', 'import_version',
'available_date']
readonly_fields = ['submiter_email', 'submiter_comment', 'import_source',
@@ -177,7 +184,8 @@ class RouteAdmin(admin.ModelAdmin):
exclude = ['height', 'width']
form = RouteAdminForm
readonly_fields = ('associated_file',)
- actions = [validate, export_to_kml, export_to_shapefile, export_to_csv]
+ actions = [validate, managed_modified, export_to_kml, export_to_shapefile,
+ export_to_csv]
def queryset(self, request):
qs = self.model._default_manager.get_query_set()
diff --git a/chimere/forms.py b/chimere/forms.py
index 4e834d0..4b4d49f 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -277,7 +277,7 @@ class RouteAdminForm(forms.ModelForm):
"""
new_route = super(RouteAdminForm, self).save(*args, **keys)
if 'status' not in self.cleaned_data and not new_route.status:
- new_marker.status = 'S'
+ new_route.status = 'S'
new_route.save()
return new_route
diff --git a/chimere/models.py b/chimere/models.py
index b15a268..12ec7a1 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -414,6 +414,10 @@ class Marker(GeographicItem):
def geometry(self):
return self.point.wkt
+ @property
+ def geom_attr(self):
+ return 'point'
+
class Meta:
ordering = ('status', 'name')
verbose_name = _(u"Point of interest")
@@ -879,6 +883,10 @@ class Route(GeographicItem):
def geometry(self):
return self.route.wkt
+ @property
+ def geom_attr(self):
+ return 'route'
+
def get_init_multi(self):
if not self.associated_marker.count():
return []
diff --git a/chimere/templates/admin/managed_modified.html b/chimere/templates/admin/managed_modified.html
new file mode 100644
index 0000000..c55650d
--- /dev/null
+++ b/chimere/templates/admin/managed_modified.html
@@ -0,0 +1,47 @@
+{% extends "admin/base_site.html" %}
+{% load chimere_tags i18n admin_static %}
+
+{% block extrahead %}
+<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />
+<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
+{% endblock %}
+
+
+{% block content %}
+<p class='errornote'>{% trans "Be careful: after validation, the modified item will be deleted. There is no roll-back." %}</p>
+<fieldset class='module'>
+<form method='POST' action='.'>
+{% csrf_token %}
+<input type='hidden' name='action' value='managed_modified'/>
+<input type='hidden' name='rapprochement' value='1'/>
+<input type='hidden' name='_selected_action' value='{{item.pk}}'/>
+<table>
+<thead>
+<tr><th>&nbsp;</th><th>{% trans "Reference" %}</th><th>{% trans "Modified item" %}</th><th>{% trans "Accept modification" %}</th></tr>
+</thead>
+<tbody>
+<tr><th>{% trans "Name" %}</th><td>{{item_ref}}</td><td>{{item}}</td><td><input type='checkbox' name='name'/></td></tr>
+<tr>
+ <th>{% trans "Categories" %}</th>
+ <td>{% for cat in item_ref.categories.all %}{%if forloop.counter0 %}, {%endif%}{{cat}}{%endfor%}</td>
+ <td>{% for cat in item.categories.all %}{%if forloop.counter0 %}, {%endif%}{{cat}}{%endfor%}</td>
+ <td><input type='checkbox' name='categories'/></td>
+</tr>
+<tr><th>{% trans "Emplacement" %}</th><td>{{item_ref|ol_map:'map_ref_id'}}</td><td>{{item|ol_map:'map_id'}}</td><td><input type='checkbox' name='{{item.geom_attr}}'/></td></tr>
+<tr><th>{% trans "Description" %}</th><td>{{item_ref.description|safe}}</td><td>{{item.description|safe}}</td><td><input type='checkbox' name='description'/></td></tr>
+{% for property_ref in item_ref.getProperties %}
+{% for property in item.getProperties %}
+{% ifequal property_ref.propertymodel property.propertymodel %}
+<tr><th>{{property.propertymodel.name}}</th><td>{{property_ref.value|safe}}</td><td>{{property.value|safe}}</td><td><input type='checkbox' name='property_{{property.propertymodel.pk}}'/></td></tr>
+{% endifequal %}
+{% endfor %}
+{% endfor %}
+</tbody>
+</table>
+</fieldset>
+<div class='submit-row'>
+<p class='deletelink-box'><a href="{% if item.point %}{% url admin:chimere_marker_changelist %}{%else%}{% url admin:chimere_route_changelist %}{%endif%}">{% trans "Back to list" %}</a></p>
+<input class='default' type='submit' value='{% trans "Validate" %}'/>
+</div>
+</form>
+{% endblock %}
diff --git a/chimere/templates/chimere/blocks/ol_map.html b/chimere/templates/chimere/blocks/ol_map.html
index 98743fa..a12651c 100644
--- a/chimere/templates/chimere/blocks/ol_map.html
+++ b/chimere/templates/chimere/blocks/ol_map.html
@@ -1,19 +1,31 @@
{% load unlocalize_point %}
-<div id="{{map_id}}" style="height:250px"></div>
+<div id="{{map_id}}" style="height:250px;width:250px;"></div>
<script>
-
- var lat = '{{geom.y|unlocalize_point}}';
- var lon = '{{geom.x|unlocalize_point}}';
- var zoom = 18;
+ {{map_id}} = new OpenLayers.Map("{{map_id}}");
+ {{map_id}}.addLayer(new OpenLayers.Layer.OSM());
var fromProjection = new OpenLayers.Projection("EPSG:4326");
var toProjection = new OpenLayers.Projection("EPSG:900913");
+ {% ifequal geom_type 'point' %}
+ var lat = '{{geom.y|unlocalize_point}}';
+ var lon = '{{geom.x|unlocalize_point}}';
var position = new OpenLayers.LonLat(lon, lat).transform(fromProjection,
toProjection);
- {{map_id}} = new OpenLayers.Map("{{map_id}}");
- {{map_id}}.addLayer(new OpenLayers.Layer.OSM());
var {{map_id}}markers = new OpenLayers.Layer.Markers( "Markers" );
{{map_id}}.addLayer({{map_id}}markers);
{{map_id}}markers.addMarker(new OpenLayers.Marker(position));
+ var zoom = 18;
{{map_id}}.setCenter(position, zoom);
+ {% else %}
+ var wkt_reader = new OpenLayers.Format.WKT({
+ 'internalProjection':toProjection,
+ 'externalProjection':fromProjection
+ });
+ var {{map_id}}vectors = new OpenLayers.Layer.Vector("Vector Layer");
+ {{map_id}}.addLayer({{map_id}}vectors);
+ var {{map_id}}features = wkt_reader.read('{{geom.wkt}}');
+ {{map_id}}vectors.addFeatures([{{map_id}}features]);
+
+ {{map_id}}.zoomToExtent({{map_id}}vectors.getDataExtent());
+ {% endifequal %}
</script>
diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py
index 25e6122..7753bc0 100644
--- a/chimere/templatetags/chimere_tags.py
+++ b/chimere/templatetags/chimere_tags.py
@@ -211,7 +211,12 @@ def get_tinyfied_url(marker, area_name=''):
return url
@register.filter(name='ol_map')
-def ol_map(geom, arg='map_id'):
+def ol_map(item, arg='map_id'):
+ geom, geom_type = None, None
+ if hasattr(item, 'point'):
+ geom, geom_type = item.point, 'point'
+ elif hasattr(item, 'route'):
+ geom, geom_type = item.route, 'route'
rendered = render_to_string('chimere/blocks/ol_map.html', {'geom': geom,
'map_id':arg})
return rendered