diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-23 03:44:34 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-23 03:44:34 +0100 |
| commit | 4064b6021750d693f905e903378901312a86e6d2 (patch) | |
| tree | 1e09c4c2ec91024c6423495c296e536d0250581a /chimere | |
| parent | e38c33b9cf2a890625b781a59e5db354ab1a5485 (diff) | |
| download | Chimère-4064b6021750d693f905e903378901312a86e6d2.tar.bz2 Chimère-4064b6021750d693f905e903378901312a86e6d2.zip | |
OSM export: improve admin form
Diffstat (limited to 'chimere')
| -rw-r--r-- | chimere/admin.py | 30 | ||||
| -rw-r--r-- | chimere/forms.py | 17 | ||||
| -rw-r--r-- | chimere/static/chimere/css/forms.css | 10 | ||||
| -rw-r--r-- | chimere/templates/admin/osm_export.html | 30 |
4 files changed, 81 insertions, 6 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index b4231a7..ff689af 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -38,7 +38,7 @@ except ImportError: from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\ NewsAdminForm, CategoryAdminForm, ImporterAdminForm, \ - PictureFileAdminForm, MultimediaFileAdminForm + PictureFileAdminForm, MultimediaFileAdminForm, OSMForm from chimere.models import Category, Icon, SubCategory, Marker, \ PropertyModel, News, Route, Area, ColorTheme, Color, \ MultimediaFile, PictureFile, Importer, Layer, AreaLayers,\ @@ -290,11 +290,29 @@ def cancel_export(modeladmin, request, queryset): cancel_export.short_description = _(u"Cancel export") def export_to_osm(modeladmin, request, queryset): - importers = modeladmin.model.objects.filter(importer_type='OSM') - for importer in queryset: - importer.state = unicode(tasks.IMPORT_MESSAGES['export_pending'][0]) - importer.save() - tasks.exporting(importer.pk) + if queryset.count() > 1: + messages.error(request, _(u"Can manage only one OSM export at a time.")) + return HttpResponseRedirect(request.get_full_path()) + importer = queryset.all()[0] + if Marker.objects.filter(categories__in=importer.categories.all(), + status='I').count(): + messages.error(request, _(u"You must treat all item with the status "\ + u"\"imported\" before exporting to OSM.")) + return HttpResponseRedirect(request.get_full_path()) + if importer.importer_type != 'OSM': + messages.error(request, _(u"Only OSM importer are managed for export.")) + return HttpResponseRedirect(request.get_full_path()) + #for importer in queryset: + # importer.state = unicode(tasks.IMPORT_MESSAGES['export_pending'][0]) + # importer.save() + # tasks.exporting(importer.pk) + form = OSMForm() + item_nb = Marker.objects.filter(categories__in=importer.categories.all(), + not_for_osm=False).count() + msg_item = _(u"%s point(s) of interest concerned by this export") % item_nb + return render_to_response('admin/osm_export.html', {'importer':importer, + 'form':form, 'msg_item':msg_item}, + context_instance=RequestContext(request)) export_to_osm.short_description = _(u"Export to osm") class ImporterAdmin(admin.ModelAdmin): diff --git a/chimere/forms.py b/chimere/forms.py index a1e9319..597975d 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -89,6 +89,23 @@ class ContactForm(forms.Form): email = forms.EmailField(label=_("Email (optional)"), required=False) content = forms.CharField(label=_("Object"), widget=forms.Textarea) +class OSMForm(forms.Form): + """ + OSM export form + """ + email = forms.EmailField(label=_("OSM user")) + password = forms.CharField(label=_(u"Password"), + widget=forms.PasswordInput(render_value=False)) + # API URL are hardcoded: the day the API change Chimère will need + # adaptations + api = forms.ChoiceField(label=_(u"API"), + choices=(('', '--'), + ('api06.dev.openstreetmap.org', + _(u"Test API - %s") % 'api06.dev.openstreetmap.org'), + ('api.openstreetmap.org/api', + _(u"Main API - %s") % 'api.openstreetmap.org/api'), + )) + class NewsAdminForm(forms.ModelForm): """ Main form for news diff --git a/chimere/static/chimere/css/forms.css b/chimere/static/chimere/css/forms.css index 58315cd..a763a34 100644 --- a/chimere/static/chimere/css/forms.css +++ b/chimere/static/chimere/css/forms.css @@ -161,3 +161,13 @@ form .aligned .input-osm p{ padding:0.2em; margin:0; } + +form .aligned p.help-osm{ + padding-left:0; + margin-left:0; +} + +form .aligned p.help-osm.errornote{ + padding-left:30px; + margin-left:0; +} diff --git a/chimere/templates/admin/osm_export.html b/chimere/templates/admin/osm_export.html new file mode 100644 index 0000000..42ea0f7 --- /dev/null +++ b/chimere/templates/admin/osm_export.html @@ -0,0 +1,30 @@ +{% 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" %}" /> +{% endblock %} + + +{% block content %} +<fieldset class='module'> +<form method='POST' action='.'> +{% csrf_token %} +<input type='hidden' name='action' value='export_to_osm'/> +<input type='hidden' name='validate' value='1'/> +<input type='hidden' name='_selected_action' value='{{item.pk}}'/> +<table> +{{ form.as_table }} +</table> +</fieldset> +<ul class='messagelist'> + <li>{{msg_item}}</li> + <li>{% trans "Before exporting to OSM an import is done to verify that no modification has been made. All pending imported item have to be validated before export." %}</li> +</ul> +<p class='errornote'>{% blocktrans %}Ensure that all the data exported to OSM have an appropriate license. You can exclude some points of interest by checking the checkbox "Not to be imported in OSM" in the point of interest form. If you are not sure of what you are doing: DON'T EXPORT TO OSM!{% endblocktrans %}</p> +<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 "Export to OSM" %}'/> +</div> +</form> +{% endblock %} |
