From ccd2cf1b99ee5244be31f2f235d84547c73f5572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Tue, 4 Jul 2017 22:44:21 +0200 Subject: [PATCH] activating change sets --- ...013_remove_changesetupdate_session_user.py | 19 ++++++++++++ src/c3nav/editor/models/changeset.py | 13 ++++++-- src/c3nav/editor/models/changesetupdate.py | 1 - .../editor/templates/editor/changeset.html | 30 +++++++++++-------- src/c3nav/editor/views/changes.py | 17 +++++++++-- 5 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 src/c3nav/editor/migrations/0013_remove_changesetupdate_session_user.py diff --git a/src/c3nav/editor/migrations/0013_remove_changesetupdate_session_user.py b/src/c3nav/editor/migrations/0013_remove_changesetupdate_session_user.py new file mode 100644 index 00000000..9fea1f5a --- /dev/null +++ b/src/c3nav/editor/migrations/0013_remove_changesetupdate_session_user.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-07-04 20:40 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('editor', '0012_remove_changeset_session_id'), + ] + + operations = [ + migrations.RemoveField( + model_name='changesetupdate', + name='session_user', + ), + ] diff --git a/src/c3nav/editor/models/changeset.py b/src/c3nav/editor/models/changeset.py index 982ee1d9..fb2372f9 100644 --- a/src/c3nav/editor/models/changeset.py +++ b/src/c3nav/editor/models/changeset.py @@ -244,8 +244,12 @@ class ChangeSet(models.Model): def proposed(self): return self.state not in ('unproposed', 'rejected') + 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)) + def can_see(self, request): - return self.author == request.user or (not request.user.is_authenticated and self.author is None) + return self.is_author(request) @contextmanager def lock_to_edit(self, request=None): @@ -268,7 +272,7 @@ class ChangeSet(models.Model): def can_edit(self, request): if not self.proposed: - return self.author == request.user or (self.author is None and not request.user.is_authenticated) + return self.is_author(request) elif self.state == 'review': return self.assigned_to == request.user return False @@ -299,6 +303,9 @@ class ChangeSet(models.Model): self.last_update = update.datetime self.save() + def activate(self, request): + request.session['changeset'] = self.pk + """ Methods for display """ @@ -352,4 +359,4 @@ class ChangeSet(models.Model): def save(self, *args, **kwargs): super().save(*args, **kwargs) if self._request is not None: - self._request.session['changeset'] = self.pk + self.activate(self._request) diff --git a/src/c3nav/editor/models/changesetupdate.py b/src/c3nav/editor/models/changesetupdate.py index 0d1e6996..6333c8af 100644 --- a/src/c3nav/editor/models/changesetupdate.py +++ b/src/c3nav/editor/models/changesetupdate.py @@ -15,7 +15,6 @@ class ChangeSetUpdate(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT, related_name='+') title = models.CharField(max_length=100, null=True) description = models.TextField(max_length=1000, null=True) - session_user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT, related_name='+') assigned_to = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT, related_name='+') objects_changed = models.BooleanField(default=False) diff --git a/src/c3nav/editor/templates/editor/changeset.html b/src/c3nav/editor/templates/editor/changeset.html index e2d8a750..ad20a6bf 100644 --- a/src/c3nav/editor/templates/editor/changeset.html +++ b/src/c3nav/editor/templates/editor/changeset.html @@ -82,19 +82,23 @@ {% endfor %} {% buttons %} - {% if can_delete %} - + {% if editing %} + {% if can_delete %} + + {% endif %} +
+ {% if can_edit %} + {% trans 'Edit' %} + {% endif %} + {% if can_edit and not changeset.proposed %} + + {% endif %} + {% if can_unpropose %} + + {% endif %} +
+ {% elif can_edit %} + {% endif %} -
- {% if can_edit %} - {% trans 'Edit' %} - {% endif %} - {% if can_edit and not changeset.proposed %} - - {% endif %} - {% if can_unpropose %} - - {% endif %} -
{% endbuttons %} diff --git a/src/c3nav/editor/views/changes.py b/src/c3nav/editor/views/changes.py index 8b6260dc..877aa516 100644 --- a/src/c3nav/editor/views/changes.py +++ b/src/c3nav/editor/views/changes.py @@ -46,7 +46,17 @@ def changeset_detail(request, pk): changed_object.save(standalone=True) messages.success(request, _('Object has been successfully restored.')) except PermissionDenied: - messages.error(request, _('You can not edit changes on this changeset.')) + messages.error(request, _('You can not edit changes on this change set.')) + + 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): + changeset.activate(request) + messages.success(request, _('You activated this change set.')) + else: + messages.error(request, _('You can not activate this change set.')) return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk})) @@ -60,7 +70,7 @@ def changeset_detail(request, pk): changeset.propose(request.user) messages.success(request, _('You proposed your changes.')) else: - messages.error(request, _('You cannot propose this changeset.')) + messages.error(request, _('You cannot propose this change set.')) return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk})) @@ -70,7 +80,7 @@ def changeset_detail(request, pk): changeset.unpropose(request.user) messages.success(request, _('You unproposed your changes.')) else: - messages.error(request, _('You cannot unpropose this changeset.')) + messages.error(request, _('You cannot unpropose this change set.')) return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk})) @@ -254,6 +264,7 @@ def changeset_detail(request, pk): 'can_edit': can_edit, 'can_delete': can_delete, 'can_unpropose': changeset.can_unpropose(request), + 'editing': editing, 'changed_objects': changed_objects_data, }