From 81ab6b19d23f742e842b702f2af674bf4e007e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 4 Jul 2017 23:42:14 +0200 Subject: [PATCH] proposed change sets can be activated, too --- src/c3nav/editor/models/changeset.py | 7 ++++++- src/c3nav/editor/templates/editor/changeset.html | 4 ++-- src/c3nav/editor/views/changes.py | 13 ++++++------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/c3nav/editor/models/changeset.py b/src/c3nav/editor/models/changeset.py index fb2372f9..3ce5746e 100644 --- a/src/c3nav/editor/models/changeset.py +++ b/src/c3nav/editor/models/changeset.py @@ -8,6 +8,7 @@ from django.db import models, transaction from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ungettext_lazy +from rest_framework.exceptions import PermissionDenied from c3nav.editor.models.changedobject import ChangedObject from c3nav.editor.utils import is_created_pk @@ -244,6 +245,10 @@ class ChangeSet(models.Model): def proposed(self): return self.state not in ('unproposed', 'rejected') + @property + def closed(self): + return self.state in ('finallyrejected', 'applied') + def is_author(self, request): return (self.author == request.user or (self.author is None and not request.user.is_authenticated and request.session.get('changeset', None) == self.pk)) @@ -257,7 +262,7 @@ class ChangeSet(models.Model): if self.pk is not None: changeset = ChangeSet.objects.select_for_update().get(pk=self.pk) if request is not None and not changeset.can_edit(request): - raise PermissionError + raise PermissionDenied self._object_changed = False yield changeset diff --git a/src/c3nav/editor/templates/editor/changeset.html b/src/c3nav/editor/templates/editor/changeset.html index ad20a6bf..688e833a 100644 --- a/src/c3nav/editor/templates/editor/changeset.html +++ b/src/c3nav/editor/templates/editor/changeset.html @@ -82,7 +82,7 @@ {% endfor %} {% buttons %} - {% if editing %} + {% if active %} {% if can_delete %} {% endif %} @@ -97,7 +97,7 @@ {% endif %} - {% elif can_edit %} + {% elif not changeset.closed %} {% endif %} {% endbuttons %} diff --git a/src/c3nav/editor/views/changes.py b/src/c3nav/editor/views/changes.py index 848f6f8b..7e874278 100644 --- a/src/c3nav/editor/views/changes.py +++ b/src/c3nav/editor/views/changes.py @@ -19,9 +19,9 @@ from c3nav.mapdata.models.locations import LocationRedirect, LocationSlug @sidebar_view def changeset_detail(request, pk): changeset = request.changeset - editing = True + active = True if str(pk) != str(request.changeset.pk): - editing = False + active = False changeset = get_object_or_404(ChangeSet.qs_for_request(request), pk=pk) if not changeset.can_see(request): @@ -29,7 +29,6 @@ def changeset_detail(request, pk): can_edit = changeset.can_edit(request) can_delete = changeset.can_delete(request) - editing = editing and can_edit if request.method == 'POST': restore = request.POST.get('restore') @@ -51,8 +50,8 @@ def changeset_detail(request, pk): return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk})) elif request.POST.get('activate') == '1': - with changeset.lock_to_edit(request) as changeset: - if changeset.can_edit(request): + with changeset.lock_to_edit() as changeset: + if not changeset.closed: changeset.activate(request) messages.success(request, _('You activated this change set.')) else: @@ -136,7 +135,7 @@ def changeset_detail(request, pk): obj_still_exists = pk not in changeset.deleted_existing.get(obj.__class__, ()) edit_url = None - if obj_still_exists and editing and not isinstance(obj, LocationRedirect): + if obj_still_exists and active and can_edit and not isinstance(obj, LocationRedirect): reverse_kwargs = {'pk': obj.pk} if hasattr(obj, 'level_id'): reverse_kwargs['level'] = obj.level_id @@ -264,7 +263,7 @@ def changeset_detail(request, pk): 'can_edit': can_edit, 'can_delete': can_delete, 'can_unpropose': changeset.can_unpropose(request), - 'editing': editing, + 'active': active, 'changed_objects': changed_objects_data, }