allow direct proposing of changesets as well as direct commiting
This commit is contained in:
parent
f9e832b24a
commit
435a271eab
3 changed files with 54 additions and 4 deletions
|
@ -40,7 +40,7 @@ class ChangeSet(models.Model):
|
|||
state = models.CharField(max_length=20, db_index=True, choices=STATES, default='unproposed')
|
||||
author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT, verbose_name=_('Author'))
|
||||
title = models.CharField(max_length=100, default='', verbose_name=_('Title'))
|
||||
description = models.TextField(max_length=1000, default='', verbose_name=_('Description'))
|
||||
description = models.TextField(max_length=1000, default='', verbose_name=_('Description'), blank=True)
|
||||
assigned_to = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT,
|
||||
related_name='assigned_changesets', verbose_name=_('assigned to'))
|
||||
map_update = models.OneToOneField(MapUpdate, null=True, related_name='changeset',
|
||||
|
@ -172,6 +172,9 @@ class ChangeSet(models.Model):
|
|||
def can_unpropose(self, request):
|
||||
return self.author_id == request.user.pk and self.state in ('proposed', 'reproposed')
|
||||
|
||||
def can_commit(self, request):
|
||||
return self.can_edit(request) and not self.proposed and self.changes and self.can_review(request)
|
||||
|
||||
def has_space_access_on_all_objects(self, request, force=False):
|
||||
# todo: reimplement this
|
||||
if not request.user.is_authenticated:
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
{% csrf_token %}
|
||||
{% bootstrap_messages %}
|
||||
{% bootstrap_form form %}
|
||||
{% if action %}
|
||||
<input type="hidden" name="{{ action }}" value="1">
|
||||
{% endif %}
|
||||
|
||||
{% buttons %}
|
||||
<a href="{% url 'editor.changesets.detail' pk=changeset.pk %}" class="btn btn-default">{% trans 'Back' %}</a>
|
||||
|
|
|
@ -70,9 +70,22 @@ def changeset_detail(request, pk):
|
|||
return redirect(reverse('editor.login') + '?r=' + request.path)
|
||||
|
||||
with changeset.lock_to_edit(request) as changeset:
|
||||
if not changeset.title or not changeset.description:
|
||||
messages.warning(request, _('You need to add a title an a description to propose this change set.'))
|
||||
return redirect(reverse('editor.changesets.edit', kwargs={'pk': changeset.pk}))
|
||||
if not changeset.title:
|
||||
form = ChangeSetForm(instance=changeset, data=request.POST)
|
||||
if not form.is_valid():
|
||||
form = ChangeSetForm(instance=changeset)
|
||||
messages.warning(request, _('You need to add a title to propose this change set.'))
|
||||
return render(request, 'editor/changeset_edit.html', {
|
||||
'changeset': changeset,
|
||||
'action': 'propose',
|
||||
'form': form,
|
||||
})
|
||||
|
||||
changeset = form.instance
|
||||
update = changeset.updates.create(user=request.user,
|
||||
title=changeset.title, description=changeset.description)
|
||||
changeset.last_update = update
|
||||
changeset.save()
|
||||
|
||||
if changeset.can_propose(request):
|
||||
changeset.propose(request.user)
|
||||
|
@ -82,6 +95,37 @@ def changeset_detail(request, pk):
|
|||
|
||||
return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
|
||||
|
||||
elif request.POST.get('commit') == '1':
|
||||
if not request.user.is_authenticated:
|
||||
messages.info(request, _('You need to log in to apply changes.'))
|
||||
return redirect(reverse('editor.login') + '?r=' + request.path)
|
||||
|
||||
with changeset.lock_to_edit(request) as changeset:
|
||||
if not changeset.title:
|
||||
form = ChangeSetForm(instance=changeset, data=request.POST)
|
||||
if not form.is_valid():
|
||||
form = ChangeSetForm(instance=changeset)
|
||||
messages.warning(request, _('You need to add a title to apply this change set.'))
|
||||
return render(request, 'editor/changeset_edit.html', {
|
||||
'changeset': changeset,
|
||||
'action': 'commit',
|
||||
'form': form,
|
||||
})
|
||||
|
||||
changeset = form.instance
|
||||
update = changeset.updates.create(user=request.user,
|
||||
title=changeset.title, description=changeset.description)
|
||||
changeset.last_update = update
|
||||
changeset.save()
|
||||
|
||||
if changeset.can_commit(request):
|
||||
changeset.apply(request.user)
|
||||
messages.success(request, _('You applied your changes.'))
|
||||
else:
|
||||
messages.error(request, _('You cannot apply this change set.'))
|
||||
|
||||
return redirect(reverse('editor.changesets.detail', kwargs={'pk': changeset.pk}))
|
||||
|
||||
elif request.POST.get('unpropose') == '1':
|
||||
with changeset.lock_to_edit(request) as changeset:
|
||||
if changeset.can_unpropose(request):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue