Commit 30c45e25 by yed_

_change revision_ as a class-based view

parent 10a44575
......@@ -28,7 +28,7 @@ class WikiURLPatterns(object):
article_settings_view_class = article.Settings
article_source_view_class = article.Source
article_plugin_view_class = article.Plugin
revision_change_view = 'wiki.views.article.change_revision'
revision_change_view = article.ChangeRevisionView
revision_merge_view = 'wiki.views.article.merge'
search_view_class = settings.SEARCH_VIEW
......@@ -71,7 +71,7 @@ class WikiURLPatterns(object):
def get_revision_urls(self):
urlpatterns = patterns('',
# This one doesn't work because it don't know where to redirect after...
url('^_revision/change/(?P<article_id>\d+)/(?P<revision_id>\d+)/$', self.revision_change_view, name='change_revision'),
url('^_revision/change/(?P<article_id>\d+)/(?P<revision_id>\d+)/$', self.revision_change_view.as_view(), name='change_revision'),
url('^_revision/preview/(?P<article_id>\d+)/$', self.article_preview_view_class.as_view(), name='preview_revision'),
url('^_revision/merge/(?P<article_id>\d+)/(?P<revision_id>\d+)/preview/$', self.revision_merge_view, name='merge_revision_preview', kwargs={'preview': True}),
)
......@@ -88,7 +88,7 @@ class WikiURLPatterns(object):
url('^(?P<article_id>\d+)/history/$', self.article_history_view_class.as_view(), name='history'),
url('^(?P<article_id>\d+)/settings/$', self.article_settings_view_class.as_view(), name='settings'),
url('^(?P<article_id>\d+)/source/$', self.article_source_view_class.as_view(), name='source'),
url('^(?P<article_id>\d+)/revision/change/(?P<revision_id>\d+)/$', self.revision_change_view, name='change_revision'),
url('^(?P<article_id>\d+)/revision/change/(?P<revision_id>\d+)/$', self.revision_change_view.as_view(), name='change_revision'),
url('^(?P<article_id>\d+)/revision/merge/(?P<revision_id>\d+)/$', self.revision_merge_view, name='merge_revision'),
url('^(?P<article_id>\d+)/plugin/(?P<slug>\w+)/$', self.article_plugin_view_class.as_view(), name='plugin'),
)
......@@ -106,7 +106,7 @@ class WikiURLPatterns(object):
url('^(?P<path>.+/|)_dir/$', self.article_dir_view_class.as_view(), name='dir'),
url('^(?P<path>.+/|)_settings/$', self.article_settings_view_class.as_view(), name='settings'),
url('^(?P<path>.+/|)_source/$', self.article_source_view_class.as_view(), name='source'),
url('^(?P<path>.+/|)_revision/change/(?P<revision_id>\d+)/$', self.revision_change_view, name='change_revision'),
url('^(?P<path>.+/|)_revision/change/(?P<revision_id>\d+)/$', self.revision_change_view.as_view(), name='change_revision'),
url('^(?P<path>.+/|)_revision/merge/(?P<revision_id>\d+)/$', self.revision_merge_view, name='merge_revision'),
url('^(?P<path>.+/|)_plugin/(?P<slug>\w+)/$', self.article_plugin_view_class.as_view(), name='plugin'),
# This should always go last!
......
......@@ -8,7 +8,7 @@ from django.shortcuts import render_to_response, redirect, get_object_or_404
from django.template.context import RequestContext
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext as _
from django.views.generic.base import TemplateView, View
from django.views.generic.base import TemplateView, View, RedirectView
from django.views.generic.edit import FormView
from django.views.generic.list import ListView
......@@ -576,18 +576,30 @@ class Settings(ArticleMixin, TemplateView):
return super(Settings, self).get_context_data(**kwargs)
# TODO: Throw in a class-based view
@get_article(can_write=True, not_locked=True)
def change_revision(request, article, revision_id=None, urlpath=None):
revision = get_object_or_404(models.ArticleRevision, article=article, id=revision_id)
article.current_revision = revision
article.save()
messages.success(request, _(u"The article %(title)s is now set to display revision #%(revision_number)d") % {'title':revision.title, 'revision_number': revision.revision_number,})
if urlpath:
return redirect("wiki:history", path=urlpath.path)
else:
return redirect('wiki:history', article_id=article.id)
class ChangeRevisionView(RedirectView):
@method_decorator(get_article(can_write=True, not_locked=True))
def dispatch(self, request, article, *args, **kwargs):
self.article = article
self.urlpath = kwargs.pop('kwargs', False)
self.change_revision()
return super(ChangeRevisionView, self).dispatch(request, *args, **kwargs)
def get_redirect_url(self, **kwargs):
if self.urlpath:
return reverse("wiki:history", kwargs={'path':self.urlpath.path})
else:
return reverse('wiki:history', kwargs={'article_id':self.article.id})
def change_revision(self):
revision = get_object_or_404(models.ArticleRevision, article=self.article, id=self.kwargs['revision_id'])
self.article.current_revision = revision
self.article.save()
messages.success(self.request, _(u"The article %(title)s is now set to display revision #%(revision_number)d") % {
'title': revision.title,
'revision_number': revision.revision_number,
})
class Preview(ArticleMixin, TemplateView):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment