Skip to content

dlesbre/site-interludes

Repository files navigation

Site des interludes

website forks

Ce répo contient le code source du site des interludes. La version 2021 est en ligne à https://interludes.ens.fr. Il est disponible sur le git interne de l'ENS Ulm et sur github. Il est diffusé sous une licence MIT.

Ce site permet de :

  • Afficher de l'information sur l'événement (page d'accueil et FAQ, modifiable directement depuis l'admin du site)
  • Recenser les activités proposées (page activités)
  • Un formulaire pour permettre aux gens de proposer des activités qui envoie un mail aux administrateurs à chaque fois qu'une nouvelle activité est proposée.
  • Un formulaire d'inscription ou chaque inscrit peut renseigner des infos personnelles (repas/dormir) et les activités qu'il souhaite
  • Afficher un planning dynamique des différentes activités
  • Une fois la répartition faite, envoyer un mail à tous les inscrits pour leur communiquer les activités obtenues et un mail aux orgas pour leur communiquer la liste des participants
  • Un formulaire pour envoyer un mail à tous (à utiliser avec modération)
  • Exporter les tables intéressantes au format CSV

Il n'est PAS capable de :

  • vendre des tickets - différentes solutions ont été utilisées pour ça par le passé :
    • utiliser une billetterie externe (ex HelloAsso)
    • recruter les BdE/BdL des autres écoles pour qu'ils gèrent les paiements
    • paiement en espèces/CB sur place le jour J
  • répartir les activités - nous faisons un premier jet avec le ce code (en prenant l'export CSV de la table de choix d'activités), puis l'adaptons à la main et le renseignons dans ce site.

Contenu:

Forks

Ce serveur a été repris pour plusieurs événements similaires :

Site Web Code source Notes État
Interludes 2021 Ulm github ou gitlab ENS Ulm Version initiale, tag v1.2.8 website
48h des jeux gitlab ENS Ulm Rentrée ludique d'Ulm 2021 (48h-v2.3.1), 2022 et 2023 (48h-v3.0.1) website
Interludes 2022 Lyon github Branche Lyon-2022, tag v2.1.0 website
KWEI gitlab Paris Saclay Rentrée ludique Paris-Saclay 2022 et 2023 website
Interludes 2023 Paris-Saclay gitlab Paris Saclay Branche Saclay-2023 website

Le code de l'algorithme de répartition est aussi disponible sur github.

Lancement rapide

Pour installer toutes les dépendances et lancer le serveur :

git clone https://github.com/dlesbre/site-interludes.git &&
cd site-interlude &&
python3 -m venv venv &&
source venv/bin/activate &&
make start

Le site devrait être accessible à http://localhost:8000.

Par la suite vous pouvez relancer le site simplement avec make serve.

Installation pas à pas

Pour tester et modifier le répo, après l'avoir cloné :

  1. Créer un environement virtuel (python3-venv)

    python3 -m venv venv

    (si vous le nommez autre chose que venv, ajouter le dossier correspondant au .gitignore)

  2. Lancer l'environnement virtuel

    source venv/bin/activate
  3. Installer la dernière version de pip

    python3 -m pip install --upgrade pip
  4. Installer les dépendances

    pip3 install -r requirements.txt
  5. Copier/linker le fichier interludes/secret_example.py dans interludes/secret.py

    ln -s interludes/secret_example.py interludes/secret.py
  6. Faire les migrations

    python3 manage.py makemigrations
    python3 manage.py migrate

Pour l'aide au développement et maintenir un code propre, j'utilise :

  • les formateurs black et isort, à installer via pip install black isort puis lancer par make format
  • le linter flake8 à installer via pip install flake8 puis lancer par make format
  • le type-checker mypy à installer via pip install mypy django-stubs puis lancer par make mypy. Normalement tous les fichiers sont bien typés, sauf shared/forms.py qui utilisent trop de hacks.

Lancer le serveur

Pour pouvoir afficher et tester le site (après avoir tout installé)

  1. Lancer l'environnement virtuel si ce n'est pas déjà fait (si le prompt du terminal ne commence pas par (venv))

    source venv/bin/activate
  2. Lancer le serveur avec make serve ou

    python3 manage.py runserver

    Cette commande bloque le terminal, le serveur tourne tant qu'elle n'est pas interrompue (par Ctrl+C ou autre).

  3. Dans un navigateur, le site se trouve à l'adresse http://localhost:8000/

  4. Créer un compte super-utilisateur avec make adduser. Les réglages se modifient depuis les pages d'admin de Django http://localhost:8000/admin.

Guide de l'administrateur

Le site se gère depuis deux pages d'administration :

