|
|
@@ -39,6 +39,11 @@ class Controller extends Context{
|
|
|
* @var Context Publicly available context.
|
|
|
*/
|
|
|
private $context;
|
|
|
+
|
|
|
+ private $command = "";
|
|
|
+
|
|
|
+ private $status = 201;
|
|
|
+ private $message = "OK";
|
|
|
|
|
|
/**
|
|
|
* Retrieves the application context.
|
|
|
@@ -60,6 +65,12 @@ class Controller extends Context{
|
|
|
$this->db = DB::start();
|
|
|
$this->context->set_db($this->db);
|
|
|
}
|
|
|
+
|
|
|
+ private function execute_action($action){
|
|
|
+ require_once(PATH::ACTION . $action . ".php");
|
|
|
+ action();
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* Handles the request parameters.
|
|
|
@@ -77,16 +88,8 @@ class Controller extends Context{
|
|
|
array_push($this->params, $p);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (
|
|
|
- count($this->params) > 1 &&
|
|
|
- strtoupper($this->params[0]) == "API"
|
|
|
- ){
|
|
|
- // For API calls, skip authentication and end here.
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // Authentication
|
|
|
+
|
|
|
+ // Chack if a user is authenticated.
|
|
|
if (array_key_exists("user_token", $_COOKIE) && array_key_exists("user_id", $_COOKIE)){
|
|
|
// Authenticated user, check token.
|
|
|
$statement = $this->db->prepare("
|
|
|
@@ -102,109 +105,98 @@ class Controller extends Context{
|
|
|
$r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
|
|
|
if ($r["c"] == 0){
|
|
|
// Token is invalid, expired, clear cookies, session, and logout.
|
|
|
- require_once(PATH::ACTION . "logout.php");
|
|
|
- action();
|
|
|
+ execute_action("logout");
|
|
|
return;
|
|
|
}
|
|
|
else{
|
|
|
// Token is valid, renew session, and assign user.
|
|
|
$_SESSION["user_id"] = $_COOKIE["user_id"];
|
|
|
$_SESSION["session"] = true;
|
|
|
- $this->user = new User($_COOKIE["user_id"]);
|
|
|
- $this->context->set_user($this->user);
|
|
|
+ $this->context->set_user(new User($_COOKIE["user_id"]));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
else{
|
|
|
// Unauthenticated user. Continue
|
|
|
}
|
|
|
|
|
|
- if (
|
|
|
- count($this->params) > 1 &&
|
|
|
- strtoupper($this->params[0]) == "ACTION"
|
|
|
- ){
|
|
|
- // For ACTION calls, skip user detection and end here.
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // Validate URL (check if it has the player ID).
|
|
|
- $this->player = null;
|
|
|
- if (sizeof($this->params) > 0 && preg_match("/^[0-9]{6,12}$/", $this->params[0]) == 1){
|
|
|
- // Player ID passed in URL. Check it in database
|
|
|
- $statement = $this->db->prepare("
|
|
|
- SELECT
|
|
|
- id,
|
|
|
- user,
|
|
|
- public
|
|
|
- FROM player
|
|
|
- WHERE id = :id
|
|
|
- ");
|
|
|
- $statement->bindValue(":id", $this->params[0], SQLITE3_TEXT);
|
|
|
- $r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
|
|
|
- if ($r){
|
|
|
- // The player exists...
|
|
|
- if (null != $this->user && $r["user"] == $this->user->get_id()){
|
|
|
- // ... and it belongs to the user. Proceed.
|
|
|
- $this->player = new Player($r["id"]);
|
|
|
- $this->context->set_player($this->player);
|
|
|
- }
|
|
|
- elseif (null == $this->user || $r["user"] != $this->user->get_id()){
|
|
|
- // ... and it doesn't belong to the user...
|
|
|
- if ($r["public"] == 1){
|
|
|
- // ... and it belongs to a public profile. Proceed.
|
|
|
- $this->player = new Player($r["id"]);
|
|
|
- $this->context->set_player($this->player);
|
|
|
- }
|
|
|
- else{
|
|
|
- // ... and it belongs to a private profile. Deny access.
|
|
|
- // TODO
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ $auth_required = false;
|
|
|
+ $player_id = null;
|
|
|
+
|
|
|
+ // Obtain the command and process it
|
|
|
+ if (sizeof($this->params) > 0){
|
|
|
+ $this->command = strtoupper($this->params[0]);
|
|
|
}
|
|
|
- else{
|
|
|
- // Player ID is not passed as URL...
|
|
|
- if (null == $this->user){
|
|
|
- // ... and no user logged in. Go to the landing page.
|
|
|
- require_once(PATH::PAGE . "Landing_Page.php");
|
|
|
- $page = new Landing_Page();
|
|
|
- require_once($page->get_view());
|
|
|
- return;
|
|
|
- }
|
|
|
- else{
|
|
|
- // ... and the user is logged in. Get last accessed account.
|
|
|
- $statement = $this->db->prepare("
|
|
|
- SELECT id
|
|
|
- FROM player
|
|
|
- WHERE user = :user
|
|
|
- ORDER BY last_access DESC
|
|
|
- ");
|
|
|
- $statement->bindValue(":user", $this->user->get_id(), SQLITE3_INTEGER);
|
|
|
- $r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
|
|
|
- if ($r){
|
|
|
- header("Location: /" . $r["id"] . parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH));
|
|
|
- return;
|
|
|
+ switch ($this->command){
|
|
|
+ case "": // Main page
|
|
|
+ break;
|
|
|
+ case "API": // An API call
|
|
|
+ return; // End preparation here, the API controller will deal with everything.
|
|
|
+ break;
|
|
|
+ case "ACTION": // Execute an action
|
|
|
+ $auth_required = true;
|
|
|
+ break;
|
|
|
+ case "PLAYER": // A player page
|
|
|
+ if (sizeof($this->params) > 1){
|
|
|
+ $player_id = $this->params[1];
|
|
|
}
|
|
|
else{
|
|
|
- require_once(PATH::PAGE . "Landing_Page.php");
|
|
|
- $page = new Landing_Page();
|
|
|
- require_once($page->get_view());
|
|
|
+ $this->status = 400;
|
|
|
+ $this->message = "Bad request";
|
|
|
return;
|
|
|
}
|
|
|
+ break;
|
|
|
+ case "LOGIN": // The login page
|
|
|
+ break;
|
|
|
+ case "REGISTER": // Registration page
|
|
|
+ break;
|
|
|
+ case "SEARCH": // Search results
|
|
|
+ break;
|
|
|
+ case "DUNGEON": // Dungeon static pages
|
|
|
+ break;
|
|
|
+ case "BUILDING": // Building static pages
|
|
|
+ break;
|
|
|
+ case "FUSION": // Fusion static pages
|
|
|
+ break;
|
|
|
+ case "HELP": // Help static page
|
|
|
+ break;
|
|
|
+ case "ERROR": // Error page
|
|
|
+ break;
|
|
|
+ default: // Unknown page
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($player_id != null){
|
|
|
+ $this->context->set_player(new Player($player_id));
|
|
|
+ if ($this->context->get_player()->get_id() == null){
|
|
|
+ // TODO: error 404;
|
|
|
+ $this->status = 404;
|
|
|
+ $this->message = "Requested player doesn't exist";
|
|
|
+ return;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if ($auth_required && $this->context->get_user() == null){
|
|
|
+ $this->status = 401;
|
|
|
+ $this->message = "Authentication required to perform this action";
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
// Get game mode
|
|
|
- $statement = $this->db->prepare("SELECT mode FROM player WHERE id = :id;");
|
|
|
- $statement->bindValue(":id", $this->player->get_id(), SQLITE3_INTEGER);
|
|
|
- $r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
|
|
|
- if ($r && $r["mode"] == GAME_MODE_ID::RTA){
|
|
|
- $this->mode = GAME_MODE_ID::RTA;
|
|
|
+ if ($this->context->get_player() == null){
|
|
|
+ $this->context->set_game_mode(GAME_MODE_ID::NORMAL);
|
|
|
}
|
|
|
else{
|
|
|
- $this->mode = GAME_MODE_ID::NORMAL;
|
|
|
+ $statement = $this->db->prepare("SELECT mode FROM player WHERE id = :id;");
|
|
|
+ $statement->bindValue(":id", $this->context->get_player()->get_id(), SQLITE3_INTEGER);
|
|
|
+ $r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
|
|
|
+ if ($r && $r["mode"] == GAME_MODE_ID::RTA){
|
|
|
+ $this->context->set_game_mode(GAME_MODE_ID::RTA);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ $this->context->set_game_mode(GAME_MODE_ID::NORMAL);
|
|
|
+ }
|
|
|
}
|
|
|
- $this->context->set_game_mode($this->mode);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -215,201 +207,295 @@ class Controller extends Context{
|
|
|
* @return void|number
|
|
|
*/
|
|
|
public function action(){
|
|
|
- // API call: Use API controller
|
|
|
- if (count($this->params) > 0 && strtoupper($this->params[0]) == "API"){
|
|
|
- if (count($this->params) == 1){
|
|
|
- // TODO: API MAIN PAGE
|
|
|
- }
|
|
|
- else{
|
|
|
- $version = strtolower($this->params[1]);
|
|
|
- $api_params = $this->params;
|
|
|
- array_shift($api_params);
|
|
|
- array_shift($api_params);
|
|
|
- switch ($version){
|
|
|
- case "v1":
|
|
|
- require_once(__DIR__ . "/API/v1/API_Controller.php");
|
|
|
- new API_Controller($this->params);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- return;
|
|
|
+
|
|
|
+ // If there was an error in preparation, it's time to throw it.
|
|
|
+ if ($this->status >= 400 && $this->status < 500){
|
|
|
+ $page = new Error_Page($this->status, $this->message);
|
|
|
+ require_once($page->get_view());
|
|
|
+ http_response_code(404);
|
|
|
+ return 404;
|
|
|
}
|
|
|
- // Special case: Actions.
|
|
|
- // Not redirecting to page, just execute a function
|
|
|
- // TODO: Secure actions
|
|
|
- elseif (count($this->params) > 1 && strtoupper($this->params[0]) == "ACTION"){
|
|
|
- switch (strtoupper($this->params[1])){
|
|
|
- case "CHANGE_GAME_MODE":
|
|
|
- require_once(PATH::ACTION . "change_game_mode.php");
|
|
|
- action();
|
|
|
- return;
|
|
|
- break;
|
|
|
- case "LOGIN":
|
|
|
- require_once(PATH::ACTION . "login.php");
|
|
|
- action();
|
|
|
- return;
|
|
|
- break;
|
|
|
- case "LOGOUT":
|
|
|
- require_once(PATH::ACTION . "logout.php");
|
|
|
- action();
|
|
|
- return;
|
|
|
- break;
|
|
|
- case "NEW_TEAM":
|
|
|
- require_once(PATH::ACTION . "new_team.php");
|
|
|
- action();
|
|
|
- return;
|
|
|
- break;
|
|
|
- case "DELETE_TEAM":
|
|
|
- require_once(PATH::ACTION . "delete_team.php");
|
|
|
- action();
|
|
|
- return;
|
|
|
- break;
|
|
|
- case "RATE_TEAM":
|
|
|
- require_once(PATH::ACTION . "rate_team.php");
|
|
|
- action();
|
|
|
- return;
|
|
|
- break;
|
|
|
- case "SAVE_RUN_TEAM":
|
|
|
- require_once(PATH::ACTION . "save_run_team.php");
|
|
|
- action();
|
|
|
- return;
|
|
|
- break;
|
|
|
- case "OPTIMIZE_GET_RUNE_LIST":
|
|
|
- require_once(PATH::ACTION . "optimize_get_rune_list.php");
|
|
|
- $response = action();
|
|
|
- if (strlen($response) > 1){
|
|
|
- echo($response);
|
|
|
- return;
|
|
|
- }
|
|
|
- else{
|
|
|
- return;
|
|
|
- }
|
|
|
- break;
|
|
|
- case "OPTIMIZE_GET_OPTIONS":
|
|
|
- require_once(PATH::ACTION . "optimize_get_options.php");
|
|
|
- $response = action();
|
|
|
- if (strlen($response) > 1){
|
|
|
- echo($response);
|
|
|
- return;
|
|
|
- }
|
|
|
- else{
|
|
|
- return;
|
|
|
- }
|
|
|
- break;
|
|
|
- case "EDIT_PROFILE":
|
|
|
- require_once(PATH::ACTION . "edit_profile.php");
|
|
|
- $response = action();
|
|
|
- if (strlen($response) > 1){
|
|
|
- echo($response);
|
|
|
+
|
|
|
+ // Process the command
|
|
|
+ error_log("SWITCH COMMAND: " . $this->command);
|
|
|
+ $page = null;
|
|
|
+ switch ($this->command){
|
|
|
+ case "": // Main page
|
|
|
+ // Two options:
|
|
|
+ // If user authenticated, retrieve last used player acocunt and load main page
|
|
|
+ // If not, login page.
|
|
|
+ if ($this->context->get_user() == null){
|
|
|
+ require_once(PATH::PAGE . "Login_Page.php");
|
|
|
+ $page = new Login_Page();
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ $statement = $this->context->get_db()->prepare("
|
|
|
+ SELECT id
|
|
|
+ FROM player
|
|
|
+ WHERE user = :user
|
|
|
+ ORDER BY last_access DESC
|
|
|
+ LIMIT 1;
|
|
|
+ ");
|
|
|
+ $statement->bindValue(":user", $this->context->get_user()->get_id(), SQLITE3_INTEGER);
|
|
|
+ $r = $statement->execute()->fetchArray(SQLITE3_ASSOC);
|
|
|
+ if ($r){
|
|
|
+ header("Location: " . URL::BASE . "player/" . $r["id"]);
|
|
|
return;
|
|
|
+ //$this->context->set_player(new Player($r["id"]));
|
|
|
+ //require_once(PATH::PAGE . "Player_Page.php");
|
|
|
+ //$page = new Player_Page();
|
|
|
}
|
|
|
else{
|
|
|
- return;
|
|
|
+ // TODO: weird case: user with no players
|
|
|
}
|
|
|
- break;
|
|
|
- default:
|
|
|
- require_once(PATH::PAGE . "Error_Page.php");
|
|
|
- $page = new Error_Page(404);
|
|
|
- http_response_code(404);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // Select the model to load.
|
|
|
- array_shift($this->params); // Remove first one, should be player_id
|
|
|
- if (sizeof($this->params) == 0){
|
|
|
- require_once(PATH::PAGE . "Home_Page.php");
|
|
|
- $page = new Home_Page();
|
|
|
- }
|
|
|
- else{
|
|
|
- if (strtoupper($this->params[0]) == "RUNES"){
|
|
|
- require_once(PATH::PAGE . "Runes_Page.php");
|
|
|
- $page = new Runes_Page();
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "ENCHANTMENTS"){
|
|
|
- require_once(PATH::PAGE . "Enchantments_Page.php");
|
|
|
- $page = new Enchantments_Page();
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "ARTIFACTS"){
|
|
|
- require_once(PATH::PAGE . "Artifacts_Page.php");
|
|
|
- $page = new Artifacts_Page();
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "GUILD"){
|
|
|
- require_once(PATH::PAGE . "Guild_Page.php");
|
|
|
- $page = new Guild_Page();
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "RUNS"){
|
|
|
- require_once(PATH::PAGE . "Runs_Page.php");
|
|
|
- $page = new Runs_Page();
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "STATS"){
|
|
|
- require_once(PATH::PAGE . "Stats_Page.php");
|
|
|
- $page = new Stats_Page();
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "TEAMS"){
|
|
|
- require_once(PATH::PAGE . "Teams_Page.php");
|
|
|
- $page = new Teams_Page();
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "PROFILE"){
|
|
|
- require_once(PATH::PAGE . "Profile_Page.php");
|
|
|
- $page = new Profile_Page();
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "UNITS"){
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "API": // An API call
|
|
|
if (count($this->params) == 1){
|
|
|
- require_once(PATH::PAGE . "Units_Page.php");
|
|
|
- $page = new Units_Page();
|
|
|
+ // TODO: Redirect to current version
|
|
|
}
|
|
|
else{
|
|
|
- require_once(PATH::PAGE . "Unit_Page.php");
|
|
|
- $page = new Unit_Page($this->params[1]);
|
|
|
+ $version = strtolower($this->params[1]);
|
|
|
+ $api_params = $this->params;
|
|
|
+ array_shift($api_params);
|
|
|
+ array_shift($api_params);
|
|
|
+ switch ($version){
|
|
|
+ case "v1":
|
|
|
+ require_once(__DIR__ . "/API/v1/API_Controller.php");
|
|
|
+ new API_Controller($this->params);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ require_once(PATH::PAGE . "Error_Page.php");
|
|
|
+ $page = new Error_Page(404, "API version doesn't exist.");
|
|
|
+ require_once($page->get_view());
|
|
|
+ http_response_code(404);
|
|
|
+ return 404;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "MONSTERS"){
|
|
|
- if (count($this->params) == 1){
|
|
|
- require_once(PATH::PAGE . "Monsters_Page.php");
|
|
|
- $page = new Monsters_Page();
|
|
|
+ break;
|
|
|
+ case "ACTION": // Execute an action
|
|
|
+ // If no action specified
|
|
|
+ if (sizeof($this->params) < 2){
|
|
|
+ require_once(PATH::PAGE . "Error_Page.php");
|
|
|
+ $page = new Error_Page(400, "No action specified.");
|
|
|
+ require_once($page->get_view());
|
|
|
+ http_response_code(400);
|
|
|
+ return 400;
|
|
|
}
|
|
|
- else{
|
|
|
- require_once(PATH::PAGE . "Monster_Page.php");
|
|
|
- $page = new Monster_Page($this->params[1]);
|
|
|
+
|
|
|
+ // Process action
|
|
|
+ $action = strtoupper($this->params[1]);
|
|
|
+ switch ($action){
|
|
|
+ // Special cases where the output must be printed:
|
|
|
+ case "OPTIMIZE_LIST":
|
|
|
+ require_once(PATH::ACTION . "Optimize_List_Action.php");
|
|
|
+ $action = new Optimize_List_Action();
|
|
|
+ break;
|
|
|
+ case "OPTIMIZE_OPTIONS":
|
|
|
+ require_once(PATH::ACTION . "Optimize_Options_Action.php");
|
|
|
+ $action = new Optimize_Options_Action();
|
|
|
+ break;
|
|
|
+ case "CHANGE_GAME_MODE":
|
|
|
+ require_once(PATH::ACTION . "Change_Game_Mode_Action.php");
|
|
|
+ $action = new Change_Game_Mode_Action();
|
|
|
+ break;
|
|
|
+ case "LOGIN":
|
|
|
+ require_once(PATH::ACTION . "Login_Action.php");
|
|
|
+ $action = new Login_Action();
|
|
|
+ break;
|
|
|
+ case "LOGOUT":
|
|
|
+ require_once(PATH::ACTION . "Logout_Action.php");
|
|
|
+ $action = new Logout_Action();
|
|
|
+ break;
|
|
|
+ case "ADD_TEAM":
|
|
|
+ require_once(PATH::ACTION . "Add_Team_Action.php");
|
|
|
+ $action = new Add_Team_Action();
|
|
|
+ break;
|
|
|
+ case "EDIT_PROFILE":
|
|
|
+ require_once(PATH::ACTION . "Edit_Profile_Action.php");
|
|
|
+ $action = new Edit_Profile_Action();
|
|
|
+ break;
|
|
|
+ case "DELETE_TEAM":
|
|
|
+ require_once(PATH::ACTION . "Delete_Team_Action.php");
|
|
|
+ $action = new Delete_Team_Action();
|
|
|
+ break;
|
|
|
+ case "RATE_TEAM":
|
|
|
+ require_once(PATH::ACTION . "rate_team.php");
|
|
|
+ $action = new Rate_Team_Action();
|
|
|
+ break;
|
|
|
+ case "SAVE_TEAM":
|
|
|
+ require_once(PATH::ACTION . "Save_Team_Action.php");
|
|
|
+ $action = new Save_Team_Action();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ require_once(PATH::PAGE . "Error_Page.php");
|
|
|
+ $page = new Error_Page(404, "Action not found");
|
|
|
+ require_once($page->get_view());
|
|
|
+ http_response_code(404);
|
|
|
+ return;
|
|
|
}
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "REPORT"){
|
|
|
- if (count($this->params) == 1){
|
|
|
- require_once(PATH::PAGE . "Report_Page.php");
|
|
|
- $page = new Report_Page();
|
|
|
+ $action->execute();
|
|
|
+ if ($action->get_code() >= 400 && $action->get_code() < 500){
|
|
|
+ require_once(PATH::PAGE . "Error_Page.php");
|
|
|
+ $page = new Error_Page($action->get_code(), $action->get_message());
|
|
|
+ require_once($page->get_view());
|
|
|
+ http_response_code($action->get_code());
|
|
|
}
|
|
|
- elseif (strtoupper($this->params[1]) == "SKILLUP"){
|
|
|
- require_once(PATH::PAGE . "Report_Skillup_Page.php");
|
|
|
- $page = new Report_Skillup_Page($this->params[1]);
|
|
|
+ if (strlen($action->get_output()) > 0){
|
|
|
+ echo($action->get_output());
|
|
|
}
|
|
|
- elseif (strtoupper($this->params[1]) == "RUNE_ENCHANTMENT"){
|
|
|
- require_once(PATH::PAGE . "Report_Rune_Enchantment_Page.php");
|
|
|
- $page = new Report_Rune_Enchantment_Page($this->params[1]);
|
|
|
+ return $action->get_code();
|
|
|
+ break;
|
|
|
+ case "PLAYER": // A player page
|
|
|
+ error_log("CASE PLAYER");
|
|
|
+ if ($this->context->get_player() == null || $this->context->get_player()->get_id() == null){
|
|
|
+ require_once(PATH::PAGE . "Error_Page.php");
|
|
|
+ $page = new Error_Page(404, "Player not found");
|
|
|
+ require_once($page->get_view());
|
|
|
+ http_response_code(404);
|
|
|
+ return;
|
|
|
}
|
|
|
- }
|
|
|
- elseif (strtoupper($this->params[0]) == "OPTIMIZER"){
|
|
|
- if (count($this->params) == 1){
|
|
|
- require_once(PATH::PAGE . "Optimizer_Page.php");
|
|
|
- $page = new Optimizer_Page();
|
|
|
+ if (
|
|
|
+ $this->context->get_player()->is_public() == false &&
|
|
|
+ (
|
|
|
+ $this->context->get_user() == null ||
|
|
|
+ $this->context->get_player()->get_user() != $this->context->get_user()->get_id()
|
|
|
+ )
|
|
|
+ ){
|
|
|
+ require_once(PATH::PAGE . "Error_Page.php");
|
|
|
+ $page = new Error_Page(401, "Player profile set to private");
|
|
|
+ require_once($page->get_view());
|
|
|
+ http_response_code(401);
|
|
|
}
|
|
|
- else{
|
|
|
- require_once(PATH::PAGE . "Optimizer_Unit_Page.php");
|
|
|
- $page = new Optimizer_Unit_Page($this->params[1]);
|
|
|
+ $subcommand = "";
|
|
|
+ if (sizeof($this->params) > 2){
|
|
|
+ $subcommand = strtoupper($this->params[2]);
|
|
|
}
|
|
|
- }
|
|
|
+ $page = null;
|
|
|
+ switch ($subcommand){
|
|
|
+ case "": // Player profile
|
|
|
+ require_once(PATH::PAGE . "Player_Page.php");
|
|
|
+ $page = new Player_Page($this->context->get_player()->get_id());
|
|
|
+ break;
|
|
|
+ case "RUNES":
|
|
|
+ require_once(PATH::PAGE . "Runes_Page.php");
|
|
|
+ $page = new Runes_Page();
|
|
|
+ break;
|
|
|
+ case "ENCHANTMENTS":
|
|
|
+ require_once(PATH::PAGE . "Enchantments_Page.php");
|
|
|
+ $page = new Enchantments_Page();
|
|
|
+ break;
|
|
|
+ case "ARTIFACTS":
|
|
|
+ require_once(PATH::PAGE . "Artifacts_Page.php");
|
|
|
+ $page = new Artifacts_Page();
|
|
|
+ break;
|
|
|
+ case "GUILD":
|
|
|
+ require_once(PATH::PAGE . "Guild_Page.php");
|
|
|
+ $page = new Guild_Page();
|
|
|
+ break;
|
|
|
+ case "RUNS":
|
|
|
+ require_once(PATH::PAGE . "Runs_Page.php");
|
|
|
+ $page = new Runs_Page();
|
|
|
+ break;
|
|
|
+ /*case "STATS":
|
|
|
+ require_once(PATH::PAGE . "Stats_Page.php");
|
|
|
+ $page = new Stats_Page();
|
|
|
+ break;*/
|
|
|
+ case "TEAMS":
|
|
|
+ require_once(PATH::PAGE . "Teams_Page.php");
|
|
|
+ $page = new Teams_Page();
|
|
|
+ break;
|
|
|
+ case "UNITS":
|
|
|
+ if (sizeof($this->params) > 3){
|
|
|
+ require_once(PATH::PAGE . "Unit_Page.php");
|
|
|
+ $page = new Unit_Page($this->params[3]);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ require_once(PATH::PAGE . "Units_Page.php");
|
|
|
+ $page = new Units_Page();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "REPORT":
|
|
|
+ if (sizeof($this->params) > 3){
|
|
|
+ if (strtoupper($this->params[3]) == "SKILLUP"){
|
|
|
+ require_once(PATH::PAGE . "Report_Skillup_Page.php");
|
|
|
+ $page = new Report_Skillup_Page();
|
|
|
+ }
|
|
|
+ elseif (strtoupper($this->params[3]) == "RUNE_ENCHANTMENT"){
|
|
|
+ require_once(PATH::PAGE . "Report_Rune_Enchantment_Page.php");
|
|
|
+ $page = new Report_Rune_Enchantment_Page();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ require_once(PATH::PAGE . "Report_Page.php");
|
|
|
+ $page = new Report_Page();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "OPTIMIZER":
|
|
|
+ if (sizeof($this->params) > 3){
|
|
|
+ require_once(PATH::PAGE . "Optimizer_Unit_Page.php");
|
|
|
+ $page = new Optimizer_Unit_Page($this->params[3]);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ require_once(PATH::PAGE . "Optimizer_Page.php");
|
|
|
+ $page = new Optimizer_Page();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "LOGIN": // The login page
|
|
|
+ require_once(PATH::PAGE . "Login_Page.php");
|
|
|
+ $page = new Login_Page();
|
|
|
+ break;
|
|
|
+ case "REGISTER": // Registration page
|
|
|
+ require_once(PATH::PAGE . "Register_Page.php");
|
|
|
+ $page = new Register_Page();
|
|
|
+ break;
|
|
|
+ case "SEARCH": // Search results
|
|
|
+ require_once(PATH::PAGE . "Search_Page.php");
|
|
|
+ $page = new Search_Page();
|
|
|
+ break;
|
|
|
+ case "DUNGEON": // Dungeon static pages
|
|
|
+ require_once(PATH::PAGE . "Login_Page.php");
|
|
|
+ $page = new Dungeon_Page();
|
|
|
+ break;
|
|
|
+ case "BUILDING": // Building static pages
|
|
|
+ require_once(PATH::PAGE . "Building_Page.php");
|
|
|
+ $page = new Building_Page();
|
|
|
+ break;
|
|
|
+ case "FUSION": // Fusion static pages
|
|
|
+ require_once(PATH::PAGE . "Fusion_Page.php");
|
|
|
+ $page = new Fusion_Page();
|
|
|
+ break;
|
|
|
+ case "HELP": // Help static page
|
|
|
+ require_once(PATH::PAGE . "Help_Page.php");
|
|
|
+ $page = new Help_Page();
|
|
|
+ break;
|
|
|
}
|
|
|
-
|
|
|
- // Load the view, or set an error code.
|
|
|
- if (isset($page)){
|
|
|
- require_once($page->get_view());
|
|
|
- return 200;
|
|
|
+
|
|
|
+ // If page is not set, it's a not found.
|
|
|
+ if ($page == null){
|
|
|
+ require_once(PATH::PAGE . "Error_Page.php");
|
|
|
+ $page = new Error_Page(404, "Page not found");
|
|
|
}
|
|
|
- else{
|
|
|
+
|
|
|
+ // Once the page is loaded, chack if it can be seen
|
|
|
+ // TODO verify
|
|
|
+ if (! $page->is_public() && $this->get_user() == null){
|
|
|
require_once(PATH::PAGE . "Error_Page.php");
|
|
|
- $page = new Error_Page(404);
|
|
|
- require_once($page->get_view());
|
|
|
- http_response_code(404);
|
|
|
- return 404;
|
|
|
+ $page = new Error_Page(401, "Authentication required");
|
|
|
+ http_response_code(401);
|
|
|
}
|
|
|
+
|
|
|
+ if ($page->get_code() >= 400 && $page->get_code() < 600){
|
|
|
+ require_once(PATH::PAGE . "Error_Page.php");
|
|
|
+ $page = new Error_Page($page->get_code(), $page->get_message());
|
|
|
+ http_response_code($page->get_code());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // Load the view, or set an error code.
|
|
|
+ require_once($page->get_view());
|
|
|
+ http_response_code($page->get_code());
|
|
|
}
|
|
|
}
|