From d94f7b44a3879070b9489b6369751f1177885209 Mon Sep 17 00:00:00 2001 From: Leila Date: Sun, 17 May 2020 12:51:05 +0200 Subject: [PATCH 1/4] Add thumbnail to user model --- api/locale/fr/LC_MESSAGES/django.po | 2 +- cotisations/locale/fr/LC_MESSAGES/django.po | 2 +- logs/locale/fr/LC_MESSAGES/django.po | 127 +++--- machines/locale/fr/LC_MESSAGES/django.po | 345 ++++++++-------- multi_op/locale/fr/LC_MESSAGES/django.po | 2 +- preferences/api/serializers.py | 1 + preferences/forms.py | 1 + preferences/locale/fr/LC_MESSAGES/django.po | 44 ++- re2o/locale/fr/LC_MESSAGES/django.po | 73 ++-- search/locale/fr/LC_MESSAGES/django.po | 2 +- templates/base.html | 3 + templates/locale/fr/LC_MESSAGES/django.po | 39 +- tickets/locale/fr/LC_MESSAGES/django.po | 31 +- topologie/locale/fr/LC_MESSAGES/django.po | 184 ++++----- users/admin.py | 3 +- users/api/serializers.py | 3 + users/forms.py | 5 + users/locale/fr/LC_MESSAGES/django.po | 418 ++++++++++---------- users/models.py | 25 +- users/templates/users/profil.html | 7 + users/templates/users/user.html | 2 +- users/views.py | 10 +- 22 files changed, 697 insertions(+), 632 deletions(-) diff --git a/api/locale/fr/LC_MESSAGES/django.po b/api/locale/fr/LC_MESSAGES/django.po index 34694672..d06f3230 100644 --- a/api/locale/fr/LC_MESSAGES/django.po +++ b/api/locale/fr/LC_MESSAGES/django.po @@ -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 \n" "Language-Team: \n" diff --git a/cotisations/locale/fr/LC_MESSAGES/django.po b/cotisations/locale/fr/LC_MESSAGES/django.po index 2a420c4c..ca251fb5 100644 --- a/cotisations/locale/fr/LC_MESSAGES/django.po +++ b/cotisations/locale/fr/LC_MESSAGES/django.po @@ -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 \n" "Language: fr_FR\n" diff --git a/logs/locale/fr/LC_MESSAGES/django.po b/logs/locale/fr/LC_MESSAGES/django.po index 0ca22d28..551d2813 100644 --- a/logs/locale/fr/LC_MESSAGES/django.po +++ b/logs/locale/fr/LC_MESSAGES/django.po @@ -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 \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" diff --git a/machines/locale/fr/LC_MESSAGES/django.po b/machines/locale/fr/LC_MESSAGES/django.po index 204b7463..627db36f 100644 --- a/machines/locale/fr/LC_MESSAGES/django.po +++ b/machines/locale/fr/LC_MESSAGES/django.po @@ -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 \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." diff --git a/multi_op/locale/fr/LC_MESSAGES/django.po b/multi_op/locale/fr/LC_MESSAGES/django.po index ea4fe4c9..6e271271 100644 --- a/multi_op/locale/fr/LC_MESSAGES/django.po +++ b/multi_op/locale/fr/LC_MESSAGES/django.po @@ -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 \n" "Language-Team: \n" diff --git a/preferences/api/serializers.py b/preferences/api/serializers.py index d7223028..736e4afc 100644 --- a/preferences/api/serializers.py +++ b/preferences/api/serializers.py @@ -150,6 +150,7 @@ class AssoOptionSerializer(NamespacedHMSerializer): "adresse2", "contact", "telephone", + "profile_image", "pseudo", "utilisateur_asso", "description", diff --git a/preferences/forms.py b/preferences/forms.py index 218a26b0..75491b05 100644 --- a/preferences/forms.py +++ b/preferences/forms.py @@ -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" diff --git a/preferences/locale/fr/LC_MESSAGES/django.po b/preferences/locale/fr/LC_MESSAGES/django.po index 9f6a2172..905327b4 100644 --- a/preferences/locale/fr/LC_MESSAGES/django.po +++ b/preferences/locale/fr/LC_MESSAGES/django.po @@ -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 \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" diff --git a/re2o/locale/fr/LC_MESSAGES/django.po b/re2o/locale/fr/LC_MESSAGES/django.po index 5f757710..3cdaec99 100644 --- a/re2o/locale/fr/LC_MESSAGES/django.po +++ b/re2o/locale/fr/LC_MESSAGES/django.po @@ -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 \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 "Date du commit : %(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" diff --git a/search/locale/fr/LC_MESSAGES/django.po b/search/locale/fr/LC_MESSAGES/django.po index ec263386..6bcb49f5 100644 --- a/search/locale/fr/LC_MESSAGES/django.po +++ b/search/locale/fr/LC_MESSAGES/django.po @@ -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 \n" "Language-Team: \n" diff --git a/templates/base.html b/templates/base.html index 95bd3f37..28bb6f57 100644 --- a/templates/base.html +++ b/templates/base.html @@ -216,6 +216,9 @@ with this program; if not, write to the Free Software Foundation, Inc., {% if request_user.is_authenticated %}

{{ request_user.name }} {{ request_user.surname }}

+ {% if request_user.image_url %} + + {% endif %}
diff --git a/templates/locale/fr/LC_MESSAGES/django.po b/templates/locale/fr/LC_MESSAGES/django.po index 8d5b6ecb..3579d444 100644 --- a/templates/locale/fr/LC_MESSAGES/django.po +++ b/templates/locale/fr/LC_MESSAGES/django.po @@ -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 \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 GPLv2 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 ." msgstr "Codé avec ." -#: 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 "" diff --git a/tickets/locale/fr/LC_MESSAGES/django.po b/tickets/locale/fr/LC_MESSAGES/django.po index c5e1fbe2..6ad77e5c 100644 --- a/tickets/locale/fr/LC_MESSAGES/django.po +++ b/tickets/locale/fr/LC_MESSAGES/django.po @@ -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 \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" diff --git a/topologie/locale/fr/LC_MESSAGES/django.po b/topologie/locale/fr/LC_MESSAGES/django.po index 43a96241..e5621926 100644 --- a/topologie/locale/fr/LC_MESSAGES/django.po +++ b/topologie/locale/fr/LC_MESSAGES/django.po @@ -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 \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à. " diff --git a/users/admin.py b/users/admin.py index f3ec04f4..6de5069a 100644 --- a/users/admin.py +++ b/users/admin.py @@ -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", ), }, ), diff --git a/users/api/serializers.py b/users/api/serializers.py index e4c6c7e0..9c941a53 100644 --- a/users/api/serializers.py +++ b/users/api/serializers.py @@ -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", diff --git a/users/forms.py b/users/forms.py index d9d68c88..6b116d25 100644 --- a/users/forms.py +++ b/users/forms.py @@ -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", diff --git a/users/locale/fr/LC_MESSAGES/django.po b/users/locale/fr/LC_MESSAGES/django.po index eac72933..6c950d10 100644 --- a/users/locale/fr/LC_MESSAGES/django.po +++ b/users/locale/fr/LC_MESSAGES/django.po @@ -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: 2018-06-27 23:35+0200\n" "Last-Translator: Laouen Fernet \n" "Language-Team: \n" @@ -39,7 +39,7 @@ msgstr "Vous n'avez pas le droit de voir cette application." msgid "Current password" msgstr "Mot de passe actuel" -#: users/forms.py:84 users/forms.py:598 users/forms.py:626 +#: users/forms.py:84 users/forms.py:603 users/forms.py:631 msgid "New password" msgstr "Nouveau mot de passe" @@ -55,12 +55,12 @@ msgstr "Les nouveaux mots de passe ne correspondent pas." msgid "The current password is incorrect." msgstr "Le mot de passe actuel est incorrect." -#: users/forms.py:133 users/forms.py:181 users/forms.py:405 -#: users/models.py:1954 +#: users/forms.py:133 users/forms.py:181 users/forms.py:407 +#: users/models.py:1975 msgid "Password" msgstr "Mot de passe" -#: users/forms.py:139 users/forms.py:184 users/forms.py:412 +#: users/forms.py:139 users/forms.py:184 users/forms.py:414 msgid "Password confirmation" msgstr "Confirmation du mot de passe" @@ -68,7 +68,7 @@ msgstr "Confirmation du mot de passe" msgid "Is admin" msgstr "Est admin" -#: users/forms.py:160 users/forms.py:204 users/forms.py:474 +#: users/forms.py:160 users/forms.py:204 users/forms.py:477 msgid "The passwords don't match." msgstr "Les mots de passe ne correspondent pas." @@ -81,8 +81,8 @@ msgstr "L'utilisateur est admin : %s" #: users/templates/users/aff_listright.html:63 #: users/templates/users/aff_listright.html:168 #: users/templates/users/aff_users.html:39 -#: users/templates/users/profil.html:204 users/templates/users/profil.html:368 -#: users/templates/users/profil.html:387 +#: users/templates/users/profil.html:204 users/templates/users/profil.html:375 +#: users/templates/users/profil.html:394 msgid "Username" msgstr "Pseudo" @@ -98,59 +98,65 @@ msgstr "" "dans le futur." #: users/forms.py:319 users/templates/users/aff_users.html:35 -#: users/templates/users/profil.html:193 users/templates/users/profil.html:367 -#: users/templates/users/profil.html:386 +#: users/templates/users/profil.html:193 users/templates/users/profil.html:374 +#: users/templates/users/profil.html:393 msgid "First name" msgstr "Prénom" #: users/forms.py:320 users/templates/users/aff_users.html:37 -#: users/templates/users/profil.html:199 users/templates/users/profil.html:366 -#: users/templates/users/profil.html:385 +#: users/templates/users/profil.html:199 users/templates/users/profil.html:373 +#: users/templates/users/profil.html:392 msgid "Surname" msgstr "Nom" -#: users/forms.py:321 users/forms.py:536 users/models.py:1954 +#: users/forms.py:321 users/forms.py:540 users/models.py:1975 #: users/templates/users/aff_emailaddress.html:36 -#: users/templates/users/profil.html:209 +#: users/templates/users/profil.html:216 msgid "Email address" msgstr "Adresse mail" -#: users/forms.py:322 users/forms.py:534 users/forms.py:679 +#: users/forms.py:322 users/forms.py:538 users/forms.py:684 #: users/templates/users/aff_schools.html:37 -#: users/templates/users/profil.html:230 +#: users/templates/users/profil.html:237 msgid "School" msgstr "Établissement" -#: users/forms.py:323 users/forms.py:535 +#: users/forms.py:323 users/forms.py:539 #: users/templates/users/aff_serviceusers.html:34 -#: users/templates/users/profil.html:235 +#: users/templates/users/profil.html:242 msgid "Comment" msgstr "Commentaire" -#: users/forms.py:325 users/forms.py:538 +#: users/forms.py:324 +#, fuzzy +#| msgid "Profile" +msgid "Profile Image" +msgstr "Photo de profil" + +#: users/forms.py:326 users/forms.py:542 #: users/templates/users/aff_clubs.html:40 #: users/templates/users/aff_users.html:41 -#: users/templates/users/profil.html:214 +#: users/templates/users/profil.html:221 msgid "Room" msgstr "Chambre" -#: users/forms.py:326 users/forms.py:539 +#: users/forms.py:327 users/forms.py:543 msgid "No room" msgstr "Pas de chambre" -#: users/forms.py:327 users/forms.py:540 +#: users/forms.py:328 users/forms.py:544 msgid "Select a school" msgstr "Sélectionnez un établissement" -#: users/forms.py:343 +#: users/forms.py:345 msgid "Force the move?" msgstr "Forcer le déménagement ?" -#: users/forms.py:351 users/forms.py:563 +#: users/forms.py:353 users/forms.py:568 msgid "A valid telephone number is required." msgstr "Un numéro de téléphone valide est requis." -#: users/forms.py:385 +#: users/forms.py:387 msgid "" "If this options is set, you will receive a link to set your initial password " "by email. If you do not have any means of accessing your emails, you can " @@ -165,11 +171,11 @@ msgstr "" "votre adresse dans les délais impartis, votre connexion sera automatiquement " "suspendue." -#: users/forms.py:399 +#: users/forms.py:401 msgid "Send password reset link by email." msgstr "Envoyer le lien de modification du mot de passe par mail." -#: users/forms.py:419 +#: users/forms.py:421 msgid "" "If you already have an account, please use it. If your lost access to it, " "please consider using the forgotten password button on the login page or " @@ -180,271 +186,271 @@ msgstr "" "passe oublié est à votre disposition. Si vous avez oublié votre login, " "contactez le support." -#: users/forms.py:426 +#: users/forms.py:428 msgid "I certify that I have not had an account before." msgstr "Je certifie sur l'honneur ne pas déjà avoir de compte." -#: users/forms.py:452 +#: users/forms.py:455 msgid "I commit to accept the" msgstr "J'accepte les" -#: users/forms.py:454 +#: users/forms.py:457 msgid "General Terms of Use" msgstr "Conditions Générales d'Utilisation" -#: users/forms.py:501 +#: users/forms.py:504 msgid "Leave empty if you don't have any GPG key." msgstr "Laissez vide si vous n'avez pas de clé GPG." -#: users/forms.py:506 +#: users/forms.py:509 msgid "Default shell" msgstr "Interface en ligne de commande par défaut" -#: users/forms.py:533 users/templates/users/aff_clubs.html:36 +#: users/forms.py:537 users/templates/users/aff_clubs.html:36 #: users/templates/users/aff_serviceusers.html:32 msgid "Name" msgstr "Nom" -#: users/forms.py:541 +#: users/forms.py:545 msgid "Use a mailing list" msgstr "Utiliser une liste de diffusion" -#: users/forms.py:647 users/templates/users/profil.html:277 +#: users/forms.py:652 users/templates/users/profil.html:284 msgid "State" msgstr "État" -#: users/forms.py:648 +#: users/forms.py:653 msgid "Email state" msgstr "État du mail" -#: users/forms.py:666 users/templates/users/aff_listright.html:38 +#: users/forms.py:671 users/templates/users/aff_listright.html:38 msgid "Superuser" msgstr "Superutilisateur" -#: users/forms.py:692 +#: users/forms.py:697 msgid "Shell name" msgstr "Nom de l'interface en ligne de commande" -#: users/forms.py:712 +#: users/forms.py:717 msgid "Name of the group of rights" msgstr "Nom du groupe de droits" -#: users/forms.py:724 +#: users/forms.py:729 msgid "GID. Warning: this field must not be edited after creation." msgstr "GID. Attention : ce champ ne doit pas être modifié après création." -#: users/forms.py:733 +#: users/forms.py:738 msgid "Current groups of rights" msgstr "Groupes de droits actuels" -#: users/forms.py:751 +#: users/forms.py:756 msgid "Current schools" msgstr "Établissements actuels" -#: users/forms.py:770 users/forms.py:785 users/templates/users/aff_bans.html:41 +#: users/forms.py:775 users/forms.py:790 users/templates/users/aff_bans.html:41 #: users/templates/users/aff_whitelists.html:41 msgid "End date" msgstr "Date de fin" -#: users/forms.py:800 +#: users/forms.py:805 msgid "Local part of the email address" msgstr "Partie locale de l'adresse mail" -#: users/forms.py:801 +#: users/forms.py:806 msgid "Can't contain @." msgstr "Ne peut pas contenir @." -#: users/forms.py:818 +#: users/forms.py:823 msgid "Main email address" msgstr "Adresse mail principale" -#: users/forms.py:821 +#: users/forms.py:826 msgid "Redirect local emails" msgstr "Rediriger les mails locaux" -#: users/forms.py:823 +#: users/forms.py:828 msgid "Use local emails" msgstr "Utiliser les mails locaux" -#: users/forms.py:863 +#: users/forms.py:868 msgid "This room is my room" msgstr "Il s'agit bien de ma chambre" -#: users/forms.py:868 +#: users/forms.py:873 msgid "This new connected device is mine" msgstr "Ce nouvel appareil connecté m'appartient" -#: users/models.py:108 +#: users/models.py:111 #, python-format msgid "The username \"%(label)s\" contains forbidden characters." msgstr "Le pseudo « %(label)s » contient des caractères interdits." -#: users/models.py:137 +#: users/models.py:140 msgid "Users must have an username." msgstr "Les utilisateurs doivent avoir un pseudo." -#: users/models.py:140 +#: users/models.py:143 msgid "Username should only contain [a-z0-9-]." msgstr "Le pseudo devrait seulement contenir [a-z0-9-]" -#: users/models.py:184 users/templates/users/aff_clubs.html:55 +#: users/models.py:187 users/templates/users/aff_clubs.html:55 #: users/templates/users/aff_users.html:57 -#: users/templates/users/profil.html:279 +#: users/templates/users/profil.html:286 msgid "Active" msgstr "Actif" -#: users/models.py:185 users/templates/users/aff_clubs.html:57 +#: users/models.py:188 users/templates/users/aff_clubs.html:57 #: users/templates/users/aff_users.html:59 -#: users/templates/users/profil.html:281 users/templates/users/profil.html:297 +#: users/templates/users/profil.html:288 users/templates/users/profil.html:304 msgid "Disabled" msgstr "Désactivé" -#: users/models.py:186 users/templates/users/profil.html:283 +#: users/models.py:189 users/templates/users/profil.html:290 msgid "Archived" msgstr "Archivé" -#: users/models.py:187 users/templates/users/profil.html:285 +#: users/models.py:190 users/templates/users/profil.html:292 msgid "Not yet active" msgstr "Pas encore adhéré" -#: users/models.py:188 users/templates/users/profil.html:287 +#: users/models.py:191 users/templates/users/profil.html:294 msgid "Fully archived" msgstr "Complètement archivé" -#: users/models.py:195 +#: users/models.py:198 msgid "Confirmed" msgstr "Confirmé" -#: users/models.py:196 +#: users/models.py:199 msgid "Not confirmed" msgstr "Non confirmé" -#: users/models.py:197 +#: users/models.py:200 msgid "Waiting for email confirmation" msgstr "En attente de confirmation" -#: users/models.py:204 users/models.py:1607 +#: users/models.py:207 users/models.py:1628 msgid "Must only contain letters, numerals or dashes." msgstr "Doit seulement contenir des lettres, chiffres ou tirets." -#: users/models.py:210 +#: users/models.py:213 msgid "External email address allowing us to contact you." msgstr "Adresse mail externe nous permettant de vous contacter." -#: users/models.py:215 +#: users/models.py:218 msgid "" "Enable redirection of the local email messages to the main email address." msgstr "" "Activer la redirection des mails locaux vers l'adresse mail principale." -#: users/models.py:221 +#: users/models.py:224 msgid "Enable the local email account." msgstr "Activer le compte mail local" -#: users/models.py:228 +#: users/models.py:231 msgid "Education institute." msgstr "Etablissement d'enseignement" -#: users/models.py:235 +#: users/models.py:238 msgid "Unix shell." msgstr "Interface en ligne de commande" -#: users/models.py:238 +#: users/models.py:241 msgid "Comment, school year." msgstr "Commentaire, promotion." -#: users/models.py:244 +#: users/models.py:247 msgid "Account state." msgstr "Etat du compte" -#: users/models.py:254 +#: users/models.py:257 msgid "Optionnal legacy uid, for import and transition purpose" msgstr "Uid legacy optionnel, pour aider les imports et transitions" -#: users/models.py:257 +#: users/models.py:260 msgid "enable shortcuts on Re2o website" msgstr "activer les raccourcis sur le site de Re2o" -#: users/models.py:269 +#: users/models.py:273 msgid "Can change the password of a user" msgstr "Peut changer le mot de passe d'un utilisateur" -#: users/models.py:270 +#: users/models.py:274 msgid "Can edit the state of a user" msgstr "Peut changer l'état d'un utilisateur" -#: users/models.py:271 +#: users/models.py:275 msgid "Can force the move" msgstr "Peut forcer le déménagement" -#: users/models.py:272 +#: users/models.py:276 msgid "Can edit the shell of a user" msgstr "Peut modifier l'interface en ligne de commande d'un utilisateur" -#: users/models.py:273 +#: users/models.py:277 msgid "Can edit the pseudo of a user" msgstr "Peut changer le pseudo d'un utilisateur" -#: users/models.py:276 +#: users/models.py:280 msgid "Can edit the groups of rights of a user (critical permission)" msgstr "" "Peut modifier les groupes de droits d'un utilisateur (permission critique)" -#: users/models.py:278 +#: users/models.py:282 msgid "Can edit all users, including those with rights" msgstr "" "Peut modifier tous les utilisateurs, y compris ceux possédant des droits" -#: users/models.py:279 +#: users/models.py:283 msgid "Can view a user object" msgstr "Peut voir un objet utilisateur" -#: users/models.py:281 +#: users/models.py:285 msgid "user (member or club)" msgstr "utilisateur (adhérent ou club)" -#: users/models.py:282 +#: users/models.py:286 msgid "users (members or clubs)" msgstr "utilisateurs (adhérents ou clubs)" -#: users/models.py:300 users/models.py:328 users/models.py:338 +#: users/models.py:304 users/models.py:332 users/models.py:342 msgid "Unknown type." msgstr "Type inconnu." -#: users/models.py:334 users/templates/users/aff_listright.html:75 +#: users/models.py:338 users/templates/users/aff_listright.html:75 #: users/templates/users/aff_listright.html:180 msgid "Member" msgstr "Adhérent" -#: users/models.py:336 +#: users/models.py:340 msgid "Club" msgstr "Club" -#: users/models.py:915 +#: users/models.py:919 msgid "Maximum number of registered machines reached." msgstr "Nombre maximum de machines enregistrées atteint." -#: users/models.py:917 +#: users/models.py:921 msgid "Re2o doesn't know wich machine type to assign." msgstr "Re2o ne sait pas quel type de machine attribuer." -#: users/models.py:940 users/templates/users/user_autocapture.html:64 +#: users/models.py:944 users/templates/users/user_autocapture.html:64 msgid "OK" msgstr "OK" -#: users/models.py:1038 +#: users/models.py:1042 msgid "This user is archived." msgstr "Cet utilisateur est archivé." -#: users/models.py:1052 users/models.py:1106 +#: users/models.py:1056 users/models.py:1110 msgid "You don't have the right to edit this club." msgstr "Vous n'avez pas le droit de modifier ce club." -#: users/models.py:1064 +#: users/models.py:1068 msgid "User with critical rights, can't be edited." msgstr "Utilisateur avec des droits critiques, ne peut être modifié." -#: users/models.py:1071 +#: users/models.py:1075 msgid "" "Impossible to edit the organisation's user without the \"change_all_users\" " "right." @@ -452,261 +458,261 @@ msgstr "" "Impossible de modifier l'utilisateur de l'association sans le droit « " "change_all_users »." -#: users/models.py:1083 users/models.py:1121 +#: users/models.py:1087 users/models.py:1125 msgid "You don't have the right to edit another user." msgstr "Vous n'avez pas le droit de modifier un autre utilisateur." -#: users/models.py:1147 +#: users/models.py:1151 msgid "You don't have the right to change the room." msgstr "Vous n'avez pas le droit de changer la chambre." -#: users/models.py:1164 +#: users/models.py:1168 msgid "You don't have the right to change the state." msgstr "Vous n'avez pas le droit de changer l'état." -#: users/models.py:1184 +#: users/models.py:1188 msgid "You don't have the right to change the shell." msgstr "Vous n'avez pas le droit de changer l'interface en ligne de commande." -#: users/models.py:1206 +#: users/models.py:1210 msgid "You don't have the right to change the pseudo." msgstr "Vous n'avez pas le droit de changer le pseudo." -#: users/models.py:1223 users/models.py:1238 +#: users/models.py:1227 users/models.py:1242 msgid "Local email accounts must be enabled." msgstr "Les comptes mail locaux doivent être activés." -#: users/models.py:1253 +#: users/models.py:1257 msgid "You don't have the right to force the move." msgstr "Vous n'avez pas le droit de forcer le déménagement." -#: users/models.py:1268 +#: users/models.py:1272 msgid "You don't have the right to edit the user's groups of rights." msgstr "" "Vous n'avez pas le droit de modifier les groupes de droits d'un autre " "utilisateur." -#: users/models.py:1284 +#: users/models.py:1288 msgid "\"superuser\" right required to edit the superuser flag." msgstr "Droit « superuser » requis pour modifier le signalement superuser." -#: users/models.py:1309 +#: users/models.py:1313 msgid "You don't have the right to view this club." msgstr "Vous n'avez pas le droit de voir ce club." -#: users/models.py:1318 +#: users/models.py:1322 msgid "You don't have the right to view another user." msgstr "Vous n'avez pas le droit de voir un autre utilisateur." -#: users/models.py:1333 users/models.py:1543 +#: users/models.py:1337 users/models.py:1564 msgid "You don't have the right to view the list of users." msgstr "Vous n'avez pas le droit de voir la liste des utilisateurs." -#: users/models.py:1350 +#: users/models.py:1354 msgid "You don't have the right to delete this user." msgstr "Vous n'avez pas le droit de supprimer cet utilisateur." -#: users/models.py:1372 +#: users/models.py:1376 msgid "This username is already used." msgstr "Ce pseudo est déjà utilisé." -#: users/models.py:1379 +#: users/models.py:1383 msgid "Email field cannot be empty." msgstr "Le champ mail ne peut pas ^êêtre vide" -#: users/models.py:1386 +#: users/models.py:1390 msgid "You can't use a {} address as an external contact address." msgstr "Vous ne pouvez pas utiliser une adresse {} pour votre adresse externe." -#: users/models.py:1413 +#: users/models.py:1434 msgid "member" msgstr "adhérent" -#: users/models.py:1414 +#: users/models.py:1435 msgid "members" msgstr "adhérents" -#: users/models.py:1431 +#: users/models.py:1452 msgid "A GPG fingerprint must contain 40 hexadecimal characters." msgstr "Une empreinte GPG doit contenir 40 caractères hexadécimaux." -#: users/models.py:1456 +#: users/models.py:1477 msgid "Self registration is disabled." msgstr "L'auto inscription est désactivée." -#: users/models.py:1466 +#: users/models.py:1487 msgid "You don't have the right to create a user." msgstr "Vous n'avez pas le droit de créer un utilisateur." -#: users/models.py:1496 +#: users/models.py:1517 msgid "club" msgstr "club" -#: users/models.py:1497 +#: users/models.py:1518 msgid "clubs" msgstr "clubs" -#: users/models.py:1508 +#: users/models.py:1529 msgid "You must be authenticated." msgstr "Vous devez être authentifié." -#: users/models.py:1516 +#: users/models.py:1537 msgid "You don't have the right to create a club." msgstr "Vous n'avez pas le droit de créer un club." -#: users/models.py:1611 +#: users/models.py:1632 msgid "Comment." msgstr "Commentaire." -#: users/models.py:1617 +#: users/models.py:1638 msgid "Can view a service user object" msgstr "Peut voir un objet utilisateur service" -#: users/models.py:1618 users/views.py:349 +#: users/models.py:1639 users/views.py:349 msgid "service user" msgstr "utilisateur service" -#: users/models.py:1619 +#: users/models.py:1640 msgid "service users" msgstr "utilisateurs service" -#: users/models.py:1623 +#: users/models.py:1644 #, python-brace-format msgid "Service user <{name}>" msgstr "Utilisateur service <{name}>" -#: users/models.py:1690 +#: users/models.py:1711 msgid "Can view a school object" msgstr "Peut voir un objet établissement" -#: users/models.py:1691 +#: users/models.py:1712 msgid "school" msgstr "établissement" -#: users/models.py:1692 +#: users/models.py:1713 msgid "schools" msgstr "établissements" -#: users/models.py:1711 +#: users/models.py:1732 msgid "UNIX group names can only contain lower case letters." msgstr "" "Les noms de groupe UNIX peuvent seulement contenir des lettres minuscules." -#: users/models.py:1717 +#: users/models.py:1738 msgid "Description." msgstr "Description." -#: users/models.py:1720 +#: users/models.py:1741 msgid "Can view a group of rights object" msgstr "Peut voir un objet groupe de droits" -#: users/models.py:1721 +#: users/models.py:1742 msgid "group of rights" msgstr "groupe de droits" -#: users/models.py:1722 +#: users/models.py:1743 msgid "groups of rights" msgstr "groupes de droits" -#: users/models.py:1767 +#: users/models.py:1788 msgid "Can view a shell object" msgstr "Peut voir un objet interface en ligne de commande" -#: users/models.py:1768 users/views.py:649 +#: users/models.py:1789 users/views.py:649 msgid "shell" msgstr "interface en ligne de commande" -#: users/models.py:1769 +#: users/models.py:1790 msgid "shells" msgstr "interfaces en ligne de commande" -#: users/models.py:1787 +#: users/models.py:1808 msgid "HARD (no access)" msgstr "HARD (pas d'accès)" -#: users/models.py:1788 +#: users/models.py:1809 msgid "SOFT (local access only)" msgstr "SOFT (accès local uniquement)" -#: users/models.py:1789 +#: users/models.py:1810 msgid "RESTRICTED (speed limitation)" msgstr "RESTRICTED (limitation de vitesse)" -#: users/models.py:1800 +#: users/models.py:1821 msgid "Can view a ban object" msgstr "Peut voir un objet bannissement" -#: users/models.py:1801 users/views.py:400 +#: users/models.py:1822 users/views.py:400 msgid "ban" msgstr "bannissement" -#: users/models.py:1802 +#: users/models.py:1823 msgid "bans" msgstr "bannissements" -#: users/models.py:1839 +#: users/models.py:1860 msgid "You don't have the right to view other bans than yours." msgstr "" "Vous n'avez pas le droit de voir d'autres bannissements que les vôtres." -#: users/models.py:1887 +#: users/models.py:1908 msgid "Can view a whitelist object" msgstr "Peut voir un objet accès gracieux" -#: users/models.py:1888 +#: users/models.py:1909 msgid "whitelist (free of charge access)" msgstr "Accès gracieux" -#: users/models.py:1889 +#: users/models.py:1910 msgid "whitelists (free of charge access)" msgstr "Accès gracieux" -#: users/models.py:1909 +#: users/models.py:1930 msgid "You don't have the right to view other whitelists than yours." msgstr "" "Vous n'avez pas le droit de voir d'autres accès gracieux que les vôtres." -#: users/models.py:2107 +#: users/models.py:2128 msgid "User of the local email account." msgstr "Utilisateur du compte mail local." -#: users/models.py:2110 +#: users/models.py:2131 msgid "Local part of the email address." msgstr "Partie locale de l'adresse mail." -#: users/models.py:2115 +#: users/models.py:2136 msgid "Can view a local email account object" msgstr "Peut voir un objet compte mail local" -#: users/models.py:2117 +#: users/models.py:2138 msgid "local email account" msgstr "compte mail local" -#: users/models.py:2118 +#: users/models.py:2139 msgid "local email accounts" msgstr "comptes mail locaux" -#: users/models.py:2146 users/models.py:2181 users/models.py:2215 -#: users/models.py:2249 +#: users/models.py:2167 users/models.py:2202 users/models.py:2236 +#: users/models.py:2270 msgid "The local email accounts are not enabled." msgstr "Les comptes mail locaux ne sont pas activés." -#: users/models.py:2151 +#: users/models.py:2172 msgid "You don't have the right to add a local email account to another user." msgstr "" "Vous n'avez pas le droit d'ajouter un compte mail local à un autre " "utilisateur." -#: users/models.py:2161 +#: users/models.py:2182 msgid "You reached the limit of {} local email accounts." msgstr "Vous avez atteint la limite de {} comptes mail locaux." -#: users/models.py:2187 +#: users/models.py:2208 msgid "You don't have the right to view another user's local email account." msgstr "" "Vous n'avez pas le droit de voir le compte mail local d'un autre utilisateur." -#: users/models.py:2207 +#: users/models.py:2228 msgid "" "You can't delete a local email account whose local part is the same as the " "username." @@ -714,13 +720,13 @@ msgstr "" "Vous ne pouvez pas supprimer un compte mail local dont la partie locale est " "la même que le pseudo." -#: users/models.py:2221 +#: users/models.py:2242 msgid "You don't have the right to delete another user's local email account." msgstr "" "Vous n'avez pas le droit de supprimer le compte mail local d'un autre " "utilisateur." -#: users/models.py:2241 +#: users/models.py:2262 msgid "" "You can't edit a local email account whose local part is the same as the " "username." @@ -728,13 +734,13 @@ msgstr "" "Vous ne pouvez pas modifier un compte mail local dont la partie locale est " "la même que le pseudo." -#: users/models.py:2255 +#: users/models.py:2276 msgid "You don't have the right to edit another user's local email account." msgstr "" "Vous n'avez pas le droit de modifier le compte mail local d'un autre " "utilisateur." -#: users/models.py:2264 +#: users/models.py:2285 msgid "The local part must not contain @ or +." msgstr "La partie locale ne doit pas contenir @ ou +." @@ -760,7 +766,7 @@ msgstr "Fin de cotisation le" #: users/templates/users/aff_clubs.html:43 #: users/templates/users/aff_users.html:44 -#: users/templates/users/profil.html:292 +#: users/templates/users/profil.html:299 msgid "Internet access" msgstr "Accès Internet" @@ -771,7 +777,7 @@ msgstr "Profil" #: users/templates/users/aff_clubs.html:53 #: users/templates/users/aff_users.html:54 -#: users/templates/users/profil.html:254 +#: users/templates/users/profil.html:261 msgid "Not a member" msgstr "Non adhérent" @@ -870,7 +876,7 @@ msgid "Access group" msgstr "Group d'accès" #: users/templates/users/aff_shell.html:32 -#: users/templates/users/profil.html:333 +#: users/templates/users/profil.html:340 msgid "Shell" msgstr "Interface en ligne de commande" @@ -911,7 +917,7 @@ msgstr "" "( %(objet)s ) ?" #: users/templates/users/index_ban.html:32 -#: users/templates/users/profil.html:464 users/templates/users/sidebar.html:58 +#: users/templates/users/profil.html:471 users/templates/users/sidebar.html:58 msgid "Bans" msgstr "Bannissements" @@ -982,7 +988,7 @@ msgid "Add a shell" msgstr "Ajouter une interface en ligne de commande" #: users/templates/users/index_whitelist.html:32 -#: users/templates/users/profil.html:489 users/templates/users/sidebar.html:64 +#: users/templates/users/profil.html:496 users/templates/users/sidebar.html:64 msgid "Whitelists" msgstr "Accès gracieux" @@ -1073,16 +1079,16 @@ msgstr "Étendre la durée de connexion" msgid "Refill the balance" msgstr "Recharger le solde" -#: users/templates/users/profil.html:123 users/templates/users/profil.html:408 +#: users/templates/users/profil.html:123 users/templates/users/profil.html:415 msgid "Machines" msgstr "Machines" #: users/templates/users/profil.html:127 users/templates/users/profil.html:139 -#: users/templates/users/profil.html:416 +#: users/templates/users/profil.html:423 msgid "Add a machine" msgstr "Ajouter une machine" -#: users/templates/users/profil.html:135 users/templates/users/profil.html:423 +#: users/templates/users/profil.html:135 users/templates/users/profil.html:430 msgid "No machine" msgstr "Pas de machine" @@ -1118,143 +1124,149 @@ msgid "Mailing disabled" msgstr "Envoi de mails désactivé" #: users/templates/users/profil.html:210 +#, fuzzy +#| msgid "Profile" +msgid "Profile picture" +msgstr "Profil" + +#: users/templates/users/profil.html:217 msgid "Pending confirmation..." msgstr "En attente de confirmation..." -#: users/templates/users/profil.html:218 +#: users/templates/users/profil.html:225 msgid "Connected" msgstr "Connecté" -#: users/templates/users/profil.html:219 +#: users/templates/users/profil.html:226 msgid "Pending connection..." msgstr "Connexion en attente..." -#: users/templates/users/profil.html:225 +#: users/templates/users/profil.html:232 msgid "Telephone number" msgstr "Numéro de téléphone" -#: users/templates/users/profil.html:240 +#: users/templates/users/profil.html:247 msgid "Registration date" msgstr "Date d'inscription" -#: users/templates/users/profil.html:245 +#: users/templates/users/profil.html:252 msgid "Last login" msgstr "Dernière connexion" -#: users/templates/users/profil.html:250 +#: users/templates/users/profil.html:257 msgid "End of membership" msgstr "Fin d'adhésion" -#: users/templates/users/profil.html:259 +#: users/templates/users/profil.html:266 msgid "Whitelist" msgstr "Accès gracieux" -#: users/templates/users/profil.html:263 users/templates/users/profil.html:306 +#: users/templates/users/profil.html:270 users/templates/users/profil.html:313 msgid "None" msgstr "Aucun" -#: users/templates/users/profil.html:268 +#: users/templates/users/profil.html:275 msgid "Ban" msgstr "Bannissement" -#: users/templates/users/profil.html:272 +#: users/templates/users/profil.html:279 msgid "Not banned" msgstr "Non banni" -#: users/templates/users/profil.html:295 +#: users/templates/users/profil.html:302 #, python-format msgid "Active (until %(end_access)s)" msgstr "Actif (jusqu'au %(end_access)s)" -#: users/templates/users/profil.html:302 users/templates/users/sidebar.html:82 +#: users/templates/users/profil.html:309 users/templates/users/sidebar.html:82 msgid "Groups of rights" msgstr "Groupes de droits" -#: users/templates/users/profil.html:311 +#: users/templates/users/profil.html:318 msgid "Balance" msgstr "Solde" -#: users/templates/users/profil.html:318 +#: users/templates/users/profil.html:325 msgid "Refill" msgstr "Recharger" -#: users/templates/users/profil.html:326 +#: users/templates/users/profil.html:333 msgid "GPG fingerprint" msgstr "Empreinte GPG" -#: users/templates/users/profil.html:338 +#: users/templates/users/profil.html:345 msgid "Shortcuts enabled" msgstr "Raccourcis activés" -#: users/templates/users/profil.html:349 +#: users/templates/users/profil.html:356 msgid "Manage the club" msgstr "Gérer le club" -#: users/templates/users/profil.html:357 +#: users/templates/users/profil.html:364 msgid "Manage the admins and members" msgstr "Gérer les admins et les membres" -#: users/templates/users/profil.html:361 +#: users/templates/users/profil.html:368 msgid "Club admins" msgstr "Admins du clubs" -#: users/templates/users/profil.html:380 +#: users/templates/users/profil.html:387 msgid "Members" msgstr "Adhérents" -#: users/templates/users/profil.html:433 +#: users/templates/users/profil.html:440 msgid "Subscriptions" msgstr "Cotisations" -#: users/templates/users/profil.html:441 +#: users/templates/users/profil.html:448 msgid "Add a subscription" msgstr "Ajouter une cotisation" -#: users/templates/users/profil.html:446 +#: users/templates/users/profil.html:453 msgid "Edit the balance" msgstr "Modifier le solde" -#: users/templates/users/profil.html:455 +#: users/templates/users/profil.html:462 msgid "No invoice" msgstr "Pas de facture" -#: users/templates/users/profil.html:472 +#: users/templates/users/profil.html:479 msgid "Add a ban" msgstr "Ajouter un bannissement" -#: users/templates/users/profil.html:480 +#: users/templates/users/profil.html:487 msgid "No ban" msgstr "Pas de bannissement" -#: users/templates/users/profil.html:497 +#: users/templates/users/profil.html:504 msgid "Grant a whitelist" msgstr "Donner un accès gracieux" -#: users/templates/users/profil.html:505 +#: users/templates/users/profil.html:512 msgid "No whitelist" msgstr "Pas d'accès gracieux" -#: users/templates/users/profil.html:513 +#: users/templates/users/profil.html:520 msgid "Email settings" msgstr "Paramètres mail" -#: users/templates/users/profil.html:520 +#: users/templates/users/profil.html:527 msgid "Edit email settings" msgstr "Modifier les paramètres mail" -#: users/templates/users/profil.html:529 users/templates/users/profil.html:555 +#: users/templates/users/profil.html:536 users/templates/users/profil.html:562 msgid "Contact email address" msgstr "Adresse mail de contact" -#: users/templates/users/profil.html:533 +#: users/templates/users/profil.html:540 msgid "Enable the local email account" msgstr "Activer le compte mail local" -#: users/templates/users/profil.html:535 +#: users/templates/users/profil.html:542 msgid "Enable the local email redirection" msgstr "Activer la redirection mail locale" -#: users/templates/users/profil.html:539 +#: users/templates/users/profil.html:546 msgid "" "The contact email address is the email address to which we send emails to " "contact you. If you would like to use your external email address for that, " @@ -1266,7 +1278,7 @@ msgstr "" "externe pour cela, vous pouvez soit désactiver votre adresse mail locale " "soit activer la redirection des mails locaux." -#: users/templates/users/profil.html:544 +#: users/templates/users/profil.html:551 msgid "Add an email address" msgstr "Ajouter une adresse mail" diff --git a/users/models.py b/users/models.py index 13f6cb07..e4ddb18f 100755 --- a/users/models.py +++ b/users/models.py @@ -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 diff --git a/users/templates/users/profil.html b/users/templates/users/profil.html index 4fec3c18..ad0605c7 100644 --- a/users/templates/users/profil.html +++ b/users/templates/users/profil.html @@ -205,6 +205,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ users.pseudo }}
+ {% if users.image_url %} +
+
{% trans "Profile picture" %}
+
+
+ {% endif %} +
{% trans "Email address" %}
{{ users.email }}{% if users.email_state != users.EMAIL_STATE_VERIFIED %}
{% trans "Pending confirmation..." %}{% endif %}
diff --git a/users/templates/users/user.html b/users/templates/users/user.html index f6e421bb..fe778462 100644 --- a/users/templates/users/user.html +++ b/users/templates/users/user.html @@ -32,7 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc., {% block content %} {% bootstrap_form_errors userform %} -
+ {% csrf_token %} {% massive_bootstrap_form userform 'room,school,administrators,members' %} {% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %} diff --git a/users/views.py b/users/views.py index 8450b9c2..63aad8b0 100644 --- a/users/views.py +++ b/users/views.py @@ -117,7 +117,7 @@ from .forms import ( 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 +167,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 +192,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,11 +215,11 @@ 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: From c4fcf68077a663df1b40982cc6abe8189a9ff356 Mon Sep 17 00:00:00 2001 From: Leila Date: Sun, 17 May 2020 18:01:22 +0200 Subject: [PATCH 2/4] Update image in filesystem when user changes image --- users/views.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/users/views.py b/users/views.py index 63aad8b0..8f0db1ea 100644 --- a/users/views.py +++ b/users/views.py @@ -59,6 +59,7 @@ from machines.models import Machine from preferences.models import OptionalUser, GeneralOption, AssoOption from importlib import import_module +from re2o.settings import BASE_DIR from re2o.settings_local import OPTIONNAL_APPS_RE2O from re2o.views import form from re2o.utils import all_has_access, permission_tree @@ -112,6 +113,7 @@ from .forms import ( InitialRegisterForm, ) +import os @can_create(Adherent) def new_user(request): @@ -223,6 +225,12 @@ def edit_info(request, user, userid): ) 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 = BASE_DIR+former_user.profile_image.url + os.remove(former_image) user = user_form.save() messages.success(request, _("The user was edited.")) From a6e324bc6060564468c858db30832d4808ff0631 Mon Sep 17 00:00:00 2001 From: Leila Date: Mon, 18 May 2020 16:49:17 +0200 Subject: [PATCH 3/4] Add migration file --- users/migrations/0093_user_profile_image.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 users/migrations/0093_user_profile_image.py diff --git a/users/migrations/0093_user_profile_image.py b/users/migrations/0093_user_profile_image.py new file mode 100644 index 00000000..9664c057 --- /dev/null +++ b/users/migrations/0093_user_profile_image.py @@ -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'), + ), + ] From 1ba03335e4911cf5755c87dba69ef94ac30b283d Mon Sep 17 00:00:00 2001 From: chiahetcho Date: Mon, 18 May 2020 16:52:53 +0200 Subject: [PATCH 4/4] Correct django settings --- users/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/users/views.py b/users/views.py index 8f0db1ea..57141a78 100644 --- a/users/views.py +++ b/users/views.py @@ -59,7 +59,7 @@ from machines.models import Machine from preferences.models import OptionalUser, GeneralOption, AssoOption from importlib import import_module -from re2o.settings import BASE_DIR +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 @@ -229,7 +229,7 @@ def edit_info(request, user, userid): 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 = BASE_DIR+former_user.profile_image.url + 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."))