Page d'administration Django : http://localhost:8000/admin permet de modifier directement la base de donnée. Descriptif rapide des tables intéressantes :

  • Utilisateurs - contient tous les utilisateurs et leurs permissions. Pour donner les droits d'administrateur à quelqu'un il faut lui donner le statut superuser (accès à l'admin du site) ET le statut équipe (accès à l'admin django).

  • Pages HTML - contient les pages d'informations (notamment home, activités et FAQ). Cela permet aux administrateurs de modifier leur contenu facilement depuis le site en ligne, sans avoir à accéder au serveur. Ces pages ont un nom (uniquement visible dans l'admin), un URL d'accès et un contenu (format HTML avec tags de templates django).

    Les pages home (url vide) activites et faq sont spéciales. Elles apparaissent sur la barre de navigation et sont régénérées à partir de fichiers de base dans pages/default/ si quelqu'un tente d'y accéder après leur suppression.

    Vous pouvez créer d'autres pages sur des URL libres si ça vous semble pertinent.

    Les autres pages du site (formulaires, pages de connexion...) sont des templates django plus classiques et ne peuvent être modifié que depuis le code source.

  • Paramètres - les réglages du site, ils permettent :

    • ouvrir/fermer la création de compte, les inscriptions
    • renseigner l'ENS d'accueil
    • renseigner un lien de la billetterie et de serveur discord
    • ouvrir/fermer le formulaire de proposition d'activités
    • afficher/cacher le planning
    • renseigner l'email de contact, les dates de l'événement, les dates d'inscription
    • ajouter un message global au-dessus de toutes les pages
    • bloquer/autoriser l'envoi d'email globaux
    • Ajouter une version PDF du planning (pour mobiles)
    • Ajouter l'affiche (visible sur la page d'accueil)
  • Activités - liste des activités prévues. C'est ici que vous pouvez rajouter/modifier les activités qui s'affichent sur la page activité. Un formulaire permet aux utilisateurs de proposer des activités directement. Il vous faudra les relire et les valider ensuite manuellement pour qu'elles soient affichées sur le site.

  • Créneaux - place une activité sur le planning. Une activité peut avoir plusieurs créneaux si elle a lieu plusieurs fois. Noter que les inscriptions se font à des créneaux et non a des activités.

    Note : le planning généré par le site (en JS) est difficilement lisible sur mobile. Le site permet d'uploader une version PDF propre pour mobiles. Personnellement je faisais une capture d'écran du planning (vu sur un grand écran) que j'exportais en PDF.

  • Participant - liste des gens inscrits et des informations sur leur inscription (ENS, repas choisi...)

  • Choix d'activité - Liste de (participant, priorité, activité) indiquant les vœux des participants. Une fois que vous avez fait l'attribution, cocher les case "Obtenues" pour indiquer qui a eu quelle activité.

Page d'administration du site : http://localhost:8000/admin_pages/

  • permet d'exporter les différentes tables au format CSV
  • affiche l'état du site (version, réglages actuels, différentes métriques)
  • une prévisualisation du planning
  • permet l'écriture d'un mail à tous
  • permet d'envoyer deux séries d'emails :
    • une aux inscrits pour leur communiquer les activités qu'ils ont obtenus
    • une aux orgas qui ont besoin de connaître la liste des participants à l'avance pour préparer leurs activités.

En production

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

  2. S'assurer que DEBUG = False et que ALLOWED_HOSTS contient les adresses des hôtes dans settings.py

  3. Créer ou remplacer le fichier interludes/secret.py pour qu'il ait les mots de passe et un nouveau secret. Vous pouvez générer un secret Django avec

    python manage.py shell -c 'from django.core.management import utils; print(utils.get_random_secret_key())'
  4. Faire les migrations make migrate

  • Rajouter des tests unitaires...
  1. Faire un make preprod pour générer les fichiers statiques et vérifier les réglages

Idées de développement

A.K.A. la liste des trucs utiles que je n'ai pas eu le temps d'ajouter :

  • Intégrer l'algorithme de répartition dans le site au lieu de le faire tourner en externe à partir des exports CSV et de remplir les résultats à la main
  • Envoyer une concaténation de tous les emails aux admins (pour vérification, et pas juste en copie pour éviter le spam...)
  • Générer la version PDF du planning automatiquement au lieu de la faire à base de captures d'écran
  • Remplacer les templates HTML statiques par du rendu de fichier markdown éditable depuis la page d'admin (afin d'éviter de devoir refaire un pull à chaque petit changement) fait
  • Réutiliser les comptes élèves pour éviter aux gens de devoir créer des comptes. À Ulm, nous avons un système de compte clipper fourni par l'admin qu'on réutilise dans quasi tous les sites étudiants. Je peux facilement le rajouter à ce site, mais je ne sais pas comment faire pour les autres écoles.
  • Rajouter des tests unitaires...

Liens divers