Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
controller_home.class.php
Aller à la documentation de ce fichier.
1<?php
2
25{
32 public function __construct(\Twig\Environment $twig, \Twig\Loader\FilesystemLoader $loader)
33 {
34 parent::__construct($loader, $twig);
35 }
36
49 public function afficher()
50 {
51 if (!isset($_SESSION['user_logged_in']) || !isset($_SESSION['user_role'])) {
52 $this->openDashboard();
53 exit();
54 }
55
56 // Transformation du rôle utilisateur de string vers enum Role
57 switch ($_SESSION['user_role']) {
58 case RoleEnum::Artiste:
59 $this->artisteDashboard();
60 break;
61 case RoleEnum::Admin:
62 $this->redirectTo('admin', 'afficher');
63 break;
64 case RoleEnum::Auditeur:
65 $this->auditeurDashboard();
66 break;
67 case RoleEnum::Producteur:
68 $this->producteurDashboard();
69 break;
71 $this->openDashboard();
72 break;
73 default:
74 $this->openDashboard();
75 break;
76 }
77 }
78
87 public function connect()
88 {
89
90 $redirectUrl = $_GET["redirect"] ?? "";
91 $redirectUrl = urldecode($redirectUrl);
92
93 // Éviter l'injection d'URL
94 if (!empty($redirectUrl)) {
95 // Vérifier que le redirectUrl est une URL interne valide, pour éviter toute injection (open redirect ou autre)
96 // On n'autorise que les URL commençant par "/" et ne contenant pas "://"
97 $redirectUrlDecoded = urldecode($redirectUrl);
98 if (strpos($redirectUrlDecoded, '://') !== false || (strlen($redirectUrlDecoded) > 0 && $redirectUrlDecoded[0] !== '/')) {
99 // L'URL contient un schéma ou n'est pas un chemin relatif ; on l'ignore
100 $redirectUrl = '';
101 }
102 }
103
104 if (isset($_SESSION['user_logged_in']) && $_SESSION['user_logged_in']) {
105 // Déjà connecté
106 if (!empty($redirectUrl)) {
107 // Si une URL de redirection est fournie, l'utiliser directement
108 header('Location: ' . $redirectUrl);
109 exit;
110 } else {
111 $this->redirectTo('home', 'afficher');
112 }
113 }
114
115 $template = $this->getTwig()->load('connect.html.twig');
116 echo $template->render([
117 'page' => [
118 'title' => "Connexion requise",
119 'name' => "login_required",
120 'description' => "Veuillez vous connecter pour continuer"
121 ],
122 'session' => $_SESSION,
123 'redirect' => $redirectUrl
124 ]);
125 }
126
134 public function homeBienvenue()
135 {
136 $template = $this->getTwig()->load('index.html.twig');
137 echo $template->render([
138 'page' => [
139 'title' => "Accueil",
140 'name' => "accueil",
141 'description' => "Page d'accueil de Paaxio"
142 ],
143 'session' => $_SESSION
144 ]);
145 }
146
157 private function openDashboard()
158 {
159
160 $aristesDAO = new UtilisateurDAO($this->getPDO());
161 $artistesPopulaires = $aristesDAO->findTrending(8, 7);
162
163 $chansonsDAO = new ChansonDAO($this->getPDO());
164 $chansonsPopulaires = $chansonsDAO->findTrending(8, 7);
165
166 // Crée un nouvel array où chaque chanson garde toutes ses infos, mais on ajoute l'artiste avec son pseudo, pas son email
167 $chansonsPopulairesAvecArtistePseudo = [];
168 foreach ($chansonsPopulaires as $chanson) {
169 // Si le dao hydrate la propriété emailPublicateur :
170 $artistePseudo = null;
171 // On va récupérer le pseudo correspondant à l'email publicateur (pas l'email), si possible
172 if ($chanson->getEmailPublicateur()) {
173 $utilisateurDAO = new UtilisateurDAO($this->getPDO());
174 $utilisateur = $utilisateurDAO->find($chanson->getEmailPublicateur());
175 $artistePseudo = $utilisateur ? $utilisateur->getPseudoUtilisateur() : null;
176 }
177 $chansonsPopulairesAvecArtistePseudo[] = [
178 'chanson' => $chanson,
179 'artistePseudo' => $artistePseudo,
180 ];
181 }
182
183 // Récupérer les albums les plus écoutés
184 $albumDAO = new AlbumDAO($this->getPDO());
185 $albumsPopulaires = $albumDAO->findMostListened(8); // On récupère les 8 plus populaires
186
187 $template = $this->getTwig()->load('open_dashboard.html.twig');
188 echo $template->render([
189 'page' => [
190 'title' => 'Paaxio',
191 'name' => "accueil",
192 'description' => "Découvrez de nouveaux artistes, chansons et albums en tendance sur Paaxio!"
193 ],
194 'session' => $_SESSION,
195 'artistes' => $artistesPopulaires,
196 'chansons' => $chansonsPopulairesAvecArtistePseudo,
197 'albums' => $albumsPopulaires,
198 ]);
199 }
200
211 private function artisteDashboard()
212 {
213 $utilisateurDAO = new UtilisateurDAO($this->getPDO());
214 $artistesSuggere = $utilisateurDAO->findAllArtistes($_SESSION['user_email']);
215
216 // On récupère les albums de l'artiste
217 $albumDAO = new AlbumDAO($this->getPDO());
218 $albums = $albumDAO->findAllByArtistEmail($_SESSION['user_email']);
219
220 // Calcul des statistiques de l'artiste
221 $chansonDAO = new ChansonDAO($this->getPDO());
222 $battleDAO = new BattleDAO($this->getPDO());
223
224 $totalReproductions = $chansonDAO->getTotalEcoutesByArtiste($_SESSION['user_email']);
225 $totalAbonnes = $utilisateurDAO->countFollowers($_SESSION['user_email']);
226 $battlesGagnees = $battleDAO->countBattlesWon($_SESSION['user_email']);
227
228 $template = $this->getTwig()->load('artiste_dashboard.html.twig');
229 echo $template->render([
230 'page' => [
231 'title' => ($_SESSION['user_pseudo'] ?? 'Artiste') . ' dashboard',
232 'name' => "accueil",
233 'description' => "Dashboard de " . ($_SESSION['user_pseudo'] ?? 'artiste')
234 ],
235 'session' => $_SESSION,
236 'artistes' => $artistesSuggere,
237 'albums' => $albums,
238 'stats' => [
239 'totalReproductions' => $totalReproductions,
240 'totalAbonnes' => $totalAbonnes,
241 'battlesGagnees' => $battlesGagnees,
242 ],
243 ]);
244 }
245
255 private function auditeurDashboard()
256 {
257 $utilisateurDAO = new UtilisateurDAO($this->getPDO());
258 $artistesSuggere = $utilisateurDAO->findTrending(8, 7);
259
260 $chansonsDAO = new ChansonDAO($this->getPDO());
261 $chansonsPopulaires = $chansonsDAO->findTrending(8, 7);
262
263 $chansonsAvecArtiste = [];
264 foreach ($chansonsPopulaires as $chanson) {
265 $artistePseudo = null;
266 if ($chanson->getEmailPublicateur()) {
267 $utilisateur = $utilisateurDAO->find($chanson->getEmailPublicateur());
268 $artistePseudo = $utilisateur ? $utilisateur->getPseudoUtilisateur() : null;
269 }
270 $chansonsAvecArtiste[] = [
271 'chanson' => $chanson,
272 'artistePseudo' => $artistePseudo,
273 ];
274 }
275
276 $albumDAO = new AlbumDAO($this->getPDO());
277 $albumsPopulaires = $albumDAO->findMostListened(8);
278
279 $template = $this->getTwig()->load('auditeur_dashboard.html.twig');
280 echo $template->render([
281 'page' => [
282 'title' => 'Mon dashboard',
283 'name' => "accueil",
284 'description' => "Dashboard principal"
285 ],
286 'session' => $_SESSION,
287 'artistes' => $artistesSuggere,
288 'chansons' => $chansonsAvecArtiste,
289 'albums' => $albumsPopulaires,
290 ]);
291 }
292
303 private function producteurDashboard()
304 {
305 $utilisateurDAO = new UtilisateurDAO($this->getPDO());
306 $albumDAO = new AlbumDAO($this->getPDO());
307
308 $emailUtilisateur = $_SESSION['user_email'] ?? '';
309 $artistesSuggere = $utilisateurDAO->findAllArtistes($emailUtilisateur);
310 $albumsPopulaires = $albumDAO->findMostListened(4);
311
312 $artistesInscritsSemaine = 0;
313 $artistePlusBatailles = null;
314
315 try {
316 $pdo = $this->getPDO();
317
318 $sqlArtistesSemaine = "SELECT COUNT(*)
319 FROM utilisateur u
320 INNER JOIN role r ON u.roleUtilisateur = r.idRole
321 WHERE r.typeRole = 'artiste'
322 AND u.dateInscriptionUtilisateur >= DATE_SUB(NOW(), INTERVAL 7 DAY)";
323 $stmtArtistesSemaine = $pdo->prepare($sqlArtistesSemaine);
324 $stmtArtistesSemaine->execute();
325 $artistesInscritsSemaine = (int)$stmtArtistesSemaine->fetchColumn();
326
327 $sqlTopBattles = "SELECT u.pseudoUtilisateur
328 FROM vote v
329 INNER JOIN utilisateur u ON u.emailUtilisateur = v.emailVotee
330 GROUP BY v.emailVotee, u.pseudoUtilisateur
331 ORDER BY COUNT(*) DESC
332 LIMIT 1";
333 $stmtTopBattles = $pdo->prepare($sqlTopBattles);
334 $stmtTopBattles->execute();
335 $artistePlusBatailles = $stmtTopBattles->fetchColumn() ?: null;
336 } catch (Exception $e) {
337 $artistesInscritsSemaine = 0;
338 $artistePlusBatailles = null;
339 }
340
341 $template = $this->getTwig()->load('producteur_dashboard.html.twig');
342 echo $template->render([
343 'page' => [
344 'title' => 'Accueil producteur',
345 'name' => 'accueil',
346 'description' => 'Tableau de bord producteur pour découvrir de nouveaux talents'
347 ],
348 'session' => $_SESSION,
349 'artistes' => $artistesSuggere,
350 'albums' => $albumsPopulaires,
351 'stats' => [
352 'artistesInscritsSemaine' => $artistesInscritsSemaine,
353 'artistesTrouves' => count($artistesSuggere),
354 'artistePlusBatailles' => $artistePlusBatailles ?? (isset($artistesSuggere[0]) ? $artistesSuggere[0]->getPseudoUtilisateur() : 'Aucun'),
355 ],
356 ]);
357 }
358
363 public function apercuProducteur()
364 {
365 $this->producteurDashboard();
366 }
367
375 public function session()
376 {
377 $template = $this->getTwig()->load('test.html.twig');
378 echo $template->render(array(
379 'page' => [
380 'title' => "DATA SESSION",
381 'name' => "session",
382 'description' => "Session dans Paaxio"
383 ],
384 'testing' => $_SESSION,
385 ));
386 }
387
393 public function afficherLegales()
394 {
395 $template = $this->getTwig()->load('mentionsLegales.html.twig');
396 echo $template->render(array(
397 'page' => [
398 'title' => "Mentions légales",
399 'name' => "mentionsLegales",
400 'description' => "Mentions légales de Paaxio"
401 ],
402 ));
403 }
404
410 public function afficherGenerales()
411 {
412 $template = $this->getTwig()->load('conditions_generales.html.twig');
413 echo $template->render(array(
414 "page" => [
415 'title' => "Conditions Générales",
416 'name' => "conditions_generales",
417 'description' => "Conditions Générales de Paaxio"
418 ],
419 ));
420 }
421
423 public function afficherConsentement()
424 {
425 $template = $this->getTwig()->load('consentement.html.twig');
426 echo $template->render(array(
427 "page" => [
428 'title' => "Consentement à la diffusion et à la republication",
429 'name' => "consentement",
430 'description' => "Consentement à la diffusion et à la republication de Paaxio"
431 ],
432 ));
433 }
434}
@ Invite
Rôle administrateur avec tous les privilèges.
Definition Role.enum.php:37
Contrôleur dédié à la gestion de la page d'accueil.
openDashboard()
Affiche le tableau de bord public (utilisateurs non connectés ou invités).
__construct(\Twig\Environment $twig, \Twig\Loader\FilesystemLoader $loader)
Constructeur du contrôleur home.
producteurDashboard()
Affiche le tableau de bord du producteur connecté.
homeBienvenue()
Affiche la page d'accueil de bienvenue.
apercuProducteur()
Méthode d'aperçu du dashboard producteur (utile hors session producteur).
connect()
Affiche la page de connexion.
afficherLegales()
Affiche la page des mentions légales.
afficherConsentement()
Affiche la page de consentement à la diffusion et à la republication.
afficherGenerales()
Affiche la page des conditions générales.
afficher()
Affiche la page d'accueil selon le rôle de l'utilisateur.
auditeurDashboard()
Affiche le tableau de bord de l'auditeur connecté.
session()
Affiche les données de session (méthode de débogage).
artisteDashboard()
Affiche le tableau de bord de l'artiste connecté.
Classe de base pour tous les contrôleurs de l'application.
Twig Environment $twig
redirectTo(string $controller, string $method, array $params=[])
Redirige vers un contrôleur et une méthode donnés.
Twig Loader FilesystemLoader $loader
getPDO()
Récupère la connexion PDO.
getTwig()
Récupère l'environnement Twig.