kb: add history system (#7915)

This commit is contained in:
Frédéric Péters 2015-07-23 12:30:07 +02:00
parent 7b33698eea
commit 363db32c5a
5 changed files with 40 additions and 1 deletions

View File

@ -19,8 +19,10 @@ from django.db import models
from django.utils.translation import ugettext_lazy as _
from ckeditor.fields import RichTextField
import reversion
@reversion.register
class Page(models.Model):
title = models.CharField(_('Title'), max_length=200)
slug = models.SlugField(_('Slug'))

View File

@ -4,6 +4,7 @@
{% block appbar %}
<h2>{% trans 'Knowledge Base' %} - {{ object.title }}</h2>
<a rel="popup" href="{% url 'kb-page-delete' slug=object.slug %}">{% trans 'Delete' %}</a>
<a href="{% url 'kb-page-history' slug=object.slug %}">{% trans 'History' %}</a>
<a href="{% url 'kb-page-edit' slug=object.slug %}">{% trans 'Edit' %}</a>
{% endblock %}

View File

@ -18,7 +18,7 @@ import json
from django import template
from django.core.urlresolvers import reverse_lazy
from django.http import HttpResponse
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import (DetailView, CreateView, UpdateView,
@ -27,6 +27,8 @@ from django.views.generic import (DetailView, CreateView, UpdateView,
from haystack.forms import SearchForm
from haystack.generic_views import SearchView
from haystack.query import SearchQuerySet
from reversion.models import Version
from reversion.revisions import default_revision_manager
from .models import Page
@ -81,6 +83,36 @@ class PageSearchView(SearchView):
page_search = PageSearchView.as_view()
class PageHistoryView(DetailView):
model = Page
template_name = 'kb/page_history.html'
def get_context_data(self, **kwargs):
context = super(PageHistoryView, self).get_context_data(**kwargs)
context['versions_list'] = default_revision_manager.get_for_object(self.get_object())
return context
page_history = PageHistoryView.as_view()
class PageVersionView(DetailView):
model = Page
template_name = 'kb/page_version.html'
def get_context_data(self, **kwargs):
context = super(PageVersionView, self).get_context_data(**kwargs)
context['object'] = Version.objects.get(id=self.kwargs.get('version')).object_version.object
self.kwargs.get('version')
return context
def post(self, request, *args, **kwargs):
version = Version.objects.get(id=self.kwargs.get('version'))
version.revision.revert()
return HttpResponseRedirect(self.get_object().get_absolute_url())
page_version = PageVersionView.as_view()
class KbZone(TemplateView):
template_name = 'kb/zone.html'

View File

@ -41,6 +41,7 @@ INSTALLED_APPS = (
'django_select2',
'ckeditor',
'haystack',
'reversion',
'welco.sources.mail',
'welco.qualif',
'welco.kb',
@ -56,6 +57,7 @@ MIDDLEWARE_CLASSES = (
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'reversion.middleware.RevisionMiddleware',
)
ROOT_URLCONF = 'welco.urls'

View File

@ -34,6 +34,8 @@ urlpatterns = patterns('',
url(r'^ajax/kb/(?P<slug>[\w-]+)/$', 'welco.kb.views.page_detail_fragment', name='kb-page-fragment'),
url(r'^kb/(?P<slug>[\w-]+)/edit$', 'welco.kb.views.page_edit', name='kb-page-edit'),
url(r'^kb/(?P<slug>[\w-]+)/delete$', 'welco.kb.views.page_delete', name='kb-page-delete'),
url(r'^kb/(?P<slug>[\w-]+)/history$', 'welco.kb.views.page_history', name='kb-page-history'),
url(r'^kb/(?P<slug>[\w-]+)/version/(?P<version>\w+)/$', 'welco.kb.views.page_version', name='kb-page-version'),
url(r'^ajax/contacts$', 'welco.contacts.views.zone', name='contacts-zone'),
url(r'^contacts/search/json/$', 'welco.contacts.views.search_json', name='contacts-search-json'),