Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • mediatek/site-interludes
  • aeltheos/site-kwei
  • mediatek/site-kwei
3 results
Show changes
Commits on Source (28)
Showing with 116 additions and 62 deletions
...@@ -112,7 +112,7 @@ Le site se gère depuis deux pages d'administration: ...@@ -112,7 +112,7 @@ Le site se gère depuis deux pages d'administration:
## En production ## En production
Le serveur a besoin d'être configuré pour HTTPS et d'être configuré pour livrer directement les fichiers situés des `/static/`. Le serveur a besoin d'être configuré pour HTTPS et d'être configuré pour livrer directement les fichiers situés dans `/static/` et `/media/`.
1. Installer les dépendances `make install` 1. Installer les dépendances `make install`
......
...@@ -12,16 +12,6 @@ ...@@ -12,16 +12,6 @@
<a class="button" href="{% url 'profile' %}">Annuler</a> <a class="button" href="{% url 'profile' %}">Annuler</a>
</div> </div>
</form> </form>
<h2> Mot de Passe </h2>
<h2>Changer mon mot de passe</h2> <a href ="{% url 'account_reset_password'% }" rel="text/html"> Réinitialisez votre mot de passe. </a>
<form method="post" action="{% url 'accounts:change_password' %}">
{% csrf_token %}
{{ password_form.as_html }}
<br>
<div class="flex">
<input type="submit" value="Valider">
<a class="button" href="{% url 'profile' %}">Annuler</a>
</div>
</form>
{% endblock %} {% endblock %}
...@@ -5,16 +5,5 @@ from accounts import views ...@@ -5,16 +5,5 @@ from accounts import views
app_name = "accounts" app_name = "accounts"
urlpatterns = [ urlpatterns = [
path("login/", views.LoginView.as_view(), name="login"),
path("logout/", views.LogoutView.as_view(), name="logout"),
path("create/", views.CreateAccountView.as_view(), name="create"),
path("update/", views.UpdateAccountView.as_view(), name="update"), path("update/", views.UpdateAccountView.as_view(), name="update"),
path("change_password/", views.UpdatePasswordView.as_view(), name="change_password"),
path('activate/<uidb64>/<token>/', views.ActivateAccountView.as_view(), name='activate'),
path("password_reset/", views.ResetPasswordView.as_view(), name="password_reset"),
path(
"password_reset/<uidb64>/<token>/",
views.ResetPasswordConfirmView.as_view(),
name="password_reset_confirm"
),
] ]
...@@ -46,22 +46,14 @@ ...@@ -46,22 +46,14 @@
<div class="qty">Participants</div> <div class="qty">Participants</div>
<div class="nb_big">{{ metrics.participants }}</div> <div class="nb_big">{{ metrics.participants }}</div>
</div> </div>
<div class="stat">
<div class="qty">Ulm</div>
<div class="nb_small">{{ metrics.ulm }}</div>
</div>
<div class="stat">
<div class="qty">Lyon</div>
<div class="nb_small">{{ metrics.lyon }}</div>
</div>
<div class="stat">
<div class="qty">Rennes</div>
<div class="nb_small">{{ metrics.rennes }}</div>
</div>
<div class="stat"> <div class="stat">
<div class="qty">Paris-Saclay</div> <div class="qty">Paris-Saclay</div>
<div class="nb_small">{{ metrics.saclay }}</div> <div class="nb_small">{{ metrics.saclay }}</div>
</div> </div>
<div class="stat">
<div class="qty">Extérieur</div>
<div class="nb_small">{{ metrics.exterieur }}</div>
</div>
<div class="stat"> <div class="stat">
<div class="qty">Non inscrits</div> <div class="qty">Non inscrits</div>
<div class="nb_small">{{ metrics.non_registered }}</div> <div class="nb_small">{{ metrics.non_registered }}</div>
......
...@@ -35,10 +35,8 @@ class AdminView(SuperuserRequiredMixin, TemplateView): ...@@ -35,10 +35,8 @@ class AdminView(SuperuserRequiredMixin, TemplateView):
) )
class metrics: class metrics:
participants = registered.count() participants = registered.count()
ulm = registered.filter(school=models.ParticipantModel.ENS.ENS_ULM).count()
lyon = registered.filter(school=models.ParticipantModel.ENS.ENS_LYON).count()
rennes = registered.filter(school=models.ParticipantModel.ENS.ENS_RENNES).count()
saclay = registered.filter(school=models.ParticipantModel.ENS.ENS_CACHAN).count() saclay = registered.filter(school=models.ParticipantModel.ENS.ENS_CACHAN).count()
exterieur = registered.filter(school=models.ParticipantModel.ENS.EXTERIEUR).count()
non_registered = EmailUser.objects.filter(is_active=True).count() - participants non_registered = EmailUser.objects.filter(is_active=True).count() - participants
# mugs = registered.filter(mug=True).count() # mugs = registered.filter(mug=True).count()
sleeps = registered.filter(sleeps=True).count() sleeps = registered.filter(sleeps=True).count()
......
...@@ -82,7 +82,8 @@ class ActivitySubmissionForm(FormRenderMixin, forms.ModelForm): ...@@ -82,7 +82,8 @@ class ActivitySubmissionForm(FormRenderMixin, forms.ModelForm):
"available_sunday_afternoon", "available_sunday_afternoon",
"constraints", "constraints",
"status", "needs", #"status",
"needs",
"comments", "comments",
) )
......
# Generated by Django 3.2.15 on 2022-08-21 13:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('home', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='activitymodel',
name='status',
field=models.CharField(blank=True, choices=[('P', 'En présentiel uniquement'), ('D', 'En distanciel uniquement'), ('2', 'Les deux')], default='P', max_length=1, verbose_name='Présentiel/distanciel'),
),
migrations.AlterField(
model_name='participantmodel',
name='school',
field=models.CharField(choices=[('C', 'ENS Paris-Saclay'), ('E', 'Extérieur')], max_length=1, verbose_name='ENS Paris-Saclay ou extérieur'),
),
]
...@@ -142,7 +142,10 @@ class ActivityModel(models.Model): ...@@ -142,7 +142,10 @@ class ActivityModel(models.Model):
"Contraintes particulières", max_length=2000, blank=True, null=True "Contraintes particulières", max_length=2000, blank=True, null=True
) )
status = models.CharField("Présentiel/distanciel", choices=Status.choices, max_length=1) status = models.CharField(
"Présentiel/distanciel", choices=Status.choices, max_length=1,
default=Status.PRESENT, blank=True
)
needs = models.TextField( needs = models.TextField(
"Besoin particuliers", max_length=2000, blank=True, null=True "Besoin particuliers", max_length=2000, blank=True, null=True
) )
...@@ -303,13 +306,14 @@ class ParticipantModel(models.Model): ...@@ -303,13 +306,14 @@ class ParticipantModel(models.Model):
class ENS(models.TextChoices): class ENS(models.TextChoices):
"""enum representant les ENS""" """enum representant les ENS"""
ENS_ULM = "U", _("ENS Ulm") #ENS_ULM = "U", _("ENS Ulm")
ENS_LYON = "L", _("ENS Lyon") #ENS_LYON = "L", _("ENS Lyon")
ENS_RENNES = "R", _("ENS Rennes") #ENS_RENNES = "R", _("ENS Rennes")
ENS_CACHAN = "C", _("ENS Paris Saclay") ENS_CACHAN = "C", _("ENS Paris-Saclay")
EXTERIEUR = "E", _("Extérieur")
user = models.OneToOneField(EmailUser, on_delete=models.CASCADE, related_name="Utilisateur") user = models.OneToOneField(EmailUser, on_delete=models.CASCADE, related_name="Utilisateur")
school = models.CharField("ENS de rattachement", choices=ENS.choices, max_length=1) school = models.CharField("ENS Paris-Saclay ou extérieur", choices=ENS.choices, max_length=1)
is_registered = models.BooleanField("est inscrit", default=False) is_registered = models.BooleanField("est inscrit", default=False)
...@@ -325,7 +329,7 @@ class ParticipantModel(models.Model): ...@@ -325,7 +329,7 @@ class ParticipantModel(models.Model):
# mug = models.BooleanField("commander une tasse", default=False) # mug = models.BooleanField("commander une tasse", default=False)
def __str__(self) -> str: def __str__(self) -> str:
school = self.ENS(self.school).label.replace("ENS ", "") if self.school else "" school = self.ENS(self.school).label if self.school else ""
return "{} {} ({})".format(self.user.first_name, self.user.last_name, school) return "{} {} ({})".format(self.user.first_name, self.user.last_name, school)
@property @property
......
{% extends "base.html" %}
\ No newline at end of file
...@@ -82,13 +82,13 @@ ...@@ -82,13 +82,13 @@
<h3>Modalités pratiques</h3> <h3>Modalités pratiques</h3>
<p><strong>Présentiel/distanciel&nbsp;:</strong> &nbsp;{{ form.status }}</p> {% comment "En présentiel" %}<p><strong>Présentiel/distanciel&nbsp;:</strong> &nbsp;{{ form.status }}</p>{% endcomment %}
<p><strong>Besoins spécifiques&nbsp;:</strong></p> <p><strong>Besoins spécifiques&nbsp;:</strong></p>
<ul> <ul>
<li>Vous faut-il une ou plusieurs salles&nbsp;?</li> <li>Vous faut-il une ou plusieurs salles&nbsp;?</li>
<li>Vous faut-il du matériel spécial&nbsp;?</li> <li>Vous faut-il du matériel spécial&nbsp;?</li>
<li>Si possible en distanciel, quel outils faut-il pour participer&nbsp;?</li> {% comment "En présentiel" %}<li>Si possible en distanciel, quel outils faut-il pour participer&nbsp;?</li>{% endcomment %}
<li>Et tout autre besoin de ce type...</li> <li>Et tout autre besoin de ce type...</li>
</ul> </ul>
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
Mon compte Mon compte
</a> </a>
{% else %} {% else %}
<a href="{% url 'accounts:login' %}" <a href="{% url 'account_login' %}"
class="{% block nav_login %}{% endblock %}"> class="{% block nav_login %}{% endblock %}">
Connexion Connexion
</a> </a>
...@@ -105,7 +105,11 @@ ...@@ -105,7 +105,11 @@
{% block "content" %} {% block "content" %}
{% endblock %} {% endblock %}
{% block content %}
{% endblock %}
</main> </main>
{% block extra_body %}
{% endblock %}
<footer> <footer>
<div id="sponsors"> <div id="sponsors">
......
...@@ -21,6 +21,14 @@ ...@@ -21,6 +21,14 @@
{% csrf_token %} {% csrf_token %}
<p>{{ form.school.label_tag }} {{ form.school }}</p> <p>{{ form.school.label_tag }} {{ form.school }}</p>
<p>{{ form.meal_friday_evening.label_tag }} {{ form.meal_friday_evening }} </p>
<p>{{ form.meal_saturday_morning.label_tag }} {{ form.meal_saturday_morning }} </p>
<p>{{ form.meal_saturday_midday.label_tag }} {{ form.meal_saturday_midday }}</p>
<p>{{ form.meal_saturday_evening.label_tag }} {{ form.meal_saturday_evening }} </p>
<p>{{ form.meal_sunday_morning.label_tag }} {{ form.meal_sunday_morning}} </p>
<p>{{ form.meal_sunday_midday.label_tag }} {{ form.meal_sunday_midday }}</p>
<p>Vous êtes considéré⋅e commme extérieur si vous n'êtes pas actuellement scolarisé⋅e ou inscrit⋅e à l'ENS Paris-Saclay. Nous avons besoin de cette information pour transmettre la liste des extérieurs à l'administration de l'ENS.</p>
<h3>Choix d'activités</h3> <h3>Choix d'activités</h3>
...@@ -34,8 +42,6 @@ ...@@ -34,8 +42,6 @@
<p>Si vous vous inscrivez à une activité qui nécessite préparation, nous communiquerons <p>Si vous vous inscrivez à une activité qui nécessite préparation, nous communiquerons
votre email aux orgas pour qu'iels puissent vous contacter. votre email aux orgas pour qu'iels puissent vous contacter.
</p> </p>
{% if formset.non_form_errors %} {% if formset.non_form_errors %}
{{ formset.non_form_errors }} {{ formset.non_form_errors }}
{% endif %} {% endif %}
......
...@@ -4,9 +4,8 @@ ...@@ -4,9 +4,8 @@
{% block "content" %} {% block "content" %}
<h2>Inscriptions</h2> <h2>Inscriptions</h2>
<p>Vous devez être connecté pour pouvoir vous inscrire à des activités. Pour vous inscrire à l'événement en lui même, suivez le lien HelloAsso sur la <a href="{% url 'home' %}">page d'accueil</a></p> <p>Vous devez être connecté pour pouvoir vous inscrire à des activités.
<p>Aller à la page de <a href="{% url 'accounts:login' %}">connexion</a> pour vous connecter <p>Aller à la page de <a href="{% url 'account_login' %}">connexion</a> pour vous connecter ou créer un compte.
ou à celle de <a href="{% url 'accounts:create' %}">création de compte</a> si vous n'avez pas de compte.</p>
{% if settings.inscriptions_end %} {% if settings.inscriptions_end %}
<p>Les inscriptions seront ouvertes jusqu'au {{ settings.inscriptions_end|date:"l d F Y à H:i" }})</p> <p>Les inscriptions seront ouvertes jusqu'au {{ settings.inscriptions_end|date:"l d F Y à H:i" }})</p>
{% endif %} {% endif %}
......
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
{% endif %} {% endif %}
<a class="button" href="{% url 'accounts:update' %}">Modifier mes informations</a> <a class="button" href="{% url 'accounts:update' %}">Modifier mes informations</a>
<a class="button" href="{% url 'accounts:logout' %}">Déconnexion</a> <a class="button" href="{% url 'account_logout' %}">Déconnexion</a>
</div> </div>
{% endblock %} {% endblock %}
...@@ -37,6 +37,8 @@ def import_secret(name): ...@@ -37,6 +37,8 @@ def import_secret(name):
except AttributeError: except AttributeError:
raise RuntimeError("Secret missing: {}".format(name)) raise RuntimeError("Secret missing: {}".format(name))
SITE_ID=1
SECRET_KEY = import_secret("SECRET_KEY") SECRET_KEY = import_secret("SECRET_KEY")
DB_NAME = import_secret("DB_NAME") DB_NAME = import_secret("DB_NAME")
...@@ -56,7 +58,7 @@ EMAIL_USE_SSL = True ...@@ -56,7 +58,7 @@ EMAIL_USE_SSL = True
DEBUG = True DEBUG = True
# FIXME - set hosts in production # FIXME - set hosts in production
ALLOWED_HOSTS = [] ALLOWED_HOSTS = ["127.0.0.1", "localhost","kwei-dev.crans.org"]
if DEBUG: if DEBUG:
# This will display emails in Console. # This will display emails in Console.
...@@ -84,12 +86,19 @@ INSTALLED_APPS = [ ...@@ -84,12 +86,19 @@ INSTALLED_APPS = [
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.sitemaps', 'django.contrib.sitemaps',
'django.contrib.sites',
'home.apps.HomeConfig', 'home.apps.HomeConfig',
'admin_pages.apps.AdminPagesConfig', 'admin_pages.apps.AdminPagesConfig',
'accounts.apps.AccountsConfig', 'accounts.apps.AccountsConfig',
'site_settings.apps.SiteSettingsConfig', 'site_settings.apps.SiteSettingsConfig',
'shared.apps.SharedConfig', 'shared.apps.SharedConfig',
# allauth support.
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth_note_kfet',
] ]
MIDDLEWARE = [ MIDDLEWARE = [
...@@ -138,6 +147,7 @@ DATABASES = { ...@@ -138,6 +147,7 @@ DATABASES = {
AUTHENTICATION_BACKENDS = ( AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', 'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
) )
# Password validation # Password validation
...@@ -145,6 +155,19 @@ AUTHENTICATION_BACKENDS = ( ...@@ -145,6 +155,19 @@ AUTHENTICATION_BACKENDS = (
AUTH_USER_MODEL = 'accounts.EmailUser' AUTH_USER_MODEL = 'accounts.EmailUser'
AUTH_PROFILE_MODULE = 'home.ParticipantModel' AUTH_PROFILE_MODULE = 'home.ParticipantModel'
# Tell oauth how the user is configured.
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
SOCIALACCOUNT_PROVIDERS = {
'notekfet': {
'DOMAIN': 'note-dev.crans.org', # À remplacer si nécessaire
# 'SCOPE': ['1_1'], # Adapter les scopes demandées (par défaut lecture des champs utilisateur⋅rice)
},
}
AUTH_PASSWORD_VALIDATORS = [ AUTH_PASSWORD_VALIDATORS = [
{ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', },
...@@ -159,7 +182,7 @@ SESSION_COOKIE_AGE = 3600 ...@@ -159,7 +182,7 @@ SESSION_COOKIE_AGE = 3600
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/ # https://docs.djangoproject.com/en/3.0/topics/i18n/
LANGUAGE_CODE = 'fr-fr' LANGUAGE_CODE = 'fr'
TIME_ZONE = 'CET' TIME_ZONE = 'CET'
......
...@@ -16,7 +16,12 @@ Including another URLconf ...@@ -16,7 +16,12 @@ Including another URLconf
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
urlpatterns = [ from django.conf import settings
path('admin/', admin.site.urls), from django.conf.urls.static import static
path('', include('home.urls')),
] urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + [
path('admin/', admin.site.urls),
path('accounts/', include('allauth.urls')),
path('comptes/', include('allauth.urls')),
path('', include('home.urls')),
]
Django~=3.2.7 Django~=3.2.7
django-allauth~=0.51.0
\ No newline at end of file
let
pkgs = import <nixpkgs> {};
in pkgs.mkShell {
buildInputs = [
pkgs.python3
pkgs.python39Packages.django
pkgs.python39Packages.pip
];
shellHook = ''
# Tells pip to put packages into $PIP_PREFIX instead of the usual locations.
# See https://pip.pypa.io/en/stable/user_guide/#environment-variables.
export PIP_PREFIX=$(pwd)/_build/pip_packages
export PYTHONPATH="$PIP_PREFIX/${pkgs.python3.sitePackages}:$PYTHONPATH"
export PATH="$PIP_PREFIX/bin:$PATH"
unset SOURCE_DATE_EPOCH
'';
}
\ No newline at end of file