8
0
Fork 0
mirror of https://gitlab.federez.net/re2o/re2o synced 2024-07-06 22:24:06 +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.conf import settings
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType 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(): def _create_api_permission():
@ -71,4 +71,5 @@ def can_view(user):
'codename': settings.API_PERMISSION_CODENAME 'codename': settings.API_PERMISSION_CODENAME
} }
can = user.has_perm('%(app_label)s.%(codename)s' % kwargs) 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) utc_now = datetime.datetime.now(datetime.timezone.utc)
if token.created < utc_now - token_duration: if token.created < utc_now - token_duration:
raise exceptions.AuthenticationFailed(_('Token has expired')) raise exceptions.AuthenticationFailed(_("The token has expired."))
return token.user, token 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. Form used in oder to create a discount on an invoice.
""" """
is_relative = forms.BooleanField( is_relative = forms.BooleanField(
label=_("Discount is on percentage"), label=_("Discount is on percentage."),
required=False, required=False,
) )
discount = forms.DecimalField( discount = forms.DecimalField(
@ -310,8 +310,8 @@ class RechargeForm(FormRevMixin, Form):
if balance_method.maximum_balance is not None and \ if balance_method.maximum_balance is not None and \
value + self.user.solde > balance_method.maximum_balance: value + self.user.solde > balance_method.maximum_balance:
raise forms.ValidationError( raise forms.ValidationError(
_("Requested amount is too high. Your balance can't exceed \ _("Requested amount is too high. Your balance can't exceed"
%(max_online_balance)s .") % { " %(max_online_balance)s €.") % {
'max_online_balance': balance_method.maximum_balance 'max_online_balance': balance_method.maximum_balance
} }
) )

View file

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

View file

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

View file

@ -57,7 +57,7 @@ def note_payment(request, facture, factureid):
user = facture.user user = facture.user
payment_method = find_payment_method(facture.paiement) payment_method = find_payment_method(facture.paiement)
if not payment_method or not isinstance(payment_method, NotePayment): if not payment_method or not isinstance(payment_method, NotePayment):
messages.error(request, "Erreur inconnue") messages.error(request, _("Unknown error."))
return redirect(reverse( return redirect(reverse(
'users:profil', 'users:profil',
kwargs={'userid': user.id} kwargs={'userid': user.id}
@ -85,7 +85,7 @@ def note_payment(request, facture, factureid):
) )
facture.valid = True facture.valid = True
facture.save() 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( return redirect(reverse(
'users:profil', 'users:profil',
kwargs={'userid': user.id} 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>{{ article.available_for_everyone | tick }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit article %} {% can_edit article %}
<a class="btn btn-primary btn-sm" role="button" title="{% trans "Edit" %}" href="{% url 'cotisations:edit-article' article.id %}"> {% include 'buttons/edit.html' with href='cotisations:edit-article' id=article.id %}
<i class="fa fa-edit"></i>
</a>
{% acl_end %} {% acl_end %}
{% history_button article %} {% history_button article %}
</td> </td>

View file

@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr> <tr>
<th> <th>
{% trans "Recipient" as tr_recip %} {% 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>
<th>{% trans "Designation" %}</th> <th>{% trans "Designation" %}</th>
<th>{% trans "Total price" %}</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"> <div class="table-responsive">
{% if facture_list.paginator %} {% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %} {% include 'pagination.html' with list=facture_list %}
{% endif %} {% endif %}
<table class="table table-striped"> <table class="table table-striped">
@ -89,7 +89,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if facture_list.paginator %} {% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %} {% include 'pagination.html' with list=facture_list %}
{% endif %} {% endif %}
</div> </div>

View file

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

View file

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

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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> <h2>{% trans "Invoice control and validation" %}</h2>
{% if facture_list.paginator %} {% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %} {% include 'pagination.html' with list=facture_list %}
{% endif %} {% endif %}
<form class="form" method="post"> <form class="form" method="post">
@ -110,6 +110,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endblock %} {% endblock %}
{% if facture_list.paginator %} {% if facture_list.paginator %}
{% include 'pagination.html' with list=facture_list %} {% include 'pagination.html' with list=facture_list %}
{% endif %} {% endif %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% if title %}
<h3>{{title}}</h3> <h3>{{title}}</h3>
{% else %} {% else %}
<h3>{% trans "Edit the invoice" %}</h3> <h3>{% trans "Edit invoice" %}</h3>
{% endif %} {% endif %}
{% massive_bootstrap_form factureform 'user' %} {% massive_bootstrap_form factureform 'user' %}
{{ venteform.management_form }} {{ venteform.management_form }}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 title %}{% trans "Articles" %}{% endblock %}
{% block content %} {% block content %}
<h2>{% trans "Article types list" %}</h2> <h2>{% trans "List of article types" %}</h2>
{% can_create Article %} {% can_create Article %}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:add-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" %} <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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 title %}{% trans "Banks" %}{% endblock %}
{% block content %} {% block content %}
<h2>{% trans "Banks list" %}</h2> <h2>{% trans "List of banks" %}</h2>
{% can_create Banque %} {% can_create Banque %}
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:add-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" %} <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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 title %}{% trans "Cost estimates" %}{% endblock %}
{% block content %} {% block content %}
<h2>{% trans "Cost estimates list" %}</h2> <h2>{% trans "List of cost estimates" %}</h2>
{% can_create CostEstimate %} {% 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 %} {% acl_end %}
{% include 'cotisations/aff_cost_estimate.html' %} {% include 'cotisations/aff_cost_estimate.html' %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 title %}{% trans "Custom invoices" %}{% endblock %}
{% block content %} {% block content %}
<h2>{% trans "Custom invoices list" %}</h2> <h2>{% trans "List of custom invoices" %}</h2>
{% can_create CustomInvoice %} {% 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 %} {% acl_end %}
{% include 'cotisations/aff_custom_invoice.html' with custom_invoice_list=custom_invoice_list %} {% include 'cotisations/aff_custom_invoice.html' with custom_invoice_list=custom_invoice_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "cotisations/sidebar.html" %} {% extends 'cotisations/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block sidebar %}
{% can_create CustomInvoice %} {% 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" %} <i class="fa fa-plus"></i> {% trans "Create an invoice" %}
</a> </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" %} <i class="fa fa-eye"></i> {% trans "Control the invoices" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Facture %} {% 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" %} <i class="fa fa-list-ul"></i> {% trans "Invoices" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all CustomInvoice %} {% 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" %} <i class="fa fa-list-ul"></i> {% trans "Custom invoices" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all CostEstimate %} {% can_view_all CostEstimate %}
<a class="list-group-item list-group-item-info" href="{% url "cotisations:index-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 estimate" %} <i class="fa fa-list-ul"></i> {% trans "Cost estimates" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Article %} {% 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" %} <i class="fa fa-list-ul"></i> {% trans "Available articles" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Banque %} {% 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" %} <i class="fa fa-list-ul"></i> {% trans "Banks" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Paiement %} {% 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" %} <i class="fa fa-list-ul"></i> {% trans "Payment methods" %}
</a> </a>
{% acl_end %} {% acl_end %}

View file

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

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2018-06-23 16:01+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \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_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: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" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
@ -113,15 +113,19 @@ msgstr "%(username)s a mis à jour"
#: templates/logs/aff_summary.html:113 #: templates/logs/aff_summary.html:113
#, python-format #, python-format
msgid "%(username)s has sold %(number)sx %(name)s to" msgid "%(username)s has sold %(number)sx %(name)s"
msgstr "%(username)s a vendu %(number)sx %(name)s à" msgstr "%(username)s a vendu %(number)sx %(name)s"
#: templates/logs/aff_summary.html:116 #: templates/logs/aff_summary.html:116
msgid " to"
msgstr " à"
#: templates/logs/aff_summary.html:119
#, python-format #, python-format
msgid "+%(duration)s months" msgid "+%(duration)s months"
msgstr "+%(duration)s mois" msgstr "+%(duration)s mois"
#: templates/logs/aff_summary.html:132 #: templates/logs/aff_summary.html:137
#, python-format #, python-format
msgid "%(username)s has edited an interface of" msgid "%(username)s has edited an interface of"
msgstr "%(username)s a modifié une interface de" msgstr "%(username)s a modifié une interface de"
@ -149,7 +153,7 @@ msgstr "Confirmer"
msgid "Statistics" msgid "Statistics"
msgstr "Statistiques" 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" msgid "Actions performed"
msgstr "Actions effectuées" msgstr "Actions effectuées"
@ -173,7 +177,7 @@ msgstr "Base de données"
msgid "Wiring actions" msgid "Wiring actions"
msgstr "Actions de câblage" msgstr "Actions de câblage"
#: templates/logs/sidebar.html:53 views.py:325 #: templates/logs/sidebar.html:53 views.py:336
msgid "Users" msgid "Users"
msgstr "Utilisateurs" msgstr "Utilisateurs"
@ -189,150 +193,154 @@ msgstr "Statistiques sur la base de données"
msgid "Statistics about users" msgid "Statistics about users"
msgstr "Statistiques sur les utilisateurs" msgstr "Statistiques sur les utilisateurs"
#: views.py:191 #: views.py:194
msgid "Nonexistent revision." msgid "Nonexistent revision."
msgstr "Révision inexistante." msgstr "Révision inexistante."
#: views.py:194 #: views.py:197
msgid "The action was deleted." msgid "The action was deleted."
msgstr "L'action a été supprimée." msgstr "L'action a été supprimée."
#: views.py:227 #: views.py:230
msgid "Category" msgid "Category"
msgstr "Catégorie" msgstr "Catégorie"
#: views.py:228 #: views.py:231
msgid "Number of users (members and clubs)" msgid "Number of users (members and clubs)"
msgstr "Nombre d'utilisateurs (adhérents et clubs)" msgstr "Nombre d'utilisateurs (adhérents et clubs)"
#: views.py:229 #: views.py:232
msgid "Number of members" msgid "Number of members"
msgstr "Nombre d'adhérents" msgstr "Nombre d'adhérents"
#: views.py:230 #: views.py:233
msgid "Number of clubs" msgid "Number of clubs"
msgstr "Nombre de clubs" msgstr "Nombre de clubs"
#: views.py:234 #: views.py:237
msgid "Activated users" msgid "Activated users"
msgstr "Utilisateurs activés" msgstr "Utilisateurs activés"
#: views.py:242 #: views.py:245
msgid "Disabled users" msgid "Disabled users"
msgstr "Utilisateurs désactivés" msgstr "Utilisateurs désactivés"
#: views.py:250 #: views.py:253
msgid "Archived users" msgid "Archived users"
msgstr "Utilisateurs archivés" 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" msgid "Contributing members"
msgstr "Adhérents cotisants" msgstr "Adhérents cotisants"
#: views.py:264 #: views.py:275
msgid "Users benefiting from a connection" msgid "Users benefiting from a connection"
msgstr "Utilisateurs bénéficiant d'une connexion" msgstr "Utilisateurs bénéficiant d'une connexion"
#: views.py:270 #: views.py:281
msgid "Banned users" msgid "Banned users"
msgstr "Utilisateurs bannis" msgstr "Utilisateurs bannis"
#: views.py:276 #: views.py:287
msgid "Users benefiting from a free connection" msgid "Users benefiting from a free connection"
msgstr "Utilisateurs bénéficiant d'une connexion gratuite" msgstr "Utilisateurs bénéficiant d'une connexion gratuite"
#: views.py:282 #: views.py:293
msgid "Active interfaces (with access to the network)" msgid "Active interfaces (with access to the network)"
msgstr "Interfaces actives (ayant accès au réseau)" msgstr "Interfaces actives (ayant accès au réseau)"
#: views.py:292 #: views.py:303
msgid "Active interfaces assigned IPv4" msgid "Active interfaces assigned IPv4"
msgstr "Interfaces actives assignées IPv4" msgstr "Interfaces actives assignées IPv4"
#: views.py:305 #: views.py:316
msgid "IP range" msgid "IP range"
msgstr "Plage d'IP" msgstr "Plage d'IP"
#: views.py:306 #: views.py:317
msgid "VLAN" msgid "VLAN"
msgstr "VLAN" msgstr "VLAN"
#: views.py:307 #: views.py:318
msgid "Total number of IP addresses" msgid "Total number of IP addresses"
msgstr "Nombre total d'adresses IP" msgstr "Nombre total d'adresses IP"
#: views.py:308 #: views.py:319
msgid "Number of assigned IP addresses" msgid "Number of assigned IP addresses"
msgstr "Nombre d'adresses IP non assignées" msgstr "Nombre d'adresses IP non assignées"
#: views.py:309 #: views.py:320
msgid "Number of IP address assigned to an activated machine" msgid "Number of IP address assigned to an activated machine"
msgstr "Nombre d'adresses IP assignées à une machine activée" msgstr "Nombre d'adresses IP assignées à une machine activée"
#: views.py:310 #: views.py:321
msgid "Number of nonassigned IP addresses" msgid "Number of nonassigned IP addresses"
msgstr "Nombre d'adresses IP non assignées" msgstr "Nombre d'adresses IP non assignées"
#: views.py:337 #: views.py:348
msgid "Subscriptions" msgid "Subscriptions"
msgstr "Cotisations" msgstr "Cotisations"
#: views.py:359 views.py:420 #: views.py:370 views.py:431
msgid "Machines" msgid "Machines"
msgstr "Machines" msgstr "Machines"
#: views.py:386 #: views.py:397
msgid "Topology" msgid "Topology"
msgstr "Topologie" msgstr "Topologie"
#: views.py:405 #: views.py:416
msgid "Number of actions" msgid "Number of actions"
msgstr "Nombre d'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" msgid "User"
msgstr "Utilisateur" msgstr "Utilisateur"
#: views.py:423 #: views.py:434
msgid "Invoice" msgid "Invoice"
msgstr "Facture" msgstr "Facture"
#: views.py:426 #: views.py:437
msgid "Ban" msgid "Ban"
msgstr "Bannissement" msgstr "Bannissement"
#: views.py:429 #: views.py:440
msgid "Whitelist" msgid "Whitelist"
msgstr "Accès gracieux" msgstr "Accès gracieux"
#: views.py:432 #: views.py:443
msgid "Rights" msgid "Rights"
msgstr "Droits" msgstr "Droits"
#: views.py:436 #: views.py:447
msgid "School" msgid "School"
msgstr "Établissement" msgstr "Établissement"
#: views.py:441 #: views.py:452
msgid "Payment method" msgid "Payment method"
msgstr "Moyen de paiement" msgstr "Moyen de paiement"
#: views.py:446 #: views.py:457
msgid "Bank" msgid "Bank"
msgstr "Banque" msgstr "Banque"
#: views.py:463 #: views.py:474
msgid "Action" msgid "Action"
msgstr "Action" msgstr "Action"
#: views.py:494 #: views.py:505
msgid "No model found." msgid "No model found."
msgstr "Aucun modèle trouvé." msgstr "Aucun modèle trouvé."
#: views.py:500 #: views.py:511
msgid "Nonexistent entry." msgid "Nonexistent entry."
msgstr "Entrée inexistante." msgstr "Entrée inexistante."
#: views.py:507 #: views.py:518
msgid "You don't have the right to access this menu." msgid "You don't have the right to access this menu."
msgstr "Vous n'avez pas le droit d'accéder à ce 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 %} {% endcomment %}
{% if revisions_list.paginator %} {% if revisions_list.paginator %}
{% include "pagination.html" with list=revisions_list %} {% include 'pagination.html' with list=revisions_list %}
{% endif %} {% endif %}
{% load logs_extra %} {% 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 "Edited object" %}</th>
<th>{% trans "Object type" %}</th> <th>{% trans "Object type" %}</th>
{% trans "Edited by" as tr_edited_by %} {% 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 %} {% 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>{% trans "Comment" %}</th>
<th></th> <th></th>
</tr> </tr>
@ -65,6 +65,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if revisions_list.paginator %} {% if revisions_list.paginator %}
{% include "pagination.html" with list=revisions_list %} {% include 'pagination.html' with list=revisions_list %}
{% endif %} {% endif %}

View file

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

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block content %}
<h2>{% trans "Actions performed" %}</h2> <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 /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block sidebar %}
{% can_view_app logs %} {% 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> <i class="fa fa-clipboard"></i>
{% trans "Summary" %} {% trans "Summary" %}
</a> </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> <i class="fa fa-calendar"></i>
{% trans "Events" %} {% trans "Events" %}
</a> </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> <i class="fa fa-area-chart"></i>
{% trans "General" %} {% trans "General" %}
</a> </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> <i class="fa fa-database"></i>
{% trans "Database" %} {% trans "Database" %}
</a> </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> <i class="fa fa-plug"></i>
{% trans "Wiring actions" %} {% trans "Wiring actions" %}
</a> </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> <i class="fa fa-users"></i>
{% trans "Users" %} {% trans "Users" %}
</a> </a>

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block content %}
<h2>{% trans "General statistics" %}</h2> <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 /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block content %}
<h2>{% trans "Actions performed" %}</h2> <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 /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block content %}
<h2>{% trans "Database statistics" %}</h2> <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 /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "logs/sidebar.html" %} {% extends 'logs/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block content %}
<h2>{% trans "Statistics about users" %}</h2> <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 /> <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: if interfaces_set:
return str(interfaces_set.domain.name) return str(interfaces_set.domain.name)
else: else:
return "None" return _("No name")
@cached_property @cached_property
def complete_name(self): def complete_name(self):
@ -340,7 +340,7 @@ class IpType(RevMixin, AclMixin, models.Model):
("use_all_iptype", _("Can use all IP types")), ("use_all_iptype", _("Can use all IP types")),
) )
verbose_name = _("IP type") verbose_name = _("IP type")
verbose_name_plural = "IP types" verbose_name_plural = _("IP types")
@cached_property @cached_property
def ip_range(self): def ip_range(self):
@ -534,11 +534,11 @@ class Vlan(RevMixin, AclMixin, models.Model):
dhcpv6_snooping = models.BooleanField(default=False) dhcpv6_snooping = models.BooleanField(default=False)
igmp = models.BooleanField( igmp = models.BooleanField(
default=False, default=False,
help_text="Gestion multicast v4" help_text=_("v4 multicast management")
) )
mld = models.BooleanField( mld = models.BooleanField(
default=False, default=False,
help_text="Gestion multicast v6" help_text=_("v6 multicast management")
) )
class Meta: class Meta:
@ -559,7 +559,7 @@ class Nas(RevMixin, AclMixin, models.Model):
default_mode = '802.1X' default_mode = '802.1X'
AUTH = ( AUTH = (
('802.1X', '802.1X'), ('802.1X', '802.1X'),
('Mac-address', 'Mac-address'), ('Mac-address', _("MAC-address")),
) )
name = models.CharField(max_length=255, unique=True) 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. """ utilisée dans les migrations de la BDD. """
return cls.objects.get_or_create( return cls.objects.get_or_create(
name=_("SOA to edit"), name=_("SOA to edit"),
mail="postmaser@example.com" mail="postmaster@example.com"
)[0].pk )[0].pk
@ -934,7 +934,7 @@ class SshFp(RevMixin, AclMixin, models.Model):
machine = models.ForeignKey('Machine', on_delete=models.CASCADE) machine = models.ForeignKey('Machine', on_delete=models.CASCADE)
pub_key_entry = models.TextField( pub_key_entry = models.TextField(
help_text="SSH public key", help_text=_("SSH public key"),
max_length=2048 max_length=2048
) )
algo = models.CharField( algo = models.CharField(
@ -942,7 +942,7 @@ class SshFp(RevMixin, AclMixin, models.Model):
max_length=32 max_length=32
) )
comment = models.CharField( comment = models.CharField(
help_text="Comment", help_text=_("Comment"),
max_length=255, max_length=255,
null=True, null=True,
blank=True blank=True
@ -1872,7 +1872,8 @@ class OuverturePort(RevMixin, AclMixin, models.Model):
) )
class Meta: class Meta:
verbose_name = _("ports openings") verbose_name = _("ports opening")
verbose_name_plural = _("ports openings")
def __str__(self): def __str__(self):
if self.begin == self.end: 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"> <div class="table-responsive">
{% if machines_list.paginator %} {% 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 %} {% endif %}
<table class="table" id="machines_table"> <table class="table" id="machines_table">
@ -41,7 +41,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</colgroup> </colgroup>
<thead> <thead>
{% trans "DNS name" as tr_dns_name %} {% 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 "Type" %}</th>
<th>{% trans "MAC address" %}</th> <th>{% trans "MAC address" %}</th>
<th>{% trans "IP 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"> <td colspan="4">
{% trans "No name" as tr_no_name %} {% trans "No name" as tr_no_name %}
{% trans "View the profile" as tr_view_the_profile %} {% 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> <a href="{% url 'users:profil' userid=machine.user.id %}" title=tr_view_the_profile>
<i class="fa fa-user"></i> {{ machine.user }} <i class="fa fa-user"></i> {{ machine.user }}
</a> </a>
@ -215,6 +215,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</script> </script>
{% if machines_list.paginator %} {% 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 %} {% endif %}
</div> </div>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 bootstrap3 %}
{% load i18n %} {% load i18n %}
{% block title %}{% trans "Creation and editing of machines" %}{% endblock %} {% block title %}{% trans "Deletion of machines" %}{% endblock %}
{% block content %} {% block content %}
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
<h4>{% blocktrans %}Warning: are you sure you want to delete this object {{ objet_name }} ( {{ objet }} <h4>{% blocktrans %}Warning: are you sure you want to delete this object {{ objet_name }} ( {{ objet }} )?{% endblocktrans %}</h4>
)?{% endblocktrans %}</h4>
{% trans "Confirm" as tr_confirm %} {% trans "Confirm" as tr_confirm %}
{% bootstrap_button tr_confirm button_type="submit" icon='trash' button_class='btn-danger' %} {% bootstrap_button tr_confirm button_type="submit" icon='trash' button_class='btn-danger' %}
</form> </form>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block content %}
<h2>{% trans "Machines" %}</h2> <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/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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> 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 <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> 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/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several extensions" %}
</a> </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> <h2>{% trans "List of SOA records" %}</h2>
{% can_create SOA %} {% 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several SOA records" %}
</a> </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> <h2>{% trans "List of MX records" %}</h2>
{% can_create Mx %} {% 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several MX records" %}
</a> </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> <h2>{% trans "List of NS records" %}</h2>
{% can_create Ns %} {% 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several NS records" %}
</a> </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> <h2>{% trans "List of TXT records" %}</h2>
{% can_create Txt %} {% 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several TXT records" %}
</a> </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> <h2>{% trans "List of DNAME records" %}</h2>
{% can_create DName %} {% 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' %}"> <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" %} <i class="fa fa-trash"></i> {% trans " Delete one or several DNAME records" %}
</a> </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> <h2>{% trans "List of SRV records" %}</h2>
{% can_create Srv %} {% 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several SRV records" %}
</a> </a>
{% include "machines/aff_srv.html" with srv_list=srv_list %} {% include 'machines/aff_srv.html' with srv_list=srv_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several IP types" %}
</a> </a>
{% include "machines/aff_iptype.html" with iptype_list=iptype_list %} {% include 'machines/aff_iptype.html' with iptype_list=iptype_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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" %} <i class="fa fa-plus"></i>{% trans " Add an IPv6 address" %}
</a> </a>
{% acl_end %} {% 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/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several machine types" %}
</a> </a>
{% include "machines/aff_machinetype.html" with machinetype_list=machinetype_list %} {% include 'machines/aff_machinetype.html' with machinetype_list=machinetype_list %}
<br/> <br/>
<br/> <br/>
<br/> <br/>

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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' %}"> <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" %} <i class="fa fa-trash"></i>{% trans " Delete one or several NAS device types" %}
</a> </a>
{% include "machines/aff_nas.html" with nas_list=nas_list %} {% include 'machines/aff_nas.html' with nas_list=nas_list %}
<br/> <br/>
<br/> <br/>
<br/> <br/>

View file

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

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-role' %}"><i <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> 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 %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-service' %}"><i <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> 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> <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 %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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" %} <i class="fa fa-plus"></i>{% trans " Add an SSH fingerprint" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% include "machines/aff_sshfp.html" with sshfp_list=sshfp_list %} {% include 'machines/aff_sshfp.html' with sshfp_list=sshfp_list %}
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% acl_end %}
<a class="btn btn-danger btn-sm" role="button" href="{% url 'machines:del-vlan' %}"><i <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> 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 %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "machines/sidebar.html" %} {% extends 'machines/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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' %} {% bootstrap_button action_name button_type="submit" icon='ok' button_class='btn-success' %}
</form> </form>
{% endblock %} {% endblock %}

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block sidebar %}
{% can_view_all Machine %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "Machines" %} {% trans "Machines" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all MachineType %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "Machine types" %} {% trans "Machine types" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Extension %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "Extensions and zones" %} {% trans "Extensions and zones" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all IpType %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "IP ranges" %} {% trans "IP ranges" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Vlan %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "VLANs" %} {% trans "VLANs" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Nas %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "NAS devices" %} {% trans "NAS devices" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all machines.Service %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "Services (DHCP, DNS, ...)" %} {% trans "Services (DHCP, DNS, ...)" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all Role %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "Server roles" %} {% trans "Server roles" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% can_view_all OuverturePortList %} {% 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> <i class="fa fa-list-ul"></i>
{% trans "Ports openings" %} {% trans "Ports openings" %}
</a> </a>
{% acl_end %} {% acl_end %}
{% endblock %} {% endblock %}

View file

@ -359,7 +359,7 @@ class DelMailContactForm(Form):
"""Delete contact email adress""" """Delete contact email adress"""
mailcontacts = forms.ModelMultipleChoiceField( mailcontacts = forms.ModelMultipleChoiceField(
queryset=MailContact.objects.none(), queryset=MailContact.objects.none(),
label="Enregistrements adresses actuels", label=_("Current email addresses"),
widget=forms.CheckboxSelectMultiple 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) gpg_fingerprint = models.BooleanField(default=True)
all_can_create_club = models.BooleanField( all_can_create_club = models.BooleanField(
default=False, default=False,
help_text=_("Users can create a club") help_text=_("Users can create a club.")
) )
all_can_create_adherent = models.BooleanField( all_can_create_adherent = models.BooleanField(
default=False, default=False,
help_text=_("Users can create a member"), help_text=_("Users can create a member."),
) )
shell_default = models.OneToOneField( shell_default = models.OneToOneField(
@ -88,15 +88,15 @@ class OptionalUser(AclMixin, PreferencesModel):
) )
self_change_shell = models.BooleanField( self_change_shell = models.BooleanField(
default=False, default=False,
help_text=_("Users can edit their shell") help_text=_("Users can edit their shell.")
) )
self_change_room = models.BooleanField( self_change_room = models.BooleanField(
default=False, default=False,
help_text=_("Users can edit their room") help_text=_("Users can edit their room.")
) )
local_email_accounts_enabled = models.BooleanField( local_email_accounts_enabled = models.BooleanField(
default=False, default=False,
help_text=_("Enable local email accounts for users") help_text=_("Enable local email accounts for users.")
) )
local_email_domain = models.CharField( local_email_domain = models.CharField(
max_length=32, max_length=32,
@ -106,20 +106,21 @@ class OptionalUser(AclMixin, PreferencesModel):
max_email_address = models.IntegerField( max_email_address = models.IntegerField(
default=15, default=15,
help_text=_("Maximum number of local email addresses for a standard" help_text=_("Maximum number of local email addresses for a standard"
" user") " user.")
) )
delete_notyetactive = models.IntegerField( delete_notyetactive = models.IntegerField(
default=15, 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( self_adhesion = models.BooleanField(
default=False, 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( all_users_active = models.BooleanField(
default=False, default=False,
help_text=_("If True, all new created and connected users are active.\ help_text=_("If True, all new created and connected users are active."
If False, only when a valid registration has been paid") " If False, only when a valid registration has been paid.")
) )
class Meta: class Meta:
@ -206,40 +207,41 @@ class OptionalTopologie(AclMixin, PreferencesModel):
switchs_web_management = models.BooleanField( switchs_web_management = models.BooleanField(
default=False, 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( switchs_web_management_ssl = models.BooleanField(
default=False, 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( switchs_rest_management = models.BooleanField(
default=False, 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( switchs_ip_type = models.OneToOneField(
'machines.IpType', 'machines.IpType',
on_delete=models.PROTECT, on_delete=models.PROTECT,
blank=True, blank=True,
null=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( switchs_provision = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_PROVISION, choices=CHOICE_PROVISION,
default='tftp', 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( sftp_login = models.CharField(
max_length=32, max_length=32,
null=True, null=True,
blank=True, blank=True,
help_text="Login sftp des switchs" help_text=_("SFTP login for switches")
) )
sftp_pass = AESEncryptedField( sftp_pass = AESEncryptedField(
max_length=63, max_length=63,
null=True, null=True,
blank=True, blank=True,
help_text="Mot de passe sftp" help_text=_("SFTP password")
) )
@cached_property @cached_property
@ -314,52 +316,56 @@ class RadiusKey(AclMixin, models.Model):
"""Class of a radius key""" """Class of a radius key"""
radius_key = AESEncryptedField( radius_key = AESEncryptedField(
max_length=255, max_length=255,
help_text="Clef radius" help_text=_("RADIUS key")
) )
comment = models.CharField( comment = models.CharField(
max_length=255, max_length=255,
null=True, null=True,
blank=True, blank=True,
help_text="Commentaire de cette clef" help_text=_("Comment for this key")
) )
default_switch = models.BooleanField( default_switch = models.BooleanField(
default=True, default=True,
unique=True, unique=True,
help_text= "Clef par défaut des switchs" help_text=_("Default key for switches")
) )
class Meta: class Meta:
permissions = ( 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): 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 SwitchManagementCred(AclMixin, models.Model):
"""Class of a management creds of a switch, for rest management""" """Class of a management creds of a switch, for rest management"""
management_id = models.CharField( management_id = models.CharField(
max_length=63, max_length=63,
help_text="Login du switch" help_text=_("Switch login")
) )
management_pass = AESEncryptedField( management_pass = AESEncryptedField(
max_length=63, max_length=63,
help_text="Mot de passe" help_text=_("Password")
) )
default_switch = models.BooleanField( default_switch = models.BooleanField(
default=True, default=True,
unique=True, unique=True,
help_text= "Creds par défaut des switchs" help_text=_("Default credentials for switches")
) )
class Meta: class Meta:
permissions = ( 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): def __str__(self):
return "Identifiant " + str(self.management_id) return _("Switch login ") + str(self.management_id)
class Reminder(AclMixin, models.Model): 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é Days: liste des nombres de jours pour lesquells un mail est envoyé
optionalMessage: message additionel pour le mail optionalMessage: message additionel pour le mail
""" """
PRETTY_NAME="Options pour le mail de fin d'adhésion"
days = models.IntegerField( days = models.IntegerField(
default=7, default=7,
unique=True, 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( message = models.CharField(
max_length=255, max_length=255,
default="", default="",
null=True, null=True,
blank=True, blank=True,
help_text="Message affiché spécifiquement pour ce rappel" help_text=_("Message displayed specifically for this reminder")
) )
class Meta: class Meta:
permissions = ( 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): def users_to_remind(self):
from re2o.utils import all_has_access from re2o.utils import all_has_access
@ -472,8 +479,7 @@ class MailContact(AclMixin, models.Model):
commentary = models.CharField( commentary = models.CharField(
blank = True, blank = True,
null = True, null = True,
help_text = _( help_text = _("Description of the associated email address."),
"Description of the associated email address."),
max_length = 256 max_length = 256
) )
@ -564,8 +570,8 @@ def homeoption_post_save(**kwargs):
class MailMessageOption(AclMixin, models.Model): class MailMessageOption(AclMixin, models.Model):
"""Reglages, mail de bienvenue et autre""" """Reglages, mail de bienvenue et autre"""
welcome_mail_fr = models.TextField(default="", help_text="Mail de bienvenue en français") welcome_mail_fr = models.TextField(default="", help_text=_("Welcome email in French"))
welcome_mail_en = models.TextField(default="", help_text="Mail de bienvenue en anglais") welcome_mail_en = models.TextField(default="", help_text=_("Welcome email in English"))
class Meta: class Meta:
permissions = ( permissions = (
@ -577,7 +583,8 @@ class MailMessageOption(AclMixin, models.Model):
class RadiusOption(AclMixin, PreferencesModel): class RadiusOption(AclMixin, PreferencesModel):
class Meta: class Meta:
verbose_name = _("radius policies") verbose_name = _("RADIUS policy")
verbose_name_plural = _("RADIUS policies")
MACHINE = 'MACHINE' MACHINE = 'MACHINE'
DEFINED = 'DEFINED' DEFINED = 'DEFINED'
@ -588,8 +595,8 @@ class RadiusOption(AclMixin, PreferencesModel):
REJECT = 'REJECT' REJECT = 'REJECT'
SET_VLAN = 'SET_VLAN' SET_VLAN = 'SET_VLAN'
CHOICE_POLICY = ( CHOICE_POLICY = (
(REJECT, _('Reject the machine')), (REJECT, _("Reject the machine")),
(SET_VLAN, _('Place the machine on the VLAN')) (SET_VLAN, _("Place the machine on the VLAN"))
) )
radius_general_policy = models.CharField( radius_general_policy = models.CharField(
max_length=32, max_length=32,
@ -608,16 +615,14 @@ class RadiusOption(AclMixin, PreferencesModel):
related_name='unknown_machine_vlan', related_name='unknown_machine_vlan',
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Unknown machine Vlan'), verbose_name=_("Unknown machines VLAN"),
help_text=_( help_text=_("VLAN for unknown machines if not rejected")
'Vlan for unknown machines if not rejected.'
)
) )
unknown_port = models.CharField( unknown_port = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_POLICY, choices=CHOICE_POLICY,
default=REJECT, default=REJECT,
verbose_name=_("Policy for unknown port"), verbose_name=_("Policy for unknown ports"),
) )
unknown_port_vlan = models.ForeignKey( unknown_port_vlan = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
@ -625,20 +630,15 @@ class RadiusOption(AclMixin, PreferencesModel):
related_name='unknown_port_vlan', related_name='unknown_port_vlan',
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Unknown port Vlan'), verbose_name=_("Unknown ports VLAN"),
help_text=_( help_text=_("VLAN for unknown ports if not rejected")
'Vlan for unknown ports if not rejected.'
)
) )
unknown_room = models.CharField( unknown_room = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_POLICY, choices=CHOICE_POLICY,
default=REJECT, default=REJECT,
verbose_name=_( verbose_name=_("Policy for machines connecting from unregistered rooms"
"Policy for machine connecting from " " (relevant on ports with STRICT RADIUS mode)"),
"unregistered room (relevant on ports with STRICT "
"radius mode)"
),
) )
unknown_room_vlan = models.ForeignKey( unknown_room_vlan = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
@ -646,16 +646,14 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT, on_delete=models.PROTECT,
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Unknown room Vlan'), verbose_name=_("Unknown rooms VLAN"),
help_text=_( help_text=_("VLAN for unknown rooms if not rejected")
'Vlan for unknown room if not rejected.'
)
) )
non_member = models.CharField( non_member = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_POLICY, choices=CHOICE_POLICY,
default=REJECT, default=REJECT,
verbose_name=_("Policy non member users."), verbose_name=_("Policy for non members"),
) )
non_member_vlan = models.ForeignKey( non_member_vlan = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
@ -663,16 +661,14 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT, on_delete=models.PROTECT,
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Non member Vlan'), verbose_name=_("Non members VLAN"),
help_text=_( help_text=_("VLAN for non members if not rejected")
'Vlan for non members if not rejected.'
)
) )
banned = models.CharField( banned = models.CharField(
max_length=32, max_length=32,
choices=CHOICE_POLICY, choices=CHOICE_POLICY,
default=REJECT, default=REJECT,
verbose_name=_("Policy for banned users."), verbose_name=_("Policy for banned users"),
) )
banned_vlan = models.ForeignKey( banned_vlan = models.ForeignKey(
'machines.Vlan', 'machines.Vlan',
@ -680,10 +676,8 @@ class RadiusOption(AclMixin, PreferencesModel):
on_delete=models.PROTECT, on_delete=models.PROTECT,
blank=True, blank=True,
null=True, null=True,
verbose_name=_('Banned Vlan'), verbose_name=_("Banned users VLAN"),
help_text=_( help_text=_("VLAN for banned users if not rejected")
'Vlan for banned if not rejected.'
)
) )
vlan_decision_ok = models.OneToOneField( vlan_decision_ok = models.OneToOneField(
'machines.Vlan', 'machines.Vlan',

View file

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

View file

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

View file

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

View file

@ -44,11 +44,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td class="text-right"> <td class="text-right">
{% can_edit service%} {% can_edit service%}
{% include 'buttons/edit.html' with href='preferences:edit-service' id=service.id %} {% 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 %} {% acl_end %}
{% can_delete service %}
{% include 'buttons/suppr.html' with href='preferences:del-service' id=service.id %}
{% acl_end %} {% acl_end %}
{% history_button service %} {% history_button service %}
</td> </td>

View file

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

View file

@ -1,4 +1,4 @@
{% extends "topologie/sidebar.html" %} {% extends 'preferences/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% endcomment %}
{% load bootstrap3 %} {% load bootstrap3 %}
{% load i18n %}
{% block title %}Création et modification de machines{% endblock %} {% block title %}{% trans "Deletion of preferences" %}{% endblock %}
{% block content %} {% block content %}
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
<h4>Attention, voulez-vous vraiment supprimer cet objet {{ objet_name }} ( {{ objet }} ) ?</h4> <h4>{% blocktrans %}Warning: are you sure you want to delete this {{ objet_name }} object ( {{ objet }} )?{% endblocktrans %}</h4>
{% bootstrap_button "Confirmer" button_type="submit" icon="trash" %} {% trans "Confirm" as tr_confirm %}
{% bootstrap_button tr_confirm button_type="submit" icon="trash" %}
</form> </form>
<br /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "preferences/sidebar.html" %} {% extends 'preferences/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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> <tr>
<th>{% trans "General message displayed on the website" %}</th> <th>{% trans "General message displayed on the website" %}</th>
<td>{{ generaloptions.general_message }}</td> <td>{{ generaloptions.general_message }}</td>
<th>{% trans "Main site url" %}</th> <th>{% trans "Main site URL" %}</th>
<td>{{ generaloptions.main_site_url }}</td> <td>{{ generaloptions.main_site_url }}</td>
</tr> </tr>
<tr> <tr>
@ -120,7 +120,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th>{% trans "Self registration" %}</th> <th>{% trans "Self registration" %}</th>
<td>{{ useroptions.self_adhesion|tick }}</td> <td>{{ useroptions.self_adhesion|tick }}</td>
<th>{% trans "Delete not yet active users after" %}</th> <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>
<tr> <tr>
<th>{% trans "All users are active by default" %}</th> <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> </tr>
</table> </table>
<h4>Clef radius</h4> <h4>{% trans "RADIUS keys" %}</h4>
{% can_create RadiusKey%} {% 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 %} {% acl_end %}
{% include "preferences/aff_radiuskey.html" with radiuskey_list=radiuskey_list %} {% include 'preferences/aff_radiuskey.html' with radiuskey_list=radiuskey_list %}
</div> </div>
</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 panel-default" id="switches">
<div class="panel-heading" data-toggle="collapse" href="#collapse_switches"> <div class="panel-heading" data-toggle="collapse" href="#collapse_switches">
<h4 class="panel-title"> <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> </h4>
</div> </div>
<div id="collapse_switches" class="panel-collapse panel-body collapse"> <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"> <table class="table table-striped">
<tr> <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> <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> <td>{{ topologieoptions.switchs_rest_management }}</td>
</tr> </tr>
</table> </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"> <table class="table table-striped">
<tr> <tr>
<th>Switchs configurés automatiquement</th> <th>{% trans "Switches with automatic provision" %}</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> <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>
<tr> <tr>
<th>Plage d'ip de management des switchs</th> <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"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span></td> <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>
<tr> <tr>
<th>Serveur des config des switchs</th> <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"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span></td> <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>
<tr> <tr>
<th>Mode de provision des switchs</th> <th>{% trans "Provision of configuration mode for switches" %}</th>
<td>{{ topologieoptions.switchs_provision }}</td> <td>{{ topologieoptions.switchs_provision }}</td>
</tr> </tr>
<tr> <tr>
<th>Mode TFTP</th> <th>{% trans "TFTP mode" %}</th>
<td><span class="label label-success"> OK</span></td> <td><span class="label label-success">{% trans "OK" %}</span></td>
</tr> </tr>
<tr> <tr>
<th>Mode SFTP</th> <th>{% trans "SFTP mode" %}</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> <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> </tr>
</table> </table>
<h6>Creds de management des switchs</h6> <h6>{% trans "Switch management credentials" %}</h6>
{% can_create SwitchManagementCred%} {% 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 %} {% acl_end %}
<p> <p>
</p> </p>
{% if switchmanagementcred_list %}<span class="label label-success"> OK{% else %}<span class="label label-danger">Manquant{% endif %}</span> {% 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 %} {% include 'preferences/aff_switchmanagementcred.html' with switchmanagementcred_list=switchmanagementcred_list %}
</div> </div>
</div> </div>
<div class="panel panel-default" id="radius"> <div class="panel panel-default" id="radius">
<div class="panel-heading" data-toggle="collapse" href="#collapse_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>
<div id="collapse_radius" class="panel-collapse panel-body collapse"> <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' %}"> <a class="btn btn-primary btn-sm" role="button" href="{% url 'preferences:edit-options' 'RadiusOption' %}">
<i class="fa fa-edit"></i> <i class="fa fa-edit"></i>
{% trans "Edit" %} {% trans "Edit" %}
</a> </a>
{% include "preferences/aff_radiusoptions.html" %} {% include 'preferences/aff_radiusoptions.html' %}
</div> </div>
</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 panel-default" id="mail">
<div class="panel-heading" data-toggle="collapse" href="#collapse_mail"> <div class="panel-heading" data-toggle="collapse" href="#collapse_mail">
<h4 class="panel-title"> <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> </h4>
</div> </div>
<div id="collapse_mail" class="panel-collapse panel-body collapse"> <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 panel-default" id="rappels">
<div class="panel-heading" data-toggle="collapse" href="#collapse_rappels"> <div class="panel-heading" data-toggle="collapse" href="#collapse_rappels">
<h4 class="panel-title"> <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> </h4>
</div> </div>
<div id="collapse_rappels" class="panel-collapse panel-body collapse"> <div id="collapse_rappels" class="panel-collapse panel-body collapse">
{% can_create preferences.Reminder%} {% 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> <p></p>
{% acl_end %} {% acl_end %}
{% include "preferences/aff_reminder.html" with reminder_list=reminder_list %} {% include 'preferences/aff_reminder.html' with reminder_list=reminder_list %}
</div> </div>
</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> <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> <p></p>
{% acl_end %} {% acl_end %}
{% include "preferences/aff_service.html" with service_list=service_list %} {% include 'preferences/aff_service.html' with service_list=service_list %}
</div> </div>
</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"> <div id="collapse_contact" class="panel-collapse panel-body collapse">
{% can_create preferences.MailContact %} {% 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 %} {% 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> <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> </div>
<div class="panel panel-default" id="social"> <div class="panel panel-default" id="social">
<div class="panel-heading" data-toggle="collapse" href="#collapse_social"> <div class="panel-heading" data-toggle="collapse" href="#collapse_social">
<h4 class="panel-title"> <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> </h4>
</div> </div>
<div id="collapse_social" class="panel-collapse panel-body collapse"> <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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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) model = getattr(models, section, None)
form_instance = getattr(forms, 'Edit' + section + 'Form', None) form_instance = getattr(forms, 'Edit' + section + 'Form', None)
if not (model or form_instance): if not (model or form_instance):
messages.error(request, _("Unknown object")) messages.error(request, _("Unknown object."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
options_instance, _created = model.objects.get_or_create() 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""" """Suppression d'un service de la page d'accueil"""
if request.method == "POST": if request.method == "POST":
service_instance.delete() 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 redirect(reverse('preferences:display-options'))
return form( return form(
{'objet': service_instance, 'objet_name': 'service'}, {'objet': service_instance, 'objet_name': 'service'},
@ -204,7 +204,7 @@ def add_reminder(request):
messages.success(request, _("The reminder was added.")) messages.success(request, _("The reminder was added."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': reminder, 'action_name': _("Add a service")}, {'preferenceform': reminder, 'action_name': _("Add a reminder")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -220,7 +220,7 @@ def edit_reminder(request, reminder_instance, **_kwargs):
) )
if reminder.is_valid(): if reminder.is_valid():
reminder.save() reminder.save()
messages.success(request, _("The service was edited.")) messages.success(request, _("The reminder was edited."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': reminder, 'action_name': _("Edit")}, {'preferenceform': reminder, 'action_name': _("Edit")},
@ -236,7 +236,7 @@ def del_reminder(request, reminder_instance, **_kwargs):
"""Destruction d'un reminder""" """Destruction d'un reminder"""
if request.method == "POST": if request.method == "POST":
reminder_instance.delete() 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 redirect(reverse('preferences:display-options'))
return form( return form(
{'objet': reminder_instance, 'objet_name': 'reminder'}, {'objet': reminder_instance, 'objet_name': 'reminder'},
@ -252,10 +252,10 @@ def add_radiuskey(request):
radiuskey = RadiusKeyForm(request.POST or None) radiuskey = RadiusKeyForm(request.POST or None)
if radiuskey.is_valid(): if radiuskey.is_valid():
radiuskey.save() 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 redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': radiuskey, 'action_name': 'Ajouter'}, {'preferenceform': radiuskey, 'action_name': _("Add a RADIUS key")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -266,10 +266,10 @@ def edit_radiuskey(request, radiuskey_instance, **_kwargs):
radiuskey = RadiusKeyForm(request.POST or None, instance=radiuskey_instance) radiuskey = RadiusKeyForm(request.POST or None, instance=radiuskey_instance)
if radiuskey.is_valid(): if radiuskey.is_valid():
radiuskey.save() radiuskey.save()
messages.success(request, "Radiuskey modifié") messages.success(request, _("The RADIUS key was edited."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': radiuskey, 'action_name': 'Editer'}, {'preferenceform': radiuskey, 'action_name': _("Edit")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -282,10 +282,10 @@ def del_radiuskey(request, radiuskey_instance, **_kwargs):
if request.method == "POST": if request.method == "POST":
try: try:
radiuskey_instance.delete() radiuskey_instance.delete()
messages.success(request, "La radiuskey a été détruite") messages.success(request, _("The RADIUS key was deleted."))
except ProtectedError: except ProtectedError:
messages.error(request, "Erreur la\ messages.error(request, _("The RADIUS key is assigned to at least"
clef ne peut être supprimé, elle est affectée à des switchs") " one switch, you can't delete it."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'objet': radiuskey_instance, 'objet_name': 'radiuskey'}, {'objet': radiuskey_instance, 'objet_name': 'radiuskey'},
@ -301,10 +301,10 @@ def add_switchmanagementcred(request):
switchmanagementcred = SwitchManagementCredForm(request.POST or None) switchmanagementcred = SwitchManagementCredForm(request.POST or None)
if switchmanagementcred.is_valid(): if switchmanagementcred.is_valid():
switchmanagementcred.save() 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 redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': switchmanagementcred, 'action_name': 'Ajouter'}, {'preferenceform': switchmanagementcred, 'action_name': _("Add switch management credentials")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -315,10 +315,10 @@ def edit_switchmanagementcred(request, switchmanagementcred_instance, **_kwargs)
switchmanagementcred = SwitchManagementCredForm(request.POST or None, instance=switchmanagementcred_instance) switchmanagementcred = SwitchManagementCredForm(request.POST or None, instance=switchmanagementcred_instance)
if switchmanagementcred.is_valid(): if switchmanagementcred.is_valid():
switchmanagementcred.save() 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 redirect(reverse('preferences:display-options'))
return form( return form(
{'preferenceform': switchmanagementcred, 'action_name': 'Editer'}, {'preferenceform': switchmanagementcred, 'action_name': _("Edit")},
'preferences/preferences.html', 'preferences/preferences.html',
request request
) )
@ -331,10 +331,11 @@ def del_switchmanagementcred(request, switchmanagementcred_instance, **_kwargs):
if request.method == "POST": if request.method == "POST":
try: try:
switchmanagementcred_instance.delete() switchmanagementcred_instance.delete()
messages.success(request, "Ces creds ont été détruits") messages.success(request, _("The switch management credentials were deleted."))
except ProtectedError: except ProtectedError:
messages.error(request, "Erreur ces\ messages.error(request, _("The switch management credentials are"
creds ne peuvent être supprimés, ils sont affectés à des switchs") " assigned to at least one switch, you"
" can't delete them."))
return redirect(reverse('preferences:display-options')) return redirect(reverse('preferences:display-options'))
return form( return form(
{'objet': switchmanagementcred_instance, 'objet_name': 'switchmanagementcred'}, {'objet': switchmanagementcred_instance, 'objet_name': 'switchmanagementcred'},

View file

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

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2018-03-31 16:09+0002\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \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." msgid "You don't have the right to edit the history."
msgstr "Vous n'avez pas le droit de modifier l'historique." 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 #: mixins.py:111
#, python-format #, python-format
msgid "You don't have the right to create a %s object." 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 #: templates/re2o/about.html:36
msgid "" msgid ""
"Re2o is an administration tool initiated by <a href=\"https://rezometz.org/" "Re2o is an administration tool initiated by <a href=\"https://rezometz.org/"
"\">Rezo Metz</a> and a few members of other <a href=\"https://" "\">Rezo Metz</a> and a few members of other <a href=\"https://federez.net"
"federez.net\">FedeRez</a> associations around the summer 2016.<br /> It is " "\">FedeRez</a> associations around the summer 2016.<br /> It is intended to "
"intended to be a tool independant from any network infrastructure so it can " "be a tool independant from any network infrastructure so it can be setup in "
"be setup in \"a few steps\". This tool is entirely free and available under " "\"a few steps\". This tool is entirely free and available under a GNU Public "
"a GNU Public License v2 (GPLv2) license on <a href=\"https://gitlab.federez." "License v2 (GPLv2) license on <a href=\"https://gitlab.federez.net/federez/"
"net/federez/re2o/\">FedeRez gitlab</a>.<br /> Re2o's mainteners are " "re2o/\">FedeRez gitlab</a>.<br /> Re2o's mainteners are volunteers mainly "
"volunteers mainly from French schools. <br /> If you want to get involved in " "from French schools. <br /> If you want to get involved in the development "
"the development process, we will be glad to welcome you so do not hesitate " "process, we will be glad to welcome you so do not hesitate to contact us and "
"to contact us and come help us build the future of Re2o." "come help us build the future of Re2o."
msgstr "" msgstr ""
"Re2o est un outil d'administration initié par <a href=\"https://rezometz.org/" "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=" "\">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" msgid "Welcome to %(name_website)s"
msgstr "Bienvenue sur %(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" msgid "Registration"
msgstr "Inscription" msgstr "Inscription"
@ -202,17 +210,25 @@ msgstr ""
"Si vous n'avez pas encore de compte et que vous voulez accéder à Internet et " "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." "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" msgid "Logging in"
msgstr "Identification" msgstr "Identification"
#: templates/re2o/index.html:56 #: templates/re2o/index.html:56
msgid "" 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." "the organisation, your machines and all your services."
msgstr "" msgstr ""
"Si vous avez déjà un compte, identifiez-vous. Vous pouvez gérer votre " "Si vous avez déjà un compte, identifiez-vous. Vous pouvez gérer vos "
"cotisation à l'association, vos machines et tous vos services." "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 #: templates/re2o/index.html:68
msgid "My profile" msgid "My profile"
@ -220,10 +236,10 @@ msgstr "Mon profil"
#: templates/re2o/index.html:69 #: templates/re2o/index.html:69
msgid "" 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." "your profile."
msgstr "" 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." "votre profil."
#: templates/re2o/index.html:70 #: templates/re2o/index.html:70
@ -249,5 +265,5 @@ msgid "Follow @%(twitter_account_name)s"
msgstr "Suivre @%(twitter_account_name)s" msgstr "Suivre @%(twitter_account_name)s"
#: views.py:87 #: views.py:87
msgid "Unable to get the information" msgid "Unable to get the information."
msgstr "Impossible d'obtenir l'information" msgstr "Impossible d'obtenir l'information."

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %} {% extends 're2o/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block content %}
<h2>{% blocktrans %}History of {{ object }}{% endblocktrans %}</h2> <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 /> <br />
<br /> <br />

View file

@ -1,4 +1,4 @@
{% extends "re2o/sidebar.html" %} {% extends 're2o/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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"> <div class="caption">
<h3>{% trans "Registration" %}</h3> <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>{% 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> </div>
</div> </div>
@ -53,8 +53,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="thumbnail"> <div class="thumbnail">
<div class="caption"> <div class="caption">
<h3>{% trans "Logging in" %}</h3> <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>{% 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 "Logging in" %}</a></p> <p><a href="{% url 'login' %}" class="btn btn-primary" role="button">{% trans "Log in" %}</a></p>
</div> </div>
</div> </div>
</div> </div>
@ -66,7 +66,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="thumbnail"> <div class="thumbnail">
<div class="caption"> <div class="caption">
<h3>{% trans "My profile" %}</h3> <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> <p><a href="{% url 'users:mon-profil' %}" class="btn btn-primary" role="button">{% trans "Access my profile" %}</a></p>
</div> </div>
</div> </div>

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 = last_commit.hexsha
git_info_commit_date = last_commit.committed_datetime git_info_commit_date = last_commit.committed_datetime
except: 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_remote = NO_GIT_MSG
git_info_branch = NO_GIT_MSG git_info_branch = NO_GIT_MSG
git_info_commit = NO_GIT_MSG git_info_commit = NO_GIT_MSG

View file

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

View file

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

View file

@ -1,4 +1,4 @@
{% extends "search/sidebar.html" %} {% extends 'search/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% block content %}
{% if users %} {% if users %}
<h2>{% trans "Results among users:" %}</h2> <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%} {% endif%}
{% if clubs %} {% if clubs %}
<h2>{% trans "Results among clubs:" %}</h2> <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%} {% endif%}
{% if machines %} {% if machines %}
<h2>{% trans "Results among machines:" %}</h2> <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 %} {% endif %}
{% if factures %} {% if factures %}
<h2>{% trans "Results among invoices:" %}</h2> <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 %} {% endif %}
{% if whitelists %} {% if whitelists %}
<h2>{% trans "Results among whitelists:" %}</h2> <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 %} {% endif %}
{% if bans %} {% if bans %}
<h2>{% trans "Results among bans:" %}</h2> <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 %} {% endif %}
{% if rooms %} {% if rooms %}
<h2>{% trans "Results among rooms:" %}</h2> <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 %} {% endif %}
{% if ports %} {% if ports %}
<h2>{% trans "Results among ports" %}</h2> <h2>{% trans "Results among ports:" %}</h2>
{% include "topologie/aff_port.html" with port_list=ports search=True %} {% include 'topologie/aff_port.html' with port_list=ports search=True %}
{% endif %} {% endif %}
{% if switches %} {% if switches %}
<h2>{% trans "Results among switches" %}</h2> <h2>{% trans "Results among switches:" %}</h2>
{% include "topologie/aff_switch.html" with switch_list=switches %} {% include 'topologie/aff_switch.html' with switch_list=switches %}
{% endif %} {% 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 %} {% 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> <h3>{% trans "No result" %}</h3>

View file

@ -1,4 +1,4 @@
{% extends "search/sidebar.html" %} {% extends 'search/sidebar.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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"> <form class="form">
{% bootstrap_field search_form.q %} {% bootstrap_field search_form.q %}
{% if search_form.u %} {% 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 %} {% endif %}
{% if search_form.a %} {% 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 %} {% endif %}
{% if search_form.s %} {% if search_form.s %}
{% bootstrap_field search_form.s %} {% bootstrap_field search_form.s %}

View file

@ -1,4 +1,4 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% comment %} {% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il 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 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 %} {% load i18n %}
{% block sidebar %} {% 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> <i class="fa fa-search"></i>
{% trans "Simple search" %} {% trans "Simple search" %}
</a> </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> <i class="fa fa-search-plus"></i>
{% trans "Advanced search" %} {% trans "Advanced search" %}
</a> </a>

View file

@ -96,14 +96,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<li class="dropdown"> <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> <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"> <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' %}"><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-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-room' %}"><i class="fa fa-home"></i> {% trans "Rooms" %}</a></li>
</ul> </ul>
</li> </li>
{% acl_end %} {% acl_end %}
{% can_view_app logs %} {% 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 %} {% acl_end %}
{% can_view_app preferences %} {% can_view_app preferences %}
<li> <li>
@ -137,12 +137,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% else %} {% else %}
{% can_view_any_app users machines cotisations %} {% can_view_any_app users machines cotisations %}
<li> <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"> <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 %}> <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"> <div class="input-group-btn">
<button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button> <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>
</div> </div>
</form> </form>
@ -153,7 +153,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<li class="dropdown"> <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> <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"> <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> <li><a id="toggle_login" href="{% url 'logout' %}"><i class="fa fa-sign-out"></i> {% trans "Log out" %}</a></li>
</ul> </ul>
</li> </li>
@ -200,7 +200,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th scope="row">{% trans "Internet access" %}</th> <th scope="row">{% trans "Internet access" %}</th>
<td class="text-right"> <td class="text-right">
{% if request_user.has_access %} {% 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 %} {% else %}
<i class="text-danger">{% trans "Disabled" %}</i> <i class="text-danger">{% trans "Disabled" %}</i>
{% endif %} {% endif %}
@ -210,15 +210,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<th scope="row">{% trans "Membership" %}</th> <th scope="row">{% trans "Membership" %}</th>
<td class="text-right"> <td class="text-right">
{% if request_user.is_adherent %} {% 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 %} {% else %}
<i class="text-danger">{% trans "Not a member" %}</i> <i class="text-danger">{% trans "Non member" %}</i>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
</table> </table>
<div class="list-group"> <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> <i class="fa fa-user-circle"></i>
{% trans "View my profile" %} {% trans "View my profile" %}
</a> </a>
@ -236,10 +236,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</div> </div>
<ul class="list-group"> <ul class="list-group">
{% for interface in interfaces|slice:":5" %} {% for interface in interfaces|slice:":5" %}
<div class="list-group-item">{{interface}}</div> <div class="list-group-item">{{ interface }}</div>
{% endfor %} {% endfor %}
{% if interfaces|length > 5 %} {% 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> <i class="fa fa-plus"></i>
{% trans "View my machines" %} {% trans "View my machines" %}
</a> </a>

View file

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

View file

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

View file

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2.5\n" "Project-Id-Version: 2.5\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2018-06-25 14:53+0200\n"
"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n" "Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
"Language-Team: \n" "Language-Team: \n"
@ -34,11 +34,11 @@ msgstr ""
msgid "You don't have the right to view this application." msgid "You don't have the right to view this application."
msgstr "Vous n'avez pas le droit de voir cette application." msgstr "Vous n'avez pas le droit de voir cette application."
#: forms.py:179 #: forms.py:181
msgid "Start:" msgid "Start:"
msgstr "Début :" msgstr "Début :"
#: forms.py:180 #: forms.py:182
msgid "End:" msgid "End:"
msgstr "Fin :" msgstr "Fin :"
@ -79,119 +79,204 @@ msgid "Number of ports"
msgstr "Nombre de ports" msgstr "Nombre de ports"
#: models.py:228 templates/topologie/aff_switch.html:48 #: 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" msgid "Switch model"
msgstr "Modèle de commutateur réseau" 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" msgid "Can view a switch object"
msgstr "Peut voir un objet commutateur réseau" msgstr "Peut voir un objet commutateur réseau"
#: models.py:260 #: models.py:261
msgid "switch" msgid "switch"
msgstr "commutateur réseau" msgstr "commutateur réseau"
#: models.py:261 #: models.py:262
msgid "switches" msgid "switches"
msgstr "commutateurs réseau" msgstr "commutateurs réseau"
#: models.py:272 #: models.py:273
msgid "The switch ID exceeds the limits allowed by the stack." 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." 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." msgid "The stack member ID can't be void."
msgstr "L'ID de membre dans la pile ne peut-être vide." 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." msgid "The end port is less than the start port."
msgstr "Le port de fin est inférieur au port de début." 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." msgid "This switch can't have that many ports."
msgstr "Ce commutateur réseau ne peut pas avoir autant de ports." msgstr "Ce commutateur réseau ne peut pas avoir autant de ports."
#: models.py:306 #: models.py:295
msgid "Creation" msgid "Creation"
msgstr "Création" msgstr "Création"
#: models.py:308 #: models.py:406
msgid "Creation of an existing port." msgid "The switch model is modular."
msgstr "Création d'un port existant." 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" msgid "Can view a switch model object"
msgstr "Peut voir un objet modèle de commutateur réseau" msgstr "Peut voir un objet modèle de commutateur réseau"
#: models.py:410 #: models.py:417
msgid "switch model" msgid "switch model"
msgstr "modèle de commutateur réseau" msgstr "modèle de commutateur réseau"
#: models.py:411 #: models.py:418
msgid "switch models" msgid "switch models"
msgstr "modèles de commutateur réseau" 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" msgid "Can view a switch constructor object"
msgstr "Peut voir un objet constructeur de commutateur réseau" msgstr "Peut voir un objet constructeur de commutateur réseau"
#: models.py:427 #: models.py:487
msgid "switch constructor" msgid "switch constructor"
msgstr "constructeur de commutateur réseau" msgstr "constructeur de commutateur réseau"
#: models.py:450 #: models.py:510
msgid "Can view a switch bay object" msgid "Can view a switch bay object"
msgstr "Peut voir un objet baie de brassage" msgstr "Peut voir un objet baie de brassage"
#: models.py:452 #: models.py:512
msgid "switch bay" msgid "switch bay"
msgstr "baie de brassage" msgstr "baie de brassage"
#: models.py:453 #: models.py:513
msgid "switch bays" msgid "switch bays"
msgstr "baies de brassage" msgstr "baies de brassage"
#: models.py:466 #: models.py:526
msgid "Can view a building object" msgid "Can view a building object"
msgstr "Peut voir un objet bâtiment" msgstr "Peut voir un objet bâtiment"
#: models.py:468 #: models.py:528
msgid "building" msgid "building"
msgstr "bâtiment" msgstr "bâtiment"
#: models.py:469 #: models.py:529
msgid "buildings" msgid "buildings"
msgstr "bâtiments" msgstr "bâtiments"
#: models.py:525 #: models.py:588 models.py:589
msgid "Port state Active" msgid "Port state Active"
msgstr "État du port Actif" msgstr "État du port Actif"
#: models.py:532 #: models.py:596
msgid "Can view a port object" msgid "Can view a port object"
msgstr "Peut voir un objet port" msgstr "Peut voir un objet port"
#: models.py:534 #: models.py:598
msgid "port" msgid "port"
msgstr "port" msgstr "port"
#: models.py:535 #: models.py:599
msgid "ports" msgid "ports"
msgstr "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." msgid "The port can't exist, its number is too great."
msgstr "Le port ne peut pas exister, son numéro est trop grand." 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." msgid "Room, interface and related port are mutually exclusive."
msgstr "Chambre, interface et port relié sont mutuellement exclusifs." msgstr "Chambre, interface et port relié sont mutuellement exclusifs."
#: models.py:623 #: models.py:687
msgid "A port can't be related to itself." msgid "A port can't be related to itself."
msgstr "Un port ne peut être relié à lui-même." msgstr "Un port ne peut être relié à lui-même."
#: models.py:627 #: models.py:691
msgid "" msgid ""
"The related port is already used, please clear it before creating the " "The related port is already used, please clear it before creating the "
"relation." "relation."
@ -199,124 +284,146 @@ msgstr ""
"Le port relié est déjà utilisé, veuillez le modifier avant de créer la " "Le port relié est déjà utilisé, veuillez le modifier avant de créer la "
"relation." "relation."
#: models.py:648 #: models.py:712
msgid "Can view a room object" msgid "Can view a room object"
msgstr "Peut voir un objet chambre" msgstr "Peut voir un objet chambre"
#: models.py:650 #: models.py:714
msgid "room" msgid "room"
msgstr "chambre" msgstr "chambre"
#: models.py:651 #: models.py:715
msgid "rooms" msgid "rooms"
msgstr "chambres" 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" msgid "Name"
msgstr "Nom" msgstr "Nom"
#: models.py:692 #: models.py:756
msgid "Default profile" msgid "Default profile"
msgstr "Profil par défaut" msgstr "Profil par défaut"
#: models.py:700 #: models.py:764
msgid "VLAN untagged" msgid "VLAN untagged"
msgstr "VLAN untagged" msgstr "VLAN untagged"
#: models.py:706 #: models.py:770
msgid "VLAN(s) tagged" msgid "VLAN(s) tagged"
msgstr "VLAN(s) tagged" msgstr "VLAN(s) tagged"
#: models.py:711 #: models.py:775
msgid "Type of RADIUS authentication : inactive, MAC-address or 802.1X" msgid "Type of RADIUS authentication : inactive, MAC-address or 802.1X"
msgstr "Type d'authentification RADIUS : inactive, MAC-address ou 802.1X" msgstr "Type d'authentification RADIUS : inactive, MAC-address ou 802.1X"
#: models.py:713 #: models.py:777
msgid "RADIUS type" msgid "RADIUS type"
msgstr "Type de RADIUS" msgstr "Type de RADIUS"
#: models.py:719 #: models.py:783
msgid "In case of MAC-authentication : mode COMMON or STRICT on this port" msgid "In case of MAC-authentication : mode COMMON or STRICT on this port"
msgstr "" msgstr ""
"Dans le cas d'authentification par adresse MAC : mode COMMON ou STRICT sur " "Dans le cas d'authentification par adresse MAC : mode COMMON ou STRICT sur "
"ce port" "ce port"
#: models.py:721 #: models.py:785
msgid "RADIUS mode" msgid "RADIUS mode"
msgstr "Mode de RADIUS" msgstr "Mode de RADIUS"
#: models.py:727 #: models.py:791
msgid "Port speed limit" msgid "Port speed limit"
msgstr "Limite de vitesse du port" msgstr "Limite de vitesse du port"
#: models.py:732 #: models.py:796
msgid "Limit of MAC-address on this port" msgid "Limit of MAC-address on this port"
msgstr "Limite de MAC-address sur ce port" msgstr "Limite de MAC-address sur ce port"
#: models.py:733 #: models.py:797
msgid "MAC limit" msgid "MAC limit"
msgstr "Limite MAC" msgstr "Limite MAC"
#: models.py:737 #: models.py:801
msgid "Flow control" msgid "Flow control"
msgstr "Contrôle du flux" msgstr "Contrôle du flux"
#: models.py:741 #: models.py:805
msgid "Protect against rogue DHCP" msgid "Protect against rogue DHCP"
msgstr "Protège contre les DHCP pirates" msgstr "Protège contre les DHCP pirates"
#: models.py:742 #: models.py:806 templates/topologie/aff_vlanoptions.html:36
msgid "DHCP snooping" msgid "DHCP snooping"
msgstr "DHCP snooping" msgstr "DHCP snooping"
#: models.py:746 #: models.py:810
msgid "Protect against rogue DHCPv6" msgid "Protect against rogue DHCPv6"
msgstr "Protège contre les DHCPv6 pirates" msgstr "Protège contre les DHCPv6 pirates"
#: models.py:747 #: models.py:811 templates/topologie/aff_vlanoptions.html:37
msgid "DHCPv6 snooping" msgid "DHCPv6 snooping"
msgstr "DHCPv6 snooping" msgstr "DHCPv6 snooping"
#: models.py:751 #: models.py:815
msgid "Check if IP adress is DHCP assigned" msgid "Check if IP adress is DHCP assigned"
msgstr "Vérifie si l'adresse IP est attribuée par DHCP" msgstr "Vérifie si l'adresse IP est attribuée par DHCP"
#: models.py:752 #: models.py:816
msgid "ARP protection" msgid "ARP protection"
msgstr "Protection ARP" msgstr "Protection ARP"
#: models.py:756 #: models.py:820
msgid "Protect against rogue RA" msgid "Protect against rogue RA"
msgstr "Protège contre les RA pirates" msgstr "Protège contre les RA pirates"
#: models.py:757 #: models.py:821
msgid "RA guard" msgid "RA guard"
msgstr "RA guard" msgstr "RA guard"
#: models.py:761 #: models.py:825
msgid "Protect against loop" 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" msgid "Loop protection"
msgstr "Protection contre une boucle" msgstr "Protection contre une boucle"
#: models.py:767 #: models.py:831
msgid "Can view a port profile object" msgid "Can view a port profile object"
msgstr "Peut voir un objet profil de port" msgstr "Peut voir un objet profil de port"
#: models.py:769 #: models.py:833
msgid "port profile" msgid "port profile"
msgstr "profil de port" msgstr "profil de port"
#: models.py:770 #: models.py:834
msgid "port profiles" msgid "port profiles"
msgstr "profils de port" 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 #: templates/topologie/aff_ap.html:38
msgid "MAC address" msgid "MAC address"
msgstr "Adresse MAC" msgstr "Adresse MAC"
@ -336,44 +443,24 @@ msgstr "Détails"
msgid "Location" msgid "Location"
msgstr "Emplacement" 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_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" msgid "Building"
msgstr "Bâtiment" msgstr "Bâtiment"
#: templates/topologie/aff_chambres.html:36 #: templates/topologie/aff_building.html:38
#: templates/topologie/aff_port.html:38 views.py:767 #: templates/topologie/index_ap.html:33 templates/topologie/sidebar.html:47
msgid "Room" msgid "Access points"
msgstr "Chambre" msgstr "Points d'accès sans fil"
#: templates/topologie/aff_constructor_switch.html:36 #: 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" msgid "Switch constructor"
msgstr "Constructeur de commutateur réseau" msgstr "Constructeur de commutateur réseau"
#: templates/topologie/aff_model_switch.html:36 #: templates/topologie/aff_model_switch.html:36
#: templates/topologie/aff_modules.html:36
#: templates/topologie/aff_modules.html:81
msgid "Reference" msgid "Reference"
msgstr "Référence" msgstr "Référence"
@ -382,20 +469,27 @@ msgid "Commercial name"
msgstr "Nom commercial" msgstr "Nom commercial"
#: templates/topologie/aff_model_switch.html:42 #: 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" msgid "Switches"
msgstr "Commutateurs réseau" 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 #: templates/topologie/aff_port.html:33
msgid "Port" msgid "Port"
msgstr "Port" msgstr "Port"
#: templates/topologie/aff_port.html:36
#, fuzzy
#| msgid "Switch:"
msgid "Switch"
msgstr "Commutateur réseau :"
#: templates/topologie/aff_port.html:40 #: templates/topologie/aff_port.html:40
msgid "Interface" msgid "Interface"
msgstr "Interface" msgstr "Interface"
@ -408,7 +502,7 @@ msgstr "Port relié"
msgid "Port state" msgid "Port state"
msgstr "État du port" 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" msgid "Port profile"
msgstr "Profil de port" msgstr "Profil de port"
@ -464,6 +558,11 @@ msgstr "Type de RADIUS : "
msgid "RADIUS mode: " msgid "RADIUS mode: "
msgstr "Mode de RADIUS : " 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_stacks.html:32
#: templates/topologie/aff_switch.html:45 #: templates/topologie/aff_switch.html:45
#: templates/topologie/edit_stack_sw.html:32 #: templates/topologie/edit_stack_sw.html:32
@ -472,6 +571,7 @@ msgid "Stack"
msgstr "Pile" msgstr "Pile"
#: templates/topologie/aff_stacks.html:34 #: templates/topologie/aff_stacks.html:34
#: templates/topologie/aff_vlanoptions.html:33
msgid "ID" msgid "ID"
msgstr "ID" msgstr "ID"
@ -485,7 +585,7 @@ msgstr "Nom DNS"
#: templates/topologie/aff_switch.html:41 #: templates/topologie/aff_switch.html:41
#: templates/topologie/aff_switch_bay.html:36 #: 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" msgid "Switch bay"
msgstr "Baie de brassage" msgstr "Baie de brassage"
@ -510,10 +610,22 @@ msgstr "Informations"
msgid "Switches of the bay" msgid "Switches of the bay"
msgstr "Commutateurs réseau de la baie" 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/delete.html:29 templates/topologie/index.html:30
#: templates/topologie/index_ap.html:30 #: templates/topologie/index_ap.html:30
#: templates/topologie/index_model_switch.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_physical_grouping.html:30
#: templates/topologie/index_portprofile.html:29 #: templates/topologie/index_portprofile.html:29
#: templates/topologie/index_room.html:30 templates/topologie/switch.html:30 #: 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" msgid " Add a switch"
msgstr " Ajouter un commutateur réseau" 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 #: templates/topologie/index_ap.html:35
msgid " Add an access point" msgid " Add an access point"
msgstr " Ajouter un point d'accès sans fil" msgstr " Ajouter un point d'accès sans fil"
@ -566,22 +674,18 @@ msgstr "Constructeurs de commutateur réseau"
msgid " Add a switch constructor" msgid " Add a switch constructor"
msgstr " Ajouter un constructeur de commutateur réseau" 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 #: templates/topologie/index_p.html:33
msgid "Switch:" msgid "Switch:"
msgstr "Commutateur réseau :" 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 #: templates/topologie/index_physical_grouping.html:33
msgid "Stacks" msgid "Stacks"
msgstr "Piles" msgstr "Piles"
@ -607,7 +711,7 @@ msgid " Add a building"
msgstr " Ajouter un bâtiment" msgstr " Ajouter un bâtiment"
#: templates/topologie/index_portprofile.html:34 #: templates/topologie/index_portprofile.html:34
#: templates/topologie/sidebar.html:39 #: templates/topologie/sidebar.html:43
msgid "Port profiles" msgid "Port profiles"
msgstr "Profils de port" msgstr "Profils de port"
@ -616,8 +720,8 @@ msgid " Add a port profile"
msgstr " Ajouter un profil de port" msgstr " Ajouter un profil de port"
#: templates/topologie/index_portprofile.html:42 #: templates/topologie/index_portprofile.html:42
msgid "Sécurité par vlan" msgid "VLAN security"
msgstr "" msgstr "Sécurité de VLAN"
#: templates/topologie/index_room.html:33 #: templates/topologie/index_room.html:33
msgid "Rooms" msgid "Rooms"
@ -631,11 +735,11 @@ msgstr " Ajouter une chambre"
msgid "Rooms and premises" msgid "Rooms and premises"
msgstr "Chambres et locaux" msgstr "Chambres et locaux"
#: templates/topologie/sidebar.html:47 #: templates/topologie/sidebar.html:51
msgid "Physical grouping" msgid "Physical grouping"
msgstr "Groupements physiques" msgstr "Groupements physiques"
#: templates/topologie/sidebar.html:51 #: templates/topologie/sidebar.html:55
msgid "Switch models and constructors" msgid "Switch models and constructors"
msgstr "Modèles et constructeurs de commutateur réseau" 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" msgid "Specific settings for the switch"
msgstr "Réglages spécifiques pour le commutateur réseau" 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" msgid "Create"
msgstr "Créer" 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" msgid "Create or edit"
msgstr "Créer ou modifier" 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." msgid "Nonexistent switch."
msgstr "Commutateur réseau inexistant." msgstr "Commutateur réseau inexistant."
#: views.py:348 #: views.py:371
msgid "The port was added." msgid "The port was added."
msgstr "Le port a été ajouté." msgstr "Le port a été ajouté."
#: views.py:350 #: views.py:373
msgid "The port already exists." msgid "The port already exists."
msgstr "Le port existe déjà." msgstr "Le port existe déjà."
#: views.py:356 views.py:728 views.py:783 views.py:842 views.py:897 #: views.py:379 views.py:1135
#: views.py:952
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
#: views.py:371 #: views.py:394
msgid "The port was edited." msgid "The port was edited."
msgstr "Le port a été modifié." msgstr "Le port a été modifié."
#: views.py:394 #: views.py:417
msgid "The port was deleted." msgid "The port was deleted."
msgstr "Le port a été supprimé." msgstr "Le port a été supprimé."
#: views.py:398 #: views.py:421
#, python-format #, python-format
msgid "The port %s is used by another object, impossible to delete it." 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." 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." msgid "The stack was created."
msgstr "La pile a été créée." msgstr "La pile a été créée."
#: views.py:447 #: views.py:470
msgid "The stack was deleted." msgid "The stack was deleted."
msgstr "La pile a été supprimée." msgstr "La pile a été supprimée."
#: views.py:451 #: views.py:474
#, python-format #, python-format
msgid "The stack %s is used by another object, impossible to deleted it." msgid "The stack %s is used by another object, impossible to deleted it."
msgstr "" msgstr ""
"La pile %s est utilisée par un autre objet, impossible de la supprimer." "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 "" msgid ""
"The organisation's user doesn't exist yet, please create or link it in the " "The organisation's user doesn't exist yet, please create or link it in the "
"preferences." "preferences."
@ -717,117 +831,113 @@ msgstr ""
"L'utilisateur de l'association n'existe pas encore, veuillez le créer ou le " "L'utilisateur de l'association n'existe pas encore, veuillez le créer ou le "
"relier dans les préférences." "relier dans les préférences."
#: views.py:508 #: views.py:531
msgid "The switch was created." msgid "The switch was created."
msgstr "Le commutateur réseau a été créé." msgstr "Le commutateur réseau a été créé."
#: views.py:531 #: views.py:568
msgid "Nonexistent switch"
msgstr "Commutateur réseau inexistant."
#: views.py:551
msgid "The ports were created." msgid "The ports were created."
msgstr "Les ports ont été créés." msgstr "Les ports ont été créés."
#: views.py:595 #: views.py:612
msgid "The switch was edited." msgid "The switch was edited."
msgstr "Le commutateur réseau a été modifié." msgstr "Le commutateur réseau a été modifié."
#: views.py:649 #: views.py:666
msgid "The access point was created." msgid "The access point was created."
msgstr "Le point d'accès sans fil a été créé." msgstr "Le point d'accès sans fil a été créé."
#: views.py:702 #: views.py:719
msgid "The access point was edited." msgid "The access point was edited."
msgstr "Le point d'accès sans fil a été modifié." msgstr "Le point d'accès sans fil a été modifié."
#: views.py:725 #: views.py:742
msgid "The room was created." msgid "The room was created."
msgstr "La chambre a été créée." msgstr "La chambre a été créée."
#: views.py:742 #: views.py:759
msgid "The room was edited." msgid "The room was edited."
msgstr "La chambre a été modifiée." msgstr "La chambre a été modifiée."
#: views.py:758 #: views.py:775
msgid "The room was deleted." msgid "The room was deleted."
msgstr "La chambre a été supprimée." msgstr "La chambre a été supprimée."
#: views.py:762 #: views.py:779
#, python-format #, python-format
msgid "The room %s is used by another object, impossible to deleted it." msgid "The room %s is used by another object, impossible to deleted it."
msgstr "" msgstr ""
"La chambre %s est utilisée par un autre objet, impossible de la supprimer." "La chambre %s est utilisée par un autre objet, impossible de la supprimer."
#: views.py:780 #: views.py:797
msgid "The swich model was created." msgid "The switch model was created."
msgstr "Le modèle de commutateur réseau a été créé." msgstr "Le modèle de commutateur réseau a été créé."
#: views.py:801 #: views.py:818
msgid "The switch model was edited." msgid "The switch model was edited."
msgstr "Le modèle de commutateur réseau a été modifié." msgstr "Le modèle de commutateur réseau a été modifié."
#: views.py:817 #: views.py:834
msgid "The switch model was deleted." msgid "The switch model was deleted."
msgstr "Le modèle de commutateur réseau a été supprimé." msgstr "Le modèle de commutateur réseau a été supprimé."
#: views.py:821 #: views.py:838
#, python-format #, python-format
msgid "The switch model %s is used by another object, impossible to delete it." msgid "The switch model %s is used by another object, impossible to delete it."
msgstr "" msgstr ""
"Le modèle de commutateur réseau %s est utilisé par un autre objet, " "Le modèle de commutateur réseau %s est utilisé par un autre objet, "
"impossible de le supprimer." "impossible de le supprimer."
#: views.py:839 #: views.py:856
msgid "The switch bay was created." msgid "The switch bay was created."
msgstr "La baie de brassage a été créée." msgstr "La baie de brassage a été créée."
#: views.py:856 #: views.py:873
msgid "The switch bay was edited." msgid "The switch bay was edited."
msgstr "La baie de brassage a été modifiée." msgstr "La baie de brassage a été modifiée."
#: views.py:872 #: views.py:889
msgid "The switch bay was deleted." msgid "The switch bay was deleted."
msgstr "La baie de brassage a été supprimée." msgstr "La baie de brassage a été supprimée."
#: views.py:876 #: views.py:893
#, python-format #, python-format
msgid "The switch bay %s is used by another object, impossible to delete it." msgid "The switch bay %s is used by another object, impossible to delete it."
msgstr "" msgstr ""
"La baie de brassage %s est utilisée par un autre objet, impossible de la " "La baie de brassage %s est utilisée par un autre objet, impossible de la "
"supprimer." "supprimer."
#: views.py:894 #: views.py:911
msgid "The building was created." msgid "The building was created."
msgstr "Le bâtiment a été créé." msgstr "Le bâtiment a été créé."
#: views.py:911 #: views.py:928
msgid "The building was edited." msgid "The building was edited."
msgstr "Le bâtiment a été modifié." msgstr "Le bâtiment a été modifié."
#: views.py:927 #: views.py:944
msgid "The building was deleted." msgid "The building was deleted."
msgstr "Le bâtiment a été supprimé." msgstr "Le bâtiment a été supprimé."
#: views.py:931 #: views.py:948
#, python-format #, python-format
msgid "The building %s is used by another object, impossible to delete it." msgid "The building %s is used by another object, impossible to delete it."
msgstr "" msgstr ""
"Le bâtiment %s est utilisé par un autre objet, impossible de le supprimer." "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." msgid "The switch constructor was created."
msgstr "Le constructeur de commutateur réseau a été créé." msgstr "Le constructeur de commutateur réseau a été créé."
#: views.py:970 #: views.py:987
msgid "The switch constructor was edited." msgid "The switch constructor was edited."
msgstr "Le constructeur de commutateur réseau a été modifié." msgstr "Le constructeur de commutateur réseau a été modifié."
#: views.py:986 #: views.py:1003
msgid "The switch constructor was deleted." msgid "The switch constructor was deleted."
msgstr "Le constructeur de commutateur réseau a été supprimé." msgstr "Le constructeur de commutateur réseau a été supprimé."
#: views.py:990 #: views.py:1007
#, python-format #, python-format
msgid "" msgid ""
"The switch constructor %s is used by another object, impossible to delete it." "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, " "Le constructeur de commutateur réseau %s est utilisé par un autre objet, "
"impossible de le supprimer." "impossible de le supprimer."
#: views.py:1007 #: views.py:1024
msgid "The port profile was created." msgid "The port profile was created."
msgstr "Le profil de port a été créé." msgstr "Le profil de port a été créé."
#: views.py:1025 #: views.py:1042
msgid "The port profile was edited." msgid "The port profile was edited."
msgstr "Le profil de port a été modifié." msgstr "Le profil de port a été modifié."
#: views.py:1042 #: views.py:1059
msgid "The port profile was deleted." msgid "The port profile was deleted."
msgstr "Le profil de port a été supprimé." msgstr "Le profil de port a été supprimé."
#: views.py:1045 #: views.py:1062
msgid "Impossible to delete the port profile." msgid "Impossible to delete the port profile."
msgstr "Impossible de supprimer le profil de port." 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 "" msgid ""
"The default Django template isn't used. This can lead to rendering errors. " "The default Django template isn't used. This can lead to rendering errors. "
"Check the parameters." "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, blank=True,
null=True, null=True,
on_delete=models.PROTECT, on_delete=models.PROTECT,
help_text="Clef radius du switch" help_text=_("RADIUS key of the switch")
) )
management_creds = models.ForeignKey( management_creds = models.ForeignKey(
'preferences.SwitchManagementCred', 'preferences.SwitchManagementCred',
blank=True, blank=True,
null=True, null=True,
on_delete=models.PROTECT, on_delete=models.PROTECT,
help_text="Identifiant de management de ce switch" help_text=_("Management credentials for the switch")
) )
automatic_provision = models.BooleanField( automatic_provision = models.BooleanField(
default=False, 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( is_modular = models.BooleanField(
default=False, default=False,
help_text=_("Is this switch model modular"), help_text=_("The switch model is modular."),
) )
is_itself_module = models.BooleanField( is_itself_module = models.BooleanField(
default=False, default=False,
help_text=_("Is the switch, itself, considered as a module"), help_text=_("The switch is considered as a module."),
) )
class Meta: class Meta:
@ -441,9 +441,10 @@ class ModuleSwitch(AclMixin, RevMixin, models.Model):
class Meta: class Meta:
permissions = ( 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): def __str__(self):
@ -462,13 +463,15 @@ class ModuleOnSwitch(AclMixin, RevMixin, models.Model):
class Meta: class Meta:
permissions = ( 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'] unique_together = ['slot', 'switch']
def __str__(self): 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): class ConstructorSwitch(AclMixin, RevMixin, models.Model):
@ -582,7 +585,7 @@ class Port(AclMixin, RevMixin, models.Model):
) )
state = models.BooleanField( state = models.BooleanField(
default=True, default=True,
help_text='Port state Active', help_text=_("Port state Active"),
verbose_name=_("Port state Active") verbose_name=_("Port state Active")
) )
details = models.CharField(max_length=255, blank=True) details = models.CharField(max_length=255, blank=True)
@ -599,13 +602,13 @@ class Port(AclMixin, RevMixin, models.Model):
def pretty_name(self): def pretty_name(self):
"""More elaborated name for label on switch conf""" """More elaborated name for label on switch conf"""
if self.related: if self.related:
return "Uplink : " + self.related.switch.short_name return _("Uplink: ") + self.related.switch.short_name
elif self.machine_interface: elif self.machine_interface:
return "Machine : " + str(self.machine_interface.domain) return _("Machine: ") + str(self.machine_interface.domain)
elif self.room: elif self.room:
return "Chambre : " + str(self.room) return _("Room: ") + str(self.room)
else: else:
return "Inconnue" return _("Unknown")
@cached_property @cached_property
def get_port_profile(self): def get_port_profile(self):
@ -720,7 +723,7 @@ class PortProfile(AclMixin, RevMixin, models.Model):
TYPES = ( TYPES = (
('NO', 'NO'), ('NO', 'NO'),
('802.1X', '802.1X'), ('802.1X', '802.1X'),
('MAC-radius', 'MAC-radius'), ('MAC-radius', _("MAC-RADIUS")),
) )
MODES = ( MODES = (
('STRICT', 'STRICT'), ('STRICT', 'STRICT'),
@ -737,11 +740,11 @@ class PortProfile(AclMixin, RevMixin, models.Model):
('auto-100', 'auto-100'), ('auto-100', 'auto-100'),
) )
PROFIL_DEFAULT = ( PROFIL_DEFAULT = (
('room', 'room'), ('room', _("Room")),
('access_point', 'access_point'), ('access_point', _("Access point")),
('uplink', 'uplink'), ('uplink', _("Uplink")),
('asso_machine', 'asso_machine'), ('asso_machine', _("Organisation machine")),
('nothing', 'nothing'), ('nothing', _("Nothing")),
) )
name = models.CharField(max_length=255, verbose_name=_("Name")) name = models.CharField(max_length=255, verbose_name=_("Name"))
profil_default = models.CharField( 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"> <div class="table-responsive">
{% if ap_list.paginator %} {% if ap_list.paginator %}
{% include "pagination.html" with list=ap_list %} {% include 'pagination.html' with list=ap_list %}
{% endif %} {% endif %}
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
{% trans "Access point" as tr_ap %} {% 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 %} {% 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 %} {% 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 "Details" %}</th>
<th>{% trans "Location" %}</th> <th>{% trans "Location" %}</th>
<th></th> <th></th>
@ -53,15 +53,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<td>{{ ap.location }}</td> <td>{{ ap.location }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit ap %} {% can_edit ap %}
<a class="btn btn-primary btn-sm" role="button" title={% trans "Edit" %} href="{% url 'topologie:edit-ap' ap.id %}"> {% include 'buttons/edit.html' with href='topologie:edit-ap' id=ap.id %}
<i class="fa fa-edit"></i>
</a>
{% acl_end %} {% acl_end %}
{% history_button ap %} {% history_button ap %}
{% can_delete ap %} {% can_delete ap %}
<a class="btn btn-danger btn-sm" role="button" title={% trans "Delete" %} href="{% url 'machines:del-machine' ap.id %}"> {% include 'buttons/suppr.html' with href='machines:del-machine' id=ap.id %}
<i class="fa fa-trash"></i>
</a>
{% acl_end %} {% acl_end %}
</td> </td>
</tr> </tr>
@ -69,7 +65,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if ap_list.paginator %} {% if ap_list.paginator %}
{% include "pagination.html" with list=ap_list %} {% include 'pagination.html' with list=ap_list %}
{% endif %} {% endif %}
</div> </div>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive"> <div class="table-responsive">
{% if port_profile_list.paginator %} {% if port_profile_list.paginator %}
{% include "pagination.html" with list=port_profile_list %} {% include 'pagination.html' with list=port_profile_list %}
{% endif %} {% 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>{{ port_profile.security_parameters_enabled|join:"<br>" }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit port_profile %} {% 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 %} {% acl_end %}
{% history_button port_profile %} {% history_button port_profile %}
{% can_delete 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 %} {% acl_end %}
</td> </td>
</tr> </tr>
@ -80,7 +80,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if port_profile_list.paginator %} {% if port_profile_list.paginator %}
{% include "pagination.html" with list=port_profile_list %} {% include 'pagination.html' with list=port_profile_list %}
{% endif %} {% endif %}
</div> </div>

View file

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

View file

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

View file

@ -28,22 +28,22 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<div class="table-responsive"> <div class="table-responsive">
{% if switch_list.paginator %} {% if switch_list.paginator %}
{% include "pagination.html" with list=switch_list %} {% include 'pagination.html' with list=switch_list %}
{% endif %} {% endif %}
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
{% trans "DNS name" as tr_dns %} {% 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 %} {% 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 %} {% 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 %} {% 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 %} {% 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 "Stack ID" %}</th>
<th>{% trans "Switch model" %}</th> <th>{% trans "Switch model" %}</th>
<th>{% trans "Details" %}</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 %} {% for switch in switch_list %}
<tr> <tr>
<td> <td>
<a href="{% url 'topologie:index-port' switch.pk %}"> <a href="{% url 'topologie:index-port' switch.id %}">
{{ switch }} {{ switch }}
</a> </a>
</td> </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>{{ switch.interface_set.first.details }}</td>
<td class="text-right"> <td class="text-right">
{% can_edit switch %} {% 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 %} {% acl_end %}
{% history_button switch %} {% history_button switch %}
{% can_delete switch %} {% can_delete switch %}
@ -74,7 +74,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %} {% acl_end %}
{% can_create Port %} {% can_create Port %}
{% trans "Creation of ports" as tr_creation %} {% 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 %} {% acl_end %}
</td> </td>
</tr> </tr>
@ -82,7 +82,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
</table> </table>
{% if switch_list.paginator %} {% if switch_list.paginator %}
{% include "pagination.html" with list=switch_list %} {% include 'pagination.html' with list=switch_list %}
{% endif %} {% endif %}
</div> </div>

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