Added Event List Export Feature.
This commit is contained in:
@@ -6,12 +6,13 @@ from django.contrib.auth import login
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.exceptions import PermissionDenied, SuspiciousOperation
|
||||
from django.db.models import Q
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.views import generic
|
||||
|
||||
from .. import choices
|
||||
from .. import forms
|
||||
from .. import models
|
||||
from ..utils import has_role
|
||||
@@ -39,11 +40,60 @@ class EventListView(generic.ListView):
|
||||
|
||||
return qs
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(EventListView, self).get_context_data(**kwargs)
|
||||
user = self.request.user
|
||||
context['has_permission_export'] = user.is_superuser or has_role(user, 'publish')
|
||||
return context
|
||||
|
||||
@method_decorator(login_required)
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
return super(EventListView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
|
||||
class EventListExportView(generic.FormView):
|
||||
form_class = forms.events.EventListExportForm
|
||||
template_name = 'dav_events/event_list_export_form.html'
|
||||
|
||||
def form_valid(self, form):
|
||||
filename = _(u'Veranstaltungen')
|
||||
filter_kwargs = {
|
||||
'accepted': True,
|
||||
}
|
||||
if form.cleaned_data['sport']:
|
||||
sport = form.cleaned_data['sport']
|
||||
filter_kwargs['sport'] = sport
|
||||
filename += u'--%s' % choices.SPORT_CHOICES.get_label(sport)
|
||||
if form.cleaned_data['begin']:
|
||||
date = form.cleaned_data['begin']
|
||||
filter_kwargs['first_day__gte'] = date
|
||||
filename += u'--%s' % date.strftime('%Y-%m-%d')
|
||||
if form.cleaned_data['end']:
|
||||
date = form.cleaned_data['end']
|
||||
filter_kwargs['first_day__lte'] = date
|
||||
filename += u'--%s' % date.strftime('%Y-%m-%d')
|
||||
|
||||
txt = u''
|
||||
event_qs = models.Event.objects.filter(**filter_kwargs).order_by('number')
|
||||
for event in event_qs:
|
||||
# txt += unicode(event)
|
||||
txt += event.render_as_text()
|
||||
txt += u'\n-----\n\n'
|
||||
|
||||
filename += u'.txt'
|
||||
|
||||
response = HttpResponse(txt, content_type='text/plain')
|
||||
response['Content-Disposition'] = 'attachment; filename="{filename}"'.format(filename=filename)
|
||||
return response
|
||||
|
||||
@method_decorator(login_required)
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
user = request.user
|
||||
if not user.is_superuser and not has_role(user, 'publish'):
|
||||
raise PermissionDenied('publish')
|
||||
return super(EventListExportView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
|
||||
class EventPermissionMixin(object):
|
||||
permission = 'view'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user