diff --git a/hiboo/profile/templates/profile_list.html b/hiboo/profile/templates/profile_list.html index 9058bdb852f0c15c83ffe95a3ab810617c9ec2dc..f5ff7229fc852572339aaa027f1533519f3cd411 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 2814a97f0aefed5f07e3a899da539a9b736cc5da..6d84754c289fcf210c2626ce5d402922a0c5d50d 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)