mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-23 15:33:45 +00:00
Create preferences models and edition template
This commit is contained in:
parent
623df4a9c3
commit
b4edd7f4dc
7 changed files with 310 additions and 232 deletions
|
@ -256,57 +256,57 @@ msgstr "Modèles de document actuels"
|
|||
msgid "Current attributes"
|
||||
msgstr "Attributs actuels"
|
||||
|
||||
#: preferences/models.py:78
|
||||
#: preferences/models.py:56
|
||||
msgid "Users can't select their room"
|
||||
msgstr "Les utilisateurs ne peuvent pas modifier leur chambre"
|
||||
|
||||
#: preferences/models.py:79
|
||||
#: preferences/models.py:57
|
||||
msgid ""
|
||||
"Users can only 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:80
|
||||
#: preferences/models.py:58
|
||||
msgid "Users can select all rooms"
|
||||
msgstr "Les utilisateurs peuvent choisir toutes les chambres"
|
||||
|
||||
#: preferences/models.py:86
|
||||
#: preferences/models.py:64
|
||||
msgid "Users can create a club."
|
||||
msgstr "Les utilisateurs peuvent créer un club."
|
||||
|
||||
#: preferences/models.py:89
|
||||
#: preferences/models.py:67
|
||||
msgid "Users can create a member."
|
||||
msgstr "Les utilisateurs peuvent créer un adhérent."
|
||||
|
||||
#: preferences/models.py:95
|
||||
#: preferences/models.py:73
|
||||
msgid "Users can edit their shell."
|
||||
msgstr "Les utilisateurs peuvent modifier leur interface en ligne de commande."
|
||||
|
||||
#: preferences/models.py:101
|
||||
#: preferences/models.py:79
|
||||
msgid "Policy on self users room edition"
|
||||
msgstr "Autorisation d'édtion du champ chambre par les utilisateurs"
|
||||
|
||||
#: preferences/models.py:104
|
||||
#: preferences/models.py:82
|
||||
msgid "Enable local email accounts for users."
|
||||
msgstr "Activer les comptes mail locaux pour les utilisateurs."
|
||||
|
||||
#: preferences/models.py:109
|
||||
#: preferences/models.py:87
|
||||
msgid "Domain to use for local email accounts."
|
||||
msgstr "Domaine à utiliser pour les comptes mail locaux."
|
||||
|
||||
#: preferences/models.py:113
|
||||
#: preferences/models.py:91
|
||||
msgid "Maximum number of local email addresses for a standard user."
|
||||
msgstr ""
|
||||
"Nombre maximum d'adresses mail locales autorisé pour un utilisateur standard."
|
||||
|
||||
#: preferences/models.py:118
|
||||
#: preferences/models.py:96
|
||||
msgid "Not yet active users will be deleted after this number of days."
|
||||
msgstr ""
|
||||
"Les utilisateurs n'ayant jamais adhéré seront supprimés après ce nombre de "
|
||||
"jours."
|
||||
|
||||
#: preferences/models.py:124
|
||||
#: preferences/models.py:102
|
||||
msgid ""
|
||||
"Users with an email address not yet confirmed will be disabled after this "
|
||||
"number of days."
|
||||
|
@ -314,11 +314,11 @@ msgstr ""
|
|||
"Les utilisateurs n'ayant pas confirmé leur addresse mail seront désactivés "
|
||||
"après ce nombre de jours"
|
||||
|
||||
#: preferences/models.py:128
|
||||
#: preferences/models.py:106
|
||||
msgid "A new user can create their account on Re2o."
|
||||
msgstr "Un nouvel utilisateur peut créer son compte sur Re2o."
|
||||
|
||||
#: preferences/models.py:133
|
||||
#: preferences/models.py:111
|
||||
msgid ""
|
||||
"If True, all new created and connected users are active. If False, only when "
|
||||
"a valid registration has been paid."
|
||||
|
@ -326,7 +326,7 @@ msgstr ""
|
|||
"Si True, tous les nouveaux utilisations créés et connectés sont actifs. Si "
|
||||
"False, seulement quand une inscription validée a été payée."
|
||||
|
||||
#: preferences/models.py:140
|
||||
#: preferences/models.py:118
|
||||
msgid ""
|
||||
"If True, users have the choice to receive an email containing a link to "
|
||||
"reset their password during creation, or to directly set their password in "
|
||||
|
@ -337,172 +337,172 @@ msgstr ""
|
|||
"de choisir leur mot de passe immédiatement. Si False, un mail est toujours "
|
||||
"envoyé."
|
||||
|
||||
#: preferences/models.py:147
|
||||
#: preferences/models.py:125
|
||||
msgid "If True, archived users are allowed to connect."
|
||||
msgstr "Si True, les utilisateurs archivés sont autorisés à se connecter."
|
||||
|
||||
#: preferences/models.py:151
|
||||
#: preferences/models.py:129
|
||||
msgid "Can view the user preferences"
|
||||
msgstr "Peut voir les préférences d'utilisateur"
|
||||
|
||||
#: preferences/models.py:152
|
||||
#: preferences/models.py:130
|
||||
msgid "user preferences"
|
||||
msgstr "Préférences d'utilisateur"
|
||||
|
||||
#: preferences/models.py:159
|
||||
#: preferences/models.py:137
|
||||
msgid "Email domain must begin with @."
|
||||
msgstr "Un domaine mail doit commencer par @."
|
||||
|
||||
#: preferences/models.py:177
|
||||
#: preferences/models.py:155
|
||||
msgid "Automatic configuration by RA"
|
||||
msgstr "Configuration automatique par RA"
|
||||
|
||||
#: preferences/models.py:178
|
||||
#: preferences/models.py:156
|
||||
msgid "IP addresses assignment by DHCPv6"
|
||||
msgstr "Attribution d'adresses IP par DHCPv6"
|
||||
|
||||
#: preferences/models.py:179
|
||||
#: preferences/models.py:157
|
||||
msgid "Disabled"
|
||||
msgstr "Désactivé"
|
||||
|
||||
#: preferences/models.py:188
|
||||
#: preferences/models.py:166
|
||||
msgid "default Time To Live (TTL) for CNAME, A and AAAA records"
|
||||
msgstr ""
|
||||
"Temps de vie (TTL) par défault pour des enregistrements CNAME, A et AAAA"
|
||||
|
||||
#: preferences/models.py:198
|
||||
#: preferences/models.py:176
|
||||
msgid "Can view the machine preferences"
|
||||
msgstr "Peut voir les préférences de machine"
|
||||
|
||||
#: preferences/models.py:199
|
||||
#: preferences/models.py:177
|
||||
msgid "machine preferences"
|
||||
msgstr "Préférences de machine"
|
||||
|
||||
#: preferences/models.py:219 preferences/models.py:677
|
||||
#: preferences/models.py:197 preferences/models.py:655
|
||||
msgid "On the IP range's VLAN of the machine"
|
||||
msgstr "Sur le VLAN de la plage d'IP de la machine"
|
||||
|
||||
#: preferences/models.py:220 preferences/models.py:678
|
||||
#: preferences/models.py:198 preferences/models.py:656
|
||||
msgid "Preset in \"VLAN for machines accepted by RADIUS\""
|
||||
msgstr "Prédéfinie dans « VLAN pour les machines acceptées par RADIUS »"
|
||||
|
||||
#: preferences/models.py:226
|
||||
#: preferences/models.py:204
|
||||
msgid "Web management, activated in case of automatic provision."
|
||||
msgstr "Gestion web, activée en cas de provision automatique."
|
||||
|
||||
#: preferences/models.py:231
|
||||
#: preferences/models.py:209
|
||||
msgid ""
|
||||
"SSL web management, make sure that a certificate is installed on the switch."
|
||||
msgstr ""
|
||||
"Gestion web SSL, vérifiez qu'un certificat est installé sur le commutateur "
|
||||
"réseau."
|
||||
|
||||
#: preferences/models.py:237
|
||||
#: preferences/models.py:215
|
||||
msgid "REST management, activated in case of automatic provision."
|
||||
msgstr "Gestion REST, activée en cas de provision automatique."
|
||||
|
||||
#: preferences/models.py:244
|
||||
#: preferences/models.py:222
|
||||
msgid "IP range for the management of switches."
|
||||
msgstr "Plage d'IP pour la gestion des commutateurs réseau."
|
||||
|
||||
#: preferences/models.py:250
|
||||
#: preferences/models.py:228
|
||||
msgid "Provision of configuration mode for switches."
|
||||
msgstr "Mode de provision de configuration pour les commutateurs réseau."
|
||||
|
||||
#: preferences/models.py:253
|
||||
#: preferences/models.py:231
|
||||
msgid "SFTP login for switches."
|
||||
msgstr "Identifiant SFTP pour les commutateurs réseau."
|
||||
|
||||
#: preferences/models.py:256
|
||||
#: preferences/models.py:234
|
||||
msgid "SFTP password."
|
||||
msgstr "Mot de passe SFTP."
|
||||
|
||||
#: preferences/models.py:360
|
||||
#: preferences/models.py:338
|
||||
msgid "Can view the topology preferences"
|
||||
msgstr "Peut voir les préférences de topologie"
|
||||
|
||||
#: preferences/models.py:361
|
||||
#: preferences/models.py:339
|
||||
msgid "topology preferences"
|
||||
msgstr "préférences de topologie"
|
||||
|
||||
#: preferences/models.py:374
|
||||
#: preferences/models.py:352
|
||||
msgid "RADIUS key."
|
||||
msgstr "Clé RADIUS."
|
||||
|
||||
#: preferences/models.py:376
|
||||
#: preferences/models.py:354
|
||||
msgid "Comment for this key."
|
||||
msgstr "Commentaire pour cette clé."
|
||||
|
||||
#: preferences/models.py:379
|
||||
#: preferences/models.py:357
|
||||
msgid "Default key for switches."
|
||||
msgstr "Clé par défaut pour les commutateurs réseau."
|
||||
|
||||
#: preferences/models.py:383
|
||||
#: preferences/models.py:361
|
||||
msgid "Can view a RADIUS key object"
|
||||
msgstr "Peut voir un objet clé RADIUS"
|
||||
|
||||
#: preferences/models.py:384 preferences/views.py:331
|
||||
#: preferences/models.py:362 preferences/views.py:307
|
||||
msgid "RADIUS key"
|
||||
msgstr "Clé RADIUS"
|
||||
|
||||
#: preferences/models.py:385
|
||||
#: preferences/models.py:363
|
||||
#: preferences/templates/preferences/display_preferences.html:221
|
||||
msgid "RADIUS keys"
|
||||
msgstr "clés RADIUS"
|
||||
|
||||
#: preferences/models.py:392
|
||||
#: preferences/models.py:370
|
||||
msgid "Default RADIUS key for switches already exists."
|
||||
msgstr "Clé par défaut pour les commutateurs réseau."
|
||||
|
||||
#: preferences/models.py:395
|
||||
#: preferences/models.py:373
|
||||
msgid "RADIUS key "
|
||||
msgstr "clé RADIUS "
|
||||
|
||||
#: preferences/models.py:401
|
||||
#: preferences/models.py:379
|
||||
msgid "Switch login."
|
||||
msgstr "Identifiant du commutateur réseau."
|
||||
|
||||
#: preferences/models.py:402
|
||||
#: preferences/models.py:380
|
||||
msgid "Password."
|
||||
msgstr "Mot de passe."
|
||||
|
||||
#: preferences/models.py:404
|
||||
#: preferences/models.py:382
|
||||
msgid "Default credentials for switches."
|
||||
msgstr "Identifiants par défaut pour les commutateurs réseau."
|
||||
|
||||
#: preferences/models.py:411
|
||||
#: preferences/models.py:389
|
||||
msgid "Can view a switch management credentials object"
|
||||
msgstr "Peut voir un objet identifiants de gestion de commutateur réseau"
|
||||
|
||||
#: preferences/models.py:414 preferences/views.py:394
|
||||
#: preferences/models.py:392 preferences/views.py:370
|
||||
msgid "switch management credentials"
|
||||
msgstr "identifiants de gestion de commutateur réseau"
|
||||
|
||||
#: preferences/models.py:417
|
||||
#: preferences/models.py:395
|
||||
msgid "Switch login "
|
||||
msgstr "Identifiant du commutateur réseau "
|
||||
|
||||
#: preferences/models.py:429
|
||||
#: preferences/models.py:407
|
||||
msgid "Delay between the email and the membership's end."
|
||||
msgstr "Délai entre le mail et la fin d'adhésion."
|
||||
|
||||
#: preferences/models.py:435
|
||||
#: preferences/models.py:413
|
||||
msgid "Message displayed specifically for this reminder."
|
||||
msgstr "Message affiché spécifiquement pour ce rappel."
|
||||
|
||||
#: preferences/models.py:439
|
||||
#: preferences/models.py:417
|
||||
msgid "Can view a reminder object"
|
||||
msgstr "Peut voir un objet rappel"
|
||||
|
||||
#: preferences/models.py:440 preferences/views.py:276
|
||||
#: preferences/models.py:418 preferences/views.py:252
|
||||
msgid "reminder"
|
||||
msgstr "rappel"
|
||||
|
||||
#: preferences/models.py:441
|
||||
#: preferences/models.py:419
|
||||
msgid "reminders"
|
||||
msgstr "rappels"
|
||||
|
||||
#: preferences/models.py:462
|
||||
#: preferences/models.py:440
|
||||
msgid ""
|
||||
"General message displayed on the French version of the website (e.g. in case "
|
||||
"of maintenance)."
|
||||
|
@ -510,7 +510,7 @@ msgstr ""
|
|||
"Message général affiché sur la version française du site (ex : en cas de "
|
||||
"maintenance)."
|
||||
|
||||
#: preferences/models.py:470
|
||||
#: preferences/models.py:448
|
||||
msgid ""
|
||||
"General message displayed on the English version of the website (e.g. in "
|
||||
"case of maintenance)."
|
||||
|
@ -518,75 +518,75 @@ msgstr ""
|
|||
"Message général affiché sur la version anglaise du site (ex : en cas de "
|
||||
"maintenance)."
|
||||
|
||||
#: preferences/models.py:485
|
||||
#: preferences/models.py:463
|
||||
msgid "Can view the general preferences"
|
||||
msgstr "Peut voir les préférences générales"
|
||||
|
||||
#: preferences/models.py:486
|
||||
#: preferences/models.py:464
|
||||
msgid "general preferences"
|
||||
msgstr "préférences générales"
|
||||
|
||||
#: preferences/models.py:506
|
||||
#: preferences/models.py:484
|
||||
msgid "Can view the service preferences"
|
||||
msgstr "Peut voir les préférences de service"
|
||||
|
||||
#: preferences/models.py:507 preferences/views.py:227
|
||||
#: preferences/models.py:485 preferences/views.py:203
|
||||
msgid "service"
|
||||
msgstr "service"
|
||||
|
||||
#: preferences/models.py:508
|
||||
#: preferences/models.py:486
|
||||
msgid "services"
|
||||
msgstr "services"
|
||||
|
||||
#: preferences/models.py:518
|
||||
#: preferences/models.py:496
|
||||
msgid "Contact email address."
|
||||
msgstr "Adresse mail de contact."
|
||||
|
||||
#: preferences/models.py:524
|
||||
#: preferences/models.py:502
|
||||
msgid "Description of the associated email address."
|
||||
msgstr "Description de l'adresse mail associée."
|
||||
|
||||
#: preferences/models.py:534
|
||||
#: preferences/models.py:512
|
||||
msgid "Can view a contact email address object"
|
||||
msgstr "Peut voir un objet adresse mail de contact"
|
||||
|
||||
#: preferences/models.py:536
|
||||
#: preferences/models.py:514
|
||||
msgid "contact email address"
|
||||
msgstr "adresse mail de contact"
|
||||
|
||||
#: preferences/models.py:537
|
||||
#: preferences/models.py:515
|
||||
msgid "contact email addresses"
|
||||
msgstr "adresses mail de contact"
|
||||
|
||||
#: preferences/models.py:545 preferences/views.py:634
|
||||
#: preferences/models.py:523 preferences/views.py:610
|
||||
msgid "mandate"
|
||||
msgstr "mandat"
|
||||
|
||||
#: preferences/models.py:546
|
||||
#: preferences/models.py:524
|
||||
msgid "mandates"
|
||||
msgstr "mandats"
|
||||
|
||||
#: preferences/models.py:547
|
||||
#: preferences/models.py:525
|
||||
msgid "Can view a mandate object"
|
||||
msgstr "Peut voir un objet mandat"
|
||||
|
||||
#: preferences/models.py:554
|
||||
#: preferences/models.py:532
|
||||
msgid "president of the association"
|
||||
msgstr "président de l'association"
|
||||
|
||||
#: preferences/models.py:555
|
||||
#: preferences/models.py:533
|
||||
msgid "Displayed on subscription vouchers."
|
||||
msgstr "Affiché sur les reçus de cotisation."
|
||||
|
||||
#: preferences/models.py:557
|
||||
#: preferences/models.py:535
|
||||
msgid "start date"
|
||||
msgstr "date de début"
|
||||
|
||||
#: preferences/models.py:558
|
||||
#: preferences/models.py:536
|
||||
msgid "end date"
|
||||
msgstr "date de fin"
|
||||
|
||||
#: preferences/models.py:571
|
||||
#: preferences/models.py:549
|
||||
msgid ""
|
||||
"No mandates have been created. Please go to the preferences page to create "
|
||||
"one."
|
||||
|
@ -594,140 +594,140 @@ msgstr ""
|
|||
"Aucun mandat n'a été créé. Veuillez vous rendre sur la page de préférences "
|
||||
"pour en créer un."
|
||||
|
||||
#: preferences/models.py:586
|
||||
#: preferences/models.py:564
|
||||
msgid "Networking organisation school Something"
|
||||
msgstr "Association de réseau de l'école Machin"
|
||||
|
||||
#: preferences/models.py:589
|
||||
#: preferences/models.py:567
|
||||
msgid "Threadneedle Street"
|
||||
msgstr "1 rue de la Vrillière"
|
||||
|
||||
#: preferences/models.py:590
|
||||
#: preferences/models.py:568
|
||||
msgid "London EC2R 8AH"
|
||||
msgstr "75001 Paris"
|
||||
|
||||
#: preferences/models.py:593
|
||||
#: preferences/models.py:571
|
||||
msgid "Organisation"
|
||||
msgstr "Association"
|
||||
|
||||
#: preferences/models.py:600
|
||||
#: preferences/models.py:578
|
||||
msgid "Can view the organisation preferences"
|
||||
msgstr "Peut voir les préférences d'association"
|
||||
|
||||
#: preferences/models.py:601
|
||||
#: preferences/models.py:579
|
||||
msgid "organisation preferences"
|
||||
msgstr "préférences d'association"
|
||||
|
||||
#: preferences/models.py:619
|
||||
#: preferences/models.py:597
|
||||
msgid "Can view the homepage preferences"
|
||||
msgstr "Peut voir les préférences de page d'accueil"
|
||||
|
||||
#: preferences/models.py:620
|
||||
#: preferences/models.py:598
|
||||
msgid "homepage preferences"
|
||||
msgstr "Préférences de page d'accueil"
|
||||
|
||||
#: preferences/models.py:634
|
||||
#: preferences/models.py:612
|
||||
msgid "Welcome email in French."
|
||||
msgstr "Mail de bienvenue en français."
|
||||
|
||||
#: preferences/models.py:637
|
||||
#: preferences/models.py:615
|
||||
msgid "Welcome email in English."
|
||||
msgstr "Mail de bienvenue en anglais."
|
||||
|
||||
#: preferences/models.py:642
|
||||
#: preferences/models.py:620
|
||||
msgid "Can view the email message preferences"
|
||||
msgstr "Peut voir les préférences de message pour les mails"
|
||||
|
||||
#: preferences/models.py:644
|
||||
#: preferences/models.py:622
|
||||
msgid "email message preferences"
|
||||
msgstr "préférences de messages pour les mails"
|
||||
|
||||
#: preferences/models.py:649
|
||||
#: preferences/models.py:627
|
||||
msgid "RADIUS attribute"
|
||||
msgstr "attribut RADIUS"
|
||||
|
||||
#: preferences/models.py:650
|
||||
#: preferences/models.py:628
|
||||
msgid "RADIUS attributes"
|
||||
msgstr "attributs RADIUS"
|
||||
|
||||
#: preferences/models.py:654 preferences/views.py:587
|
||||
#: preferences/models.py:632 preferences/views.py:563
|
||||
msgid "attribute"
|
||||
msgstr "attribut"
|
||||
|
||||
#: preferences/models.py:655
|
||||
#: preferences/models.py:633
|
||||
msgid "See https://freeradius.org/rfc/attributes.html."
|
||||
msgstr "Voir https://freeradius.org/rfc/attributes.html."
|
||||
|
||||
#: preferences/models.py:657
|
||||
#: preferences/models.py:635
|
||||
msgid "value"
|
||||
msgstr "valeur"
|
||||
|
||||
#: preferences/models.py:659
|
||||
#: preferences/models.py:637
|
||||
msgid "comment"
|
||||
msgstr "commentaire"
|
||||
|
||||
#: preferences/models.py:660
|
||||
#: preferences/models.py:638
|
||||
msgid "Use this field to document this attribute."
|
||||
msgstr "Utilisez ce champ pour documenter cet attribut."
|
||||
|
||||
#: preferences/models.py:671
|
||||
#: preferences/models.py:649
|
||||
msgid "RADIUS policy"
|
||||
msgstr "politique de RADIUS"
|
||||
|
||||
#: preferences/models.py:672
|
||||
#: preferences/models.py:650
|
||||
#: preferences/templates/preferences/display_preferences.html:299
|
||||
msgid "RADIUS policies"
|
||||
msgstr "politiques de RADIUS"
|
||||
|
||||
#: preferences/models.py:683
|
||||
#: preferences/models.py:661
|
||||
msgid "Reject the machine"
|
||||
msgstr "Rejeter la machine"
|
||||
|
||||
#: preferences/models.py:684
|
||||
#: preferences/models.py:662
|
||||
msgid "Place the machine on the VLAN"
|
||||
msgstr "Placer la machine sur le VLAN"
|
||||
|
||||
#: preferences/models.py:693
|
||||
#: preferences/models.py:671
|
||||
msgid "policy for unknown machines"
|
||||
msgstr "politique pour les machines inconnues"
|
||||
|
||||
#: preferences/models.py:701
|
||||
#: preferences/models.py:679
|
||||
msgid "unknown machines VLAN"
|
||||
msgstr "VLAN pour les machines inconnues"
|
||||
|
||||
#: preferences/models.py:702
|
||||
#: preferences/models.py:680
|
||||
msgid "VLAN for unknown machines if not rejected."
|
||||
msgstr "VLAN pour les machines inconnues si non rejeté."
|
||||
|
||||
#: preferences/models.py:708
|
||||
#: preferences/models.py:686
|
||||
msgid "unknown machines attributes"
|
||||
msgstr "attributs pour les machines inconnues"
|
||||
|
||||
#: preferences/models.py:709
|
||||
#: preferences/models.py:687
|
||||
msgid "Answer attributes for unknown machines."
|
||||
msgstr "Attributs de réponse pour les machines inconnues."
|
||||
|
||||
#: preferences/models.py:715
|
||||
#: preferences/models.py:693
|
||||
msgid "policy for unknown ports"
|
||||
msgstr "politique pour les ports inconnus"
|
||||
|
||||
#: preferences/models.py:723
|
||||
#: preferences/models.py:701
|
||||
msgid "unknown ports VLAN"
|
||||
msgstr "VLAN pour les ports inconnus"
|
||||
|
||||
#: preferences/models.py:724
|
||||
#: preferences/models.py:702
|
||||
msgid "VLAN for unknown ports if not rejected."
|
||||
msgstr "VLAN pour les ports inconnus si non rejeté."
|
||||
|
||||
#: preferences/models.py:730
|
||||
#: preferences/models.py:708
|
||||
msgid "unknown ports attributes"
|
||||
msgstr "attributs pour les ports inconnus"
|
||||
|
||||
#: preferences/models.py:731
|
||||
#: preferences/models.py:709
|
||||
msgid "Answer attributes for unknown ports."
|
||||
msgstr "Attributs de réponse pour les ports inconnus."
|
||||
|
||||
#: preferences/models.py:738
|
||||
#: preferences/models.py:716
|
||||
msgid ""
|
||||
"Policy for machines connecting from unregistered rooms (relevant on ports "
|
||||
"with STRICT RADIUS mode)"
|
||||
|
@ -735,87 +735,87 @@ msgstr ""
|
|||
"Politique pour les machines se connectant depuis des chambre non "
|
||||
"enregistrées (pertinent pour les ports avec le mode de RADIUS STRICT)"
|
||||
|
||||
#: preferences/models.py:748
|
||||
#: preferences/models.py:726
|
||||
msgid "unknown rooms VLAN"
|
||||
msgstr "VLAN pour les chambres inconnues"
|
||||
|
||||
#: preferences/models.py:749
|
||||
#: preferences/models.py:727
|
||||
msgid "VLAN for unknown rooms if not rejected."
|
||||
msgstr "VLAN pour les chambres inconnues si non rejeté."
|
||||
|
||||
#: preferences/models.py:755
|
||||
#: preferences/models.py:733
|
||||
msgid "unknown rooms attributes"
|
||||
msgstr "attributs pour les chambres inconnues"
|
||||
|
||||
#: preferences/models.py:756
|
||||
#: preferences/models.py:734
|
||||
msgid "Answer attributes for unknown rooms."
|
||||
msgstr "Attributs de réponse pour les chambres inconnues."
|
||||
|
||||
#: preferences/models.py:762
|
||||
#: preferences/models.py:740
|
||||
msgid "policy for non members"
|
||||
msgstr "politique pour les non adhérents"
|
||||
|
||||
#: preferences/models.py:770
|
||||
#: preferences/models.py:748
|
||||
msgid "non members VLAN"
|
||||
msgstr "VLAN pour les non adhérents"
|
||||
|
||||
#: preferences/models.py:771
|
||||
#: preferences/models.py:749
|
||||
msgid "VLAN for non members if not rejected."
|
||||
msgstr "VLAN pour les non adhérents si non rejeté."
|
||||
|
||||
#: preferences/models.py:777
|
||||
#: preferences/models.py:755
|
||||
msgid "non members attributes"
|
||||
msgstr "attributs pour les non adhérents"
|
||||
|
||||
#: preferences/models.py:778
|
||||
#: preferences/models.py:756
|
||||
msgid "Answer attributes for non members."
|
||||
msgstr "Attributs de réponse pour les non adhérents."
|
||||
|
||||
#: preferences/models.py:784
|
||||
#: preferences/models.py:762
|
||||
msgid "policy for banned users"
|
||||
msgstr "politique pour les utilisateurs bannis"
|
||||
|
||||
#: preferences/models.py:792
|
||||
#: preferences/models.py:770
|
||||
msgid "banned users VLAN"
|
||||
msgstr "VLAN pour les utilisateurs bannis"
|
||||
|
||||
#: preferences/models.py:793
|
||||
#: preferences/models.py:771
|
||||
msgid "VLAN for banned users if not rejected."
|
||||
msgstr "VLAN pour les utilisateurs bannis si non rejeté."
|
||||
|
||||
#: preferences/models.py:799
|
||||
#: preferences/models.py:777
|
||||
msgid "banned users attributes"
|
||||
msgstr "attributs pour les utilisateurs bannis"
|
||||
|
||||
#: preferences/models.py:800
|
||||
#: preferences/models.py:778
|
||||
msgid "Answer attributes for banned users."
|
||||
msgstr "Attributs de réponse pour les utilisateurs bannis."
|
||||
|
||||
#: preferences/models.py:813
|
||||
#: preferences/models.py:791
|
||||
msgid "accepted users attributes"
|
||||
msgstr "attributs pour les utilisateurs acceptés"
|
||||
|
||||
#: preferences/models.py:814
|
||||
#: preferences/models.py:792
|
||||
msgid "Answer attributes for accepted users."
|
||||
msgstr "Attributs de réponse pour les utilisateurs acceptés."
|
||||
|
||||
#: preferences/models.py:841
|
||||
#: preferences/models.py:819
|
||||
msgid "subscription preferences"
|
||||
msgstr "préférences de cotisation"
|
||||
|
||||
#: preferences/models.py:845
|
||||
#: preferences/models.py:823
|
||||
msgid "template for invoices"
|
||||
msgstr "modèle pour les factures"
|
||||
|
||||
#: preferences/models.py:852
|
||||
#: preferences/models.py:830
|
||||
msgid "template for subscription vouchers"
|
||||
msgstr "modèle pour les reçus de cotisation"
|
||||
|
||||
#: preferences/models.py:858
|
||||
#: preferences/models.py:836
|
||||
msgid "send voucher by email when the invoice is controlled"
|
||||
msgstr "envoyer le reçu par mail quand la facture est contrôlée"
|
||||
|
||||
#: preferences/models.py:860
|
||||
#: preferences/models.py:838
|
||||
msgid ""
|
||||
"Be careful, if no mandate is defined on the preferences page, errors will be "
|
||||
"triggered when generating vouchers."
|
||||
|
@ -823,19 +823,19 @@ msgstr ""
|
|||
"Faites attention, si aucun mandat n'est défini sur la page de préférences, "
|
||||
"des erreurs seront déclenchées en générant des reçus."
|
||||
|
||||
#: preferences/models.py:872
|
||||
#: preferences/models.py:850
|
||||
msgid "template"
|
||||
msgstr "modèle"
|
||||
|
||||
#: preferences/models.py:873
|
||||
#: preferences/models.py:851
|
||||
msgid "name"
|
||||
msgstr "nom"
|
||||
|
||||
#: preferences/models.py:876
|
||||
#: preferences/models.py:854
|
||||
msgid "document template"
|
||||
msgstr "modèle de document"
|
||||
|
||||
#: preferences/models.py:877
|
||||
#: preferences/models.py:855
|
||||
msgid "document templates"
|
||||
msgstr "modèles de document"
|
||||
|
||||
|
@ -1035,9 +1035,9 @@ msgstr "Préférences générales"
|
|||
#: preferences/templates/preferences/display_preferences.html:417
|
||||
#: preferences/templates/preferences/display_preferences.html:495
|
||||
#: preferences/templates/preferences/edit_preferences.html:46
|
||||
#: preferences/views.py:212 preferences/views.py:261 preferences/views.py:307
|
||||
#: preferences/views.py:367 preferences/views.py:431 preferences/views.py:496
|
||||
#: preferences/views.py:572 preferences/views.py:619
|
||||
#: preferences/views.py:188 preferences/views.py:237 preferences/views.py:283
|
||||
#: preferences/views.py:343 preferences/views.py:407 preferences/views.py:472
|
||||
#: preferences/views.py:548 preferences/views.py:595
|
||||
msgid "Edit"
|
||||
msgstr "Modifier"
|
||||
|
||||
|
@ -1359,75 +1359,75 @@ msgstr "URL du compte Facebook"
|
|||
msgid "Editing of preferences"
|
||||
msgstr "Modification des préférences"
|
||||
|
||||
#: preferences/views.py:160
|
||||
#: preferences/utils/views.py:45
|
||||
msgid "Unknown object."
|
||||
msgstr "Objet inconnu."
|
||||
|
||||
#: preferences/views.py:179
|
||||
#: preferences/utils/views.py:64
|
||||
msgid "The preferences were edited."
|
||||
msgstr "Les préférences ont été modifiées."
|
||||
|
||||
#: preferences/views.py:191
|
||||
#: preferences/views.py:167
|
||||
msgid "The service was added."
|
||||
msgstr "Le service a été ajouté."
|
||||
|
||||
#: preferences/views.py:194 preferences/views.py:243 preferences/views.py:292
|
||||
#: preferences/views.py:349 preferences/views.py:412 preferences/views.py:471
|
||||
#: preferences/views.py:554 preferences/views.py:603
|
||||
#: preferences/views.py:170 preferences/views.py:219 preferences/views.py:268
|
||||
#: preferences/views.py:325 preferences/views.py:388 preferences/views.py:447
|
||||
#: preferences/views.py:530 preferences/views.py:579
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#: preferences/views.py:209
|
||||
#: preferences/views.py:185
|
||||
msgid "The service was edited."
|
||||
msgstr "Le service a été modifié."
|
||||
|
||||
#: preferences/views.py:224
|
||||
#: preferences/views.py:200
|
||||
msgid "The service was deleted."
|
||||
msgstr "Le service a été supprimé."
|
||||
|
||||
#: preferences/views.py:240
|
||||
#: preferences/views.py:216
|
||||
msgid "The reminder was added."
|
||||
msgstr "Le rappel a été ajouté."
|
||||
|
||||
#: preferences/views.py:258
|
||||
#: preferences/views.py:234
|
||||
msgid "The reminder was edited."
|
||||
msgstr "Le rappel a été modifié."
|
||||
|
||||
#: preferences/views.py:273
|
||||
#: preferences/views.py:249
|
||||
msgid "The reminder was deleted."
|
||||
msgstr "Le rappel a été supprimé."
|
||||
|
||||
#: preferences/views.py:289
|
||||
#: preferences/views.py:265
|
||||
msgid "The RADIUS key was added."
|
||||
msgstr "La clé RADIUS a été ajoutée."
|
||||
|
||||
#: preferences/views.py:304
|
||||
#: preferences/views.py:280
|
||||
msgid "The RADIUS key was edited."
|
||||
msgstr "La clé RADIUS a été modifiée."
|
||||
|
||||
#: preferences/views.py:320
|
||||
#: preferences/views.py:296
|
||||
msgid "The RADIUS key was deleted."
|
||||
msgstr "La clé RADIUS a été supprimée."
|
||||
|
||||
#: preferences/views.py:325
|
||||
#: preferences/views.py:301
|
||||
msgid "The RADIUS key is assigned to at least one switch, you can't delete it."
|
||||
msgstr ""
|
||||
"La clé RADIUS est assignée a au moins un commutateur réseau, vous ne pouvez "
|
||||
"pas la supprimer."
|
||||
|
||||
#: preferences/views.py:344
|
||||
#: preferences/views.py:320
|
||||
msgid "The switch management credentials were added."
|
||||
msgstr "Les identifiants de gestion de commutateur réseay ont été ajoutés."
|
||||
|
||||
#: preferences/views.py:364
|
||||
#: preferences/views.py:340
|
||||
msgid "The switch management credentials were edited."
|
||||
msgstr "Les identifiants de gestion de commutateur réseau ont été modifiés."
|
||||
|
||||
#: preferences/views.py:381
|
||||
#: preferences/views.py:357
|
||||
msgid "The switch management credentials were deleted."
|
||||
msgstr "Les identifiants de gestion de commutateur réseau ont été supprimés."
|
||||
|
||||
#: preferences/views.py:387
|
||||
#: preferences/views.py:363
|
||||
msgid ""
|
||||
"The switch management credentials are assigned to at least one switch, you "
|
||||
"can't delete them."
|
||||
|
@ -1435,44 +1435,44 @@ msgstr ""
|
|||
"Les identifiants de gestion de commutateur réseau sont assignés à au moins "
|
||||
"un commutateur réseau , vous ne pouvez pas les supprimer."
|
||||
|
||||
#: preferences/views.py:407
|
||||
#: preferences/views.py:383
|
||||
msgid "The contact email address was created."
|
||||
msgstr "L'adresse mail de contact a été supprimée."
|
||||
|
||||
#: preferences/views.py:428
|
||||
#: preferences/views.py:404
|
||||
msgid "The contact email address was edited."
|
||||
msgstr "L'adresse mail de contact a été modifiée."
|
||||
|
||||
#: preferences/views.py:446
|
||||
#: preferences/views.py:422
|
||||
msgid "The contact email adress was deleted."
|
||||
msgstr "L'adresse mail de contact a été supprimée."
|
||||
|
||||
#: preferences/views.py:449 preferences/views.py:536
|
||||
#: preferences/views.py:425 preferences/views.py:512
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: preferences/views.py:466
|
||||
#: preferences/views.py:442
|
||||
msgid "The document template was created."
|
||||
msgstr "Le modèle de document a été créé."
|
||||
|
||||
#: preferences/views.py:472
|
||||
#: preferences/views.py:448
|
||||
msgid "New document template"
|
||||
msgstr "Nouveau modèle de document"
|
||||
|
||||
#: preferences/views.py:491
|
||||
#: preferences/views.py:467
|
||||
msgid "The document template was edited."
|
||||
msgstr "Le modèle de document a été édité."
|
||||
|
||||
#: preferences/views.py:497
|
||||
#: preferences/views.py:473
|
||||
msgid "Edit document template"
|
||||
msgstr "Modifier le modèle de document"
|
||||
|
||||
#: preferences/views.py:520
|
||||
#: preferences/views.py:496
|
||||
#, python-format
|
||||
msgid "The document template %(document_template)s was deleted."
|
||||
msgstr "Le modèle de document %(document_template)s a été supprimé."
|
||||
|
||||
#: preferences/views.py:527
|
||||
#: preferences/views.py:503
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The document template %(document_template)s can't be deleted because it is "
|
||||
|
@ -1481,31 +1481,31 @@ msgstr ""
|
|||
"Le modèle de document %(document_template)s ne peut pas être supprimé car il "
|
||||
"est actuellement utilisé."
|
||||
|
||||
#: preferences/views.py:537
|
||||
#: preferences/views.py:513
|
||||
msgid "Delete document template"
|
||||
msgstr "Supprimer le modèle de document"
|
||||
|
||||
#: preferences/views.py:551
|
||||
#: preferences/views.py:527
|
||||
msgid "The attribute was added."
|
||||
msgstr "L'attribut a été ajouté."
|
||||
|
||||
#: preferences/views.py:569
|
||||
#: preferences/views.py:545
|
||||
msgid "The attribute was edited."
|
||||
msgstr "L'attribut a été modifié."
|
||||
|
||||
#: preferences/views.py:584
|
||||
#: preferences/views.py:560
|
||||
msgid "The attribute was deleted."
|
||||
msgstr "L'attribut a été supprimé."
|
||||
|
||||
#: preferences/views.py:600
|
||||
#: preferences/views.py:576
|
||||
msgid "The mandate was added."
|
||||
msgstr "Le mandat a été ajouté."
|
||||
|
||||
#: preferences/views.py:616
|
||||
#: preferences/views.py:592
|
||||
msgid "The mandate was edited."
|
||||
msgstr "Le mandat a été modifié."
|
||||
|
||||
#: preferences/views.py:631
|
||||
#: preferences/views.py:607
|
||||
msgid "The mandate was deleted."
|
||||
msgstr "Le mandat été supprimé."
|
||||
|
||||
|
|
|
@ -37,36 +37,14 @@ from django.utils.translation import ugettext_lazy as _
|
|||
|
||||
import machines.models
|
||||
|
||||
from .utils.models import PreferencesModel
|
||||
|
||||
from re2o.mixins import AclMixin, RevMixin
|
||||
from re2o.aes_field import AESEncryptedField
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
class PreferencesModel(models.Model):
|
||||
""" Base object for the Preferences objects
|
||||
Defines methods to handle the cache of the settings (they should
|
||||
not change a lot) """
|
||||
|
||||
@classmethod
|
||||
def set_in_cache(cls):
|
||||
""" Save the preferences in a server-side cache """
|
||||
instance, _created = cls.objects.get_or_create()
|
||||
cache.set(cls().__class__.__name__.lower(), instance, None)
|
||||
return instance
|
||||
|
||||
@classmethod
|
||||
def get_cached_value(cls, key):
|
||||
""" Get the preferences from the server-side cache """
|
||||
instance = cache.get(cls().__class__.__name__.lower())
|
||||
if instance is None:
|
||||
instance = cls.set_in_cache()
|
||||
return getattr(instance, key)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class OptionalUser(AclMixin, PreferencesModel):
|
||||
"""Options pour l'user : obligation ou nom du telephone,
|
||||
activation ou non du solde, autorisation du negatif, fingerprint etc"""
|
||||
|
|
|
@ -28,52 +28,53 @@ from __future__ import unicode_literals
|
|||
from django.conf.urls import url
|
||||
|
||||
from . import views
|
||||
from .views import edit_options
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(
|
||||
r"^edit_options/(?P<section>OptionalUser)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(
|
||||
r"^edit_options/(?P<section>OptionalMachine)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(
|
||||
r"^edit_options/(?P<section>OptionalTopologie)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(
|
||||
r"^edit_options/(?P<section>GeneralOption)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(
|
||||
r"^edit_options/(?P<section>AssoOption)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(
|
||||
r"^edit_options/(?P<section>HomeOption)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(
|
||||
r"^edit_options/(?P<section>MailMessageOption)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(
|
||||
r"^edit_options/(?P<section>RadiusOption)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(
|
||||
r"^edit_options/(?P<section>CotisationsOption)$",
|
||||
views.edit_options,
|
||||
edit_options,
|
||||
name="edit-options",
|
||||
),
|
||||
url(r"^add_service/$", views.add_service, name="add-service"),
|
||||
|
|
0
preferences/utils/__init__.py
Normal file
0
preferences/utils/__init__.py
Normal file
55
preferences/utils/models.py
Normal file
55
preferences/utils/models.py
Normal file
|
@ -0,0 +1,55 @@
|
|||
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
|
||||
# se veut agnostique au réseau considéré, de manière à être installable en
|
||||
# quelques clics.
|
||||
#
|
||||
# Copyright © 2020 Gabriel Détraz
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# App de gestion des machines pour re2o
|
||||
# Gabriel Détraz, Augustin Lemesle
|
||||
# Gplv2
|
||||
"""
|
||||
Utils for preferences
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.core.cache import cache
|
||||
from django.db import models
|
||||
|
||||
|
||||
class PreferencesModel(models.Model):
|
||||
""" Base object for the Preferences objects
|
||||
Defines methods to handle the cache of the settings (they should
|
||||
not change a lot) """
|
||||
|
||||
@classmethod
|
||||
def set_in_cache(cls):
|
||||
""" Save the preferences in a server-side cache """
|
||||
instance, _created = cls.objects.get_or_create()
|
||||
cache.set(cls().__class__.__name__.lower(), instance, None)
|
||||
return instance
|
||||
|
||||
@classmethod
|
||||
def get_cached_value(cls, key):
|
||||
""" Get the preferences from the server-side cache """
|
||||
instance = cache.get(cls().__class__.__name__.lower())
|
||||
if instance is None:
|
||||
instance = cls.set_in_cache()
|
||||
return getattr(instance, key)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
68
preferences/utils/views.py
Normal file
68
preferences/utils/views.py
Normal file
|
@ -0,0 +1,68 @@
|
|||
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
|
||||
# se veut agnostique au réseau considéré, de manière à être installable en
|
||||
# quelques clics.
|
||||
#
|
||||
# Copyright © 2020 Gabriel Détraz
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# App de gestion des machines pour re2o
|
||||
# Gabriel Détraz, Augustin Lemesle
|
||||
# Gplv2
|
||||
"""
|
||||
Utils for preferences
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from django.urls import reverse
|
||||
from django.shortcuts import redirect
|
||||
from django.contrib import messages
|
||||
from django.db.models import ProtectedError
|
||||
from django.db import transaction
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from reversion import revisions as reversion
|
||||
|
||||
from re2o.views import form
|
||||
|
||||
def edit_options_template_function(request, section, forms, models):
|
||||
""" Edition des préférences générales"""
|
||||
model = getattr(models, section, None)
|
||||
form_instance = getattr(forms, "Edit" + section + "Form", None)
|
||||
if not (model or form_instance):
|
||||
messages.error(request, _("Unknown object."))
|
||||
return redirect(reverse("preferences:display-options"))
|
||||
|
||||
options_instance, _created = model.objects.get_or_create()
|
||||
can, msg, permissions = options_instance.can_edit(request.user)
|
||||
if not can:
|
||||
messages.error(request, acl_error_message(msg, permissions))
|
||||
return redirect(reverse("index"))
|
||||
options = form_instance(
|
||||
request.POST or None, request.FILES or None, instance=options_instance
|
||||
)
|
||||
if options.is_valid():
|
||||
with transaction.atomic(), reversion.create_revision():
|
||||
options.save()
|
||||
reversion.set_user(request.user)
|
||||
reversion.set_comment(
|
||||
"Field(s) edited: %s"
|
||||
% ", ".join(field for field in options.changed_data)
|
||||
)
|
||||
messages.success(request, _("The preferences were edited."))
|
||||
return redirect(reverse("preferences:display-options"))
|
||||
return form({"options": options}, "preferences/edit_preferences.html", request)
|
||||
|
||||
|
|
@ -86,6 +86,7 @@ from .models import (
|
|||
from . import models
|
||||
from . import forms
|
||||
|
||||
from .utils.views import edit_options_template_function
|
||||
|
||||
@login_required
|
||||
@can_view_all(
|
||||
|
@ -153,32 +154,7 @@ def display_options(request):
|
|||
|
||||
@login_required
|
||||
def edit_options(request, section):
|
||||
""" Edition des préférences générales"""
|
||||
model = getattr(models, section, None)
|
||||
form_instance = getattr(forms, "Edit" + section + "Form", None)
|
||||
if not (model or form_instance):
|
||||
messages.error(request, _("Unknown object."))
|
||||
return redirect(reverse("preferences:display-options"))
|
||||
|
||||
options_instance, _created = model.objects.get_or_create()
|
||||
can, msg, permissions = options_instance.can_edit(request.user)
|
||||
if not can:
|
||||
messages.error(request, acl_error_message(msg, permissions))
|
||||
return redirect(reverse("index"))
|
||||
options = form_instance(
|
||||
request.POST or None, request.FILES or None, instance=options_instance
|
||||
)
|
||||
if options.is_valid():
|
||||
with transaction.atomic(), reversion.create_revision():
|
||||
options.save()
|
||||
reversion.set_user(request.user)
|
||||
reversion.set_comment(
|
||||
"Field(s) edited: %s"
|
||||
% ", ".join(field for field in options.changed_data)
|
||||
)
|
||||
messages.success(request, _("The preferences were edited."))
|
||||
return redirect(reverse("preferences:display-options"))
|
||||
return form({"options": options}, "preferences/edit_preferences.html", request)
|
||||
return edit_options_template_function(request, section, forms, models)
|
||||
|
||||
|
||||
@login_required
|
||||
|
|
Loading…
Reference in a new issue