proposed change sets can be activated, too

This commit is contained in:
Laura Klünder 2017-07-04 23:42:14 +02:00
parent d8694a0290
commit 81ab6b19d2
3 changed files with 14 additions and 10 deletions

View file

@ -8,6 +8,7 @@ from django.db import models, transaction
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy
from rest_framework.exceptions import PermissionDenied
from c3nav.editor.models.changedobject import ChangedObject
from c3nav.editor.utils import is_created_pk
@ -244,6 +245,10 @@ class ChangeSet(models.Model):
def proposed(self):
return self.state not in ('unproposed', 'rejected')
@property
def closed(self):
return self.state in ('finallyrejected', 'applied')
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))
@ -257,7 +262,7 @@ class ChangeSet(models.Model):
if self.pk is not None:
changeset = ChangeSet.objects.select_for_update().get(pk=self.pk)
if request is not None and not changeset.can_edit(request):
raise PermissionError
raise PermissionDenied
self._object_changed = False
yield changeset

View file

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

View file

@ -19,9 +19,9 @@ from c3nav.mapdata.models.locations import LocationRedirect, LocationSlug
@sidebar_view
def changeset_detail(request, pk):
changeset = request.changeset
editing = True
active = True
if str(pk) != str(request.changeset.pk):
editing = False
active = False
changeset = get_object_or_404(ChangeSet.qs_for_request(request), pk=pk)
if not changeset.can_see(request):
@ -29,7 +29,6 @@ def changeset_detail(request, pk):
can_edit = changeset.can_edit(request)
can_delete = changeset.can_delete(request)
editing = editing and can_edit
if request.method == 'POST':
restore = request.POST.get('restore')
@ -51,8 +50,8 @@ 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):
with changeset.lock_to_edit() as changeset:
if not changeset.closed:
changeset.activate(request)
messages.success(request, _('You activated this change set.'))
else:
@ -136,7 +135,7 @@ def changeset_detail(request, pk):
obj_still_exists = pk not in changeset.deleted_existing.get(obj.__class__, ())
edit_url = None
if obj_still_exists and editing and not isinstance(obj, LocationRedirect):
if obj_still_exists and active and can_edit and not isinstance(obj, LocationRedirect):
reverse_kwargs = {'pk': obj.pk}
if hasattr(obj, 'level_id'):
reverse_kwargs['level'] = obj.level_id
@ -264,7 +263,7 @@ def changeset_detail(request, pk):
'can_edit': can_edit,
'can_delete': can_delete,
'can_unpropose': changeset.can_unpropose(request),
'editing': editing,
'active': active,
'changed_objects': changed_objects_data,
}