You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.3 KiB
Python
105 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
from aldryn_search.views import AldrynSearchView
|
|
from cms.models import Page
|
|
from django.core.urlresolvers import reverse_lazy
|
|
from django.views.generic import RedirectView
|
|
from django.views.generic.edit import FormView
|
|
from aldryn_forms.admin.views import FormExportWizardView
|
|
from aldryn_forms.admin.exporter import Exporter
|
|
from tablib import Dataset
|
|
from django.http import HttpResponse
|
|
from project.forms import NewsletterSubscriptionForm
|
|
|
|
|
|
class SearchView(AldrynSearchView):
|
|
template_name = 'project/search.html'
|
|
context_object_name = 'search_results'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(SearchView, self).get_context_data(**kwargs)
|
|
search_form = context['form']
|
|
context['search_form'] = search_form
|
|
del context['form']
|
|
return context
|
|
|
|
|
|
class NewsletterSubscriptionView(FormView):
|
|
template_name = 'project/newsletter/subscription.html'
|
|
form_class = NewsletterSubscriptionForm
|
|
success_url = reverse_lazy('newsletter_subscription_success')
|
|
|
|
|
|
class LoginRedirectView(RedirectView):
|
|
|
|
def get_redirect_url(self, *args, **kwargs):
|
|
fallback_url = '/'
|
|
try:
|
|
portal_page = Page.objects.public().get(reverse_id='portal')
|
|
portal_url = portal_page.get_public_url()
|
|
if portal_url:
|
|
return portal_url
|
|
else:
|
|
return fallback_url
|
|
except Page.DoesNotExist:
|
|
return fallback_url
|
|
|
|
|
|
class MediaRedirectView(RedirectView):
|
|
|
|
def get_redirect_url(self, *args, **kwargs):
|
|
return self.request.GET.get('url', None)
|
|
|
|
|
|
class CustomExporter(Exporter):
|
|
custom_fields = ['sent_at']
|
|
|
|
def get_dataset(self, fields):
|
|
headers = [field.rpartition('-')[0] for field in fields]
|
|
|
|
for custom_field in self.custom_fields:
|
|
headers.append(custom_field)
|
|
|
|
dataset = Dataset(headers=headers)
|
|
|
|
for submission in self.queryset.only('data').iterator():
|
|
row_data = []
|
|
form_fields = [field for field in submission.get_form_data()
|
|
if field.field_id in fields]
|
|
|
|
for header in fields:
|
|
for field in form_fields:
|
|
if field.field_id == header:
|
|
row_data.append(field.value)
|
|
break
|
|
else:
|
|
row_data.append('')
|
|
|
|
if row_data:
|
|
for custom_field in self.custom_fields:
|
|
row_data.append(getattr(submission, custom_field).strftime('%d.%m.%Y %H:%M:%S'))
|
|
dataset.append(row_data)
|
|
return dataset
|
|
|
|
|
|
class CustomFormExportWizardView(FormExportWizardView):
|
|
|
|
def done(self, form_list, **kwargs):
|
|
"""
|
|
this step only runs if all forms are valid.
|
|
"""
|
|
form_iter = iter(form_list)
|
|
step_1_form = next(form_iter)
|
|
step_2_form = next(form_iter)
|
|
|
|
fields = step_2_form.get_fields()
|
|
queryset = step_1_form.get_queryset()
|
|
|
|
dataset = CustomExporter(queryset=queryset).get_dataset(fields=fields)
|
|
|
|
filename = step_1_form.get_filename(extension=self.file_type)
|
|
|
|
content_type = self.get_content_type()
|
|
response = HttpResponse(dataset.xls, content_type=content_type)
|
|
response['Content-Disposition'] = 'attachment; filename=%s' % filename
|
|
return response
|