Sith/core/views/page.py

127 lines
4.3 KiB
Python
Raw Normal View History

2015-11-24 15:09:46 +00:00
# This file contains all the views that concern the page model
from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView
from django.contrib.auth.decorators import login_required, permission_required
from django.utils.decorators import method_decorator
2015-11-24 15:09:46 +00:00
from core.models import Page, PageRev
from core.views.forms import PagePropForm
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin
2015-11-24 15:09:46 +00:00
class PageListView(ListView):
model = Page
2015-11-24 15:09:46 +00:00
def get_context_data(self, **kwargs):
context = super(PageListView, self).get_context_data(**kwargs)
return context
class PageView(CanViewMixin, DetailView):
model = Page
def get_object(self):
self.page = Page.get_page_by_full_name(self.kwargs['page_name'])
return self.page
def get_context_data(self, **kwargs):
context = super(PageView, self).get_context_data(**kwargs)
if "page" not in context.keys():
context['new_page'] = self.kwargs['page_name']
return context
class PageHistView(CanViewMixin, DetailView):
model = Page
template_name_suffix = '_hist'
def get_object(self):
self.page = Page.get_page_by_full_name(self.kwargs['page_name'])
return self.page
class PageRevView(CanViewMixin, DetailView):
model = Page
template_name = 'core/page_detail.html'
def get_object(self):
self.page = Page.get_page_by_full_name(self.kwargs['page_name'])
return self.page
def get_context_data(self, **kwargs):
context = super(PageRevView, self).get_context_data(**kwargs)
if self.page is not None:
context['page'] = self.page
try:
rev = self.page.revisions.get(id=self.kwargs['rev'])
context['rev'] = rev
except:
# By passing, the template will just display the normal page without taking revision into account
pass
2015-11-24 15:09:46 +00:00
else:
context['new_page'] = self.kwargs['page_name']
return context
class PagePropView(CanEditPropMixin, UpdateView):
model = Page
form_class = PagePropForm
template_name_suffix = '_prop'
2015-11-24 15:09:46 +00:00
def get_object(self):
page_name = self.kwargs['page_name']
p = Page.get_page_by_full_name(page_name)
2015-11-26 10:27:52 +00:00
# Create the page if it does not exists
if p == None:
parent_name = '/'.join(page_name.split('/')[:-1])
name = page_name.split('/')[-1]
if parent_name == "":
p = Page(name=name)
else:
parent = Page.get_page_by_full_name(parent_name)
p = Page(name=name, parent=parent)
self.page = p
return self.page
def get_context_data(self, **kwargs):
context = super(PagePropView, self).get_context_data(**kwargs)
if "page" not in context.keys():
context['new_page'] = self.kwargs['page_name']
return context
class PageEditView(CanEditMixin, UpdateView):
model = PageRev
fields = ['title', 'content',]
template_name_suffix = '_edit'
def get_object(self):
self.page = Page.get_page_by_full_name(self.kwargs['page_name'])
if self.page is not None:
# First edit
if self.page.revisions.all() is None:
rev = PageRev(author=request.user)
rev.save()
self.page.revisions.add(rev)
return self.page.revisions.all().last()
return None
def get_context_data(self, **kwargs):
context = super(PageEditView, self).get_context_data(**kwargs)
if self.page is not None:
context['page'] = self.page
2015-11-24 15:09:46 +00:00
else:
context['new_page'] = self.kwargs['page_name']
return context
def form_valid(self, form):
form.instance.author = self.request.user
form.instance.page = self.page
rev = form.instance
new_rev = PageRev(title=rev.title,
content=rev.content,
)
new_rev.author = self.request.user
new_rev.page = self.page
print(form.instance)
new_rev.save()
form.instance = new_rev
print(form.instance)
return super(PageEditView, self).form_valid(form)