activating change sets

This commit is contained in:
Laura Klünder 2017-07-04 22:44:21 +02:00
parent 755421706c
commit ccd2cf1b99
5 changed files with 60 additions and 20 deletions

View file

@ -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',
),
]

View file

@ -244,8 +244,12 @@ class ChangeSet(models.Model):
def proposed(self): def proposed(self):
return self.state not in ('unproposed', 'rejected') 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): 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 @contextmanager
def lock_to_edit(self, request=None): def lock_to_edit(self, request=None):
@ -268,7 +272,7 @@ class ChangeSet(models.Model):
def can_edit(self, request): def can_edit(self, request):
if not self.proposed: 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': elif self.state == 'review':
return self.assigned_to == request.user return self.assigned_to == request.user
return False return False
@ -299,6 +303,9 @@ class ChangeSet(models.Model):
self.last_update = update.datetime self.last_update = update.datetime
self.save() self.save()
def activate(self, request):
request.session['changeset'] = self.pk
""" """
Methods for display Methods for display
""" """
@ -352,4 +359,4 @@ class ChangeSet(models.Model):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
super().save(*args, **kwargs) super().save(*args, **kwargs)
if self._request is not None: if self._request is not None:
self._request.session['changeset'] = self.pk self.activate(self._request)

View file

@ -15,7 +15,6 @@ class ChangeSetUpdate(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT, related_name='+') author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT, related_name='+')
title = models.CharField(max_length=100, null=True) title = models.CharField(max_length=100, null=True)
description = models.TextField(max_length=1000, 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='+') assigned_to = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT, related_name='+')
objects_changed = models.BooleanField(default=False) objects_changed = models.BooleanField(default=False)

View file

@ -82,6 +82,7 @@
{% endfor %} {% endfor %}
{% buttons %} {% buttons %}
{% if editing %}
{% if can_delete %} {% if can_delete %}
<button type="submit" class="btn btn-danger" name="delete" value="1">{% trans 'Delete' %}</button> <button type="submit" class="btn btn-danger" name="delete" value="1">{% trans 'Delete' %}</button>
{% endif %} {% endif %}
@ -96,5 +97,8 @@
<button type="submit" class="btn btn-default" name="unpropose" value="1">{% trans 'Unpropose' %}</button> <button type="submit" class="btn btn-default" name="unpropose" value="1">{% trans 'Unpropose' %}</button>
{% endif %} {% endif %}
</div> </div>
{% elif can_edit %}
<button type="submit" class="btn btn-primary pull-right" name="activate" value="1">{% trans 'Activate' %}</button>
{% endif %}
{% endbuttons %} {% endbuttons %}
</form> </form>

View file

@ -46,7 +46,17 @@ def changeset_detail(request, pk):
changed_object.save(standalone=True) changed_object.save(standalone=True)
messages.success(request, _('Object has been successfully restored.')) messages.success(request, _('Object has been successfully restored.'))
except PermissionDenied: 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})) return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
@ -60,7 +70,7 @@ def changeset_detail(request, pk):
changeset.propose(request.user) changeset.propose(request.user)
messages.success(request, _('You proposed your changes.')) messages.success(request, _('You proposed your changes.'))
else: 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})) return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
@ -70,7 +80,7 @@ def changeset_detail(request, pk):
changeset.unpropose(request.user) changeset.unpropose(request.user)
messages.success(request, _('You unproposed your changes.')) messages.success(request, _('You unproposed your changes.'))
else: 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})) return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
@ -254,6 +264,7 @@ def changeset_detail(request, pk):
'can_edit': can_edit, 'can_edit': can_edit,
'can_delete': can_delete, 'can_delete': can_delete,
'can_unpropose': changeset.can_unpropose(request), 'can_unpropose': changeset.can_unpropose(request),
'editing': editing,
'changed_objects': changed_objects_data, 'changed_objects': changed_objects_data,
} }