db = new \SleekDB\Store(GAMEDB, DATADIR, ["timeout" => false]); } // Get game by ID. function getGame(string $gameid): Game|null { $game_data_array = $this->db->findById($gameid); return count($game_data_array) != 0 ? Game::fromArray($this, $game_data_array) : null; } // Get public game. FIXME!!! function getPublicGame(string $public_id): Game|null { $game_data_array = $this->db->findBy([["public", "=", "true"], "AND", ["public_id", "=", $public_id]]); return count($game_data_array) != 0 ? Game::fromArray($this, $game_data_array[0]) : null; } // Update game. function updateGame(Game $game): void { $a = $game->toArray(); $this->db->update($a); } function addGame(string $name, string $owner, string $description, array $properties = Game::DEFAULT_GAME_PROPERTIES, array $contributors = [], array $tasks = []): bool { $game_data = [ "name" => $name, "owner" => $owner, "contributors" => $contributors, "description" => $description, "game_file_present" => false, "properties" => $properties, "public" => false, "public_id" => Game::genPublicId(), "version" => Game::CURRENT_GAME_VERSION ]; $game_data = $this->db->insert($game_data); // prepare game context $game = Game::fromArray($this, $game_data); $current_game_media_dir = $game->getGameDir(); mkdir($current_game_media_dir); $game->saveTasks(); return true; } // Delete game by ID. function deleteGame(string $gameid): void { $this->db->deleteById($gameid); } // Get all game data by contributor nickname. function getAllGameDataByContributor(string $nickname): array { $games = []; if ($nickname !== "*") { $game_data_array = $this->db->findBy([["owner", "=", $nickname], "OR", ["contributors", "CONTAINS", $nickname]]); } else { $game_data_array = $this->db->findAll(); } foreach ($game_data_array as $game_data) { $games[] = Game::fromArray($this, $game_data); } return $games; } // Get all games. function getAllGames() : array { $gamesa = $this->db->findAll(); $games = []; foreach ($gamesa as $a) { $games[] = new Game($this, $a); } return $games; } // Sanitize games and return game IDs. function sanitizeGames(array $games) : array { $sanitized = []; foreach ($games as $game) { // explode game identifier [$name, $id] = explode("#", $game); // fetch game if ($id !== null) { $records = $this->db->findBy([["name", "=", $name], "AND", ["_id", "=", (int)$id]]); } else { $records = $this->db->findBy(["name", "=", $name]); } // put game ID into sanitized list only if identifier is not ambiguous if (count($records) === 1) { $sanitized[] = $records[0]["_id"]; } } return $sanitized; } // Resolve group IDs to full group identifiers. function resolveGames(array &$gameIds): void { $a = $this->db->findBy([["_id", "IN", $gameIds]]); // no caching here... $gameIds = array_map(fn($r) => $r["name"] . "#" . $r["_id"] ,$a); } function upgradeGames(array $ids = []): void { $a = []; if ($ids === []) { $a = $this->db->findAll(); } else { $a = $this->db->findBy(["_id", "IN", $ids]); } foreach ($a as $g) { $game = Game::fromArray($this, $g); $game->loadTasks(); $game->saveTasks(); $game->storeMods(); } } // ------- }