| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- from django.db.models.loading import get_model
- from django.template.defaultfilters import slugify
- from django.http import HttpResponseRedirect
- from django.core.exceptions import ValidationError
- from django.core.urlresolvers import reverse
- from django.views import generic
- from django.views.generic import ListView
- from django.contrib import messages
-
- from oscar.core.validators import URLDoesNotExistValidator
- from oscar.apps.dashboard.pages import forms
-
- FlatPage = get_model('flatpages', 'FlatPage')
- Site = get_model('sites', 'Site')
-
-
- class PageListView(ListView):
- """
- View for listing all existing flatpages.
- """
- template_name = 'dashboard/pages/index.html'
- current_view = 'dashboard:pages-index'
- model = FlatPage
- form_class = forms.PageSearchForm
- paginate_by = 25
- base_description = 'All pages'
- description = ''
-
- def get_queryset(self):
- """
- Get queryset of all flatpages to be displayed. If a
- search term is specified in the search form, it will be used
- to filter the queryset.
- """
- self.description = self.base_description
- queryset = self.model.objects.all().order_by('title')
-
- self.form = self.form_class(self.request.GET)
- if not self.form.is_valid():
- return queryset
-
- data = self.form.cleaned_data
-
- if data['title']:
- queryset = queryset.filter(title__icontains=data['title'])
- self.description += " with title containing '%s'" % data['title']
-
- return queryset
-
- def get_context_data(self, **kwargs):
- """
- Get context data with *form* and *queryset_description* data
- added to it.
- """
- context = super(PageListView, self).get_context_data(**kwargs)
- context['form'] = self.form
- context['queryset_description'] = self.description
- return context
-
-
- class PageCreateView(generic.CreateView):
- """
- View for creating a flatpage from dashboard.
- """
- template_name = 'dashboard/pages/update.html'
- model = FlatPage
- form_class = forms.PageUpdateForm
- context_object_name = 'page'
-
- def get_context_data(self, **kwargs):
- """
- Get context data with additional *title* object.
- """
- ctx = super(PageCreateView, self).get_context_data(**kwargs)
- ctx['title'] = 'Create New Page'
- return ctx
-
- def form_valid(self, form):
- """
- Store new flatpage from form data. Checks wether a site
- is specified for the flatpage or sets the current site by
- default. Additionally, if URL is left blank, a slugified
- version of the title will be used as URL after checking
- if it is valid.
- """
- # if no URL is specified, generate from title
- page = form.save(commit=False)
-
- if not page.url:
- page.url = '/%s/' % slugify(page.title)
-
- try:
- URLDoesNotExistValidator()(page.url)
-
- # use current site as default for new page
- page.save()
- page.sites.add(Site.objects.get_current())
-
- return HttpResponseRedirect(self.get_success_url(page))
-
- except ValidationError:
- pass
-
- ctx = self.get_context_data()
- ctx['form'] = form
- return self.render_to_response(ctx)
-
- def get_success_url(self, page):
- messages.success(self.request, "Created new page '%s'" % page.title)
- return reverse('dashboard:page-list')
-
-
- class PageUpdateView(generic.UpdateView):
- """
- View for updating flatpages from the dashboard.
- """
- template_name = 'dashboard/pages/update.html'
- model = FlatPage
- form_class = forms.PageUpdateForm
- context_object_name = 'page'
-
- def get_context_data(self, **kwargs):
- """
- Get context data with additional *title* and *page* objects attached.
- """
- ctx = super(PageUpdateView, self).get_context_data(**kwargs)
- ctx['title'] = 'Update Page'
- return ctx
-
- def form_valid(self, form):
- """
- Store updated flatpage from form data. Checks wether a site
- is specified for the flatpage or sets the current site by
- default.
- """
- page = form.save(commit=False)
-
- if not page.sites.count():
- page.sites.add(Site.objects.get_current())
- page.save()
- return HttpResponseRedirect(self.get_success_url())
-
- def get_success_url(self):
- """
- Get URL to redirect to when updating page was successful.
- """
- messages.success(self.request, "Updated page '%s'" % self.object.title)
- return reverse('dashboard:page-list')
-
-
- class PageDeleteView(generic.DeleteView):
- """
- View for deleting flatpages from the dashboard. It performs an
- 'are you sure?' check before actually deleting the page.
- """
- template_name = 'dashboard/pages/delete.html'
- model = FlatPage
-
- def get_success_url(self):
- """
- Get URL to redirect to when deleting page is succesful.
- """
- messages.success(self.request, "Deleted page '%s'" % self.object.title)
- return reverse('dashboard:page-list')
|