groupMgr->updateGroup($this); } // -------------- function __construct(GroupMgr &$groupMgr, string $name, string $description, string $owner, int $id = -1, bool $unique = true, array $editors = [], array $members = [], array $games = []) { parent::__construct(); $this->_id = $id; $this->name = $name; $this->unique = $unique; $this->description = $description; $this->owner = $owner; $this->editors = $editors; $this->members = $members; $this->games = $games; $this->groupMgr = &$groupMgr; } // Create Group from array static function fromArray(GroupMgr &$groupMgr, array $a): Group { $id = $a["_id"] ?? -1; return new Group($groupMgr, $a["groupname"], $a["description"], $a["owner"], $id, $a["unique"], $a["editors"], $a["users"], $a["games"]); } // Convert Group to array function toArray(array $omit = []): array { $a = [ "_id" => $this->_id, "groupname" => $this->name, "unique" => $this->unique, "description" => $this->description, "owner" => $this->owner, "editors" => $this->editors, "users" => $this->members, "games" => $this->games ]; foreach ($omit as $field) { unset($a[$field]); } return $a; } // Get group's ID. function getID(): int { return $this->_id; } // Get group's name. function getName(): string { return $this->name; } // Set group's name. function setName(string $name): void { $this->name = $name; $this->storeMods(); } // Tell if group is unique function isUnique(): bool { return $this->unique; } // Get group's description. function getDescription(): string { return $this->description; } // Set group's description. function setDescription(string $description): void { $this->description = $description; $this->storeMods(); } // Get group's owner. function getOwner(): string { return $this->owner; } // Set group's owner. function setOwner(string $owner): void { $this->owner = $owner; $this->storeMods(); } // Get list of editors. function getEditors(): array { return $this->editors; } // Set editors. function setEditors(array $editors): void { $this->editors = $editors; $this->storeMods(); } // Get group members. function getMembers(): array { return $this->members; } // Set group members. function setMembers(array $members): void { $this->members = $members; $this->storeMods(); } // Get games. function getGames(): array { return $this->games; } // Set games. function setGames(array $games): void { $this->games = $games; $this->storeMods(); } // Include/exclude members. function changeMembers(array $nicknames_add, array $nicknames_remove): void { foreach ($nicknames_add as $nickname) { // add members alter_array_contents($this->members, $nickname, null); } foreach ($nicknames_remove as $nickname) { // remove members alter_array_contents($this->members, null, $nickname); // delete from members alter_array_contents($this->editors, null, $nickname); // delete from editors } $this->storeMods(); // store changes } // Add members function addMembers(array $nicknames) : void { $this->changeMembers($nicknames, []); } // Remove members function removeMembers(array $nicknames) : void { $this->changeMembers([], $nicknames); } // Include/exclude games. function changeGames(array $gameids_add, array $gameids_remove): void { foreach ($gameids_add as $gameid) { // add games alter_array_contents($this->games, $gameid, null); } foreach ($gameids_remove as $gameid) { // remove games alter_array_contents($this->games, null, $gameid); } $this->storeMods(); // store changes } // Returns whether the user is an editor of this group. function isUserEditor(string $nickname): bool { return in_array($nickname, $this->editors); } // Returns whether the user is an editor or the owner of the group. function isUserContributor(string $nickname): bool { return $this->isUserEditor($nickname) || ($this->owner === $nickname); } // Returns if user is member of the group. function isMember(string $nickname): bool { return in_array($nickname, $this->members); } // Return if game is assigned to this group. function isGameAssigned(string $gameid): bool { return in_array($gameid, $this->games); } // Get groups unique name. function getUniqueName(): string { return $this->name . ($this->unique ? "" : ("#" . $this->_id)); } }