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 rechercher(string $term): array
43 {
44 $sql = "SELECT a.*, u.pseudoUtilisateur,
45 (SELECT SUM(nbEcouteChanson) FROM chanson WHERE albumChanson = a.idAlbum) as totalEcoutes
46 FROM album a
47 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur
48 WHERE a.nomAlbum LIKE :term
49 ORDER BY totalEcoutes DESC
50 LIMIT 3";
51
52 $stmt = $this->pdo->prepare($sql);
53 $stmt->execute([':term' => '%' . $term . '%']);
54
55 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
56 $albums = [];
57 foreach ($results as $row) {
58 $album = $this->hydrate($row);
59 if (isset($row['pseudoUtilisateur'])) {
60 $album->setPseudoArtiste($row['pseudoUtilisateur']);
61 }
62 $albums[] = $album;
63 }
64 return $albums;
65 }
66
72 public function find(int $id): ?Album
73 {
74 $sql = "SELECT a.*, u.pseudoUtilisateur
75 FROM album a
76 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur
77 WHERE a.idAlbum = :id";
78 $pdoStatement = $this->pdo->prepare($sql);
79 $pdoStatement->execute([':id' => $id]);
80
81 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
82 $tableau = $pdoStatement->fetch();
83
84 if (!$tableau) {
85 return null;
86 }
87
88 $album = $this->hydrate($tableau);
89 if (isset($tableau['pseudoUtilisateur'])) {
90 $album->setPseudoArtiste($tableau['pseudoUtilisateur']);
91 }
92 return $album;
93 }
94
100 public function findByArtiste(string $artistePseudo): array
101 {
102 $sql = "SELECT a.* FROM album a
103 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur -- CORRECTION : Jointure sur l'email
104 WHERE u.pseudoUtilisateur = :artistePseudo
105 ORDER BY a.dateSortieAlbum DESC";
106 $pdoStatement = $this->pdo->prepare($sql);
107 $pdoStatement->execute([':artistePseudo' => $artistePseudo]);
108 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
109 $tableau = $pdoStatement->fetchAll();
110 $albums = $this->hydrateMany($tableau);
111 return $albums;
112 }
113
119 public function findAllByArtistEmail(string $email): array
120 {
121 $sql = "SELECT a.* FROM album a
122 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur -- CORRECTION : Jointure sur l'email (était sur u.pseudoUtilisateur)
123 WHERE u.emailUtilisateur = :email
124 ORDER BY a.dateSortieAlbum DESC";
125 $pdoStatement = $this->pdo->prepare($sql);
126 $pdoStatement->execute([':email' => $email]);
127 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
128 $tableau = $pdoStatement->fetchAll();
129 $albums = $this->hydrateMany($tableau);
130 return $albums;
131 }
132
138 public function create(Album $album): int
139 {
140 $sql = "INSERT INTO album (nomAlbum, dateSortieAlbum, urlPochetteAlbum, artisteAlbum) VALUES (:nomAlbum, :dateSortie, :pochette, :artiste)";
141 $pdoStatement = $this->pdo->prepare($sql);
142 $pdoStatement->execute([
143 ':nomAlbum' => $album->getTitreAlbum(),
144 ':dateSortie' => $album->getDateSortieAlbum(),
145 ':pochette' => $album->geturlPochetteAlbum(),
146 ':artiste' => $album->getArtisteAlbum()
147 ]);
148
149 return (int)$this->pdo->lastInsertId();
150 }
151
157 public function hydrate(array $tableaAssoc): Album
158 {
159 $album = new Album();
160 $album->setIdAlbum(isset($tableaAssoc['idAlbum']) ? (int)$tableaAssoc['idAlbum'] : null);
161 $album->setTitreAlbum($tableaAssoc['nomAlbum'] ?? null);
162 $album->setDateSortieAlbum($tableaAssoc['dateSortieAlbum'] ?? null);
163 $album->seturlPochetteAlbum($tableaAssoc['urlPochetteAlbum'] ?? null);
164 $album->setArtisteAlbum($tableaAssoc['artisteAlbum'] ?? null);
165 return $album;
166 }
167
173 public function hydrateMany(array $tableauxAssoc): array
174 {
175 $albums = [];
176 foreach ($tableauxAssoc as $tableauAssoc) {
177 $albums[] = $this->hydrate($tableauAssoc);
178 }
179 return $albums;
180 }
181
189 public function findMostListened(int $limit = 8): array
190 {
191 // Cette requête calcule la somme des écoutes de toutes les chansons d'un album
192 // pour déterminer la popularité de cet album.
193 $sql = "SELECT
194 a.*,
195 u.pseudoUtilisateur,
196 SUM(c.nbEcouteChanson) as totalEcoutes
197 FROM album a
198 JOIN chanson c ON a.idAlbum = c.albumChanson
199 JOIN utilisateur u ON a.artisteAlbum = u.emailUtilisateur -- CORRECTION : Jointure sur l'email (était sur u.pseudoUtilisateur)
200 GROUP BY a.idAlbum
201 ORDER BY totalEcoutes DESC
202 LIMIT :limit";
203
204 try {
205 $stmt = $this->pdo->prepare($sql);
206 $stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
207 $stmt->execute();
208
209 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
210 $albums = [];
211
212 foreach ($results as $row) {
213 $album = $this->hydrate($row);
214 // Le setter setPseudoArtiste doit exister dans votre classe Album
215 $album->setPseudoArtiste($row['pseudoUtilisateur']);
216 $albums[] = $album;
217 }
218 return $albums;
219 } catch (PDOException $e) {
220 error_log('Erreur DAO lors de la récupération des albums les plus écoutés : ' . $e->getMessage());
221 return [];
222 }
223 }
224
225
230 public function getPdo(): ?PDO
231 {
232 return $this->pdo;
233 }
234
239 public function setPdo(?PDO $pdo): void
240 {
241 $this->pdo = $pdo;
242 }
243}
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.
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
rechercher(string $term)
Recherche albums par titre.
Definition album.dao.php:42
findAllByArtistEmail(string $email)
Récupère les albums d'un artiste en utilisant son email.
find(int $id)
Récupère un album par son identifiant.
Definition album.dao.php:72
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.