8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-27 07:02:26 +00:00

Merge branch 'translation' into 'dev'

Translation

See merge request federez/re2o!396
This commit is contained in:
chirac 2019-01-20 15:03:46 +01:00
commit 1cc5d7bba0
162 changed files with 3197 additions and 2132 deletions

View file

@ -28,7 +28,7 @@ done.
from django.conf import settings
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext as _
def _create_api_permission():
@ -71,4 +71,5 @@ def can_view(user):
'codename': settings.API_PERMISSION_CODENAME
}
can = user.has_perm('%(app_label)s.%(codename)s' % kwargs)
return can, None if can else _("You cannot see this application.")
return can, None if can else _("You don't have the right to see this"
" application.")

View file

@ -46,6 +46,6 @@ class ExpiringTokenAuthentication(TokenAuthentication):
)
utc_now = datetime.datetime.now(datetime.timezone.utc)
if token.created < utc_now - token_duration:
raise exceptions.AuthenticationFailed(_('Token has expired'))
raise exceptions.AuthenticationFailed(_("The token has expired."))
return token.user, token

View file

@ -0,0 +1,40 @@
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2018 Maël Kervella
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-08 23:06+0100\n"
"PO-Revision-Date: 2019-01-07 01:37+0100\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: acl.py:74
msgid "You don't have the right to see this application."
msgstr "Vous n'avez pas le droit de voir cette application."
#: authentication.py:49
msgid "The token has expired."
msgstr "Le jeton a expiré."

View file

