30 $sql =
"SELECT * FROM playlist";
31 $pdoStatement = $this->pdo->prepare($sql);
32 $pdoStatement->execute();
33 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
34 $tableau = $pdoStatement->fetchAll();
41 $sql =
"SELECT * FROM playlist WHERE idPlaylist = :id
42 AND emailProprietaire = :email";
43 $pdoStatement = $this->pdo->prepare($sql);
44 $pdoStatement->execute(array(
49 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
50 $tableau = $pdoStatement->fetch();
54 $playlist = $this->
hydrate($tableau);
61 $sql =
"SELECT * FROM playlist WHERE emailProprietaire = :email";
62 $stmt = $this->pdo->prepare($sql);
63 $stmt->execute([
':email' => $email]);
64 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
71 public function hydrate(array $tableaAssoc): ?playlist
73 if (empty($tableaAssoc)) {
78 $playlist->setIdPlaylist(isset($tableaAssoc[
'idPlaylist']) ? (
int)$tableaAssoc[
'idPlaylist'] :
null);
79 $playlist->setNomPlaylist($tableaAssoc[
'nomPlaylist'] ??
null);
80 $playlist->setEstPubliquePlaylist($tableaAssoc[
'estPubliquePlaylist'] ??
null);
83 $playlist->setDateCreationPlaylist(
84 !empty($tableaAssoc[
'dateCreationPlaylist']) ?
new DateTime($tableaAssoc[
'dateCreationPlaylist']) : null
87 $playlist->setDateDerniereModification(
88 !empty($tableaAssoc[
'dateDerniereModification']) ?
new DateTime($tableaAssoc[
'dateDerniereModification']) : null
91 $playlist->setEmailProprietaire($tableaAssoc[
'emailProprietaire'] ??
null);
98 foreach ($tableauxAssoc as $tableauAssoc) {
99 $playlist = $this->
hydrate($tableauAssoc);
100 if ($playlist !==
null) {
102 $playlist->setUrlPochetteAuto($pochette);
103 $playlists[] = $playlist;
114 JOIN chansonPlaylist cp ON c.idChanson = cp.idChanson
115 WHERE cp.idPlaylist = :idPlaylist
116 ORDER BY cp.positionChanson ASC
119 $stmt = $this->pdo->prepare($sql);
120 $stmt->execute([
':idPlaylist' => $idPlaylist]);
121 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
124 foreach ($results as $row) {
126 $chanson = $chansonDAO->hydrate($row);
129 if ($emailUtilisateur) {
130 $sqlLike =
"SELECT 1 FROM likeChanson WHERE idChanson = :idChanson AND emailUtilisateur = :emailUtilisateur LIMIT 1";
131 $stmtLike = $this->pdo->prepare($sqlLike);
133 ':idChanson' => $chanson->getIdChanson(),
134 ':emailUtilisateur' => $emailUtilisateur
136 $isLiked = $stmtLike->fetchColumn() ? true :
false;
138 $chanson->setIsLiked($isLiked);
139 $chansons[] = $chanson;
169 public function creerPlaylist(
string $nom,
string $emailProprietaire,
bool $estPublique =
false): int
171 $sql =
"INSERT INTO playlist (nomPlaylist, estPubliquePlaylist, emailProprietaire) VALUES (:nom, :estPublique, :email)";
172 $stmt = $this->pdo->prepare($sql);
175 ':estPublique' => $estPublique ? 1 : 0,
176 ':email' => $emailProprietaire
178 return (
int)$this->pdo->lastInsertId();
192 if (empty($chansonIds)) {
196 $placeholders = implode(
',', array_fill(0, count($chansonIds),
'?'));
198 SELECT cp.idChanson, cp.idPlaylist
199 FROM chansonPlaylist cp
200 JOIN playlist p ON cp.idPlaylist = p.idPlaylist
201 WHERE p.emailProprietaire = ?
202 AND cp.idChanson IN ($placeholders)
205 $params = array_merge([$emailUtilisateur], array_map(
'intval', $chansonIds));
206 $stmt = $this->pdo->prepare($sql);
207 $stmt->execute($params);
208 $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
211 foreach ($rows as $row) {
212 $map[(int)$row[
'idChanson']][] = (
int)$row[
'idPlaylist'];
226 $sql =
"DELETE FROM chansonPlaylist WHERE idPlaylist = :idPlaylist AND idChanson = :idChanson";
227 $stmt = $this->pdo->prepare($sql);
228 $stmt->execute([
':idPlaylist' => $idPlaylist,
':idChanson' => $idChanson]);
230 if ($stmt->rowCount() === 0) {
234 $sqlUpdate =
"UPDATE playlist SET dateDerniereModification = NOW() WHERE idPlaylist = :idPlaylist";
235 $stmtUpdate = $this->pdo->prepare($sqlUpdate);
236 $stmtUpdate->execute([
':idPlaylist' => $idPlaylist]);
251 $sqlCheck =
"SELECT 1 FROM chansonPlaylist WHERE idPlaylist = :idPlaylist AND idChanson = :idChanson LIMIT 1";
252 $stmtCheck = $this->pdo->prepare($sqlCheck);
253 $stmtCheck->execute([
':idPlaylist' => $idPlaylist,
':idChanson' => $idChanson]);
254 if ($stmtCheck->fetchColumn()) {
258 $sqlPos =
"SELECT COALESCE(MAX(positionChanson), 0) + 1 AS nextPos FROM chansonPlaylist WHERE idPlaylist = :idPlaylist";
259 $stmtPos = $this->pdo->prepare($sqlPos);
260 $stmtPos->execute([
':idPlaylist' => $idPlaylist]);
261 $nextPos = (int)$stmtPos->fetchColumn();
263 $sql =
"INSERT INTO chansonPlaylist (idPlaylist, idChanson, positionChanson) VALUES (:idPlaylist, :idChanson, :position)";
264 $stmt = $this->pdo->prepare($sql);
266 ':idPlaylist' => $idPlaylist,
267 ':idChanson' => $idChanson,
268 ':position' => $nextPos
271 $sqlUpdate =
"UPDATE playlist SET dateDerniereModification = NOW() WHERE idPlaylist = :idPlaylist";
272 $stmtUpdate = $this->pdo->prepare($sqlUpdate);
273 $stmtUpdate->execute([
':idPlaylist' => $idPlaylist]);
287 $sql =
"DELETE FROM playlist WHERE idPlaylist = :idPlaylist AND emailProprietaire = :email";
288 $stmt = $this->pdo->prepare($sql);
290 ':idPlaylist' => $idPlaylist,
291 ':email' => $emailProprietaire
293 return $stmt->rowCount() > 0;
303 SELECT a.urlPochetteAlbum
304 FROM chansonPlaylist cp
305 JOIN chanson c ON cp.idChanson = c.idChanson
306 JOIN album a ON c.albumChanson = a.idAlbum
307 WHERE cp.idPlaylist = :idPlaylist
308 ORDER BY cp.positionChanson ASC
312 $stmt = $this->pdo->prepare($sql);
313 $stmt->execute([
'idPlaylist' => $idPlaylist]);
315 $result = $stmt->fetch(PDO::FETCH_ASSOC);
317 return $result ? $result[
'urlPochetteAlbum'] :
null;
creerPlaylist(string $nom, string $emailProprietaire, bool $estPublique=false)
Crée une nouvelle playlist pour un utilisateur.
hydrate(array $tableaAssoc)
getPdo()
Get the value of pdo.
supprimerChansonPlaylist(int $idPlaylist, int $idChanson)
Supprime une chanson d'une playlist.
findAllFromUser(?string $email=null)
__construct(?PDO $pdo=null)
Constructeur de la classe PlaylistDAO.
findAll()
Récupère toutes les playlists de la base de données.
getPlaylistIdsForChansons(array $chansonIds, string $emailUtilisateur)
Pour un ensemble de chansons et un utilisateur, retourne un tableau chansonId => [playlistId,...
recupererPochetteAuto(int $idPlaylist)
getChansonsByPlaylist(int $idPlaylist, ?string $emailUtilisateur=null)
supprimerPlaylist(int $idPlaylist, string $emailProprietaire)
Supprime une playlist et toutes ses associations chansonPlaylist (CASCADE).
setPdo(?PDO $pdo)
Set the value of pdo.
ajouterChansonPlaylist(int $idPlaylist, int $idChanson)
Ajoute une chanson à une playlist.
hydrateMany(array $tableauxAssoc)
findFromUser(int $id, ?string $email)