8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-12-27 09:23:47 +00:00

Merge branch 'add-thumbnail-to-user-model' into 'dev'

Add thumbnail to user model

See merge request re2o/re2o!533
This commit is contained in:
klafyvel 2020-05-19 16:30:33 +02:00
commit abc2748c56
23 changed files with 725 additions and 632 deletions

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2019-01-07 01:37+0100\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language: fr_FR\n"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2018-06-23 16:01+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -54,7 +54,7 @@ msgstr "Accès gracieux"
msgid "Bans"
msgstr "Bannissements"
#: logs/forms.py:45 logs/views.py:424
#: logs/forms.py:45 logs/views.py:430
msgid "Topology"
msgstr "Topologie"
@ -70,7 +70,7 @@ msgstr "IPv4"
msgid "MAC address"
msgstr "Adresse MAC"
#: logs/forms.py:101 logs/templates/logs/detailed_history.html:38
#: logs/forms.py:101
msgid "Performed by"
msgstr "Effectué(e) par"
@ -89,7 +89,7 @@ msgid "End date"
msgstr "Date de fin"
#: logs/forms.py:128 logs/templates/logs/search_machine_history.html:38
#: logs/templates/logs/search_stats_logs.html:38
#: logs/templates/logs/search_stats_logs.html:36
msgid "Search"
msgstr "Rechercher"
@ -97,24 +97,22 @@ msgstr "Rechercher"
msgid "Search type"
msgstr "Type de recherche"
#: logs/models.py:314 logs/models.py:498 logs/models.py:531 logs/models.py:614
#: logs/models.py:706 logs/models.py:744
#: logs/models.py:310 logs/models.py:552 logs/models.py:585 logs/models.py:798
msgid "None"
msgstr "Aucun(e)"
#: logs/models.py:508 logs/models.py:527 logs/models.py:541 logs/models.py:686
#: logs/models.py:731 logs/models.py:736 logs/models.py:741 logs/models.py:751
#: logs/views.py:604
#: logs/models.py:562 logs/models.py:581 logs/models.py:595 logs/models.py:749
#: logs/models.py:785 logs/models.py:790 logs/models.py:795 logs/models.py:805
#: logs/views.py:605
msgid "Deleted"
msgstr "Supprimé(e)"
#: logs/models.py:515 logs/models.py:520
#: logs/templates/logs/detailed_history.html:52
#: logs/models.py:569 logs/models.py:574
#: logs/templates/logs/machine_history.html:55
msgid "Unknown"
msgstr "Inconnu(e)"
#: logs/models.py:739
#: logs/models.py:793
msgid "No name"
msgstr "Sans nom"
@ -131,19 +129,15 @@ msgid "Date of editing"
msgstr "Date de modification"
#: logs/templates/logs/aff_stats_logs.html:41
#: logs/templates/logs/detailed_history.html:39
msgid "Edited"
msgstr "Modifié"
#: logs/templates/logs/aff_stats_logs.html:42
#: logs/templates/logs/detailed_history.html:40
#: logs/templates/logs/machine_history.html:39
msgid "Comment"
msgstr "Commentaire"
#: logs/templates/logs/aff_stats_logs.html:51
#: logs/templates/logs/detailed_history.html:28
#: logs/templates/logs/detailed_history.html:85
msgid "History"
msgstr "Historique"
@ -184,7 +178,6 @@ msgid "Rank"
msgstr "Rang"
#: logs/templates/logs/aff_summary.html:37
#: logs/templates/logs/detailed_history.html:37
msgid "Date"
msgstr "Date"
@ -248,19 +241,6 @@ msgstr ""
msgid "Confirm"
msgstr "Confirmer"
#: logs/templates/logs/detailed_history.html:31
#, python-format
msgid "History of %(title)s"
msgstr "Historique de %(title)s"
#: logs/templates/logs/detailed_history.html:75
msgid "No event"
msgstr "Aucun évènement"
#: logs/templates/logs/detailed_history.html:80
msgid "Related elements"
msgstr "Élements liés"
#: logs/templates/logs/index.html:29 logs/templates/logs/stats_general.html:29
#: logs/templates/logs/stats_logs.html:29
#: logs/templates/logs/stats_models.html:29
@ -269,7 +249,7 @@ msgid "Statistics"
msgstr "Statistiques"
#: logs/templates/logs/index.html:32 logs/templates/logs/stats_logs.html:32
#: logs/views.py:439
#: logs/views.py:445
msgid "Actions performed"
msgstr "Actions effectuées"
@ -294,8 +274,8 @@ msgstr "Aucun résultat"
msgid "Search machine history"
msgstr "Rechercher l'historique des machines"
#: logs/templates/logs/search_stats_logs.html:27
#: logs/templates/logs/search_stats_logs.html:32
#: logs/templates/logs/search_stats_logs.html:28
#: logs/templates/logs/search_stats_logs.html:33
msgid "Search events"
msgstr "Recherche les évènements"
@ -335,134 +315,143 @@ msgstr "Statistiques sur la base de données"
msgid "Statistics about users"
msgstr "Statistiques sur les utilisateurs"
#: logs/views.py:196
#: logs/views.py:192
msgid "Nonexistent revision."
msgstr "Révision inexistante."
#: logs/views.py:199
#: logs/views.py:195
msgid "The action was deleted."
msgstr "L'action a été supprimée."
#: logs/views.py:240
#: logs/views.py:236
msgid "Category"
msgstr "Catégorie"
#: logs/views.py:241
#: logs/views.py:237
msgid "Number of users (members and clubs)"
msgstr "Nombre d'utilisateurs (adhérents et clubs)"
#: logs/views.py:242
#: logs/views.py:238
msgid "Number of members"
msgstr "Nombre d'adhérents"
#: logs/views.py:243
#: logs/views.py:239
msgid "Number of clubs"
msgstr "Nombre de clubs"
#: logs/views.py:247
#: logs/views.py:243
msgid "Activated users"
msgstr "Utilisateurs activés"
#: logs/views.py:253
#: logs/views.py:249
msgid "Disabled users"
msgstr "Utilisateurs désactivés"
#: logs/views.py:259
#: logs/views.py:255
msgid "Archived users"
msgstr "Utilisateurs archivés"
#: logs/views.py:265
#: logs/views.py:261
msgid "Fully archived users"
msgstr "Utilisateurs complètement archivés"
#: logs/views.py:275
#: logs/views.py:271
msgid "Not yet active users"
msgstr "Utilisateurs pas encore actifs"
#: logs/views.py:285
#: logs/views.py:281
msgid "Contributing members"
msgstr "Adhérents cotisants"
#: logs/views.py:291
#: logs/views.py:287
msgid "Users benefiting from a connection"
msgstr "Utilisateurs bénéficiant d'une connexion"
#: logs/views.py:297
#: logs/views.py:293
msgid "Banned users"
msgstr "Utilisateurs bannis"
#: logs/views.py:303
#: logs/views.py:299
msgid "Users benefiting from a free connection"
msgstr "Utilisateurs bénéficiant d'une connexion gratuite"
#: logs/views.py:309
#: logs/views.py:305
msgid "Users with a confirmed email"
msgstr "Utilisateurs ayant un mail confirmé"
#: logs/views.py:315
#: logs/views.py:313
msgid "Users with an unconfirmed email"
msgstr "Utilisateurs ayant un mail non confirmé"
#: logs/views.py:321
#: logs/views.py:325
msgid "Users pending email confirmation"
msgstr "Utilisateurs en attente de confirmation du mail"
#: logs/views.py:327
#: logs/views.py:333
msgid "Active interfaces (with access to the network)"
msgstr "Interfaces actives (ayant accès au réseau)"
#: logs/views.py:341
#: logs/views.py:347
msgid "Active interfaces assigned IPv4"
msgstr "Interfaces actives assignées IPv4"
#: logs/views.py:358
#: logs/views.py:364
msgid "IP range"
msgstr "Plage d'IP"
#: logs/views.py:359
#: logs/views.py:365
msgid "VLAN"
msgstr "VLAN"
#: logs/views.py:360
#: logs/views.py:366
msgid "Total number of IP addresses"
msgstr "Nombre total d'adresses IP"
#: logs/views.py:361
#: logs/views.py:367
msgid "Number of assigned IP addresses"
msgstr "Nombre d'adresses IP assignées"
#: logs/views.py:362
#: logs/views.py:368
msgid "Number of IP address assigned to an activated machine"
msgstr "Nombre d'adresses IP assignées à une machine activée"
#: logs/views.py:363
#: logs/views.py:369
msgid "Number of unassigned IP addresses"
msgstr "Nombre d'adresses IP non assignées"
#: logs/views.py:378
#: logs/views.py:384
msgid "Users (members and clubs)"
msgstr "Utilisateurs (adhérents et clubs)"
#: logs/views.py:440
#: logs/views.py:446
msgid "Number of actions"
msgstr "Nombre d'actions"
#: logs/views.py:465
#: logs/views.py:473
msgid "rights"
msgstr "droits"
#: logs/views.py:494
#: logs/views.py:504
msgid "actions"
msgstr "actions"
#: logs/views.py:544 logs/views.py:595
msgid "Nonexistent entry."
msgstr "Entrée inexistante."
#: logs/views.py:557
#: logs/views.py:549
msgid "You don't have the right to access this menu."
msgstr "Vous n'avez pas le droit d'accéder à ce menu."
#: logs/views.py:582 logs/views.py:638
#: logs/views.py:584
msgid "No model found."
msgstr "Aucun modèle trouvé."
#: logs/views.py:595
msgid "Nonexistent entry."
msgstr "Entrée inexistante."
#~ msgid "History of %(title)s"
#~ msgstr "Historique de %(title)s"
#~ msgid "No event"
#~ msgstr "Aucun évènement"
#~ msgid "Related elements"
#~ msgstr "Élements liés"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-30 22:19+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2018-06-23 16:35+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -163,27 +163,27 @@ msgstr "machine"
msgid "machines"
msgstr "machines"
#: machines/models.py:114
#: machines/models.py:106
msgid "You don't have the right to change the machine's user."
msgstr "Vous n'avez pas le droit de changer l'utilisateur de la machine."
#: machines/models.py:129
#: machines/models.py:121
msgid "You don't have the right to view all the machines."
msgstr "Vous n'avez pas le droit de voir toutes les machines."
#: machines/models.py:144
#: machines/models.py:136
msgid "Nonexistent user."
msgstr "Utilisateur inexistant."
#: machines/models.py:154 machines/models.py:1305
#: machines/models.py:146 machines/models.py:1295
msgid "You don't have the right to add a machine."
msgstr "Vous n'avez pas le droit d'ajouter une machine."
#: machines/models.py:160
#: machines/models.py:152
msgid "You don't have the right to add a machine to another user."
msgstr "Vous n'avez pas le droit d'ajouter une machine à un autre utilisateur."
#: machines/models.py:168 machines/models.py:1322
#: machines/models.py:159 machines/models.py:1314
#, python-format
msgid ""
"You reached the maximum number of interfaces that you are allowed to create "
@ -192,78 +192,78 @@ msgstr ""
"Vous avez atteint le nombre maximal d'interfaces que vous pouvez créer vous-"
"même (%s)."
#: machines/models.py:189
#: machines/models.py:180 machines/models.py:1346
msgid "You don't have the right to edit a machine of another user."
msgstr ""
"Vous n'avez pas le droit de modifier une machine d'un autre utilisateur."
#: machines/models.py:209
#: machines/models.py:199
msgid "You don't have the right to delete a machine of another user."
msgstr ""
"Vous n'avez pas le droit de supprimer une machine d'une autre utilisateur."
#: machines/models.py:228 machines/models.py:1764
#: machines/models.py:218 machines/models.py:1763
msgid "You don't have the right to view other machines than yours."
msgstr "Vous n'avez pas le droit de voir d'autres machines que les vôtres."
#: machines/models.py:242 machines/templates/machines/aff_machines.html:53
#: machines/models.py:231 machines/templates/machines/aff_machines.html:53
msgid "No name"
msgstr "Sans nom"
#: machines/models.py:319
#: machines/models.py:308
msgid "Can view a machine type object"
msgstr "Peut voir un objet type de machine"
#: machines/models.py:320
#: machines/models.py:309
msgid "Can use all machine types"
msgstr "Peut utiliser tous les types de machine"
#: machines/models.py:322
#: machines/models.py:311
msgid "machine type"
msgstr "type de machine"
#: machines/models.py:323
#: machines/models.py:312
msgid "machine types"
msgstr "types de machine"
#: machines/models.py:343
#: machines/models.py:332
msgid "You don't have the right to use all machine types."
msgstr "Vous n'avez pas le droit d'utiliser tous les types de machine."
#: machines/models.py:364
#: machines/models.py:353
msgid "Network containing the domain's IPv4 range (optional)."
msgstr "Réseau contenant la plage IPv4 du domaine (optionnel)."
#: machines/models.py:369
#: machines/models.py:358
msgid "Netmask for the domain's IPv4 range."
msgstr "Masque de sous-réseau pour la plage IPv4 du domaine."
#: machines/models.py:372
#: machines/models.py:361
msgid "Enable reverse DNS for IPv4."
msgstr "Activer DNS inverse pour IPv4."
#: machines/models.py:379
#: machines/models.py:368
msgid "Enable reverse DNS for IPv6."
msgstr "Activer DNS inverse pour IPv6."
#: machines/models.py:386
#: machines/models.py:375
msgid "Can view an IP type object"
msgstr "Peut voir un objet type d'IP"
#: machines/models.py:387
#: machines/models.py:376
msgid "Can use all IP types"
msgstr "Peut utiliser tous les types d'IP"
#: machines/models.py:389 machines/templates/machines/aff_iptype.html:35
#: machines/models.py:378 machines/templates/machines/aff_iptype.html:35
#: machines/templates/machines/machine.html:108
msgid "IP type"
msgstr "type d'IP"
#: machines/models.py:390
#: machines/models.py:379
msgid "IP types"
msgstr "types d'IP"
#: machines/models.py:499
#: machines/models.py:488
msgid ""
"One or several IP addresses from the range are affected, impossible to "
"delete the range."
@ -271,25 +271,25 @@ msgstr ""
"Une ou plusieurs adresses IP de la plage sont affectées, impossible de "
"supprimer la plage."
#: machines/models.py:546
#: machines/models.py:535
msgid "Domaine IPv4 start and stop must be valid"
msgstr "Les valeurs IPv4 Domaine ip start et stop doivent être valides"
#: machines/models.py:548
#: machines/models.py:537
msgid "Range end must be after range start..."
msgstr "La fin de la plage doit être après le début..."
#: machines/models.py:553
#: machines/models.py:542
msgid "The range is too large, you can't create a larger one than a /16."
msgstr ""
"La plage est trop grande, vous ne pouvez pas en créer une plus grande "
"qu'un /16."
#: machines/models.py:561
#: machines/models.py:550
msgid "The specified range is not disjoint from existing ranges."
msgstr "La plage renseignée n'est pas disjointe des plages existantes."
#: machines/models.py:575
#: machines/models.py:563
msgid ""
"If you specify a domain network or netmask, it must contain the domain's IP "
"range."
@ -297,47 +297,47 @@ msgstr ""
"Si vous renseignez un réseau ou masque de sous-réseau, il doit contenir la "
"plage IP du domaine."
#: machines/models.py:613
#: machines/models.py:601
msgid "v4 multicast management."
msgstr "gestion de multidiffusion v4."
#: machines/models.py:614
#: machines/models.py:602
msgid "v6 multicast management."
msgstr "gestion de multidiffusion v6."
#: machines/models.py:617
#: machines/models.py:605
msgid "Can view a VLAN object"
msgstr "Peut voir un objet VLAN"
#: machines/models.py:618 machines/templates/machines/machine.html:160
#: machines/models.py:606 machines/templates/machines/machine.html:160
msgid "VLAN"
msgstr "VLAN"
#: machines/models.py:619 machines/templates/machines/sidebar.html:57
#: machines/models.py:607 machines/templates/machines/sidebar.html:57
msgid "VLANs"
msgstr "VLANs"
#: machines/models.py:631
#: machines/models.py:619
msgid "MAC-address"
msgstr "MAC-address"
#: machines/models.py:646
#: machines/models.py:634
msgid "Can view a NAS device object"
msgstr "Peut voir un objet dispositif NAS"
#: machines/models.py:647 machines/templates/machines/machine.html:164
#: machines/models.py:635 machines/templates/machines/machine.html:164
msgid "NAS device"
msgstr "dispositif NAS"
#: machines/models.py:648 machines/templates/machines/sidebar.html:63
#: machines/models.py:636 machines/templates/machines/sidebar.html:63
msgid "NAS devices"
msgstr "dispositifs NAS"
#: machines/models.py:662
#: machines/models.py:650
msgid "Contact email address for the zone."
msgstr "Adresse mail de contact pour la zone."
#: machines/models.py:666
#: machines/models.py:654
msgid ""
"Seconds before the secondary DNS have to ask the primary DNS serial to "
"detect a modification."
@ -345,7 +345,7 @@ msgstr ""
"Secondes avant que le DNS secondaire demande au DNS primaire le serial pour "
"détecter une modification."
#: machines/models.py:673
#: machines/models.py:661
msgid ""
"Seconds before the secondary DNS ask the serial again in case of a primary "
"DNS timeout."
@ -353,7 +353,7 @@ msgstr ""
"Secondes avant que le DNS secondaire demande le serial de nouveau dans le "
"cas d'un délai d'attente du DNS primaire."
#: machines/models.py:680
#: machines/models.py:668
msgid ""
"Seconds before the secondary DNS stop answering requests in case of primary "
"DNS timeout."
@ -361,121 +361,121 @@ msgstr ""
"Secondes avant que le DNS secondaire arrête de répondre aux requêtes dans le "
"cas d'un délai d'attente du DNS primaire."
#: machines/models.py:685 machines/models.py:952
#: machines/models.py:673 machines/models.py:940
msgid "Time To Live."
msgstr "Temps de vie"
#: machines/models.py:689
#: machines/models.py:677
msgid "Can view an SOA record object"
msgstr "Peut voir un objet enregistrement SOA"
#: machines/models.py:690 machines/templates/machines/aff_extension.html:36
#: machines/models.py:678 machines/templates/machines/aff_extension.html:36
#: machines/templates/machines/machine.html:120
msgid "SOA record"
msgstr "enregistrement SOA"
#: machines/models.py:691
#: machines/models.py:679
msgid "SOA records"
msgstr "enregistrements SOA"
#: machines/models.py:730
#: machines/models.py:718
msgid "SOA to edit"
msgstr "SOA à modifier"
#: machines/models.py:741
#: machines/models.py:729
msgid "Zone name, must begin with a dot (.example.org)."
msgstr "Nom de zone, doit commencer par un point (.example.org)."
#: machines/models.py:749
#: machines/models.py:737
msgid "A record associated with the zone."
msgstr "Enregistrement A associé à la zone."
#: machines/models.py:755
#: machines/models.py:743
msgid "AAAA record associated with the zone."
msgstr "Enregristrement AAAA associé avec la zone."
#: machines/models.py:759
#: machines/models.py:747
msgid "Should the zone be signed with DNSSEC."
msgstr "La zone doit-elle être signée avec DNSSEC."
#: machines/models.py:764
#: machines/models.py:752
msgid "Can view an extension object"
msgstr "Peut voir un objet extension"
#: machines/models.py:765
#: machines/models.py:753
msgid "Can use all extensions"
msgstr "Peut utiliser toutes les extensions"
#: machines/models.py:767
#: machines/models.py:755
msgid "DNS extension"
msgstr "extension DNS"
#: machines/models.py:768
#: machines/models.py:756
msgid "DNS extensions"
msgstr "extensions DNS"
#: machines/models.py:828
#: machines/models.py:816
msgid "You don't have the right to use all extensions."
msgstr "Vous n'avez pas le droit d'utiliser toutes les extensions."
#: machines/models.py:837
#: machines/models.py:825
msgid "An extension must begin with a dot."
msgstr "Une extension doit commencer par un point."
#: machines/models.py:850 machines/models.py:876 machines/models.py:900
#: machines/models.py:923 machines/models.py:1589
#: machines/models.py:838 machines/models.py:864 machines/models.py:888
#: machines/models.py:911 machines/models.py:1588
msgid "Time To Live (TTL)"
msgstr "Temps de vie (TTL)"
#: machines/models.py:854
#: machines/models.py:842
msgid "Can view an MX record object"
msgstr "Peut voir un objet enregistrement MX"
#: machines/models.py:855 machines/templates/machines/machine.html:124
#: machines/models.py:843 machines/templates/machines/machine.html:124
msgid "MX record"
msgstr "enregistrement MX"
#: machines/models.py:856
#: machines/models.py:844
msgid "MX records"
msgstr "enregistrements MX"
#: machines/models.py:880
#: machines/models.py:868
msgid "Can view an NS record object"
msgstr "Peut voir un objet enregistrement NS"
#: machines/models.py:881 machines/templates/machines/machine.html:128
#: machines/models.py:869 machines/templates/machines/machine.html:128
msgid "NS record"
msgstr "enregistrement NS"
#: machines/models.py:882
#: machines/models.py:870
msgid "NS records"
msgstr "enregistrements NS"
#: machines/models.py:904
#: machines/models.py:892
msgid "Can view a TXT record object"
msgstr "Peut voir un objet enregistrement TXT"
#: machines/models.py:905 machines/templates/machines/machine.html:132
#: machines/models.py:893 machines/templates/machines/machine.html:132
msgid "TXT record"
msgstr "enregistrement TXT"
#: machines/models.py:906
#: machines/models.py:894
msgid "TXT records"
msgstr "enregistrements TXT"
#: machines/models.py:927
#: machines/models.py:915
msgid "Can view a DNAME record object"
msgstr "Peut voir un objet enregistrement DNAME"
#: machines/models.py:928 machines/templates/machines/machine.html:136
#: machines/models.py:916 machines/templates/machines/machine.html:136
msgid "DNAME record"
msgstr "enregistrement DNAME"
#: machines/models.py:929
#: machines/models.py:917
msgid "DNAME records"
msgstr "enregistrements DNAME"
#: machines/models.py:958
#: machines/models.py:946
msgid ""
"Priority of the target server (positive integer value, the lower it is, the "
"more the server will be used if available)."
@ -483,7 +483,7 @@ msgstr ""
"Priorité du serveur cible (entier positif, plus il est bas, plus le serveur "
"sera utilisé si disponible)."
#: machines/models.py:967
#: machines/models.py:955
msgid ""
"Relative weight for records with the same priority (integer value between 0 "
"and 65535)."
@ -491,165 +491,164 @@ msgstr ""
"Poids relatif des enregistrements avec la même priorité (entier entre 0 et "
"65535)."
#: machines/models.py:972
#: machines/models.py:960
msgid "TCP/UDP port."
msgstr "Port TCP/UDP."
#: machines/models.py:975
#: machines/models.py:963
msgid "Target server."
msgstr "Serveur cible."
#: machines/models.py:979
#: machines/models.py:967
msgid "Can view an SRV record object"
msgstr "Peut voir un objet enregistrement SRV"
#: machines/models.py:980 machines/templates/machines/machine.html:140
#: machines/models.py:968 machines/templates/machines/machine.html:140
msgid "SRV record"
msgstr "enregistrement SRV"
#: machines/models.py:981
#: machines/models.py:969
msgid "SRV records"
msgstr "enregistrements SRV"
#: machines/models.py:1032
#: machines/models.py:1020
msgid "SSH public key."
msgstr "Clé publique SSH."
#: machines/models.py:1035
#: machines/models.py:1023
msgid "Comment."
msgstr "Commentaire."
#: machines/models.py:1058
#: machines/models.py:1046
msgid "Can view an SSHFP record object"
msgstr "Peut voir un objet enregistrement SSHFP"
#: machines/models.py:1059 machines/templates/machines/machine.html:144
#: machines/models.py:1047 machines/templates/machines/machine.html:144
#: machines/views.py:474
msgid "SSHFP record"
msgstr "enregistrement SSHFP"
#: machines/models.py:1060
#: machines/models.py:1048
msgid "SSHFP records"
msgstr "enregistrements SSHFP"
#: machines/models.py:1095
#: machines/models.py:1083
msgid "Can view an interface object"
msgstr "Peut voir un objet interface"
#: machines/models.py:1096
#: machines/models.py:1084
msgid "Can change the owner of an interface"
msgstr "Peut changer l'utilisateur d'une interface"
#: machines/models.py:1098 machines/views.py:358
#: machines/models.py:1086 machines/views.py:358
msgid "interface"
msgstr "interface"
#: machines/models.py:1099
#: machines/models.py:1087
msgid "interfaces"
msgstr "interfaces"
#: machines/models.py:1137
#: machines/models.py:1125
msgid "Unknown vendor."
msgstr "Constructeur inconnu."
#: machines/models.py:1201
#: machines/models.py:1189
msgid "The given MAC address is invalid."
msgstr "L'adresse MAC indiquée est invalide."
#: machines/models.py:1210
#: machines/models.py:1198
msgid "There are no IP addresses available in the slash."
msgstr "Il n'y a pas d'adresses IP disponibles dans le slash."
#: machines/models.py:1262
#: machines/models.py:1250
msgid "The selected IP type is invalid."
msgstr "Le type d'IP sélectionné est invalide."
#: machines/models.py:1276
#: machines/models.py:1264
msgid "MAC address already registered in this machine type/subnet."
msgstr "Adresse MAC déjà enregistrée dans ce type de machine/sous-réseau."
#: machines/models.py:1285
#: machines/models.py:1273
msgid "The IPv4 address and the machine type don't match."
msgstr "L'adresse IPv4 et le type de machine ne correspondent pas."
#: machines/models.py:1300
#: machines/models.py:1288
msgid "Nonexistent machine."
msgstr "Machine inexistante."
#: machines/models.py:1313
#: machines/models.py:1305
msgid ""
"You don't have the right to add an interface to a machine of another user."
msgstr ""
"Vous n'avez pas le droit d'ajouter une interface à une machine d'un autre "
"utilisateur."
#: machines/models.py:1337
#: machines/models.py:1329
msgid "You don't have the right to edit the machine."
msgstr "Vous n'avez pas le droit d'éditer une machine."
#: machines/models.py:1354
msgid "You don't have the right to edit interfaces of another user."
msgstr ""
"Vous n'avez pas le droit de modifier une interface d'un autre utilisateur."
#: machines/models.py:1373
#: machines/models.py:1365
msgid "You don't have the right to delete interfaces of another user."
msgstr ""
"Vous n'avez pas le droit de supprimer une interface d'une autre utilisateur."
#: machines/models.py:1391
#: machines/models.py:1384
msgid "You don't have the right to view interfaces other than yours."
msgstr "Vous n'avez pas le droit de voir d'autres interfaces que les vôtres."
#: machines/models.py:1419
#: machines/models.py:1412
msgid "Can view an IPv6 addresses list object"
msgstr "Peut voir un objet list d'adresses IPv6"
#: machines/models.py:1422
#: machines/models.py:1415
msgid "Can change the SLAAC value of an IPv6 addresses list"
msgstr "Peut modifier la valeur SLAAC d'une liste d'adresses IPv6"
#: machines/models.py:1425 machines/views.py:418
#: machines/models.py:1418 machines/views.py:418
msgid "IPv6 addresses list"
msgstr "Liste d'adresses IPv6"
#: machines/models.py:1426
#: machines/models.py:1419
msgid "IPv6 addresses lists"
msgstr "Listes d'adresses IPv6"
#: machines/models.py:1438 machines/models.py:1679
#: machines/models.py:1431 machines/models.py:1678
msgid "Nonexistent interface."
msgstr "Interface inexistante."
#: machines/models.py:1444
#: machines/models.py:1437
msgid "You don't have the right to add ipv6 to a machine of another user."
msgstr ""
"Vous n'avez pas le droit d'ajouter des ipv6 à une machine d'un autre utilisateur."
"Vous n'avez pas le droit d'ajouter des ipv6 à une machine d'un autre "
"utilisateur."
#: machines/models.py:1457
#: machines/models.py:1450
msgid "You don't have the right to change the SLAAC value of an IPv6 address."
msgstr ""
"Vous n'avez pas le droit de changer la valeur SLAAC d'une adresse IPv6."
#: machines/models.py:1476
#: machines/models.py:1470
msgid "You don't have the right to edit ipv6 of a machine of another user."
msgstr ""
"Vous n'avez pas le droit de modifier les ipv6 d'une machine d'un autre utilisateur."
"Vous n'avez pas le droit de modifier les ipv6 d'une machine d'un autre "
"utilisateur."
#: machines/models.py:1494
#: machines/models.py:1490
msgid "You don't have the right to delete ipv6 of a machine of another user."
msgstr ""
"Vous n'avez pas le droit de supprimer les ipv6 d'une machine d'une autre utilisateur."
"Vous n'avez pas le droit de supprimer les ipv6 d'une machine d'une autre "
"utilisateur."
#: machines/models.py:1511
#: machines/models.py:1509
msgid "You don't have the right to view ipv6 of machines other than yours."
msgstr "Vous n'avez pas le droit de voir les ipv6 d'autres machines que les vôtres."
msgstr ""
"Vous n'avez pas le droit de voir les ipv6 d'autres machines que les vôtres."
#: machines/models.py:1543
#: machines/models.py:1542
msgid "A SLAAC IP address is already registered."
msgstr "Une adresse IP SLAAC est déjà enregistrée."
#: machines/models.py:1557
#: machines/models.py:1556
msgid ""
"The v6 prefix is incorrect and doesn't match the type associated with the "
"machine."
@ -657,55 +656,55 @@ msgstr ""
"Le préfixe v6 est incorrect et ne correspond pas au type associé à la "
"machine."
#: machines/models.py:1582
#: machines/models.py:1581
msgid "Mandatory and unique, must not contain dots."
msgstr "Obligatoire et unique, ne doit pas contenir de points."
#: machines/models.py:1597
#: machines/models.py:1596
msgid "Can view a domain object"
msgstr "Peut voir un objet domaine"
#: machines/models.py:1598
#: machines/models.py:1597
msgid "Can change the TTL of a domain object"
msgstr "Peut changer le TTL d'un objet domaine"
#: machines/models.py:1600
#: machines/models.py:1599
msgid "domain"
msgstr "domaine"
#: machines/models.py:1601
#: machines/models.py:1600
msgid "domains"
msgstr "domaines"
#: machines/models.py:1623
#: machines/models.py:1622
msgid "You can't create a both A and CNAME record."
msgstr "Vous ne pouvez pas créer un enregistrement à la fois A et CNAME."
#: machines/models.py:1626
#: machines/models.py:1625
msgid "You can't create a CNAME record pointing to itself."
msgstr "Vous ne pouvez pas créer un enregistrement CNAME vers lui-même."
#: machines/models.py:1632
#: machines/models.py:1631
#, python-format
msgid "The domain name %s is too long (over 63 characters)."
msgstr "Le nom de domaine %s est trop long (plus de 63 caractères)."
#: machines/models.py:1636
#: machines/models.py:1635
#, python-format
msgid "The domain name %s contains forbidden characters."
msgstr "Le nom de domaine %s contient des caractères interdits."
#: machines/models.py:1653
#: machines/models.py:1652
msgid "Invalid extension."
msgstr "Extension invalide."
#: machines/models.py:1688
#: machines/models.py:1687
msgid "You don't have the right to add an alias to a machine of another user."
msgstr ""
"Vous n'avez pas le droit d'ajouter un alias à une machine d'un autre "
"utilisateur."
#: machines/models.py:1704
#: machines/models.py:1703
#, python-format
msgid ""
"You reached the maximum number of alias that you are allowed to create "
@ -714,164 +713,164 @@ msgstr ""
"Vous avez atteint le nombre maximal d'alias que vous pouvez créer vous-même "
"(%s)."
#: machines/models.py:1725
#: machines/models.py:1724
msgid "You don't have the right to edit an alias of a machine of another user."
msgstr ""
"Vous n'avez pas le droit de modifier un alias d'une machine d'un autre "
"utilisateur."
#: machines/models.py:1745
#: machines/models.py:1744
msgid ""
"You don't have the right to delete an alias of a machine of another user."
msgstr ""
"Vous n'avez pas le droit de supprimer un alias d'une machine d'un autre "
"utilisateur."
#: machines/models.py:1775
#: machines/models.py:1773
msgid "You don't have the right to change the domain's TTL."
msgstr "Vous n'avez pas le droit de changer le TTL du domaine."
#: machines/models.py:1792
#: machines/models.py:1790
msgid "Can view an IPv4 addresses list object"
msgstr "Peut voir un object liste d'adresses IPv4"
#: machines/models.py:1793
#: machines/models.py:1791
msgid "IPv4 addresses list"
msgstr "Liste d'adresses IPv4"
#: machines/models.py:1794
#: machines/models.py:1792
msgid "IPv4 addresses lists"
msgstr "Listes d'adresses IPv4"
#: machines/models.py:1806
#: machines/models.py:1804
msgid "The IPv4 address and the range of the IP type don't match."
msgstr "L'adresse IPv4 et la plage du type d'IP ne correspondent pas."
#: machines/models.py:1824
#: machines/models.py:1822
msgid "DHCP server"
msgstr "Serveur DHCP"
#: machines/models.py:1825
#: machines/models.py:1823
msgid "Switches configuration server"
msgstr "Serveur de configuration des commutateurs réseau"
#: machines/models.py:1826
#: machines/models.py:1824
msgid "Recursive DNS server"
msgstr "Serveur DNS récursif"
#: machines/models.py:1827
#: machines/models.py:1825
msgid "NTP server"
msgstr "Serveur NTP"
#: machines/models.py:1828
#: machines/models.py:1826
msgid "RADIUS server"
msgstr "Serveur RADIUS"
#: machines/models.py:1829
#: machines/models.py:1827
msgid "Log server"
msgstr "Serveur log"
#: machines/models.py:1830
#: machines/models.py:1828
msgid "LDAP master server"
msgstr "Serveur LDAP maître"
#: machines/models.py:1831
#: machines/models.py:1829
msgid "LDAP backup server"
msgstr "Serveur LDAP de secours"
#: machines/models.py:1832
#: machines/models.py:1830
msgid "SMTP server"
msgstr "Serveur SMTP"
#: machines/models.py:1833
#: machines/models.py:1831
msgid "postgreSQL server"
msgstr "Serveur postgreSQL"
#: machines/models.py:1834
#: machines/models.py:1832
msgid "mySQL server"
msgstr "Serveur mySQL"
#: machines/models.py:1835
#: machines/models.py:1833
msgid "SQL client"
msgstr "Client SQL"
#: machines/models.py:1836
#: machines/models.py:1834
msgid "Gateway"
msgstr "Passerelle"
#: machines/models.py:1844
#: machines/models.py:1842
msgid "Can view a role object"
msgstr "Peut voir un objet rôle"
#: machines/models.py:1845
#: machines/models.py:1843
msgid "server role"
msgstr "rôle de serveur"
#: machines/models.py:1846
#: machines/models.py:1844
msgid "server roles"
msgstr "rôles de serveur"
#: machines/models.py:1878
#: machines/models.py:1876
msgid "Minimal time before regeneration of the service."
msgstr "Temps minimal avant régénération du service."
#: machines/models.py:1882
#: machines/models.py:1880
msgid "Maximal time before regeneration of the service."
msgstr "Temps maximal avant régénération du service."
#: machines/models.py:1887
#: machines/models.py:1885
msgid "Can view a service object"
msgstr "Peut voir un objet service"
#: machines/models.py:1888
#: machines/models.py:1886
msgid "service to generate (DHCP, DNS, ...)"
msgstr "service à générer (DHCP, DNS, ...)"
#: machines/models.py:1889
#: machines/models.py:1887
msgid "services to generate (DHCP, DNS, ...)"
msgstr "services à générer (DHCP, DNS, ...)"
#: machines/models.py:1933
#: machines/models.py:1931
msgid "Can view a service server link object"
msgstr "Peut voir un objet lien service serveur"
#: machines/models.py:1935
#: machines/models.py:1933
msgid "link between service and server"
msgstr "lien entre service et serveur"
#: machines/models.py:1936
#: machines/models.py:1934
msgid "links between service and server"
msgstr "liens entre service et serveur"
#: machines/models.py:1977
#: machines/models.py:1975
msgid "Name of the ports configuration"
msgstr "Nom de la configuration de ports"
#: machines/models.py:1982
#: machines/models.py:1980
msgid "Can view a ports opening list object"
msgstr "Peut voir un objet liste d'ouverture de ports"
#: machines/models.py:1985
#: machines/models.py:1982
msgid "ports opening list"
msgstr "liste d'ouverture de ports"
#: machines/models.py:1986
#: machines/models.py:1983
msgid "ports opening lists"
msgstr "listes d'ouverture de ports"
#: machines/models.py:1997
#: machines/models.py:1994
msgid "You don't have the right to delete a ports opening list."
msgstr "Vous n'avez pas le droit de supprimer une liste d'ouverture de ports."
#: machines/models.py:2001
#: machines/models.py:1998
msgid "This ports opening list is used."
msgstr "Cette liste d'ouverture de ports est utilisée."
#: machines/models.py:2055
#: machines/models.py:2052
msgid "ports opening"
msgstr "ouverture de ports"
#: machines/models.py:2056
#: machines/models.py:2053
msgid "ports openings"
msgstr "ouvertures de ports"
@ -1801,3 +1800,7 @@ msgstr ""
#: machines/views.py:1561
msgid "The ports configuration was edited."
msgstr "La configuration de ports a été modifiée."
#~ msgid "You don't have the right to edit interfaces of another user."
#~ msgstr ""
#~ "Vous n'avez pas le droit de modifier une interface d'un autre utilisateur."

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2019-11-16 00:22+0100\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"

