Guild.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <?php
  2. /**
  3. * Guild entity file.
  4. *
  5. * Creates the entity and makes it available.
  6. *
  7. * @author Iñigo Valentin <i@inigovalentin.com>
  8. * @license https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License V3
  9. * @package SWDB
  10. */
  11. require_once(PATH::ENTITY . "Entity.php");
  12. require_once(PATH::ENTITY . "Guild_Member.php");
  13. /**
  14. * Guild.
  15. *
  16. * Represents a guild in the game.
  17. *
  18. * @category Entity
  19. */
  20. class Guild extends Entity{
  21. /**
  22. * @var int Guild identifier.
  23. */
  24. private $id;
  25. /**
  26. * @var string Guild name.
  27. */
  28. private $name;
  29. /**
  30. * @var int Guild level.
  31. */
  32. private $level;
  33. /**
  34. * Guild total experience.
  35. */
  36. private $experience;
  37. /**
  38. * @var bool Indicates if the guild is recruiting.
  39. */
  40. private $recruiting;
  41. /**
  42. * @var int Number of members.
  43. */
  44. private $total_members;
  45. /**
  46. * @var Guild_Member Guild Leader.
  47. */
  48. private $leader;
  49. /**
  50. * @var string Guild comment.
  51. */
  52. private $comment;
  53. /**
  54. * @var string Guild notice.
  55. */
  56. private $notice;
  57. /**
  58. * @var Guild_Member[] List of {@see Guild_Member}s.
  59. */
  60. private $members = [];
  61. /**
  62. * @var bool Internal flag that indicates if guild members have been loaded.
  63. */
  64. private $flag_members = false;
  65. /**
  66. * Constructor.
  67. *
  68. * Searches the database and retrieves the information about the
  69. * guild, populating it and it's items.
  70. *
  71. * @param int $id Guild identifier.
  72. */
  73. public function __construct($id){
  74. $statement = get_context()->get_db()->prepare("
  75. SELECT
  76. id,
  77. name,
  78. name,
  79. level,
  80. experience,
  81. recruiting,
  82. members,
  83. leader,
  84. comment,
  85. notice
  86. FROM guild
  87. WHERE id = :id;
  88. ");
  89. $statement->bindValue(':id', $id, SQLITE3_TEXT);
  90. $q = $statement->execute();
  91. $r = $q->fetchArray(SQLITE3_ASSOC);
  92. if ($r){
  93. $this->id = $r["id"];
  94. $this->name = HTML::e($r["name"]);
  95. $this->level = $r["level"];
  96. $this->experience = $r["experience"];
  97. $this->recruiting = $r["recruiting"];
  98. $this->total_members = $r["members"];
  99. $this->leader = $r["leader"];
  100. $this->comment = HTML::e($r["comment"]);
  101. $this->notice = HTML::e($r["notice"]);
  102. }
  103. }
  104. /**
  105. * Loads the members of the guild into the entity.
  106. *
  107. * Must be called only once before trying to get the members, the leader, or the member count.
  108. * Sets the flag {@link Guild:$flag_members} to true.
  109. */
  110. private function load_members(){
  111. $statement = get_context()->get_db()->prepare("
  112. SELECT
  113. member,
  114. grade
  115. FROM guild_member
  116. WHERE guild = :guild
  117. ORDER BY
  118. grade = 1 DESC, --LEADER
  119. grade = 3 DESC, --VICELEADER
  120. grade = 2 DESC, -- REGULAR MEMBER
  121. arena_score DESC;
  122. ");
  123. $statement->bindValue(':guild', $this->id, SQLITE3_TEXT);
  124. $q = $statement->execute();
  125. while ($r = $q->fetchArray(SQLITE3_ASSOC)){
  126. $member = new Guild_Member($r["member"]);
  127. array_push($this->members, $member);
  128. if ($r["grade"] == 1){
  129. $this->leader = $member;
  130. }
  131. }
  132. $this->total_members = count($this->members);
  133. $this->flag_members = true;
  134. }
  135. /**
  136. * Retrieves the guild identifier.
  137. *
  138. * @return int Guild ID.
  139. */
  140. public function get_id(){
  141. return $this->id;
  142. }
  143. /**
  144. * Retrieves the guild name.
  145. *
  146. * @return string Guild name.
  147. */
  148. public function get_name(){
  149. return $this->name;
  150. }
  151. /**
  152. * Retrieves the guild level.
  153. *
  154. * @return int Guild level.
  155. */
  156. public function get_level(){
  157. return $this->level;
  158. }
  159. /**
  160. * Retrieves the total experience earned by the guild.
  161. *
  162. * @return int Guild experience.
  163. */
  164. public function get_experience(){
  165. return $this->experience;
  166. }
  167. /**
  168. * Checks if the guild is recruiting.
  169. *
  170. * @return bool True if recruiting, false if not.
  171. */
  172. public function is_recruiting(){
  173. return $this->recruiting;
  174. }
  175. /**
  176. * Retrieves the guild's public notice.
  177. *
  178. * @return string Public notice.
  179. */
  180. public function get_comment(){
  181. return $this->comment;
  182. }
  183. /**
  184. * Retrieves the guild's private notice.
  185. *
  186. * @return string Private notice.
  187. */
  188. public function get_notice(){
  189. return $this->notice;
  190. }
  191. /**
  192. * Retrieves the number of members in the guild.
  193. *
  194. * @return int Number of members.
  195. */
  196. public function get_total_members(){
  197. if (! $this->flag_members){
  198. $this->load_members();
  199. }
  200. return $this->total_members;
  201. }
  202. /**
  203. * Retrieves the leader member of the guild.
  204. *
  205. * @return Guild_Member Leader.
  206. */
  207. public function get_leader(){
  208. if (! $this->flag_members()){
  209. $this->load_members;
  210. }
  211. return $this->leader;
  212. }
  213. /**
  214. * Retrieves a list of members$members
  215. *
  216. * @return Guild_Member[] Member list.
  217. */
  218. public function get_members(){
  219. if (! $this->flag_members){
  220. $this->load_members();
  221. }
  222. return $this->members;
  223. }
  224. }