@ -116,7 +116,7 @@ class DiscountForm(Form):
Form used in oder to create a discount on an invoice.
"""
is_relative = forms.BooleanField(
label=_("Discount is on percentage"),
label=_("Discount is on percentage."),
required=False,
)
discount = forms.DecimalField(
@ -310,8 +310,8 @@ class RechargeForm(FormRevMixin, Form):
if balance_method.maximum_balance is not None and \
value + self.user.solde > balance_method.maximum_balance:
raise forms.ValidationError(
_("Requested amount is too high. Your balance can't exceed \
%(max_online_balance)s .") % {
_("Requested amount is too high. Your balance can't exceed"
" %(max_online_balance)s €.") % {
'max_online_balance': balance_method.maximum_balance
}
)

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-18 13:17+0200\n"
"POT-Creation-Date: 2019-01-12 16:50+0100\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language: fr_FR\n"
@ -33,79 +33,98 @@ msgstr ""
msgid "You don't have the right to view this application."
msgstr "Vous n'avez pas le droit de voir cette application."
#: forms.py:63 forms.py:274
#: forms.py:66 forms.py:299
msgid "Select a payment method"
msgstr "Sélectionnez un moyen de paiement"
#: forms.py:66 models.py:510
#: forms.py:69 models.py:579
msgid "Member"
msgstr "Adhérent"
#: forms.py:68
#: forms.py:71
msgid "Select the proprietary member"
msgstr "Sélectionnez l'adhérent propriétaire"
#: forms.py:69
#: forms.py:72
msgid "Validated invoice"
msgstr "Facture validée"
#: forms.py:82
#: forms.py:85
msgid "A payment method must be specified."
msgstr "Un moyen de paiement doit être renseigné."
#: forms.py:96 forms.py:120 templates/cotisations/aff_article.html:33
#: templates/cotisations/facture.html:61
#: forms.py:97 templates/cotisations/aff_article.html:33
#: templates/cotisations/facture.html:67
msgid "Article"
msgstr "Article"
#: forms.py:100 forms.py:124 templates/cotisations/edit_facture.html:46
#: forms.py:101 templates/cotisations/edit_facture.html:50
msgid "Quantity"
msgstr "Quantité"
#: forms.py:154
#: forms.py:119
msgid "Discount is on percentage."
msgstr "La réduction est en pourcentage."
#: forms.py:123 templates/cotisations/facture.html:78
msgid "Discount"
msgstr "Réduction"
#: forms.py:140
#, python-format
msgid "{}% discount"
msgstr "{}% de réduction"
#: forms.py:140
msgid "{}€ discount"
msgstr "{}€ de réduction"
#: forms.py:179
msgid "Article name"
msgstr "Nom de l'article"
#: forms.py:164 templates/cotisations/sidebar.html:50
#: forms.py:189 templates/cotisations/sidebar.html:55
msgid "Available articles"
msgstr "Articles disponibles"
#: forms.py:192
#: forms.py:217
msgid "Payment method name"
msgstr "Nom du moyen de paiement"
#: forms.py:204
#: forms.py:229
msgid "Available payment methods"
msgstr "Moyens de paiement disponibles"
#: forms.py:230
#: forms.py:255
msgid "Bank name"
msgstr "Nom de la banque"
#: forms.py:242
#: forms.py:267
msgid "Available banks"
msgstr "Banques disponibles"
#: forms.py:261
#: forms.py:286
msgid "Amount"
msgstr "Montant"
#: forms.py:267 templates/cotisations/aff_cotisations.html:44
#: forms.py:292 templates/cotisations/aff_cost_estimate.html:42
#: templates/cotisations/aff_cotisations.html:44
#: templates/cotisations/aff_custom_invoice.html:42
#: templates/cotisations/control.html:66
msgid "Payment method"
msgstr "Moyen de paiement"
#: forms.py:287
#: forms.py:313
#, python-format
msgid ""
"Requested amount is too high. Your balance can't exceed "
"%(max_online_balance)s €."
msgstr ""
"Le montant demandé trop grand. Votre solde ne peut excéder "
"Le montant demandé est trop grand. Votre solde ne peut excéder "
"%(max_online_balance)s €."
#: models.py:60 templates/cotisations/aff_cotisations.html:48
#: models.py:60 templates/cotisations/aff_cost_estimate.html:46
#: templates/cotisations/aff_cotisations.html:48
#: templates/cotisations/aff_custom_invoice.html:46
#: templates/cotisations/control.html:70
msgid "Date"
@ -133,9 +152,9 @@ msgstr "Peut voir un objet facture"
#: models.py:158
msgid "Can edit all the previous invoices"
msgstr "Peut modifier toutes les factures existantes"
msgstr "Peut modifier toutes les factures précédentes"
#: models.py:160 models.py:305
#: models.py:160 models.py:373
msgid "invoice"
msgstr "facture"
@ -156,128 +175,149 @@ msgid ""
"You don't have the right to edit an invoice already controlled or "
"invalidated."
msgstr ""
"Vous n'avez pas le droit de modifier une facture précedemment contrôlée ou "
"Vous n'avez pas le droit de modifier une facture précédemment contrôlée ou "
"invalidée."
#: models.py:184
msgid "You don't have the right to delete an invoice."
msgstr "Vous n'avez pas le droit de supprimer une facture."
#: models.py:186
#: models.py:187
msgid "You don't have the right to delete this user's invoices."
msgstr "Vous n'avez pas le droit de supprimer les factures de cet utilisateur."
#: models.py:189
#: models.py:191
msgid ""
"You don't have the right to delete an invoice already controlled or "
"invalidated."
msgstr ""
"Vous n'avez pas le droit de supprimer une facture précedement contrôlée ou "
"Vous n'avez pas le droit de supprimer une facture précédemment contrôlée ou "
"invalidée."
#: models.py:197
#: models.py:199
msgid "You don't have the right to view someone else's invoices history."
msgstr ""
"Vous n'avez pas le droit de voir l'historique des factures d'un autre "
"utilisateur."
#: models.py:200
#: models.py:202
msgid "The invoice has been invalidated."
msgstr "La facture a été invalidée."
#: models.py:210
#: models.py:214
msgid "You don't have the right to edit the \"controlled\" state."
msgstr "Vous n'avez pas le droit de modifier le statut \"contrôlé\"."
#: models.py:224
#: models.py:228
msgid "There are no payment method which you can use."
msgstr "Il n'y a pas de moyen de paiement que vous puissiez utiliser."
#: models.py:226
#: models.py:230
msgid "There are no article that you can buy."
msgstr "Il n'y a pas d'article que vous puissiez acheter."
#: models.py:261
#: models.py:272
msgid "Can view a custom invoice object"
msgstr "Peut voir un objet facture personnalisée"
#: models.py:265 templates/cotisations/aff_custom_invoice.html:36
#: models.py:276 templates/cotisations/aff_cost_estimate.html:36
#: templates/cotisations/aff_custom_invoice.html:36
msgid "Recipient"
msgstr "Destinataire"
#: models.py:269 templates/cotisations/aff_paiement.html:33
#: models.py:280 templates/cotisations/aff_paiement.html:33
msgid "Payment type"
msgstr "Type de paiement"
#: models.py:273
#: models.py:284
msgid "Address"
msgstr "Adresse"
#: models.py:276 templates/cotisations/aff_custom_invoice.html:54
#: models.py:287 templates/cotisations/aff_custom_invoice.html:54
msgid "Paid"
msgstr "Payé"
#: models.py:296 models.py:516 models.py:764
#: models.py:291
msgid "Remark"
msgstr "Remarque"
#: models.py:300
msgid "Can view a cost estimate object"
msgstr "Peut voir un objet devis"
#: models.py:303
msgid "Period of validity"
msgstr "Période de validité"
#: models.py:340
msgid "You don't have the right to delete a cost estimate."
msgstr "Vous n'avez pas le droit de supprimer un devis."
#: models.py:343
msgid "The cost estimate has an invoice and can't be deleted."
msgstr "Le devis a une facture et ne peut pas être supprimé."
#: models.py:364 models.py:585 models.py:852
msgid "Connection"
msgstr "Connexion"
#: models.py:297 models.py:517 models.py:765
#: models.py:365 models.py:586 models.py:853
msgid "Membership"
msgstr "Adhésion"
#: models.py:298 models.py:512 models.py:518 models.py:766
#: models.py:366 models.py:581 models.py:587 models.py:854
msgid "Both of them"
msgstr "Les deux"
#: models.py:310
#: models.py:378
msgid "amount"
msgstr "montant"
#: models.py:315
#: models.py:383
msgid "article"
msgstr "article"
#: models.py:322
#: models.py:390
msgid "price"
msgstr "prix"
#: models.py:327 models.py:535
#: models.py:395 models.py:604
msgid "duration (in months)"
msgstr "durée (en mois)"
#: models.py:335 models.py:549 models.py:780
#: models.py:403 models.py:618 models.py:868
msgid "subscription type"
msgstr "type de cotisation"
#: models.py:340
#: models.py:408
msgid "Can view a purchase object"
msgstr "Peut voir un objet achat"
#: models.py:341
#: models.py:409
msgid "Can edit all the previous purchases"
msgstr "Peut modifier tous les achats précédents"
#: models.py:343 models.py:774
#: models.py:411 models.py:862
msgid "purchase"
msgstr "achat"
#: models.py:344
#: models.py:412
msgid "purchases"
msgstr "achats"
#: models.py:411 models.py:573
#: models.py:479 models.py:642
msgid "Duration must be specified for a subscription."
msgstr "La durée de la cotisation doit être indiquée."
#: models.py:418
#: models.py:486
msgid "You don't have the right to edit the purchases."
msgstr "Vous n'avez pas le droit de modifier les achats."
#: models.py:423
#: models.py:491
msgid "You don't have the right to edit this user's purchases."
msgstr "Vous n'avez pas le droit de modifier les achats de cet utilisateur."
#: models.py:427
#: models.py:495
msgid ""
"You don't have the right to edit a purchase already controlled or "
"invalidated."
@ -285,150 +325,150 @@ msgstr ""
"Vous n'avez pas le droit de modifier un achat précédemment contrôlé ou "
"invalidé."
#: models.py:434
#: models.py:502
msgid "You don't have the right to delete a purchase."
msgstr "Vous n'avez pas le droit de supprimer un achat."
#: models.py:436
#: models.py:504
msgid "You don't have the right to delete this user's purchases."
msgstr "Vous n'avez pas le droit de supprimer les achats de cet utilisateur."
#: models.py:439
#: models.py:507
msgid ""
"You don't have the right to delete a purchase already controlled or "
"invalidated."
msgstr ""
"Vous n'avez pas le droit de supprimer un achat précédement contrôlé ou "
"Vous n'avez pas le droit de supprimer un achat précédemment contrôlé ou "
"invalidé."
#: models.py:447
#: models.py:515
msgid "You don't have the right to view someone else's purchase history."
msgstr ""
"Vous n'avez pas le droit de voir l'historique des achats d'un autre "
"utilisateur."
#: models.py:511
#: models.py:580
msgid "Club"
msgstr "Club"
#: models.py:523
#: models.py:592
msgid "designation"
msgstr "désignation"
#: models.py:529
#: models.py:598
msgid "unit price"
msgstr "prix unitaire"
#: models.py:541
#: models.py:610
msgid "type of users concerned"
msgstr "type d'utilisateurs concernés"
#: models.py:553 models.py:649
#: models.py:622 models.py:733
msgid "is available for every user"
msgstr "est disponible pour chaque utilisateur"
#: models.py:560
#: models.py:629
msgid "Can view an article object"
msgstr "Peut voir un objet article"
#: models.py:561
#: models.py:630
msgid "Can buy every article"
msgstr "Peut acheter chaque article"
#: models.py:569
#: models.py:638
msgid "Balance is a reserved article name."
msgstr "Solde est un nom d'article réservé."
#: models.py:594
#: models.py:663
msgid "You can't buy this article."
msgstr "Vous ne pouvez pas acheter cet article."
#: models.py:624
#: models.py:708
msgid "Can view a bank object"
msgstr "Peut voir un objet banque"
#: models.py:626
#: models.py:710
msgid "bank"
msgstr "banque"
#: models.py:627
#: models.py:711
msgid "banks"
msgstr "banques"
#: models.py:645
#: models.py:729
msgid "method"
msgstr "moyen"
#: models.py:654
#: models.py:738
msgid "is user balance"
msgstr "est solde utilisateur"
#: models.py:655
#: models.py:739
msgid "There should be only one balance payment method."
msgstr "Il ne devrait y avoir qu'un moyen de paiement solde."
#: models.py:661
#: models.py:745
msgid "Can view a payment method object"
msgstr "Peut voir un objet moyen de paiement"
#: models.py:662
#: models.py:746
msgid "Can use every payment method"
msgstr "Peut utiliser chaque moyen de paiement"
#: models.py:664
#: models.py:748
msgid "payment method"
msgstr "moyen de paiement"
#: models.py:665
#: models.py:749
msgid "payment methods"
msgstr "moyens de paiement"
#: models.py:699 payment_methods/comnpay/views.py:63
#: models.py:787 payment_methods/comnpay/views.py:63
#, python-format
msgid "The subscription of %(member_name)s was extended to %(end_date)s."
msgstr "La cotisation de %(member_name)s a été étendue au %(end_date)s."
#: models.py:709
#: models.py:797
msgid "The invoice was created."
msgstr "La facture a été créée."
#: models.py:730
#: models.py:818
msgid "You can't use this payment method."
msgstr "Vous ne pouvez pas utiliser ce moyen de paiement."
#: models.py:748
#: models.py:836
msgid "No custom payment method."
msgstr "Pas de moyen de paiement personnalisé."
#: models.py:783
#: models.py:871
msgid "start date"
msgstr "date de début"
#: models.py:786
#: models.py:874
msgid "end date"
msgstr "date de fin"
#: models.py:791
#: models.py:879
msgid "Can view a subscription object"
msgstr "Peut voir un objet cotisation"
#: models.py:792
#: models.py:880
msgid "Can edit the previous subscriptions"
msgstr "Peut modifier les cotisations précédentes"
#: models.py:794
#: models.py:882
msgid "subscription"
msgstr "cotisation"
#: models.py:795
#: models.py:883
msgid "subscriptions"
msgstr "cotisations"
#: models.py:799
#: models.py:887
msgid "You don't have the right to edit a subscription."
msgstr "Vous n'avez pas le droit de modifier une cotisation."
#: models.py:803
#: models.py:891
msgid ""
"You don't have the right to edit a subscription already controlled or "
"invalidated."
@ -436,11 +476,11 @@ msgstr ""
"Vous n'avez pas le droit de modifier une cotisation précédemment contrôlée "
"ou invalidée."
#: models.py:810
#: models.py:898
msgid "You don't have the right to delete a subscription."
msgstr "Vous n'avez pas le droit de supprimer une cotisation."
#: models.py:813
#: models.py:901
msgid ""
"You don't have the right to delete a subscription already controlled or "
"invalidated."
@ -448,7 +488,7 @@ msgstr ""
"Vous n'avez pas le droit de supprimer une cotisation précédemment contrôlée "
"ou invalidée."
#: models.py:821
#: models.py:909
msgid "You don't have the right to view someone else's subscription history."
msgstr ""
"Vous n'avez pas le droit de voir l'historique des cotisations d'un autre "
@ -482,11 +522,11 @@ msgstr "Le montant maximal d'argent autorisé pour le solde."
msgid "Allow user to credit their balance"
msgstr "Autorise l'utilisateur à créditer son solde"
#: payment_methods/balance/models.py:81 payment_methods/balance/models.py:112
#: payment_methods/balance/models.py:79 payment_methods/balance/models.py:110
msgid "Your balance is too low for this operation."
msgstr "Votre solde est trop bas pour cette opération."
#: payment_methods/balance/models.py:99 validators.py:20
#: payment_methods/balance/models.py:97 validators.py:20
msgid "There is already a payment method for user balance."
msgstr "Il y a déjà un moyen de paiement pour le solde utilisateur."
@ -523,11 +563,11 @@ msgstr ""
msgid "Production mode enabled (production URL, instead of homologation)"
msgstr "Mode production activé (URL de production, au lieu d'homologation)"
#: payment_methods/comnpay/models.py:104
#: payment_methods/comnpay/models.py:102
msgid "Pay invoice number "
msgstr "Payer la facture numéro "
#: payment_methods/comnpay/models.py:116
#: payment_methods/comnpay/models.py:114
msgid ""
"In order to pay your invoice with ComNpay, the price must be greater than {} "
"€."
@ -559,6 +599,30 @@ msgstr ""
msgid "no"
msgstr "non"
#: payment_methods/note_kfet/forms.py:32
msgid "pseudo note"
msgstr "pseudo note"
#: payment_methods/note_kfet/forms.py:35
msgid "Password"
msgstr "Mot de passe"
#: payment_methods/note_kfet/models.py:40
msgid "NoteKfet"
msgstr "NoteKfet"
#: payment_methods/note_kfet/models.py:50
msgid "server"
msgstr "serveur"
#: payment_methods/note_kfet/views.py:60
msgid "Unknown error."
msgstr "Erreur inconnue."
#: payment_methods/note_kfet/views.py:88
msgid "The payment with note was done."
msgstr "Le paiement par note a été effectué."
#: templates/cotisations/aff_article.html:34
msgid "Price"
msgstr "Prix"
@ -579,34 +643,47 @@ msgstr "Utilisateurs concernés"
msgid "Available for everyone"
msgstr "Disponible pour tous"
#: templates/cotisations/aff_article.html:52
#: templates/cotisations/aff_paiement.html:48
#: templates/cotisations/control.html:107 views.py:483 views.py:570
#: views.py:650
msgid "Edit"
msgstr "Modifier"
#: templates/cotisations/aff_banque.html:32
msgid "Bank"
msgstr "Banque"
#: templates/cotisations/aff_cotisations.html:38
msgid "User"
msgstr "Utilisateur"
#: templates/cotisations/aff_cost_estimate.html:39
#: templates/cotisations/aff_cotisations.html:41
#: templates/cotisations/aff_custom_invoice.html:39
#: templates/cotisations/control.html:63
#: templates/cotisations/edit_facture.html:45
#: templates/cotisations/edit_facture.html:49
msgid "Designation"
msgstr "Désignation"
#: templates/cotisations/aff_cost_estimate.html:40
#: templates/cotisations/aff_cotisations.html:42
#: templates/cotisations/aff_custom_invoice.html:40
#: templates/cotisations/control.html:64
msgid "Total price"
msgstr "Prix total"
#: templates/cotisations/aff_cost_estimate.html:50
msgid "Validity"
msgstr "Validité"
#: templates/cotisations/aff_cost_estimate.html:54
msgid "Cost estimate ID"
msgstr "ID devis"
#: templates/cotisations/aff_cost_estimate.html:58
msgid "Invoice created"
msgstr "Facture créée"
#: templates/cotisations/aff_cost_estimate.html:91
#: templates/cotisations/aff_cotisations.html:81
#: templates/cotisations/aff_custom_invoice.html:79
msgid "PDF"
msgstr "PDF"
#: templates/cotisations/aff_cotisations.html:38
msgid "User"
msgstr "Utilisateur"
#: templates/cotisations/aff_cotisations.html:52
#: templates/cotisations/aff_custom_invoice.html:50
#: templates/cotisations/control.html:56
@ -617,11 +694,6 @@ msgstr "ID facture"
msgid "Controlled invoice"
msgstr "Facture contrôlée"
#: templates/cotisations/aff_cotisations.html:81
#: templates/cotisations/aff_custom_invoice.html:79
msgid "PDF"
msgstr "PDF"
#: templates/cotisations/aff_cotisations.html:84
msgid "Invalidated invoice"
msgstr "Facture invalidée"
@ -666,6 +738,11 @@ msgstr "Validé"
msgid "Controlled"
msgstr "Contrôlé"
#: templates/cotisations/control.html:107 views.py:642 views.py:729
#: views.py:809
msgid "Edit"
msgstr "Modifier"
#: templates/cotisations/delete.html:29
msgid "Deletion of subscriptions"
msgstr "Suppression de cotisations"
@ -676,33 +753,33 @@ msgid ""
"Warning: are you sure you really want to delete this %(object_name)s object "
"( %(objet)s )?"
msgstr ""
"\tAttention: voulez-vous vraiment supprimer cet objet %(object_name)s "
"Attention: voulez-vous vraiment supprimer cet objet %(object_name)s "
"( %(objet)s ) ?"
#: templates/cotisations/delete.html:38
#: templates/cotisations/edit_facture.html:60
#: views.py:181 views.py:235
#: templates/cotisations/edit_facture.html:64 views.py:178 views.py:228
#: views.py:280
msgid "Confirm"
msgstr "Valider"
msgstr "Confirmer"
#: templates/cotisations/edit_facture.html:31
#: templates/cotisations/facture.html:30
msgid "Creation and editing of invoices"
msgstr "Création et modification de factures"
#: templates/cotisations/edit_facture.html:38
msgid "Edit the invoice"
#: templates/cotisations/edit_facture.html:41
msgid "Edit invoice"
msgstr "Modifier la facture"
#: templates/cotisations/edit_facture.html:41
#: templates/cotisations/facture.html:56
#: templates/cotisations/edit_facture.html:45
#: templates/cotisations/facture.html:62
#: templates/cotisations/index_article.html:30
msgid "Articles"
msgstr "Articles"
#: templates/cotisations/facture.html:37
msgid "Buy"
msgstr "Acheter une cotisation"
msgstr "Acheter"
#: templates/cotisations/facture.html:40
#, python-format
@ -714,11 +791,11 @@ msgstr "Solde maximum autorisé : %(max_balance)s €"
msgid "Current balance: %(balance)s €"
msgstr "Solde actuel : %(balance)s €"
#: templates/cotisations/facture.html:70
#: templates/cotisations/facture.html:76
msgid "Add an extra article"
msgstr "Ajouter un article supplémentaire"
#: templates/cotisations/facture.html:72
#: templates/cotisations/facture.html:82
msgid "Total price: <span id=\"total_price\">0,00</span> €"
msgstr "Prix total : <span id=\"total_price\">0,00</span> €"
@ -730,9 +807,8 @@ msgstr "Factures"
msgid "Subscriptions"
msgstr "Cotisations"
#: templates/cotisations/index_article.html:33
msgid "Article types list"
msgid "List of article types"
msgstr "Liste des types d'article"
#: templates/cotisations/index_article.html:36
@ -744,12 +820,12 @@ msgid "Delete one or several article types"
msgstr "Supprimer un ou plusieurs types d'article"
#: templates/cotisations/index_banque.html:30
#: templates/cotisations/sidebar.html:55
#: templates/cotisations/sidebar.html:60
msgid "Banks"
msgstr "Banques"
#: templates/cotisations/index_banque.html:33
msgid "Banks list"
msgid "List of banks"
msgstr "Liste des banques"
#: templates/cotisations/index_banque.html:36
@ -760,17 +836,26 @@ msgstr "Ajouter une banque"
msgid "Delete one or several banks"
msgstr "Supprimer une ou plusieurs banques"
#: templates/cotisations/index_cost_estimate.html:28
#: templates/cotisations/sidebar.html:50
msgid "Cost estimates"
msgstr "Devis"
#: templates/cotisations/index_cost_estimate.html:31
msgid "List of cost estimates"
msgstr "Liste des devis"
#: templates/cotisations/index_custom_invoice.html:28
#: templates/cotisations/sidebar.html:45
msgid "Custom invoices"
msgstr "Factures personnalisées"
#: templates/cotisations/index_custom_invoice.html:31
msgid "Custom invoices list"
msgstr "Liste des factures personalisées"
msgid "List of custom invoices"
msgstr "Liste des factures personnalisées"
#: templates/cotisations/index_paiement.html:30
#: templates/cotisations/sidebar.html:60
#: templates/cotisations/sidebar.html:65
msgid "Payment methods"
msgstr "Moyens de paiement"
@ -793,9 +878,9 @@ msgstr "Rechargement de solde"
#: templates/cotisations/payment.html:34
#, python-format
msgid "Pay %(amount)s €"
msgstr "Recharger de %(amount)s €"
msgstr "Payer %(amount)s €"
#: templates/cotisations/payment.html:42 views.py:870
#: templates/cotisations/payment.html:42 views.py:1049
msgid "Pay"
msgstr "Payer"
@ -807,81 +892,104 @@ msgstr "Créer une facture"
msgid "Control the invoices"
msgstr "Contrôler les factures"
#: views.py:167
#: views.py:164
msgid "You need to choose at least one article."
msgstr "Vous devez choisir au moins un article."
#: views.py:222
msgid "The cost estimate was created."
msgstr "Le devis a été créé."
#: views.py:228
#: views.py:232 views.py:534
msgid "Cost estimate"
msgstr "Devis"
#: views.py:274
msgid "The custom invoice was created."
msgstr "La facture personnalisée a été créée."
#: views.py:316 views.py:370
#: views.py:363 views.py:466
msgid "The invoice was edited."
msgstr "La facture a été modifiée."
#: views.py:336 views.py:430
#: views.py:383 views.py:589
msgid "The invoice was deleted."
msgstr "La facture a été supprimée."
#: views.py:341 views.py:435
#: views.py:388 views.py:594
msgid "Invoice"
msgstr "Facture"
#: views.py:456
#: views.py:417
msgid "The cost estimate was edited."
msgstr "Le devis a été modifié."
#: views.py:424
msgid "Edit cost estimate"
msgstr "Modifier le devis"
#: views.py:436
msgid "An invoice was successfully created from your cost estimate."
msgstr "Une facture a bien été créée à partir de votre devis."
#: views.py:529
msgid "The cost estimate was deleted."
msgstr "Le devis a été supprimé."
#: views.py:615
msgid "The article was created."
msgstr "L'article a été créé."
#: views.py:461 views.py:534 views.py:627
#: views.py:620 views.py:693 views.py:786
msgid "Add"
msgstr "Ajouter"
#: views.py:462
#: views.py:621
msgid "New article"
msgstr "Nouvel article"
#: views.py:478
#: views.py:637
msgid "The article was edited."
msgstr "L'article a été modifié."
#: views.py:484
#: views.py:643
msgid "Edit article"
msgstr "Modifier l'article"
#: views.py:500
#: views.py:659
msgid "The articles were deleted."
msgstr "Les articles ont été supprimés."
#: views.py:505 views.py:605 views.py:685
#: views.py:664 views.py:764 views.py:844
msgid "Delete"
msgstr "Supprimer"
#: views.py:506
#: views.py:665
msgid "Delete article"
msgstr "Supprimer l'article"
#: views.py:528
#: views.py:687
msgid "The payment method was created."
msgstr "Le moyen de paiment a été créé."
#: views.py:535
#: views.py:694
msgid "New payment method"
msgstr "Nouveau moyen de paiement"
#: views.py:564
#: views.py:723
msgid "The payment method was edited."
msgstr "Le moyen de paiment a été modifié."
#: views.py:571
#: views.py:730
msgid "Edit payment method"
msgstr "Modifier le moyen de paiement"
#: views.py:590
#: views.py:749
#, python-format
msgid "The payment method %(method_name)s was deleted."
msgstr "Le moyen de paiement %(method_name)s a été supprimé."
#: views.py:597
#: views.py:756
#, python-format
msgid ""
"The payment method %(method_name)s can't be deleted "
@ -890,52 +998,51 @@ msgstr ""
"Le moyen de paiement %(method_name)s ne peut pas être supprimé car il y a "
"des factures qui l'utilisent."
#: views.py:606
#: views.py:765
msgid "Delete payment method"
msgstr "Supprimer le moyen de paiement"
#: views.py:622
#: views.py:781
msgid "The bank was created."
msgstr "La banque a été créée."
#: views.py:628
#: views.py:787
msgid "New bank"
msgstr "Nouvelle banque"
#: views.py:645
#: views.py:804
msgid "The bank was edited."
msgstr "La banque a été modifiée."
#: views.py:651
#: views.py:810
msgid "Edit bank"
msgstr "Modifier la banque"
#: views.py:670
#: views.py:829
#, python-format
msgid "The bank %(bank_name)s was deleted."
msgstr "La banque %(bank_name)s a été supprimée."
#: views.py:677
#: views.py:836
#, python-format
msgid ""
"The bank %(bank_name)s can't be deleted because there "
"are invoices using it."
"The bank %(bank_name)s can't be deleted because there are invoices using it."
msgstr ""
"La banque %(bank_name)s ne peut pas être supprimée car il y a des factures "
"qui l'utilisent."
#: views.py:686
#: views.py:845
msgid "Delete bank"
msgstr "Supprimer la banque"
#: views.py:722
#: views.py:881
msgid "Your changes have been properly taken into account."
msgstr "Vos modifications ont correctement été prises en compte."
#: views.py:834
#: views.py:1016
msgid "You are not allowed to credit your balance."
msgstr "Vous n'êtes pas autorisés à créditer votre solde."
#: views.py:869
#: views.py:1048
msgid "Refill your balance"
msgstr "Recharger votre solde"

View file

@ -341,7 +341,7 @@ class CostEstimate(CustomInvoice):
"to delete a cost estimate.")
if self.final_invoice is not None:
return False, _("The cost estimate has an "
"invoice and cannot be deleted.")
"invoice and can't be deleted.")
return True, None

View file

@ -57,7 +57,7 @@ def note_payment(request, facture, factureid):
user = facture.user
payment_method = find_payment_method(facture.paiement)
if not payment_method or not isinstance(payment_method, NotePayment):
messages.error(request, "Erreur inconnue")
messages.error(request, _("Unknown error."))
return redirect(reverse(
'users:profil',
kwargs={'userid': user.id}
@ -85,7 +85,7 @@ def note_payment(request, facture, factureid):
)
facture.valid = True
facture.save()
messages.success(request, "Le paiement par note a bien été effectué")
messages.success(request, _("The payment with note was done."))
return redirect(reverse(
'users:profil',
kwargs={'userid': user.id}

View file

@ -49,9 +49,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ article.available_for_everyone | tick }}</td>
<td class="text-right">
{% can_edit article %}
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-article' article.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='cotisations:edit-article' id=article.id %}
{% acl_end %}
{% history_button article %}
</td>

View file

@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr>
<th>
{% trans "Recipient" as tr_recip %}
{% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_user %}
{% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_recip %}
</th>
<th>{% trans "Designation" %}</th>
<th>{% trans "Total price" %}</th>

View file

@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive">
{% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %}
{% include 'pagination.html' with list=facture_list %}
{% endif %}
<table class="table table-striped">
@ -89,7 +89,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %}
{% include 'pagination.html' with list=facture_list %}
{% endif %}
</div>

View file

@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr>
<th>
{% trans "Recipient" as tr_recip %}
{% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_user %}
{% include 'buttons/sort.html' with prefix='invoice' col='user' text=tr_recip %}
</th>
<th>{% trans "Designation" %}</th>
<th>{% trans "Total price" %}</th>
@ -51,7 +51,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% include 'buttons/sort.html' with prefix='invoice' col='id' text=tr_invoice_id %}
</th>
<th>
{% trans "Paid" as tr_invoice_paid%}
{% trans "Paid" as tr_invoice_paid %}
{% include 'buttons/sort.html' with prefix='invoice' col='paid' text=tr_invoice_paid %}
</th>
<th></th>

View file

@ -45,9 +45,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</td>
<td class="text-right">
{% can_edit paiement %}
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-paiement' paiement.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='cotisations:edit-paiement' id=paiement.id %}
{% acl_end %}
{% history_button paiement %}
</td>

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<h2>{% trans "Invoice control and validation" %}</h2>
{% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %}
{% include 'pagination.html' with list=facture_list %}
{% endif %}
<form class="form" method="post">
@ -110,6 +110,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endblock %}
{% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %}
{% include 'pagination.html' with list=facture_list %}
{% endif %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -38,7 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if title %}
<h3>{{title}}</h3>
{% else %}
<h3>{% trans "Edit the invoice" %}</h3>
<h3>{% trans "Edit invoice" %}</h3>
{% endif %}
{% massive_bootstrap_form factureform 'user' %}
{{ venteform.management_form }}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Articles" %}{% endblock %}
{% block content %}
<h2>{% trans "Article types list" %}</h2>
<h2>{% trans "List of article types" %}</h2>
{% can_create Article %}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:add-article' %}">
<i class="fa fa-cart-plus"></i> {% trans "Add an article type" %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Banks" %}{% endblock %}
{% block content %}
<h2>{% trans "Banks list" %}</h2>
<h2>{% trans "List of banks" %}</h2>
{% can_create Banque %}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:add-banque' %}">
<i class="fa fa-cart-plus"></i> {% trans "Add a bank" %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -28,9 +28,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Cost estimates" %}{% endblock %}
{% block content %}
<h2>{% trans "Cost estimates list" %}</h2>
<h2>{% trans "List of cost estimates" %}</h2>
{% can_create CostEstimate %}
{% include "buttons/add.html" with href='cotisations:new-cost-estimate'%}
{% include 'buttons/add.html' with href='cotisations:new-cost-estimate'%}
{% acl_end %}
{% include 'cotisations/aff_cost_estimate.html' %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -28,9 +28,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block title %}{% trans "Custom invoices" %}{% endblock %}
{% block content %}
<h2>{% trans "Custom invoices list" %}</h2>
<h2>{% trans "List of custom invoices" %}</h2>
{% can_create CustomInvoice %}
{% include "buttons/add.html" with href='cotisations:new-custom-invoice'%}
{% include 'buttons/add.html' with href='cotisations:new-custom-invoice'%}
{% acl_end %}
{% include 'cotisations/aff_custom_invoice.html' with custom_invoice_list=custom_invoice_list %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %}
{% extends 'cotisations/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "base.html" %}
{% extends 'base.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -28,40 +28,40 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block sidebar %}
{% can_create CustomInvoice %}
<a class="list-group-item list-group-item-success" href="{% url "cotisations:new-custom-invoice" %}">
<a class="list-group-item list-group-item-success" href="{% url 'cotisations:new-custom-invoice' %}">
<i class="fa fa-plus"></i> {% trans "Create an invoice" %}
</a>
<a class="list-group-item list-group-item-warning" href="{% url "cotisations:control" %}">
<a class="list-group-item list-group-item-warning" href="{% url 'cotisations:control' %}">
<i class="fa fa-eye"></i> {% trans "Control the invoices" %}
</a>
{% acl_end %}
{% can_view_all Facture %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index" %}">
<a class="list-group-item list-group-item-info" href="{% url 'cotisations:index' %}">
<i class="fa fa-list-ul"></i> {% trans "Invoices" %}
</a>
{% acl_end %}
{% can_view_all CustomInvoice %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-custom-invoice" %}">
<a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-custom-invoice' %}">
<i class="fa fa-list-ul"></i> {% trans "Custom invoices" %}
</a>
{% acl_end %}
{% can_view_all CostEstimate %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-cost-estimate" %}">
<i class="fa fa-list-ul"></i> {% trans "Cost estimate" %}
<a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-cost-estimate' %}">
<i class="fa fa-list-ul"></i> {% trans "Cost estimates" %}
</a>
{% acl_end %}
{% can_view_all Article %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-article" %}">
<a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-article' %}">
<i class="fa fa-list-ul"></i> {% trans "Available articles" %}
</a>
{% acl_end %}
{% can_view_all Banque %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-banque" %}">
<a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-banque' %}">
<i class="fa fa-list-ul"></i> {% trans "Banks" %}
</a>
{% acl_end %}
{% can_view_all Paiement %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-paiement" %}">
<a class="list-group-item list-group-item-info" href="{% url 'cotisations:index-paiement' %}">
<i class="fa fa-list-ul"></i> {% trans "Payment methods" %}
</a>
{% acl_end %}

View file

@ -421,7 +421,7 @@ def edit_cost_estimate(request, invoice, **kwargs):
return form({
'factureform': invoice_form,
'venteform': purchase_form,
'title': "Edit the cost estimate"
'title': _("Edit cost estimate")
}, 'cotisations/edit_facture.html', request)
@ -531,7 +531,7 @@ def del_cost_estimate(request, estimate, **_kwargs):
return redirect(reverse('cotisations:index-cost-estimate'))
return form({
'objet': estimate,
'objet_name': _("Cost Estimate")
'objet_name': _("Cost estimate")
}, 'cotisations/delete.html', request)
@ -833,8 +833,8 @@ def del_banque(request, instances):
except ProtectedError:
messages.error(
request,
_("The bank %(bank_name)s can't be deleted \
because there are invoices using it.") % {
_("The bank %(bank_name)s can't be deleted because there"
" are invoices using it.") % {
'bank_name': bank_del
}
)

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-15 20:12+0200\n"
"POT-Creation-Date: 2019-01-08 23:16+0100\n"
"PO-Revision-Date: 2018-06-23 16:01+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -57,7 +57,7 @@ msgstr "Commentaire"
#: templates/logs/aff_stats_logs.html:58 templates/logs/aff_summary.html:62
#: templates/logs/aff_summary.html:85 templates/logs/aff_summary.html:104
#: templates/logs/aff_summary.html:123 templates/logs/aff_summary.html:142
#: templates/logs/aff_summary.html:128 templates/logs/aff_summary.html:147
msgid "Cancel"
msgstr "Annuler"
@ -113,15 +113,19 @@ msgstr "%(username)s a mis à jour"
#: templates/logs/aff_summary.html:113
#, python-format
msgid "%(username)s has sold %(number)sx %(name)s to"
msgstr "%(username)s a vendu %(number)sx %(name)s à"
msgid "%(username)s has sold %(number)sx %(name)s"
msgstr "%(username)s a vendu %(number)sx %(name)s"
#: templates/logs/aff_summary.html:116
msgid " to"
msgstr " à"
#: templates/logs/aff_summary.html:119
#, python-format
msgid "+%(duration)s months"
msgstr "+%(duration)s mois"
#: templates/logs/aff_summary.html:132
#: templates/logs/aff_summary.html:137
#, python-format
msgid "%(username)s has edited an interface of"
msgstr "%(username)s a modifié une interface de"
@ -149,7 +153,7 @@ msgstr "Confirmer"
msgid "Statistics"
msgstr "Statistiques"
#: templates/logs/index.html:32 templates/logs/stats_logs.html:32 views.py:403
#: templates/logs/index.html:32 templates/logs/stats_logs.html:32 views.py:414
msgid "Actions performed"
msgstr "Actions effectuées"
@ -173,7 +177,7 @@ msgstr "Base de données"
msgid "Wiring actions"
msgstr "Actions de câblage"
#: templates/logs/sidebar.html:53 views.py:325
#: templates/logs/sidebar.html:53 views.py:336
msgid "Users"
msgstr "Utilisateurs"
@ -189,150 +193,154 @@ msgstr "Statistiques sur la base de données"
msgid "Statistics about users"
msgstr "Statistiques sur les utilisateurs"
#: views.py:191
#: views.py:194
msgid "Nonexistent revision."
msgstr "Révision inexistante."
#: views.py:194
#: views.py:197
msgid "The action was deleted."
msgstr "L'action a été supprimée."
#: views.py:227
#: views.py:230
msgid "Category"
msgstr "Catégorie"
#: views.py:228
#: views.py:231
msgid "Number of users (members and clubs)"
msgstr "Nombre d'utilisateurs (adhérents et clubs)"
#: views.py:229
#: views.py:232
msgid "Number of members"
msgstr "Nombre d'adhérents"
#: views.py:230
#: views.py:233
msgid "Number of clubs"
msgstr "Nombre de clubs"
#: views.py:234
#: views.py:237
msgid "Activated users"
msgstr "Utilisateurs activés"
#: views.py:242
#: views.py:245
msgid "Disabled users"
msgstr "Utilisateurs désactivés"
#: views.py:250
#: views.py:253
msgid "Archived users"
msgstr "Utilisateurs archivés"
#: views.py:258
#: views.py:261
msgid "Not yet active users"
msgstr "Utilisateurs pas encore actifs"
#: views.py:269
msgid "Contributing members"
msgstr "Adhérents cotisants"
#: views.py:264
#: views.py:275
msgid "Users benefiting from a connection"
msgstr "Utilisateurs bénéficiant d'une connexion"
#: views.py:270
#: views.py:281
msgid "Banned users"
msgstr "Utilisateurs bannis"
#: views.py:276
#: views.py:287
msgid "Users benefiting from a free connection"
msgstr "Utilisateurs bénéficiant d'une connexion gratuite"
#: views.py:282
#: views.py:293
msgid "Active interfaces (with access to the network)"
msgstr "Interfaces actives (ayant accès au réseau)"
#: views.py:292
#: views.py:303
msgid "Active interfaces assigned IPv4"
msgstr "Interfaces actives assignées IPv4"
#: views.py:305
#: views.py:316
msgid "IP range"
msgstr "Plage d'IP"
#: views.py:306
#: views.py:317
msgid "VLAN"
msgstr "VLAN"
#: views.py:307
#: views.py:318
msgid "Total number of IP addresses"
msgstr "Nombre total d'adresses IP"
#: views.py:308
#: views.py:319
msgid "Number of assigned IP addresses"
msgstr "Nombre d'adresses IP non assignées"
#: views.py:309
#: views.py:320
msgid "Number of IP address assigned to an activated machine"
msgstr "Nombre d'adresses IP assignées à une machine activée"
#: views.py:310
#: views.py:321
msgid "Number of nonassigned IP addresses"
msgstr "Nombre d'adresses IP non assignées"
#: views.py:337
#: views.py:348
msgid "Subscriptions"
msgstr "Cotisations"
#: views.py:359 views.py:420
#: views.py:370 views.py:431
msgid "Machines"
msgstr "Machines"
#: views.py:386
#: views.py:397
msgid "Topology"
msgstr "Topologie"
#: views.py:405
#: views.py:416
msgid "Number of actions"
msgstr "Nombre d'actions"
#: views.py:419 views.py:437 views.py:442 views.py:447 views.py:462
#: views.py:430 views.py:448 views.py:453 views.py:458 views.py:473
msgid "User"
msgstr "Utilisateur"
#: views.py:423
#: views.py:434
msgid "Invoice"
msgstr "Facture"
#: views.py:426
#: views.py:437
msgid "Ban"
msgstr "Bannissement"
#: views.py:429
#: views.py:440
msgid "Whitelist"
msgstr "Accès gracieux"
#: views.py:432
#: views.py:443
msgid "Rights"
msgstr "Droits"
#: views.py:436
#: views.py:447
msgid "School"
msgstr "Établissement"
#: views.py:441
#: views.py:452
msgid "Payment method"
msgstr "Moyen de paiement"
#: views.py:446
#: views.py:457
msgid "Bank"
msgstr "Banque"
#: views.py:463
#: views.py:474
msgid "Action"
msgstr "Action"
#: views.py:494
#: views.py:505
msgid "No model found."
msgstr "Aucun modèle trouvé."
#: views.py:500
#: views.py:511
msgid "Nonexistent entry."
msgstr "Entrée inexistante."
#: views.py:507
#: views.py:518
msgid "You don't have the right to access this menu."
msgstr "Vous n'avez pas le droit d'accéder à ce menu."

View file

@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %}
{% if revisions_list.paginator %}
{% include "pagination.html" with list=revisions_list %}
{% include 'pagination.html' with list=revisions_list %}
{% endif %}
{% load logs_extra %}
@ -36,9 +36,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th>{% trans "Edited object" %}</th>
<th>{% trans "Object type" %}</th>
{% trans "Edited by" as tr_edited_by %}
<th>{% include "buttons/sort.html" with prefix='logs' col='author' text=tr_edited_by %}</th>
<th>{% include 'buttons/sort.html' with prefix='logs' col='author' text=tr_edited_by %}</th>
{% trans "Date of editing" as tr_date_of_editing %}
<th>{% include "buttons/sort.html" with prefix='logs' col='date' text=tr_date_of_editing %}</th>
<th>{% include 'buttons/sort.html' with prefix='logs' col='date' text=tr_date_of_editing %}</th>
<th>{% trans "Comment" %}</th>
<th></th>
</tr>
@ -65,6 +65,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if revisions_list.paginator %}
{% include "pagination.html" with list=revisions_list %}
{% include 'pagination.html' with list=revisions_list %}
{% endif %}

View file

@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %}
{% if versions_list.paginator %}
{% include "pagination.html" with list=versions_list %}
{% include 'pagination.html' with list=versions_list %}
{% endif %}
{% load logs_extra %}
@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<thead>
<tr>
{% trans "Date" as tr_date %}
<th>{% include "buttons/sort.html" with prefix='sum' col='date' text=tr_date %}</th>
<th>{% include 'buttons/sort.html' with prefix='sum' col='date' text=tr_date %}</th>
<th>{% trans "Editing" %}</th>
<th></th>
</tr>
@ -154,6 +154,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if versions_list.paginator %}
{% include "pagination.html" with list=versions_list %}
{% include 'pagination.html' with list=versions_list %}
{% endif %}

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %}
{% extends 'logs/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %}
{% extends 'logs/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
<h2>{% trans "Actions performed" %}</h2>
{% include "logs/aff_summary.html" with versions_list=versions_list %}
{% include 'logs/aff_summary.html' with versions_list=versions_list %}
<br />
<br />
<br />

View file

@ -1,4 +1,4 @@
{% extends "base.html" %}
{% extends 'base.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -28,27 +28,27 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block sidebar %}
{% can_view_app logs %}
<a class="list-group-item list-group-item-info" href="{% url "logs:index" %}">
<a class="list-group-item list-group-item-info" href="{% url 'logs:index' %}">
<i class="fa fa-clipboard"></i>
{% trans "Summary" %}
</a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-logs" %}">
<a class="list-group-item list-group-item-info" href="{% url 'logs:stats-logs' %}">
<i class="fa fa-calendar"></i>
{% trans "Events" %}
</a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-general" %}">
<a class="list-group-item list-group-item-info" href="{% url 'logs:stats-general' %}">
<i class="fa fa-area-chart"></i>
{% trans "General" %}
</a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-models" %}">
<a class="list-group-item list-group-item-info" href="{% url 'logs:stats-models' %}">
<i class="fa fa-database"></i>
{% trans "Database" %}
</a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-actions" %}">
<a class="list-group-item list-group-item-info" href="{% url 'logs:stats-actions' %}">
<i class="fa fa-plug"></i>
{% trans "Wiring actions" %}
</a>
<a class="list-group-item list-group-item-info" href="{% url "logs:stats-users" %}">
<a class="list-group-item list-group-item-info" href="{% url 'logs:stats-users' %}">
<i class="fa fa-users"></i>
{% trans "Users" %}
</a>

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %}
{% extends 'logs/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
<h2>{% trans "General statistics" %}</h2>
{% include "logs/aff_stats_general.html" with stats_list=stats_list %}
{% include 'logs/aff_stats_general.html' with stats_list=stats_list %}
<br />
<br />
<br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %}
{% extends 'logs/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
<h2>{% trans "Actions performed" %}</h2>
{% include "logs/aff_stats_logs.html" with revisions_list=revisions_list %}
{% include 'logs/aff_stats_logs.html' with revisions_list=revisions_list %}
<br />
<br />
<br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %}
{% extends 'logs/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
<h2>{% trans "Database statistics" %}</h2>
{% include "logs/aff_stats_models.html" with stats_list=stats_list %}
{% include 'logs/aff_stats_models.html' with stats_list=stats_list %}
<br />
<br />
<br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %}
{% extends 'logs/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
<h2>{% trans "Statistics about users" %}</h2>
{% include "logs/aff_stats_users.html" with stats_list=stats_list %}
{% include 'logs/aff_stats_users.html' with stats_list=stats_list %}
<br />
<br />
<br />

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2019-01-08 22:23
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0100_auto_20190102_1753'),
]
operations = [
migrations.AlterModelOptions(
name='ouvertureport',
options={'verbose_name': 'ports opening', 'verbose_name_plural': 'ports openings'},
),
migrations.AlterField(
model_name='nas',
name='port_access_mode',
field=models.CharField(choices=[('802.1X', '802.1X'), ('Mac-address', 'MAC-address')], default='802.1X', max_length=32),
),
migrations.AlterField(
model_name='vlan',
name='igmp',
field=models.BooleanField(default=False, help_text='v4 multicast management'),
),
migrations.AlterField(
model_name='vlan',
name='mld',
field=models.BooleanField(default=False, help_text='v6 multicast management'),
),
]

View file

@ -201,7 +201,7 @@ class Machine(RevMixin, FieldPermissionModelMixin, models.Model):
if interfaces_set:
return str(interfaces_set.domain.name)
else:
return "None"
return _("No name")
@cached_property
def complete_name(self):
@ -340,7 +340,7 @@ class IpType(RevMixin, AclMixin, models.Model):
("use_all_iptype", _("Can use all IP types")),
)
verbose_name = _("IP type")
verbose_name_plural = "IP types"
verbose_name_plural = _("IP types")
@cached_property
def ip_range(self):
@ -534,11 +534,11 @@ class Vlan(RevMixin, AclMixin, models.Model):
dhcpv6_snooping = models.BooleanField(default=False)
igmp = models.BooleanField(
default=False,
help_text="Gestion multicast v4"
help_text=_("v4 multicast management")
)
mld = models.BooleanField(
default=False,
help_text="Gestion multicast v6"
help_text=_("v6 multicast management")
)
class Meta:
@ -559,7 +559,7 @@ class Nas(RevMixin, AclMixin, models.Model):
default_mode = '802.1X'
AUTH = (
('802.1X', '802.1X'),
('Mac-address', 'Mac-address'),
('Mac-address', _("MAC-address")),
)
name = models.CharField(max_length=255, unique=True)
@ -666,7 +666,7 @@ class SOA(RevMixin, AclMixin, models.Model):
utilisée dans les migrations de la BDD. """
return cls.objects.get_or_create(
name=_("SOA to edit"),
mail="postmaser@example.com"
mail="postmaster@example.com"
)[0].pk
@ -934,7 +934,7 @@ class SshFp(RevMixin, AclMixin, models.Model):
machine = models.ForeignKey('Machine', on_delete=models.CASCADE)
pub_key_entry = models.TextField(
help_text="SSH public key",
help_text=_("SSH public key"),
max_length=2048
)
algo = models.CharField(
@ -942,7 +942,7 @@ class SshFp(RevMixin, AclMixin, models.Model):
max_length=32
)
comment = models.CharField(
help_text="Comment",
help_text=_("Comment"),
max_length=255,
null=True,
blank=True
@ -1872,7 +1872,8 @@ class OuverturePort(RevMixin, AclMixin, models.Model):
)
class Meta:
verbose_name = _("ports openings")
verbose_name = _("ports opening")
verbose_name_plural = _("ports openings")
def __str__(self):
if self.begin == self.end:

