views: move ods export next to other visualisation actions (#30865)

This commit is contained in:
Frédéric Péters 2019-02-25 09:39:02 +01:00
parent 8353aaddc7
commit 24943e3136
5 changed files with 19 additions and 23 deletions

View File

@ -72,12 +72,6 @@ select {
justify-content: space-around;
}
/* put ODS export export slightly on the right of the repesentation header */
#ods {
margin: 1ex;
top: -2ex;
}
/* Main content */
/* size main content to let some place on the right for the form */

View File

@ -26,9 +26,6 @@
{% block content %}
<form class="cube-form" method="post" action=".">
{% csrf_token %}
{% if visualization %}
<input type="submit" value="ODS" name="ods" id="ods"/>
{% endif %}
<h3>Représentation</h3>
{% include "bijoe/field.html" with field=form.representation %}
<h3>Répétition</h3>

View File

@ -15,6 +15,7 @@
{% block actions %}
<a rel="popup" class="button" href="{% url "rename-visualization" pk=object.pk %}">{% trans "Rename" %}</a>
<a rel="popup" class="button" href="{% url "delete-visualization" pk=object.pk %}">{% trans "Delete" %}</a>
<a rel="popup" class="button" href="{% url "visualization-ods" pk=object.pk %}">{% trans "Export as ODS" %}</a>
<a href="{{ iframe_url }}" class="button">{% trans "URL for IFRAME" %}</a>
{% endblock %}

View File

@ -32,6 +32,7 @@ urlpatterns = [
url(r'(?P<pk>\d+)/$', views.visualization, name='visualization'),
url(r'(?P<pk>\d+)/geojson/$', views.visualization_geojson, name='visualization-geojson'),
url(r'(?P<pk>\d+)/iframe/$', views.visualization_iframe, name='visualization-iframe'),
url(r'(?P<pk>\d+)/ods/$', views.visualization_ods, name='visualization-ods'),
url(r'(?P<pk>\d+)/rename/$', views.rename_visualization, name='rename-visualization'),
url(r'(?P<pk>\d+)/delete/$', views.delete_visualization, name='delete-visualization'),
]

View File

@ -18,6 +18,7 @@ import hashlib
import json
from django.conf import settings
from django.utils.text import slugify
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from django.views.generic.list import MultipleObjectMixin
from django.views.generic import DetailView, ListView, View, TemplateView
@ -81,18 +82,7 @@ class CubeMixin(object):
return super(CubeMixin, self).dispatch(request, *args, **kwargs)
class ODSMixin(object):
def ods(self, visualization):
if not self.visualization:
raise Http404
response = HttpResponse(content_type='application/vnd.oasis.opendocument.spreadsheet')
response['Content-Disposition'] = 'attachment; filename=%s.ods' % self.cube.name
workbook = visualization.ods()
workbook.save(response)
return response
class CubeView(views.AuthorizationMixin, CubeDisplayMixin, ODSMixin, CubeMixin, TemplateView):
class CubeView(views.AuthorizationMixin, CubeDisplayMixin, CubeMixin, TemplateView):
template_name = 'bijoe/cube.html'
def post(self, request, *args, **kwargs):
@ -124,8 +114,7 @@ class CreateVisualizationView(views.AuthorizationMixin, CubeMixin, CreateView):
return super(CreateVisualizationView, self).form_valid(form)
class VisualizationView(views.AuthorizationMixin, ODSMixin, CubeDisplayMixin,
DetailView):
class VisualizationView(views.AuthorizationMixin, CubeDisplayMixin, DetailView):
model = models.Visualization
template_name = 'bijoe/visualization.html'
@ -236,6 +225,19 @@ class CubeIframeView(CubeView):
template_name = 'bijoe/cube_raw.html'
class VisualizationODSView(DetailView):
model = models.Visualization
def get(self, request, *args, **kwargs):
instance = self.get_object()
visualization = Visualization.from_json(instance.parameters, request=request)
response = HttpResponse(content_type='application/vnd.oasis.opendocument.spreadsheet')
response['Content-Disposition'] = 'attachment; filename=%s.ods' % slugify(instance.name)
workbook = visualization.ods()
workbook.save(response)
return response
class VisualizationGeoJSONView(generics.GenericAPIView):
permission_classes = ()
queryset = models.Visualization.objects.all()
@ -272,6 +274,7 @@ rename_visualization = RenameVisualization.as_view()
visualization = VisualizationView.as_view()
visualization_iframe = xframe_options_exempt(VisualizationIframeView.as_view())
visualization_geojson = VisualizationGeoJSONView.as_view()
visualization_ods = VisualizationODSView.as_view()
cube_iframe.mellon_no_passive = True
visualization_iframe.mellon_no_passive = True