diff --git a/snikket_web/admin.py b/snikket_web/admin.py index adb2c52..9c3b75b 100644 --- a/snikket_web/admin.py +++ b/snikket_web/admin.py @@ -452,10 +452,6 @@ class EditCircleForm(BaseForm): _l("Update circle") ) - action_delete = wtforms.SubmitField( - _l("Delete circle permanently") - ) - action_remove_user = wtforms.StringField() action_add_user = wtforms.SubmitField( @@ -515,13 +511,6 @@ async def edit_circle(id_: str) -> typing.Union[str, werkzeug.Response]: _("Circle data updated"), "success", ) - elif form.action_delete.data: - await client.delete_group(id_) - await flash( - _("Circle deleted"), - "success", - ) - return redirect(url_for(".circles")) elif form.action_add_user.data: if form.user_to_add.data in valid_users: await client.add_group_member( @@ -553,6 +542,47 @@ async def edit_circle(id_: str) -> typing.Union[str, werkzeug.Response]: ) +class DeleteCircleForm(BaseForm): + action_delete = wtforms.SubmitField( + _l("Delete circle permanently") + ) + + +@bp.route("/circle//delete", methods=["GET", "POST"]) +@client.require_admin_session() +async def delete_circle(id_: str) -> typing.Union[str, werkzeug.Response]: + async with client.authenticated_session() as session: + try: + circle = await client.get_group_by_id( + id_, + session=session, + ) + except aiohttp.ClientResponseError as exc: + if exc.status == 404: + await flash( + _("No such circle exists"), + "alert", + ) + return redirect(url_for(".circles")) + raise + + form = DeleteCircleForm() + if form.validate_on_submit(): + if form.action_delete.data: + await client.delete_group(id_) + await flash( + _("Circle deleted"), + "success", + ) + return redirect(url_for(".circles")) + + return await render_template( + "admin_delete_circle.html", + target_circle=circle, + form=form, + ) + + _CPU_EPOCH = time.process_time() _MONOTONIC_EPOCH = time.monotonic() diff --git a/snikket_web/templates/admin_delete_circle.html b/snikket_web/templates/admin_delete_circle.html new file mode 100644 index 0000000..1e0535a --- /dev/null +++ b/snikket_web/templates/admin_delete_circle.html @@ -0,0 +1,21 @@ +{% extends "admin_app.html" %} +{% from "library.j2" import box, form_button, standard_button %} +{% block content %} +

{% trans circle_name=target_circle.name %}Delete circle {{ circle_name }}{% endtrans %}

+
+

{% trans %}Delete circle{% endtrans %}

+ {{ form.csrf_token }} +

{% trans %}Are you sure you want to delete the following circle?{% endtrans %}

+
+
{% trans %}Name{% endtrans %}
+
{{ target_circle.name }}
+
+ {% call box("alert", _("Danger")) %} +

{% trans %}The circle and the corresponding chat will be deleted, permanently and immediately upon pushing the below button. There is no way back!{% endtrans %}

+ {% endcall %} +
+ {%- call standard_button("back", url_for(".edit_circle", id_=target_circle.id_), class="tertiary") %}{% trans %}Back{% endtrans %}{% endcall -%} + {%- call form_button("delete", form.action_delete, class="primary danger") %}{% endcall -%} +
+
+{% endblock %} diff --git a/snikket_web/templates/admin_edit_circle.html b/snikket_web/templates/admin_edit_circle.html index b158688..0659e98 100644 --- a/snikket_web/templates/admin_edit_circle.html +++ b/snikket_web/templates/admin_edit_circle.html @@ -48,7 +48,7 @@

{% trans %}Delete circle{% endtrans %}

{% trans %}Deleting a circle does not delete any users in the circle.{% endtrans %}

