proposed change sets can be activated, too
This commit is contained in:
parent
d8694a0290
commit
81ab6b19d2
3 changed files with 14 additions and 10 deletions
|
@ -8,6 +8,7 @@ from django.db import models, transaction
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.utils.translation import ungettext_lazy
|
from django.utils.translation import ungettext_lazy
|
||||||
|
from rest_framework.exceptions import PermissionDenied
|
||||||
|
|
||||||
from c3nav.editor.models.changedobject import ChangedObject
|
from c3nav.editor.models.changedobject import ChangedObject
|
||||||
from c3nav.editor.utils import is_created_pk
|
from c3nav.editor.utils import is_created_pk
|
||||||
|
@ -244,6 +245,10 @@ class ChangeSet(models.Model):
|
||||||
def proposed(self):
|
def proposed(self):
|
||||||
return self.state not in ('unproposed', 'rejected')
|
return self.state not in ('unproposed', 'rejected')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def closed(self):
|
||||||
|
return self.state in ('finallyrejected', 'applied')
|
||||||
|
|
||||||
def is_author(self, request):
|
def is_author(self, request):
|
||||||
return (self.author == request.user or (self.author is None and not request.user.is_authenticated and
|
return (self.author == request.user or (self.author is None and not request.user.is_authenticated and
|
||||||
request.session.get('changeset', None) == self.pk))
|
request.session.get('changeset', None) == self.pk))
|
||||||
|
@ -257,7 +262,7 @@ class ChangeSet(models.Model):
|
||||||
if self.pk is not None:
|
if self.pk is not None:
|
||||||
changeset = ChangeSet.objects.select_for_update().get(pk=self.pk)
|
changeset = ChangeSet.objects.select_for_update().get(pk=self.pk)
|
||||||
if request is not None and not changeset.can_edit(request):
|
if request is not None and not changeset.can_edit(request):
|
||||||
raise PermissionError
|
raise PermissionDenied
|
||||||
|
|
||||||
self._object_changed = False
|
self._object_changed = False
|
||||||
yield changeset
|
yield changeset
|
||||||
|
|
|
@ -82,7 +82,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% buttons %}
|
{% buttons %}
|
||||||
{% if editing %}
|
{% if active %}
|
||||||
{% 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 %}
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
<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 %}
|
{% elif not changeset.closed %}
|
||||||
<button type="submit" class="btn btn-primary pull-right" name="activate" value="1">{% trans 'Activate' %}</button>
|
<button type="submit" class="btn btn-primary pull-right" name="activate" value="1">{% trans 'Activate' %}</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endbuttons %}
|
{% endbuttons %}
|
||||||
|
|
|
@ -19,9 +19,9 @@ from c3nav.mapdata.models.locations import LocationRedirect, LocationSlug
|
||||||
@sidebar_view
|
@sidebar_view
|
||||||
def changeset_detail(request, pk):
|
def changeset_detail(request, pk):
|
||||||
changeset = request.changeset
|
changeset = request.changeset
|
||||||
editing = True
|
active = True
|
||||||
if str(pk) != str(request.changeset.pk):
|
if str(pk) != str(request.changeset.pk):
|
||||||
editing = False
|
active = False
|
||||||
changeset = get_object_or_404(ChangeSet.qs_for_request(request), pk=pk)
|
changeset = get_object_or_404(ChangeSet.qs_for_request(request), pk=pk)
|
||||||
|
|
||||||
if not changeset.can_see(request):
|
if not changeset.can_see(request):
|
||||||
|
@ -29,7 +29,6 @@ def changeset_detail(request, pk):
|
||||||
|
|
||||||
can_edit = changeset.can_edit(request)
|
can_edit = changeset.can_edit(request)
|
||||||
can_delete = changeset.can_delete(request)
|
can_delete = changeset.can_delete(request)
|
||||||
editing = editing and can_edit
|
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
restore = request.POST.get('restore')
|
restore = request.POST.get('restore')
|
||||||
|
@ -51,8 +50,8 @@ def changeset_detail(request, pk):
|
||||||
return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
|
return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
|
||||||
|
|
||||||
elif request.POST.get('activate') == '1':
|
elif request.POST.get('activate') == '1':
|
||||||
with changeset.lock_to_edit(request) as changeset:
|
with changeset.lock_to_edit() as changeset:
|
||||||
if changeset.can_edit(request):
|
if not changeset.closed:
|
||||||
changeset.activate(request)
|
changeset.activate(request)
|
||||||
messages.success(request, _('You activated this change set.'))
|
messages.success(request, _('You activated this change set.'))
|
||||||
else:
|
else:
|
||||||
|
@ -136,7 +135,7 @@ def changeset_detail(request, pk):
|
||||||
obj_still_exists = pk not in changeset.deleted_existing.get(obj.__class__, ())
|
obj_still_exists = pk not in changeset.deleted_existing.get(obj.__class__, ())
|
||||||
|
|
||||||
edit_url = None
|
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}
|
reverse_kwargs = {'pk': obj.pk}
|
||||||
if hasattr(obj, 'level_id'):
|
if hasattr(obj, 'level_id'):
|
||||||
reverse_kwargs['level'] = obj.level_id
|
reverse_kwargs['level'] = obj.level_id
|
||||||
|
@ -264,7 +263,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,
|
'active': active,
|
||||||
'changed_objects': changed_objects_data,
|
'changed_objects': changed_objects_data,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue