10namespace ComusParty\Models;
12use DateMalformedStringException;
65 $stmt = $this->pdo->prepare(
69 $stmt->bindParam(
':uuid', $uuid);
71 $stmt->setFetchMode(PDO::FETCH_ASSOC);
72 $playerTab = $stmt->fetch();
73 if ($playerTab ===
false) {
76 return $this->
hydrate($playerTab);
90 $player->setUuid($data[
'uuid']);
91 $player->setUsername($data[
'username']);
92 $player->setCreatedAt(
new DateTime($data[
'created_at']));
93 $player->setUpdatedAt(
new DateTime($data[
'updated_at']));
94 $player->setXp($data[
'xp']);
95 $player->setElo($data[
'elo']);
96 $player->setComusCoin($data[
'comus_coin']);
97 $player->getStatistics()->setPlayerUuid($data[
'uuid'] ??
null);
98 $player->getStatistics()->setGamesPlayed($data[
'games_played'] ??
null);
99 $player->getStatistics()->setGamesWon($data[
'games_won'] ??
null);
100 $player->getStatistics()->setGamesHosted($data[
'games_hosted'] ??
null);
101 $player->setUserId($data[
'user_id']);
102 $player->setActivePfp($data[
'active_pfp'] ??
'default-pfp.jpg');
103 $player->setActiveBanner($data[
'active_banner'] ??
'default-banner.jpg');
115 $stmt = $this->pdo->prepare(
118 WHERE user_id = :userId');
119 $stmt->bindParam(
':userId', $userId);
121 $stmt->setFetchMode(PDO::FETCH_ASSOC);
122 $playerTab = $stmt->fetch();
123 if ($playerTab ===
false) {
126 return $this->
hydrate($playerTab);
137 $stmt = $this->pdo->prepare(
143 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'played WHERE player_uuid = pr.uuid) as games_played,
144 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'won WHERE player_uuid = pr.uuid) as games_won,
145 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'game_record WHERE hosted_by = pr.uuid) as games_hosted,
148 JOIN ' .
DB_PREFIX .
'invoice_row ir ON ir.invoice_id = i.id AND ir.active = 1
149 JOIN ' .
DB_PREFIX .
'article a ON ir.article_id = a.id AND a.type = "pfp"
150 WHERE i.player_uuid = pr.uuid
151 ORDER BY i.created_at DESC
152 LIMIT 1) as active_pfp,
155 JOIN ' .
DB_PREFIX .
'invoice_row ir ON ir.invoice_id = i.id AND ir.active = 1
156 JOIN ' .
DB_PREFIX .
'article a ON ir.article_id = a.id AND a.type = "banner"
157 WHERE i.player_uuid = pr.uuid
158 ORDER BY i.created_at DESC
159 LIMIT 1) as active_banner
161 JOIN ' .
DB_PREFIX .
'user u ON pr.user_id = u.id
162 LEFT JOIN ' .
DB_PREFIX .
'invoice i ON i.player_uuid = pr.uuid
163 WHERE pr.uuid = :uuid');
164 $stmt->bindParam(
':uuid', $uuid);
166 $stmt->setFetchMode(PDO::FETCH_ASSOC);
167 $tabPlayer = $stmt->fetch();
168 if ($tabPlayer ===
false || $tabPlayer[
'uuid'] ===
null) {
171 return $this->
hydrate($tabPlayer);
182 $stmt = $this->pdo->prepare(
183 'SELECT pr.*, u.email, u.created_at, u.updated_at,
184 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'played WHERE player_uuid = pr.uuid) as games_played,
185 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'won WHERE player_uuid = pr.uuid) as games_won,
186 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'game_record WHERE hosted_by = pr.uuid) as games_hosted
188 JOIN ' .
DB_PREFIX .
'user u ON pr.user_id = u.id
189 LEFT JOIN ' .
DB_PREFIX .
'invoice i ON i.player_uuid = pr.uuid
190 LEFT JOIN ' .
DB_PREFIX .
'invoice_row ir ON ir.invoice_id = i.id AND ir.active = 1
191 LEFT JOIN ' .
DB_PREFIX .
'article a ON ir.article_id = a.id AND a.type = "pfp"
192 WHERE u.id = :userId');
193 $stmt->bindParam(
':userId', $userId);
195 $stmt->setFetchMode(PDO::FETCH_ASSOC);
196 $tabPlayer = $stmt->fetch();
197 if ($tabPlayer ===
false) {
200 return $this->
hydrate($tabPlayer);
211 $stmt = $this->pdo->query(
214 $stmt->setFetchMode(PDO::FETCH_ASSOC);
215 $tabPlayers = $stmt->fetchAll();
216 if ($tabPlayers ===
false) {
232 foreach ($data as $player) {
233 $players[] = $this->
hydrate($player);
246 $stmt = $this->pdo->query(
247 'SELECT pr.*, u.email, u.created_at, u.updated_at,
248 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'played WHERE player_uuid = pr.uuid) as games_played,
249 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'won WHERE player_uuid = pr.uuid) as games_won,
250 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'game_record WHERE hosted_by = pr.uuid) as games_hosted
252 JOIN ' .
DB_PREFIX .
'user u ON pr.user_id = u.id
253 LEFT JOIN ' .
DB_PREFIX .
'invoice i ON i.player_uuid = pr.uuid
254 LEFT JOIN ' .
DB_PREFIX .
'invoice_row ir ON ir.invoice_id = i.id AND ir.active = 1
255 LEFT JOIN ' .
DB_PREFIX .
'article a ON ir.article_id = a.id AND a.type = "pfp"');
256 $stmt->setFetchMode(PDO::FETCH_ASSOC);
257 $tabPlayers = $stmt->fetchAll();
258 if ($tabPlayers ===
false) {
278 $uuid = Uuid::uuid4()->toString();
280 $userDao =
new UserDAO($this->pdo);
281 $user = $userDao->findByEmail($email);
282 $userId = $user->getId();
284 $stmtPlayer = $this->pdo->prepare(
"INSERT INTO " .
DB_PREFIX .
"player (uuid, username, user_id) VALUES (:uuid, :username, :user_id)");
286 $stmtPlayer->bindParam(
':uuid', $uuid);
287 $stmtPlayer->bindParam(
':username', $username);
288 $stmtPlayer->bindParam(
':user_id', $userId);
290 return $stmtPlayer->execute();
301 $stmt = $this->pdo->prepare(
"SELECT * FROM " .
DB_PREFIX .
"player WHERE username = :username");
302 $stmt->bindParam(
':username', $username);
304 $stmt->setFetchMode(PDO::FETCH_ASSOC);
305 $result = $stmt->fetch();
306 if ($result ===
false) {
309 return $this->
hydrate($result);
320 $limit = $end - $start + 1;
321 $offset = $start - 1;
323 $stmt = $this->pdo->prepare(
324 'SELECT DISTINCT pr.*, u.email, u.created_at, u.updated_at,
327 JOIN ' .
DB_PREFIX .
'invoice_row ir ON ir.invoice_id = i.id AND ir.active = 1
328 JOIN ' .
DB_PREFIX .
'article a ON ir.article_id = a.id AND a.type = "pfp"
329 WHERE i.player_uuid = pr.uuid
330 ORDER BY i.created_at DESC
331 LIMIT 1) as active_pfp,
332 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'played WHERE player_uuid = pr.uuid) as games_played,
333 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'won WHERE player_uuid = pr.uuid) as games_won,
334 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'game_record WHERE hosted_by = pr.uuid) as games_hosted
336 JOIN ' .
DB_PREFIX .
'user u ON pr.user_id = u.id
337 WHERE u.email_verif_token IS NULL
339 LIMIT :limit OFFSET :offset;'
342 $stmt->bindValue(
':limit', $limit, PDO::PARAM_INT);
343 $stmt->bindValue(
':offset', $offset, PDO::PARAM_INT);
346 $stmt->setFetchMode(PDO::FETCH_ASSOC);
347 $tabPlayers = $stmt->fetchAll();
349 if ($tabPlayers ===
false) {
362 $stmt = $this->pdo->prepare(
364 SET username = :username, xp = :xp, elo = :elo, comus_coin = :comusCoin
365 WHERE uuid = :uuid');
367 $stmt->bindParam(
':username', $username);
368 $xp = $player->
getXp();
369 $stmt->bindParam(
':xp', $xp);
371 $stmt->bindParam(
':elo', $elo);
373 $stmt->bindParam(
':comusCoin', $comusCoin);
375 $stmt->bindParam(
':uuid', $uuid);
387 $stmt = $this->pdo->prepare(
393 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'played WHERE player_uuid = pr.uuid) as games_played,
394 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'won WHERE player_uuid = pr.uuid) as games_won,
395 (SELECT COUNT(*) FROM ' .
DB_PREFIX .
'game_record WHERE hosted_by = pr.uuid) as games_hosted,
398 JOIN ' .
DB_PREFIX .
'invoice_row ir ON ir.invoice_id = i.id AND ir.active = 1
399 JOIN ' .
DB_PREFIX .
'article a ON ir.article_id = a.id AND a.type = "pfp"
400 WHERE i.player_uuid = pr.uuid
401 ORDER BY i.created_at DESC
402 LIMIT 1) as active_pfp,
405 JOIN ' .
DB_PREFIX .
'invoice_row ir ON ir.invoice_id = i.id AND ir.active = 1
406 JOIN ' .
DB_PREFIX .
'article a ON ir.article_id = a.id AND a.type = "banner"
407 WHERE i.player_uuid = pr.uuid
408 ORDER BY i.created_at DESC
409 LIMIT 1) as active_banner
411 JOIN ' .
DB_PREFIX .
'user u ON pr.user_id = u.id
412 LEFT JOIN ' .
DB_PREFIX .
'invoice i ON i.player_uuid = pr.uuid
413 WHERE pr.username = :username');
414 $stmt->bindParam(
':username', $username);
416 $stmt->setFetchMode(PDO::FETCH_ASSOC);
417 $tabPlayer = $stmt->fetch();
418 if ($tabPlayer ===
false || $tabPlayer[
'uuid'] ===
null) {
421 return $this->
hydrate($tabPlayer);
findByUserId(int $userId)
Retourne un objet Player (ou null) à partir de l'identifiant utilisateur passé en paramètre.
createPlayer(string $username, string $email)
Crée un nouveau joueur dans la base de données.
update(Player $player)
Met à jour les valeurs d'un enregistrement d'un joueur en base de données.
hydrate(array $data)
Hydrate un objet Player avec les valeurs du tableau associatif passé en paramètre.
findInRangeOrderByEloDescWithDetails(int $start, int $end)
Retourne un tableau d'objets Player recensant l'ensemble des joueurs enregistrés dans la base de donn...
getPdo()
Retourne la connexion à la base de données.
findAll()
Retourne un tableau d'objets Player recensant l'ensemble des joueurs enregistrés dans la base de donn...
findWithDetailByUsername(string $username)
Retourne un objet Player (ou null) à partir du nom d'utilisateur passé en paramètre avec les détails ...
findByUuid(string $uuid)
Retourne un objet Player (ou null) à partir de l'UUID passé en paramètre.
findWithDetailByUuid(string $uuid)
Retourne un objet Player (ou null) à partir de l'UUID passé en paramètre avec les détails de l'utilis...
setPdo(?PDO $pdo)
Modifie la connexion à la base de données.
__construct(?PDO $pdo)
Le constructeur de la classe PlayerDAO.
findWithDetailByUserId(int $userId)
Retourne un objet Player (ou null) à partir de l'identifiant utilisateur passé en paramètre avec les ...
findAllWithDetail()
Retourne un tableau d'objets Player recensant l'ensemble des joueurs enregistrés dans la base de donn...
hydrateMany(array $data)
Hydrate un tableau d'objets Player avec les valeurs des tableaux associatifs du tableau passé en para...
findByUsername(?string $username)
Retourne un objet Player (ou null) à partir du nom d'utilisateur passé en paramètre.
getElo()
Retourne l'Elo du joueur.
getUuid()
Retourne l'UUID du joueur.
getUsername()
Retourne le nom d'utilisateur du joueur.
getComusCoin()
Retourne le nombre de Comus Coins possédés par le joueur.
getXp()
Retourne les points d'expérience du joueur.
const DB_PREFIX
Préfixe des tables de la base de données.