Comus Party 1.0.0
Application web de mini-jeux en ligne
Chargement...
Recherche...
Aucune correspondance
game.dao.php
Aller à la documentation de ce fichier.
1<?php
9
10namespace ComusParty\Models;
11
12use DateTime;
13use Exception;
14use PDO;
15
21{
27 private ?PDO $pdo;
28
34 public function __construct(?PDO $pdo)
35 {
36 $this->pdo = $pdo;
37 }
38
44 public function getPdo(): ?PDO
45 {
46 return $this->pdo;
47 }
48
54 public function setPdo(?PDO $pdo): void
55 {
56 $this->pdo = $pdo;
57 }
58
66 public function findById(int $id): ?Game
67 {
68 $stmt = $this->pdo->prepare(
69 'SELECT *
70 FROM ' . DB_PREFIX . 'game
71 WHERE id = :id');
72 $stmt->bindParam(':id', $id);
73 $stmt->execute();
74 $stmt->setFetchMode(PDO::FETCH_ASSOC);
75 $gameTab = $stmt->fetch();
76 if ($gameTab === false) {
77 return null;
78 }
79 return $this->hydrate($gameTab);
80 }
81
88 public function hydrate(array $gameTab): Game
89 {
90 $game = new Game();
91 $game->setId($gameTab['id']);
92 $game->setName($gameTab['name']);
93 $game->setDescription($gameTab['description']);
94 $game->setPathImg($gameTab['img_path']);
95 $game->setState($this->transformStringToGameState($gameTab['state']));
96 $game->setCreatedAt(new DateTime($gameTab['created_at']));
97 $game->setUpdatedAt(new DateTime($gameTab['updated_at']));
98 $game->setTags($gameTab['tags'] ?? null);
99 return $game;
100 }
101
108 private function transformStringToGameState(string $state): ?GameState
109 {
110 return match (strtoupper($state)) {
111 'AVAILABLE' => GameState::AVAILABLE,
112 'UNAVAILABLE' => GameState::UNAVAILABLE,
113 'MAINTENANCE' => GameState::MAINTENANCE,
114 default => null,
115 };
116 }
117
124 public function findAll(): array
125 {
126 $stmt = $this->pdo->prepare(
127 'SELECT *
128 FROM ' . DB_PREFIX . 'game');
129 $stmt->execute();
130 $stmt->setFetchMode(PDO::FETCH_ASSOC);
131 $gamesTab = $stmt->fetchAll();
132 return $this->hydrateMany($gamesTab);
133 }
134
142 public function hydrateMany(array $gamesTab): array
143 {
144 $games = [];
145 foreach ($gamesTab as $gameTab) {
146 $games[] = $this->hydrate($gameTab);
147 }
148 return $games;
149 }
150
156 public function findAllWithTags(): array
157 {
158 $stmt = $this->pdo->prepare(
159 'SELECT g.*, GROUP_CONCAT(t.name) as tags
160 FROM ' . DB_PREFIX . 'game g
161 JOIN ' . DB_PREFIX . 'tagged tg ON g.id = tg.game_id
162 JOIN ' . DB_PREFIX . 'tag t ON tg.tag_id = t.id
163 GROUP BY g.id;');
164 $stmt->execute();
165 $stmt->setFetchMode(PDO::FETCH_ASSOC);
166 $gamesTab = $stmt->fetchAll();
167 $gamesTab = array_map(function ($game) {
168 $game['tags'] = explode(',', $game['tags']);
169 return $game;
170 }, $gamesTab);
171 return $this->hydrateMany($gamesTab);
172 }
173
180 public function findWithDetailsById(?int $id): ?Game
181 {
182 $stmt = $this->pdo->prepare(
183 'SELECT g.*, GROUP_CONCAT(t.name) as tags
184 FROM ' . DB_PREFIX . 'game g
185 JOIN ' . DB_PREFIX . 'tagged tg ON g.id = tg.game_id
186 JOIN ' . DB_PREFIX . 'tag t ON tg.tag_id = t.id
187 WHERE g.id = :id
188 GROUP BY g.id;');
189 $stmt->bindParam(':id', $id);
190 $stmt->execute();
191 $stmt->setFetchMode(PDO::FETCH_ASSOC);
192 $gameTab = $stmt->fetch();
193 if ($gameTab === false) {
194 return null;
195 }
196 $gameTab['tags'] = explode(',', $gameTab['tags']);
197 return $this->hydrate($gameTab);
198 }
199}
hydrate(array $gameTab)
Hydrate un d'objet Game à partir d'un tableau de jeux de la table game passé en paramètre.
Definition game.dao.php:88
findWithDetailsById(?int $id)
Retourne un objet Game à partir de l'identifiant passé en paramètre avec ses tags associés.
Definition game.dao.php:180
findAllWithTags()
Retourne un tableau d'objets Game à partir de la table game avec leurs tags associés.
Definition game.dao.php:156
getPdo()
Retourne la connexion à la base de données.
Definition game.dao.php:44
hydrateMany(array $gamesTab)
Hydrate un tableau d'objets Game à partir de la table game.
Definition game.dao.php:142
findById(int $id)
Retourne un objet Game (ou null) à partir de l'identifiant passé en paramètre.
Definition game.dao.php:66
findAll()
Retourne un tableau d'objets Game à partir de la table game.
Definition game.dao.php:124
setPdo(?PDO $pdo)
Modifie la connexion à la base de données.
Definition game.dao.php:54
__construct(?PDO $pdo)
Constructeur de la classe GameDAO.
Definition game.dao.php:34
transformStringToGameState(string $state)
Retourne l'état du jeu en type Etat à partir d'un état de type string.
Definition game.dao.php:108
GameState
Enumération des états d'un jeu.
@ MAINTENANCE
L'état AVAILABLE indique que le jeu est disponible pour les utilisateurs.
const DB_PREFIX
Préfixe des tables de la base de données.
Definition db.php:52