8
0
Fork 0
mirror of https://gitlab.federez.net/re2o/re2o synced 2024-05-18 16:43:11 +00:00

Create preferences models and edition template

This commit is contained in:
Gabriel Detraz 2020-04-22 18:12:37 +02:00
parent 6d8fa42487
commit 502d9606ca
7 changed files with 310 additions and 232 deletions

View file

@ -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é."

View file

@ -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"""

View file

@ -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"),

View file

View 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

View 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)

View file

@ -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