View file

@ -150,6 +150,7 @@ class AssoOptionSerializer(NamespacedHMSerializer):
"adresse2",
"contact",
"telephone",
"profile_image",
"pseudo",
"utilisateur_asso",
"description",

View file

@ -180,6 +180,7 @@ class EditAssoOptionForm(ModelForm):
self.fields["adresse2"].label = _("Address (line 2)")
self.fields["contact"].label = _("Contact email address")
self.fields["telephone"].label = _("Telephone number")
self.fields["profile_image"].label = _("Profile image")
self.fields["pseudo"].label = _("Usual name")
self.fields["utilisateur_asso"].label = _(
"Account used for editing from /admin"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2018-06-24 15:54+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -207,90 +207,94 @@ msgid "Telephone number"
msgstr "Numéro de téléphone"
#: preferences/forms.py:183
msgid "Profile image"
msgstr "Photo de profil"
#: preferences/forms.py:184
#: preferences/templates/preferences/display_preferences.html:343
msgid "Usual name"
msgstr "Nom d'usage"
#: preferences/forms.py:185
#: preferences/forms.py:186
msgid "Account used for editing from /admin"
msgstr "Compte utilisé pour les modifications depuis /admin"
#: preferences/forms.py:187 preferences/forms.py:332
#: preferences/forms.py:188 preferences/forms.py:333
#: preferences/templates/preferences/aff_service.html:33
msgid "Description"
msgstr "Description"
#: preferences/forms.py:201
#: preferences/forms.py:202
msgid "Message for the French welcome email"
msgstr "Message pour le mail de bienvenue en français"
#: preferences/forms.py:204
#: preferences/forms.py:205
msgid "Message for the English welcome email"
msgstr "Message pour le mail de bienvenue en anglais"
#: preferences/forms.py:218
#: preferences/forms.py:219
msgid "Facebook URL"
msgstr "URL du compte Facebook"
#: preferences/forms.py:219
#: preferences/forms.py:220
msgid "Twitter URL"
msgstr "URL du compte Twitter"
#: preferences/forms.py:220
#: preferences/forms.py:221
#: preferences/templates/preferences/display_preferences.html:504
msgid "Twitter account name"
msgstr "Nom du compte Twitter"
#: preferences/forms.py:238
#: preferences/forms.py:239
msgid "You chose to set vlan but did not set any VLAN."
msgstr ""
"Vous avez choisi de paramétrer vlan mais vous n'avez indiqué aucun VLAN."
#: preferences/forms.py:239
#: preferences/forms.py:240
msgid "Please, choose a VLAN."
msgstr "Veuillez choisir un VLAN."
#: preferences/forms.py:270
#: preferences/forms.py:271
msgid "There is already a mandate taking place at the specified start date."
msgstr "Il y a déjà un mandat ayant cours à la date de début renseignée."
#: preferences/forms.py:284
#: preferences/forms.py:285
msgid "There is already a mandate taking place at the specified end date."
msgstr "Il y a déjà un madant ayant cours à la date de fin renseignée."
#: preferences/forms.py:298
#: preferences/forms.py:299
msgid "The specified dates overlap with an existing mandate."
msgstr "Les dates renseignées se superposent avec un mandat existant."
#: preferences/forms.py:330
#: preferences/forms.py:331
#: preferences/templates/preferences/aff_service.html:31
#: preferences/templates/preferences/display_preferences.html:327
msgid "Name"
msgstr "Nom"
#: preferences/forms.py:331
#: preferences/forms.py:332
#: preferences/templates/preferences/aff_service.html:32
msgid "URL"
msgstr "URL"
#: preferences/forms.py:333
#: preferences/forms.py:334
#: preferences/templates/preferences/aff_service.html:34
msgid "Image"
msgstr "Image"
#: preferences/forms.py:341
#: preferences/forms.py:342
msgid "Current services"
msgstr "Services actuels"
#: preferences/forms.py:430
#: preferences/forms.py:431
msgid "Current email addresses"
msgstr "Adresses mail actuelles"
#: preferences/forms.py:465
#: preferences/forms.py:466
msgid "Current document templates"
msgstr "Modèles de document actuels"
#: preferences/forms.py:495
#: preferences/forms.py:496
msgid "Current attributes"
msgstr "Attributs actuels"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -34,25 +34,25 @@ msgstr ""
msgid "You don't have the right to edit this option."
msgstr "Vous n'avez pas le droit de modifier cette option."
#: re2o/acl.py:51
#: re2o/acl.py:50
#, python-format
msgid "You need to be a member of one of these groups: %s."
msgstr "Vous devez être membre de l'un de ces groupes : %s."
#: re2o/acl.py:54
#: re2o/acl.py:53
#, python-format
msgid "No group has the %s permission(s)!"
msgstr "Aucun groupe ne possède la ou les permissions %s !"
#: re2o/acl.py:167
#: re2o/acl.py:166
msgid "Nonexistent entry."
msgstr "Entrée inexistante."
#: re2o/acl.py:193 re2o/acl.py:264
#: re2o/acl.py:196 re2o/acl.py:267
msgid "You don't have the right to access this menu."
msgstr "Vous n'avez pas le droit d'accéder à ce menu."
#: re2o/acl.py:314
#: re2o/acl.py:317
msgid "You don't have the right to edit the history."
msgstr "Vous n'avez pas le droit de modifier l'historique."
@ -79,27 +79,27 @@ msgstr "Format : {main}"
msgid "Failed to send email: %(error)s."
msgstr "Échec de l'envoi du mail : %(error)s."
#: re2o/mixins.py:113
#: re2o/mixins.py:110
#, python-format
msgid "You don't have the right to create a %s object."
msgstr "Vous n'avez pas le droit de créer un objet %s."
#: re2o/mixins.py:129
#: re2o/mixins.py:126
#, python-format
msgid "You don't have the right to edit a %s object."
msgstr "Vous n'avez pas le droit de modifier un objet %s."
#: re2o/mixins.py:145
#: re2o/mixins.py:142
#, python-format
msgid "You don't have the right to delete a %s object."
msgstr "Vous n'avez pas le droit de supprimer un objet %s."
#: re2o/mixins.py:161
#: re2o/mixins.py:158
#, python-format
msgid "You don't have the right to view every %s object."
msgstr "Vous n'avez pas le droit de voir tous les objets %s."
#: re2o/mixins.py:177
#: re2o/mixins.py:174
#, python-format
msgid "You don't have the right to view a %s object."
msgstr "Vous n'avez pas le droit de voir un objet %s."
@ -207,26 +207,38 @@ msgstr "<b>Date du commit</b> : %(git_info_commit_date)s"
msgid "Dependencies"
msgstr "Dépendances"
#: re2o/templates/re2o/aff_history.html:30
msgid "Next"
msgstr "Suivant"
#: re2o/templates/re2o/aff_history.html:37
msgid "Previous"
msgstr "Précédent"
#: re2o/templates/re2o/aff_history.html:45
#: re2o/templates/re2o/aff_history.html:33
msgid "Date"
msgstr "Date"
#: re2o/templates/re2o/aff_history.html:46
#: re2o/templates/re2o/aff_history.html:34
msgid "Performed by"
msgstr "Effectuée par"
#: re2o/templates/re2o/aff_history.html:47
#: re2o/templates/re2o/aff_history.html:35
msgid "Edited"
msgstr ""
#: re2o/templates/re2o/aff_history.html:36
msgid "Comment"
msgstr "Commentaire"
#: re2o/templates/re2o/aff_history.html:48
msgid "Unknown"
msgstr ""
#: re2o/templates/re2o/aff_history.html:71
msgid "No event"
msgstr ""
#: re2o/templates/re2o/aff_history.html:76
msgid "Related elements"
msgstr ""
#: re2o/templates/re2o/aff_history.html:82 re2o/templates/re2o/history.html:30
msgid "History"
msgstr "Historique"
#: re2o/templates/re2o/contact.html:29
msgid "Contact"
msgstr "Contact"
@ -236,13 +248,10 @@ msgstr "Contact"
msgid "Contact the organisation %(asso_name)s"
msgstr "Contacter l'association %(asso_name)s"
#: re2o/templates/re2o/history.html:29
msgid "History"
msgstr "Historique"
#: re2o/templates/re2o/history.html:32
#, python-format
msgid "History of %(object)s"
#: re2o/templates/re2o/history.html:33
#, fuzzy, python-format
#| msgid "History of %(object)s"
msgid "History of %(title)s"
msgstr "Historique de %(object)s"
#: re2o/templates/re2o/index.html:30
@ -327,3 +336,9 @@ msgstr "Page d'accueil"
#: re2o/views.py:96
msgid "Unable to get the information."
msgstr "Impossible d'obtenir l'information."
#~ msgid "Next"
#~ msgstr "Suivant"
#~ msgid "Previous"
#~ msgstr "Précédent"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2018-06-24 20:10+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"

View file

@ -216,6 +216,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if request_user.is_authenticated %}
<div class="panel-heading">
<h4>{{ request_user.name }} {{ request_user.surname }}</h4>
{% if request_user.image_url %}
<img src="{{ users.image_url }}" height="42" width="42" />
{% endif %}
</div>
<table class="table">
<tr>

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -30,11 +30,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: templates/admin/base_site.html:65 templates/base.html:290
#: templates/admin/base_site.html:65 templates/base.html:293
msgid "powered by"
msgstr "propulsé par"
#: templates/admin/base_site.html:69 templates/base.html:298
#: templates/admin/base_site.html:69 templates/base.html:301
msgid ""
"This software is under the terms of the <a href=\"http://www.gnu.org/"
"licenses/gpl-2.0.txt\" target=\"_blank\" rel=\"nofollow\">GPLv2</a> License."
@ -167,68 +167,68 @@ msgstr "Mon profil"
msgid "Log out"
msgstr ""
#: templates/base.html:223
#: templates/base.html:226
msgid "Username"
msgstr "Pseudo"
#: templates/base.html:227
#: templates/base.html:230
msgid "Room"
msgstr "Chambre"
#: templates/base.html:231
#: templates/base.html:234
msgid "Internet access"
msgstr "Accès Internet"
#: templates/base.html:234
#: templates/base.html:237
#, python-format
msgid "Until %(end_access_date)s"
msgstr "Jusqu'au %(end_access_date)s"
#: templates/base.html:236
#: templates/base.html:239
msgid "Disabled"
msgstr "Désactivé"
#: templates/base.html:241
#: templates/base.html:244
msgid "Membership"
msgstr "Adhésion"
#: templates/base.html:244
#: templates/base.html:247
#, python-format
msgid "Until %(end_adhesion_date)s"
msgstr "Jusqu'au %(end_adhesion_date)s"
#: templates/base.html:246
#: templates/base.html:249
msgid "Non member"
msgstr "Non adhérent"
#: templates/base.html:254
#: templates/base.html:257
msgid "View my profile"
msgstr "Voir mon profil"
#: templates/base.html:259
#: templates/base.html:262
msgid "You are not logged in."
msgstr "Vous n'êtes pas connecté."
#: templates/base.html:266
#: templates/base.html:269
#, python-format
msgid "%(nb)s active machine"
msgid_plural "%(nb)s active machines"
msgstr[0] "%(nb)s machine active"
msgstr[1] "%(nb)s machines actives"
#: templates/base.html:275
#: templates/base.html:278
msgid "View my machines"
msgstr "Voir mes machines"
#: templates/base.html:288
#: templates/base.html:291
msgid "Back to top"
msgstr "Retour en haut"
#: templates/base.html:292
#: templates/base.html:295
msgid "Brought to you with <i class=\"fa fa-heart text-danger\"></i>."
msgstr "Codé avec <i class=\"fa fa-heart text-danger\"></i>."
#: templates/base.html:295
#: templates/base.html:298
msgid "About this website"
msgstr "À propos de ce site"
@ -240,8 +240,7 @@ msgstr ""
msgid "Edit"
msgstr "Modifier"
#: templates/buttons/history.html:28 templates/buttons/history.html:29
#: templates/buttons/history.html:32 templates/buttons/history.html:33
#: templates/buttons/history.html:27 templates/buttons/history.html:28
msgid "History"
msgstr ""

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-03 02:10+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2019-11-16 00:35+0100\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -34,60 +34,61 @@ msgstr ""
msgid "comment"
msgstr "commentaire"
#: tickets/models.py:58
#: tickets/models.py:59
msgid "Title of the ticket."
msgstr "Titre du ticket."
#: tickets/models.py:67
#: tickets/models.py:68
msgid "An email address to get back to you."
msgstr "Une adresse mail pour vous recontacter."
#: tickets/models.py:71
#: tickets/models.py:72
msgid "Language of the ticket."
msgstr "Langue des tickets"
#: tickets/models.py:76 tickets/models.py:173
#: tickets/models.py:77 tickets/models.py:174
msgid "Can view a ticket object"
msgstr "Peut voir un objet ticket"
#: tickets/models.py:77 tickets/models.py:174
#: tickets/models.py:78 tickets/models.py:175
msgid "ticket"
msgstr "ticket"
#: tickets/models.py:78 tickets/models.py:175
#: tickets/models.py:79 tickets/models.py:176
msgid "tickets"
msgstr "tickets"
#: tickets/models.py:82
#: tickets/models.py:83
#, python-brace-format
msgid "Ticket from {name}. Date: {date}."
msgstr "Ticket de {name}. Date : {date}."
#: tickets/models.py:84
#: tickets/models.py:85
#, python-format
msgid "Anonymous ticket. Date: %s."
msgstr "Ticket anonyme. Date : %s."
#: tickets/models.py:92 tickets/templates/tickets/aff_ticket.html:52
#: tickets/models.py:93 tickets/templates/tickets/aff_ticket.html:52
msgid "Anonymous user"
msgstr "Utilisateur anonyme"
#: tickets/models.py:130
#: tickets/models.py:131
msgid "You don't have the right to view other tickets than yours."
msgstr "Vous n'avez pas le droit de voir d'autres tickets que les vôtres."
#: tickets/models.py:142 tickets/models.py:217
#: tickets/models.py:143 tickets/models.py:218
msgid "You don't have the right to view the list of tickets."
msgstr "Vous n'avez pas le droit de voir la liste des tickets."
#: tickets/models.py:190
#: tickets/models.py:191
msgid "You don't have the right to view other tickets comments than yours."
msgstr "Vous n'avez pas le droit de voir d'autres tickets que les vôtres."
#: tickets/models.py:205
#: tickets/models.py:206
msgid "You don't have the right to edit other tickets comments than yours."
msgstr "Vous n'avez pas le droit d'éditer d'autres tickets que les vôtres."
#: tickets/models.py:236
#: tickets/models.py:237
msgid "Update of your ticket"
msgstr "Mise à jour de votre ticket"

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 18:45+0200\n"
"POT-Creation-Date: 2020-05-17 12:49+0200\n"
"PO-Revision-Date: 2018-06-25 14:53+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -74,224 +74,224 @@ msgstr "point d'accès sans fil"
msgid "access points"
msgstr "points d'accès sans fil"
#: topologie/models.py:190
#: topologie/models.py:232
msgid "Number of ports."
msgstr "Nombre de ports."
#: topologie/models.py:200
#: topologie/models.py:242
msgid "Switch model."
msgstr "Modèle de commutateur réseau."
#: topologie/models.py:210
#: topologie/models.py:252
msgid "RADIUS key of the switch."
msgstr "Clé RADIUS du commutateur réseau."
#: topologie/models.py:217
#: topologie/models.py:259
msgid "Management credentials for the switch."
msgstr "Identifiants de gestion du commutateur réseau."
#: topologie/models.py:220
#: topologie/models.py:262
msgid "Automatic provision for the switch."
msgstr "Provision automatique pour le commutateur réseau."
#: topologie/models.py:225
#: topologie/models.py:267
msgid "Can view a switch object"
msgstr "Peut voir un objet commutateur réseau"
#: topologie/models.py:226 topologie/views.py:542 topologie/views.py:615
#: topologie/models.py:268 topologie/views.py:542 topologie/views.py:615
msgid "switch"
msgstr "commutateur réseau"
#: topologie/models.py:227
#: topologie/models.py:269
msgid "switches"
msgstr "commutateurs réseau"
#: topologie/models.py:241
#: topologie/models.py:283
msgid "The switch ID exceeds the limits allowed by the stack."
msgstr "L'ID du commutateur réseau dépasse les bornes autorisées par la pile."
#: topologie/models.py:248
#: topologie/models.py:290
msgid "The stack member ID can't be void."
msgstr "L'ID de membre dans la pile ne peut-être vide."
#: topologie/models.py:255
#: topologie/models.py:297
msgid "The end port is less than the start port."
msgstr "Le port de fin est inférieur au port de début."
#: topologie/models.py:263
#: topologie/models.py:305
msgid "This switch can't have that many ports."
msgstr "Ce commutateur réseau ne peut pas avoir autant de ports."
#: topologie/models.py:471
#: topologie/models.py:534
msgid "The switch model is modular."
msgstr "Le modèle de commutateur réseau est modulaire."
#: topologie/models.py:474
#: topologie/models.py:537
msgid "The switch is considered as a module."
msgstr "Le commutateur réseau est considéré comme un module."
#: topologie/models.py:478
#: topologie/models.py:541
msgid "Can view a switch model object"
msgstr "Peut voir un objet modèle de commutateur réseau"
#: topologie/models.py:479 topologie/views.py:832
#: topologie/models.py:542 topologie/views.py:832
msgid "switch model"
msgstr "modèle de commutateur réseau"
#: topologie/models.py:480
#: topologie/models.py:543
msgid "switch models"
msgstr "modèles de commutateur réseau"
#: topologie/models.py:494
#: topologie/models.py:557
msgid "Reference of a module."
msgstr "Référence d'un module."
#: topologie/models.py:495
#: topologie/models.py:558
msgid "module reference"
msgstr "référence de module"
#: topologie/models.py:501
#: topologie/models.py:564
msgid "Comment."
msgstr "Commentaire."
#: topologie/models.py:502
#: topologie/models.py:565
msgid "comment"
msgstr "commentaire"
#: topologie/models.py:506
#: topologie/models.py:569
msgid "Can view a switch module object"
msgstr "Peut voir un objet module de commutateur réseau"
#: topologie/models.py:507
#: topologie/models.py:570
msgid "switch module"
msgstr "module de commutateur réseau"
#: topologie/models.py:508
#: topologie/models.py:571
msgid "switch modules"
msgstr "modules de commutateur réseau"
#: topologie/models.py:520
#: topologie/models.py:583
msgid "Slot on switch."
msgstr "Emplacement sur le commutateur réseau."
#: topologie/models.py:520
#: topologie/models.py:583
msgid "slot"
msgstr "emplacement "
#: topologie/models.py:527
#: topologie/models.py:590
msgid "Can view a link between switch and module object"
msgstr "Peut voir un objet lien entre commutateur réseau et module"
#: topologie/models.py:530
#: topologie/models.py:593
msgid "link between switch and module"
msgstr "lien entre commutateur réseau et module"
#: topologie/models.py:531
#: topologie/models.py:594
msgid "links between switch and module"
msgstr "liens entre commutateur réseau et module"
#: topologie/models.py:535
#: topologie/models.py:598
#, python-format
msgid "On slot %(slot)s of %(switch)s"
msgstr "Sur l'emplacement %(slot)s de %(switch)s"
#: topologie/models.py:545
#: topologie/models.py:610
msgid "Can view a switch constructor object"
msgstr "Peut voir un objet constructeur de commutateur réseau"
#: topologie/models.py:547 topologie/views.py:1079
#: topologie/models.py:612 topologie/views.py:1079
msgid "switch constructor"
msgstr "constructeur de commutateur réseau"
#: topologie/models.py:548
#: topologie/models.py:613
msgid "switch constructors"
msgstr "constructeurs de commutateur réseau"
#: topologie/models.py:562
#: topologie/models.py:627
msgid "Can view a switch bay object"
msgstr "Peut voir un objet baie de brassage"
#: topologie/models.py:563 topologie/views.py:892
#: topologie/models.py:628 topologie/views.py:892
msgid "switch bay"
msgstr "baie de brassage"
#: topologie/models.py:564
#: topologie/models.py:629
msgid "switch bays"
msgstr "baies de brassage"
#: topologie/models.py:577
#: topologie/models.py:642
msgid "Can view a dormitory object"
msgstr "Peut voir un objet résidence"
#: topologie/models.py:578 topologie/views.py:1016
#: topologie/models.py:643 topologie/views.py:1016
msgid "dormitory"
msgstr "résidence"
#: topologie/models.py:579
#: topologie/models.py:644
msgid "dormitories"
msgstr "résidences"
#: topologie/models.py:605
#: topologie/models.py:670
msgid "Can view a building object"
msgstr "Peut voir un objet bâtiment"
#: topologie/models.py:606 topologie/views.py:953
#: topologie/models.py:671 topologie/views.py:953
msgid "building"
msgstr "bâtiment"
#: topologie/models.py:607
#: topologie/models.py:672
msgid "buildings"
msgstr "bâtiments"
#: topologie/models.py:658
#: topologie/models.py:723
msgid "Port state Active."
msgstr "État du port Actif."
#: topologie/models.py:659
#: topologie/models.py:724
msgid "port state Active"
msgstr "état du port Actif"
#: topologie/models.py:665
#: topologie/models.py:730
msgid "Can view a port object"
msgstr "Peut voir un objet port"
#: topologie/models.py:666
#: topologie/models.py:731
msgid "port"
msgstr "port"
#: topologie/models.py:667
#: topologie/models.py:732
msgid "ports"
msgstr "ports"
#: topologie/models.py:673
#: topologie/models.py:738
msgid "Uplink: "
msgstr "Liaison montante : "
#: topologie/models.py:675
#: topologie/models.py:740
msgid "Machine: "
msgstr "Machine : "
#: topologie/models.py:677
#: topologie/models.py:742
msgid "Room: "
msgstr "Chambre : "
#: topologie/models.py:679
#: topologie/models.py:744
msgid "Unknown"
msgstr "Inconnu"
#: topologie/models.py:740
#: topologie/models.py:805
msgid "The port can't exist, its number is too great."
msgstr "Le port ne peut pas exister, son numéro est trop grand."
#: topologie/models.py:751
#: topologie/models.py:816
msgid "Room, interface and related port are mutually exclusive."
msgstr "Chambre, interface et port relié sont mutuellement exclusifs."
#: topologie/models.py:754
#: topologie/models.py:819
msgid "A port can't be related to itself."
msgstr "Un port ne peut être relié à lui-même."
#: topologie/models.py:759
#: topologie/models.py:824
msgid ""
"The related port is already used, please clear it before creating the "
"relation."
@ -299,152 +299,152 @@ msgstr ""
"Le port relié est déjà utilisé, veuillez le modifier avant de créer la "
"relation."
#: topologie/models.py:781
#: topologie/models.py:846
msgid "Can view a room object"
msgstr "Peut voir un objet chambre"
#: topologie/models.py:782 topologie/views.py:773
#: topologie/models.py:847 topologie/views.py:773
msgid "room"
msgstr "chambre"
#: topologie/models.py:783
#: topologie/models.py:848
msgid "rooms"
msgstr "chambres"
#: topologie/models.py:793
#: topologie/models.py:858
msgid "MAC-RADIUS"
msgstr "MAC-RADIUS"
#: topologie/models.py:806 topologie/templates/topologie/aff_chambres.html:36
#: topologie/models.py:871 topologie/templates/topologie/aff_chambres.html:36
#: topologie/templates/topologie/aff_port.html:38
msgid "Room"
msgstr "Chambre"
#: topologie/models.py:807 topologie/templates/topologie/aff_ap.html:36
#: topologie/models.py:872 topologie/templates/topologie/aff_ap.html:36
msgid "Access point"
msgstr "Point d'accès sans fil"
#: topologie/models.py:808
#: topologie/models.py:873
msgid "Uplink"
msgstr "Liaison montante"
#: topologie/models.py:809
#: topologie/models.py:874
msgid "Organisation machine"
msgstr "Machine d'association"
#: topologie/models.py:810
#: topologie/models.py:875
msgid "Nothing"
msgstr "Rien"
#: topologie/models.py:812
#: topologie/models.py:877
msgid "name"
msgstr "nom"
#: topologie/models.py:818
#: topologie/models.py:883
msgid "default profile"
msgstr "profil par défaut"
#: topologie/models.py:826
#: topologie/models.py:891
msgid "profile on dormitory"
msgstr "profil sur la résidence"
#: topologie/models.py:834
#: topologie/models.py:899
msgid "VLAN untagged"
msgstr "VLAN untagged"
#: topologie/models.py:840
#: topologie/models.py:905
msgid "VLAN(s) tagged"
msgstr "VLAN(s) tagged"
#: topologie/models.py:846
#: topologie/models.py:910
msgid "Type of RADIUS authentication: inactive, MAC-address or 802.1X."
msgstr "Type d'authentification RADIUS : inactive, MAC-address ou 802.1X."
#: topologie/models.py:848
#: topologie/models.py:911
msgid "RADIUS type"
msgstr "Type de RADIUS"
#: topologie/models.py:855
#: topologie/models.py:918
msgid "In case of MAC-authentication: mode COMMON or STRICT on this port."
msgstr ""
"Dans le cas d'authentification par adresse MAC : mode COMMON ou STRICT sur "
"ce port."
#: topologie/models.py:857
#: topologie/models.py:920
msgid "RADIUS mode"
msgstr "Mode de RADIUS"
#: topologie/models.py:860
#: topologie/models.py:923
msgid "Port speed limit."
msgstr "Limite de vitesse du port."
#: topologie/models.py:865
#: topologie/models.py:928
msgid "Limit of MAC-address on this port."
msgstr "Limite de MAC-address sur ce port."
#: topologie/models.py:866
#: topologie/models.py:929
msgid "MAC limit"
msgstr "Limite MAC"
#: topologie/models.py:868
#: topologie/models.py:931
msgid "Flow control."
msgstr "Contrôle du flux."
#: topologie/models.py:871
#: topologie/models.py:934
msgid "Protect against rogue DHCP."
msgstr "Protège contre les DHCP pirates."
#: topologie/models.py:872
#: topologie/models.py:935
#: topologie/templates/topologie/aff_vlanoptions.html:36
msgid "DHCP snooping"
msgstr "DHCP snooping"
#: topologie/models.py:876
#: topologie/models.py:939
msgid "Protect against rogue DHCPv6."
msgstr "Protège contre les DHCPv6 pirates."
#: topologie/models.py:877
#: topologie/models.py:940
#: topologie/templates/topologie/aff_vlanoptions.html:37
msgid "DHCPv6 snooping"
msgstr "DHCPv6 snooping"
#: topologie/models.py:881
#: topologie/models.py:944
msgid "Check if IP address is DHCP assigned."
msgstr "Vérifie si l'adresse IP est attribuée par DHCP."
#: topologie/models.py:882
#: topologie/models.py:945
msgid "ARP protection"
msgstr "Protection ARP"
#: topologie/models.py:886
#: topologie/models.py:949
msgid "Protect against rogue RA."
msgstr "Protège contre les RA pirates."
#: topologie/models.py:887
#: topologie/models.py:950
msgid "RA guard"
msgstr "RA guard"
#: topologie/models.py:891
#: topologie/models.py:954
msgid "Protect against loop."
msgstr "Protège contre une boucle."
#: topologie/models.py:892
#: topologie/models.py:955
msgid "loop protection"
msgstr "protection contre une boucle"
#: topologie/models.py:896
#: topologie/models.py:959
msgid "Can view a port profile object"
msgstr "Peut voir un objet profil de port"
#: topologie/models.py:897 topologie/views.py:1130
#: topologie/models.py:960 topologie/views.py:1130
msgid "port profile"
msgstr "profil de port"
#: topologie/models.py:898
#: topologie/models.py:961
msgid "port profiles"
msgstr "profils de port"
#: topologie/models.py:936
#: topologie/models.py:999
msgid "A default profile for all dormitories of that type already exists."
msgstr ""
"Un profil par défaut pour toutes les résidences de ce type existe déjà. "

