From ca44cf07b266a228d832005df93289b94009d957 Mon Sep 17 00:00:00 2001 From: Bridger Maxwell Date: Fri, 27 Jan 2012 17:24:07 -0500 Subject: [PATCH] Added 'view revision' on wiki history --- simplewiki/urls.py | 1 + simplewiki/views.py | 46 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/simplewiki/urls.py b/simplewiki/urls.py index 05a631f0be..0a95fc305a 100644 --- a/simplewiki/urls.py +++ b/simplewiki/urls.py @@ -3,6 +3,7 @@ from django.conf.urls.defaults import * urlpatterns = patterns('', url(r'^$', 'simplewiki.views.root_redirect', name='wiki_root'), url(r'^view(/[a-zA-Z\d/_-]*)/?$', 'simplewiki.views.view', name='wiki_view'), + url(r'^view_revision/([0-9]*)(/[a-zA-Z\d/_-]*)/?$', 'simplewiki.views.view_revision', name='wiki_view_revision'), url(r'^edit(/[a-zA-Z\d/_-]*)/?$', 'simplewiki.views.edit', name='wiki_edit'), url(r'^create(/[a-zA-Z\d/_-]*)/?$', 'simplewiki.views.create', name='wiki_create'), url(r'^history(/[a-zA-Z\d/_-]*)/([0-9]*)/?$', 'simplewiki.views.history', name='wiki_history'), diff --git a/simplewiki/views.py b/simplewiki/views.py index a49d135aee..ea7e04e419 100644 --- a/simplewiki/views.py +++ b/simplewiki/views.py @@ -36,12 +36,44 @@ def view(request, wiki_url): if perm_err: return perm_err d = {'wiki_article': article, + 'wiki_article_revision':article.current_revision, 'wiki_write': article.can_write_l(request.user), 'wiki_attachments_write': article.can_attach(request.user), 'wiki_current_revision_deleted' : not (article.current_revision.deleted == 0), } d.update(csrf(request)) return render_to_response('simplewiki_view.html', d) + +def view_revision(request, revision_number, wiki_url, revision=None): + if not request.user.is_authenticated(): + return redirect('/') + + (article, path, err) = fetch_from_url(request, wiki_url) + if err: + return err + + try: + revision = Revision.objects.get(counter=int(revision_number), article=article) + except: + d = {'wiki_article': article, + 'wiki_err_norevision': revision_number,} + d.update(csrf(request)) + return render_to_response('simplewiki_error.html', d) + + + perm_err = check_permissions(request, article, check_read=True, check_deleted=True, revision=revision) + if perm_err: + return perm_err + + d = {'wiki_article': article, + 'wiki_article_revision':revision, + 'wiki_write': article.can_write_l(request.user), + 'wiki_attachments_write': article.can_attach(request.user), + 'wiki_current_revision_deleted' : not (revision.deleted == 0), + } + d.update(csrf(request)) + return render_to_response('simplewiki_view.html', d) + def root_redirect(request): if not request.user.is_authenticated(): @@ -206,12 +238,18 @@ def history(request, wiki_url, page=1): perm_err = check_permissions(request, article, check_write=True, check_locked=True) if perm_err: return perm_err + + redirectURL = reverse('wiki_view', args=(article.get_url(),)) try: r = int(request.POST['revision']) revision = Revision.objects.get(id=r) if request.POST.__contains__('change'): article.current_revision = revision article.save() + elif request.POST.__contains__('view'): + redirectURL = reverse('wiki_view_revision', args=(revision.counter, article.get_url(),)) + + #The rese of these are admin functions elif request.POST.__contains__('delete') and request.user.is_superuser: if (revision.deleted == 0): revision.adminSetDeleted(2) @@ -228,7 +266,7 @@ def history(request, wiki_url, page=1): except: pass finally: - return HttpResponseRedirect(reverse('wiki_view', args=(article.get_url(),))) + return HttpResponseRedirect(redirectURL) # # # @@ -433,14 +471,16 @@ def fetch_from_url(request, url): return (article, path, err) -def check_permissions(request, article, check_read=False, check_write=False, check_locked=False, check_deleted=False): +def check_permissions(request, article, check_read=False, check_write=False, check_locked=False, check_deleted=False, revision = None): read_err = check_read and not article.can_read(request.user) write_err = check_write and not article.can_write(request.user) locked_err = check_locked and article.locked - deleted_err = check_deleted and not (article.current_revision.deleted == 0) + if revision == None: + revision = article.current_revision + deleted_err = check_deleted and not (revision.deleted == 0) if (request.user.is_superuser): deleted_err = False locked_err = False