Projet

Général

Profil

0001-views-move-ods-export-next-to-other-visualisation-ac.patch

Frédéric Péters, 28 février 2019 08:29

Télécharger (5,82 ko)

Voir les différences:

Subject: [PATCH] views: move ods export next to other visualisation actions
 (#30865)

 bijoe/static/css/bijoe.css               |  6 -----
 bijoe/templates/bijoe/cube.html          |  3 ---
 bijoe/templates/bijoe/visualization.html |  1 +
 bijoe/visualization/urls.py              |  1 +
 bijoe/visualization/views.py             | 31 +++++++++++++-----------
 5 files changed, 19 insertions(+), 23 deletions(-)
bijoe/static/css/bijoe.css
72 72
  justify-content: space-around; 
73 73
}
74 74

  
75
/* put ODS export export slightly on the right of the repesentation header */
76
#ods {
77
  margin: 1ex;
78
  top: -2ex;
79
}
80

  
81 75
/* Main content */
82 76

  
83 77
/* size main content to let some place on the right for the form */
bijoe/templates/bijoe/cube.html
26 26
{% block content %}
27 27
  <form class="cube-form" method="post" action=".">
28 28
    {% csrf_token %}
29
    {% if visualization %}
30
       <input type="submit" value="ODS" name="ods" id="ods"/>
31
    {% endif %}
32 29
    <h3>Représentation</h3>
33 30
    {% include "bijoe/field.html" with field=form.representation %}
34 31
    <h3>Répétition</h3>
bijoe/templates/bijoe/visualization.html
15 15
{% block actions %}
16 16
  <a rel="popup" class="button" href="{% url "rename-visualization" pk=object.pk %}">{% trans "Rename" %}</a>
17 17
  <a rel="popup" class="button" href="{% url "delete-visualization" pk=object.pk %}">{% trans "Delete" %}</a>
18
  <a rel="popup" class="button" href="{% url "visualization-ods" pk=object.pk %}">{% trans "Export as ODS" %}</a>
18 19
  <a href="{{ iframe_url }}" class="button">{% trans "URL for IFRAME" %}</a>
19 20
{% endblock %}
20 21

  
bijoe/visualization/urls.py
32 32
    url(r'(?P<pk>\d+)/$', views.visualization, name='visualization'),
33 33
    url(r'(?P<pk>\d+)/geojson/$', views.visualization_geojson, name='visualization-geojson'),
34 34
    url(r'(?P<pk>\d+)/iframe/$', views.visualization_iframe, name='visualization-iframe'),
35
    url(r'(?P<pk>\d+)/ods/$', views.visualization_ods, name='visualization-ods'),
35 36
    url(r'(?P<pk>\d+)/rename/$', views.rename_visualization, name='rename-visualization'),
36 37
    url(r'(?P<pk>\d+)/delete/$', views.delete_visualization, name='delete-visualization'),
37 38
]
bijoe/visualization/views.py
18 18
import json
19 19

  
20 20
from django.conf import settings
21
from django.utils.text import slugify
21 22
from django.views.generic.edit import CreateView, DeleteView, UpdateView
22 23
from django.views.generic.list import MultipleObjectMixin
23 24
from django.views.generic import DetailView, ListView, View, TemplateView
......
81 82
        return super(CubeMixin, self).dispatch(request, *args, **kwargs)
82 83

  
83 84

  
84
class ODSMixin(object):
85
    def ods(self, visualization):
86
        if not self.visualization:
87
            raise Http404
88
        response = HttpResponse(content_type='application/vnd.oasis.opendocument.spreadsheet')
89
        response['Content-Disposition'] = 'attachment; filename=%s.ods' % self.cube.name
90
        workbook = visualization.ods()
91
        workbook.save(response)
92
        return response
93

  
94

  
95
class CubeView(views.AuthorizationMixin, CubeDisplayMixin, ODSMixin, CubeMixin, TemplateView):
85
class CubeView(views.AuthorizationMixin, CubeDisplayMixin, CubeMixin, TemplateView):
96 86
    template_name = 'bijoe/cube.html'
97 87

  
98 88
    def post(self, request, *args, **kwargs):
......
124 114
        return super(CreateVisualizationView, self).form_valid(form)
125 115

  
126 116

  
127
class VisualizationView(views.AuthorizationMixin, ODSMixin, CubeDisplayMixin,
128
                        DetailView):
117
class VisualizationView(views.AuthorizationMixin, CubeDisplayMixin, DetailView):
129 118
    model = models.Visualization
130 119
    template_name = 'bijoe/visualization.html'
131 120

  
......
236 225
    template_name = 'bijoe/cube_raw.html'
237 226

  
238 227

  
228
class VisualizationODSView(DetailView):
229
    model = models.Visualization
230

  
231
    def get(self, request, *args, **kwargs):
232
        instance = self.get_object()
233
        visualization = Visualization.from_json(instance.parameters, request=request)
234
        response = HttpResponse(content_type='application/vnd.oasis.opendocument.spreadsheet')
235
        response['Content-Disposition'] = 'attachment; filename=%s.ods' % slugify(instance.name)
236
        workbook = visualization.ods()
237
        workbook.save(response)
238
        return response
239

  
240

  
239 241
class VisualizationGeoJSONView(generics.GenericAPIView):
240 242
    permission_classes = ()
241 243
    queryset = models.Visualization.objects.all()
......
272 274
visualization = VisualizationView.as_view()
273 275
visualization_iframe = xframe_options_exempt(VisualizationIframeView.as_view())
274 276
visualization_geojson = VisualizationGeoJSONView.as_view()
277
visualization_ods = VisualizationODSView.as_view()
275 278

  
276 279
cube_iframe.mellon_no_passive = True
277 280
visualization_iframe.mellon_no_passive = True
278
-