Example #1
0
 /**
  * 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 &egrave; 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;
 }