README pour le Repo Recherche Créneaux
Ce projet vise à développer un outil pour la recherche de créneaux automatique dans un planning.
Le but est de fournir une interface simple et intuitive pour rechercher des créneaux disponibles en fonction de différents critères, tels que les agendas par utilisateur, la date, l'heure, la durée
Le projet se base sur la récupération des évenements FREE/BUSY depuis l'api d'un calendrier (kronoligh/google/...).
- Pour trouver les créneaux, il y'a tout d'abord une génération des créneaux avec les paramètres demandés (jours, durée...) grâce à la librairie composer : rlanvin/php-rrule
- Les créneaux busys sont récupérés sur l'api iCalendar FREE/BUSYS puis normalisés cad formattés aux creneaux générés pour préparer la comparaison
- Les créneaux sont par la suite comparés avec les créneaux busys récupérés, class FBCompare
- Génération des creneaux demandés : FBCreneauxGeneres
- Récupération des busys Utilisateurs: FBUser
- Normalisation des créneaux busys : FBUser
- Comparaison entre créneaux générés / creneaux Busys : FBCompare
- Recherche de créneaux par date, heure, durée
- Affichage des créneaux disponibles sous forme de liste
- Possibilité d'envoyer une invitation aux participants réserver des créneaux
- Création Evento : crée automatiquement un sondage listant plusieurs créneaux par appels ajax sur l'application evento de chez Renater
Le projet dépend de 2 outils indispensable : Composer v2 et Yarnpkg v4
- composer.json : configuration projet pour PHP
yarn est utilisé pour gérer le projet (rôle similaire à composer pour le js)
- package.json: configuration projet pour JS
requirejs est utilisé pour charger les scripts js
-
index.php :
<script data-main="js/main" src="node_modules/requirejs/require.js">
- js/main.js : configuration du projet js: dépendances, shim...
require.config({ ...
- js/main.js : configuration du projet js: dépendances, shim...
Les scripts bootstrap sont chargés par un plugin: bootstrap ayant des erreur esprima et ne pouvant être minifié avec le reste des js,
- js/lib/jbmoelker/requirejs-bootstrap-plugin.js : permet de charger bootstrap indépendament du reste
- le code suivant est appelé pour le chargement asynchrone (ex pour tooltip): bootstrap!tooltip:
require(['bootstrap!tooltip'], function($) {... //ex : tooltipbootstrap }
l'optimiseur r.js est utilisé pour compilé les fichiers js dans un fichier js
- .env : variable : RJSFILE : fichier js compilé dans le répertoire js/ (ex main-built.js : compilera le js dans js/main-built.js)
- !!! bootstrap n'est pas compilé dans le fichier RJSFILE
- js/build.js : directives de compilation
- bin/optimize.sh : script bash faisant appel à r.js
Utilisation des composants api
Dans le cadre du développement du projet, l'appel se fait sur un agenda kronolith avec le paramètre du fichier .env : URL_FREEBUSY
Pour la séléction des utilisateurs, le projet fait appel à une api : UnivParis1/wsgroups
l'api qui renvoie les identifiants des utilisateurs de type uid/displayname
Cette api est centrale à l'application mais elle peut être configurée en option dans .env -> WSGROUP : false
Si il n'y a pas d'appel à wsgroup, l'application est limitée fonctionnellement
Possibilité de créer un sondage sur plusieurs créneaux
- Projet Moment de chez Renater: https://sourcesup.renater.fr/projects/moment/
La configuration se fait en créant un fichier .env sur la base du fichier .env.example
- Fichier .env : mis à la racine du projet, variables de configuration
- Fichier .env.example : recense les variables de configurations avec les valeures possibles
- URL_FREEBUSY : url api récupération du calendrier.
- RJSFILE: nom du fichier compilant tous les fichiers js (excepté bootstrap, qui ne peut pas être compilé)
Les répertoires vendor et node_modules sont hors git il faut les synchroniser sur les instances de test/prod :
- vendor/
- node_modules/
Script regroupant les principales tâches d'administrations
Regroupe les tâches de maintenance du projet: à appeler à la racine du projet
Pour generer les répertoires vendor/ et node_modules/ depuis composer.json et package.json
- ./maintenance.sh build all : construit les répertoire vendor/ et node_modules/
- ./maintenance.sh build composer: build vendor/
- ./maintenance.sh build node: build node_modules/
rsync les répertoires vendor/ et node_modules. nécessite de préciser le host (nom du serveur sur lequel rsync les fichiers)
- ./maintenance.sh sync all HOST : syncronise vendor/ et node_modules/
- ./maintenance.sh sync vendor HOST : sync vendor/
- ./maintenance.sh sync node HOST : sync node_modules/
- ./maintenance.sh clear all / composer / node : supprime tous les fichiers générés avec les .lock ou seulement vendor/ ou node_modules/
- ./maintenance.sh optijs build / clear: génere les fichiers .min.js (compilation des fichiers js en un seul et minifie (uglifie) ou les supprime
Les scripts js sont chargés de manière "asynchrone" via requirejs
- Tous les js sont dans le répertoire js/
- js/main.js : Ce fichier regroupe la configuration js, les librairies utilisées ainsi que leurs dépendances
- js/build.js: Directive pour la compilation js: regrouper tous les js dans un seul fichier (à l'exception de bootstrap)
- Dans bin/, le script optimize.sh genere le fichier compilé .env: RJSFILE
Des tests phpunit pour éviter des régréssions sont faits.
Pour le moment, la classe testée est FBCompare
Ceux-ci se trouvent dans le répertoire tests/FBCompareTest-ID/
Une variable d'environnement doit être initialisée pour choisir le numéro du test
- Exemple commande pour choisir le test 1:
FBCompareTestId=1 vendor/bin/phpunit tests/FBCompareTest.php
Les données de test sont sous forme de json, ce sont des données serialisées, il y'a 3 fichiers qui correspondent aux classes instanciées:
- stdenv.json : stdClass stdEnv
- fbparams.json : class FBParams
- fbform.json : class FBForm
Ce projet est sous licence Apache 2.