Paaxio 1.0
Plateforme de streaming musical - SAE IUT Bayonne
Chargement...
Recherche...
Aucune correspondance
message.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
29 public function create(Message $message): bool
30 {
31 $sql = "INSERT INTO message (dateMessage, contenuMessage, estLuMessage, emailExpediteur, emailDestinataire) VALUES (:dateMessage, :contenuMessage, :estLuMessage, :emailExpediteur, :emailDestinataire)";
32 $stmt = $this->pdo->prepare($sql);
33 $dateEnvoi = $message->getDateEnvoi()?->format('Y-m-d H:i:s');
34 $emailExpediteur = $message->getEmailExpediteur()?->getEmailUtilisateur();
35 $emailDestinataire = $message->getEmailDestinataire()?->getEmailUtilisateur();
36
37 return $stmt->execute([
38 ':dateMessage' => $dateEnvoi ?? date('Y-m-d H:i:s'),
39 ':contenuMessage' => $message->getContenu(),
40 ':estLuMessage' => $message->getEstLu() ? 1 : 0,
41 ':emailExpediteur' => $emailExpediteur,
42 ':emailDestinataire' => $emailDestinataire
43 ]);
44 }
45
51 public function getConversations(string $myEmail): array
52 {
53 $sql = "
54 SELECT u.*,
55 MAX(m.dateMessage) as derniereActivite,
56 SUM(CASE WHEN m.emailDestinataire = :myEmail AND m.emailExpediteur = u.emailUtilisateur AND m.estLuMessage = 0 THEN 1 ELSE 0 END) as nbNonLus
57 FROM utilisateur u
58 JOIN message m ON (u.emailUtilisateur = m.emailExpediteur OR u.emailUtilisateur = m.emailDestinataire)
59 WHERE (m.emailExpediteur = :myEmail OR m.emailDestinataire = :myEmail)
60 AND u.emailUtilisateur != :myEmail
61 GROUP BY u.emailUtilisateur
62 ORDER BY derniereActivite DESC
63 ";
64
65 $stmt = $this->pdo->prepare($sql);
66 $stmt->execute([':myEmail' => $myEmail]);
67
68 $contacts = [];
69 // On suppose que tu as une classe UtilisateurDAO ou que tu hydrates manuellement
70 // Ici, je fais une hydration simple basée sur ta classe Utilisateur
71 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
72 // Note: Idéalement, utilise ton UtilisateurDAO pour créer l'objet proprement
73 $user = new Utilisateur($row['emailUtilisateur']);
74 $user->setNomUtilisateur($row['nomUtilisateur']);
75 $user->setPseudoUtilisateur($row['pseudoUtilisateur']);
76 $user->setUrlPhotoUtilisateur($row['urlPhotoUtilisateur']);
77 $contacts[] = [
78 'user' => $user,
79 'aNonLu' => ($row['nbNonLus'] > 0)
80 ];
81 }
82 return $contacts;
83 }
84
91 public function getUnreadCountForUser(string $myEmail): int
92 {
93 $sql = "
94 SELECT COUNT(*) AS nbNonLus
95 FROM message
96 WHERE emailDestinataire = :myEmail
97 AND estLuMessage = 0
98 ";
99
100 $stmt = $this->pdo->prepare($sql);
101 $stmt->execute([':myEmail' => $myEmail]);
102 $row = $stmt->fetch(PDO::FETCH_ASSOC);
103
104 return $row !== false ? (int) $row['nbNonLus'] : 0;
105 }
106
113 public function markAsRead(int $idMessage): bool
114 {
115 $sql = "UPDATE message SET estLuMessage = 1 WHERE idMessage = :idMessage";
116 $stmt = $this->pdo->prepare($sql);
117 return $stmt->execute([':idMessage' => $idMessage]);
118 }
119
126 public function getMessagesConversation(string $myEmail, string $contactEmail): array
127 {
128 $sql = "SELECT * FROM message
129 WHERE (emailExpediteur = :me AND emailDestinataire = :other)
130 OR (emailExpediteur = :other AND emailDestinataire = :me)
131 ORDER BY dateMessage ASC"; // ASC pour lire du plus vieux au plus récent (flux de chat)
132
133 $stmt = $this->pdo->prepare($sql);
134 $stmt->execute([':me' => $myEmail, ':other' => $contactEmail]);
135
136 $messages = [];
137 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
138 // On recrée les objets Utilisateur juste avec l'email pour l'instant
139 $expediteur = new Utilisateur($row['emailExpediteur']);
140 $destinataire = new Utilisateur($row['emailDestinataire']);
141
142 $messages[] = new Message(
143 (int)$row['idMessage'],
144 $row['contenuMessage'],
145 new DateTime($row['dateMessage']),
146 (bool)$row['estLuMessage'],
147 $expediteur,
148 $destinataire
149 );
150 }
151 return $messages;
152 }
153}
154
155?>
getConversations(string $myEmail)
Récupère la liste des utilisateurs avec qui l'utilisateur courant a discuté (Inbox).
__construct(?PDO $pdo=null)
Constructeur de la classe MessageDAO.
markAsRead(int $idMessage)
Marque un message comme lu.
getUnreadCountForUser(string $myEmail)
Retourne le nombre total de messages non lus pour un utilisateur donné.
create(Message $message)
Crée un nouveau message dans la base de données.
getMessagesConversation(string $myEmail, string $contactEmail)
Récupère l'historique de discussion entre deux personnes.
getEmailExpediteur()
Get the value of emailExpediteur.
getEmailDestinataire()
Get $emailDestinataire L'email du destinataire du message.
getDateEnvoi()
Get the value of dateEnvoi.
getContenu()
Get $contenu Le contenu du message.
getEstLu()
Get the value of estLu.