La structure générale est déjà présente, le contrôleur frontal est complet et ne doit pas être modifié (à part un ajout de managers par exemple)
- Clonez ce répertoire sur votre environnement de travail (!un clone n'est pas un fork!)
- Créez un dossier privé sur votre compte github nommé {Votre_prénom}Testcrudoo
- Faites le lien entre votre dossier privé github et le clone sur votre environnement de travail
- Utilisez git et github comme d'habitude, avec un commit par action importante (les branches sont optionnelles dans ce cas)
- Vous ne partagerez le travail qu'avec moi en allant dans Settings/Collaborators/ puis mikhawa
- Commencez par installer les dépendances avec Composer (composer.json est présent à la racine du projet))
- Installez la DB testcrudoo avec le fichier /DB/testcrudoo-structure.sql
- Insérez les données dans la DB avec le fichier /DB/testcrudoo-donnees.sql
- L'ouverture de session
- Le chargement de config.php contenant nos constantes de connexion à la DB
- Le chargement des dépendances externes
- L'activation de Twig et de certaines de ses extensions
- L'autoload de nos modèles (se trouvant dans le dossier /model/)
- Une connexion PDO à MySQL
- Une redirection vers les 3 contrôleurs suivant l'état de la session
-
connexionController.php
Où tous les utilisateurs non connectés arrivent
-
publicController.php
Où les utilisateurs connectés en tant que "lecteur" arrivent
-
AdminController.php
Où les utilisateurs connectés en tant que "admin" arrivent
Dossier où vous créerez vos modèles
- Les fichiers du template déjà fait en twig
- Le dossier /connexion avec un fichier pour vous connecter
- Le dossier /public permettant l'affichage du site aux "lecteur"
- Le dossier /admin permettant l'affichage du site aux "admin", avec des possibilités étendues CRUD
Ce test ressemblera fortement à l'exercice que vous avez eu fin juin, avec quelques changements structurels importants:
https://github.com/WebDevCF2019/CrudOO
ainsi que l'exercice précédent (plus proche pour la gestion des rubriques many to many)
https://github.com/WebDevCF2019/basicCrud
Une vue de la nouvelle DB se trouve à cette adresse:
https://dessycf2m.phpnet.org/images-utiles/crudoo/vue-globale.png
-
Vous devez avoir au minimum 2 mappings des tables venant de la base de données:
- theuser.php
- theroles.php
Il vous faut pour TOUS vos mapping les attributs, le constructeur, les getters et setters et l'hydratation ! Les setters doivent sécuriser les champs pour éviter les attaques de la DB !
-
Vous devez avoir au minimum 2 managers de ces classes:
- theuserManager.php
- therolesManager.php
Une connexion PDO doit être passée en argument aux managers ! Vous devez créer au minimum les méthodes "connectTheuser(theuser $var)" et "disconnectTheuser()" dans "theuserManager.php" pour permettre aux utilisateur enregistrés de se connecter et se déconnecter
La base du site sera la même pour tous:
- Lorsque vous arrivez sur le site, vous vous trouvez devant un formulaire de connexion
- Vous pouvez vous connecter en tant que
- "admin" avec comme login "admin" et mot de passe "admin"
- "lecteur" avec comme login "lulu" et mot de passe "lulu"
- En cas d'erreur un message est affiché et vous n'êtes pas connectés
- En cas de connexion réussie vous êtes envoyés vers le contrôleur de l'admin (adminController.php) ou celui d'un lecteur (publicController.php)
- Un bouton de déconnexion doit apparaître et permettre la déconnexion réelle des utilisateurs:
-
Si vous êtes connecté en tant que "lecteur", vous devez afficher:
-
Sur toutes les pages:
-
Sur l'accueil:
- Un message disant "Pas encore d'article sur notre site" si pas d'articles OU
- Une liste de tous vos articles triés par date descendante (table {votre_prénom}article) se trouvant dans n'importe quelle rubrique, même si l'article n'est pas dans une rubrique, avec:
-
Sur la page d'un catégorie:
- Le titre de la catégorie et la description de celle-ci
- Un message disant "Pas encore d'article sur cette rubrique" si pas d'articles OU
- Une liste de tous vos articles (table {votre_prénom}article) se trouvant dans la catégorie:
- Le titre
- Un résumé de l'article de 350 caractères avec "Lire la suite" cliquable vers le détail de l'article, si possible sans césure au milieu d'un mot
- La date de la création de l'article au format DATETIME
-
Sur la page de détail d'un article:
- Un message disant "Cette article n'existe plus" si l'article n'est pas existant OU
- Le titre
- La liste des catégories de l'article cliquables (ou pas si l'article n'a pas de catégorie)
- Le texte complet de l'article avec des retours automatiques à la ligne
- La date de la création de l'article au format DATETIME:
- Un message disant "Cette article n'existe plus" si l'article n'est pas existant OU
-
-
Si vous êtes connecté en tant que "admin", vous devez afficher:
-
Sur toutes les pages:
- Dans le menu du haut, un retour à l'accueil et "ajouter un article"
-
Sur la page d'accueil:
- Le titre "Administration des articles de TestCrudOO"
- "Pas encore d'article" affiché si il n'y a pas d'articles ou
- Une liste de tous vos articles (de vos tables personnelles uniquement) triés par date descendante (table {votre_prénom}article) se trouvant dans n'importe quelle rubrique, même si l'article n'est pas dans une rubrique, avec:
-
Sur la page d'ajout d'un article:
- Le formulaire pour envoyer en POST le nouvel article
- Le champ nécessaire pour insérer l'article (les noms exacts sont dans votre table {votre_prénom}article )
- Les checkbox affichant toutes les rubriques, permettant d'insérer l'article dans aucune, toutes ou certaines rubriques, voir votre table {votre_prénom}categ et la table de jointure many to many, utilisez {votre_prénom}categ pour récupérer ces rubriques
- Si l'article est bien inséré, faites une redirection sur l'accueil de l'admin, sinon affichez l'erreur
! ATTENTION utilisez bien les setters et getters de votre table {votre_prénom}article pour éviter toute attaque, puis {votre_prénom}articleManager pour effectuer réellement l'insertion !
-
Sur la page modifier un article:
- Le formulaire pour envoyer en POST l'article modifié
- Le champ nécessaire pour réinsérer l'article (les noms exacts sont dans votre table {votre_prénom}article ), déjà remplis avec le contenu
- Les checkbox affichant toutes les rubriques (celles déjà choisies doivent être cochées) permettant d'insérer l'article dans aucune, toutes ou certaines rubriques, voir votre table {votre_prénom}categ et la table de jointure many to many,, utilisez {votre_prénom}categ pour récupérer ces rubriques. Attention n'oubliez pas de vider la table many to many et d'y réinsérer les entrées à chaque update !
- Si l'article est bien modifié, faites une redirection sur l'accueil de l'admin, sinon affichez l'erreur
! ATTENTION utilisez bien les setters et getters de votre table {votre_prénom}article pour éviter toute attaque, puis {votre_prénom}articleManager pour effectuer réellement la modification !
-
Lors du clic sur "supprimer":
- Ouvrez un popup de confirmation ou une page de confirmation
- En cas de confirmation positive, supprimez l'article de la DB et retournez sur l'accueil
- dans le cas contraire retour à l'accueil
-