/** * Elabora le richieste fatte al server dall'utente per scegliere lo script da eseguire e su quali dati. * Non esegue lo script ma fornisce i dati per sceglierlo. * * @param $reqest: un URL relativo. Deve essere in una di queste forme: * %oggetto%/ * %oggetto%/%identificativo oggetto%/ * %oggetto%/%identificativo oggetto%/%azione%/ * %oggetto%/%identificativo oggetto%/%azione%/?%nome parametro%=%valore parametro% * * @return un array associativo contenente i seguenti parametri: * object => l'oggetto o se c'è un errore: index. * identificativo (o identificativi) dell'oggetto. * permalink oggetto => il permalink (che è anche la richiesta). * azione => l'azione da eseguire sull'oggetto. * il parametro potrà ancora essere recuperato attraverso $_GET[%nome parametro%]. */ private static function elaborateRequest($request) { require_once "file_manager.php"; //echo "<br />" . $request; //DEBUG $param_index = strpos($request, "?"); //echo "<br />" . $param_index; //DEBUG $bookmark_index = strpos($request, "#"); $get = $param_index || $bookmark_index; $index = strlen($request); if ($get) { if (!$param_index || $bookmark_index && $bookmark_index < $param_index) { //echo "<br />" . $param_index; //DEBUG $index = $bookmark_index; } else { if (!$bookmark_index || $param_index && $param_index < $bookmark_index) { $index = $param_index; //echo "<br />" . $bookmark_index; //DEBUG } } } $start = strlen(dirname($_SERVER["PHP_SELF"])) + 1; //il +1 è per lo / $return = array(); //echo "<br />" . $start . " " . $index; //DEBUG self::$currentPermalink = substr($request, $start, $index - $start); //echo "<br />" . $return["permalink"]; //DEBUG //echo "<br />" . $s; //DEBUG $parts = explode("/", self::$currentPermalink); $count = count($parts); //echo "<p style='color:red'>" . $count . "</p>"; //DEBUG //se parts è vuoto eseguo l'index if ($count == 0) { return array("object" => "index"); } self::$requestedObject = $parts[0]; self::$requestedAction = $parts[$count - 1]; //selezione dell'oggetto su cui lavorare switch (self::$requestedObject) { case "error.php": case "error": self::$requestedObject = "index"; self::$requestedAction = "error"; break; case "Login": case "Logout": case "Signin": if (self::$requestedAction != self::$requestedObject) { self::$requestedAction = self::$requestedObject; } break; case "Profile": if (self::$user === false) { self::$requestedAction = ""; break; } if (self::$requestedAction == self::$requestedObject) { self::$requestedAction = "Read"; } self::$requestedObject = "User"; self::$currentID = self::$user->getNickname(); self::$currentObject = self::$user; break; case "Favourites": if (self::$user === false) { self::$requestedAction = ""; break; } if (self::$requestedAction == self::$requestedObject) { self::$requestedAction = "Read"; } self::$requestedObject = "Post"; require_once 'search/SearchManager.php'; $p = SearchManager::searchBy("Post", array("type" => "collection", "title" => "Favourites", "author" => self::$user->getID()), array()); if (is_array($p) && count($p) == 1) { self::$currentObject = $p[0]; self::$currentID = $p->getPermalink(); } else { header("location: " . FileManager::appendToRootPath("error.php?e=Oops la pagina non è stata trovata.")); } break; case "Edit": if (self::$user === false) { self::$requestedAction = ""; break; } if (self::$requestedAction == self::$requestedObject) { self::$requestedAction = "Posts"; } self::$requestedObject = "User"; self::$currentID = self::$user->getNickname(); self::$currentObject = self::$user; break; case "Mailbox": if (self::$user === false) { self::$requestedAction = ""; break; } if (self::$requestedAction == self::$requestedObject) { self::$requestedAction = "Mails"; } self::$requestedObject = "Directory"; self::$currentID = MAILBOX; break; case "Contest": //modifica o leggi tutti i post di un contest //EDIT E DELETE SOLO ADMIN!!! if (self::$requestedAction == "Edit" || self::$requestedAction == "Posts" || self::$requestedAction == "Delete") { //esempio: /Contest/%contest_id%/Edit if ($count != 3) { self::$requestedAction = ""; } else { self::$currentID = $parts[1]; } } //crea nuovo contest //SOLO ADMIN!!! if ($action == "New") { //esempio: /Contest/New if ($count != 2) { self::$requestedAction = ""; } } //leggi la scheda del contest if ($count == 2) { //esempio: /Contest/%contest_id% self::$requestedAction = "Read"; self::$currentID = $parts[1]; } //pagina di ricerca dei contest if ($count == 1) { self::$requestedAction == "Search"; } break; case "Category": //modifica o leggi tutti i post di una categoria //EDIT, SETPARENT E DELETE SOLO ADMIN!!! if (self::$requestedAction == "Edit" || self::$requestedAction == "Posts" || self::$requestedAction == "Delete" || self::$requestedAction == "SetParent") { //esempio: /Category/%category_name%/Posts if ($count != 3) { self::$requestedAction = ""; } else { self::$currentID = $parts[1]; } } //crea nuova categoria //SOLO ADMIN!!! if (self::$requestedAction == "New") { //esempio: /Category/New if ($count != 2) { self::$requestedAction = ""; } } //leggi tutti i post di una categoria //E' UNA COPIA DI QUELLA SOPRA... if ($count == 2) { //esempio: /Category/%category_name% self::$requestedAction = "Posts"; self::$currentID = $parts[1]; } //pagina di ricerca delle categorie if ($count == 1) { self::$requestedAction == "Search"; } break; case "Tag": //leggi tutti i post di un tag if (self::$requestedAction == "Posts") { //esempio: /Tag/%tag_name%/Posts if ($count != 3) { $action = ""; } else { self::$currentID = $parts[1]; } } //leggi tutti i post di un tag //E' UNA COPIA DI QUELLA SOPRA... if ($count == 2) { //esempio: /Tag/%tag_name% self::$requestedAction = "Posts"; self::$currentID = $parts[1]; } //pagina di ricerca dei tag if ($count == 1) { self::$requestedAction == "Search"; } break; case "Post": //modifica, vota, commenta, elimina, subscribe o aggiungi a una collezione il post if (self::$requestedAction == "Edit" || self::$requestedAction == "Vote" || self::$requestedAction == "Comment" || self::$requestedAction == "Delete" || self::$requestedAction == "Subscribe" || self::$requestedAction == "AddToCollection") { //esempio: /Post/%author%/%post_date%/%post_title%/Edit if ($count != 5) { self::$requestedAction = ""; } } //leggi il post if ($count == 4) { //esempio: /Post/%author%/%post_date%/%post_title%/ self::$requestedAction = "Read"; } //crea nuovo post if (self::$requestedAction == "New") { //esempio: /Post/New if ($count != 2) { self::$requestedAction = ""; } break; //non deve fare altro } //pagina di ricerca dei post if ($count == 1) { self::$requestedAction == "Search"; } else { if (self::$requestedAction != "") { //recupera altre informazioni sul post self::$currentID = $parts[0] . "/" . $parts[1] . "/" . $parts[2] . "/" . $parts[3]; } } break; case "Comment": //rimuovi un commento if (self::$requestedAction == "Delete") { //esempio: /Comment/%comment_id%/Remove if ($count != 3) { self::$requestedAction = ""; } else { self::$currentID = $parts[1]; } } //leggi un commento e relativo post if ($count == 2) { //esempio: /Comment/%comment_id% self::$requestedAction = "Read"; self::$currentID = $parts[1]; } else { if ($count != 3) { self::$requestedAction = ""; } } break; case "Vote": //rimuovi, modifica un voto if (self::$requestedAction == "Delete" || self::$requestedAction == "Edit") { //esempio: /Vote/%post_id%/Remove if ($count != 3) { self::$requestedAction = ""; } else { self::$currentID = $parts[1]; } } break; case "User": //modifica, segui, non seguire, commenta, elimina, verifica, leggi tutti i post di un utente if (self::$requestedAction == "Edit" || self::$requestedAction == "Follow" || self::$requestedAction == "Feedback" || self::$requestedAction == "Delete" || self::$requestedAction == "StopFollow" || self::$requestedAction == "Verify" || self::$requestedAction == "Posts" || self::$requestedAction == "AddContact" || self::$requestedAction == "Mails") { //esempio: /User/%user_nickname%/Verify if ($count != 3) { self::$requestedAction = ""; } self::$currentID = $parts[1]; } //registra nuovo utente if (self::$requestedAction == "New") { //esempio: /User/New if ($count != 2) { self::$requestedAction = ""; } } //leggi il profilo if ($count == 2) { //esempio: /User/%user_nickname% self::$requestedAction = "Read"; self::$currentID = $parts[1]; } //pagina di ricerca degli utenti if ($count == 1) { self::$requestedAction == "Search"; } break; case "Feedback": //rimuovi, modifica un voto if (self::$requestedAction == "Delete") { //esempio: /Feedback/%subject_id%/Remove if ($count != 3) { self::$requestedAction = ""; } else { self::$currentID = $parts[1]; } } break; case "Contact": //modifica o elimina un contatto if (self::$requestedAction == "Edit" || self::$requestedAction == "Delete") { //esempio: /Contact/%contact_id%/Edit if ($count != 3) { self::$requestedAction = ""; } else { self::$currentID = $parts[1]; } } //pagina di ricerca dei contatti if ($count == 1) { self::$requestedAction == "Search"; } break; case "Mail": //modifica, rispondi, sposta nel cestino o in un'altra cartella o segnala come spam una mail if (self::$requestedAction == "Edit" || self::$requestedAction == "Delete" || self::$requestedAction == "Move" || self::$requestedAction == "Spam" || self::$requestedAction == "Answer") { //esempio: /Mail/%mail_id%/Edit if ($count != 3) { self::$requestedAction = ""; } else { self::$currentID = $parts[1]; } } //crea nuova mail o svuota il cestino if (self::$requestedAction == "New" || self::$requestedAction == "EmptyTrash") { //esempio: /Mail/EmptyTrash if ($count != 2) { self::$requestedAction = ""; } } //leggi la mail if ($count == 2) { //esempio: /Mail/%mail_id% self::$requestedAction = "Read"; self::$currentID = $parts[1]; } //pagina di ricerca delle mail if ($count == 1) { self::$requestedAction == "Search"; } break; case "Directory": //modifica o elimina o leggi le mail di una directory if (self::$requestedAction == "Edit" || self::$requestedAction == "Delete" || self::$requestedAction == "Mails") { //esempio: /Directory/%dir_id%/Edit if ($count != 3) { self::$requestedAction = ""; } else { self::$currentID = $parts[1]; } } //crea nuova dir o leggi inviate o non lette if (self::$requestedAction == "New" || self::$requestedAction == "Sent" || self::$requestedAction == "Unread") { //esempio: /Directory/Sent if ($count != 2) { self::$requestedAction = ""; } } //guarda il contenuto if ($count == 2) { //esempio: /Directory/%dir_id% self::$requestedAction = "Mails"; self::$currentID = $parts[1]; } //pagina di ricerca delle mail nella cartella if ($count == 1) { self::$requestedAction == "Search"; } break; case "Partner": //TODO break; default: self::$requestedAction = ""; } if (self::$requestedAction == "") { self::$requestedObject = "index"; } //echo "<br />" . serialize($return["object"]); //DEBUG return $return; }