View file

@ -157,7 +157,7 @@ class UserAdmin(VersionAdmin, BaseUserAdmin):
(None, {"fields": ("pseudo", "password")}),
(
"Personal info",
{"fields": ("surname", "email", "school", "shell", "uid_number")},
{"fields": ("surname", "email", "school", "shell", "uid_number", "profile_image")},
),
("Permissions", {"fields": ("is_admin",)}),
)
@ -176,6 +176,7 @@ class UserAdmin(VersionAdmin, BaseUserAdmin):
"is_admin",
"password1",
"password2",
"profile_image",
),
},
),

View file

@ -45,6 +45,7 @@ class UserSerializer(NamespacedHMSerializer):
"state",
"registered",
"telephone",
"profile_image",
"solde",
"access",
"end_access",
@ -77,6 +78,7 @@ class ClubSerializer(NamespacedHMSerializer):
"state",
"registered",
"telephone",
"profile_image",
"solde",
"room",
"access",
@ -112,6 +114,7 @@ class AdherentSerializer(NamespacedHMSerializer):
"state",
"registered",
"telephone",
"profile_image",
"room",
"solde",
"access",

View file

@ -321,6 +321,7 @@ class AdherentForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
self.fields["email"].label = _("Email address")
self.fields["school"].label = _("School")
self.fields["comment"].label = _("Comment")
self.fields["profile_image"].label = _("Profile Image")
if "room" in self.fields:
self.fields["room"].label = _("Room")
self.fields["room"].empty_label = _("No room")
@ -336,6 +337,7 @@ class AdherentForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
"school",
"comment",
"telephone",
"profile_image",
"room",
]
@ -438,6 +440,7 @@ class AdherentCreationForm(AdherentForm):
"school",
"comment",
"telephone",
"profile_image",
"room",
"state",
]
@ -515,6 +518,7 @@ class AdherentEditForm(AdherentForm):
"school",
"comment",
"telephone",
"profile_image",
"room",
"shell",
"gpg_fingerprint",
@ -550,6 +554,7 @@ class ClubForm(FormRevMixin, FieldPermissionFormMixin, ModelForm):
"room",
"email",
"telephone",
"profile_image",
"email",
"shell",
"mailing",

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.28 on 2020-05-18 14:48
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0092_auto_20200502_0057'),
]
operations = [
migrations.AddField(
model_name='user',
name='profile_image',
field=models.ImageField(blank=True, upload_to='profile_image'),
),
]

