Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
playlist.dao.php
Aller à la documentation de ce fichier.
1<?php
8{
12 private ?PDO $pdo;
13
18 public function __construct(?PDO $pdo = null)
19 {
20 $this->pdo = $pdo;
21 }
22
27 public function findAll(): array
28 {
29 $sql = "SELECT * FROM playlist";
30 $pdoStatement = $this->pdo->prepare($sql);
31 $pdoStatement->execute();
32 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
33 $tableau = $pdoStatement->fetchAll();
34 $playlist = $this->hydrateMany($tableau);
35 return $playlist;
36 }
37
38 public function findFromUser(int $id, ?string $email): ?playlist
39 {
40 $sql = "SELECT * FROM playlist WHERE idPlaylist = :id
41 AND emailProprietaire = :email";
42 $pdoStatement = $this->pdo->prepare($sql);
43 $pdoStatement->execute(array(
44 ':id' => $id,
45 ':email' => $email
46 ));
47
48 $pdoStatement->setFetchMode(PDO::FETCH_ASSOC);
49 $tableau = $pdoStatement->fetch();
50 if (!$tableau) {
51 return null;
52 }
53 $playlist = $this->hydrate($tableau);
54 return $playlist;
55 }
56
57 public function findAllFromUser(?string $email = null): array
58 {
59 if ($email) {
60 $sql = "SELECT * FROM playlist WHERE emailProprietaire = :email";
61 $stmt = $this->pdo->prepare($sql);
62 $stmt->execute([':email' => $email]);
63 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
64 return $this->hydrateMany($results);
65 } else {
66 return [];
67 }
68 }
69
70 public function hydrate(array $tableaAssoc): ?playlist
71 {
72 if (empty($tableaAssoc)) {
73 return null;
74 }
75
76 $playlist = new Playlist();
77 $playlist->setIdPlaylist(isset($tableaAssoc['idPlaylist']) ? (int)$tableaAssoc['idPlaylist'] : null);
78 $playlist->setNomPlaylist($tableaAssoc['nomPlaylist'] ?? null);
79 $playlist->setEstPubliquePlaylist($tableaAssoc['estPubliquePlaylist'] ?? null);
80
81 // Conversion sécurisée des dates SQL → objets DateTime
82 $playlist->setDateCreationPlaylist(
83 !empty($tableaAssoc['dateCreationPlaylist']) ? new DateTime($tableaAssoc['dateCreationPlaylist']) : null
84 );
85
86 $playlist->setDateDerniereModification(
87 !empty($tableaAssoc['dateDerniereModification']) ? new DateTime($tableaAssoc['dateDerniereModification']) : null
88 );
89
90 $playlist->setEmailProprietaire($tableaAssoc['emailProprietaire'] ?? null);
91 return $playlist;
92 }
93
94 public function hydrateMany(array $tableauxAssoc): array
95 {
96 $playlists = [];
97 foreach ($tableauxAssoc as $tableauAssoc) {
98 $playlist = $this->hydrate($tableauAssoc);
99 if ($playlist !== null) {
100 $playlists[] = $playlist;
101 }
102 }
103 return $playlists;
104 }
105
106 public function getChansonsByPlaylist(int $idPlaylist, ?string $emailUtilisateur = null): array
107 {
108 $sql = "
109 SELECT c.*
110 FROM chanson c
111 JOIN chansonPlaylist cp ON c.idChanson = cp.idChanson
112 WHERE cp.idPlaylist = :idPlaylist
113 ORDER BY cp.positionChanson ASC
114 ";
115
116 $stmt = $this->pdo->prepare($sql);
117 $stmt->execute([':idPlaylist' => $idPlaylist]);
118 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
119
120 $chansons = [];
121 foreach ($results as $row) {
122 $chansonDAO = new ChansonDAO($this->pdo);
123 $chanson = $chansonDAO->hydrate($row);
124 // Vérifier si la chanson est likée par l'utilisateur connecté
125 $isLiked = false;
126 if ($emailUtilisateur) {
127 $sqlLike = "SELECT 1 FROM likeChanson WHERE idChanson = :idChanson AND emailUtilisateur = :emailUtilisateur LIMIT 1";
128 $stmtLike = $this->pdo->prepare($sqlLike);
129 $stmtLike->execute([
130 ':idChanson' => $chanson->getIdChanson(),
131 ':emailUtilisateur' => $emailUtilisateur
132 ]);
133 $isLiked = $stmtLike->fetchColumn() ? true : false;
134 }
135 $chanson->setIsLiked($isLiked);
136 $chansons[] = $chanson;
137 }
138
139 return $chansons;
140 }
141
145 public function getPdo(): ?PDO
146 {
147 return $this->pdo;
148 }
153 public function setPdo(?PDO $pdo): void
154 {
155 $this->pdo = $pdo;
156 }
157}
hydrate(array $tableaAssoc)
getPdo()
Get the value of pdo.
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.
getChansonsByPlaylist(int $idPlaylist, ?string $emailUtilisateur=null)
setPdo(?PDO $pdo)
Set the value of pdo.
hydrateMany(array $tableauxAssoc)
findFromUser(int $id, ?string $email)