From ae7f1aaf380665882575a8995c3f5f0044735492 Mon Sep 17 00:00:00 2001 From: Jean-Romain Garnier Date: Wed, 15 Apr 2020 19:55:35 +0200 Subject: [PATCH] Add option enabling regular users to take a disabled user's room --- preferences/locale/fr/LC_MESSAGES/django.po | 8 +++++++ ...user_self_force_move_disabled_user_room.py | 20 ++++++++++++++++ preferences/models.py | 3 +++ .../preferences/display_preferences.html | 6 +++-- users/forms.py | 23 +++++++++++++++++++ 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 preferences/migrations/0068_optionaluser_self_force_move_disabled_user_room.py diff --git a/preferences/locale/fr/LC_MESSAGES/django.po b/preferences/locale/fr/LC_MESSAGES/django.po index 4c43a549..b64fd0a1 100644 --- a/preferences/locale/fr/LC_MESSAGES/django.po +++ b/preferences/locale/fr/LC_MESSAGES/django.po @@ -268,6 +268,10 @@ msgstr "Les utilisateurs peuvent créer un adhérent." msgid "Users can edit their shell." msgstr "Les utilisateurs peuvent modifier leur interface en ligne de commande." +#: preferences/models.py:92 +msgid "Users can select a room occupied by a user with a disabled connection." +msgstr "Les utilisateurs peuvent sélectionner la chambre d'un adhérent dont la connexion est désactivée." + #: preferences/models.py:90 msgid "Users can edit their room." msgstr "Les utilisateurs peuvent modifier leur chambre." @@ -1111,6 +1115,10 @@ msgstr "Les utilisateurs peuvent modifier leur interface en ligne de commande" msgid "Users can edit their room" msgstr "Les utilisateurs peuvent modifier leur chambre" +#: preferences/templates/preferences/display_preferences.html:144 +msgid "Users can select a room occupied by a user with a disabled connection" +msgstr "Les utilisateurs peuvent sélectionner la chambre d'un adhérent dont la connexion est désactivée" + #: preferences/templates/preferences/display_preferences.html:154 msgid "GPG fingerprint field" msgstr "Champ empreinte GPG" diff --git a/preferences/migrations/0068_optionaluser_self_force_move_disabled_user_room.py b/preferences/migrations/0068_optionaluser_self_force_move_disabled_user_room.py new file mode 100644 index 00000000..97588be6 --- /dev/null +++ b/preferences/migrations/0068_optionaluser_self_force_move_disabled_user_room.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.28 on 2020-04-15 16:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('preferences', '0067_auto_20191120_0159'), + ] + + operations = [ + migrations.AddField( + model_name='optionaluser', + name='self_force_move_disabled_user_room', + field=models.BooleanField(default=False, help_text='Users can select a room occupied by a user with a dissabled connection.'), + ), + ] diff --git a/preferences/models.py b/preferences/models.py index e470303d..5773bcc3 100644 --- a/preferences/models.py +++ b/preferences/models.py @@ -89,6 +89,9 @@ class OptionalUser(AclMixin, PreferencesModel): self_change_room = models.BooleanField( default=False, help_text=_("Users can edit their room.") ) + self_force_move_disabled_user_room = models.BooleanField( + default=False, help_text=_("Users can select a room occupied by a user with a disabled connection.") + ) local_email_accounts_enabled = models.BooleanField( default=False, help_text=_("Enable local email accounts for users.") ) diff --git a/preferences/templates/preferences/display_preferences.html b/preferences/templates/preferences/display_preferences.html index 8eb75918..057f7159 100644 --- a/preferences/templates/preferences/display_preferences.html +++ b/preferences/templates/preferences/display_preferences.html @@ -147,10 +147,12 @@ with this program; if not, write to the Free Software Foundation, Inc., {% trans "Users can edit their room" %} {{ useroptions.self_change_room|tick }} - {% trans "Telephone number required" %} - {{ useroptions.is_tel_mandatory|tick }} + {% trans "Users can select a room occupied by a user with a disabled connection" %} + {{ useroptions.self_force_move_disabled_user_room|tick }} + {% trans "Telephone number required" %} + {{ useroptions.is_tel_mandatory|tick }} {% trans "GPG fingerprint field" %} {{ useroptions.gpg_fingerprint|tick }} diff --git a/users/forms.py b/users/forms.py index 8e60b698..369290aa 100644 --- a/users/forms.py +++ b/users/forms.py @@ -351,6 +351,29 @@ class AdherentForm(FormRevMixin, FieldPermissionFormMixin, ModelForm): label=_("Force the move?"), initial=False, required=False ) + def clean(self): + # Handle case where regular users can force move + can_force_move = OptionalUser.get_cached_value("self_force_move_disabled_user_room") + if not can_force_move: + return super(AdherentForm, self).clean() + + # Ensure the user entered a proper room + room = self.cleaned_data.get("room") + if not room: + return super(AdherentForm, self).clean() + + try: + # If a user already is register for this room + # but their connection has expired, allow force move + user = Adherent.objects.get(room=room) + if user and not user.is_connected(): + remove_user_room(room) + except Adherent.DoesNotExist: + pass + + # Run standard clean process + return super(AdherentForm, self).clean() + def clean_email(self): if not OptionalUser.objects.first().local_email_domain in self.cleaned_data.get( "email"