Controller.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. <?php
  2. /**
  3. * Controller file.
  4. *
  5. * Provides a class to handle all posible request.
  6. *
  7. * @category Constroller
  8. */
  9. /**
  10. * Include some required files.
  11. */
  12. require_once(__DIR__ . "/config.php");
  13. require_once(PATH::HELPER . "DB_Helper.php");
  14. require_once(PATH::HELPER . "TEXT_Helper.php");
  15. require_once(PATH::HELPER . "NET_Helper.php");
  16. require_once(PATH::HELPER . "HTML_Helper.php");
  17. require_once(PATH::HELPER . "APPLICATION_Helper.php");
  18. require_once(__DIR__ . "/Constant.php");
  19. /**
  20. * @global int $UID.
  21. */
  22. $UID = 0;
  23. /**
  24. * @global int $MODE.
  25. */
  26. $MODE = GAME_MODE_ID::NORMAL;
  27. /**
  28. * @global resource $DB.
  29. */
  30. $db = null;
  31. /**
  32. * Application controller.
  33. *
  34. * Handles every request, creating the required models and selecting the
  35. * view.
  36. *
  37. * @category Controller
  38. */
  39. class Controller {
  40. /**
  41. * Constructor.
  42. *
  43. * Handles every request, creating the required models and selecting the
  44. * view.
  45. *
  46. * @param mixed[] $params POST parameters of the request.
  47. * @return int HTTP status codes 200 or 404;
  48. * @global int User ID.
  49. * @global resource Databse connection.
  50. */
  51. public function __construct($params){
  52. global $UID;
  53. global $MODE;
  54. global $db;
  55. $page = null;
  56. session_start();
  57. $db = DB::start();
  58. // Parse parameters, get lang and build the route.
  59. $pars = [];
  60. foreach($params as $p){
  61. if (strlen($p) > 0){
  62. array_push($pars, $p);
  63. }
  64. }
  65. // API call: Use API controller
  66. if (count($pars) > 0 && strtoupper($pars[0]) == "API"){
  67. if (count($pars) == 1){
  68. // TODO: API MAIN PAGE
  69. }
  70. else{
  71. $version = strtolower($pars[1]);
  72. $api_params = $pars;
  73. array_shift($api_params);
  74. array_shift($api_params);
  75. switch ($version){
  76. case "v1":
  77. require_once(__DIR__ . "/API/v1/API_Controller.php");
  78. new API_Controller($params);
  79. break;
  80. case "v2":
  81. require_once(__DIR__ . "/API/v2/API_Controller.php");
  82. new API_Controller($params);
  83. break;
  84. case "v3":
  85. require_once(__DIR__ . "/API/v3/API_Controller.php");
  86. new API_Controller($params);
  87. break;
  88. }
  89. }
  90. return;
  91. }
  92. // Special case: Actions.
  93. // Not redirecting to page, just execute a function
  94. elseif (count($pars) > 1 && strtoupper($pars[0]) == "ACTION"){
  95. switch (strtoupper($pars[1])){
  96. case "CHANGE_GAME_MODE":
  97. require_once(PATH::ACTION . "change_game_mode.php");
  98. action();
  99. return;
  100. break;
  101. case "LOGIN":
  102. require_once(PATH::ACTION . "login.php");
  103. action();
  104. return;
  105. break;
  106. case "LOGOUT":
  107. require_once(PATH::ACTION . "logout.php");
  108. action();
  109. return;
  110. break;
  111. case "NEW_TEAM":
  112. require_once(PATH::ACTION . "new_team.php");
  113. action();
  114. return;
  115. break;
  116. case "DELETE_TEAM":
  117. require_once(PATH::ACTION . "delete_team.php");
  118. action();
  119. return;
  120. break;
  121. case "RATE_TEAM":
  122. require_once(PATH::ACTION . "rate_team.php");
  123. action();
  124. return;
  125. break;
  126. case "SAVE_RUN_TEAM":
  127. require_once(PATH::ACTION . "save_run_team.php");
  128. action();
  129. return;
  130. break;
  131. case "OPTIMIZE_GET_RUNE_LIST":
  132. require_once(PATH::ACTION . "optimize_get_rune_list.php");
  133. $response = action();
  134. if (strlen($response) > 1){
  135. echo($response);
  136. return;
  137. }
  138. else{
  139. return;
  140. }
  141. break;
  142. case "OPTIMIZE_GET_OPTIONS":
  143. require_once(PATH::ACTION . "optimize_get_options.php");
  144. $response = action();
  145. if (strlen($response) > 1){
  146. echo($response);
  147. return;
  148. }
  149. else{
  150. return;
  151. }
  152. break;
  153. case "EDIT_PROFILE":
  154. require_once(PATH::ACTION . "edit_profile.php");
  155. $response = action();
  156. if (strlen($response) > 1){
  157. echo($response);
  158. return;
  159. }
  160. else{
  161. return;
  162. }
  163. break;
  164. default:
  165. require_once(PATH::PAGE . "Error_Page.php");
  166. $page = new Error_Page(404);
  167. http_response_code(404);
  168. }
  169. }
  170. if (isset($_COOKIE["uid"]) && isset($_SESSION["uid"]) && $_COOKIE["uid"] != $_COOKIE["uid"]){
  171. // Both cookie and session are set, but they are different. Delete them both.
  172. setcookie("uid", "", time() - 3600);
  173. $_SESSION["session"] = false;
  174. $_SESSION["uid"] = "";
  175. require_once(PATH::PAGE . "Landing_Page.php");
  176. $page = new Landing_Page();
  177. require_once($page->view);
  178. return;
  179. }
  180. elseif (isset($_COOKIE["uid"]) && !isset($_SESSION["uid"])){
  181. $_SESSION["session"] = true;
  182. $_SESSION["uid"] = $_COOKIE["uid"];
  183. }
  184. elseif (!isset($_COOKIE["uid"]) && isset($_SESSION["uid"])){
  185. setcookie("uid", $_SESSION["uid"], time() + 5 * 24 * 60 * 60);
  186. }
  187. // Validate session
  188. $UID = $_SESSION["uid"];
  189. $q = $db->query("SELECT count(uid) AS c FROM player WHERE uid = '$UID';");
  190. $r = $q->fetchArray(SQLITE3_ASSOC);
  191. if ($r["c"] == 0){
  192. require_once(PATH::PAGE . "Landing_Page.php");
  193. $page = new Landing_Page();
  194. require_once($page->view);
  195. return;
  196. }
  197. else{
  198. // Reset cokie and renew session.
  199. setcookie("uid", $_SESSION["uid"], time() + 5 * 24 * 60 * 60);
  200. $_SESSION["session"] = true;
  201. $_SESSION["uid"] = $UID;
  202. // Recover username if lost
  203. if (!isset($_SESSION["name"]) || strlen($_SESSION["name"]) == 0){
  204. $q = $db->query("SELECT name FROM player WHERE uid = '$UID';");
  205. $r = $q->fetchArray(SQLITE3_ASSOC);
  206. $_SESSION["name"] = $r["name"];
  207. }
  208. }
  209. // If UID not in URL, redirect and end.
  210. if ($pars[0] != $UID){
  211. header("Location: /$UID" . parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH));
  212. return;
  213. }
  214. // Get game mode
  215. $statement = $db->prepare("SELECT mode FROM player WHERE uid = :uid;");
  216. $statement->bindValue(":uid", $UID);
  217. $r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
  218. if ($r && $r["mode"] == GAME_MODE_ID::RTA){
  219. $MODE = GAME_MODE_ID::RTA;
  220. }
  221. else{
  222. $MODE = GAME_MODE_ID::NORMAL;
  223. }
  224. // Select the model to load.
  225. array_shift($pars); // Remove first one, should be UID
  226. if (sizeof($pars) == 0){
  227. require_once(PATH::PAGE . "Home_Page.php");
  228. $page = new Home_Page();
  229. }
  230. else{
  231. if (strtoupper($pars[0]) == "FUSION"){
  232. require_once(PATH::PAGE . "Fusion_Page.php");
  233. $page = new Fusion_Page();
  234. }
  235. elseif (strtoupper($pars[0]) == "RUNES"){
  236. require_once(PATH::PAGE . "Runes_Page.php");
  237. $page = new Runes_Page();
  238. }
  239. elseif (strtoupper($pars[0]) == "ENCHANTMENTS"){
  240. require_once(PATH::PAGE . "Enchantments_Page.php");
  241. $page = new Enchantments_Page();
  242. }
  243. elseif (strtoupper($pars[0]) == "ARTIFACTS"){
  244. require_once(PATH::PAGE . "Artifacts_Page.php");
  245. $page = new Artifacts_Page();
  246. }
  247. elseif (strtoupper($pars[0]) == "GUILD"){
  248. require_once(PATH::PAGE . "Guild_Page.php");
  249. $page = new Guild_Page();
  250. }
  251. elseif (strtoupper($pars[0]) == "RUNS"){
  252. require_once(PATH::PAGE . "Runs_Page.php");
  253. $page = new Runs_Page();
  254. }
  255. elseif (strtoupper($pars[0]) == "STATS"){
  256. require_once(PATH::PAGE . "Stats_Page.php");
  257. $page = new Stats_Page();
  258. }
  259. elseif (strtoupper($pars[0]) == "TEAMS"){
  260. require_once(PATH::PAGE . "Teams_Page.php");
  261. $page = new Teams_Page();
  262. }
  263. elseif (strtoupper($pars[0]) == "PROFILE"){
  264. require_once(PATH::PAGE . "Profile_Page.php");
  265. $page = new Profile_Page();
  266. }
  267. elseif (strtoupper($pars[0]) == "MONSTERS"){
  268. if (count($pars) == 1){
  269. require_once(PATH::PAGE . "Monsters_Page.php");
  270. $page = new Monsters_Page();
  271. }
  272. else{
  273. require_once(PATH::PAGE . "Monster_Page.php");
  274. $page = new Monster_Page($pars[1]);
  275. }
  276. }
  277. elseif (strtoupper($pars[0]) == "CATALOG"){
  278. if (count($pars) == 1){
  279. require_once(PATH::PAGE . "Catalog_Page.php");
  280. $page = new Catalog_Page();
  281. }
  282. else{
  283. require_once(PATH::PAGE . "Monster_Info_Page.php");
  284. $page = new Monster_Info_Page($pars[1]);
  285. }
  286. }
  287. elseif (strtoupper($pars[0]) == "REPORT"){
  288. if (count($pars) == 1){
  289. require_once(PATH::PAGE . "Report_Page.php");
  290. $page = new Report_Page();
  291. }
  292. elseif (strtoupper($pars[1]) == "SKILLUP"){
  293. require_once(PATH::PAGE . "Report_Skillup_Page.php");
  294. $page = new Report_Skillup_Page($pars[1]);
  295. }
  296. elseif (strtoupper($pars[1]) == "RUNE_ENCHANTMENT"){
  297. require_once(PATH::PAGE . "Report_Rune_Enchantment_Page.php");
  298. $page = new Report_Rune_Enchantment_Page($pars[1]);
  299. }
  300. }
  301. elseif (strtoupper($pars[0]) == "OPTIMIZER"){
  302. if (count($pars) == 1){
  303. require_once(PATH::PAGE . "Optimizer_Page.php");
  304. $page = new Optimizer_Page();
  305. }
  306. else{
  307. require_once(PATH::PAGE . "Optimizer_Unit_Page.php");
  308. $page = new Optimizer_Unit_Page($pars[1]);
  309. }
  310. }
  311. }
  312. // Load the view, or set an error code.
  313. if (isset($page)){
  314. require_once($page->view);
  315. return 200;
  316. }
  317. else{
  318. require_once(PATH::PAGE . "Error_Page.php");
  319. $page = new Error_Page(404);
  320. http_response_code(404);
  321. return 404;
  322. }
  323. }
  324. }
  325. ?>