X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/249d530e9478f9187092efbcc9d8a5b51ad033bb..4d9632481149b2f7792505d521bdfdbae5245cc4:/apps/catalogue/views.py diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index 22aeffe8..76001f9e 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from collections import defaultdict from datetime import datetime, date, timedelta import logging @@ -15,11 +16,13 @@ from django.db.models import Count, Q from django.db import transaction from django import http from django.http import Http404, HttpResponse, HttpResponseForbidden +from django.http.response import HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.utils.encoding import iri_to_uri from django.utils.http import urlquote_plus from django.utils.translation import ugettext_lazy as _ from django.views.decorators.http import require_POST +from django_cas.decorators import user_passes_test from apiclient import NotAuthorizedError from catalogue import forms @@ -204,18 +207,27 @@ def upload(request): }) -@never_cache -def book_xml(request, slug): - book = get_object_or_404(Book, slug=slug) +def serve_xml(request, book, slug): if not book.accessible(request): return HttpResponseForbidden("Not authorized.") - xml = book.materialize() - + xml = book.materialize(publishable=True) response = http.HttpResponse(xml, content_type='application/xml') response['Content-Disposition'] = 'attachment; filename=%s.xml' % slug return response +@never_cache +def book_xml(request, slug): + book = get_object_or_404(Book, slug=slug) + return serve_xml(request, book, slug) + + +@never_cache +def book_xml_dc(request, slug): + book = get_object_or_404(Book, dc_slug=slug) + return serve_xml(request, book, slug) + + @never_cache def book_txt(request, slug): book = get_object_or_404(Book, slug=slug) @@ -322,9 +334,11 @@ def book(request, slug): return http.HttpResponseRedirect(book.get_absolute_url()) else: form = forms.BookForm(instance=book) + publish_options_form = forms.PublishOptionsForm() editable = True else: form = forms.ReadonlyBookForm(instance=book) + publish_options_form = forms.PublishOptionsForm() editable = False publish_error = book.publishable_error() @@ -335,6 +349,7 @@ def book(request, slug): "publishable": publishable, "publishable_error": publish_error, "form": form, + "publish_options_form": publish_options_form, "editable": editable, }) @@ -552,17 +567,24 @@ def book_append(request, slug): @require_POST @login_required def publish(request, slug): + form = forms.PublishOptionsForm(request.POST) + if form.is_valid(): + days = form.cleaned_data['days'] + beta = form.cleaned_data['beta'] + else: + days = 0 + beta = False book = get_object_or_404(Book, slug=slug) if not book.accessible(request): return HttpResponseForbidden("Not authorized.") try: protocol = 'https://' if request.is_secure() else 'http://' - book.publish(request.user, host=protocol + request.get_host()) + book.publish(request.user, host=protocol + request.get_host(), days=days, beta=beta) except NotAuthorizedError: - return http.HttpResponseRedirect(reverse('apiclient_oauth')) + return http.HttpResponseRedirect(reverse('apiclient_oauth' if not beta else 'apiclient_beta_oauth')) except BaseException, e: - return http.HttpResponse(e) + return http.HttpResponse(repr(e)) else: return http.HttpResponseRedirect(book.get_absolute_url()) @@ -587,8 +609,6 @@ def publish_image(request, slug): class GalleryView(UploadView): def get_object(self, request, slug): book = get_object_or_404(Book, slug=slug) - if not book.public and not request.user.has_perm('catalogue.change_book'): - return HttpResponseForbidden() if not book.gallery: raise Http404 return book @@ -635,3 +655,17 @@ def active_users_list(request): }) +@user_passes_test(lambda u: u.is_superuser) +def mark_final(request): + if request.method == 'POST': + form = forms.MarkFinalForm(data=request.POST) + if form.is_valid(): + form.save() + return HttpResponseRedirect(reverse('mark_final_completed')) + else: + form = forms.MarkFinalForm() + return render(request, 'catalogue/mark_final.html', {'form': form}) + + +def mark_final_completed(request): + return render(request, 'catalogue/mark_final_completed.html')