View file

@ -28,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive">
{% if machines_list.paginator %}
{% include "pagination.html" with list=machines_list go_to_id="machines" %}
{% include 'pagination.html' with list=machines_list go_to_id="machines" %}
{% endif %}
<table class="table" id="machines_table">
@ -41,7 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</colgroup>
<thead>
{% trans "DNS name" as tr_dns_name %}
<th>{% include "buttons/sort.html" with prefix='machine' col='name' text=tr_dns_name %}</th>
<th>{% include 'buttons/sort.html' with prefix='machine' col='name' text=tr_dns_name %}</th>
<th>{% trans "Type" %}</th>
<th>{% trans "MAC address" %}</th>
<th>{% trans "IP address" %}</th>
@ -52,7 +52,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td colspan="4">
{% trans "No name" as tr_no_name %}
{% trans "View the profile" as tr_view_the_profile %}
<b>{{ machine.get_name|default:'<i>tr_no_name</i>' }}</b> <i class="fa fa-angle-right"></i>
<b>{{ machine.get_name|default:tr_no_name }}</b> <i class="fa fa-angle-right"></i>
<a href="{% url 'users:profil' userid=machine.user.id %}" title=tr_view_the_profile>
<i class="fa fa-user"></i> {{ machine.user }}
</a>
@ -215,6 +215,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</script>
{% if machines_list.paginator %}
{% include "pagination.html" with list=machines_list go_to_id="machines" %}
{% include 'pagination.html' with list=machines_list go_to_id="machines" %}
{% endif %}
</div>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -26,14 +26,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load bootstrap3 %}
{% load i18n %}
{% block title %}{% trans "Creation and editing of machines" %}{% endblock %}
{% block title %}{% trans "Deletion of machines" %}{% endblock %}
{% block content %}
<form class="form" method="post">
{% csrf_token %}
<h4>{% blocktrans %}Warning: are you sure you want to delete this object {{ objet_name }} ( {{ objet }}
)?{% endblocktrans %}</h4>
<h4>{% blocktrans %}Warning: are you sure you want to delete this object {{ objet_name }} ( {{ objet }} )?{% endblocktrans %}</h4>
{% trans "Confirm" as tr_confirm %}
{% bootstrap_button tr_confirm button_type="submit" icon='trash' button_class='btn-danger' %}
</form>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
<h2>{% trans "Machines" %}</h2>
{% include "machines/aff_machines.html" with machines_list=machines_list %}
{% include 'machines/aff_machines.html' with machines_list=machines_list %}
<br/>
<br/>
<br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class="fa fa-plus"></i>{% trans " Add an alias" %}</a>
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-alias' interface_id %}"><i
class="fa fa-trash"></i>{% trans " Delete one or several aliases" %}</a>
{% include "machines/aff_alias.html" with alias_list=alias_list %}
{% include 'machines/aff_alias.html' with alias_list=alias_list %}
<br/>
<br/>
<br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -39,7 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-extension' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several extensions" %}
</a>
{% include "machines/aff_extension.html" with extension_list=extension_list %}
{% include 'machines/aff_extension.html' with extension_list=extension_list %}
<h2>{% trans "List of SOA records" %}</h2>
{% can_create SOA %}
@ -50,7 +50,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-soa' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several SOA records" %}
</a>
{% include "machines/aff_soa.html" with soa_list=soa_list %}
{% include 'machines/aff_soa.html' with soa_list=soa_list %}
<h2>{% trans "List of MX records" %}</h2>
{% can_create Mx %}
@ -61,7 +61,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-mx' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several MX records" %}
</a>
{% include "machines/aff_mx.html" with mx_list=mx_list %}
{% include 'machines/aff_mx.html' with mx_list=mx_list %}
<h2>{% trans "List of NS records" %}</h2>
{% can_create Ns %}
@ -72,7 +72,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-ns' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several NS records" %}
</a>
{% include "machines/aff_ns.html" with ns_list=ns_list %}
{% include 'machines/aff_ns.html' with ns_list=ns_list %}
<h2>{% trans "List of TXT records" %}</h2>
{% can_create Txt %}
@ -83,7 +83,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-txt' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several TXT records" %}
</a>
{% include "machines/aff_txt.html" with txt_list=txt_list %}
{% include 'machines/aff_txt.html' with txt_list=txt_list %}
<h2>{% trans "List of DNAME records" %}</h2>
{% can_create DName %}
@ -94,7 +94,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-dname' %}">
<i class="fa fa-trash"></i> {% trans " Delete one or several DNAME records" %}
</a>
{% include "machines/aff_dname.html" with dname_list=dname_list %}
{% include 'machines/aff_dname.html' with dname_list=dname_list %}
<h2>{% trans "List of SRV records" %}</h2>
{% can_create Srv %}
@ -105,5 +105,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-srv' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several SRV records" %}
</a>
{% include "machines/aff_srv.html" with srv_list=srv_list %}
{% include 'machines/aff_srv.html' with srv_list=srv_list %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -39,5 +39,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-iptype' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several IP types" %}
</a>
{% include "machines/aff_iptype.html" with iptype_list=iptype_list %}
{% include 'machines/aff_iptype.html' with iptype_list=iptype_list %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -36,7 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<i class="fa fa-plus"></i>{% trans " Add an IPv6 address" %}
</a>
{% acl_end %}
{% include "machines/aff_ipv6.html" with ipv6_list=ipv6_list %}
{% include 'machines/aff_ipv6.html' with ipv6_list=ipv6_list %}
<br/>
<br/>
<br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -40,7 +40,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-machinetype' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several machine types" %}
</a>
{% include "machines/aff_machinetype.html" with machinetype_list=machinetype_list %}
{% include 'machines/aff_machinetype.html' with machinetype_list=machinetype_list %}
<br/>
<br/>
<br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -41,7 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-nas' %}">
<i class="fa fa-trash"></i>{% trans " Delete one or several NAS device types" %}
</a>
{% include "machines/aff_nas.html" with nas_list=nas_list %}
{% include 'machines/aff_nas.html' with nas_list=nas_list %}
<br/>
<br/>
<br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% load bootstrap3 %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -37,5 +37,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-role' %}"><i
class="fa fa-trash"></i>{% trans " Delete one or several roles" %}</a>
{% include "machines/aff_role.html" with role_list=role_list %}
{% include 'machines/aff_role.html' with role_list=role_list %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -37,8 +37,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-service' %}"><i
class="fa fa-trash"></i>{% trans " Delete one or several services" %}</a>
{% include "machines/aff_service.html" with service_list=service_list %}
{% include 'machines/aff_service.html' with service_list=service_list %}
<h2>{% trans "States of servers" %}</h2>
{% include "machines/aff_servers.html" with servers_list=servers_list %}
{% include 'machines/aff_servers.html' with servers_list=servers_list %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -34,5 +34,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<i class="fa fa-plus"></i>{% trans " Add an SSH fingerprint" %}
</a>
{% acl_end %}
{% include "machines/aff_sshfp.html" with sshfp_list=sshfp_list %}
{% include 'machines/aff_sshfp.html' with sshfp_list=sshfp_list %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -37,5 +37,5 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-vlan' %}"><i
class="fa fa-trash"></i>{% trans " Delete one or several VLANs" %}</a>
{% include "machines/aff_vlan.html" with vlan_list=vlan_list %}
{% include 'machines/aff_vlan.html' with vlan_list=vlan_list %}
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %}
{% extends 'machines/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -171,3 +171,4 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %}
</form>
{% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "base.html" %}
{% extends 'base.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -28,57 +28,58 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block sidebar %}
{% can_view_all Machine %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index' %}">
<i class="fa fa-list-ul"></i>
{% trans "Machines" %}
</a>
{% acl_end %}
{% can_view_all MachineType %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-machinetype" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index-machinetype' %}">
<i class="fa fa-list-ul"></i>
{% trans "Machine types" %}
</a>
{% acl_end %}
{% can_view_all Extension %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-extension" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index-extension' %}">
<i class="fa fa-list-ul"></i>
{% trans "Extensions and zones" %}
</a>
{% acl_end %}
{% can_view_all IpType %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-iptype" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index-iptype' %}">
<i class="fa fa-list-ul"></i>
{% trans "IP ranges" %}
</a>
{% acl_end %}
{% can_view_all Vlan %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-vlan" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index-vlan' %}">
<i class="fa fa-list-ul"></i>
{% trans "VLANs" %}
</a>
{% acl_end %}
{% can_view_all Nas %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-nas" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index-nas' %}">
<i class="fa fa-list-ul"></i>
{% trans "NAS devices" %}
</a>
{% acl_end %}
{% can_view_all machines.Service %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-service" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index-service' %}">
<i class="fa fa-list-ul"></i>
{% trans "Services (DHCP, DNS, ...)" %}
</a>
{% acl_end %}
{% can_view_all Role %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-role" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index-role' %}">
<i class="fa fa-list-ul"></i>
{% trans "Server roles" %}
</a>
{% acl_end %}
{% can_view_all OuverturePortList %}
<a class="list-group-item list-group-item-info" href="{% url "machines:index-portlist" %}">
<a class="list-group-item list-group-item-info" href="{% url 'machines:index-portlist' %}">
<i class="fa fa-list-ul"></i>
{% trans "Ports openings" %}
</a>
{% acl_end %}
{% endblock %}

View file

@ -359,7 +359,7 @@ class DelMailContactForm(Form):
"""Delete contact email adress"""
mailcontacts = forms.ModelMultipleChoiceField(
queryset=MailContact.objects.none(),
label="Enregistrements adresses actuels",
label=_("Current email addresses"),
widget=forms.CheckboxSelectMultiple
)

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,208 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2019-01-08 22:50
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import re2o.aes_field
class Migration(migrations.Migration):
dependencies = [
('preferences', '0057_optionaluser_all_users_active'),
]
operations = [
migrations.AlterModelOptions(
name='radiuskey',
options={'permissions': (('view_radiuskey', 'Can view a RADIUS key object'),), 'verbose_name': 'RADIUS key', 'verbose_name_plural': 'RADIUS keys'},
),
migrations.AlterModelOptions(
name='radiusoption',
options={'verbose_name': 'RADIUS policy', 'verbose_name_plural': 'RADIUS policies'},
),
migrations.AlterModelOptions(
name='reminder',
options={'permissions': (('view_reminder', 'Can view a reminder object'),), 'verbose_name': 'reminder', 'verbose_name_plural': 'reminders'},
),
migrations.AlterModelOptions(
name='switchmanagementcred',
options={'permissions': (('view_switchmanagementcred', 'Can view a switch management credentials object'),), 'verbose_name': 'switch management credentials'},
),
migrations.AlterField(
model_name='mailmessageoption',
name='welcome_mail_en',
field=models.TextField(default='', help_text='Welcome email in English'),
),
migrations.AlterField(
model_name='mailmessageoption',
name='welcome_mail_fr',
field=models.TextField(default='', help_text='Welcome email in French'),
),
migrations.AlterField(
model_name='optionaltopologie',
name='sftp_login',
field=models.CharField(blank=True, help_text='SFTP login for switches', max_length=32, null=True),
),
migrations.AlterField(
model_name='optionaltopologie',
name='sftp_pass',
field=re2o.aes_field.AESEncryptedField(blank=True, help_text='SFTP password', max_length=63, null=True),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_ip_type',
field=models.OneToOneField(blank=True, help_text='IP range for the management of switches', null=True, on_delete=django.db.models.deletion.PROTECT, to='machines.IpType'),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_provision',
field=models.CharField(choices=[('sftp', 'sftp'), ('tftp', 'tftp')], default='tftp', help_text='Provision of configuration mode for switches', max_length=32),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_rest_management',
field=models.BooleanField(default=False, help_text='REST management, activated in case of automatic provision'),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_web_management',
field=models.BooleanField(default=False, help_text='Web management, activated in case of automatic provision'),
),
migrations.AlterField(
model_name='optionaltopologie',
name='switchs_web_management_ssl',
field=models.BooleanField(default=False, help_text='SSL web management, make sure that a certificate is installed on the switch'),
),
migrations.AlterField(
model_name='optionaluser',
name='all_can_create_adherent',
field=models.BooleanField(default=False, help_text='Users can create a member.'),
),
migrations.AlterField(
model_name='optionaluser',
name='all_can_create_club',
field=models.BooleanField(default=False, help_text='Users can create a club.'),
),
migrations.AlterField(
model_name='optionaluser',
name='all_users_active',
field=models.BooleanField(default=False, help_text='If True, all new created and connected users are active. If False, only when a valid registration has been paid.'),
),
migrations.AlterField(
model_name='optionaluser',
name='delete_notyetactive',
field=models.IntegerField(default=15, help_text='Not yet active users will be deleted after this number of days.'),
),
migrations.AlterField(
model_name='optionaluser',
name='local_email_accounts_enabled',
field=models.BooleanField(default=False, help_text='Enable local email accounts for users.'),
),
migrations.AlterField(
model_name='optionaluser',
name='max_email_address',
field=models.IntegerField(default=15, help_text='Maximum number of local email addresses for a standard user.'),
),
migrations.AlterField(
model_name='optionaluser',
name='self_adhesion',
field=models.BooleanField(default=False, help_text='A new user can create their account on Re2o.'),
),
migrations.AlterField(
model_name='optionaluser',
name='self_change_room',
field=models.BooleanField(default=False, help_text='Users can edit their room.'),
),
migrations.AlterField(
model_name='optionaluser',
name='self_change_shell',
field=models.BooleanField(default=False, help_text='Users can edit their shell.'),
),
migrations.AlterField(
model_name='radiuskey',
name='comment',
field=models.CharField(blank=True, help_text='Comment for this key', max_length=255, null=True),
),
migrations.AlterField(
model_name='radiuskey',
name='default_switch',
field=models.BooleanField(default=True, help_text='Default key for switches', unique=True),
),
migrations.AlterField(
model_name='radiuskey',
name='radius_key',
field=re2o.aes_field.AESEncryptedField(help_text='RADIUS key', max_length=255),
),
migrations.AlterField(
model_name='radiusoption',
name='banned',
field=models.CharField(choices=[('REJECT', 'Reject the machine'), ('SET_VLAN', 'Place the machine on the VLAN')], default='REJECT', max_length=32, verbose_name='Policy for banned users'),
),
migrations.AlterField(
model_name='radiusoption',
name='banned_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for banned users if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='banned_vlan', to='machines.Vlan', verbose_name='Banned users VLAN'),
),
migrations.AlterField(
model_name='radiusoption',
name='non_member',
field=models.CharField(choices=[('REJECT', 'Reject the machine'), ('SET_VLAN', 'Place the machine on the VLAN')], default='REJECT', max_length=32, verbose_name='Policy for non members'),
),
migrations.AlterField(
model_name='radiusoption',
name='non_member_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for non members if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='non_member_vlan', to='machines.Vlan', verbose_name='Non members VLAN'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_machine_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for unknown machines if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_machine_vlan', to='machines.Vlan', verbose_name='Unknown machines VLAN'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_port',
field=models.CharField(choices=[('REJECT', 'Reject the machine'), ('SET_VLAN', 'Place the machine on the VLAN')], default='REJECT', max_length=32, verbose_name='Policy for unknown ports'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_port_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for unknown ports if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_port_vlan', to='machines.Vlan', verbose_name='Unknown ports VLAN'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_room',
field=models.CharField(choices=[('REJECT', 'Reject the machine'), ('SET_VLAN', 'Place the machine on the VLAN')], default='REJECT', max_length=32, verbose_name='Policy for machines connecting from unregistered rooms (relevant on ports with STRICT RADIUS mode)'),
),
migrations.AlterField(
model_name='radiusoption',
name='unknown_room_vlan',
field=models.ForeignKey(blank=True, help_text='VLAN for unknown rooms if not rejected', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='unknown_room_vlan', to='machines.Vlan', verbose_name='Unknown rooms VLAN'),
),
migrations.AlterField(
model_name='reminder',
name='days',
field=models.IntegerField(default=7, help_text="Delay between the email and the membership's end", unique=True),
),
migrations.AlterField(
model_name='reminder',
name='message',
field=models.CharField(blank=True, default='', help_text='Message displayed specifically for this reminder', max_length=255, null=True),
),
migrations.AlterField(
model_name='switchmanagementcred',
name='default_switch',
field=models.BooleanField(default=True, help_text='Default credentials for switches', unique=True),
),
migrations.AlterField(
model_name='switchmanagementcred',
name='management_id',
field=models.CharField(help_text='Switch login', max_length=63),
),
migrations.AlterField(
model_name='switchmanagementcred',
name='management_pass',
field=re2o.aes_field.AESEncryptedField(help_text='Password', max_length=63),
),
]

View file

@ -73,11 +73,11 @@ class OptionalUser(AclMixin, PreferencesModel):
gpg_fingerprint = models.BooleanField(default=True)
all_can_create_club = models.BooleanField(
default=False,
help_text=_("Users can create a club")
help_text=_("Users can create a club.")
)
all_can_create_adherent = models.BooleanField(
default=False,
help_text=_("Users can create a member"),
help_text=_("Users can create a member."),
)
shell_default = models.OneToOneField(
@ -88,15 +88,15 @@ class OptionalUser(AclMixin, PreferencesModel):
)
self_change_shell = models.BooleanField(
default=False,
help_text=_("Users can edit their shell")
help_text=_("Users can edit their shell.")
)
self_change_room = models.BooleanField(
default=False,
help_text=_("Users can edit their room")
help_text=_("Users can edit their room.")
)
local_email_accounts_enabled = models.BooleanField(
default=False,
help_text=_("Enable local email accounts for users")
help_text=_("Enable local email accounts for users.")
)
local_email_domain = models.CharField(
max_length=32,
@ -106,20 +106,21 @@ class OptionalUser(AclMixin, PreferencesModel):
max_email_address = models.IntegerField(
default=15,
help_text=_("Maximum number of local email addresses for a standard"
" user")
" user.")
)
delete_notyetactive = models.IntegerField(
default=15,
help_text=_("Inactive users will be deleted after this number of days")
help_text=_("Not yet active users will be deleted after this number of"
" days.")
)
self_adhesion = models.BooleanField(
default=False,
help_text=_("A new user can create their account on Re2o")
help_text=_("A new user can create their account on Re2o.")
)
all_users_active = models.BooleanField(
default=False,
help_text=_("If True, all new created and connected users are active.\
If False, only when a valid registration has been paid")
help_text=_("If True, all new created and connected users are active."
" If False, only when a valid registration has been paid.")
)
class Meta:
@ -206,40 +207,41 @@ class OptionalTopologie(AclMixin, PreferencesModel):
switchs_web_management = models.BooleanField(
default=False,
help_text="Web management, activé si provision automatique"
help_text=_("Web management, activated in case of automatic provision")
)
switchs_web_management_ssl = models.BooleanField(
default=False,
help_text="Web management ssl. Assurez-vous que un certif est installé sur le switch !"
help_text=_("SSL web management, make sure that a certificate is"
" installed on the switch")
)
switchs_rest_management = models.BooleanField(
default=False,
help_text="Rest management, activé si provision auto"
help_text=_("REST management, activated in case of automatic provision")
)
switchs_ip_type = models.OneToOneField(
'machines.IpType',
on_delete=models.PROTECT,
blank=True,
null=True,
help_text="Plage d'ip de management des switchs"
help_text=_("IP range for the management of switches")
)
switchs_provision = models.CharField(
max_length=32,
choices=CHOICE_PROVISION,
default='tftp',
help_text="Mode de récupération des confs par les switchs"
help_text=_("Provision of configuration mode for switches")
)
sftp_login = models.CharField(
max_length=32,
null=True,
blank=True,
help_text="Login sftp des switchs"
help_text=_("SFTP login for switches")
)
sftp_pass = AESEncryptedField(
max_length=63,
null=True,
blank=True,
help_text="Mot de passe sftp"
help_text=_("SFTP password")
)
@cached_property
@ -314,52 +316,56 @@ class RadiusKey(AclMixin, models.Model):
"""Class of a radius key"""
radius_key = AESEncryptedField(
max_length=255,
help_text="Clef radius"
help_text=_("RADIUS key")
)
comment = models.CharField(
max_length=255,
null=True,
blank=True,
help_text="Commentaire de cette clef"
help_text=_("Comment for this key")
)
default_switch = models.BooleanField(
default=True,
unique=True,
help_text= "Clef par défaut des switchs"
help_text=_("Default key for switches")
)
class Meta:
permissions = (
("view_radiuskey", "Peut voir un objet radiuskey"),
("view_radiuskey", _("Can view a RADIUS key object")),
)
verbose_name = _("RADIUS key")
verbose_name_plural = _("RADIUS keys")
def __str__(self):
return "Clef radius " + str(self.id) + " " + str(self.comment)
return _("RADIUS key ") + str(self.id) + " " + str(self.comment)
class SwitchManagementCred(AclMixin, models.Model):
"""Class of a management creds of a switch, for rest management"""
management_id = models.CharField(
max_length=63,
help_text="Login du switch"
help_text=_("Switch login")
)
management_pass = AESEncryptedField(
max_length=63,
help_text="Mot de passe"
help_text=_("Password")
)
default_switch = models.BooleanField(
default=True,
unique=True,
help_text= "Creds par défaut des switchs"
help_text=_("Default credentials for switches")
)
class Meta:
permissions = (
("view_switchmanagementcred", "Peut voir un objet switchmanagementcred"),
("view_switchmanagementcred", _("Can view a switch management"
" credentials object")),
)
verbose_name = _("switch management credentials")
def __str__(self):
return "Identifiant " + str(self.management_id)
return _("Switch login ") + str(self.management_id)
class Reminder(AclMixin, models.Model):
@ -367,25 +373,26 @@ class Reminder(AclMixin, models.Model):
Days: liste des nombres de jours pour lesquells un mail est envoyé
optionalMessage: message additionel pour le mail
"""
PRETTY_NAME="Options pour le mail de fin d'adhésion"
days = models.IntegerField(
default=7,
unique=True,
help_text="Délais entre le mail et la fin d'adhésion"
help_text=_("Delay between the email and the membership's end")
)
message = models.CharField(
max_length=255,
default="",
null=True,
blank=True,
help_text="Message affiché spécifiquement pour ce rappel"
help_text=_("Message displayed specifically for this reminder")
)
class Meta:
permissions = (
("view_reminder", "Peut voir un objet reminder"),
("view_reminder", _("Can view a reminder object")),
)
verbose_name = _("reminder")
verbose_name_plural = _("reminders")
def users_to_remind(self):
from re2o.utils import all_has_access
@ -472,8 +479,7 @@ class MailContact(AclMixin, models.Model):
commentary = models.CharField(
blank = True,
null = True,
help_text = _(
"Description of the associated email address."),
help_text = _("Description of the associated email address."),
max_length = 256
)
@ -564,8 +570,8 @@ def homeoption_post_save(**kwargs):
class MailMessageOption(AclMixin, models.Model):
"""Reglages, mail de bienvenue et autre"""
welcome_mail_fr = models.TextField(default="", help_text="Mail de bienvenue en français")
welcome_mail_en = models.TextField(default="", help_text="Mail de bienvenue en anglais")
welcome_mail_fr = models.TextField(default="", help_text=_("Welcome email in French"))
welcome_mail_en = models.TextField(default="", help_text=_("Welcome email in English"))
class Meta:
permissions = (
@ -577,7 +583,8 @@ class MailMessageOption(AclMixin, models.Model):
class RadiusOption(AclMixin, PreferencesModel):
class Meta:
verbose_name = _("radius policies")
verbose_name = _("RADIUS policy")
verbose_name_plural = _("RADIUS policies")
MACHINE = 'MACHINE'
DEFINED = 'DEFINED'
@ -588,8 +595,8 @@ class RadiusOption(AclMixin, PreferencesModel):
REJECT = 'REJECT'
SET_VLAN = 'SET_VLAN'
CHOICE_POLICY = (
(REJECT, _('Reject the machine')),
(SET_VLAN, _('Place the machine on the VLAN'))
(REJECT, _("Reject the machine")),
(SET_VLAN, _("Place the machine on the VLAN"))
)
radius_general_policy = models.CharField(
max_length=32,
@ -608,16 +615,14 @@ class RadiusOption(AclMixin, PreferencesModel):
related_name='unknown_machine_vlan',
blank=True,
null=True,
verbose_name=_('Unknown machine Vlan'),
help_text=_(
'Vlan for unknown machines if not rejected.'
)
verbose_name=_("Unknown machines VLAN"),
help_text=_("VLAN for unknown machines if not rejected")
)
unknown_port = models.CharField(
max_length=32,
choices=CHOICE_POLICY,
default=REJECT,
verbose_name=_("Policy for unknown port"),
verbose_name=_("Policy for unknown ports"),
)
unknown_port_vlan = models.ForeignKey(
'machines.Vlan',
@ -625,20 +630,15 @@ class RadiusOption(AclMixin, PreferencesModel):
related_name='unknown_port_vlan',
blank=True,
null=True,
verbose_name=_('Unknown port Vlan'),
help_text=_(
'Vlan for unknown ports if not rejected.'
)
verbose_name=_("Unknown ports VLAN"),
help_text=_("VLAN for unknown ports if not rejected")
)
unknown_room = models.CharField(
max_length=32,
choices=CHOICE_POLICY,
default=REJECT,
verbose_name=_(
"Policy for machine connecting from "
"unregistered room (relevant on ports with STRICT "
"radius mode)"
),
verbose_name=_("Policy for machines connecting from unregistered rooms"
" (relevant on ports with STRICT RADIUS mode)"),
)
unknown_room_vlan = models.ForeignKey(
'machines.Vlan',
@ -646,16 +646,14 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT,
blank=True,
null=True,
verbose_name=_('Unknown room Vlan'),
help_text=_(
'Vlan for unknown room if not rejected.'
)
verbose_name=_("Unknown rooms VLAN"),
help_text=_("VLAN for unknown rooms if not rejected")
)
non_member = models.CharField(
max_length=32,
choices=CHOICE_POLICY,
default=REJECT,
verbose_name=_("Policy non member users."),
verbose_name=_("Policy for non members"),
)
non_member_vlan = models.ForeignKey(
'machines.Vlan',
@ -663,16 +661,14 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT,
blank=True,
null=True,
verbose_name=_('Non member Vlan'),
help_text=_(
'Vlan for non members if not rejected.'
)
verbose_name=_("Non members VLAN"),
help_text=_("VLAN for non members if not rejected")
)
banned = models.CharField(
max_length=32,
choices=CHOICE_POLICY,
default=REJECT,
verbose_name=_("Policy for banned users."),
verbose_name=_("Policy for banned users"),
)
banned_vlan = models.ForeignKey(
'machines.Vlan',
@ -680,10 +676,8 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT,
blank=True,
null=True,
verbose_name=_('Banned Vlan'),
help_text=_(
'Vlan for banned if not rejected.'
)
verbose_name=_("Banned users VLAN"),
help_text=_("VLAN for banned users if not rejected")
)
vlan_decision_ok = models.OneToOneField(
'machines.Vlan',

View file

@ -23,13 +23,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %}
{% load acl %}
{% load logs_extra %}
<table class="table table-striped">
{% load i18n %}
<table class="table table-striped">
<thead>
<tr>
<th>Id Clef</th>
<th>Commentaire</th>
<th>Clef par default des switchs</th>
<th>Clef utilisée par les switchs</th>
<th>{% trans "RADIUS key ID" %}</th>
<th>{% trans "Comment" %}</th>
<th>{% trans "Default RADIUS key for switches" %}</th>
<th>{% trans "RADIUS key used by the swithes" %}</th>
<th></th>
<th></th>
</tr>
@ -45,13 +47,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% include 'buttons/edit.html' with href='preferences:edit-radiuskey' id=radiuskey.id %}
{% acl_end %}
{% can_delete radiuskey %}
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'preferences:del-radiuskey' radiuskey.pk %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='preferences:del-radiuskey' id=radiuskey.id %}
{% acl_end %}
{% history_button radiuskey %}
</td>
</tr>
{% endfor %}
</table>
</table>

View file

@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</tr>
<tr>
<th>{% trans "VLAN for machines accepted by RADIUS" %}</th>
<td><span class="label label-success">Vlan {{ radiusoptions.vlan_decision_ok }}</span></td>
<td><span class="label label-success">{% blocktrans with vlan_decision_ok=radiusoptions.vlan_decision_ok %}VLAN {{ vlan_decision_ok }}{% endblocktrans %}</span></td>
</tr>
</table>
<hr/>
@ -39,7 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<thead>
<tr>
<th>{% trans "Situation" %}</th>
<th>{% trans "Behavior" %}</th>
<th>{% trans "Behaviour" %}</th>
</tr>
</thead>
<tr>
@ -48,7 +48,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.unknown_machine == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span>
{% else %}
<span class="label label-success">Vlan {{ radiusoptions.unknown_machine_vlan }}</span>
<span class="label label-success">{% blocktrans with unknown_machine_vlan=radiusoptions.unknown_machine_vlan %}VLAN {{ unknown_machine_vlan }}{% endblocktrans %}</span>
{% endif %}
</td>
</tr>
@ -58,7 +58,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.unknown_port == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span>
{% else %}
<span class="label label-success">Vlan {{ radiusoptions.unknown_port_vlan }}</span>
<span class="label label-success">{% blocktrans with unknown_port_vlan=radiusoptions.unknown_port_vlan %}VLAN {{ unknown_port_vlan }}{% endblocktrans %}</span>
{% endif %}
</td>
</tr>
@ -68,7 +68,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.unknown_room == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span>
{% else %}
<span class="label label-success">Vlan {{ radiusoptions.unknown_room_vlan }}</span>
<span class="label label-success">{% blocktrans with unknown_room_vlan=radiusoptions.unknown_room_vlan %}VLAN {{ unknown_room_vlan }}{% endblocktrans %}</span>
{% endif %}
</td>
</tr>
@ -78,7 +78,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.non_member == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span>
{% else %}
<span class="label label-success">Vlan {{ radiusoptions.non_member_vlan }}</span>
<span class="label label-success">{% blocktrans with non_member_vlan=radiusoptions.non_member_vlan %}VLAN {{ non_member_vlan }}{% endblocktrans %}</span>
{% endif %}
</td>
</tr>
@ -88,7 +88,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% if radiusoptions.unknown_port == 'REJECT' %}
<span class="label label-danger">{% trans "Reject" %}</span>
{% else %}
<span class="label label-success">Vlan {{ radiusoptions.banned_vlan }}</span>
<span class="label label-success">{% blocktrans with banned_vlan=radiusoptions.banned_vlan %}VLAN {{ banned_vlan }}{% endblocktrans %}</span>
{% endif %}
</td>
</tr>

View file

@ -23,11 +23,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %}
{% load acl %}
{% load logs_extra %}
{% load i18n %}
<table class="table table-striped">
<thead>
<tr>
<th>Nombre de jours avant le rappel</th>
<th>Message custom pour ce rappel</th>
<th>{% trans "Number of days before the reminder" %}</th>
<th>{% trans "Message for this reminder" %}</th>
<th></th>
<th></th>
</tr>
@ -39,11 +41,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td class="text-right">
{% can_edit reminder %}
{% include 'buttons/edit.html' with href='preferences:edit-reminder' id=reminder.id %}
{% can_delete reminder %}
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'preferences:del-reminder' reminder.id %}">
<i class="fa fa-trash"></i>
</a>
{% acl_end %}
{% can_delete reminder %}
{% include 'buttons/suppr.html' with href='preferences:del-reminder' id=reminder.id %}
{% acl_end %}
{% history_button reminder %}
</td>

View file

@ -44,11 +44,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td class="text-right">
{% can_edit service%}
{% include 'buttons/edit.html' with href='preferences:edit-service' id=service.id %}
{% can_delete service %}
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'preferences:del-service' service.id %}">
<i class="fa fa-trash"></i>
</a>
{% acl_end %}
{% can_delete service %}
{% include 'buttons/suppr.html' with href='preferences:del-service' id=service.id %}
{% acl_end %}
{% history_button service %}
</td>

View file

@ -23,12 +23,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %}
{% load acl %}
{% load logs_extra %}
<table class="table table-striped">
{% load i18n %}
<table class="table table-striped">
<thead>
<tr>
<th>Identifiant</th>
<th>Creds par default des switchs</th>
<th>Utilisé pour les switchs</th>
<th>{% trans "Switch login" %}</th>
<th>{% trans "Default switch management credentials" %}</th>
<th>{% trans "Management credentials used by the switches" %}</th>
<th></th>
<th></th>
</tr>
@ -43,13 +45,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% include 'buttons/edit.html' with href='preferences:edit-switchmanagementcred' id=switchmanagementcred.id %}
{% acl_end %}
{% can_delete switchmanagementcred %}
<a class="btn btn-danger btn-sm" role="button" title="Supprimer" href="{% url 'preferences:del-switchmanagementcred' switchmanagementcred.pk %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='preferences:del-switchmanagementcred' id=switchmanagementcred.id %}
{% acl_end %}
{% history_button switchmanagementcred %}
</td>
</tr>
{% endfor %}
</table>
</table>

View file

@ -1,4 +1,4 @@
{% extends "topologie/sidebar.html" %}
{% extends 'preferences/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -24,15 +24,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %}
{% load bootstrap3 %}
{% load i18n %}
{% block title %}Création et modification de machines{% endblock %}
{% block title %}{% trans "Deletion of preferences" %}{% endblock %}
{% block content %}
<form class="form" method="post">
{% csrf_token %}
<h4>Attention, voulez-vous vraiment supprimer cet objet {{ objet_name }} ( {{ objet }} ) ?</h4>
{% bootstrap_button "Confirmer" button_type="submit" icon="trash" %}
<h4>{% blocktrans %}Warning: are you sure you want to delete this {{ objet_name }} object ( {{ objet }} )?{% endblocktrans %}</h4>
{% trans "Confirm" as tr_confirm %}
{% bootstrap_button tr_confirm button_type="submit" icon="trash" %}
</form>
<br />
<br />

View file

@ -1,4 +1,4 @@
{% extends "preferences/sidebar.html" %}
{% extends 'preferences/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -69,7 +69,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr>
<th>{% trans "General message displayed on the website" %}</th>
<td>{{ generaloptions.general_message }}</td>
<th>{% trans "Main site url" %}</th>
<th>{% trans "Main site URL" %}</th>
<td>{{ generaloptions.main_site_url }}</td>
</tr>
<tr>
@ -120,7 +120,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th>{% trans "Self registration" %}</th>
<td>{{ useroptions.self_adhesion|tick }}</td>
<th>{% trans "Delete not yet active users after" %}</th>
<td>{{ useroptions.delete_notyetactive }} days</td>
<td>{% blocktrans with delete_notyetactive=useroptions.delete_notyetactive %}{{ delete_notyetactive }} days{% endblocktrans %}</td>
</tr>
<tr>
<th>{% trans "All users are active by default" %}</th>
@ -218,11 +218,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</tr>
</table>
<h4>Clef radius</h4>
<h4>{% trans "RADIUS keys" %}</h4>
{% can_create RadiusKey%}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-radiuskey' %}"><i class="fa fa-plus"></i> Ajouter une clef radius</a>
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-radiuskey' %}"><i class="fa fa-plus"></i>{% trans " Add a RADIUS key" %}</a>
{% acl_end %}
{% include "preferences/aff_radiuskey.html" with radiuskey_list=radiuskey_list %}
{% include 'preferences/aff_radiuskey.html' with radiuskey_list=radiuskey_list %}
</div>
</div>
@ -230,7 +230,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="panel panel-default" id="switches">
<div class="panel-heading" data-toggle="collapse" href="#collapse_switches">
<h4 class="panel-title">
<a><i class="fa fa-server"></i> Configuration des Switches</a>
<a><i class="fa fa-server"></i>{% trans "Configuration of switches" %}</a>
</h4>
</div>
<div id="collapse_switches" class="panel-collapse panel-body collapse">
@ -243,64 +243,64 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<table class="table table-striped">
<tr>
<th>Web management, activé si provision automatique</th>
<th>{% trans "Web management, activated in case of automatic provision" %}</th>
<td>{{ topologieoptions.switchs_web_management }}</td>
<th>Rest management, activé si provision auto</th>
<th>{% trans "REST management, activated in case of automatic provision" %}</th>
<td>{{ topologieoptions.switchs_rest_management }}</td>
</tr>
</table>
<h5>{% if topologieoptions.provision_switchs_enabled %}<span class="label label-success">Provision de la config des switchs{% else %}<span class="label label-danger">Provision de la config des switchs{% endif%}</span></h5>
<h5>{% if topologieoptions.provision_switchs_enabled %}<span class="label label-success">{% trans "Provision of configuration for switches" %}{% else %}<span class="label label-danger">{% trans "Provision of configuration for switches" %}{% endif%}</span></h5>
<table class="table table-striped">
<tr>
<th>Switchs configurés automatiquement</th>
<td>{{ topologieoptions.provisioned_switchs|join:", " }} {% if topologieoptions.provisioned_switchs %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span></td>
<th>{% trans "Switches with automatic provision" %}</th>
<td>{{ topologieoptions.provisioned_switchs|join:", " }} {% if topologieoptions.provisioned_switchs %}<span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing" %}{% endif %}</span></td>
</tr>
<tr>
<th>Plage d'ip de management des switchs</th>
<td>{{ topologieoptions.switchs_ip_type }} {% if topologieoptions.switchs_ip_type %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span></td>
<th>{% trans "IP range for the management of switches" %}</th>
<td>{{ topologieoptions.switchs_ip_type }} {% if topologieoptions.switchs_ip_type %}<span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing" %}{% endif %}</span></td>
</tr>
<tr>
<th>Serveur des config des switchs</th>
<td>{{ topologieoptions.switchs_management_interface }} {% if topologieoptions.switchs_management_interface %} - {{ topologieoptions.switchs_management_interface_ip }} <span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span></td>
<th>{% trans "Server for the configuration of switches" %}</th>
<td>{{ topologieoptions.switchs_management_interface }} {% if topologieoptions.switchs_management_interface %} - {{ topologieoptions.switchs_management_interface_ip }} <span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing" %}{% endif %}</span></td>
</tr>
<tr>
<th>Mode de provision des switchs</th>
<th>{% trans "Provision of configuration mode for switches" %}</th>
<td>{{ topologieoptions.switchs_provision }}</td>
</tr>
<tr>
<th>Mode TFTP</th>
<td><span class="label label-success"> OK</span></td>
<th>{% trans "TFTP mode" %}</th>
<td><span class="label label-success">{% trans "OK" %}</span></td>
</tr>
<tr>
<th>Mode SFTP</th>
<td>{% if topologieoptions.switchs_management_sftp_creds %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Creds manquants{% endif %}</span></td>
<th>{% trans "SFTP mode" %}</th>
<td>{% if topologieoptions.switchs_management_sftp_creds %}<span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing credentials" %}{% endif %}</span></td>
</tr>
</table>
<h6>Creds de management des switchs</h6>
<h6>{% trans "Switch management credentials" %}</h6>
{% can_create SwitchManagementCred%}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-switchmanagementcred' %}"><i class="fa fa-plus"></i> Ajouter un id/mdp de management switch</a>
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-switchmanagementcred' %}"><i class="fa fa-plus"></i>{% trans " Add switch management credentials" %}</a>
{% acl_end %}
<p>
</p>
{% if switchmanagementcred_list %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span>
{% include "preferences/aff_switchmanagementcred.html" with switchmanagementcred_list=switchmanagementcred_list %}
{% if switchmanagementcred_list %}<span class="label label-success">{% trans "OK" %}{% else %}<span class="label label-danger">{% trans "Missing" %}{% endif %}</span>
{% include 'preferences/aff_switchmanagementcred.html' with switchmanagementcred_list=switchmanagementcred_list %}
</div>
</div>
<div class="panel panel-default" id="radius">
<div class="panel-heading" data-toggle="collapse" href="#collapse_radius">
<h4 class="panel-title"><a><i class="fa fa-circle"></i> {% trans "Radius preferences" %}</h4></a>
<h4 class="panel-title"><a><i class="fa fa-circle"></i> {% trans "RADIUS preferences" %}</h4></a>
</div>
<div id="collapse_radius" class="panel-collapse panel-body collapse">
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:edit-options' 'RadiusOption' %}">
<i class="fa fa-edit"></i>
{% trans "Edit" %}
</a>
{% include "preferences/aff_radiusoptions.html" %}
{% include 'preferences/aff_radiusoptions.html' %}
</div>
</div>
@ -350,7 +350,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="panel panel-default" id="mail">
<div class="panel-heading" data-toggle="collapse" href="#collapse_mail">
<h4 class="panel-title">
<a><i class="fa fa-comment"></i> Message pour les mails</a>
<a><i class="fa fa-comment"></i>{% trans "Message for emails" %}</a>
</h4>
</div>
<div id="collapse_mail" class="panel-collapse panel-body collapse">
@ -377,16 +377,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="panel panel-default" id="rappels">
<div class="panel-heading" data-toggle="collapse" href="#collapse_rappels">
<h4 class="panel-title">
<a><i class="fa fa-bell"></i> Options pour le mail de fin d'adhésion</a>
<a><i class="fa fa-bell"></i>{% trans "Options for the membership's end email" %}</a>
</h4>
</div>
<div id="collapse_rappels" class="panel-collapse panel-body collapse">
{% can_create preferences.Reminder%}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-reminder' %}"><i class="fa fa-plus"></i> Ajouter un rappel</a>
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-reminder' %}"><i class="fa fa-plus"></i>{% trans " Add a reminder" %}</a>
<p></p>
{% acl_end %}
{% include "preferences/aff_reminder.html" with reminder_list=reminder_list %}
{% include 'preferences/aff_reminder.html' with reminder_list=reminder_list %}
</div>
</div>
@ -403,7 +403,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-service' %}"><i class="fa fa-plus"></i>{% trans " Add a service" %}</a>
<p></p>
{% acl_end %}
{% include "preferences/aff_service.html" with service_list=service_list %}
{% include 'preferences/aff_service.html' with service_list=service_list %}
</div>
</div>
@ -417,18 +417,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div id="collapse_contact" class="panel-collapse panel-body collapse">
{% can_create preferences.MailContact %}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-mailcontact' %}"><i class="fa fa-plus"></i>{% trans "Add an address" %}</a>
<a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:add-mailcontact' %}"><i class="fa fa-plus"></i>{% trans " Add an address" %}</a>
{% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'preferences:del-mailcontact' %}"><i class="fa fa-trash"></i>{% trans "Delete one or several addresses" %}</a>
<a class="btn btn-danger btn-sm" role="button" href="{% url 'preferences:del-mailcontact' %}"><i class="fa fa-trash"></i>{% trans " Delete one or several addresses" %}</a>
<p></p>
{% include "preferences/aff_mailcontact.html" with mailcontact_list=mailcontact_list %}
{% include 'preferences/aff_mailcontact.html' with mailcontact_list=mailcontact_list %}
</div>
</div>
<div class="panel panel-default" id="social">
<div class="panel-heading" data-toggle="collapse" href="#collapse_social">
<h4 class="panel-title">
<a><i class="fa fa-facebook"></i><i class="fa fa-twitter"></i> Réseaux sociaux</a>
<a><i class="fa fa-facebook"></i><i class="fa fa-twitter"></i>{% trans "Social networks" %}</a>
</h4>
</div>
<div id="collapse_social" class="panel-collapse panel-body collapse">

View file

@ -1,4 +1,4 @@
{% extends "preferences/sidebar.html" %}
{% extends 'preferences/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "preferences/sidebar.html" %}
{% extends 'preferences/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "base.html" %}
{% extends 'base.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -111,7 +111,7 @@ def edit_options(request, section):
model = getattr(models, section, None)
form_instance = getattr(forms, 'Edit' + section + 'Form', None)
if not (model or form_instance):
messages.error(request, _("Unknown object"))
messages.error(request, _("Unknown object."))
return redirect(reverse('preferences:display-options'))
options_instance, _created = model.objects.get_or_create()
@ -186,7 +186,7 @@ def del_service(request, service_instance, **_kwargs):
"""Suppression d'un service de la page d'accueil"""
if request.method == "POST":
service_instance.delete()
messages.success(request, "Le service a été détruit")
messages.success(request, _("The service was deleted."))
return redirect(reverse('preferences:display-options'))
return form(
{'objet': service_instance, 'objet_name': 'service'},
@ -204,7 +204,7 @@ def add_reminder(request):
messages.success(request, _("The reminder was added."))
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': reminder, 'action_name': _("Add a service")},
{'preferenceform': reminder, 'action_name': _("Add a reminder")},
'preferences/preferences.html',
request
)
@ -220,7 +220,7 @@ def edit_reminder(request, reminder_instance, **_kwargs):
)
if reminder.is_valid():
reminder.save()
messages.success(request, _("The service was edited."))
messages.success(request, _("The reminder was edited."))
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': reminder, 'action_name': _("Edit")},
@ -236,7 +236,7 @@ def del_reminder(request, reminder_instance, **_kwargs):
"""Destruction d'un reminder"""
if request.method == "POST":
reminder_instance.delete()
messages.success(request, "Le reminder a été détruit")
messages.success(request, _("The reminder was deleted."))
return redirect(reverse('preferences:display-options'))
return form(
{'objet': reminder_instance, 'objet_name': 'reminder'},
@ -252,10 +252,10 @@ def add_radiuskey(request):
radiuskey = RadiusKeyForm(request.POST or None)
if radiuskey.is_valid():
radiuskey.save()
messages.success(request, "Cette clef a été ajouté")
messages.success(request, _("The RADIUS key was added."))
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': radiuskey, 'action_name': 'Ajouter'},
{'preferenceform': radiuskey, 'action_name': _("Add a RADIUS key")},
'preferences/preferences.html',
request
)
@ -266,10 +266,10 @@ def edit_radiuskey(request, radiuskey_instance, **_kwargs):
radiuskey = RadiusKeyForm(request.POST or None, instance=radiuskey_instance)
if radiuskey.is_valid():
radiuskey.save()
messages.success(request, "Radiuskey modifié")
messages.success(request, _("The RADIUS key was edited."))
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': radiuskey, 'action_name': 'Editer'},
{'preferenceform': radiuskey, 'action_name': _("Edit")},
'preferences/preferences.html',
request
)
@ -282,10 +282,10 @@ def del_radiuskey(request, radiuskey_instance, **_kwargs):
if request.method == "POST":
try:
radiuskey_instance.delete()
messages.success(request, "La radiuskey a été détruite")
messages.success(request, _("The RADIUS key was deleted."))
except ProtectedError:
messages.error(request, "Erreur la\
clef ne peut être supprimé, elle est affectée à des switchs")
messages.error(request, _("The RADIUS key is assigned to at least"
" one switch, you can't delete it."))
return redirect(reverse('preferences:display-options'))
return form(
{'objet': radiuskey_instance, 'objet_name': 'radiuskey'},
@ -301,10 +301,10 @@ def add_switchmanagementcred(request):
switchmanagementcred = SwitchManagementCredForm(request.POST or None)
if switchmanagementcred.is_valid():
switchmanagementcred.save()
messages.success(request, "Ces creds ont été ajoutés")
messages.success(request, _("The switch management credentials were added."))
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': switchmanagementcred, 'action_name': 'Ajouter'},
{'preferenceform': switchmanagementcred, 'action_name': _("Add switch management credentials")},
'preferences/preferences.html',
request
)
@ -315,10 +315,10 @@ def edit_switchmanagementcred(request, switchmanagementcred_instance, **_kwargs)
switchmanagementcred = SwitchManagementCredForm(request.POST or None, instance=switchmanagementcred_instance)
if switchmanagementcred.is_valid():
switchmanagementcred.save()
messages.success(request, "Creds de managament modifié")
messages.success(request, _("The switch management credentials were edited."))
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': switchmanagementcred, 'action_name': 'Editer'},
{'preferenceform': switchmanagementcred, 'action_name': _("Edit")},
'preferences/preferences.html',
request
)
@ -331,10 +331,11 @@ def del_switchmanagementcred(request, switchmanagementcred_instance, **_kwargs):
if request.method == "POST":
try:
switchmanagementcred_instance.delete()
messages.success(request, "Ces creds ont été détruits")
messages.success(request, _("The switch management credentials were deleted."))
except ProtectedError:
messages.error(request, "Erreur ces\
creds ne peuvent être supprimés, ils sont affectés à des switchs")
messages.error(request, _("The switch management credentials are"
" assigned to at least one switch, you"
" can't delete them."))
return redirect(reverse('preferences:display-options'))
return form(
{'objet': switchmanagementcred_instance, 'objet_name': 'switchmanagementcred'},

View file

@ -73,9 +73,9 @@ def smtp_check(local_part):
reply_code = srv.getreply()[0]
srv.close()
if reply_code in [250, 252]:
return True, _("This domain is already taken")
return True, _("This domain is already taken.")
except:
return True, _("Smtp unreachable")
return True, _("SMTP unreachable.")
return False, None

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-23 15:03+0200\n"
"POT-Creation-Date: 2019-01-12 16:48+0100\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -42,6 +42,14 @@ msgstr "Vous n'avez pas le droit d'accéder à ce menu."
msgid "You don't have the right to edit the history."
msgstr "Vous n'avez pas le droit de modifier l'historique."
#: base.py:76
msgid "This domain is already taken."
msgstr "Ce domaine est déjà pris."
#: base.py:78
msgid "SMTP unreachable."
msgstr "SMTP injoignable."
#: mixins.py:111
#, python-format
msgid "You don't have the right to create a %s object."
@ -87,15 +95,15 @@ msgstr "À propos de %(AssoName)s"
#: templates/re2o/about.html:36
msgid ""
"Re2o is an administration tool initiated by <a href=\"https://rezometz.org/"
"\">Rezo Metz</a> and a few members of other <a href=\"https://"
"federez.net\">FedeRez</a> associations around the summer 2016.<br /> It is "
"intended to be a tool independant from any network infrastructure so it can "
"be setup in \"a few steps\". This tool is entirely free and available under "
"a GNU Public License v2 (GPLv2) license on <a href=\"https://gitlab.federez."
"net/federez/re2o/\">FedeRez gitlab</a>.<br /> Re2o's mainteners are "
"volunteers mainly from French schools. <br /> If you want to get involved in "
"the development process, we will be glad to welcome you so do not hesitate "
"to contact us and come help us build the future of Re2o."
"\">Rezo Metz</a> and a few members of other <a href=\"https://federez.net"
"\">FedeRez</a> associations around the summer 2016.<br /> It is intended to "
"be a tool independant from any network infrastructure so it can be setup in "
"\"a few steps\". This tool is entirely free and available under a GNU Public "
"License v2 (GPLv2) license on <a href=\"https://gitlab.federez.net/federez/"
"re2o/\">FedeRez gitlab</a>.<br /> Re2o's mainteners are volunteers mainly "
"from French schools. <br /> If you want to get involved in the development "
"process, we will be glad to welcome you so do not hesitate to contact us and "
"come help us build the future of Re2o."
msgstr ""
"Re2o est un outil d'administration initié par <a href=\"https://rezometz.org/"
"\">Rézo Metz</a> et quelques membres d'autres associations de <a href="
@ -190,7 +198,7 @@ msgstr "Accueil"
msgid "Welcome to %(name_website)s"
msgstr "Bienvenue sur %(name_website)s"
#: templates/re2o/index.html:43 templates/re2o/index.html:45
#: templates/re2o/index.html:43
msgid "Registration"
msgstr "Inscription"
@ -202,17 +210,25 @@ msgstr ""
"Si vous n'avez pas encore de compte et que vous voulez accéder à Internet et "
"aux services de l'association, créez votre espace personnel."
#: templates/re2o/index.html:55 templates/re2o/index.html:57
#: templates/re2o/index.html:45
msgid "Sign up"
msgstr "S'inscrire"
#: templates/re2o/index.html:55
msgid "Logging in"
msgstr "Identification"
#: templates/re2o/index.html:56
msgid ""
"If you already have an account, log in. You can manage your subscription to "
"If you already have an account, log in. You can manage your subscriptions to "
"the organisation, your machines and all your services."
msgstr ""
"Si vous avez déjà un compte, identifiez-vous. Vous pouvez gérer votre "
"cotisation à l'association, vos machines et tous vos services."
"Si vous avez déjà un compte, identifiez-vous. Vous pouvez gérer vos "
"cotisations à l'association, vos machines et tous vos services."
#: templates/re2o/index.html:57
msgid "Log in"
msgstr "Se connecter"
#: templates/re2o/index.html:68
msgid "My profile"
@ -220,10 +236,10 @@ msgstr "Mon profil"
#: templates/re2o/index.html:69
msgid ""
"To manage your subscription, your machines and all your services, access "
"To manage your subscriptions, your machines and all your services, access "
"your profile."
msgstr ""
"Pour gérer votre cotisation, vos machines et tous vos services, accéder à "
"Pour gérer vos cotisations, vos machines et tous vos services, accéder à "
"votre profil."
#: templates/re2o/index.html:70
@ -249,5 +265,5 @@ msgid "Follow @%(twitter_account_name)s"
msgstr "Suivre @%(twitter_account_name)s"
#: views.py:87
msgid "Unable to get the information"
msgstr "Impossible d'obtenir l'information"
msgid "Unable to get the information."
msgstr "Impossible d'obtenir l'information."

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %}
{% extends 're2o/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %}
{% extends 're2o/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %}
{% extends 're2o/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
<h2>{% blocktrans %}History of {{ object }}{% endblocktrans %}</h2>
{% include "re2o/aff_history.html" with reversions=reversions %}
{% include 're2o/aff_history.html' with reversions=reversions %}
<br />
<br />
<br />

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %}
{% extends 're2o/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -42,7 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="caption">
<h3>{% trans "Registration" %}</h3>
<p>{% trans "If you don't have an account yet and you want to access the Internet and the organisation's services, create your own personal account." %}</p>
<p><a href="{% url 'users:new-user' %}" class="btn btn-primary" role="button">{% trans "Registration" %}</a></p>
<p><a href="{% url 'users:new-user' %}" class="btn btn-primary" role="button">{% trans "Sign up" %}</a></p>
</div>
</div>
</div>
@ -53,8 +53,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="thumbnail">
<div class="caption">
<h3>{% trans "Logging in" %}</h3>
<p>{% trans "If you already have an account, log in. You can manage your subscription to the organisation, your machines and all your services." %}</p>
<p><a href="{% url 'login' %}" class="btn btn-primary" role="button">{% trans "Logging in" %}</a></p>
<p>{% trans "If you already have an account, log in. You can manage your subscriptions to the organisation, your machines and all your services." %}</p>
<p><a href="{% url 'login' %}" class="btn btn-primary" role="button">{% trans "Log in" %}</a></p>
</div>
</div>
</div>
@ -66,7 +66,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="thumbnail">
<div class="caption">
<h3>{% trans "My profile" %}</h3>
<p>{% trans "To manage your subscription, your machines and all your services, access your profile." %}</p>
<p>{% trans "To manage your subscriptions, your machines and all your services, access your profile." %}</p>
<p><a href="{% url 'users:mon-profil' %}" class="btn btn-primary" role="button">{% trans "Access my profile" %}</a></p>
</div>
</div>

View file

@ -1,4 +1,4 @@
{% extends "base.html" %}
{% extends 'base.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -84,7 +84,7 @@ def about_page(request):
git_info_commit = last_commit.hexsha
git_info_commit_date = last_commit.committed_datetime
except:
NO_GIT_MSG = _("Unable to get the information")
NO_GIT_MSG = _("Unable to get the information.")
git_info_remote = NO_GIT_MSG
git_info_branch = NO_GIT_MSG
git_info_commit = NO_GIT_MSG

View file

@ -33,7 +33,7 @@ CHOICES_USER = (
('0', _("Active")),
('1', _("Disabled")),
('2', _("Archived")),
('3', _("Not Yet Active")),
('3', _("Not yet active")),
)
CHOICES_AFF = (

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-15 18:15+0200\n"
"POT-Creation-Date: 2019-01-08 23:56+0100\n"
"PO-Revision-Date: 2018-06-24 20:10+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -42,44 +42,48 @@ msgstr "Désactivés"
msgid "Archived"
msgstr "Archivés"
#: forms.py:39
#: forms.py:36
msgid "Not yet active"
msgstr "Pas encore adhéré"
#: forms.py:40
msgid "Users"
msgstr "Utilisateurs"
#: forms.py:40
#: forms.py:41
msgid "Machines"
msgstr "Machines"
#: forms.py:41
#: forms.py:42
msgid "Invoices"
msgstr "Factures"
#: forms.py:42
#: forms.py:43
msgid "Bans"
msgstr "Bannissements"
#: forms.py:43
#: forms.py:44
msgid "Whitelists"
msgstr "Accès gracieux"
#: forms.py:44
#: forms.py:45
msgid "Rooms"
msgstr "Chambres"
#: forms.py:45
#: forms.py:46
msgid "Ports"
msgstr "Ports"
#: forms.py:46
#: forms.py:47
msgid "Switches"
msgstr "Commutateurs réseau"
#: forms.py:59 forms.py:71 templates/search/search.html:29
#: forms.py:60 forms.py:72 templates/search/search.html:29
#: templates/search/search.html:48
msgid "Search"
msgstr "Rechercher"
#: forms.py:61 forms.py:73
#: forms.py:62 forms.py:74
msgid ""
"Use « » and «,» to specify distinct words, «\"query\"» for an exact search "
"and «\\» to escape a character."
@ -87,19 +91,19 @@ msgstr ""
"Utilisez « » et «,» pour spécifier différents mots, «\"query\"» pour une "
"recherche exacte et «\\» pour échapper un caractère."
#: forms.py:80
#: forms.py:81
msgid "Users filter"
msgstr "Filtre utilisateurs"
#: forms.py:87
#: forms.py:88
msgid "Display filter"
msgstr "Filtre affichage"
#: forms.py:95
#: forms.py:96
msgid "Start date"
msgstr "Date de début"
#: forms.py:99
#: forms.py:100
msgid "End date"
msgstr "Date de fin"
@ -136,11 +140,11 @@ msgid "Results among rooms:"
msgstr "Résultats parmi les chambres :"
#: templates/search/index.html:61
msgid "Results among ports"
msgid "Results among ports:"
msgstr "Résultats parmi les ports :"
#: templates/search/index.html:65
msgid "Results among switches"
msgid "Results among switches:"
msgstr "Résultats parmi les commutateurs réseau :"
#: templates/search/index.html:69

View file

@ -1,4 +1,4 @@
{% extends "search/sidebar.html" %}
{% extends 'search/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -31,39 +31,39 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% block content %}
{% if users %}
<h2>{% trans "Results among users:" %}</h2>
{% include "users/aff_users.html" with users_list=users %}
{% include 'users/aff_users.html' with users_list=users %}
{% endif%}
{% if clubs %}
<h2>{% trans "Results among clubs:" %}</h2>
{% include "users/aff_clubs.html" with clubs_list=clubs %}
{% include 'users/aff_clubs.html' with clubs_list=clubs %}
{% endif%}
{% if machines %}
<h2>{% trans "Results among machines:" %}</h2>
{% include "machines/aff_machines.html" with machines_list=machines %}
{% include 'machines/aff_machines.html' with machines_list=machines %}
{% endif %}
{% if factures %}
<h2>{% trans "Results among invoices:" %}</h2>
{% include "cotisations/aff_cotisations.html" with facture_list=factures %}
{% include 'cotisations/aff_cotisations.html' with facture_list=factures %}
{% endif %}
{% if whitelists %}
<h2>{% trans "Results among whitelists:" %}</h2>
{% include "users/aff_whitelists.html" with white_list=whitelists %}
{% include 'users/aff_whitelists.html' with white_list=whitelists %}
{% endif %}
{% if bans %}
<h2>{% trans "Results among bans:" %}</h2>
{% include "users/aff_bans.html" with ban_list=bans %}
{% include 'users/aff_bans.html' with ban_list=bans %}
{% endif %}
{% if rooms %}
<h2>{% trans "Results among rooms:" %}</h2>
{% include "topologie/aff_chambres.html" with room_list=rooms %}
{% include 'topologie/aff_chambres.html' with room_list=rooms %}
{% endif %}
{% if ports %}
<h2>{% trans "Results among ports" %}</h2>
{% include "topologie/aff_port.html" with port_list=ports search=True %}
<h2>{% trans "Results among ports:" %}</h2>
{% include 'topologie/aff_port.html' with port_list=ports search=True %}
{% endif %}
{% if switches %}
<h2>{% trans "Results among switches" %}</h2>
{% include "topologie/aff_switch.html" with switch_list=switches %}
<h2>{% trans "Results among switches:" %}</h2>
{% include 'topologie/aff_switch.html' with switch_list=switches %}
{% endif %}
{% if not users and not machines and not factures and not whitelists and not bans and not rooms and not ports and not switches %}
<h3>{% trans "No result" %}</h3>

View file

@ -1,4 +1,4 @@
{% extends "search/sidebar.html" %}
{% extends 'search/sidebar.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -34,10 +34,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<form class="form">
{% bootstrap_field search_form.q %}
{% if search_form.u %}
{% include "buttons/multiple_checkbox_alt.html" with field=search_form.u %}
{% include 'buttons/multiple_checkbox_alt.html' with field=search_form.u %}
{% endif %}
{% if search_form.a %}
{% include "buttons/multiple_checkbox_alt.html" with field=search_form.a %}
{% include 'buttons/multiple_checkbox_alt.html' with field=search_form.a %}
{% endif %}
{% if search_form.s %}
{% bootstrap_field search_form.s %}

View file

@ -1,4 +1,4 @@
{% extends "base.html" %}
{% extends 'base.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
@ -26,11 +26,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load i18n %}
{% block sidebar %}
<a class="list-group-item list-group-item-warning" href="{% url "search:search" %}">
<a class="list-group-item list-group-item-warning" href="{% url 'search:search' %}">
<i class="fa fa-search"></i>
{% trans "Simple search" %}
</a>
<a class="list-group-item list-group-item-warning" href="{% url "search:searchp" %}">
<a class="list-group-item list-group-item-warning" href="{% url 'search:searchp' %}">
<i class="fa fa-search-plus"></i>
{% trans "Advanced search" %}
</a>

View file

@ -96,14 +96,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-sitemap"></i> {% trans "Topology" %}<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{% url "topologie:index" %}"><i class="fa fa-microchip"></i> {% trans "Switches" %}</a></li>
<li><a href="{% url "topologie:index-ap" %}"><i class="fa fa-wifi"></i> {% trans "Access points" %}</a></li>
<li><a href="{% url "topologie:index-room" %}"><i class="fa fa-home"></i> {% trans "Rooms" %}</a></li>
<li><a href="{% url 'topologie:index' %}"><i class="fa fa-microchip"></i> {% trans "Switches" %}</a></li>
<li><a href="{% url 'topologie:index-ap' %}"><i class="fa fa-wifi"></i> {% trans "Access points" %}</a></li>
<li><a href="{% url 'topologie:index-room' %}"><i class="fa fa-home"></i> {% trans "Rooms" %}</a></li>
</ul>
</li>
{% acl_end %}
{% can_view_app logs %}
<li><a href="{% url "logs:index" %}"><i class="fa fa-area-chart"></i> {% trans "Statistics" %}</a></li>
<li><a href="{% url 'logs:index' %}"><i class="fa fa-area-chart"></i> {% trans "Statistics" %}</a></li>
{% acl_end %}
{% can_view_app preferences %}
<li>
@ -137,12 +137,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% else %}
{% can_view_any_app users machines cotisations %}
<li>
<form action="{% url "search:search"%}" class="navbar-form" role="search">
<form action="{% url 'search:search' %}" class="navbar-form" role="search">
<div class="input-group">
<input type="text" class="form-control" placeholder="{% trans "Search" %}" name="q" id="search-term" {% if search_term %}value="{{ search_term }}"{% endif %}>
<div class="input-group-btn">
<button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button>
<a href="{% url "search:searchp" %}" class="btn btn-default" role="button"><i class="fa fa-plus"></i></a>
<a href="{% url 'search:searchp' %}" class="btn btn-default" role="button"><i class="fa fa-plus"></i></a>
</div>
</div>
</form>
@ -153,7 +153,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-user-circle"></i> {{ request.user.pseudo|slice:":15" }} <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{% url "users:mon-profil" %}"><i class="fa fa-user"></i> {% trans "My profile" %}</a></li>
<li><a href="{% url 'users:mon-profil' %}"><i class="fa fa-user"></i> {% trans "My profile" %}</a></li>
<li><a id="toggle_login" href="{% url 'logout' %}"><i class="fa fa-sign-out"></i> {% trans "Log out" %}</a></li>
</ul>
</li>
@ -200,7 +200,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th scope="row">{% trans "Internet access" %}</th>
<td class="text-right">
{% if request_user.has_access %}
<i class="text-success">{% blocktrans with request.user.end_access|date:"d b Y" as date %}Until {{ date }}{% endblocktrans %}</i>
<i class="text-success">{% blocktrans with end_access_date=request.user.end_access|date:"d b Y" %}Until {{ end_access_date }}{% endblocktrans %}</i>
{% else %}
<i class="text-danger">{% trans "Disabled" %}</i>
{% endif %}
@ -210,15 +210,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th scope="row">{% trans "Membership" %}</th>
<td class="text-right">
{% if request_user.is_adherent %}
<i class="text-success">{% blocktrans with request_user.end_adhesion|date:"d b Y" as date %}Until {{ date }}{% endblocktrans %}</i>
<i class="text-success">{% blocktrans with end_adhesion_date=request_user.end_adhesion|date:"d b Y" %}Until {{ end_adhesion_date }}{% endblocktrans %}</i>
{% else %}
<i class="text-danger">{% trans "Not a member" %}</i>
<i class="text-danger">{% trans "Non member" %}</i>
{% endif %}
</td>
</tr>
</table>
<div class="list-group">
<a class="list-group-item list-group-item-info" role="button"href="{% url "users:mon-profil" %}">
<a class="list-group-item list-group-item-info" role="button"href="{% url 'users:mon-profil' %}">
<i class="fa fa-user-circle"></i>
{% trans "View my profile" %}
</a>
@ -236,10 +236,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</div>
<ul class="list-group">
{% for interface in interfaces|slice:":5" %}
<div class="list-group-item">{{interface}}</div>
<div class="list-group-item">{{ interface }}</div>
{% endfor %}
{% if interfaces|length > 5 %}
<a class="list-group-item list-group-item-info" role="button" href="{% url "users:mon-profil" %}">
<a class="list-group-item list-group-item-info" role="button" href="{% url 'users:mon-profil' %}">
<i class="fa fa-plus"></i>
{% trans "View my machines" %}
</a>

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-08-15 16:10+0200\n"
"POT-Creation-Date: 2019-01-08 23:59+0100\n"
"PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -38,116 +38,121 @@ msgstr "Site de gestion de réseau soutenu par FedeRez."
msgid "Home"
msgstr "Accueil"
#: base.html:81
#: base.html:80
msgid "Users"
msgstr "Utilisateurs"
#: base.html:84
#: base.html:83
msgid "Manage the users"
msgstr "Gérer les utilisateurs"
#: base.html:85
#: base.html:84
msgid "Manage the clubs"
msgstr "Gérer les clubs"
#: base.html:88
#: base.html:87
msgid "Manage the machines"
msgstr "Gérer les machines"
#: base.html:91
#: base.html:90
msgid "Manage the subscriptions"
msgstr "Gérer les cotisations"
#: base.html:98
#: base.html:97
msgid "Topology"
msgstr "Topologie"
#: base.html:100
#: base.html:99
msgid "Switches"
msgstr "Commutateurs réseau"
#: base.html:101
#: base.html:100
msgid "Access points"
msgstr "Points d'accès sans fil"
#: base.html:102
#: base.html:101
msgid "Rooms"
msgstr "Chambres"
#: base.html:107
#: base.html:106
msgid "Statistics"
msgstr "Statistiques"
#: base.html:112
#: base.html:111
msgid "Administration"
msgstr "Administration"
#: base.html:112
#: base.html:118
msgid "More information"
msgstr "Plus d'informations"
#: base.html:114
#: base.html:120
msgid "About"
msgstr "À propos"
#: base.html:122
#: base.html:121
msgid "Contact"
msgstr "Contact"
#: base.html:129
#: base.html:128
msgid "Sign up"
msgstr "S'enregistrer"
msgstr "S'inscrire"
#: base.html:135 registration/login.html:30 registration/login.html:50
#: base.html:134 registration/login.html:29 registration/login.html:36
msgid "Log in"
msgstr "Se connecter"
#: base.html:143
#: base.html:142
msgid "Search"
msgstr "Rechercher"
#: base.html:157
#: base.html:156
msgid "My profile"
msgstr "Mon profil"
#: base.html:158
#: base.html:157
msgid "Log out"
msgstr "Se déconnecter"
#: base.html:194
#: base.html:192
msgid "Username"
msgstr "Pseudo"
#: base.html:198
#: base.html:196
msgid "Room"
msgstr "Chambre"
#: base.html:202
#: base.html:200
msgid "Internet access"
msgstr "Accès Internet"
#: base.html:205 base.html:215
#: base.html:203
#, python-format
msgid "Until %(date)s"
msgstr "Jusqu'au %(date)s"
msgid "Until %(end_access_date)s"
msgstr "Jusqu'au %(end_access_date)s"
#: base.html:207
#: base.html:205
msgid "Disabled"
msgstr "Désactivé"
#: base.html:212
#: base.html:210
msgid "Membership"
msgstr "Adhésion"
#: base.html:217
msgid "Not a member"
#: base.html:213
#, python-format
msgid "Until %(end_adhesion_date)s"
msgstr "Jusqu'au %(end_adhesion_date)s"
#: base.html:215
msgid "Non member"
msgstr "Non adhérent"
#: base.html:225
#: base.html:223
msgid "View my profile"
msgstr "Voir mon profil"
#: base.html:229
#: base.html:228
msgid "You are not logged in."
msgstr "Vous n'êtes pas connecté."
@ -180,11 +185,11 @@ msgstr "À propos de ce site"
#: base.html:267
msgid ""
"This software is under the terms of the "
"<a href=\"http://www.gnu.org/licenses/gpl-2.0.txt\" target=\"_blank\" rel=\"nofollow\">GPLv2</a> License."
"This software is under the terms of the <a href=\"http://www.gnu.org/"
"licenses/gpl-2.0.txt\" target=\"_blank\" rel=\"nofollow\">GPLv2</a> License."
msgstr ""
"Ce logiciel est sous les termes de la licence "
"<a href=\"http://www.gnu.org/licenses/gpl-2.0.txt\" target=\"_blank\" rel=\"nofollow\">GPLv2</a>."
"Ce logiciel est sous les termes de la licence <a href=\"http://www.gnu.org/"
"licenses/gpl-2.0.txt\" target=\"_blank\" rel=\"nofollow\">GPLv2</a>."
#: buttons/add.html:27
msgid "Add"
@ -293,14 +298,22 @@ msgstr "Si vous n'avez aucune idée de ce que vous avez fait :"
msgid "Go back to a safe page"
msgstr "Retourner à une page sécurisée"
#: registration/login.html:35
msgid "Your username and password didn't match. Please try again."
msgstr "Vos identifiants sont incorrects. Veuillez réessayer."
#: pagination.html:34
msgid "First"
msgstr "Première page"
#: registration/login.html:43
msgid "Please log in to see this page."
msgstr "Veuillez vous connecter pour voir cette page."
#: pagination.html:40
msgid "Previous"
msgstr "Précédent"
#: registration/login.html:53
#: pagination.html:60
msgid "Next"
msgstr "Suivant"
#: pagination.html:66
msgid "Last"
msgstr "Dernière page"
#: registration/login.html:40
msgid "Forgotten password?"
msgstr "Mot de passe oublié ?"

View file

@ -1,4 +1,4 @@
{% extends "base.html" %}
{% extends 'base.html' %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en

View file

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-11 19:49+0200\n"
"POT-Creation-Date: 2019-01-09 00:01+0100\n"
"PO-Revision-Date: 2018-06-25 14:53+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n"
@ -34,11 +34,11 @@ msgstr ""
msgid "You don't have the right to view this application."
msgstr "Vous n'avez pas le droit de voir cette application."
#: forms.py:179
#: forms.py:181
msgid "Start:"
msgstr "Début :"
#: forms.py:180
#: forms.py:182
msgid "End:"
msgstr "Fin :"
@ -79,119 +79,204 @@ msgid "Number of ports"
msgstr "Nombre de ports"
#: models.py:228 templates/topologie/aff_switch.html:48
#: templates/topologie/index_p.html:38 views.py:826
#: templates/topologie/index_p.html:38 views.py:843
msgid "Switch model"
msgstr "Modèle de commutateur réseau"
#: models.py:258
#: models.py:241
msgid "RADIUS key of the switch"
msgstr "Clé RADIUS du commutateur réseau"
#: models.py:248
msgid "Management credentials for the switch"
msgstr "Identifiants de gestion du commutateur réseau"
#: models.py:252
msgid "Automatic provision for the switch"
msgstr "Provision automatique pour le commutateur réseau"
#: models.py:259
msgid "Can view a switch object"
msgstr "Peut voir un objet commutateur réseau"
#: models.py:260
#: models.py:261
msgid "switch"
msgstr "commutateur réseau"
#: models.py:261
#: models.py:262
msgid "switches"
msgstr "commutateurs réseau"
#: models.py:272
#: models.py:273
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."
#: models.py:277
#: models.py:278
msgid "The stack member ID can't be void."
msgstr "L'ID de membre dans la pile ne peut-être vide."
#: models.py:293
#: models.py:286
msgid "The end port is less than the start port."
msgstr "Le port de fin est inférieur au port de début."
#: models.py:296
#: models.py:293
msgid "This switch can't have that many ports."
msgstr "Ce commutateur réseau ne peut pas avoir autant de ports."
#: models.py:306
#: models.py:295
msgid "Creation"
msgstr "Création"
#: models.py:308
msgid "Creation of an existing port."
msgstr "Création d'un port existant."
#: models.py:406
msgid "The switch model is modular."
msgstr "Le modèle de commutateur réseau est modulaire."
#: models.py:408
#: models.py:410
msgid "The switch is considered as a module."
msgstr "Le commutateur réseau est considéré comme un module."
#: models.py:415
msgid "Can view a switch model object"
msgstr "Peut voir un objet modèle de commutateur réseau"
#: models.py:410
#: models.py:417
msgid "switch model"
msgstr "modèle de commutateur réseau"
#: models.py:411
#: models.py:418
msgid "switch models"
msgstr "modèles de commutateur réseau"
#: models.py:424
#: models.py:431
msgid "Reference of a module"
msgstr "Référence d'un module"
#: models.py:432
msgid "Module reference"
msgstr "Référence de module"
#: models.py:438 models.py:439 templates/topologie/aff_modules.html:37
msgid "Comment"
msgstr "Commentaire"
#: models.py:444
msgid "Can view a switch module object"
msgstr "Peut voir un objet module de commutateur réseau"
#: models.py:446
msgid "switch module"
msgstr "module de commutateur réseau"
#: models.py:447
msgid "switch modules"
msgstr "modules de commutateur réseau"
#: models.py:460
msgid "Slot on switch"
msgstr "Emplacement sur le commutateur réseau"
#: models.py:461 templates/topologie/aff_modules.html:48
#: templates/topologie/aff_modules.html:82
msgid "Slot"
msgstr "Emplacement"
#: models.py:466
msgid "Can view a link between switch and module object"
msgstr "Peut voir un objet lien entre commutateur réseau et module"
#: models.py:469
msgid "link between switch and module"
msgstr "lien entre commutateur réseau et module"
#: models.py:470
msgid "links between switch and module"
msgstr "liens entre commutateur réseau et module"
#: models.py:474
msgid "On slot "
msgstr "Sur l'emplacement "
#: models.py:474
msgid " of "
msgstr " de "
#: models.py:484
msgid "Can view a switch constructor object"
msgstr "Peut voir un objet constructeur de commutateur réseau"
#: models.py:427
#: models.py:487
msgid "switch constructor"
msgstr "constructeur de commutateur réseau"
#: models.py:450
#: models.py:510
msgid "Can view a switch bay object"
msgstr "Peut voir un objet baie de brassage"
#: models.py:452
#: models.py:512
msgid "switch bay"
msgstr "baie de brassage"
#: models.py:453
#: models.py:513
msgid "switch bays"
msgstr "baies de brassage"
#: models.py:466
#: models.py:526
msgid "Can view a building object"
msgstr "Peut voir un objet bâtiment"
#: models.py:468
#: models.py:528
msgid "building"
msgstr "bâtiment"
#: models.py:469
#: models.py:529
msgid "buildings"
msgstr "bâtiments"
#: models.py:525
#: models.py:588 models.py:589
msgid "Port state Active"
msgstr "État du port Actif"
#: models.py:532
#: models.py:596
msgid "Can view a port object"
msgstr "Peut voir un objet port"
#: models.py:534
#: models.py:598
msgid "port"
msgstr "port"
#: models.py:535
#: models.py:599
msgid "ports"
msgstr "ports"
#: models.py:614
#: models.py:605
msgid "Uplink: "
msgstr "Liaison montante : "
#: models.py:607
msgid "Machine: "
msgstr "Machine : "
#: models.py:609
msgid "Room: "
msgstr "Chambre : "
#: models.py:611
msgid "Unknown"
msgstr "Inconnu"
#: models.py:678
msgid "The port can't exist, its number is too great."
msgstr "Le port ne peut pas exister, son numéro est trop grand."
#: models.py:620
#: models.py:684
msgid "Room, interface and related port are mutually exclusive."
msgstr "Chambre, interface et port relié sont mutuellement exclusifs."
#: models.py:623
#: models.py:687
msgid "A port can't be related to itself."
msgstr "Un port ne peut être relié à lui-même."
#: models.py:627
#: models.py:691
msgid ""
"The related port is already used, please clear it before creating the "
"relation."
@ -199,124 +284,146 @@ msgstr ""
"Le port relié est déjà utilisé, veuillez le modifier avant de créer la "
"relation."
#: models.py:648
#: models.py:712
msgid "Can view a room object"
msgstr "Peut voir un objet chambre"
#: models.py:650
#: models.py:714
msgid "room"
msgstr "chambre"
#: models.py:651
#: models.py:715
msgid "rooms"
msgstr "chambres"
#: models.py:685 templates/topologie/aff_port_profile.html:37
#: models.py:726
msgid "MAC-RADIUS"
msgstr "MAC-RADIUS"
#: models.py:743 templates/topologie/aff_chambres.html:36
#: templates/topologie/aff_port.html:38 views.py:784
msgid "Room"
msgstr "Chambre"
#: models.py:744 templates/topologie/aff_ap.html:36
msgid "Access point"
msgstr "Point d'accès sans fil"
#: models.py:745
msgid "Uplink"
msgstr "Liaison montante"
#: models.py:746
msgid "Organisation machine"
msgstr "Machine d'association"
#: models.py:747
msgid "Nothing"
msgstr "Rien"
#: models.py:749 templates/topologie/aff_port_profile.html:37
#: templates/topologie/aff_vlanoptions.html:34
msgid "Name"
msgstr "Nom"
#: models.py:692
#: models.py:756
msgid "Default profile"
msgstr "Profil par défaut"
#: models.py:700
#: models.py:764
msgid "VLAN untagged"
msgstr "VLAN untagged"
#: models.py:706
#: models.py:770
msgid "VLAN(s) tagged"
msgstr "VLAN(s) tagged"
#: models.py:711
#: models.py:775
msgid "Type of RADIUS authentication : inactive, MAC-address or 802.1X"
msgstr "Type d'authentification RADIUS : inactive, MAC-address ou 802.1X"
#: models.py:713
#: models.py:777
msgid "RADIUS type"
msgstr "Type de RADIUS"
#: models.py:719
#: models.py:783
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"
#: models.py:721
#: models.py:785
msgid "RADIUS mode"
msgstr "Mode de RADIUS"
#: models.py:727
#: models.py:791
msgid "Port speed limit"
msgstr "Limite de vitesse du port"
#: models.py:732
#: models.py:796
msgid "Limit of MAC-address on this port"
msgstr "Limite de MAC-address sur ce port"
#: models.py:733
#: models.py:797
msgid "MAC limit"
msgstr "Limite MAC"
#: models.py:737
#: models.py:801
msgid "Flow control"
msgstr "Contrôle du flux"
#: models.py:741
#: models.py:805
msgid "Protect against rogue DHCP"
msgstr "Protège contre les DHCP pirates"
#: models.py:742
#: models.py:806 templates/topologie/aff_vlanoptions.html:36
msgid "DHCP snooping"
msgstr "DHCP snooping"
#: models.py:746
#: models.py:810
msgid "Protect against rogue DHCPv6"
msgstr "Protège contre les DHCPv6 pirates"
#: models.py:747
#: models.py:811 templates/topologie/aff_vlanoptions.html:37
msgid "DHCPv6 snooping"
msgstr "DHCPv6 snooping"
#: models.py:751
#: models.py:815
msgid "Check if IP adress is DHCP assigned"
msgstr "Vérifie si l'adresse IP est attribuée par DHCP"
#: models.py:752
#: models.py:816
msgid "ARP protection"
msgstr "Protection ARP"
#: models.py:756
#: models.py:820
msgid "Protect against rogue RA"
msgstr "Protège contre les RA pirates"
#: models.py:757
#: models.py:821
msgid "RA guard"
msgstr "RA guard"
#: models.py:761
#: models.py:825
msgid "Protect against loop"
msgstr "Protège contre un boucle"
msgstr "Protège contre une boucle"
#: models.py:762
#: models.py:826
msgid "Loop protection"
msgstr "Protection contre une boucle"
#: models.py:767
#: models.py:831
msgid "Can view a port profile object"
msgstr "Peut voir un objet profil de port"
#: models.py:769
#: models.py:833
msgid "port profile"
msgstr "profil de port"
#: models.py:770
#: models.py:834
msgid "port profiles"
msgstr "profils de port"
#: templates/topologie/aff_ap.html:36
msgid "Access point"
msgstr "Point d'accès sans fil"
#: templates/topologie/aff_ap.html:38
msgid "MAC address"
msgstr "Adresse MAC"
@ -336,44 +443,24 @@ msgstr "Détails"
msgid "Location"
msgstr "Emplacement"
#: templates/topologie/aff_ap.html:56 templates/topologie/aff_building.html:46
#: templates/topologie/aff_chambres.html:48
#: templates/topologie/aff_constructor_switch.html:46
#: templates/topologie/aff_model_switch.html:61
#: templates/topologie/aff_port.html:99 templates/topologie/aff_stacks.html:55
#: templates/topologie/aff_switch_bay.html:59
#: templates/topologie/edit_stack_sw.html:44 views.py:380 views.py:434
#: views.py:745 views.py:804 views.py:859 views.py:914 views.py:973
#: views.py:1028
msgid "Edit"
msgstr "Modifier"
#: templates/topologie/aff_ap.html:62 templates/topologie/aff_building.html:52
#: templates/topologie/aff_chambres.html:54
#: templates/topologie/aff_constructor_switch.html:52
#: templates/topologie/aff_model_switch.html:67
#: templates/topologie/aff_port.html:105 templates/topologie/aff_stacks.html:61
#: templates/topologie/aff_switch_bay.html:65
#: templates/topologie/edit_stack_sw.html:50
msgid "Delete"
msgstr "Supprimer"
#: templates/topologie/aff_building.html:36
#: templates/topologie/aff_switch_bay.html:38 views.py:936
#: templates/topologie/aff_switch_bay.html:38 views.py:953
msgid "Building"
msgstr "Bâtiment"
#: templates/topologie/aff_chambres.html:36
#: templates/topologie/aff_port.html:38 views.py:767
msgid "Room"
msgstr "Chambre"
#: templates/topologie/aff_building.html:38
#: templates/topologie/index_ap.html:33 templates/topologie/sidebar.html:47
msgid "Access points"
msgstr "Points d'accès sans fil"
#: templates/topologie/aff_constructor_switch.html:36
#: templates/topologie/aff_model_switch.html:40 views.py:996
#: templates/topologie/aff_model_switch.html:40 views.py:1013
msgid "Switch constructor"
msgstr "Constructeur de commutateur réseau"
#: templates/topologie/aff_model_switch.html:36
#: templates/topologie/aff_modules.html:36
#: templates/topologie/aff_modules.html:81
msgid "Reference"
msgstr "Référence"
@ -382,20 +469,27 @@ msgid "Commercial name"
msgstr "Nom commercial"
#: templates/topologie/aff_model_switch.html:42
#: templates/topologie/index.html:66 templates/topologie/sidebar.html:35
#: templates/topologie/aff_modules.html:38 templates/topologie/index.html:66
#: templates/topologie/sidebar.html:35
msgid "Switches"
msgstr "Commutateurs réseau"
#: templates/topologie/aff_modules.html:48
msgid "of"
msgstr "de"
#: templates/topologie/aff_modules.html:76
msgid "All modular switchs"
msgstr "Tous les commutateurs réseau modulaires"
#: templates/topologie/aff_modules.html:80 templates/topologie/aff_port.html:36
msgid "Switch"
msgstr "Commutateur réseau"
#: templates/topologie/aff_port.html:33
msgid "Port"
msgstr "Port"
#: templates/topologie/aff_port.html:36
#, fuzzy
#| msgid "Switch:"
msgid "Switch"
msgstr "Commutateur réseau :"
#: templates/topologie/aff_port.html:40
msgid "Interface"
msgstr "Interface"
@ -408,7 +502,7 @@ msgstr "Port relié"
msgid "Port state"
msgstr "État du port"
#: templates/topologie/aff_port.html:45 views.py:1048
#: templates/topologie/aff_port.html:45 views.py:1065
msgid "Port profile"
msgstr "Profil de port"
@ -464,6 +558,11 @@ msgstr "Type de RADIUS : "
msgid "RADIUS mode: "
msgstr "Mode de RADIUS : "
#: templates/topologie/aff_repr_switch.html:67
#: templates/topologie/aff_repr_switch.html:110
msgid "Empty"
msgstr "Vide"
#: templates/topologie/aff_stacks.html:32
#: templates/topologie/aff_switch.html:45
#: templates/topologie/edit_stack_sw.html:32
@ -472,6 +571,7 @@ msgid "Stack"
msgstr "Pile"
#: templates/topologie/aff_stacks.html:34
#: templates/topologie/aff_vlanoptions.html:33
msgid "ID"
msgstr "ID"
@ -485,7 +585,7 @@ msgstr "Nom DNS"
#: templates/topologie/aff_switch.html:41
#: templates/topologie/aff_switch_bay.html:36
#: templates/topologie/index_p.html:37 views.py:881
#: templates/topologie/index_p.html:37 views.py:898
msgid "Switch bay"
msgstr "Baie de brassage"
@ -510,10 +610,22 @@ msgstr "Informations"
msgid "Switches of the bay"
msgstr "Commutateurs réseau de la baie"
#: templates/topologie/aff_vlanoptions.html:35
msgid "ARP protect"
msgstr "Protection ARP"
#: templates/topologie/aff_vlanoptions.html:38
msgid "IGMP"
msgstr "IGMP"
#: templates/topologie/aff_vlanoptions.html:39
msgid "MLD"
msgstr "MLD"
#: templates/topologie/delete.html:29 templates/topologie/index.html:30
#: templates/topologie/index_ap.html:30
#: templates/topologie/index_model_switch.html:30
#: templates/topologie/index_p.html:30
#: templates/topologie/index_module.html:30 templates/topologie/index_p.html:30
#: templates/topologie/index_physical_grouping.html:30
#: templates/topologie/index_portprofile.html:29
#: templates/topologie/index_room.html:30 templates/topologie/switch.html:30
@ -542,10 +654,6 @@ msgstr "Topologie des commutateurs réseau"
msgid " Add a switch"
msgstr " Ajouter un commutateur réseau"
#: templates/topologie/index_ap.html:33 templates/topologie/sidebar.html:43
msgid "Access points"
msgstr "Points d'accès sans fil"
#: templates/topologie/index_ap.html:35
msgid " Add an access point"
msgstr " Ajouter un point d'accès sans fil"
@ -566,22 +674,18 @@ msgstr "Constructeurs de commutateur réseau"
msgid " Add a switch constructor"
msgstr " Ajouter un constructeur de commutateur réseau"
#: templates/topologie/index_module.html:33 templates/topologie/sidebar.html:39
msgid "Switch modules"
msgstr "Modules de commutateur réseau"
#: templates/topologie/index_module.html:35
msgid " Add a module"
msgstr " Ajouter un module"
#: templates/topologie/index_p.html:33
msgid "Switch:"
msgstr "Commutateur réseau :"
#: templates/topologie/index_p.html:49
msgid " Edit"
msgstr " Modifier"
#: templates/topologie/index_p.html:51
msgid " Add a port"
msgstr " Ajouter un port"
#: templates/topologie/index_p.html:52
msgid " Add ports"
msgstr " Ajouter des ports"
#: templates/topologie/index_physical_grouping.html:33
msgid "Stacks"
msgstr "Piles"
@ -607,7 +711,7 @@ msgid " Add a building"
msgstr " Ajouter un bâtiment"
#: templates/topologie/index_portprofile.html:34
#: templates/topologie/sidebar.html:39
#: templates/topologie/sidebar.html:43
msgid "Port profiles"
msgstr "Profils de port"
@ -616,8 +720,8 @@ msgid " Add a port profile"
msgstr " Ajouter un profil de port"
#: templates/topologie/index_portprofile.html:42
msgid "Sécurité par vlan"
msgstr ""
msgid "VLAN security"
msgstr "Sécurité de VLAN"
#: templates/topologie/index_room.html:33
msgid "Rooms"
@ -631,11 +735,11 @@ msgstr " Ajouter une chambre"
msgid "Rooms and premises"
msgstr "Chambres et locaux"
#: templates/topologie/sidebar.html:47
#: templates/topologie/sidebar.html:51
msgid "Physical grouping"
msgstr "Groupements physiques"
#: templates/topologie/sidebar.html:51
#: templates/topologie/sidebar.html:55
msgid "Switch models and constructors"
msgstr "Modèles et constructeurs de commutateur réseau"
@ -647,7 +751,8 @@ msgstr " Aller à la liste des ports"
msgid "Specific settings for the switch"
msgstr "Réglages spécifiques pour le commutateur réseau"
#: templates/topologie/switch.html:46 views.py:418 views.py:1010
#: templates/topologie/switch.html:46 views.py:441 views.py:745 views.py:800
#: views.py:859 views.py:914 views.py:969 views.py:1027 views.py:1081
msgid "Create"
msgstr "Créer"
@ -665,51 +770,60 @@ msgstr "Réglages généraux pour la machine liée à l'objet %(device)s"
msgid "Create or edit"
msgstr "Créer ou modifier"
#: views.py:340
#: views.py:347
msgid "The VLAN was edited."
msgstr "Le VLAN a été modifié."
#: views.py:350 views.py:403 views.py:457 views.py:762 views.py:821
#: views.py:876 views.py:931 views.py:990 views.py:1045 views.py:1098
#: views.py:1152
msgid "Edit"
msgstr "Modifier"
#: views.py:363 views.py:554
msgid "Nonexistent switch."
msgstr "Commutateur réseau inexistant."
#: views.py:348
#: views.py:371
msgid "The port was added."
msgstr "Le port a été ajouté."
#: views.py:350
#: views.py:373
msgid "The port already exists."
msgstr "Le port existe déjà."
#: views.py:356 views.py:728 views.py:783 views.py:842 views.py:897
#: views.py:952
#: views.py:379 views.py:1135
msgid "Add"
msgstr "Ajouter"
#: views.py:371
#: views.py:394
msgid "The port was edited."
msgstr "Le port a été modifié."
#: views.py:394
#: views.py:417
msgid "The port was deleted."
msgstr "Le port a été supprimé."
#: views.py:398
#: views.py:421
#, python-format
msgid "The port %s is used by another object, impossible to delete it."
msgstr "Le port %s est utilisé par un autre objet, impossible de le supprimer."
#: views.py:415
#: views.py:438
msgid "The stack was created."
msgstr "La pile a été créée."
#: views.py:447
#: views.py:470
msgid "The stack was deleted."
msgstr "La pile a été supprimée."
#: views.py:451
#: views.py:474
#, python-format
msgid "The stack %s is used by another object, impossible to deleted it."
msgstr ""
"La pile %s est utilisée par un autre objet, impossible de la supprimer."
#: views.py:493 views.py:634 views.py:689
#: views.py:516 views.py:651 views.py:706
msgid ""
"The organisation's user doesn't exist yet, please create or link it in the "
"preferences."
@ -717,117 +831,113 @@ msgstr ""
"L'utilisateur de l'association n'existe pas encore, veuillez le créer ou le "
"relier dans les préférences."
#: views.py:508
#: views.py:531
msgid "The switch was created."
msgstr "Le commutateur réseau a été créé."
#: views.py:531
msgid "Nonexistent switch"
msgstr "Commutateur réseau inexistant."
#: views.py:551
#: views.py:568
msgid "The ports were created."
msgstr "Les ports ont été créés."
#: views.py:595
#: views.py:612
msgid "The switch was edited."
msgstr "Le commutateur réseau a été modifié."
#: views.py:649
#: views.py:666
msgid "The access point was created."
msgstr "Le point d'accès sans fil a été créé."
#: views.py:702
#: views.py:719
msgid "The access point was edited."
msgstr "Le point d'accès sans fil a été modifié."
#: views.py:725
#: views.py:742
msgid "The room was created."
msgstr "La chambre a été créée."
#: views.py:742
#: views.py:759
msgid "The room was edited."
msgstr "La chambre a été modifiée."
#: views.py:758
#: views.py:775
msgid "The room was deleted."
msgstr "La chambre a été supprimée."
#: views.py:762
#: views.py:779
#, python-format
msgid "The room %s is used by another object, impossible to deleted it."
msgstr ""
"La chambre %s est utilisée par un autre objet, impossible de la supprimer."
#: views.py:780
msgid "The swich model was created."
#: views.py:797
msgid "The switch model was created."
msgstr "Le modèle de commutateur réseau a été créé."
#: views.py:801
#: views.py:818
msgid "The switch model was edited."
msgstr "Le modèle de commutateur réseau a été modifié."
#: views.py:817
#: views.py:834
msgid "The switch model was deleted."
msgstr "Le modèle de commutateur réseau a été supprimé."
#: views.py:821
#: views.py:838
#, python-format
msgid "The switch model %s is used by another object, impossible to delete it."
msgstr ""
"Le modèle de commutateur réseau %s est utilisé par un autre objet, "
"impossible de le supprimer."
#: views.py:839
#: views.py:856
msgid "The switch bay was created."
msgstr "La baie de brassage a été créée."
#: views.py:856
#: views.py:873
msgid "The switch bay was edited."
msgstr "La baie de brassage a été modifiée."
#: views.py:872
#: views.py:889
msgid "The switch bay was deleted."
msgstr "La baie de brassage a été supprimée."
#: views.py:876
#: views.py:893
#, python-format
msgid "The switch bay %s is used by another object, impossible to delete it."
msgstr ""
"La baie de brassage %s est utilisée par un autre objet, impossible de la "
"supprimer."
#: views.py:894
#: views.py:911
msgid "The building was created."
msgstr "Le bâtiment a été créé."
#: views.py:911
#: views.py:928
msgid "The building was edited."
msgstr "Le bâtiment a été modifié."
#: views.py:927
#: views.py:944
msgid "The building was deleted."
msgstr "Le bâtiment a été supprimé."
#: views.py:931
#: views.py:948
#, python-format
msgid "The building %s is used by another object, impossible to delete it."
msgstr ""
"Le bâtiment %s est utilisé par un autre objet, impossible de le supprimer."
#: views.py:949
#: views.py:966
msgid "The switch constructor was created."
msgstr "Le constructeur de commutateur réseau a été créé."
#: views.py:970
#: views.py:987
msgid "The switch constructor was edited."
msgstr "Le constructeur de commutateur réseau a été modifié."
#: views.py:986
#: views.py:1003
msgid "The switch constructor was deleted."
msgstr "Le constructeur de commutateur réseau a été supprimé."
#: views.py:990
#: views.py:1007
#, python-format
msgid ""
"The switch constructor %s is used by another object, impossible to delete it."
@ -835,23 +945,49 @@ msgstr ""
"Le constructeur de commutateur réseau %s est utilisé par un autre objet, "
"impossible de le supprimer."
#: views.py:1007
#: views.py:1024
msgid "The port profile was created."
msgstr "Le profil de port a été créé."
#: views.py:1025
#: views.py:1042
msgid "The port profile was edited."
msgstr "Le profil de port a été modifié."
#: views.py:1042
#: views.py:1059
msgid "The port profile was deleted."
msgstr "Le profil de port a été supprimé."
#: views.py:1045
#: views.py:1062
msgid "Impossible to delete the port profile."
msgstr "Impossible de supprimer le profil de port."
#: views.py:1165
#: views.py:1078
msgid "The module was created."
msgstr "Le module a été créé."
#: views.py:1095 views.py:1149
msgid "The module was edited."
msgstr "Le module a été modifié."
#: views.py:1111 views.py:1165
msgid "The module was deleted."
msgstr "Le module a été supprimé."
#: views.py:1115 views.py:1169
#, python-format
msgid "The module %s is used by another object, impossible to deleted it."
msgstr ""
"Le module %s est utilisé par un autre objet, impossible de le supprimer."
#: views.py:1120 views.py:1174
msgid "Module"
msgstr "Module"
#: views.py:1132
msgid "The module was added."
msgstr "Le module a été ajouté."
#: views.py:1291
msgid ""
"The default Django template isn't used. This can lead to rendering errors. "
"Check the parameters."

View file

@ -0,0 +1,59 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2019-01-08 20:39
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('topologie', '0068_auto_20190102_1758'),
]
operations = [
migrations.AlterModelOptions(
name='moduleonswitch',
options={'permissions': (('view_moduleonswitch', 'Can view a link between switch and module object'),), 'verbose_name': 'link between switch and module', 'verbose_name_plural': 'links between switch and module'},
),
migrations.AlterModelOptions(
name='moduleswitch',
options={'permissions': (('view_moduleswitch', 'Can view a switch module object'),), 'verbose_name': 'switch module', 'verbose_name_plural': 'switch modules'},
),
migrations.AlterField(
model_name='modelswitch',
name='is_itself_module',
field=models.BooleanField(default=False, help_text='The switch is considered as a module.'),
),
migrations.AlterField(
model_name='modelswitch',
name='is_modular',
field=models.BooleanField(default=False, help_text='The switch model is modular.'),
),
migrations.AlterField(
model_name='portprofile',
name='profil_default',
field=models.CharField(blank=True, choices=[('room', 'Room'), ('access_point', 'Access point'), ('uplink', 'Uplink'), ('asso_machine', 'Organisation machine'), ('nothing', 'Nothing')], max_length=32, null=True, unique=True, verbose_name='Default profile'),
),
migrations.AlterField(
model_name='portprofile',
name='radius_type',
field=models.CharField(choices=[('NO', 'NO'), ('802.1X', '802.1X'), ('MAC-radius', 'MAC-RADIUS')], help_text='Type of RADIUS authentication : inactive, MAC-address or 802.1X', max_length=32, verbose_name='RADIUS type'),
),
migrations.AlterField(
model_name='switch',
name='automatic_provision',
field=models.BooleanField(default=False, help_text='Automatic provision for the switch'),
),
migrations.AlterField(
model_name='switch',
name='management_creds',
field=models.ForeignKey(blank=True, help_text='Management credentials for the switch', null=True, on_delete=django.db.models.deletion.PROTECT, to='preferences.SwitchManagementCred'),
),
migrations.AlterField(
model_name='switch',
name='radius_key',
field=models.ForeignKey(blank=True, help_text='RADIUS key of the switch', null=True, on_delete=django.db.models.deletion.PROTECT, to='preferences.RadiusKey'),
),
]

View file

@ -238,18 +238,18 @@ class Switch(AclMixin, Machine):
blank=True,
null=True,
on_delete=models.PROTECT,
help_text="Clef radius du switch"
help_text=_("RADIUS key of the switch")
)
management_creds = models.ForeignKey(
'preferences.SwitchManagementCred',
blank=True,
null=True,
on_delete=models.PROTECT,
help_text="Identifiant de management de ce switch"
help_text=_("Management credentials for the switch")
)
automatic_provision = models.BooleanField(
default=False,
help_text='Provision automatique de ce switch',
help_text=_("Automatic provision for the switch")
)
@ -403,11 +403,11 @@ class ModelSwitch(AclMixin, RevMixin, models.Model):
)
is_modular = models.BooleanField(
default=False,
help_text=_("Is this switch model modular"),
help_text=_("The switch model is modular."),
)
is_itself_module = models.BooleanField(
default=False,
help_text=_("Is the switch, itself, considered as a module"),
help_text=_("The switch is considered as a module."),
)
class Meta:
@ -441,9 +441,10 @@ class ModuleSwitch(AclMixin, RevMixin, models.Model):
class Meta:
permissions = (
("view_moduleswitch", _("Can view a module object")),
("view_moduleswitch", _("Can view a switch module object")),
)
verbose_name = _("Module of a switch")
verbose_name = _("switch module")
verbose_name_plural = _("switch modules")
def __str__(self):
@ -462,13 +463,15 @@ class ModuleOnSwitch(AclMixin, RevMixin, models.Model):
class Meta:
permissions = (
("view_moduleonswitch", _("Can view a moduleonswitch object")),
("view_moduleonswitch", _("Can view a link between switch and"
" module object")),
)
verbose_name = _("link between switchs and modules")
verbose_name = _("link between switch and module")
verbose_name_plural = _("links between switch and module")
unique_together = ['slot', 'switch']
def __str__(self):
return 'On slot ' + str(self.slot) + ' of ' + str(self.switch)
return _("On slot ") + str(self.slot) + _(" of ") + str(self.switch)
class ConstructorSwitch(AclMixin, RevMixin, models.Model):
@ -582,7 +585,7 @@ class Port(AclMixin, RevMixin, models.Model):
)
state = models.BooleanField(
default=True,
help_text='Port state Active',
help_text=_("Port state Active"),
verbose_name=_("Port state Active")
)
details = models.CharField(max_length=255, blank=True)
@ -599,13 +602,13 @@ class Port(AclMixin, RevMixin, models.Model):
def pretty_name(self):
"""More elaborated name for label on switch conf"""
if self.related:
return "Uplink : " + self.related.switch.short_name
return _("Uplink: ") + self.related.switch.short_name
elif self.machine_interface:
return "Machine : " + str(self.machine_interface.domain)
return _("Machine: ") + str(self.machine_interface.domain)
elif self.room:
return "Chambre : " + str(self.room)
return _("Room: ") + str(self.room)
else:
return "Inconnue"
return _("Unknown")
@cached_property
def get_port_profile(self):
@ -720,7 +723,7 @@ class PortProfile(AclMixin, RevMixin, models.Model):
TYPES = (
('NO', 'NO'),
('802.1X', '802.1X'),
('MAC-radius', 'MAC-radius'),
('MAC-radius', _("MAC-RADIUS")),
)
MODES = (
('STRICT', 'STRICT'),
@ -737,11 +740,11 @@ class PortProfile(AclMixin, RevMixin, models.Model):
('auto-100', 'auto-100'),
)
PROFIL_DEFAULT = (
('room', 'room'),
('access_point', 'access_point'),
('uplink', 'uplink'),
('asso_machine', 'asso_machine'),
('nothing', 'nothing'),
('room', _("Room")),
('access_point', _("Access point")),
('uplink', _("Uplink")),
('asso_machine', _("Organisation machine")),
('nothing', _("Nothing")),
)
name = models.CharField(max_length=255, verbose_name=_("Name"))
profil_default = models.CharField(

View file

@ -28,17 +28,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive">
{% if ap_list.paginator %}
{% include "pagination.html" with list=ap_list %}
{% include 'pagination.html' with list=ap_list %}
{% endif %}
<table class="table table-striped">
<thead>
<tr>
{% trans "Access point" as tr_ap %}
<th>{% include "buttons/sort.html" with prefix='ap' col='name' text=tr_ap %}</th>
<th>{% include 'buttons/sort.html' with prefix='ap' col='name' text=tr_ap %}</th>
{% trans "MAC address" as tr_mac %}
<th>{% include "buttons/sort.html" with prefix='ap' col='mac' text=tr_mac %}</th>
<th>{% include 'buttons/sort.html' with prefix='ap' col='mac' text=tr_mac %}</th>
{% trans "IPv4 address" as tr_ip %}
<th>{% include "buttons/sort.html" with prefix='ap' col='ip' text=tr_ip %}</th>
<th>{% include 'buttons/sort.html' with prefix='ap' col='ip' text=tr_ip %}</th>
<th>{% trans "Details" %}</th>
<th>{% trans "Location" %}</th>
<th></th>
@ -53,15 +53,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ ap.location }}</td>
<td class="text-right">
{% can_edit ap %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-ap' ap.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='topologie:edit-ap' id=ap.id %}
{% acl_end %}
{% history_button ap %}
{% can_delete ap %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'machines:del-machine' ap.id %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='machines:del-machine' id=ap.id %}
{% acl_end %}
</td>
</tr>
@ -69,7 +65,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if ap_list.paginator %}
{% include "pagination.html" with list=ap_list %}
{% include 'pagination.html' with list=ap_list %}
{% endif %}
</div>

View file

@ -27,15 +27,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load i18n %}
{% if building_list.paginator %}
{% include "pagination.html" with list=building_list %}
{% include 'pagination.html' with list=building_list %}
{% endif %}
<table class="table table-striped">
<thead>
<tr>
{% trans "Building" as tr_building %}
<th>{% include "buttons/sort.html" with prefix='building' col='name' text=tr_building %}</th>
<th>Wireless AP</th>
<th>{% include 'buttons/sort.html' with prefix='building' col='name' text=tr_building %}</th>
<th>{% trans "Access points" %}</th>
<th></th>
</tr>
</thead>
@ -45,15 +45,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{% for ap in building.all_ap_in %} {{ ap.short_name }} {% endfor %}</td>
<td class="text-right">
{% can_edit building %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-building' building.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='topologie:edit-building' id=building.id %}
{% acl_end %}
{% history_button building %}
{% can_delete building %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'topologie:del-building' building.id %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='topologie:del-building' id=building.id %}
{% acl_end %}
</td>
</tr>
@ -61,6 +57,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if building_list.paginator %}
{% include "pagination.html" with list=building_list %}
{% include 'pagination.html' with list=building_list %}
{% endif %}

View file

@ -27,14 +27,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load i18n %}
{% if room_list.paginator %}
{% include "pagination.html" with list=room_list %}
{% include 'pagination.html' with list=room_list %}
{% endif %}
<table class="table table-striped">
<thead>
<tr>
{% trans "Room" as tr_room %}
<th>{% include "buttons/sort.html" with prefix='room' col='name' text=tr_room %}</th>
<th>{% include 'buttons/sort.html' with prefix='room' col='name' text=tr_room %}</th>
<th>{% trans "Details" %}</th>
<th></th>
</tr>
@ -45,15 +45,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ room.details }}</td>
<td class="text-right">
{% can_edit room %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-room' room.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='topologie:edit-room' id=room.id %}
{% acl_end %}
{% history_button room %}
{% can_delete room %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'topologie:del-room' room.id %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='topologie:del-room' id=room.id %}
{% acl_end %}
</td>
</tr>
@ -61,6 +57,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if room_list.paginator %}
{% include "pagination.html" with list=room_list %}
{% include 'pagination.html' with list=room_list %}
{% endif %}

View file

@ -27,14 +27,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load i18n %}
{% if constructor_switch_list.paginator %}
{% include "pagination.html" with list=constructor_switch_list %}
{% include 'pagination.html' with list=constructor_switch_list %}
{% endif %}
<table class="table table-striped">
<thead>
<tr>
{% trans "Switch constructor" as tr_constructor %}
<th>{% include "buttons/sort.html" with prefix='constructor-switch' col='name' text=tr_constructor %}</th>
<th>{% include 'buttons/sort.html' with prefix='constructor-switch' col='name' text=tr_constructor %}</th>
<th></th>
</tr>
</thead>
@ -43,15 +43,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ constructor_switch }}</td>
<td class="text-right">
{% can_edit constructor_switch %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-constructor-switch' constructor_switch.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='topologie:edit-constructor-switch' id=constructor_switch.id %}
{% acl_end %}
{% history_button constructor_switch %}
{% can_delete constructor_switch %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'topologie:del-constructor-switch' constructor_switch.id %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='topologie:del-constructor-switch' id=constructor_switch.id %}
{% acl_end %}
</td>
</tr>
@ -59,6 +55,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if constructor_switch_list.paginator %}
{% include "pagination.html" with list=constructor_switch_list %}
{% include 'pagination.html' with list=constructor_switch_list %}
{% endif %}

View file

@ -27,18 +27,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load i18n %}
{% if model_switch_list.paginator %}
{% include "pagination.html" with list=model_switch_list %}
{% include 'pagination.html' with list=model_switch_list %}
{% endif %}
<table class="table table-striped">
<thead>
<tr>
{% trans "Reference" as tr_ref %}
<th>{% include "buttons/sort.html" with prefix='model-switch' col='reference' text=tr_ref %}</th>
<th>{% include 'buttons/sort.html' with prefix='model-switch' col='reference' text=tr_ref %}</th>
<th>{% trans "Commercial name" %}</th>
<th>Firmware</th>
{% trans "Switch constructor" as tr_constructor %}
<th>{% include "buttons/sort.html" with prefix='model-switch' col='constructor' text=tr_constructor %}</th>
<th>{% include 'buttons/sort.html' with prefix='model-switch' col='constructor' text=tr_constructor %}</th>
<th>{% trans "Switches" %}
<th></th>
</tr>
@ -47,7 +47,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr>
<td>{{ model_switch.reference }}</td>
<td>{{ model_switch.commercial_name }}</td>
<td>{{model_switch.firmware}}</td>
<td>{{ model_switch.firmware }}</td>
<td>{{ model_switch.constructor }}</td>
<td>
{% for switch in model_switch.switch_set.all %}
@ -58,15 +58,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</td>
<td class="text-right">
{% can_edit model_switch %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-model-switch' model_switch.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='topologie:edit-model-switch' id=model_switch.id %}
{% acl_end %}
{% history_button model_switch %}
{% can_delete model_switch %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'topologie:del-model-switch' model_switch.id %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='topologie:del-model-switch' id=model_switch.id %}
{% acl_end %}
</td>
</tr>
@ -74,8 +70,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if model_switch_list.paginator %}
{% include "pagination.html" with list=model_switch_list %}
{% include 'pagination.html' with list=model_switch_list %}
{% endif %}

View file

@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% load i18n %}
{% if module_list.paginator %}
{% include "pagination.html" with list=module_list %}
{% include 'pagination.html' with list=module_list %}
{% endif %}
<table class="table table-striped">
@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr>
<th>{% trans "Reference" %}</th>
<th>{% trans "Comment" %}</th>
<th>{% trans "Switchs" %}</th>
<th>{% trans "Switches" %}</th>
<th></th>
</tr>
</thead>
@ -45,34 +45,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ module.comment }}</td>
<td>
{% for module_switch in module.moduleonswitch_set.all %}
<b>Slot</b> {{ module_switch.slot }} <b>of</b> {{ module_switch.switch }}
<b>{% trans "Slot" %}</b> {{ module_switch.slot }} <b>{% trans "of" %}</b> {{ module_switch.switch }}
{% can_edit module_switch %}
<a class="btn btn-primary btn-xs" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-module-on' module_switch.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='topologie:edit-module-on' id=module_switch.id %}
{% acl_end %}
{% can_delete module_switch %}
<a class="btn btn-danger btn-xs" role="button" title={% trans "Delete" %} href="{% url 'topologie:del-module-on' module_switch.id %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='topologie:del-module-on' id=module_switch.id %}
{% acl_end %}
<br>
{% endfor %}
</td>
<td class="text-right">
{% can_edit module %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Add" %} href="{% url 'topologie:add-module-on' %}">
<i class="fa fa-plus"></i>
</a>
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-module' module.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/add.html' with href='topologie:add-module-on' %}
{% include 'buttons/edit.html' with href='topologie:edit-module' id=module.id %}
{% acl_end %}
{% history_button module %}
{% can_delete module %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'topologie:del-module' module.id %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='topologie:del-module' id=module.id %}
{% acl_end %}
</td>
</tr>
@ -80,7 +70,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if module_list.paginator %}
{% include "pagination.html" with list=module_list %}
{% include 'pagination.html' with list=module_list %}
{% endif %}
<h4>{% trans "All modular switchs" %}</h4>

View file

@ -31,16 +31,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<thead>
<tr>
{% trans "Port" as tr_port %}
<th>{% include "buttons/sort.html" with prefix='port' col='port' text=tr_port %}</th>
<th>{% include 'buttons/sort.html' with prefix='port' col='port' text=tr_port %}</th>
{% if search %}
<th>{% trans "Switch" %}</th>
{% endif %}
{% trans "Room" as tr_room %}
<th>{% include "buttons/sort.html" with prefix='port' col='room' text=tr_room %}</th>
<th>{% include 'buttons/sort.html' with prefix='port' col='room' text=tr_room %}</th>
{% trans "Interface" as tr_interface %}
<th>{% include "buttons/sort.html" with prefix='port' col='interface' text=tr_interface %}</th>
<th>{% include 'buttons/sort.html' with prefix='port' col='interface' text=tr_interface %}</th>
{% trans "Related port" as tr_related_port %}
<th>{% include "buttons/sort.html" with prefix='port' col='related' text=tr_related_port %}</th>
<th>{% include 'buttons/sort.html' with prefix='port' col='related' text=tr_related_port %}</th>
<th>{% trans "Port state" %}</th>
<th>{% trans "Port profile" %}</th>
<th>{% trans "Details" %}</th>
@ -96,15 +96,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ port.details }}</td>
<td class="text-right">
{% can_edit port %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-port' port.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='topologie:edit-port' id=port.id %}
{% acl_end %}
{% history_button port %}
{% can_delete port %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'topologie:del-port' port.pk %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='topologie:del-port' id=port.id %}
{% acl_end %}
</td>
</tr>

View file

@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive">
{% if port_profile_list.paginator %}
{% include "pagination.html" with list=port_profile_list %}
{% include 'pagination.html' with list=port_profile_list %}
{% endif %}
@ -68,11 +68,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ port_profile.security_parameters_enabled|join:"<br>" }}</td>
<td class="text-right">
{% can_edit port_profile %}
{% include 'buttons/edit.html' with href='topologie:edit-port-profile' id=port_profile.pk %}
{% include 'buttons/edit.html' with href='topologie:edit-port-profile' id=port_profile.id %}
{% acl_end %}
{% history_button port_profile %}
{% can_delete port_profile %}
{% include 'buttons/suppr.html' with href='topologie:del-port-profile' id=port_profile.pk %}
{% include 'buttons/suppr.html' with href='topologie:del-port-profile' id=port_profile.id %}
{% acl_end %}
</td>
</tr>
@ -80,7 +80,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if port_profile_list.paginator %}
{% include "pagination.html" with list=port_profile_list %}
{% include 'pagination.html' with list=port_profile_list %}
{% endif %}
</div>

