Prevent a race condition between "Replacing text" label and the save dialog, probably...
[redakcja.git] / apps / wiki / views.py
index d99bca6..f959426 100644 (file)
@@ -1,6 +1,7 @@
 from datetime import datetime
 import os
 import logging
 from datetime import datetime
 import os
 import logging
+import urllib
 
 from django.conf import settings
 from django.core.urlresolvers import reverse
 
 from django.conf import settings
 from django.core.urlresolvers import reverse
@@ -9,10 +10,10 @@ from django.http import Http404, HttpResponseForbidden
 from django.middleware.gzip import GZipMiddleware
 from django.utils.decorators import decorator_from_middleware
 from django.utils.encoding import smart_unicode
 from django.middleware.gzip import GZipMiddleware
 from django.utils.decorators import decorator_from_middleware
 from django.utils.encoding import smart_unicode
+from django.utils.formats import localize
 from django.utils.translation import ugettext as _
 from django.views.decorators.http import require_POST, require_GET
 from django.utils.translation import ugettext as _
 from django.views.decorators.http import require_POST, require_GET
-from django.views.generic.simple import direct_to_template
-from django.shortcuts import get_object_or_404
+from django.shortcuts import get_object_or_404, render
 
 from catalogue.models import Book, Chunk
 import nice_diff
 
 from catalogue.models import Book, Chunk
 import nice_diff
@@ -61,13 +62,14 @@ def editor(request, slug, chunk=None, template_name='wiki/document_details.html'
         del last_books[oldest_key]
     request.session['wiki_last_books'] = last_books
 
         del last_books[oldest_key]
     request.session['wiki_last_books'] = last_books
 
-    return direct_to_template(request, template_name, extra_context={
+    return render(request, template_name, {
         'chunk': chunk,
         'forms': {
             "text_save": forms.DocumentTextSaveForm(user=request.user, prefix="textsave"),
             "text_revert": forms.DocumentTextRevertForm(prefix="textrevert"),
             "pubmark": forms.DocumentPubmarkForm(prefix="pubmark"),
         },
         'chunk': chunk,
         'forms': {
             "text_save": forms.DocumentTextSaveForm(user=request.user, prefix="textsave"),
             "text_revert": forms.DocumentTextRevertForm(prefix="textrevert"),
             "pubmark": forms.DocumentPubmarkForm(prefix="pubmark"),
         },
+        'can_pubmark': request.user.has_perm('catalogue.can_pubmark'),
         'REDMINE_URL': settings.REDMINE_URL,
     })
 
         'REDMINE_URL': settings.REDMINE_URL,
     })
 
@@ -94,7 +96,7 @@ def editor_readonly(request, slug, chunk=None, template_name='wiki/document_deta
         del last_books[oldest_key]
     request.session['wiki_last_books'] = last_books
 
         del last_books[oldest_key]
     request.session['wiki_last_books'] = last_books
 
-    return direct_to_template(request, template_name, extra_context={
+    return render(request, template_name, {
         'chunk': chunk,
         'revision': revision,
         'readonly': True,
         'chunk': chunk,
         'revision': revision,
         'readonly': True,
@@ -124,6 +126,8 @@ def text(request, chunk_id):
                 parent = None
             stage = form.cleaned_data['stage_completed']
             tags = [stage] if stage else []
                 parent = None
             stage = form.cleaned_data['stage_completed']
             tags = [stage] if stage else []
+            publishable = (form.cleaned_data['publishable'] and
+                    request.user.has_perm('catalogue.can_pubmark'))
             doc.commit(author=author,
                        text=text,
                        parent=parent,
             doc.commit(author=author,
                        text=text,
                        parent=parent,
@@ -131,6 +135,7 @@ def text(request, chunk_id):
                        tags=tags,
                        author_name=form.cleaned_data['author_name'],
                        author_email=form.cleaned_data['author_email'],
                        tags=tags,
                        author_name=form.cleaned_data['author_name'],
                        author_email=form.cleaned_data['author_email'],
+                       publishable=publishable,
                        )
             revision = doc.revision()
             return JSONResponse({
                        )
             revision = doc.revision()
             return JSONResponse({
@@ -197,16 +202,16 @@ def gallery(request, directory):
     try:
         base_url = ''.join((
                         smart_unicode(settings.MEDIA_URL),
     try:
         base_url = ''.join((
                         smart_unicode(settings.MEDIA_URL),
-                        smart_unicode(settings.FILEBROWSER_DIRECTORY),
+                        smart_unicode(settings.IMAGE_DIR),
                         smart_unicode(directory)))
 
         base_dir = os.path.join(
                     smart_unicode(settings.MEDIA_ROOT),
                         smart_unicode(directory)))
 
         base_dir = os.path.join(
                     smart_unicode(settings.MEDIA_ROOT),
-                    smart_unicode(settings.FILEBROWSER_DIRECTORY),
+                    smart_unicode(settings.IMAGE_DIR),
                     smart_unicode(directory))
 
         def map_to_url(filename):
                     smart_unicode(directory))
 
         def map_to_url(filename):
-            return "%s/%s" % (base_url, smart_unicode(filename))
+            return urllib.quote("%s/%s" % (base_url, smart_unicode(filename)))
 
         def is_image(filename):
             return os.path.splitext(f)[1].lower() in (u'.jpg', u'.jpeg', u'.png')
 
         def is_image(filename):
             return os.path.splitext(f)[1].lower() in (u'.jpg', u'.jpeg', u'.png')
@@ -270,9 +275,12 @@ def history(request, chunk_id):
                 "version": change.revision,
                 "description": change.description,
                 "author": change.author_str(),
                 "version": change.revision,
                 "description": change.description,
                 "author": change.author_str(),
-                "date": change.created_at,
+                "date": localize(change.created_at),
                 "publishable": _("Publishable") + "\n" if change.publishable else "",
                 "tag": ',\n'.join(unicode(tag) for tag in change.tags.all()),
                 "publishable": _("Publishable") + "\n" if change.publishable else "",
                 "tag": ',\n'.join(unicode(tag) for tag in change.tags.all()),
+                "published": _("Published") + ": " + \
+                    localize(change.publish_log.order_by('-book_record__timestamp')[0].book_record.timestamp) \
+                    if change.publish_log.exists() else "",
             })
     return JSONResponse(changes)
 
             })
     return JSONResponse(changes)