activating change sets
This commit is contained in:
parent
755421706c
commit
ccd2cf1b99
5 changed files with 60 additions and 20 deletions
|
@ -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',
|
||||||
|
),
|
||||||
|
]
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue