1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-07-05 23:13:54 +02:00

Compare commits

...

4 Commits

Author SHA1 Message Date
c36f8c25a2 Add banner #80 (with django-constance 2025-07-05 18:45:36 +02:00
8783a63d7f change CAS template for #133 2025-07-05 13:56:43 +02:00
4cc43fe4b6 traduction, resolve #133 2025-07-04 22:11:47 +02:00
b7c0986a5f cron and linters 2025-07-04 17:14:12 +02:00
12 changed files with 203 additions and 57 deletions

View File

@ -13,6 +13,7 @@ EXCLUDED = [
'cas_server.serviceticket',
'cas_server.user',
'cas_server.userattributes',
'constance.constance',
'contenttypes.contenttype',
'logs.changelog',
'migrations.migration',

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-06-27 19:15+0200\n"
"POT-Creation-Date: 2025-07-04 21:47+0200\n"
"PO-Revision-Date: 2022-04-11 22:05+0200\n"
"Last-Translator: bleizi <bleizi@crans.org>\n"
"Language-Team: French <http://translate.ynerant.fr/projects/nk20/nk20/fr/>\n"
@ -785,49 +785,49 @@ msgstr "semaines"
msgid "and"
msgstr "et"
#: apps/food/views.py:118
#: apps/food/views.py:119
msgid "Add a new QRCode"
msgstr "Ajouter un nouveau QR-code"
#: apps/food/views.py:167
#: apps/food/views.py:168
msgid "Add an aliment"
msgstr "Ajouter un nouvel aliment"
#: apps/food/views.py:235
#: apps/food/views.py:236
msgid "Add a meal"
msgstr "Ajouter un plat"
#: apps/food/views.py:275
#: apps/food/views.py:276
msgid "Manage ingredients of:"
msgstr "Gestion des ingrédienrs de :"
#: apps/food/views.py:289 apps/food/views.py:297
#: apps/food/views.py:290 apps/food/views.py:298
#, python-brace-format
msgid "Fully used in {meal}"
msgstr "Aliment entièrement utilisé dans : {meal}"
#: apps/food/views.py:344
#: apps/food/views.py:345
msgid "Add the ingredient:"
msgstr "Ajouter l'ingrédient"
#: apps/food/views.py:370
#: apps/food/views.py:371
#, python-brace-format
msgid "Food fully used in : {meal.name}"
msgstr "Aliment entièrement utilisé dans : {meal.name}"
#: apps/food/views.py:389
#: apps/food/views.py:390
msgid "Update an aliment"
msgstr "Modifier un aliment"
#: apps/food/views.py:437
#: apps/food/views.py:438
msgid "Details of:"
msgstr "Détails de :"
#: apps/food/views.py:447 apps/treasury/tables.py:149
#: apps/food/views.py:448 apps/treasury/tables.py:149
msgid "Yes"
msgstr "Oui"
#: apps/food/views.py:449 apps/member/models.py:99 apps/treasury/tables.py:149
#: apps/food/views.py:450 apps/member/models.py:99 apps/treasury/tables.py:149
msgid "No"
msgstr "Non"
@ -1962,8 +1962,8 @@ msgstr ""
"mode de paiement et un⋅e utilisateur⋅rice ou un club"
#: apps/note/models/transactions.py:357 apps/note/models/transactions.py:360
#: apps/note/models/transactions.py:363 apps/wei/views.py:1097
#: apps/wei/views.py:1101
#: apps/note/models/transactions.py:363 apps/wei/views.py:1105
#: apps/wei/views.py:1109
msgid "This field is required."
msgstr "Ce champ est requis."
@ -2065,6 +2065,8 @@ msgstr "Historique des transactions récentes"
#: apps/note/templates/note/mails/weekly_report.txt:32
#: apps/registration/templates/registration/mails/email_validation_email.html:40
#: apps/registration/templates/registration/mails/email_validation_email.txt:16
#: apps/scripts/templates/scripts/food_report.html:48
#: apps/scripts/templates/scripts/food_report.txt:14
msgid "Mail generated by the Note Kfet on the"
msgstr "Mail généré par la Note Kfet le"
@ -2269,7 +2271,7 @@ msgstr "s'applique au club"
msgid "role permissions"
msgstr "permissions par rôles"
#: apps/permission/signals.py:73
#: apps/permission/signals.py:74
#, python-brace-format
msgid ""
"You don't have the permission to change the field {field} on this instance "
@ -2278,7 +2280,7 @@ msgstr ""
"Vous n'avez pas la permission de modifier le champ {field} sur l'instance du "
"modèle {app_label}.{model_name}."
#: apps/permission/signals.py:83 apps/permission/views.py:104
#: apps/permission/signals.py:84 apps/permission/views.py:104
#, python-brace-format
msgid ""
"You don't have the permission to add an instance of model {app_label}."
@ -2287,7 +2289,7 @@ msgstr ""
"Vous n'avez pas la permission d'ajouter une instance du modèle {app_label}."
"{model_name}."
#: apps/permission/signals.py:112
#: apps/permission/signals.py:113
#, python-brace-format
msgid ""
"You don't have the permission to delete this instance of model {app_label}."
@ -3041,7 +3043,7 @@ msgstr "Rôles au WEI"
msgid "Select the roles that you are interested in."
msgstr "Sélectionnez les rôles qui vous intéressent."
#: apps/wei/forms/registration.py:147
#: apps/wei/forms/registration.py:160
msgid "This team doesn't belong to the given bus."
msgstr "Cette équipe n'appartient pas à ce bus."
@ -3120,7 +3122,7 @@ msgstr "Rôle au WEI"
msgid "Credit from Société générale"
msgstr "Crédit de la Société générale"
#: apps/wei/models.py:202 apps/wei/views.py:984
#: apps/wei/models.py:202 apps/wei/views.py:992
msgid "Caution check given"
msgstr "Chèque de caution donné"
@ -3352,7 +3354,6 @@ msgid "View club"
msgstr "Voir le club"
#: apps/wei/templates/wei/bus_detail.html:26
#| msgid "survey information"
msgid "Edit information"
msgstr "Modifier les informations"
@ -3373,8 +3374,8 @@ msgstr "Télécharger au format PDF"
#: apps/wei/templates/wei/survey.html:11
#: apps/wei/templates/wei/survey_closed.html:11
#: apps/wei/templates/wei/survey_end.html:11 apps/wei/views.py:1159
#: apps/wei/views.py:1214 apps/wei/views.py:1261
#: apps/wei/templates/wei/survey_end.html:11 apps/wei/views.py:1167
#: apps/wei/views.py:1222 apps/wei/views.py:1269
msgid "Survey WEI"
msgstr "Questionnaire WEI"
@ -3654,51 +3655,51 @@ msgstr ""
msgid "Update WEI Registration"
msgstr "Modifier l'inscription WEI"
#: apps/wei/views.py:810
#: apps/wei/views.py:811
msgid "No membership found for this registration"
msgstr "Pas d'adhésion trouvée pour cette inscription"
#: apps/wei/views.py:819
#: apps/wei/views.py:820
msgid "You don't have the permission to update memberships"
msgstr ""
"Vous n'avez pas la permission d'ajouter une instance du modèle {app_label}."
"{model_name}."
#: apps/wei/views.py:825
#: apps/wei/views.py:826
#, python-format
msgid "You don't have the permission to update the field %(field)s"
msgstr "Vous n'avez pas la permission de modifier le champ %(field)s"
#: apps/wei/views.py:870
#: apps/wei/views.py:871
msgid "Delete WEI registration"
msgstr "Supprimer l'inscription WEI"
#: apps/wei/views.py:881
#: apps/wei/views.py:882
msgid "You don't have the right to delete this WEI registration."
msgstr "Vous n'avez pas la permission de supprimer cette inscription au WEI."
#: apps/wei/views.py:899
#: apps/wei/views.py:900
msgid "Validate WEI registration"
msgstr "Valider l'inscription WEI"
#: apps/wei/views.py:985
#: apps/wei/views.py:993
msgid "Please make sure the check is given before validating the registration"
msgstr ""
"Merci de vous assurer que le chèque a bien été donné avant de valider "
"l'adhésion"
#: apps/wei/views.py:991
#: apps/wei/views.py:999
msgid "Create deposit transaction"
msgstr "Créer une transaction de caution"
#: apps/wei/views.py:992
#: apps/wei/views.py:1000
#, python-format
msgid ""
"A transaction of %(amount).2f€ will be created from the user's Note account"
msgstr ""
"Un transaction de %(amount).2f€ va être créée depuis la note de l'utilisateur"
#: apps/wei/views.py:1087
#: apps/wei/views.py:1095
#, python-format
msgid ""
"This user doesn't have enough money to join this club and pay the deposit. "
@ -3708,21 +3709,21 @@ msgstr ""
"payer la cautionSolde actuel : %(balance)d€, crédit : %(credit)d€, requis : "
"%(needed)d€"
#: apps/wei/views.py:1140
#: apps/wei/views.py:1148
#, fuzzy, python-format
#| msgid "total amount"
msgid "Caution %(name)s"
msgstr "montant total"
#: apps/wei/views.py:1354
#: apps/wei/views.py:1362
msgid "Attribute buses to first year members"
msgstr "Répartir les 1A dans les bus"
#: apps/wei/views.py:1380
#: apps/wei/views.py:1388
msgid "Attribute bus"
msgstr "Attribuer un bus"
#: apps/wei/views.py:1420
#: apps/wei/views.py:1428
msgid ""
"No first year student without a bus found. Either all of them have a bus, or "
"none has filled the survey yet."
@ -3746,7 +3747,7 @@ msgstr "bde"
#: apps/wrapped/models.py:65
msgid "data json"
msgstr "donnée json"
msgstr "données json"
#: apps/wrapped/models.py:66
msgid "data in the wrapped and generated by the script generate_wrapped"
@ -3888,7 +3889,7 @@ msgid ""
"Do not forget to ask permission to people who are in your wrapped before to "
"make them public"
msgstr ""
"N'oublies pas de demander la permission des personnes apparaissant dans un "
"N'oublie pas de demander la permission des personnes apparaissant dans un "
"wrapped avant de le rendre public"
#: apps/wrapped/templates/wrapped/wrapped_list.html:40
@ -3907,19 +3908,19 @@ msgstr "Le wrapped est public"
msgid "List of wrapped"
msgstr "Liste des wrapped"
#: note_kfet/settings/base.py:177
#: note_kfet/settings/base.py:178
msgid "German"
msgstr "Allemand"
#: note_kfet/settings/base.py:178
#: note_kfet/settings/base.py:179
msgid "English"
msgstr "Anglais"
#: note_kfet/settings/base.py:179
#: note_kfet/settings/base.py:180
msgid "Spanish"
msgstr "Espagnol"
#: note_kfet/settings/base.py:180
#: note_kfet/settings/base.py:181
msgid "French"
msgstr "Français"
@ -3996,18 +3997,18 @@ msgstr "Admin"
msgid "My account"
msgstr "Mon compte"
#: note_kfet/templates/base.html:142
#: note_kfet/templates/base.html:144
msgid "Log out"
msgstr "Se déconnecter"
#: note_kfet/templates/base.html:150
#: note_kfet/templates/base.html:153
#: note_kfet/templates/registration/signup.html:6
#: note_kfet/templates/registration/signup.html:11
#: note_kfet/templates/registration/signup.html:28
msgid "Sign up"
msgstr "Inscription"
#: note_kfet/templates/base.html:157
#: note_kfet/templates/base.html:160
#: note_kfet/templates/registration/login.html:6
#: note_kfet/templates/registration/login.html:15
#: note_kfet/templates/registration/login.html:38
@ -4015,7 +4016,7 @@ msgstr "Inscription"
msgid "Log in"
msgstr "Se connecter"
#: note_kfet/templates/base.html:171
#: note_kfet/templates/base.html:174
msgid ""
"You are not a BDE member anymore. Please renew your membership if you want "
"to use the note."
@ -4023,7 +4024,7 @@ msgstr ""
"Vous n'êtes plus adhérent·e BDE. Merci de réadhérer si vous voulez profiter "
"de la note."
#: note_kfet/templates/base.html:177
#: note_kfet/templates/base.html:180
msgid ""
"Your e-mail address is not validated. Please check your mail inbox and click "
"on the validation link."
@ -4031,7 +4032,7 @@ msgstr ""
"Votre adresse e-mail n'est pas validée. Merci de vérifier votre boîte mail "
"et de cliquer sur le lien de validation."
#: note_kfet/templates/base.html:183
#: note_kfet/templates/base.html:186
msgid ""
"You declared that you opened a bank account in the Société générale. The "
"bank did not validate the creation of the account to the BDE, so the "
@ -4045,22 +4046,30 @@ msgstr ""
"vérification peut durer quelques jours. Merci de vous assurer de bien aller "
"au bout de vos démarches."
#: note_kfet/templates/base.html:206
#: note_kfet/templates/base.html:209
msgid "Contact us"
msgstr "Nous contacter"
#: note_kfet/templates/base.html:208
#: note_kfet/templates/base.html:211
msgid "Technical Support"
msgstr "Support technique"
#: note_kfet/templates/base.html:210
#: note_kfet/templates/base.html:213
msgid "Charte Info (FR)"
msgstr "Charte Info (FR)"
#: note_kfet/templates/base.html:212
#: note_kfet/templates/base.html:215
msgid "FAQ (FR)"
msgstr "FAQ (FR)"
#: note_kfet/templates/base.html:217
msgid "Managed by BDE"
msgstr "Gérer par le BDE"
#: note_kfet/templates/base.html:219
msgid "Hosted by Cr@ns"
msgstr "Hébergé par le Cr@ans"
#: note_kfet/templates/base_search.html:15
msgid "Search by attribute such as name..."
msgstr "Chercher par un attribut tel que le nom..."

View File

@ -28,4 +28,5 @@ MAILTO=notekfet2020@lists.crans.org
00 6 * * * root cd /var/www/note_kfet && env/bin/python manage.py cleartokens -v 0
# Envoyer la liste des abonnés à la NL BDA
00 10 * * 0 root cd /var/www/note_kfet && env/bin/python manage.py extract_ml_registrations -t art -e "bda.ensparissaclay@gmail.com"
# Envoyer la liste de la bouffe au club et aux GCKs
00 8 * * 1 root cd /var/www/note_kfet && env/bin/python manage.py send_mail_for_food --report --club

View File

@ -56,3 +56,8 @@ if "cas_server" in settings.INSTALLED_APPS:
from cas_server.models import *
admin_site.register(ServicePattern, ServicePatternAdmin)
admin_site.register(FederatedIendityProvider, FederatedIendityProviderAdmin)
if "constance" in settings.INSTALLED_APPS:
from constance.admin import *
from constance.models import *
admin_site.register([Config], ConstanceAdmin)

View File

@ -41,6 +41,7 @@ INSTALLED_APPS = [
'bootstrap_datepicker_plus',
'cas_server',
'colorfield',
'constance',
'crispy_bootstrap4',
'crispy_forms',
# 'django_htcpcp_tea',
@ -112,6 +113,7 @@ TEMPLATES = [
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'constance.context_processors.config',
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
@ -308,6 +310,27 @@ PHONENUMBER_DEFAULT_REGION = 'FR'
# We add custom information to CAS, in order to give a normalized name to other services
CAS_AUTH_CLASS = 'member.auth.CustomAuthUser'
CAS_LOGIN_TEMPLATE = 'cas/login.html'
CAS_LOGOUT_TEMPLATE = 'cas/logout.html'
CAS_WARN_TEMPLATE = 'cas/warn.html'
CAS_LOGGED_TEMPLATE = 'cas/logged.html'
# Default field for primary key
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
# Constance settings
CONSTANCE_ADDITIONAL_FIELDS = {
'banner_type': ['django.forms.fields.ChoiceField', {
'widget': 'django.forms.Select',
'choices': (('info', 'Info'), ('success', 'Success'), ('warning', 'Warning'), ('danger', 'Danger'))
}],
}
CONSTANCE_CONFIG = {
'BANNER_MESSAGE': ('', 'Some message', str),
'BANNER_TYPE': ('Info', 'Banner type', 'banner_type'),
}
CONSTANCE_CONFIG_FIELDSETS = {
'Banner': ('BANNER_MESSAGE', 'BANNER_TYPE'),
}
CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'
CONSTANCE_SUPERUSER_ONLY = True

View File

@ -191,7 +191,11 @@ SPDX-License-Identifier: GPL-3.0-or-later
{% endblocktrans %}
</div>
{% endif %}
{# TODO Add banners #}
{% if config.BANNER_MESSAGE %}
<div class="alert alert-{{ config.BANNER_TYPE }}">
{{ config.BANNER_MESSAGE }}
</div>
{% endif %}
</div>
{% block content %}
<p>Default content...</p>
@ -213,6 +217,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
class="text-muted">{% trans "Charte Info (FR)" %}</a> &mdash;
<a href="https://note.crans.org/doc/faq/"
class="text-muted">{% trans "FAQ (FR)" %}</a> &mdash;
<a href="https://bde.ens-cachan.fr"
class="text-muted">{% trans "Managed by BDE" %}</a> &mdash;
<a href="https://crans.org"
class="text-muted">{% trans "Hosted by Cr@ns" %}</a> &mdash;
</span>
{% csrf_token %}
<select title="language" name="language"

View File

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% comment %}
Copyright (C) by BDE ENS-Paris-Saclay
SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load i18n %}
{% block content %}
<div class="alert alert-success" role="alert">{% blocktrans %}<h3>Log In Successful</h3>You have successfully logged into the Central Authentication Service.<br/>For security reasons, please Log Out and Exit your web browser when you are done accessing services that require authentication!{% endblocktrans %}</div>
<div class="card bg-light mx-auto" style="max-width:30rem;">
<div class="card-body">
<form class="form-signin" method="get" action="logout">
<div class="checkbox">
<label>
<input type="checkbox" name="all" value="1">{% trans "Log me out from all my sessions" %}
</label>
</div>
{% if settings.CAS_FEDERATE and request.COOKIES.remember_provider %}
<div class="checkbox">
<label>
<input type="checkbox" name="forget_provider" value="1">{% trans "Forget the identity provider" %}
</label>
</div>
{% endif %}
<button class="btn btn-danger btn-block btn-lg" type="submit">{% trans "Logout" %}</button>
</form>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,42 @@
{% extends "base.html" %}
{% comment %}
Copyright (C) by BDE ENS-Paris-Saclay
SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load i18n %}
{% block ante_messages %}
{% if auto_submit %}<noscript>{% endif %}
<div class="card-header text-center">
<h2 class="form-signin-heading">{% trans "Please log in" %}</h2>
</div>
{% if auto_submit %}</noscript>{% endif %}
{% endblock %}
{% block content %}
<div class="card bg-light mx-auto" style="max-width: 30rem;">
<div class="card-body">
<form class="form-signin" method="post" id="login_form"{% if post_url %} action="{{post_url}}"{% endif %}>
{% csrf_token %}
{% include "cas_server/bs4/form.html" %}
{% if auto_submit %}<noscript>{% endif %}
<button class="btn btn-primary btn-block btn-lg" type="submit">{% trans "Login" %}</button>
{% if auto_submit %}</noscript>{% endif %}
</div>
</form>
</div>
</div>
{% endblock %}
{% block javascript_inline %}
jQuery(function( $ ){
$("#id_warn").click(function(e){
if($("#id_warn").is(':checked')){
createCookie("warn", "on", 10 * 365);
} else {
eraseCookie("warn");
}
});
});
{% if auto_submit %}document.getElementById('login_form').submit(); // SUBMIT FORM{% endif %}
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends "base.html" %}
{% comment %}
Copyright (C) by BDE ENS-Paris-Saclay
SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load i18n static %}
{% block content %}
<div class="alert alert-success" role="alert">{{ logout_msg }}</div>
{% endblock %}

View File

@ -0,0 +1,19 @@
{% extends "base.html" %}
{% comment %}
Copyright (C) by BDE ENS-Paris-Saclay
SPDX-License-Identifier: GPL-3.0-or-later
{% endcomment %}
{% load i18n static %}
{% block content %}
<div class="card bg-light mx-auto" style="max-width: 30rem;">
<div class="card-body">
<form class="form-signin" method="post">
{% csrf_token %}
{% include "cas_server/bs4/form.html" %}
<button class="btn btn-primary btn-block btn-lg" type="submit">{% trans "Connect to the service" %}</button>
</form>
</div>
</div>
{% endblock %}

View File

@ -4,6 +4,7 @@ Django~=5.2.4
django-bootstrap-datepicker-plus~=5.0.5
django-cas-server~=3.1.0
django-colorfield~=0.14.0
django-constance~=4.3.2
django-crispy-forms~=2.4.0
django-extensions>=4.1.0
django-filter~=25.1

View File

@ -32,8 +32,7 @@ deps =
pep8-naming
pyflakes
commands =
flake8 apps --extend-exclude apps/scripts,apps/wrapped/management/commands
flake8 apps/wrapped/management/commands --extend-ignore=C901
flake8 apps --extend-exclude apps/scripts
[flake8]
ignore = W503, I100, I101, B019