Examen final : Technologie Web
Filière : Génie des réseaux et des Systèmes de Télécommunication
Durée :3h
1. Application de gestion collaborative des tâches :
Vous devez développer une application PHP orientée objet permettant à plusieurs utilisateurs
de créer, partager et gérer des tâches.
L'application doit inclure :
• Gestion des utilisateurs ;
• Création, modification et suppression de tâches ;
• Partage de tâches entre plusieurs utilisateurs ;
• Affichage des tâches par utilisateur ;
• Filtres (statut, date) ;
2. BASE DE DONNÉES (4 points):
Créez une base todolist avec 3 tables :
Figure 1:Schéma relationnel
1
Script SQL
-- Table des utilisateurs
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
-- Table des tâches
CREATE TABLE taches (
id INT AUTO_INCREMENT PRIMARY KEY,
titre VARCHAR(255) NOT NULL,
description TEXT,
statut ENUM('à faire', 'en cours', 'terminée') DEFAULT 'à faire',
date_limite DATE
);
-- Table d'association user ↔ tâche
CREATE TABLE affectations (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
tache_id INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (tache_id) REFERENCES taches(id) ON DELETE CASCADE,
UNIQUE(user_id, tache_id) -- Évite les doublons d'affectation
);
3. CLASSES (POO) (6 points)
Dans le dossier models/, créez les 3 classes suivantes :
Classe User
• Attributs privés : id, nom, email
2
• Méthodes (public): constructeur, getters/setters, __toString()
Classe Tache
• Attributs privés : id, titre, description, statut, dateLimite
• Méthodes (public): constructeur, getters/setters, afficher() → retourne une description
lisible
Classe Affectation
• Attributs privés : id, userId, tacheId
• Méthodes (public) : constructeur, getters/setters
4. CLASSES MANAGER (6 points)
Dans le dossier managers/, créez :
[Link] (1 pt)
• une classe qui fournit une seule instance de connexion PDO à la base de données,
réutilisable dans toute l’application.
[Link] (2 pts)
• ajouter(User $u) : ajoute un nouvel utilisateur en base
• getById(int $id) : récupère un utilisateur par son identifiant
[Link] (2 pts)
• ajouter (Tache $t) : ajoute une nouvelle tâche
• modifier (Tache $t) : modifie une tâche existante
• supprimer (int $id) : supprime une tâche par son identifiant
• getAll() : retourne l’ensemble des tâches
[Link] (1 pt)
• affecter(int $userId, int $tacheId) : associe une tâche à un utilisateur
• getTachesByUser(int $userId) : liste les tâches d’un utilisateur
• getUsersByTache(int $tacheId) : liste les utilisateurs associés à une tâche
Toutes les requêtes doivent être préparées avec prepare() et bindValue() ou bindParam().
5. Implémentation (4 points)
Dans [Link], montrez l’utilisation des classes avec les étapes suivantes :
1. Créez 2 utilisateurs
3
2. Créez 3 tâches
3. Affectez des tâches aux utilisateurs
4. Modifiez le statut d’une tâche
5. Affichez les tâches d’un utilisateur
Vous pouvez utiliser du HTML simple (<ul>, <table>) pour présenter les résultats.
Créer un répertoire qui porte votre nom (sans espace) dans le WWW (ou htdocs pour xampp) et
enregistrer tout le travail dans ce répertoire.