* @license https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License V3 * @package SWDB */ require_once(PATH::ENTITY . "Entity.php"); require_once(PATH::ENTITY . "Guild_Member.php"); /** * Guild. * * Represents a guild in the game. * * @category Entity */ class Guild extends Entity{ /** * @var int Guild identifier. */ private $id; /** * @var string Guild name. */ private $name; /** * @var int Guild level. */ private $level; /** * Guild total experience. */ private $experience; /** * @var bool Indicates if the guild is recruiting. */ private $recruiting; /** * @var int Number of members. */ private $total_members; /** * @var Guild_Member Guild Leader. */ private $leader; /** * @var string Guild comment. */ private $comment; /** * @var string Guild notice. */ private $notice; /** * @var Guild_Member[] List of {@see Guild_Member}s. */ private $members = []; /** * @var bool Internal flag that indicates if guild members have been loaded. */ private $flag_members = false; /** * Constructor. * * Searches the database and retrieves the information about the * guild, populating it and it's items. * * @param int $id Guild identifier. */ public function __construct($id){ $statement = get_context()->get_db()->prepare(" SELECT id, name, name, level, experience, recruiting, members, leader, comment, notice FROM guild WHERE id = :id; "); $statement->bindValue(':id', $id, SQLITE3_TEXT); $q = $statement->execute(); $r = $q->fetchArray(SQLITE3_ASSOC); if ($r){ $this->id = $r["id"]; $this->name = HTML::e($r["name"]); $this->level = $r["level"]; $this->experience = $r["experience"]; $this->recruiting = $r["recruiting"]; $this->total_members = $r["members"]; $this->leader = $r["leader"]; $this->comment = HTML::e($r["comment"]); $this->notice = HTML::e($r["notice"]); } } /** * Loads the members of the guild into the entity. * * Must be called only once before trying to get the members, the leader, or the member count. * Sets the flag {@link Guild:$flag_members} to true. */ private function load_members(){ $statement = get_context()->get_db()->prepare(" SELECT member, grade FROM guild_member WHERE guild = :guild ORDER BY grade = 1 DESC, --LEADER grade = 3 DESC, --VICELEADER grade = 2 DESC, -- REGULAR MEMBER arena_score DESC; "); $statement->bindValue(':guild', $this->id, SQLITE3_TEXT); $q = $statement->execute(); while ($r = $q->fetchArray(SQLITE3_ASSOC)){ $member = new Guild_Member($r["member"]); array_push($this->members, $member); if ($r["grade"] == 1){ $this->leader = $member; } } $this->total_members = count($this->members); $this->flag_members = true; } /** * Retrieves the guild identifier. * * @return int Guild ID. */ public function get_id(){ return $this->id; } /** * Retrieves the guild name. * * @return string Guild name. */ public function get_name(){ return $this->name; } /** * Retrieves the guild level. * * @return int Guild level. */ public function get_level(){ return $this->level; } /** * Retrieves the total experience earned by the guild. * * @return int Guild experience. */ public function get_experience(){ return $this->experience; } /** * Checks if the guild is recruiting. * * @return bool True if recruiting, false if not. */ public function is_recruiting(){ return $this->recruiting; } /** * Retrieves the guild's public notice. * * @return string Public notice. */ public function get_comment(){ return $this->comment; } /** * Retrieves the guild's private notice. * * @return string Private notice. */ public function get_notice(){ return $this->notice; } /** * Retrieves the number of members in the guild. * * @return int Number of members. */ public function get_total_members(){ if (! $this->flag_members){ $this->load_members(); } return $this->total_members; } /** * Retrieves the leader member of the guild. * * @return Guild_Member Leader. */ public function get_leader(){ if (! $this->flag_members()){ $this->load_members; } return $this->leader; } /** * Retrieves a list of members$members * * @return Guild_Member[] Member list. */ public function get_members(){ if (! $this->flag_members){ $this->load_members(); } return $this->members; } }