From 4839bd2baf6a95961490c9060f3c4b214a9da73a Mon Sep 17 00:00:00 2001
From: kaiyou <pierre@jaury.eu>
Date: Sun, 20 Dec 2020 12:15:24 +0100
Subject: [PATCH] Allow for transitions to be cancelled by admins

---
 hiboo/profile/templates/profile_list.html |  3 +++
 hiboo/profile/views.py                    | 15 ++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/hiboo/profile/templates/profile_list.html b/hiboo/profile/templates/profile_list.html
index 9058bdb..f5ff722 100644
--- a/hiboo/profile/templates/profile_list.html
+++ b/hiboo/profile/templates/profile_list.html
@@ -47,6 +47,9 @@
               {% for transition, (_, _, _, _, label) in profile.transitions(current_user).items() %}
               <a href="{{ url_for("profile.start_transition", profile_uuid=profile.uuid, transition=transition) }}">{{ label | capitalize }}</a>
               {% endfor %}
+              {% if profile.transition_step %}
+              <a href="{{ url_for("profile.cancel_transition", profile_uuid=profile.uuid) }}">{% trans %}Cancel{% endtrans %}</a>
+              {% endif %}
             </td>
           </tr>
           {% endfor %}
diff --git a/hiboo/profile/views.py b/hiboo/profile/views.py
index 2814a97..6d84754 100644
--- a/hiboo/profile/views.py
+++ b/hiboo/profile/views.py
@@ -188,7 +188,20 @@ def start_transition(profile_uuid, transition):
     return flask.redirect(flask.url_for(".details", profile_uuid=profile_uuid))
 
 
-@blueprint.route("/transition/<profile_uuid>", methods=["GET", "POST"])
+@blueprint.route("/transition/<profile_uuid>/cancel", methods=["GET", "POST"])
+@security.confirmation_required("cancel the profile status change")
+@security.admin_required()
+def cancel_transition(profile_uuid):
+    profile = models.Profile.query.get(profile_uuid) or flask.abort(404)
+    profile.transition = None
+    profile.transition_step = None
+    profile.transition_time = None
+    models.db.session.commit()
+    flask.flash(_("Profile status change was cancelled"), "success")
+    return flask.redirect(flask.url_for(".details", profile_uuid=profile_uuid))
+
+
+@blueprint.route("/transition/<profile_uuid>/complete", methods=["GET", "POST"])
 @security.admin_required()
 def complete_transition(profile_uuid):
     profile = models.Profile.query.get(profile_uuid) or flask.abort(404)
-- 
GitLab