selectFromDbById($challengeId, Challenge::class); } public function getByToken(int $token): ?Challenge { $select = new Select(\Container::$dbConnection); $select->where('token', '=', $token); return \Container::$persistentDataManager->selectFromDb($select, Challenge::class); } public function getByTokenStr(string $token_str): ?Challenge { // validate token string foreach (str_split($token_str) as $char) { if (!(('0' <= $char && $char <= '9') || ('a' <= $char && $char <= 'f'))) { return null; } } // convert token to int $token = hexdec($token_str); return $this->getByToken($token); } public function getAllByParticipant(User $user): Generator { $select = new Select(\Container::$dbConnection); $select->innerJoin('user_in_challenge', ['challenge', 'id'], '=', ['user_in_challenge', 'challenge_id']); $select->innerJoin('users', ['users', 'id'], '=', ['user_in_challenge', 'user_id']); $select->where(['user_in_challenge', 'user_id'], '=', $user->getId()); yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Challenge::class); } public function getAllByOwner(User $user): Generator { $select = new Select(\Container::$dbConnection); $select->innerJoin('user_in_challenge', ['challenge', 'id'], '=', ['user_in_challenge', 'challenge_id']); $select->innerJoin('users', ['users', 'id'], '=', ['user_in_challenge', 'user_id']); $select->where(['user_in_challenge', 'user_id'], '=', $user->getId()); $select->where(['user_in_challenge', 'is_owner'], '=', true); yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Challenge::class); } public function getAllByPlace(Place $place): Generator { $select = new Select(\Container::$dbConnection); $select->innerJoin('place_in_challenge', ['challenges', 'id'], '=', ['place_in_challenge', 'challenge_id']); $select->where(['place_in_challenge', 'place_id'], '=', $place->getId()); yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Challenge::class); } }