Monster_Page.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. /**
  3. * Monster details page file.
  4. *
  5. * Provides a class with all the properties and methods to display the page.
  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::PAGE . "Page.php");
  12. require_once(PATH::ENTITY . "Monster.php");
  13. /**
  14. * Monster details page model.
  15. *
  16. * @category Page
  17. */
  18. class Monster_Page extends Page{
  19. /**
  20. * @var Monster[] Selected unit array.
  21. *
  22. * [0]: Unawakened monster (null if default purple).
  23. * [1]: Awakened monster (null if silver).
  24. * [2]: Second awakened monster (null if unavailaable).
  25. */
  26. private $monster = [];
  27. /**
  28. * @var int[] IDs to other units of the family
  29. */
  30. private $family = [];
  31. /**
  32. * @var bool Indicates a silver monster.
  33. */
  34. private $silver = false;
  35. /**
  36. * @var bool Indicates a default purple (always awaken) monster.
  37. */
  38. private $purple = false;
  39. /**
  40. * @var bool Indicates a monstes that can second awaken.
  41. */
  42. private $red = false;
  43. /**
  44. * Constructor.
  45. *
  46. * Retrieves the data and initializes the variables.
  47. *
  48. * @param int $id Monster id. Can be any of the awakening stages
  49. */
  50. public function __construct($id){
  51. parent::__construct();
  52. $this->set_public(true);
  53. $this->set_view("monster.php");
  54. $this->set_canonical("monster/" . $id);
  55. $this->add_css("monster.css");
  56. $title = "";
  57. $monster = new Monster($id);
  58. if ($monster == null || $monster->get_id() == null){
  59. $this->set_code(404);
  60. $this->set_message("Monster not found");
  61. }
  62. else{
  63. $this->set_code(200);
  64. $this->set_message("OK");
  65. }
  66. $minimum_id = 0;
  67. if (! $monster->can_awaken()){
  68. // Silver star monster.
  69. $this->silver = true;
  70. $this->monster[0] = $monster;
  71. $this->monster[1] = null;
  72. $this->monster[2] = null;
  73. $title = $this->monster[0]->get_element_name() . " " . $this->monster[0]->get_name();
  74. }
  75. elseif ($monster->can_awaken() && $monster->get_awakens_to() == null && $monster->get_awakens_from() == null){
  76. // Default purple (Rainbowmon or King Angelmon)
  77. $this->purple = true;
  78. $this->monster[0] = null;
  79. $this->monster[1] = $monster;
  80. $this->monster[2] = null;
  81. $minimum_id = 1;
  82. $title = $this->monster[1]->get_name();
  83. }
  84. elseif ($monster->can_awaken() && $monster->get_awakens_to() == null && $monster->get_awakens_from() != null){
  85. // Normal monster, already awakened, no 2a.
  86. $this->monster[0] = new Monster($monster->get_awakens_from());
  87. $this->monster[1] = $monster;
  88. $this->monster[2] = null;
  89. $title = $this->monster[1]->get_name() . " - " .$this->monster[0]->get_element_name() . " " . $this->monster[0]->get_name();
  90. $this->family_id= $this->monster[0]->get_family();
  91. }
  92. elseif ($monster->can_awaken() && $monster->get_awakens_to() != null && $monster->get_awakens_from() == null){
  93. // Normal monster, not awakened, may have 2a.
  94. $this->monster[0] = $monster;
  95. $this->monster[1] = new Monster($this->monster[0]->get_awakens_to());
  96. if ($this->monster[1]->get_awakens_to() == null){
  97. $this->monster[2] = null;
  98. }
  99. else{
  100. $this->red = true;
  101. $this->monster[2] = new Monster($this->monster[1]->get_awakens_to());
  102. }
  103. $this->family_id= $this->monster[1]->get_family();
  104. $title = $this->monster[1]->get_name() . " - " .$this->monster[0]->get_element_name() . " " . $this->monster[0]->get_name();
  105. }
  106. // Load the monster family
  107. $statement = get_context()->get_db()->prepare("
  108. SELECT id
  109. FROM monster
  110. WHERE
  111. family = :family AND
  112. id <> :id AND
  113. awakens_from IS NULL
  114. ORDER BY
  115. natural_stars DESC,
  116. element = :fire DESC,
  117. element = :water DESC,
  118. element = :wind DESC,
  119. element = :light DESC,
  120. element = :dark DESC;
  121. ");
  122. $statement->bindValue(":family", $this->monster[$minimum_id]->get_family(), SQLITE3_INTEGER);
  123. $statement->bindValue(":id", $this->monster[$minimum_id]->get_id(), SQLITE3_INTEGER);
  124. $statement->bindValue(":fire", ELEMENT_ID::FIRE, SQLITE3_INTEGER);
  125. $statement->bindValue(":water", ELEMENT_ID::WATER, SQLITE3_INTEGER);
  126. $statement->bindValue(":wind", ELEMENT_ID::WIND, SQLITE3_INTEGER);
  127. $statement->bindValue(":light", ELEMENT_ID::LIGHT, SQLITE3_INTEGER);
  128. $statement->bindValue(":dark", ELEMENT_ID::DARK, SQLITE3_INTEGER);
  129. $result_set = $statement->execute();
  130. while ($result = $result_set->fetchArray(SQLITE3_ASSOC)){
  131. array_push($this->family, new Monster($result["id"]));
  132. }
  133. $this->set_title($title);
  134. $this->set_description($title . " details");
  135. }
  136. /**
  137. * Retrieves the monster line to show.
  138. *
  139. * Index [0]: Unawakened monster (null if default purple).
  140. * Index [1]: Awakened monster (null if silver).
  141. * Index [2]: Second awakened monster (null if unavailaable).
  142. *
  143. * @return Monster[]
  144. */
  145. public function get_monsters(){
  146. return $this->monster;
  147. }
  148. /**
  149. * Retrieves the monster family.
  150. *
  151. * @return multitype:number
  152. */
  153. public function get_family(){
  154. return $this->family;
  155. }
  156. /**
  157. * Checks if the monster is default silver (non awakeable).
  158. *
  159. * @return bool True for silver monsters, false otherwise.
  160. */
  161. public function is_silver(){
  162. return $this->silver;
  163. }
  164. /**
  165. * Checks if the monster is default purple (always awaken).
  166. *
  167. * @return bool True for purple monsters, false otherwise.
  168. */
  169. public function is_purple(){
  170. return $this->purple;
  171. }
  172. /**
  173. * Checks if the monster can second awaken.
  174. *
  175. * @return bool True for monsters that can 2A, false otherwise.
  176. */
  177. public function can_2a(){
  178. return $this->red;
  179. }
  180. }
  181. ?>