View file

@ -73,6 +73,7 @@ from django.contrib.auth.models import (
from django.core.validators import RegexValidator
import traceback
from django.utils.translation import ugettext_lazy as _
from django.core.files.uploadedfile import InMemoryUploadedFile
from reversion import revisions as reversion
@ -90,7 +91,9 @@ from machines.models import Domain, Interface, Machine, regen
from preferences.models import GeneralOption, AssoOption, OptionalUser
from preferences.models import OptionalMachine, MailMessageOption
from PIL import Image
from io import BytesIO
import sys
# Utilitaires généraux
@ -257,7 +260,8 @@ class User(
verbose_name=_("enable shortcuts on Re2o website"), default=True
)
email_change_date = models.DateTimeField(auto_now_add=True)
profile_image = models.ImageField(upload_to='profile_image', blank=True)
USERNAME_FIELD = "pseudo"
REQUIRED_FIELDS = ["surname", "email"]
@ -1395,6 +1399,23 @@ class User(
self.clean_pseudo(*args, **kwargs)
self.clean_email(*args, **kwargs)
@property
def image_url(self):
if self.profile_image and hasattr(self.profile_image, 'url'):
return self.profile_image.url
def save(self, *args, **kwargs):
if self.profile_image:
im = Image.open(self.profile_image)
output = BytesIO()
im = im.resize( (100,100) )
if im.mode in ("RGBA", "P"):
im = im.convert("RGB")
im.save(output, format='JPEG', quality=100)
output.seek(0)
self.profile_image = InMemoryUploadedFile(output,'ImageField', "%s.jpg" %self.profile_image.name.split('.')[0], 'image/jpeg', sys.getsizeof(output), None)
super(User,self).save(*args, **kwargs)
def __str__(self):
return self.pseudo

View file

@ -205,6 +205,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<dd>{{ users.pseudo }}</dd>
</div>
{% if users.image_url %}
<div class="col-md-6">
<dt>{% trans "Profile picture" %}</dt>
<dd><img src="{{ users.image_url }}" height="42" width="42" /></dd>
</div>
{% endif %}
<div class="col-md-6">
<dt>{% trans "Email address" %}</dt>
<dd><a href="mailto:{{ users.email }}">{{ users.email }}</a>{% if users.email_state != users.EMAIL_STATE_VERIFIED %}<br/><i class="text-warning">{% trans "Pending confirmation..." %}</i>{% endif %}</dd>

View file

@ -32,7 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
{% bootstrap_form_errors userform %}
<form class="form" method="post">
<form class="form" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% massive_bootstrap_form userform 'room,school,administrators,members' %}
{% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %}

View file

@ -59,6 +59,7 @@ from machines.models import Machine
from preferences.models import OptionalUser, GeneralOption, AssoOption
from importlib import import_module
from django.conf import settings
from re2o.settings_local import OPTIONNAL_APPS_RE2O
from re2o.views import form
from re2o.utils import all_has_access, permission_tree
@ -112,12 +113,13 @@ from .forms import (
InitialRegisterForm,
)
import os
@can_create(Adherent)
def new_user(request):
""" Vue de création d'un nouvel utilisateur,
envoie un mail pour le mot de passe"""
user = AdherentCreationForm(request.POST or None, user=request.user)
user = AdherentCreationForm(request.POST or None, request.FILES or None, user=request.user)
user.request = request
GTU_sum_up = GeneralOption.get_cached_value("GTU_sum_up")
@ -167,7 +169,7 @@ def new_user(request):
def new_club(request):
""" Vue de création d'un nouveau club,
envoie un mail pour le mot de passe"""
club = ClubForm(request.POST or None, user=request.user)
club = ClubForm(request.POST or None, request.FILES or None, user=request.user)
club.request = request
if club.is_valid():
@ -192,7 +194,7 @@ def new_club(request):
def edit_club_admin_members(request, club_instance, **_kwargs):
"""Vue d'edition de la liste des users administrateurs et
membres d'un club"""
club = ClubAdminandMembersForm(request.POST or None, instance=club_instance)
club = ClubAdminandMembersForm(request.POST or None, request.FILES or None, instance=club_instance)
if club.is_valid():
if club.changed_data:
club.save()
@ -215,14 +217,20 @@ def edit_info(request, user, userid):
possession du droit cableur """
if user.is_class_adherent:
user_form = AdherentEditForm(
request.POST or None, instance=user.adherent, user=request.user
request.POST or None, request.FILES or None, instance=user.adherent, user=request.user
)
else:
user_form = ClubForm(
request.POST or None, instance=user.club, user=request.user
request.POST or None, request.FILES or None,instance=user.club, user=request.user
)
if user_form.is_valid():
if user_form.changed_data:
user = user_form.save(commit=False)
former_user = Adherent.objects.get(pseudo=user.pseudo)
if former_user.profile_image:
if (user.profile_image and user.profile_image.url != former_user.profile_image.url) or (not user.profile_image):
former_image = settings.BASE_DIR+former_user.profile_image.url
os.remove(former_image)
user = user_form.save()
messages.success(request, _("The user was edited."))