Merge branch 'img-playground' of ssh://epsilon.fnp/home/rczajka/workspace/redakcja...
[redakcja.git] / apps / catalogue / views.py
index 8723685..bc54c3e 100644 (file)
@@ -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())