TP noté ======= ## Contexte La startup dans laquelle vous venez d'être recruté s'agrandit et il devient primordial de mettre en place une **gestion mutualisée du parc informatique**. C'est en partie pour vos compétences en développement web que vous avez tapé dans l'œil de votre chef de projet : votre première mission consiste à concevoir une application back-end (partie serveur) Lumen avec un front-end (site web) minimaliste pour la gestion du parc informatique, répondant au cahier des charges qui suit. ## Rendu - Pensez à "commiter" au fur et à mesure du TP - Ne "pusher" l'ensemble de votre code sur Gitlab qu'au moment où vous terminez. - Attention, **seul les commits effectués AVANT la fin de la séance seront pris en compte** : pensez à prendre le temps nécessaire à ces opération avant la fin de l'examen. ## Évaluation - L'évaluation ne tiendra pas compte de la qualité de l'interface et de l'ergonomie : concentrez-vous sur le PHP, pas sur le HTML. - Les intentions seront prises en compte : si vous savez comment faire mais êtes bloqués par un problème technique, signalez-le par un commentaire et passez aux autres fonctionnalités. ## Base de données Le modèle de données utilisé doit être composé des 3 tables suivantes : - `Users` : login (varchar,255), password (varchar,255)` - `Postes` : id (int,11), salle (int,3), os (varchar,255)` - `Reservations` : id (int,11), user_id (varchar,255), poste_id (int,11), date_debut (date), date_fin (date), est_root (tinyint,1)` Dans la table `Users` : - la colonne `login` est la clé primaire et unique de la table `Users` Dans la table `Reservations` : - les colonnes `user_id` et `poste_id` sont des clés étrangères référençant les colonnes `login` et `id` des tables `Users` et `Postes`. - la colonne `est_root` est un booléen indiquant si l'utilisateur est administrateur ou non. - Les colonnes `date_debut` et `date_fin` définissent la période sur laquelle un utilisateur est autorisé à utiliser un poste. - Pour la colonne `est_root`, le type `(tinyint,1)` est identique à un booléen Le fichier `init_db.sql` contient un script SQL permettant de créer ces tables avec leurs contraintes et des enregistrements. Il doit être importé dans PhpMyAdmin selon les indications ci-dessous. ## Démarrer le TP 1. Exécutez la commande le `git pull prof master` pour récupérer le répertoire `TP_note` qui contient : - `ParcInfo/` : le répertoire contenant le framework lumen de base. - `init_db.sql` : le script d'initialisation de la base de données - `README.md` : l'énoncé du TP noté que vous êtes en train de lire. 2. Importez la base de données dans PhpMyAdmin : - Créez une nouvelle base de données `ParcInfo` depuis http://ss4s.iutrs.unistra.fr - Connectez-vous sur PhpMyAdmin à l'adresse http://webetu.iutrs.unistra.fr/phpmyadmin/ - Suivez [cette procédure](https://help.fasthosts.co.uk/app/answers/detail/a_id/3186/~/importing-and-exporting-mysql-databases-using-phpmyadmin) en choisissant sélectionnant la base `ParcInfo` et le script `init_db.sql` comme fichier à importer. 3. Modifiez le fichier `ParcInfo/.env` avec vos informations de connexion à la base de données. 4. Copiez-collez le répertoire `vendor` de l'un de vos projet Lumen, ainsi que tous les autres fichiers que vous voulez. 5. Votre environnement est prêt. ## Fonctionnalités à implémenter [Un site d'exemple est accessible ici](http://adrien.krahenbuhl.fr/courses/IUTRS/W31/TP-note-mockup/) : attention, tous les liens et les boutons d'envoi de formulaires sont de simples appels à des pages HTML statiques. Les actions d'ajout, de suppression et de modification son inopérantes. Pas besoin de compte pour se connecter et naviguer. ### Fonctionnalités de gestion du compte 1. Un visiteur anonyme doit pouvoir : (~5 points) - voir la page d'accueil - créer un compte - se connecter 2. Un utilisateur connecté doit pouvoir : (~6 points) - changer son mot de passe (les mots de passes doivent être chiffrés) - supprimer son compte > Note: Au moment de la connexion, c'est le nom de l'utilisateur qui est enregistré dans une variable de session et qui pourra (devra) être réutilisée lors de la gestion des postes. ### Fonctionnalités de gestion du parc informatique Les fonctionnalités de gestion du parc informatique doivent uniquement être réalisables si l'utilisateur est connecté. Un utilisateur connecté doit pouvoir : 1. Lister tous les postes informatiques avec pour chacun son id, sa salle et l'OS installé. 2. Ajouter un nouveau poste informatique en indiquant : - le numéro de la salle (balise `` de type `number`) - l'OS (balise `` contenant 2 `