Each completed job now features a "Recreate map" button that reschedules a similar map on the queue. The button only appears for completed maps (status >= 2), and triggers a rendering_already_exists() check before creating a new MapRenderingJob.
Signed-off-by: Maxime Petazzoni <[email protected]> --- www/maposmatic/forms.py | 16 ++++++++++++++ www/maposmatic/views.py | 36 ++++++++++++++++++++++++++++++++ www/media/style.css | 12 ++++++++++ www/templates/maposmatic/job-page.html | 7 ++++++ www/templates/maposmatic/job.html | 13 ++++++++++- www/templates/maposmatic/map.html | 14 +++++++++++- www/urls.py | 3 ++ 7 files changed, 99 insertions(+), 2 deletions(-) diff --git a/www/maposmatic/forms.py b/www/maposmatic/forms.py index abd6e70..ecbdea6 100644 --- a/www/maposmatic/forms.py +++ b/www/maposmatic/forms.py @@ -135,3 +135,19 @@ class MapRenderingJobForm(forms.ModelForm): return cleaned_data +class MapRecreateForm(forms.Form): + """ + The map recreate form, to reschedule an already processed job on the queue. + """ + + jobid = forms.IntegerField(widget=forms.HiddenInput, required=True) + + def clean(self): + cleaned_data = self.cleaned_data + + try: + cleaned_data["jobid"] = int(cleaned_data.get("jobid", 0)) + except ValueError: + cleaned_data["jobid"] = 0 + + return cleaned_data diff --git a/www/maposmatic/views.py b/www/maposmatic/views.py index 5cc02ae..39cb977 100644 --- a/www/maposmatic/views.py +++ b/www/maposmatic/views.py @@ -223,3 +223,39 @@ def query_nominatim(request, format, squery): mimetype='text/json') # Support other formats here. +def recreate(request): + if request.method == 'POST': + form = forms.MapRecreateForm(request.POST) + if form.is_valid(): + job = get_object_or_404(models.MapRenderingJob, + id=form.cleaned_data['jobid']) + + existing = helpers.rendering_already_exists(job) + if existing: + request.session['redirected'] = True + return HttpResponseRedirect(reverse('job-by-id', + args=[existing])) + + newjob = models.MapRenderingJob() + newjob.maptitle = job.maptitle + + newjob.administrative_city = job.administrative_city + newjob.administrative_osmid = job.administrative_osmid + + newjob.lat_upper_left = job.lat_upper_left + newjob.lon_upper_left = job.lon_upper_left + newjob.lat_bottom_right = job.lat_bottom_right + newjob.lon_bottom_right = job.lon_bottom_right + + newjob.status = 0 # Submitted + newjob.submitterip = request.META['REMOTE_ADDR'] + newjob.map_language = job.map_language + newjob.index_queue_at_submission = (models.MapRenderingJob.objects + .queue_size()) + newjob.save() + + return HttpResponseRedirect(reverse('job-by-id', + args=[newjob.id])) + + return HttpResponseBadRequest("ERROR: Invalid request") + diff --git a/www/media/style.css b/www/media/style.css index e0956b5..77a80c3 100644 --- a/www/media/style.css +++ b/www/media/style.css @@ -246,6 +246,18 @@ p.infobox img { background: #fff6bf; } +form.recreate { + float: right; +} + +.job form.recreate { + visibility: hidden; +} + +.job:hover form.recreate { + visibility: visible; +} + h2.jobtitle { margin: 0; padding: 0; diff --git a/www/templates/maposmatic/job-page.html b/www/templates/maposmatic/job-page.html index bc55b2c..e7184ed 100644 --- a/www/templates/maposmatic/job-page.html +++ b/www/templates/maposmatic/job-page.html @@ -33,6 +33,13 @@ {% block menu-jobs %}class="activelink"{% endblock %} {% block page %} +{% if not job.needs_waiting %} +<form method="post" action="{% url recreate %}" class="recreate"> + <input type="hidden" name="jobid" value="{{ job.id }}" /> + <input type="submit" value="{% trans "Recreate map" %}" /> +</form> +{% endif %} + <h1>{{ job.maptitle }}</h1> {% if redirected %} diff --git a/www/templates/maposmatic/job.html b/www/templates/maposmatic/job.html index d8acae0..65b63cb 100644 --- a/www/templates/maposmatic/job.html +++ b/www/templates/maposmatic/job.html @@ -28,7 +28,18 @@ {% load extratags %} -{% if not single %}<h2 class="jobtitle"><a href="{% url job-by-id job.id %}">{{ job.maptitle }}</a></h2>{% endif %} +{% if not single %} +{% if not job.needs_waiting %} +<form method="post" action="{% url recreate %}" class="recreate"> + <input type="hidden" name="jobid" value="{{ job.id }}" /> + <input type="submit" value="{% trans "Recreate map" %}" /> +</form> +{% endif %} + +<h2 class="jobtitle"> + <a href="{% url job-by-id job.id %}">{{ job.maptitle }}</a> +</h2> +{% endif %} <table class="jobinfo"><tbody><tr> <td class="status"> <img src="/smedia/{{ job.status|job_status_to_icon_name:job.resultmsg }}.png" title="{{ job.status|job_status_to_str:job.resultmsg }} ({{ job.status }})" /> diff --git a/www/templates/maposmatic/map.html b/www/templates/maposmatic/map.html index 3642b52..56141f4 100644 --- a/www/templates/maposmatic/map.html +++ b/www/templates/maposmatic/map.html @@ -28,7 +28,19 @@ {% load extratags %} -{% if not single %}<h2 class="jobtitle"><a href="/jobs/{{ job.id }}">{{ job.maptitle }}</a></h2>{% endif %} +{% if not single %} +{% if not job.needs_waiting %} +<form method="post" action="{% url recreate %}" class="recreate"> + <input type="hidden" name="jobid" value="{{ job.id }}" /> + <input type="submit" value="{% trans "Recreate map" %}" /> +</form> +{% endif %} + +<h2 class="jobtitle"> + <a href="/jobs/{{ job.id }}">{{ job.maptitle }}</a> +</h2> +{% endif %} + <table class="jobinfo"><tbody><tr> <td class="thumb">{% if job.get_thumbnail %}<img src="{{ job.get_thumbnail }}" />{% endif %}</td> <td class="info"> diff --git a/www/urls.py b/www/urls.py index 388121c..4dadb98 100644 --- a/www/urls.py +++ b/www/urls.py @@ -55,6 +55,9 @@ urlpatterns = patterns('', url(r'^new/$', maposmatic.views.new, name='new'), + url(r'^recreate/$', maposmatic.views.recreate, + name='recreate'), + (r'^nominatim/([^/]*/)?(.*)$', maposmatic.views.query_nominatim), # Internationalization -- 1.6.3.3.341.g9b22d
