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):
|
||||
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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -82,6 +82,7 @@
|
|||
{% endfor %}
|
||||
|
||||
{% buttons %}
|
||||
{% if editing %}
|
||||
{% if can_delete %}
|
||||
<button type="submit" class="btn btn-danger" name="delete" value="1">{% trans 'Delete' %}</button>
|
||||
{% endif %}
|
||||
|
@ -96,5 +97,8 @@
|
|||
<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 %}
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
|
|
@ -50,6 +50,16 @@ 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):
|
||||
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}))
|
||||
|
||||
elif request.POST.get('propose') == '1':
|
||||
if not request.user.is_authenticated:
|
||||
messages.info(request, _('You need to log in to propose changes.'))
|
||||
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue