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')
|
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'))
|
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'))
|
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,
|
assigned_to = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.PROTECT,
|
||||||
related_name='assigned_changesets', verbose_name=_('assigned to'))
|
related_name='assigned_changesets', verbose_name=_('assigned to'))
|
||||||
map_update = models.OneToOneField(MapUpdate, null=True, related_name='changeset',
|
map_update = models.OneToOneField(MapUpdate, null=True, related_name='changeset',
|
||||||
|
@ -172,6 +172,9 @@ class ChangeSet(models.Model):
|
||||||
def can_unpropose(self, request):
|
def can_unpropose(self, request):
|
||||||
return self.author_id == request.user.pk and self.state in ('proposed', 'reproposed')
|
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):
|
def has_space_access_on_all_objects(self, request, force=False):
|
||||||
# todo: reimplement this
|
# todo: reimplement this
|
||||||
if not request.user.is_authenticated:
|
if not request.user.is_authenticated:
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% bootstrap_messages %}
|
{% bootstrap_messages %}
|
||||||
{% bootstrap_form form %}
|
{% bootstrap_form form %}
|
||||||
|
{% if action %}
|
||||||
|
<input type="hidden" name="{{ action }}" value="1">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% buttons %}
|
{% buttons %}
|
||||||
<a href="{% url 'editor.changesets.detail' pk=changeset.pk %}" class="btn btn-default">{% trans 'Back' %}</a>
|
<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)
|
return redirect(reverse('editor.login') + '?r=' + request.path)
|
||||||
|
|
||||||
with changeset.lock_to_edit(request) as changeset:
|
with changeset.lock_to_edit(request) as changeset:
|
||||||
if not changeset.title or not changeset.description:
|
if not changeset.title:
|
||||||
messages.warning(request, _('You need to add a title an a description to propose this change set.'))
|
form = ChangeSetForm(instance=changeset, data=request.POST)
|
||||||
return redirect(reverse('editor.changesets.edit', kwargs={'pk': changeset.pk}))
|
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):
|
if changeset.can_propose(request):
|
||||||
changeset.propose(request.user)
|
changeset.propose(request.user)
|
||||||
|
@ -82,6 +95,37 @@ 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('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':
|
elif request.POST.get('unpropose') == '1':
|
||||||
with changeset.lock_to_edit(request) as changeset:
|
with changeset.lock_to_edit(request) as changeset:
|
||||||
if changeset.can_unpropose(request):
|
if changeset.can_unpropose(request):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue