Comus Party 1.0.0
Application web de mini-jeux en ligne
Chargement...
Recherche...
Aucune correspondance
report.dao.php
Aller à la documentation de ce fichier.
1<?php
9
10namespace ComusParty\Models;
11
12use DateMalformedStringException;
13use DateTime;
14use PDO;
15
16
22{
27 private ?PDO $pdo;
28
33 public function __construct(?PDO $pdo)
34 {
35 $this->pdo = $pdo;
36 }
37
42 public function getPdo(): ?PDO
43 {
44 return $this->pdo;
45 }
46
51 public function setPdo(?PDO $pdo): void
52 {
53 $this->pdo = $pdo;
54 }
55
61 public function insert(Report $report): bool
62 {
63 $stmt = $this->pdo->prepare(
64 'INSERT INTO ' . DB_PREFIX . 'report (object, description, treated_by, reported_uuid, sender_uuid, created_at, updated_at)
65 VALUES (:object, :description, :treated_by, :reported_uuid, :sender_uuid, :created_at, :updated_at)'
66 );
67 $stmt->bindValue(':object', $this->transformReportObjectToString($report->getObject()), PDO::PARAM_STR);
68 $stmt->bindValue(':description', $report->getDescription(), PDO::PARAM_STR);
69 $stmt->bindValue(':treated_by', $report->getTreatedBy(), PDO::PARAM_STR);
70 $stmt->bindValue(':reported_uuid', $report->getReportedUuid(), PDO::PARAM_STR);
71 $stmt->bindValue(':sender_uuid', $report->getSenderUuid(), PDO::PARAM_STR);
72 $stmt->bindValue(':created_at', $report->getCreatedAt()->format('Y-m-d H:i:s'), PDO::PARAM_STR);
73 $stmt->bindValue(':updated_at', $report->getUpdatedAt()->format('Y-m-d H:i:s'), PDO::PARAM_STR);
74 return $stmt->execute();
75 }
76
82 private function transformReportObjectToString(ReportObject $reportObject): string
83 {
84 return match ($reportObject) {
85 ReportObject::LANGUAGE => 'language',
86 ReportObject::SPAM => 'spam',
87 ReportObject::LINKS => 'links',
88 ReportObject::FAIRPLAY => 'fairplay',
89 default => 'other'
90 };
91 }
92
98 public function findAllWaiting(): ?array
99 {
100 $stmt = $this->pdo->prepare(
101 'SELECT *
102 FROM ' . DB_PREFIX . 'report
103 WHERE treated_by IS NULL'
104 );
105 $stmt->execute();
106 $stmt->setFetchMode(PDO::FETCH_ASSOC);
107 $reportsTab = $stmt->fetchAll();
108 if (!$reportsTab) {
109 return null;
110 }
111 return $this->hydrateMany($reportsTab);
112 }
113
121 public function hydrateMany(array $data)
122 {
123 $reports = [];
124 foreach ($data as $row) {
125 $reports[] = $this->hydrate($row);
126 }
127 return $reports;
128 }
129
136 public function hydrate(array $data): Report
137 {
138 $report = new Report();
139 $report->setId($data['id']);
140 $report->setObject(
141 match ($data['object']) {
142 'language' => ReportObject::LANGUAGE,
143 'spam' => ReportObject::SPAM,
144 'links' => ReportObject::LINKS,
145 'fairplay' => ReportObject::FAIRPLAY,
146 default => ReportObject::OTHER
147 }
148 );
149 $report->setDescription($data['description']);
150 $report->setTreatedBy($data['treated_by']);
151 $report->setReportedUuid($data['reported_uuid']);
152 $report->setSenderUuid($data['sender_uuid']);
153 $report->setCreatedAt(new DateTime($data['created_at']));
154 $report->setUpdatedAt(new DateTime($data['updated_at']));
155 return $report;
156 }
157
164 public function findById(int $id): ?Report
165 {
166 $stmt = $this->pdo->prepare(
167 'SELECT *
168 FROM ' . DB_PREFIX . 'report
169 WHERE id = :id'
170 );
171 $stmt->bindValue(':id', $id, PDO::PARAM_INT);
172 $stmt->execute();
173 $stmt->setFetchMode(PDO::FETCH_ASSOC);
174 $report = $stmt->fetch();
175 if (!$report) {
176 return null;
177 }
178 return $this->hydrate($report);
179 }
180
185 public function update(Report $report): void
186 {
187 $stmt = $this->pdo->prepare(
188 'UPDATE ' . DB_PREFIX . 'report
189 SET object = :object, description = :description, treated_by = :treated_by, reported_uuid = :reported_uuid
190 , sender_uuid = :sender_uuid, updated_at = NOW()
191 WHERE id = :id'
192 );
193 $stmt->bindValue(':object', $this->transformReportObjectToString($report->getObject()), PDO::PARAM_STR);
194 $stmt->bindValue(':description', $report->getDescription(), PDO::PARAM_STR);
195 $stmt->bindValue(':reported_uuid', $report->getReportedUuid(), PDO::PARAM_STR);
196 $stmt->bindValue(':sender_uuid', $report->getSenderUuid(), PDO::PARAM_STR);
197 $stmt->bindValue(':treated_by', $report->getTreatedBy(), PDO::PARAM_STR);
198 $stmt->bindValue(':id', $report->getId(), PDO::PARAM_INT);
199 $stmt->execute();
200 }
201}
insert(Report $report)
Insère un signalement en base de données.
update(Report $report)
Met à jour un signalement en base de données.
hydrate(array $data)
Hydrate un objet Report avec les valeurs du tableau associatif passé en paramètre.
getPdo()
Retourne la connexion à la base de données.
findById(int $id)
Renvoi un signalement à partir de son ID.
setPdo(?PDO $pdo)
Modifie la connexion à la base de données.
findAllWaiting()
Récupère tous les signalements en base de données qui ne sont pas traités.
__construct(?PDO $pdo)
Le constructeur de la classe PlayerDAO.
hydrateMany(array $data)
Hydrate un tableau d'objets Report avec les valeurs des tableaux associatifs du tableau passé en para...
transformReportObjectToString(ReportObject $reportObject)
Transforme un objet ReportObject en string.
getCreatedAt()
Retourne la date de création du signalement.
getId()
Retourne l'identifiant du signalement.
getSenderUuid()
Retourne l'UUID du joueur ayant effectué le signalement.
getDescription()
Retourne la description du signalement.
getTreatedBy()
Retourne l'UUID du modérateur ayant traité le signalement.
getUpdatedAt()
Retourne la date de mise à jour du signalement.
getObject()
Retourne l'objet du signalement.
getReportedUuid()
Retourne l'UUID du joueur signalé dans le signalement.
ReportObject
Les 4 thèmes pour les signalements.
const DB_PREFIX
Préfixe des tables de la base de données.
Definition db.php:52