X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/6da718d80af13cf081d63b39f4240df1f1e53424..36139e06f33f12a03c270d8e091fe0e8fc6f8077:/apps/wiki/views.py diff --git a/apps/wiki/views.py b/apps/wiki/views.py index 319cdbad..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, @@ -202,6 +205,7 @@ def upload(request): @never_cache @normalized_name +@decorator_from_middleware(GZipMiddleware) def text(request, name): storage = getstorage() @@ -257,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): @@ -318,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):