- {%- call form_button("delete", form.action_delete, class="secondary danger") %}{% endcall -%} + {%- call standard_button("delete", url_for(".delete_circle", id_=target_circle.id_), class="secondary danger") %}{% trans %}Delete circle{% endtrans %}{% endcall -%}
{%- endif -%} diff --git a/snikket_web/translations/messages.pot b/snikket_web/translations/messages.pot index 73dd523..8eee3ef 100644 --- a/snikket_web/translations/messages.pot +++ b/snikket_web/translations/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-03-28 19:16+0200\n" +"POT-Creation-Date: 2023-04-01 10:07+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -142,6 +142,7 @@ msgid "Invitation revoked" msgstr "" #: snikket_web/admin.py:394 snikket_web/admin.py:442 +#: snikket_web/templates/admin_delete_circle.html:10 msgid "Name" msgstr "" @@ -161,51 +162,51 @@ msgstr "" msgid "Update circle" msgstr "" -#: snikket_web/admin.py:456 -msgid "Delete circle permanently" -msgstr "" - -#: snikket_web/admin.py:462 +#: snikket_web/admin.py:458 msgid "Add user" msgstr "" -#: snikket_web/admin.py:478 +#: snikket_web/admin.py:474 snikket_web/admin.py:563 msgid "No such circle exists" msgstr "" -#: snikket_web/admin.py:515 +#: snikket_web/admin.py:511 msgid "Circle data updated" msgstr "" #: snikket_web/admin.py:521 -msgid "Circle deleted" -msgstr "" - -#: snikket_web/admin.py:532 msgid "User added to circle" msgstr "" -#: snikket_web/admin.py:541 +#: snikket_web/admin.py:530 msgid "User removed from circle" msgstr "" -#: snikket_web/admin.py:610 +#: snikket_web/admin.py:547 +msgid "Delete circle permanently" +msgstr "" + +#: snikket_web/admin.py:574 +msgid "Circle deleted" +msgstr "" + +#: snikket_web/admin.py:640 msgid "Message contents" msgstr "" -#: snikket_web/admin.py:616 +#: snikket_web/admin.py:646 msgid "Only send to online users" msgstr "" -#: snikket_web/admin.py:620 +#: snikket_web/admin.py:650 msgid "Post to all users" msgstr "" -#: snikket_web/admin.py:624 +#: snikket_web/admin.py:654 msgid "Send preview to yourself" msgstr "" -#: snikket_web/admin.py:646 +#: snikket_web/admin.py:676 msgid "Announcement sent!" msgstr "" @@ -552,6 +553,43 @@ msgstr "" msgid "Copy complete output" msgstr "" +#: snikket_web/templates/admin_delete_circle.html:4 +#, python-format +msgid "Delete circle %(circle_name)s" +msgstr "" + +#: snikket_web/templates/admin_delete_circle.html:6 +#: snikket_web/templates/admin_edit_circle.html:48 +#: snikket_web/templates/admin_edit_circle.html:51 +msgid "Delete circle" +msgstr "" + +#: snikket_web/templates/admin_delete_circle.html:8 +msgid "Are you sure you want to delete the following circle?" +msgstr "" + +#: snikket_web/templates/admin_delete_circle.html:13 +#: snikket_web/templates/admin_delete_user.html:15 +msgid "Danger" +msgstr "" + +#: snikket_web/templates/admin_delete_circle.html:14 +msgid "" +"The circle and the corresponding chat will be deleted, permanently and " +"immediately upon pushing the below button. There is no way " +"back!" +msgstr "" + +#: snikket_web/templates/admin_delete_circle.html:17 +#: snikket_web/templates/admin_delete_user.html:19 +#: snikket_web/templates/admin_reset_user_password.html:25 +#: snikket_web/templates/user_logout.html:10 +#: snikket_web/templates/user_manage_data.html:14 +#: snikket_web/templates/user_passwd.html:27 +#: snikket_web/templates/user_profile.html:32 +msgid "Back" +msgstr "" + #: snikket_web/templates/admin_delete_user.html:4 #, python-format msgid "Delete user %(user_name)s" @@ -566,10 +604,6 @@ msgstr "" msgid "Are you sure you want to delete the following user?" msgstr "" -#: snikket_web/templates/admin_delete_user.html:15 -msgid "Danger" -msgstr "" - #: snikket_web/templates/admin_delete_user.html:16 msgid "" "The user and their data will be deleted irrevocably, permanently and " @@ -577,15 +611,6 @@ msgid "" "back!" msgstr "" -#: snikket_web/templates/admin_delete_user.html:19 -#: snikket_web/templates/admin_reset_user_password.html:25 -#: snikket_web/templates/user_logout.html:10 -#: snikket_web/templates/user_manage_data.html:14 -#: snikket_web/templates/user_passwd.html:27 -#: snikket_web/templates/user_profile.html:32 -msgid "Back" -msgstr "" - #: snikket_web/templates/admin_edit_circle.html:14 msgid "This is your main circle" msgstr "" @@ -618,10 +643,6 @@ msgstr "" msgid "Return to circle list" msgstr "" -#: snikket_web/templates/admin_edit_circle.html:48 -msgid "Delete circle" -msgstr "" - #: snikket_web/templates/admin_edit_circle.html:49 msgid "Deleting a circle does not delete any users in the circle." msgstr ""