From 9fec85b68804be115e8de66cd90da33e38a86db6 Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Thu, 17 Feb 2022 13:44:32 +0100 Subject: [PATCH] #101 Team enhancements * visual enhancement for team index rendering * adds validity check for admin-membership of a team --- locale/de/LC_MESSAGES/django.mo | Bin 37936 -> 39382 bytes locale/de/LC_MESSAGES/django.po | 116 ++++++++++++++++++++++++---- user/forms.py | 20 ++++- user/templates/user/team/index.html | 88 ++++++++++----------- 4 files changed, 163 insertions(+), 61 deletions(-) diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 022e9e1a728d186a0e8be95eee8ae29ea5928bee..ca93bc886faec14fea82f27aa2689b03373d5b42 100644 GIT binary patch delta 12271 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 delta 11048 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\n" "Language-Team: LANGUAGE \n" @@ -64,6 +64,7 @@ msgstr "Verantwortliche Stelle" #: compensation/forms/forms.py:165 intervention/forms/forms.py:64 #: intervention/forms/forms.py:81 intervention/forms/forms.py:97 #: intervention/forms/forms.py:113 intervention/forms/modalForms.py:49 +#: user/forms.py:196 msgid "Click for selection" msgstr "Auswählen..." @@ -751,7 +752,7 @@ msgstr "Menge" #: intervention/templates/intervention/detail/includes/documents.html:39 #: intervention/templates/intervention/detail/includes/payments.html:39 #: intervention/templates/intervention/detail/includes/revocation.html:43 -#: templates/log.html:10 +#: templates/log.html:10 user/templates/user/team/index.html:33 msgid "Action" msgstr "Aktionen" @@ -1150,12 +1151,12 @@ msgstr "Kompensation {} bearbeitet" msgid "Edit {}" msgstr "Bearbeite {}" -#: compensation/views/compensation.py:240 compensation/views/eco_account.py:349 +#: compensation/views/compensation.py:240 compensation/views/eco_account.py:351 #: ema/views.py:194 intervention/views.py:531 msgid "Log" msgstr "Log" -#: compensation/views/compensation.py:584 compensation/views/eco_account.py:716 +#: compensation/views/compensation.py:584 compensation/views/eco_account.py:719 #: ema/views.py:551 intervention/views.py:677 msgid "Report {}" msgstr "Bericht {}" @@ -1176,32 +1177,32 @@ msgstr "Ökokonto {} bearbeitet" msgid "Eco-account removed" msgstr "Ökokonto entfernt" -#: compensation/views/eco_account.py:370 ema/views.py:275 +#: compensation/views/eco_account.py:372 ema/views.py:275 #: intervention/views.py:630 msgid "{} unrecorded" msgstr "{} entzeichnet" -#: compensation/views/eco_account.py:370 ema/views.py:275 +#: compensation/views/eco_account.py:372 ema/views.py:275 #: intervention/views.py:630 msgid "{} recorded" msgstr "{} verzeichnet" -#: compensation/views/eco_account.py:789 ema/views.py:617 +#: compensation/views/eco_account.py:792 ema/views.py:617 #: intervention/views.py:428 msgid "{} has already been shared with you" msgstr "{} wurde bereits für Sie freigegeben" -#: compensation/views/eco_account.py:794 ema/views.py:622 +#: compensation/views/eco_account.py:797 ema/views.py:622 #: intervention/views.py:433 msgid "{} has been shared with you" msgstr "{} ist nun für Sie freigegeben" -#: compensation/views/eco_account.py:801 ema/views.py:629 +#: compensation/views/eco_account.py:804 ema/views.py:629 #: intervention/views.py:440 msgid "Share link invalid" msgstr "Freigabelink ungültig" -#: compensation/views/eco_account.py:824 ema/views.py:652 +#: compensation/views/eco_account.py:827 ema/views.py:652 #: intervention/views.py:463 msgid "Share settings updated" msgstr "Freigabe Einstellungen aktualisiert" @@ -2272,7 +2273,7 @@ msgstr "* sind Pflichtfelder." msgid "New entry" msgstr "Neuer Eintrag" -#: templates/generic_index.html:41 +#: templates/generic_index.html:41 user/templates/user/team/index.html:23 msgid "New" msgstr "Neu" @@ -2401,6 +2402,54 @@ msgstr "Neuen Token generieren" msgid "A new token needs to be validated by an administrator!" msgstr "Neue Tokens müssen durch Administratoren freigeschaltet werden!" +#: user/forms.py:168 user/forms.py:172 +msgid "Team name" +msgstr "Team Name" + +#: user/forms.py:179 user/templates/user/team/index.html:31 +msgid "Description" +msgstr "Beschreibung" + +#: user/forms.py:188 +msgid "Manage team members" +msgstr "Mitglieder verwalten" + +#: user/forms.py:190 +msgid "" +"Multiple selection possible - You can only select users which are not " +"already a team member. Enter the full username or e-mail." +msgstr "" +"Mehrfachauswahl möglich - Sie können nur Nutzer wählen, die noch nicht " +"Mitglieder dieses Teams sind. Geben Sie den ganzen Nutzernamen an." + +#: user/forms.py:204 +msgid "Create new team" +msgstr "Neues Team anlegen" + +#: user/forms.py:205 +msgid "" +"You will become the administrator for this group by default. You do not need " +"to add yourself to the list of members." +msgstr "" +"Sie werden standardmäßig der Administrator dieses Teams. Sie müssen sich " +"selbst nicht zur Liste der Mitglieder hinzufügen." + +#: user/forms.py:230 +msgid "Admin" +msgstr "Administrator" + +#: user/forms.py:231 +msgid "Administrators manage team details and members" +msgstr "Administratoren verwalten die Teamdaten und Mitglieder" + +#: user/forms.py:244 +msgid "Selected admin ({}) needs to be a member of this team." +msgstr "Gewählter Administrator ({}) muss ein Mitglied des Teams sein." + +#: user/forms.py:256 user/templates/user/team/index.html:52 +msgid "Edit team" +msgstr "Team bearbeiten" + #: user/models/user_action.py:22 msgid "Unrecorded" msgstr "Entzeichnet" @@ -2417,7 +2466,7 @@ msgstr "Gelöscht" msgid "Show contact data" msgstr "Zeige Kontaktdaten" -#: user/templates/user/index.html:13 +#: user/templates/user/index.html:13 user/templates/user/team/index.html:30 msgid "Name" msgstr "" @@ -2462,6 +2511,27 @@ msgstr "API token einsehen oder neu generieren" msgid "API" msgstr "" +#: user/templates/user/index.html:66 +msgid "Manage teams" +msgstr "" + +#: user/templates/user/index.html:69 user/templates/user/team/index.html:19 +#: user/views.py:142 +msgid "Teams" +msgstr "" + +#: user/templates/user/team/index.html:21 +msgid "Add new team" +msgstr "Neues Team hinzufügen" + +#: user/templates/user/team/index.html:32 +msgid "Members" +msgstr "Mitglieder" + +#: user/templates/user/team/index.html:55 +msgid "Remove team" +msgstr "Team entfernen" + #: user/templates/user/token.html:6 msgid "API settings" msgstr "API Einstellungen" @@ -2486,26 +2556,38 @@ msgstr "Token noch nicht freigeschaltet" msgid "Valid until" msgstr "Läuft ab am" -#: user/views.py:31 +#: user/views.py:33 msgid "User settings" msgstr "Einstellungen" -#: user/views.py:57 +#: user/views.py:59 msgid "Notifications edited" msgstr "Benachrichtigungen bearbeitet" -#: user/views.py:69 +#: user/views.py:71 msgid "User notifications" msgstr "Benachrichtigungen" -#: user/views.py:92 +#: user/views.py:94 msgid "New token generated. Administrators need to validate." msgstr "Neuer Token generiert. Administratoren sind informiert." -#: user/views.py:103 +#: user/views.py:105 msgid "User API token" msgstr "API Nutzer Token" +#: user/views.py:153 +msgid "New team added" +msgstr "Neues Team hinzugefügt" + +#: user/views.py:166 +msgid "Team edited" +msgstr "Team bearbeitet" + +#: user/views.py:179 +msgid "Team removed" +msgstr "Team gelöscht" + #: venv/lib/python3.7/site-packages/bootstrap4/components.py:17 #: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3 #: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/messages.html:4 diff --git a/user/forms.py b/user/forms.py index 1b509ba..35c1e82 100644 --- a/user/forms.py +++ b/user/forms.py @@ -233,10 +233,27 @@ class EditTeamModalForm(NewTeamModalForm): empty_label=None, ) + def __is_admin_valid(self): + admin = self.cleaned_data.get("admin", None) + members = self.cleaned_data.get("members", None) + _is_valid = admin in members + + if not _is_valid: + self.add_error( + "members", + _("Selected admin ({}) needs to be a member of this team.").format(admin.username) + ) + + return _is_valid + + def is_valid(self): + super_valid = super().is_valid() + admin_valid = self.__is_admin_valid() + return super_valid and admin_valid + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.form_title = _("Edit team") - self.form_caption = None self.action_url = reverse("user:team-edit", args=(self.instance.id,)) self.cancel_redirect = reverse("user:team-index") @@ -255,6 +272,7 @@ class EditTeamModalForm(NewTeamModalForm): with transaction.atomic(): self.instance.name = self.cleaned_data.get("name", None) self.instance.description = self.cleaned_data.get("description", None) + self.instance.admin = self.cleaned_data.get("admin", None) self.instance.save() self.instance.users.set(self.cleaned_data.get("members", [])) return self.instance diff --git a/user/templates/user/team/index.html b/user/templates/user/team/index.html index c8ce113..d2040a3 100644 --- a/user/templates/user/team/index.html +++ b/user/templates/user/team/index.html @@ -13,51 +13,53 @@ {% endblock %} {% block body %} -

{% trans 'Teams' %}

-
- -
-
- - - - - - - - - - - {% for team in teams %} +
+

{% trans 'Teams' %}

+
+ +
+
+
{% trans 'Name' %}{% trans 'Description' %}{% trans 'Members' %}{% trans 'Actions' %}
+ - - - - + + + + - {% endfor %} - -
{{team.name}} -
- {{team.description}} -
-
- {% for member in team.users.all %} - {{member.username}} - {% endfor %} - - {% if team.admin == user %} - - - {% endif %} - {% trans 'Name' %}{% trans 'Description' %}{% trans 'Members' %}{% trans 'Action' %}
+ + + {% for team in teams %} + + {{team.name}} + +
+ {{team.description}} +
+ + + {% for member in team.users.all %} + {{member.username}} + {% endfor %} + + + {% if team.admin == user %} + + + {% endif %} + + + {% endfor %} + + +
{% with 'btn-modal' as btn_class %}