db = new \SleekDB\Store(USERDB, DATADIR, ["timeout" => false]); } // Get user by nickname. Returns with a User object if found, null else. function getUser(string $nickname): User|null { $user_data_array = $this->db->findBy(["nickname", "=", $nickname]); return count($user_data_array) != 0 ? User::fromArray($this, $user_data_array[0]) : null; } // Update user. function updateUser(User $user): void { $a = $user->toArray(); // convert to array $this->db->update($a); // update using the extracted array } // checks if a nickname is taken function isNicknameTaken(string $nickname): bool { return !($this->db->findOneBy(["nickname", "=", $nickname]) == null); } // Add new user. function addUser(string $nickname, string $password, string $realname, string $privilege = PRIVILEGE_PLAYER): bool { if ($this->isNicknameTaken($nickname)) { // user exists return false; } $a = [ "nickname" => $nickname, "password" => password_hash($password, PASSWORD_DEFAULT), "realname" => $realname, "privilege" => $privilege ]; // create user object $user = User::fromArray($this, $a); // // add user to specific groups FIXME!!!! // foreach ($groupids as $groupid) { // change_group_user_assignments($groupid, $nickname, null); // } $this->db->insert($user->toArray(["_id"])); return true; // user registration successful } // Delete user from the storage function deleteUser(string $nickname): void { // cannot delete quizmaster if ($nickname == QUIZMASTER_NICKNAME) { return; } // $user = $this->getUser($nickname); // if ($user !== null) { // foreach ($user->getGroups() as $groupid) { // change_group_user_assignments($groupid, null, $nickname); // } $this->db->deleteBy(["nickname", "=", $nickname]); //} } // Dump all users. Users come wrapped in User objects. function getAllUsers(): array { return array_map(fn($a): User => User::fromArray($this, $a), $this->db->findAll()); } // Get all nicknames. function getAllNicknames(): array { $qb = $this->db->createQueryBuilder(); return array_map(fn($c): string => $c["nickname"], $qb->select(["nickname"])->getQuery()->fetch()); } // Sanitize nicknames. Clear non-existent nicknames from the array. function sanitizeNicknames(array $nicknames): array { $a = $this->db->findBy(["nickname", "IN", $nicknames]); return array_map(fn($a) => $a["nickname"], $a); } }