Added views for locking and unlocking pages

This commit is contained in:
Karl Hobley 2014-08-27 16:55:23 +01:00
parent dbcff0aeb8
commit 3242b354a3
5 changed files with 85 additions and 1 deletions

View file

@ -0,0 +1,29 @@
{% load i18n wagtailadmin_tags %}
{% if not page_perms %}
{% page_permissions page as page_perms %}
{% endif %}
<div class="lock-indicator {% if page.locked %}locked{% else %}unlocked{% endif %}">
{% if page.locked %}
{% trans "Locked" %}
{% if page_perms.can_lock %}
<form action="{% url 'wagtailadmin_pages_unlock' page.id %}" method="POST">
{% csrf_token %}
<input type="hidden" name="next" value="{% url 'wagtailadmin_pages_edit' page.id %}">
<input type="submit" value="{% trans "Unlock" %}">
</form>
{% endif %}
{% else %}
{% trans "Unlocked" %}
{% if page_perms.can_lock %}
<form action="{% url 'wagtailadmin_pages_lock' page.id %}" method="POST">
{% csrf_token %}
<input type="hidden" name="next" value="{% url 'wagtailadmin_pages_edit' page.id %}">
<input type="submit" value="{% trans "Lock" %}">
</form>
{% endif %}
{% endif %}
</div>

View file

@ -23,6 +23,7 @@
{% endif %}
{% include "wagtailadmin/pages/_privacy_indicator.html" with page=page page_perms=page_perms only %}
{% include "wagtailadmin/pages/_lock_indicator.html" %}
</div>
</div>
</header>

View file

@ -73,6 +73,9 @@ urlpatterns += [
url(r'^pages/(\d+)/privacy/$', page_privacy.set_privacy, name='wagtailadmin_pages_set_privacy'),
url(r'^pages/(\d+)/lock/$', pages.lock, name='wagtailadmin_pages_lock'),
url(r'^pages/(\d+)/unlock/$', pages.unlock, name='wagtailadmin_pages_unlock'),
url(r'^choose-page/$', chooser.browse, name='wagtailadmin_choose_page'),
url(r'^choose-page/(\d+)/$', chooser.browse, name='wagtailadmin_choose_page_child'),
url(r'^choose-external-link/$', chooser.external_link, name='wagtailadmin_choose_page_external_link'),

View file

@ -9,7 +9,8 @@ from django.contrib.auth.decorators import permission_required
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.utils import timezone
from django.utils.translation import ugettext as _
from django.views.decorators.http import require_GET
from django.utils.http import is_safe_url
from django.views.decorators.http import require_GET, require_POST
from django.views.decorators.vary import vary_on_headers
from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList
@ -806,3 +807,49 @@ def preview_for_moderation(request, revision_id):
# pass in the real user request rather than page.dummy_request(), so that request.user
# and request.revision_id will be picked up by the wagtail user bar
return page.serve_preview(request, page.default_preview_mode)
@permission_required('wagtailadmin.access_admin')
@require_POST
def lock(request, page_id):
# Get the page
page = Page.objects.get(id=page_id)
# Check permissions
if not page.permissions_for_user(request.user).can_lock():
raise PermissionDenied
# Lock the page
if not page.locked:
page.locked = True
page.save()
# Redirect
redirect_to = request.POST.get('next', None)
if redirect_to and is_safe_url(url=redirect_to, host=request.get_host()):
return redirect(redirect_to)
else:
return redirect('wagtail_explore', args=(page.get_parent().id, ))
@permission_required('wagtailadmin.access_admin')
@require_POST
def unlock(request, page_id):
# Get the page
page = Page.objects.get(id=page_id)
# Check permissions
if not page.permissions_for_user(request.user).can_lock():
raise PermissionDenied
# Unlock the page
if page.locked:
page.locked = False
page.save()
# Redirect
redirect_to = request.POST.get('next', None)
if redirect_to and is_safe_url(url=redirect_to, host=request.get_host()):
return redirect(redirect_to)
else:
return redirect('wagtail_explore', args=(page.get_parent().id, ))

View file

@ -883,6 +883,7 @@ class PageRevision(models.Model):
obj.live = self.page.live
obj.has_unpublished_changes = self.page.has_unpublished_changes
obj.owner = self.page.owner
obj.locked = self.page.locked
return obj
@ -1078,6 +1079,9 @@ class PagePermissionTester(object):
def can_set_view_restrictions(self):
return self.can_publish()
def can_lock(self):
return self.user.is_superuser
def can_publish_subpage(self):
"""
Niggly special case for creating and publishing a page in one go.