X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/e01dee1eda68946acf73e43f2c54b3c730514a21..1be132dc9f105e745e979ec6eaeb8d7bc86089f1:/apps/catalogue/views.py diff --git a/apps/catalogue/views.py b/apps/catalogue/views.py index 87236855..bc54c3ea 100644 --- a/apps/catalogue/views.py +++ b/apps/catalogue/views.py @@ -23,7 +23,8 @@ from apiclient import NotAuthorizedError from catalogue import forms from catalogue import helpers from catalogue.helpers import active_tab -from catalogue.models import Book, Chunk, BookPublishRecord, ChunkPublishRecord +from catalogue.models import (Book, Chunk, Image, BookPublishRecord, + ChunkPublishRecord, ImagePublishRecord) from catalogue.tasks import publishable_error # @@ -40,6 +41,12 @@ def document_list(request): return render(request, 'catalogue/document_list.html') +@active_tab('images') +@never_cache +def image_list(request, user=None): + return render(request, 'catalogue/image_list.html') + + @never_cache def user(request, username): user = get_object_or_404(User, username=username) @@ -257,7 +264,7 @@ def book_pdf(request, slug): try: pdf_file = NamedTemporaryFile(delete=False) - pdf.transform(RedakcjaDocProvider(), + pdf.transform(RedakcjaDocProvider(publishable=True), file_path=xml_file.name, output_file=pdf_file, ) @@ -283,7 +290,8 @@ def book_epub(request, slug): xml_file.flush() epub_file = StringIO() - epub.transform(RedakcjaDocProvider(), file_path=xml_file.name, + epub.transform(RedakcjaDocProvider(publishable=True), + file_path=xml_file.name, output_file=epub_file) response = HttpResponse(mimetype='application/epub+zip') response['Content-Disposition'] = 'attachment; filename=%s' % book.slug + '.epub' @@ -332,6 +340,36 @@ def book(request, slug): }) +def image(request, slug): + image = get_object_or_404(Image, slug=slug) + if not image.accessible(request): + return HttpResponseForbidden("Not authorized.") + + if request.user.has_perm('catalogue.change_image'): + if request.method == "POST": + form = forms.ImageForm(request.POST, instance=image) + if form.is_valid(): + form.save() + return http.HttpResponseRedirect(image.get_absolute_url()) + else: + form = forms.ImageForm(instance=image) + editable = True + else: + form = forms.ReadonlyImageForm(instance=image) + editable = False + + publish_error = publishable_error(image) + publishable = publish_error is None + + return direct_to_template(request, "catalogue/image_detail.html", extra_context={ + "object": image, + "publishable": publishable, + "publishable_error": publish_error, + "form": form, + "editable": editable, + }) + + @permission_required('catalogue.add_chunk') def chunk_add(request, slug, chunk): try: @@ -442,3 +480,20 @@ def publish(request, slug): return http.HttpResponse(e) else: return http.HttpResponseRedirect(book.get_absolute_url()) + + +@require_POST +@login_required +def publish_image(request, slug): + image = get_object_or_404(Image, slug=slug) + if not image.accessible(request): + return HttpResponseForbidden("Not authorized.") + + try: + image.publish(request.user) + except NotAuthorizedError: + return http.HttpResponseRedirect(reverse('apiclient_oauth')) + except BaseException, e: + return http.HttpResponse(e) + else: + return http.HttpResponseRedirect(image.get_absolute_url())