Merge branch 'img-playground' of ssh://epsilon.fnp/home/rczajka/workspace/redakcja...
[redakcja.git] / apps / catalogue / views.py
index 3c0e70f..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)
@@ -333,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:
@@ -443,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())