X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/11ffe0d7be49a89f0070444a711328f2bb56be82..d14923890dd5e49fa8fa489feaff1c35a25af974:/apps/wiki/views.py diff --git a/apps/wiki/views.py b/apps/wiki/views.py index 1bc40617..918eb91d 100644 --- a/apps/wiki/views.py +++ b/apps/wiki/views.py @@ -13,10 +13,12 @@ from wiki.helpers import (JSONResponse, JSONFormInvalid, JSONServerError, from django import http from wiki.models import getstorage, DocumentNotFound, normalize_name, split_name, join_name, Theme -from wiki.forms import DocumentTextSaveForm, DocumentTagForm, DocumentCreateForm, DocumentsUploadForm +from wiki.forms import DocumentTextSaveForm, DocumentTextRevertForm, DocumentTagForm, DocumentCreateForm, DocumentsUploadForm from datetime import datetime from django.utils.encoding import smart_unicode from django.utils.translation import ugettext_lazy as _ +from django.utils.decorators import decorator_from_middleware +from django.middleware.gzip import GZipMiddleware # @@ -82,6 +84,7 @@ def editor(request, name, template_name='wiki/document_details.html'): 'document_meta': document.meta, 'forms': { "text_save": DocumentTextSaveForm(prefix="textsave"), + "text_revert": DocumentTextRevertForm(prefix="textrevert"), "add_tag": DocumentTagForm(prefix="addtag"), }, 'REDMINE_URL': settings.REDMINE_URL, @@ -166,13 +169,18 @@ def upload(request): elif title in existing: error_list.append((filename, title, _('Title already used in repository.'))) else: - ok_list.append((filename, title)) + try: + zip.read(filename).decode('utf-8') # test read + ok_list.append((filename, title)) + except UnicodeDecodeError: + error_list.append((filename, title, _('File should be UTF-8 encoded.'))) titles[title] = filename + if not error_list: for filename, title in ok_list: storage.create_document( name=title, - text=zip.read(filename) + text=zip.read(filename).decode('utf-8') ) return direct_to_template(request, "wiki/document_upload.html", extra_context={ @@ -197,6 +205,7 @@ def upload(request): @never_cache @normalized_name +@decorator_from_middleware(GZipMiddleware) def text(request, name): storage = getstorage() @@ -252,18 +261,38 @@ def text(request, name): @require_POST def revert(request, name): storage = getstorage() - revision = request.POST['target_revision'] + form = DocumentTextRevertForm(request.POST, prefix="textrevert") + if form.is_valid(): + print 'valid' + revision = form.cleaned_data['revision'] + + comment = form.cleaned_data['comment'] + comment += "\n#revert to %s" % revision + + if request.user.is_authenticated(): + author_name = request.user + author_email = request.user.email + else: + author_name = form.cleaned_data['author_name'] + author_email = form.cleaned_data['author_email'] + author = "%s <%s>" % (author_name, author_email) + + before = storage.get(name).revision + logger.info("Reverting %s to %s", name, revision) + storage.revert(name, revision, comment=comment, author=author) + logger.info("Fetching %s", name) + document = storage.get(name) - try: - document = storage.revert(name, revision) return JSONResponse({ - 'text': document.plain_text if revision != document.revision else None, + 'text': document.plain_text if before != document.revision else None, 'meta': document.meta(), 'revision': document.revision, }) - except DocumentNotFound: - raise http.Http404 + else: + print 'invalid' + return JSONFormInvalid(form) + @never_cache def gallery(request, directory): @@ -313,6 +342,17 @@ def diff(request, name): docB.plain_text.splitlines(), context=3)) +@never_cache +@normalized_name +def revision(request, name): + storage = getstorage() + + try: + return http.HttpResponse(str(storage.doc_meta(name)['revision'])) + except DocumentNotFound: + raise http.Http404 + + @never_cache @normalized_name def history(request, name):