View file

@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endcomment %}
{% load acl %}
{% load i18n %}
<div class="table-responsive" style="font-size: 12px">
<table class="table table-bordered text-center text-nowrap">
@ -63,7 +64,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</td>
{% else %}
<td class="p-3 mb-2 bg-info text-dark">
Vide
{% trans "Empty" %}
</td>
{% endif %}
{% endfor %}
@ -106,7 +107,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</td>
{% else %}
<td class="p-3 mb-2 bg-info text-dark">
Vide
{% trans "Empty" %}
</td>
{% endif %}
{% endfor %}

View file

@ -30,9 +30,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<thead>
<tr>
{% trans "Stack" as tr_stack %}
<th>{% include "buttons/sort.html" with prefix='stack' col='name' text=tr_stack %}</th>
<th>{% include 'buttons/sort.html' with prefix='stack' col='name' text=tr_stack %}</th>
{% trans "ID" as tr_id %}
<th>{% include "buttons/sort.html" with prefix='stack' col='id' text=id %}</th>
<th>{% include 'buttons/sort.html' with prefix='stack' col='id' text=id %}</th>
<th>{% trans "Details" %}</th>
<th>{% trans "Members" %}</th>
<th></th>
@ -45,22 +45,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ stack.details }}</td>
<td>
{% for switch in stack.switch_set.all %}
<a href="{% url 'topologie:index-port' switch.pk %}">
<a href="{% url 'topologie:index-port' switch.id %}">
{{ switch }}
</a>
{% endfor %}
</td>
<td class="text-right">
{% can_edit stack %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-stack' stack.id %}">
<i class="fa fa-edit"></i>
</a>
{% include 'buttons/edit.html' with href='topologie:edit-stack' id=stack.id %}
{% acl_end %}
{% history_button stack %}
{% can_delete stack %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'topologie:del-stack' stack.pk %}">
<i class="fa fa-trash"></i>
</a>
{% include 'buttons/suppr.html' with href='topologie:del-stack' id=stack.id %}
{% acl_end %}
</td>
</tr>

View file

@ -28,22 +28,22 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive">
{% if switch_list.paginator %}
{% include "pagination.html" with list=switch_list %}
{% include 'pagination.html' with list=switch_list %}
{% endif %}
<table class="table table-striped">
<thead>
<tr>
{% trans "DNS name" as tr_dns %}
<th>{% include "buttons/sort.html" with prefix='switch' col='dns' text=tr_dns %}</th>
<th>{% include 'buttons/sort.html' with prefix='switch' col='dns' text=tr_dns %}</th>
{% trans "IPv4 address" as tr_ip %}
<th>{% include "buttons/sort.html" with prefix='switch' col='ip' text=tr_ip %}</th>
<th>{% include 'buttons/sort.html' with prefix='switch' col='ip' text=tr_ip %}</th>
{% trans "Switch bay" as tr_bay %}
<th>{% include "buttons/sort.html" with prefix='switch' col='loc' text=tr_bay %}</th>
<th>{% include 'buttons/sort.html' with prefix='switch' col='loc' text=tr_bay %}</th>
{% trans "Ports" as tr_ports %}
<th>{% include "buttons/sort.html" with prefix='switch' col='ports' text=tr_ports %}</th>
<th>{% include 'buttons/sort.html' with prefix='switch' col='ports' text=tr_ports %}</th>
{% trans "Stack" as tr_stack %}
<th>{% include "buttons/sort.html" with prefix='switch' col='stack' text=tr_stack %}</th>
<th>{% include 'buttons/sort.html' with prefix='switch' col='stack' text=tr_stack %}</th>
<th>{% trans "Stack ID" %}</th>
<th>{% trans "Switch model" %}</th>
<th>{% trans "Details" %}</th>
@ -53,7 +53,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% for switch in switch_list %}
<tr>
<td>
<a href="{% url 'topologie:index-port' switch.pk %}">
<a href="{% url 'topologie:index-port' switch.id %}">
{{ switch }}
</a>
</td>
@ -66,7 +66,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ switch.interface_set.first.details }}</td>
<td class="text-right">
{% can_edit switch %}
{% include 'buttons/edit.html' with href='topologie:edit-switch' id=switch.pk %}
{% include 'buttons/edit.html' with href='topologie:edit-switch' id=switch.id %}
{% acl_end %}
{% history_button switch %}
{% can_delete switch %}
@ -74,7 +74,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %}
{% can_create Port %}
{% trans "Creation of ports" as tr_creation %}
{% include 'buttons/add.html' with href='topologie:create-ports' id=switch.pk desc=tr_creation %}
{% include 'buttons/add.html' with href='topologie:create-ports' id=switch.id desc=tr_creation %}
{% acl_end %}
</td>
</tr>
@ -82,7 +82,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table>
{% if switch_list.paginator %}
{% include "pagination.html" with list=switch_list %}
{% include 'pagination.html' with list=switch_list %}
{% endif %}
</div>

Some files were not shown because too many files have changed in this diff Show more