Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
album.dao.php
Aller à la documentation de ce fichier.
1<?php
7{
11 private ?PDO $pdo;
12
17 public function __construct(?PDO $pdo = null)
18 {
19 $this->pdo = $pdo;
20 }
21
26 public function findAll(): array
27 {
28 $sql = "SELECT * FROM album";
29 $pdoStatement = $this->pdo->prepare($sql);
30 $pdoStatement->execute();
31 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
32 $tableau = $pdoStatement->fetchAll();
33 $album = $this->hydrateMany($tableau);
34 return $album;
35 }
36
42 public function find(int $id): Album
43 {
44 $sql = "SELECT a.*, u.pseudoUtilisateur
45 FROM album a
46 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur
47 WHERE a.idAlbum = :id";
48 $pdoStatement = $this->pdo->prepare($sql);
49 // Correction mineure : utilisation de la syntaxe [] au lieu de array()
50 $pdoStatement->execute([
51 ':id' => $id
52 ]);
53
54 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
55 $tableau = $pdoStatement->fetch();
56 $album = $this->hydrate($tableau);
57 // Set the pseudo if available
58 if (isset($tableau['pseudoUtilisateur'])) {
59 $album->setPseudoArtiste($tableau['pseudoUtilisateur']);
60 }
61 return $album;
62 }
63
69 public function findByArtiste(string $artistePseudo): array
70 {
71 $sql = "SELECT a.* FROM album a
72 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur -- CORRECTION : Jointure sur l'email
73 WHERE u.pseudoUtilisateur = :artistePseudo
74 ORDER BY a.dateSortieAlbum DESC";
75 $pdoStatement = $this->pdo->prepare($sql);
76 $pdoStatement->execute([':artistePseudo' => $artistePseudo]);
77 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
78 $tableau = $pdoStatement->fetchAll();
79 $albums = $this->hydrateMany($tableau);
80 return $albums;
81 }
82
88 public function findAllByArtistEmail(string $email): array
89 {
90 $sql = "SELECT a.* FROM album a
91 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur -- CORRECTION : Jointure sur l'email (était sur u.pseudoUtilisateur)
92 WHERE u.emailUtilisateur = :email
93 ORDER BY a.dateSortieAlbum DESC";
94 $pdoStatement = $this->pdo->prepare($sql);
95 $pdoStatement->execute([':email' => $email]);
96 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
97 $tableau = $pdoStatement->fetchAll();
98 $albums = $this->hydrateMany($tableau);
99 return $albums;
100 }
101
107 public function create(Album $album): int
108 {
109 $sql = "INSERT INTO album (nomAlbum, dateSortieAlbum, urlPochetteAlbum, artisteAlbum) VALUES (:nomAlbum, :dateSortie, :pochette, :artiste)";
110 $pdoStatement = $this->pdo->prepare($sql);
111 $pdoStatement->execute([
112 ':nomAlbum' => $album->getTitreAlbum(),
113 ':dateSortie' => $album->getDateSortieAlbum(),
114 ':pochette' => $album->geturlPochetteAlbum(),
115 ':artiste' => $album->getArtisteAlbum()
116 ]);
117
118 return (int)$this->pdo->lastInsertId();
119 }
120
126 public function hydrate(array $tableaAssoc): Album
127 {
128 $album = new Album();
129 $album->setIdAlbum(isset($tableaAssoc['idAlbum']) ? (int)$tableaAssoc['idAlbum'] : null);
130 $album->setTitreAlbum($tableaAssoc['nomAlbum'] ?? null);
131 $album->setDateSortieAlbum($tableaAssoc['dateSortieAlbum'] ?? null);
132 $album->seturlPochetteAlbum($tableaAssoc['urlPochetteAlbum'] ?? null);
133 $album->setArtisteAlbum($tableaAssoc['artisteAlbum'] ?? null);
134 return $album;
135 }
136
142 public function hydrateMany(array $tableauxAssoc): array
143 {
144 $albums = [];
145 foreach ($tableauxAssoc as $tableauAssoc) {
146 $albums[] = $this->hydrate($tableauAssoc);
147 }
148 return $albums;
149 }
150
158 public function findMostListened(int $limit = 8): array
159 {
160 // Cette requête calcule la somme des écoutes de toutes les chansons d'un album
161 // pour déterminer la popularité de cet album.
162 $sql = "SELECT
163 a.*,
164 u.pseudoUtilisateur,
165 SUM(c.nbEcouteChanson) as totalEcoutes
166 FROM album a
167 JOIN chanson c ON a.idAlbum = c.albumChanson
168 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur -- CORRECTION : Jointure sur l'email (était sur u.pseudoUtilisateur)
169 GROUP BY a.idAlbum
170 ORDER BY totalEcoutes DESC
171 LIMIT :limit";
172
173 try {
174 $stmt = $this->pdo->prepare($sql);
175 $stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
176 $stmt->execute();
177
178 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
179 $albums = [];
180
181 foreach ($results as $row) {
182 $album = $this->hydrate($row);
183 // Le setter setPseudoArtiste doit exister dans votre classe Album
184 $album->setPseudoArtiste($row['pseudoUtilisateur']);
185 $albums[] = $album;
186 }
187 return $albums;
188 } catch (PDOException $e) {
189 error_log('Erreur DAO lors de la récupération des albums les plus écoutés : ' . $e->getMessage());
190 return [];
191 }
192 }
193
194
199 public function getPdo(): ?PDO
200 {
201 return $this->pdo;
202 }
203
208 public function setPdo(?PDO $pdo): void
209 {
210 $this->pdo = $pdo;
211 }
212}
getPdo()
Getter pour la pdo.
__construct(?PDO $pdo=null)
Constructeur de la classe AlbumDAO.
Definition album.dao.php:17
findByArtiste(string $artistePseudo)
Récupère les albums d'un artiste en utilisant son pseudo.
Definition album.dao.php:69
hydrate(array $tableaAssoc)
Hydrate un album à partir d'un tableau associatif.
findMostListened(int $limit=8)
Récupère les albums les plus écoutés.
create(Album $album)
Crée un nouvel album dans la base de données.
hydrateMany(array $tableauxAssoc)
Hydrate plusieurs albums à partir d'un tableau de tableaux associatifs.
findAll()
Récupère tous les albums de la base de données.
Definition album.dao.php:26
findAllByArtistEmail(string $email)
Récupère les albums d'un artiste en utilisant son email.
Definition album.dao.php:88
find(int $id)
Récupère un album par son identifiant.
Definition album.dao.php:42
setPdo(?PDO $pdo)
Setter pour la pdo.
getTitreAlbum()
Getter pour le titre de l'album.
getArtisteAlbum()
Getter pour le nom de l'artiste de l'album.
getDateSortieAlbum()
Getter pour la date de sortie de l'album.