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):
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)

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='+')
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)

View file

@ -82,19 +82,23 @@
{% endfor %}
{% buttons %}
{% if can_delete %}
<button type="submit" class="btn btn-danger" name="delete" value="1">{% trans 'Delete' %}</button>
{% if editing %}
{% if can_delete %}
<button type="submit" class="btn btn-danger" name="delete" value="1">{% trans 'Delete' %}</button>
{% endif %}
<div class="pull-right">
{% if can_edit %}
<a href="{% url 'editor.changesets.edit' pk=changeset.pk %}" class="btn btn-default">{% trans 'Edit' %}</a>
{% endif %}
{% if can_edit and not changeset.proposed %}
<button type="submit" class="btn btn-primary" name="propose" value="1">{% trans 'Propose' %}</button>
{% endif %}
{% if can_unpropose %}
<button type="submit" class="btn btn-default" name="unpropose" value="1">{% trans 'Unpropose' %}</button>
{% endif %}
</div>
{% elif can_edit %}
<button type="submit" class="btn btn-primary pull-right" name="activate" value="1">{% trans 'Activate' %}</button>
{% endif %}
<div class="pull-right">
{% if can_edit %}
<a href="{% url 'editor.changesets.edit' pk=changeset.pk %}" class="btn btn-default">{% trans 'Edit' %}</a>
{% endif %}
{% if can_edit and not changeset.proposed %}
<button type="submit" class="btn btn-primary" name="propose" value="1">{% trans 'Propose' %}</button>
{% endif %}
{% if can_unpropose %}
<button type="submit" class="btn btn-default" name="unpropose" value="1">{% trans 'Unpropose' %}</button>
{% endif %}
</div>
{% endbuttons %}
</form>

View file

@ -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,
}