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->homeBienvenue();
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 // Récupérer des artistes suggérés pour l'auditeur
259 $artistesSuggere = $utilisateurDAO->findAllArtistes($_SESSION['user_email']);
260
261 // Récupérer les albums les plus écoutés
262 $albumDAO = new AlbumDAO($this->getPDO());
263 $albumsPopulaires = $albumDAO->findMostListened(8); // On récupère les 8 plus populaires
264
265 $template = $this->getTwig()->load('auditeur_dashboard.html.twig');
266 echo $template->render([
267 'page' => [
268 'title' => 'Mon dashboard',
269 'name' => "accueil",
270 'description' => "Dashboard principal"
271 ],
272 'session' => $_SESSION,
273 'artistes' => $artistesSuggere,
274 'albums' => $albumsPopulaires,
275 ]);
276 }
277
285 public function session()
286 {
287 $template = $this->getTwig()->load('test.html.twig');
288 echo $template->render(array(
289 'page' => [
290 'title' => "DATA SESSION",
291 'name' => "session",
292 'description' => "Session dans Paaxio"
293 ],
294 'testing' => $_SESSION,
295 ));
296 }
297
303 public function afficherLegales()
304 {
305 $template = $this->getTwig()->load('mentionsLegales.html.twig');
306 echo $template->render(array(
307 'page' => [
308 'title' => "Mentions légales",
309 'name' => "mentionsLegales",
310 'description' => "Mentions légales de Paaxio"
311 ],
312 ));
313 }
314
320 public function afficherGenerales()
321 {
322 $template = $this->getTwig()->load('conditions_generales.html.twig');
323 echo $template->render(array(
324 "page" => [
325 'title' => "Conditions Générales",
326 'name' => "conditions_generales",
327 'description' => "Conditions Générales de Paaxio"
328 ],
329 ));
330 }
331}
@ 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.
homeBienvenue()
Affiche la page d'accueil de bienvenue.
connect()
Affiche la page de connexion.
afficherLegales()
Affiche la page des mentions légales.
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.