From 867a458485da8f477d613680665a232ae33f64e5 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 11 Feb 2020 23:48:53 +0100 Subject: [PATCH 2/2] visualization: add a duplicate button (#39637) --- bijoe/templates/bijoe/visualization.html | 1 + bijoe/visualization/urls.py | 1 + bijoe/visualization/views.py | 17 +++++++++++++++++ tests/test_views.py | 11 +++++++++++ 4 files changed, 30 insertions(+) diff --git a/bijoe/templates/bijoe/visualization.html b/bijoe/templates/bijoe/visualization.html index d81c6e7..28c8d99 100644 --- a/bijoe/templates/bijoe/visualization.html +++ b/bijoe/templates/bijoe/visualization.html @@ -15,6 +15,7 @@ {% block actions %} {% trans "Rename" %} {% trans "Delete" %} + {% trans "Duplicate" %} {% trans "Export as ODS" %} {% trans "Export as JSON" %} {% trans "URL for IFRAME" %} diff --git a/bijoe/visualization/urls.py b/bijoe/visualization/urls.py index 9833d13..3d5d368 100644 --- a/bijoe/visualization/urls.py +++ b/bijoe/visualization/urls.py @@ -41,4 +41,5 @@ urlpatterns = [ url(r'(?P\d+)/rename/$', views.rename_visualization, name='rename-visualization'), url(r'(?P\d+)/delete/$', views.delete_visualization, name='delete-visualization'), url(r'(?P\d+)/export$', views.export_visualization, name='export-visualization'), + url(r'(?P\d+)/save-as/$', views.save_as_visualization, name='save-as-visualization'), ] diff --git a/bijoe/visualization/views.py b/bijoe/visualization/views.py index 415fcce..4727fb6 100644 --- a/bijoe/visualization/views.py +++ b/bijoe/visualization/views.py @@ -120,6 +120,22 @@ class CreateVisualizationView(views.AuthorizationMixin, CubeMixin, CreateView): return super(CreateVisualizationView, self).form_valid(form) +class SaveAsVisualizationView(views.AuthorizationMixin, DetailView, CreateView): + model = models.Visualization + form_class = forms.VisualizationForm + template_name = 'bijoe/create_visualization.html' + success_url = '/visualization/{id}/' + + def form_valid(self, form): + form.instance.parameters = self.get_object().parameters + return super(SaveAsVisualizationView, self).form_valid(form) + + def get_initial(self): + return { + 'name': '%s %s' % (self.object.name, _('(Copy)')) + } + + class VisualizationView(views.AuthorizationMixin, CubeDisplayMixin, DetailView): model = models.Visualization template_name = 'bijoe/visualization.html' @@ -408,6 +424,7 @@ create_visualization = CreateVisualizationView.as_view() delete_visualization = DeleteVisualizationView.as_view() rename_visualization = RenameVisualization.as_view() export_visualization = ExportVisualizationView.as_view() +save_as_visualization = SaveAsVisualizationView.as_view() visualization = VisualizationView.as_view() visualization_iframe = xframe_options_exempt(VisualizationIframeView.as_view()) visualization_geojson = VisualizationGeoJSONView.as_view() diff --git a/tests/test_views.py b/tests/test_views.py index 403f014..ae404b8 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -186,3 +186,14 @@ def test_import_visualization(schema1, app, admin, visualization): resp = resp.form.submit().follow() assert '3 visualizations have been created. No visualization updated.' in resp.text assert Visualization.objects.count() == 3 + + +def test_save_as(schema1, app, admin, visualization): + login(app, admin) + resp = app.get('/visualization/%s/' % visualization.id) + resp = resp.click('Duplicate') + resp.form['name'] = 'zob' + resp = resp.form.submit().follow() + assert Visualization.objects.count() == 2 + new_visualization = Visualization.objects.get(name='zob') + assert new_visualization.parameters == visualization.parameters -- 2.24.0