public function dispatch()
 {
     //Check for session path
     if (!isset($_SESSION["playlistActualPath"])) {
         $_SESSION["playlistActualPath"] = $this->basepath;
     }
     //
     $subaction = $_GET["subaction"];
     switch ($subaction) {
         case ViewPlaylistPageAction::SUBACTION_PLAYLIST_DELETE:
             //---------------------------
             $path = base64_decode($_GET["path"]);
             $this->deletePlaylist($path);
             //Refresh
             $items = $this->getFolderPlaylist($_SESSION["playlistActualPath"]);
             $template = new PlaylistFolderTemplate($this->convertRssPathTitle($_SESSION["playlistActualPath"]));
             $template->setItems($items);
             break;
         case ViewPlaylistPageAction::SUBACTION_PLAYLIST_OPEN:
             //----------------------------
             $path = $_SESSION["playlistActualPath"] . "/" . base64_decode($_GET["playlist"]);
             $template = new PlaylistTemplate("..:: xVoD ::..:: Playlist Playlist View ::..");
             try {
                 $playlist = $this->openPlaylist($path);
                 $_SESSION["loadedPlaylist"] = serialize($playlist);
                 $template->setPlaylist($playlist);
                 $template->setTitle($playlist->getName() != null ? $playlist->getName() . ' (' . $playlist->getFilename() . ')' : $playlist->getFilename());
             } catch (Exception $e) {
                 $template->setDescription($e->getMessage());
             }
             break;
         case ViewPlaylistPageAction::SUBACTION_PLAYLIST_FOLDER_OPEN:
             //-----------------------
             $selectedFolder = base64_decode($_GET['folder']);
             //Check for base path or return folder
             if ($_SESSION["playlistActualPath"] == $this->basepath && $selectedFolder == "..") {
                 $path = $this->basepath;
             } else {
                 if ($selectedFolder == "..") {
                     $path = $_SESSION["playlistActualPath"];
                     $path = substr($path, 0, strrpos($path, "/"));
                 } else {
                     $path = $_SESSION["playlistActualPath"];
                     $path = $path . "/" . $selectedFolder;
                 }
             }
             //Load folder playlist file list
             $_SESSION["playlistActualPath"] = $path;
             $items = $this->getFolderPlaylist($path);
             $template = new PlaylistFolderTemplate($this->convertRssPathTitle($path));
             $template->setItems($items);
             $template->setBaseFolder($path);
             break;
         case ViewPlaylistPageAction::SUBACTION_PLAYLIST_LINK:
             //-------------------------------
             $playlist = unserialize($_SESSION["loadedPlaylist"]);
             $key = base64_decode($_GET["link"]);
             $playlistLink = $playlist->getPlaylistLink($key);
             $template = new PlaylistLinkTemplate($playlistLink->getTitle() != null ? $playlistLink->getTitle() : $playlistLink->getFilename());
             $template->setPlaylistLink($playlistLink);
             break;
         default:
             //-----------------------------------------------------------------------------
             $items = $this->getFolderPlaylist($_SESSION["playlistActualPath"]);
             $template = new PlaylistFolderTemplate($this->convertRssPathTitle($_SESSION["playlistActualPath"]));
             $template->setItems($items);
             $template->setBaseFolder($_SESSION["playlistActualPath"]);
             break;
     }
     $template->showTemplate();
 }
 public function dispatch()
 {
     //Check for session path
     if (!isset($_SESSION["webPlaylistActualPath"])) {
         $_SESSION["webPlaylistActualPath"] = $this->basepath;
     }
     //
     $subaction = $_GET["subaction"];
     switch ($subaction) {
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_DELETE:
             //------------------------------------------------
             if (isset($_GET["path"])) {
                 $path = base64_decode($_GET["path"]);
                 $message = $this->deletePlaylist($_SESSION["webPlaylistActualPath"] . "/" . $path);
             }
             $template = $this->createDefaultTemplateFolderExplorer();
             $template->setMessage($message);
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_OPEN:
             //-------------------------------------------------
             $path = $_SESSION["webPlaylistActualPath"] . "/" . base64_decode($_GET["playlist"]);
             $template = new PlaylistWebTemplate("..:: xVoD ::..:: Playlist Playlist View ::..");
             try {
                 $playlist = $this->openPlaylist($path);
                 $_SESSION["webLoadedPlaylist"] = serialize($playlist);
                 $template->setPlaylist($playlist);
                 $template->setTitle($playlist->getName() != null ? $playlist->getName() . ' (' . $playlist->getFilename() . ')' : $playlist->getFilename());
             } catch (Exception $e) {
                 $template->setDescription($e->getMessage());
             }
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_FOLDER_OPEN:
             //--------------------------------------------
             $selectedFolder = base64_decode($_GET['folder']);
             //Check for base path or return folder
             if ($_SESSION["webPlaylistActualPath"] == $this->basepath && $selectedFolder == "..") {
                 $path = $this->basepath;
             } else {
                 if ($selectedFolder == "..") {
                     $path = $_SESSION["webPlaylistActualPath"];
                     $path = substr($path, 0, strrpos($path, "/"));
                 } else {
                     $path = $_SESSION["webPlaylistActualPath"];
                     $path = $path . "/" . $selectedFolder;
                 }
             }
             //Load folder playlist file list
             $_SESSION["webPlaylistActualPath"] = $path;
             $items = $this->getFolderPlaylist($path);
             $template = new PlaylistExploreWebTemplate($this->convertRssPathTitle($path));
             $template->setItems($items);
             $template->setBaseFolder($path);
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_LINK:
             //-----------------------------------------------------
             $playlist = unserialize($_SESSION["webLoadedPlaylist"]);
             $key = base64_decode($_GET["link"]);
             $playlistLink = $playlist->getPlaylistLink($key);
             $template = new PlaylistLinkWebTemplate($playlistLink->getTitle());
             $template->setPlaylistLink($playlistLink);
             $template->setPlaylist($playlist);
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_LINK_ADD:
             //-------------------------------------------------
             $template = new PlaylistLinkAddWebTemplate();
             $template->setPlaylist(unserialize($_SESSION["webLoadedPlaylist"]));
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_LINK_SAVE:
             //------------------------------------------------
             $playlist = unserialize($_SESSION["webLoadedPlaylist"]);
             //Create playlist link and recover data
             $playlistLink = new PlaylistLink();
             $playlistLink->setKey(uniqid());
             $playlistLink->setTitle(utf8_encode(html_entity_decode($_GET["title"])));
             $playlistLink->setDescription(utf8_encode(html_entity_decode($_GET["description"])));
             $playlistLink->setLanguage(utf8_encode(html_entity_decode($_GET["language"])));
             $playlistLink->setThumbnail(utf8_encode(html_entity_decode($_GET["thumbnail"])));
             $playlistLink->setType(utf8_encode(html_entity_decode($_GET["type"])));
             $playlistLink->setFormat(utf8_encode(html_entity_decode($_GET["format"])));
             //Set link or ids
             if ($_GET["type"] == "HTTP") {
                 $playlistLink->setLink($_GET["link"]);
                 $playlist->addPlaylistLink($playlistLink);
             } else {
                 if ($_GET["type"] == "MV" || $_GET["type"] == "MU") {
                     $ids = split(" ", $_GET["link"]);
                     $order = 0;
                     foreach ($ids as $id) {
                         $playlistLink->addId($order, $id);
                         ++$order;
                     }
                 }
             }
             //Save playlist
             $playlist->addPlaylistLink($playlistLink);
             $this->savePlaylist($playlist->getPath() . "/" . $playlist->getFilename(), $playlist);
             $_SESSION["webLoadedPlaylist"] = serialize($playlist);
             //
             $template = new PlaylistLinkAddWebTemplate();
             $template->setPlaylist($playlist);
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_LINK_DELETE:
             //----------------------------------------------
             $playlist = unserialize($_SESSION["webLoadedPlaylist"]);
             $playlist->deletePlaylistLink(base64_decode($_GET["link"]));
             $this->savePlaylist($playlist->getPath() . "/" . $playlist->getFilename(), $playlist);
             $_SESSION["webLoadedPlaylist"] = serialize($playlist);
             $template = new PlaylistWebTemplate("..:: xVoD ::..:: Playlist Playlist View ::..");
             $template->setTitle($playlist->getName() != null ? $playlist->getName() . ' (' . $playlist->getFilename() . ')' : $playlist->getFilename());
             $template->setPlaylist($playlist);
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_ADD:
             //------------------------------------------------------
             $template = new PlaylistAddWebTemplate();
             $template->setBasepath($_SESSION["webPlaylistActualPath"]);
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_ADD_SAVE:
             //-------------------------------------------------
             $playlist = new Playlist();
             $playlist->setName($_GET["name"]);
             $playlist->setDescription($_GET["description"]);
             $playlist->setPath($_GET["path"]);
             $playlist->setFilename($_GET["filename"]);
             $this->savePlaylist($playlist->getPath() . "/" . $playlist->getFilename() . ".xpls", $playlist);
             $template = $this->createDefaultTemplateFolderExplorer();
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_SAVE:
             //------------------------------------------------------
             $playlist = unserialize($_SESSION["webLoadedPlaylist"]);
             $key = base64_decode($_GET["link"]);
             $playlistLink = $playlist->getPlaylistLink($key);
             $template = new PlaylistLinkTemplate($playlistLink->getTitle() != null ? $playlistLink->getTitle() : $playlistLink->getFilename());
             $template->setPlaylistLink($playlistLink);
             break;
         case ViewPlaylistWebPageAction::SUBACTION_FOLDER_DELETE:
             //-------------------------------------------------------
             if (isset($_GET["folder"])) {
                 $folderName = base64_decode($_GET["folder"]);
                 $this->deleteFolder($_SESSION["webPlaylistActualPath"] . "/" . $folderName);
             }
             $template = $this->createDefaultTemplateFolderExplorer();
             break;
         case ViewPlaylistWebPageAction::SUBACTION_FOLDER_ADD:
             //-----------------------------------------------------------
             if (isset($_GET["folder"])) {
                 $folderName = $_GET["folder"];
                 $message = $this->createFolder($_SESSION["webPlaylistActualPath"] . "/" . $folderName);
             }
             $template = $this->createDefaultTemplateFolderExplorer();
             $template->setMessage($message);
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_DOWNLOAD:
             //----------------------------------------------------
             if (isset($_GET["download"])) {
                 $folderName = base64_decode($_GET["download"]);
                 $this->downloadFile($_SESSION["webPlaylistActualPath"], $folderName);
             }
             break;
         case ViewPlaylistWebPageAction::SUBACTION_FOLDER_DOWNLOAD:
             if (isset($_GET["download"])) {
                 $folderName = base64_decode($_GET["download"]);
                 $this->downloadFolder($_SESSION["webPlaylistActualPath"], $folderName);
             }
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_UPLOAD:
             //-------------------------------------------------------
             $template = new PlaylistUploadWebTemplate();
             $template->setBasePath(strstr($_SESSION["webPlaylistActualPath"], "xVoD"));
             break;
         case ViewPlaylistWebPageAction::SUBACTION_PLAYLIST_UPLOAD_SAVE:
             //--------------------------------------------------
             $message = array();
             //Save http file
             if (isset($_POST["uploadFileWeb"]) && $_POST["uploadFileWeb"] != "http://") {
                 try {
                     $content = @file_get_contents($_POST["uploadFileWeb"]);
                     if (strpos($content, "</playlist>")) {
                         $file = $_SESSION["webPlaylistActualPath"] . "/" . $_POST["uploadFileWebName"] . ".xpls";
                         $fp = fopen($file, 'w');
                         fwrite($fp, utf8_encode($content));
                         fclose($fp);
                         array_push($message, "File '" . $_POST["uploadFileWebName"] . ".xpls has been saved correctly.");
                     } else {
                         array_push($message, "File '" . $_POST["uploadFileWebName"] . ".xpls has been saved correctly.");
                     }
                 } catch (Exception $e) {
                     array_push($message, "An error has occurred: " . $e->getMessage() . ".");
                 }
             }
             //Save upload file
             if (isset($_FILES['uploadFile'])) {
                 $fileName = $_FILES['uploadFile']['name'];
                 $fileExtension = $_FILES['uploadFile']['type'];
                 $fileSize = $_FILES['uploadFile']['size'];
                 if (strpos($fileName, "xpls")) {
                     if (move_uploaded_file($_FILES['uploadFile']['tmp_name'], $_SESSION["webPlaylistActualPath"] . "/" . $fileName)) {
                         array_push($message, "File '" . $fileName . " with size " . $fileSize . " has been saved correctly.");
                     } else {
                         array_push($message, "An error has occurred saving file!!");
                     }
                 } else {
                     array_push($message, "Only files with XPLS extension be accepted.");
                 }
             }
             //Return to explorer or show upload view another time
             if (isset($_POST["returnExplorer"]) && $_POST["returnExplorer"] == "ON") {
                 $template = $this->createDefaultTemplateFolderExplorer();
                 if ($message && count($message) > 0) {
                     $temp = "";
                     foreach ($message as $value) {
                         $temp .= "<br/>" . $value;
                     }
                     $template->setMessage($temp);
                 }
             } else {
                 $template = new PlaylistUploadWebTemplate();
                 $template->setMessage($message);
                 $template->setBasePath($_SESSION["webPlaylistActualPath"]);
             }
             break;
         default:
             //---------------------------------------------------------------------------------------------------------
             $template = $this->createDefaultTemplateFolderExplorer();
             break;
     }
     //
     if ($template) {
         $template->show();
     }
 }