Better integration of wiki pages on clubs

This commit is contained in:
2017-10-01 20:52:29 +02:00
parent 2c1cf2d7af
commit baa7be69e4
13 changed files with 203 additions and 52 deletions

View File

@ -28,6 +28,7 @@ from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView, CreateView, DeleteView
from django.forms.models import modelform_factory
from django.http import Http404
from django.shortcuts import redirect
from core.models import Page, PageRev, LockError
from core.views.forms import MarkdownInput, PageForm, PagePropForm
@ -52,6 +53,12 @@ class PageView(CanViewMixin, DetailView):
model = Page
template_name = 'core/page_detail.jinja'
def dispatch(self, request, *args, **kwargs):
res = super(PageView, self).dispatch(request, *args, **kwargs)
if self.object and self.object.need_club_redirection:
return redirect('club:club_view', club_id=self.object.club.id)
return res
def get_object(self):
self.page = Page.get_page_by_full_name(self.kwargs['page_name'])
return self.page
@ -67,6 +74,12 @@ class PageHistView(CanViewMixin, DetailView):
model = Page
template_name = 'core/page_hist.jinja'
def dispatch(self, request, *args, **kwargs):
res = super(PageHistView, self).dispatch(request, *args, **kwargs)
if self.object.need_club_redirection:
return redirect('club:club_hist', club_id=self.object.club.id)
return res
def get_object(self):
self.page = Page.get_page_by_full_name(self.kwargs['page_name'])
return self.page
@ -76,6 +89,12 @@ class PageRevView(CanViewMixin, DetailView):
model = Page
template_name = 'core/page_detail.jinja'
def dispatch(self, request, *args, **kwargs):
res = super(PageRevView, self).dispatch(request, *args, **kwargs)
if self.object.need_club_redirection:
return redirect('club:club_view_rev', club_id=self.object.club.id, rev_id=kwargs['rev'])
return res
def get_object(self):
self.page = Page.get_page_by_full_name(self.kwargs['page_name'])
return self.page
@ -148,17 +167,20 @@ class PagePropView(CanEditPagePropMixin, UpdateView):
return self.page
class PageEditView(CanEditMixin, UpdateView):
class PageEditViewBase(CanEditMixin, UpdateView):
model = PageRev
form_class = modelform_factory(model=PageRev, fields=['title', 'content', ], widgets={'content': MarkdownInput})
template_name = 'core/pagerev_edit.jinja'
def get_object(self):
self.page = Page.get_page_by_full_name(self.kwargs['page_name'])
return self._get_revision()
def _get_revision(self):
if self.page is not None:
# First edit
if self.page.revisions.all() is None:
rev = PageRev(author=request.user)
rev = PageRev(author=self.request.user)
rev.save()
self.page.revisions.add(rev)
try:
@ -169,7 +191,7 @@ class PageEditView(CanEditMixin, UpdateView):
return None
def get_context_data(self, **kwargs):
context = super(PageEditView, self).get_context_data(**kwargs)
context = super(PageEditViewBase, self).get_context_data(**kwargs)
if self.page is not None:
context['page'] = self.page
else:
@ -185,7 +207,16 @@ class PageEditView(CanEditMixin, UpdateView):
new_rev.author = self.request.user
new_rev.page = self.page
form.instance = new_rev
return super(PageEditView, self).form_valid(form)
return super(PageEditViewBase, self).form_valid(form)
class PageEditView(PageEditViewBase):
def dispatch(self, request, *args, **kwargs):
res = super(PageEditView, self).dispatch(request, *args, **kwargs)
if self.object.page.need_club_redirection:
return redirect('club:club_edit_page', club_id=self.object.page.club.id)
return res
class PageDeleteView(CanEditPagePropMixin, DeleteView):