diff --git a/src/c3nav/editor/models/changeset.py b/src/c3nav/editor/models/changeset.py
index 0b96e515..2c01953a 100644
--- a/src/c3nav/editor/models/changeset.py
+++ b/src/c3nav/editor/models/changeset.py
@@ -173,7 +173,8 @@ class ChangeSet(models.Model):
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)
+ return (self.can_edit(request) and self.can_review(request)
+ and not self.proposed and self.changes and not self.problems.any)
def has_space_access_on_all_objects(self, request, force=False):
# todo: reimplement this
@@ -266,6 +267,9 @@ class ChangeSet(models.Model):
def can_end_review(self, request):
return self.can_review(request) and self.state == 'review' and self.assigned_to == request.user
+ def can_apply(self, request):
+ return self.can_end_review(request) and not self.problems.any
+
def can_unreject(self, request):
return (self.can_review(request) and self.state in ('rejected', 'finallyrejected') and
self.assigned_to == request.user)
@@ -332,6 +336,8 @@ class ChangeSet(models.Model):
self.save()
def apply(self, user):
+ if self.problems.any:
+ raise ValueError("Can't apply if there's still problems!")
with MapUpdate.lock():
# todo: reimplement
update = self.updates.create(user=user, state='applied')
diff --git a/src/c3nav/editor/templates/editor/changeset.html b/src/c3nav/editor/templates/editor/changeset.html
index f41e826b..2389b8bd 100644
--- a/src/c3nav/editor/templates/editor/changeset.html
+++ b/src/c3nav/editor/templates/editor/changeset.html
@@ -143,7 +143,7 @@
{% endif %}
{% if can_end_review %}
-
+
{% endif %}
{% endif %}
{% if can_start_review %}
diff --git a/src/c3nav/editor/views/changes.py b/src/c3nav/editor/views/changes.py
index 46dff553..7a4ec576 100644
--- a/src/c3nav/editor/views/changes.py
+++ b/src/c3nav/editor/views/changes.py
@@ -219,6 +219,7 @@ def changeset_detail(request, pk):
'can_unpropose': changeset.can_unpropose(request),
'can_start_review': changeset.can_start_review(request),
'can_end_review': changeset.can_end_review(request),
+ 'can_apply': changeset.can_apply(request),
'can_unreject': changeset.can_unreject(request),
'active': active,
}