public function gen_afterPageBuild(X_Page_ItemList_PItem $list, Zend_Controller_Action $controller) { if (!$this->isDefaultRenderer()) { return; } X_Debug::i("Plugin triggered"); $request = $controller->getRequest(); $responseType = 'u:BrowseResponse'; $num = count($list->getItems()); if ($this->request['browseflag'] == 'BrowseMetadata') { $parentID = $this->_getParent($controller->getRequest()); $item = new X_Page_Item_PItem('fake-item', "Container"); $item->setLink(array_merge(array('controller' => $controller->getRequest()->getControllerName(), 'action' => $controller->getRequest()->getActionName()), $controller->getRequest()->getParams())); $item->setDescription("Fake description"); $didl = X_Upnp::createMetaDIDL($item, $parentID, $num, $controller->getRequest()->getControllerName(), $controller->getRequest()->getActionName(), $controller->getRequest()->getParam('p', 'null')); } elseif ($this->request['browseflag'] == 'BrowseDirectChildren') { $parentID = $this->request['objectid']; $didl = X_Upnp::createDIDL($list->getItems(), $parentID, $num, $controller->getRequest()->getControllerName(), $controller->getRequest()->getActionName(), $controller->getRequest()->getParam('p', 'null')); } $xmlDIDL = $didl->saveXML(); X_Debug::i("DIDL response: {$xmlDIDL}"); // Build SOAP-XML reply from DIDL-XML and send it to upnp device $domSOAP = X_Upnp::createSOAPEnvelope($xmlDIDL, $num, $num, $responseType, $parentID); $soapXML = $domSOAP->saveXML(); // turn off viewRenderer and Layout, add Content-Type and set response body $this->_render($soapXML, $controller); }
/** * Redirect to controls if vlc is running * @param Zend_Controller_Action $controller */ public function gen_beforePageBuild(Zend_Controller_Action $controller) { /* $vlc = X_Vlc::getLastInstance(); if ( $vlc === null ) { X_Debug::i("No vlc instance"); return; } */ $controllerName = $controller->getRequest()->getControllerName(); $actionName = $controller->getRequest()->getActionName(); $query = "{$controllerName}/{$actionName}"; X_Debug::i("Plugin triggered for: {$query}"); //$isRunning = $vlc->isRunning(); $isRunning = X_Streamer::i()->isStreaming(); if (array_search($query, $this->redirectCond_To) !== false && $isRunning) { $controller->getRequest()->setControllerName('controls')->setActionName('control')->setDispatched(false); X_Debug::i("Redirect to controls/control"); } elseif (array_search($query, $this->redirectCond_Away) !== false && !$isRunning) { X_Debug::i("Redirect to index/collections"); $controller->getRequest()->setControllerName('index')->setActionName('collections')->setDispatched(false); } else { X_Debug::i("No redirection: vlc is running? " . ($isRunning ? 'Yes' : 'No')); } }
function removeAction() { $id = $this->getRequest()->getParam('id', false); $csrf = $this->getRequest()->getParam('csrf', false); if (!$id) { throw new Exception("Thread id missing"); } $hash = new Zend_Form_Element_Hash('csrf', array('salt' => __CLASS__)); if (!$hash->isValid($csrf)) { throw new Exception("Invalid token"); } $hash->initCsrfToken(); $thread = X_Threads_Manager::instance()->getMonitor()->getThread($id); // special case for streamer if ($thread->getId() == X_Streamer::THREAD_ID) { X_Debug::i('Special stop'); X_Streamer::i()->stop(); } else { X_Threads_Manager::instance()->halt($thread); } // wait 5 seconds sleep(5); X_Threads_Manager::instance()->getMessenger()->clearQueue($thread); X_Threads_Manager::instance()->getMonitor()->removeThread($thread, true); $this->_helper->flashMessenger(array('type' => 'success', 'text' => X_Env::_('threads_done'))); $this->_helper->redirector('index', 'tmanager'); }
/** * Add the go to stream link (only if engine is rtmpdump) * * @param X_Streamer_Engine $engine selected streamer engine * @param string $uri * @param string $provider id of the plugin that should handle request * @param string $location to stream * @param Zend_Controller_Action $controller the controller who handle the request * @return X_Page_ItemList_PItem */ public function getStreamItems(X_Streamer_Engine $engine, $uri, $provider, $location, Zend_Controller_Action $controller) { // ignore the call if streamer is not rtmpdump if (!$engine instanceof X_Streamer_Engine_RtmpDump) { return; } X_Debug::i('Plugin triggered'); $return = new X_Page_ItemList_PItem(); $outputLink = "http://{%SERVER_NAME%}:{$this->helpers()->rtmpdump()->getStreamPort()}/"; $outputLink = str_replace(array('{%SERVER_IP%}', '{%SERVER_NAME%}'), array($_SERVER['SERVER_ADDR'], strstr($_SERVER['HTTP_HOST'], ':') ? strstr($_SERVER['HTTP_HOST'], ':') : $_SERVER['HTTP_HOST']), $outputLink); $item = new X_Page_Item_PItem($this->getId(), X_Env::_('p_outputs_gotostream')); $item->setType(X_Page_Item_PItem::TYPE_PLAYABLE)->setIcon('/images/icons/play.png')->setLink($outputLink); $return->append($item); /* $item = new X_Page_Item_PItem('controls-stop', X_Env::_('p_controls_stop')); $item->setType(X_Page_Item_PItem::TYPE_ELEMENT) ->setIcon('/images/icons/stop.png') ->setLink(array( 'controller' => 'controls', 'action' => 'execute', 'a' => 'stop', 'pid' => $this->getId(), ), 'default', false); $return->append($item); */ return $return; }
/** * Show an error if ffmpeg isn't enabled */ function getIndexMessages(Zend_Controller_Action $controller) { X_Debug::i('Plugin triggered'); $m = new X_Page_Item_Message($this->getId(), X_Env::_('p_fsthumbs_dashboardffmpegerror')); $m->setType(X_Page_Item_Message::TYPE_ERROR); return new X_Page_ItemList_Message(array($m)); }
function gen_beforePageBuild(Zend_Controller_Action $controller) { $moduleName = $controller->getRequest()->getModuleName(); $controllerName = $controller->getRequest()->getControllerName(); $actionName = $controller->getRequest()->getActionName(); $providerName = $controller->getRequest()->getParam('p', false); // check permission class if ($controllerName == 'browse' && $actionName == 'share') { // check provider too only if controller == browse $resourceKey = "{$moduleName}/{$controllerName}/{$actionName}" . ($providerName !== false ? "/{$providerName}" : ''); } else { $resourceKey = "{$moduleName}/{$controllerName}/{$actionName}"; } // TODO: // replace this with an ACL call: // if ( !$acl->canUse($resource, $currentStatus) ) if (array_search("{$moduleName}/{$controllerName}/{$actionName}", $this->_whiteList) === false) { if (!$this->isLoggedIn()) { X_Debug::i("Login required and user not logged in"); if ($this->helpers()->devices()->isVlc()) { X_Debug::i("Look like it's this vlc: {$_SERVER['REMOTE_ADDR']}"); if (gethostbyname($_SERVER['REMOTE_ADDR']) == '::1' || gethostbyname($_SERVER['REMOTE_ADDR']) == '127.0.0.1') { X_Debug::i("Skipping auth, it should be the local vlc"); return; } } elseif ($this->helpers()->devices()->isWiimc() && $this->helpers()->devices()->isWiimcBeforeVersion('1.1.6')) { // wiimc <= 1.1.5 send 2 different user-agent string // for browsing mode and video mode // so i have care about this // TODO remove this when 1.1.5 an older will be deprecated // anyway i take care only of vanilla wiimc based on ios58. custom version // not supported $useragent = "{$_SERVER['HTTP_USER_AGENT']} (IOS58)"; // try to add " (ISO58)" to the useragent and check again if (Application_Model_AuthSessionsMapper::i()->fetchByIpUserAgent($_SERVER['REMOTE_ADDR'], $useragent)) { X_Debug::i("Workaround for WIIMC user-agent-incongruence"); return; } } elseif ($this->helpers()->acl()->canUseAnonymously($resourceKey)) { X_Debug::i("Resource can be used anonymously"); return; } X_Debug::w("Auth required, redirecting to login"); $controller->getRequest()->setControllerName("auth")->setActionName('index')->setDispatched(false); } elseif ($this->config('acl.enabled', false)) { X_Debug::i("ACL enabled, checking resource {{$resourceKey}}"); $username = $this->getCurrentUser(true); if (!$this->helpers()->acl()->canUse($username, $resourceKey)) { X_Debug::w("Forbidden, can't access resource"); $controller->getRequest()->setControllerName("auth")->setActionName('forbidden')->setDispatched(false); } else { X_Debug::i("Access granted"); } } else { X_Debug::i("ACL disabled"); } } else { X_Debug::i("Whitelisted resource"); } }
public function saveAction() { /* @var $request Zend_Controller_Request_Http */ $request = $this->getRequest(); $configs = Application_Model_ConfigsMapper::i()->fetchAll(); if ($request->isPost()) { $form = $this->_initConfigsForm($configs, $request->getPost()); if (!$form->isErrors()) { $post = $request->getPost(); $isError = false; foreach ($configs as $config) { /* @var $config Application_Model_Config */ if ($config->getSection() == 'plugins') { continue; } // plugins config will not be handled here $postStoreName = $config->getSection() . "_" . str_replace('.', '_', $config->getKey()); // ISSUE-15: https://code.google.com/p/vlc-shares/issues/detail?id=15 // This is a workaround it: remove slashes if magic_quotes is enabled // FIXME remove this workaround in vlc-shares 0.6+ $postValue = $request->getPost($postStoreName); if (get_magic_quotes_gpc()) { //$postValue = str_replace(array('\\\\' , '=\\"'), array('\\', '="'), $postValue ); $postValue = stripslashes($postValue); } if (array_key_exists($postStoreName, $post) && $config->getValue() != $postValue) { // new value try { $config->setValue($postValue); Application_Model_ConfigsMapper::i()->save($config); if (stripos($config->getKey(), 'password') != false) { X_Debug::i("New config: {$config->getSection()}.{$config->getKey()} = ***********"); } else { X_Debug::i("New config: {$config->getSection()}.{$config->getKey()} = {$config->getValue()}"); } } catch (Exception $e) { $isError = true; $this->_helper->flashMessenger(X_Env::_('configs_save_err_db') . ": {$e->getMessage()}"); } } } if (!$isError) { $this->_helper->flashMessenger(X_Env::_('configs_save_done')); } if ($form->getValue('isapply') == '1') { $this->_helper->redirector('index', 'configs'); } else { $this->_helper->redirector('index', 'manage'); } } else { $this->_forward('index'); } } else { $this->_helper->flashMessenger(X_Env::_('configs_save_nodata')); $this->_helper->redirector('index', 'configs'); } }
public function preDispatch() { X_Debug::i("Required action: [" . $this->getRequest()->getControllerName() . '/' . $this->getRequest()->getActionName() . ']'); parent::preDispatch(); // call plugins trigger // TODO check if plugin broker should be called before parent::preDispatch X_VlcShares_Plugins::broker()->gen_beforePageBuild($this); //$this->_helper->url->url() }
public function gen_afterPageBuild(X_Page_ItemList_PItem $items, Zend_Controller_Action $controller) { if (count($items->getItems()) == 0) { X_Debug::i("Plugin triggered"); $item = new X_Page_Item_PItem('emptylists', X_Env::_('p_emptylists_moveaway')); $item->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($controller->getHelper('url')->url())); $items->append($item); } }
/** * Redirect to controls if vlc is running * @param Zend_Controller_Action $controller */ public function gen_beforePageBuild(Zend_Controller_Action $controller) { X_Debug::i("Plugin triggered: redirect to installer"); $controllerName = $controller->getRequest()->getControllerName(); if ($controllerName != 'installer' && $controllerName != 'error') { //die($controllerName); $controller->getRequest()->setControllerName('installer')->setActionName('index')->setDispatched(false); } }
public function getPage($uri) { // http hold all info about the last request and last response object as well as all options if ($this->last_request_uri != $uri) { $this->last_request_uri = $uri; X_Debug::i("Fetching: {$uri}"); $this->getHttpClient()->setUri($uri)->request(); //X_Debug::i("Request: \n".$this->getHttpClient()->getLastRequest()); } return $this->getHttpClient()->getLastResponse()->getBody(); }
public function gen_afterPageBuild(X_Page_ItemList_PItem $items, Zend_Controller_Action $controller) { if ($this->helpers()->devices()->isWiimc() && $this->helpers()->devices()->isWiimcBeforeVersion('1.0.9')) { if (count($items->getItems()) === 1) { X_Debug::i("Plugin triggered"); $item = new X_Page_Item_PItem('workaroundwiimcplaylistitemsbug', '-- Workaround for bug in Wiimc <= 1.0.9 --'); $item->setType(X_Page_Item_PItem::TYPE_ELEMENT)->setLink(X_Env::completeUrl($controller->getHelper('url')->url())); $items->append($item); } } }
public function indexAction() { // uses the device helper for wiimc recognition // maybe i will add a trigger here if (X_VlcShares_Plugins::helpers()->devices()->isWiimc()) { // wiimc 1.0.9 e inferiori nn accetta redirect X_Debug::i("Forwarding..."); $this->_forward('collections', 'index'); } else { $this->_helper->redirector('index', 'manage'); } }
/** * Get things found by the $parser * @see X_PageParser_Parser * @return mixed */ public function getParsed(X_PageParser_Parser $parser = null) { if (!is_null($parser)) { X_Debug::i("Temp pattern"); $loaded = $this->getLoader()->getPage($this->uri); return $parser->parse($loaded); } elseif ($this->parsed === null) { $loaded = $this->getLoader()->getPage($this->uri); $this->parsed = $this->getParser()->parse($loaded); } return $this->parsed; }
protected function processProperties($properties = array()) { if (!is_array($properties)) { X_Debug::e("Properties is not an array"); return; } foreach ($properties as $key => $value) { $properties_ignored = true; // prot-type is valid if (isset(self::$validProperties[$key])) { // check value $validValues = self::$validProperties[$key]; @(list($typeValidValues, $validValues) = @explode(':', $validValues, 2)); // typeValidValues = boolean / regex / set / ... switch ($typeValidValues) { case 'boolean': $checkValues = array('true', 'false', '0', '1'); if (array_search($value, $checkValues)) { // cast to type $value = (bool) $value; $properties_ignored = false; } else { $properties_ignored = "invalid property value {{$value}}, not boolean"; } break; case 'set': $checkValues = explode('|', $validValues); if (array_search($value, $checkValues)) { $properties_ignored = false; } else { $properties_ignored = "invalid property value {{$value}}, not in valid set"; } break; case 'regex': if (preg_match($validValues, $value)) { $properties_ignored = false; } else { $properties_ignored = "invalid property value {{$value}}, format not valid"; } break; } } else { $properties_ignored = "invalid property"; } if ($properties_ignored !== false) { X_Debug::w("Property {{$key}} of acl-resource {{$this->getKey()}} ignored: " . $properties_ignored !== true ? $properties_ignored : 'unknown reason'); } else { X_Debug::i("Valid property for acl-resource {{$this->getKey()}}: {$key} => {{$value}}"); $this->properties[$key] = $value; } } }
public function gen_afterPageBuild(X_Page_ItemList_PItem $items, Zend_Controller_Action $controller) { /* if ( !$this->_forceRendering ) { // even if forced.enabled, don't build the page if the device is wiimc if ( $this->helpers()->devices()->isWiimc() || ( !((bool) $this->config('forced.enabled', false)) && !$this->helpers()->devices()->isAndroid() )) return; } */ if (!$this->isDefaultRenderer()) { return; } X_Debug::i("Plugin triggered"); $request = $controller->getRequest(); $urlHelper = $controller->getHelper('url'); /* @var $view Zend_Controller_Action_Helper_ViewRenderer */ $view = $controller->getHelper('viewRenderer'); /* @var $layout Zend_Layout_Controller_Action_Helper_Layout */ $layout = $controller->getHelper('layout'); $view->setViewSuffix('mobile.phtml'); $layout->getLayoutInstance()->setLayout('mobile', true); if ($request instanceof Zend_Controller_Request_Http) { if ($request->isXmlHttpRequest()) { $layout->getLayoutInstance()->disableLayout(); } } try { $providerObj = X_VlcShares_Plugins::broker()->getPlugins($request->getParam('p', '')); $view->view->providerName = strtolower($providerObj->getId()); if ($providerObj instanceof X_VlcShares_Plugins_ResolverDisplayableInterface) { // location in request obj are X_Env::encoded $view->view->location = $providerObj->resolveLocation(X_Env::decode($request->getParam('l', ''))); } if ($providerObj instanceof X_VlcShares_Plugins_ResolverInterface) { // location in request obj are X_Env::encoded $view->view->locationRaw = $providerObj->resolveLocation(X_Env::decode($request->getParam('l', ''))); $view->view->parentLocation = $providerObj->getParentLocation(X_Env::decode($request->getParam('l', ''))); } } catch (Exception $e) { //die('No provider'); X_Debug::i('No provider O_o'); } // set some vars for view $view->view->provider = $request->getParam('p', ''); $view->view->items = $items; $view->view->actionName = $request->getActionName(); $view->view->controllerName = $request->getControllerName(); $view->view->coverflowEnabled = $this->config('coverflow.enabled', true); }
/** * (non-PHPdoc) * @see X_PageParser_Parser::parse() */ public function parse($string) { $matches = array(); $links = array(); preg_match_all(self::PATTERN, $string, $matches, PREG_SET_ORDER); X_Debug::i(sprintf("Links found: %s", count($matches))); // process links foreach ($matches as $match) { $link = array(); $link['label'] = $match['LABEL']; $link['hoster'] = X_VlcShares_Plugins_Helper_Hoster_Own3dLive::ID; $link['id'] = $match['ID']; $links[] = $link; } return $links; }
/** * Sorts items: * if provider is FileSystem uses a folder/file sort * else alphabetical one * @param array &$items array of X_Page_Item_PItem * @param string $provider id of the plugin the handle the request * @param Zend_Controller_Action $controller */ public function orderShareItems(&$items, $provider, Zend_Controller_Action $controller) { X_Debug::i('Plugin triggered'); try { $plugin = X_VlcShares_Plugins::broker()->getPlugins($provider); // TODO check for problem if i always use sortFolderBased if (true || is_a($plugin, 'X_VlcShares_Plugins_FileSystem')) { X_Debug::i('Sort sortFolderBased'); usort($items, array(__CLASS__, 'sortFolderBased')); } else { X_Debug::i('Sort generic'); usort($items, array(__CLASS__, 'sortAlphabetically')); } } catch (Exception $e) { X_Debug::w("Problem while sorting: {$e->getMessage()}"); } }
/** * get a playable resource url * from an $url (or a resource id if $isId = true) * @param string $url the hoster page or resource ID * @param boolean $isId * @return string a playable url */ function getPlayable($url, $isId = true) { if (!$isId) { $url = $this->getResourceId($url); } // $url is an id now for sure /* @var $youtubeHelper X_VlcShares_Plugins_Helper_Youtube */ $youtubeHelper = X_VlcShares_Plugins::helpers()->helper('youtube'); /* @var $youtubePlugin X_VlcShares_Plugins_Youtube */ $youtubePlugin = X_VlcShares_Plugins::broker()->getPlugins('youtube'); X_Debug::i("Youtube ID: {$url}"); // THIS CODE HAVE TO BE MOVED IN YOUTUBE HELPER // FIXME $formats = $youtubeHelper->getFormatsNOAPI($url); $returned = null; $qualityPriority = explode('|', $youtubePlugin->config('quality.priority', '5|34|18|35')); foreach ($qualityPriority as $quality) { if (array_key_exists($quality, $formats)) { $returned = $formats[$quality]; X_Debug::i('Video format selected: ' . $quality); break; } } if ($returned === null) { // for valid video id but video with restrictions // alternatives formats can't be fetched by youtube page. // i have to fallback to standard api url $apiVideo = $youtubeHelper->getVideo($url); foreach ($apiVideo->mediaGroup->content as $content) { if ($content->type === "video/3gpp") { $returned = $content->url; X_Debug::w('Content restricted video, fallback to api url:' . $returned); break; } } if ($returned === null) { $returned = false; } } if ($returned !== false && $returned !== null) { // valid return return $returned; } throw new Exception("Invalid video", self::E_ID_INVALID); }
/** * Retrieve statistic from plugins * @param Zend_Controller_Action $this * @return X_Page_ItemList_Message */ public function getIndexMessages(Zend_Controller_Action $controller) { $version = X_VlcShares::VERSION; X_Debug::i('Plugin triggered'); $showError = false; $type = 'warning'; if (strpos($version, 'alpha') !== false || strpos($version, 'beta') !== false || strpos($version, 'dev') !== false || strpos($version, 'unstable') !== false) { $showError = true; } elseif (strpos($version, 'rc') !== false || strpos($version, 'release_candidate') !== false) { $showError = true; $type = 'info'; } if ($showError) { $m = new X_Page_Item_Message($this->getId(), X_Env::_('p_widgetdevalert_warningmessage')); $m->setType($type); return new X_Page_ItemList_Message(array($m)); } }
public function gen_beforePageBuild(Zend_Controller_Action $controller) { X_Debug::i("Tuning options"); try { /* @var $cacheHelper X_VlcShares_Plugins_Helper_Cache */ $cacheHelper = $this->helpers()->helper('cache'); $lastdevices = false; try { $lastdevices = $cacheHelper->retrieveItem('devices::lastdevices'); } catch (Exception $e) { /* key missing */ } if ($lastdevices) { $lastdevices = @unserialize($lastdevices); } if (!is_array($lastdevices)) { $lastdevices = array(); } foreach ($lastdevices as $key => $time) { if ($time < time()) { unset($lastdevices[$key]); } } if (!array_key_exists($_SERVER['HTTP_USER_AGENT'], $lastdevices)) { $lastdevices[$_SERVER['HTTP_USER_AGENT']] = time() + 15 * 60; } // clear the cache entry every 60 min if untouched $cacheHelper->storeItem('devices::lastdevices', serialize($lastdevices), 60); } catch (Exception $e) { X_Debug::i("User agent cannot be added to the cache"); } $guiClass = $this->helpers()->devices()->getDefaultDeviceGuiClass(); X_Debug::i("Device configs: {{label: {$this->helpers()->devices()->getDeviceLabel()}, guiClass: {$guiClass}}"); foreach (X_VlcShares_Plugins::broker()->getPlugins() as $pluginKey => $pluginObj) { if ($pluginObj instanceof X_VlcShares_Plugins_RendererInterface) { if ($guiClass == get_class($pluginObj)) { /* @var $pluginObj X_VlcShares_Plugins_RendererInterface */ $pluginObj->setDefaultRenderer(true); } } } // disable this trigger, prevent double initialization $this->setPriority('gen_beforePageBuild', -1); }
private function parseVideos($string) { $matches = array(); $links = array(); preg_match_all(self::PATTERN_VIDEOS, $string, $matches, PREG_SET_ORDER); X_Debug::i(sprintf("Links found: %s", count($matches))); // process links foreach ($matches as $match) { $label = $match['label']; $id = $match['id']; $thumbnail = $match['thumbnail']; $link = array(); $link['label'] = $label; $link['thumbnail'] = $thumbnail; $link['id'] = $id; $links[] = $link; } return $links; }
public function gen_afterPageBuild(X_Page_ItemList_PItem $items, Zend_Controller_Action $controller) { if (!$this->isDefaultRenderer()) { // to be used, this return; } X_Debug::i("Plugin triggered"); $request = $controller->getRequest(); $urlHelper = $controller->getHelper('url'); if ($request instanceof Zend_Controller_Request_Http) { if ($request->isXmlHttpRequest() || $request->getParam('webkit:json', false)) { $this->dispatchRequest($request, $items, $controller); } else { $this->showMainPage($request, $controller); } } else { X_Debug::f("Request isn't HTTP"); } }
/** * Return true if $item is an hidden file or system file (check configs) * @param X_Page_Item_PItem $item * @param string $provider * @param Zend_Controller_Action $controller * @return boolean|null true or null if file is ok, false otherwise (will be filtered out) */ public function filterShareItems(X_Page_Item_PItem $item, $provider, Zend_Controller_Action $controller) { try { $plugin = X_VlcShares_Plugins::broker()->getPlugins($provider); if (is_a($plugin, 'X_VlcShares_Plugins_FileSystem') && $plugin instanceof X_VlcShares_Plugins_ResolverInterface) { // i use instanceof ResolverInterface // so i have code suggestions // X_VlcShares_Plugins_FileSystem register a custom param in item // for location lookup $location = $plugin->resolveLocation($item->getCustom('X_VlcShares_Plugins_FileSystem:location')); // i must check for $location !== false as a fallback for no custom param case if ($location !== false && file_exists($location)) { // i have a location to check for hidden files: if ($this->_checkEntry($location) === false) { X_Debug::i("Plugin triggered, item filtered: {$location}"); return false; } } //X_Debug::i('Plugin triggered'); } } catch (Exception $e) { X_Debug::w("Problem while filtering: {$e->getMessage()}"); } }
function scategoryAction() { /* @var $request Zend_Controller_Request_Http */ $request = $this->getRequest(); if (!$request->isPost()) { $this->_helper->flashMessenger(array('text' => X_Env::_('p_youtube_save_invalidrequest'), 'type' => 'error')); $this->_helper->redirector('index', 'youtube'); } try { $form = new Application_Form_YoutubeCategory(); } catch (Exception $e) { $this->_helper->flashMessenger(array('text' => X_Env::_('p_youtube_save_formerror') . ": {$e->getMessage()}", 'type' => 'error')); $this->_helper->redirector('index', 'youtube'); } $post = $request->getPost(); X_Debug::i("Post = '" . var_export($post, true) . "'"); $valid = $form->isValid($post); $thumbselectValue = $form->getValue('thumbselect'); X_Debug::i("Valid = '{$valid}'"); X_Debug::i("Thumbselect = '{$thumbselectValue}'"); //X_Debug::i("Error messages = '" . var_export($form->getErrorMessages(), true) . "'"); //X_Debug::i("Errors = '" . var_export($form->getErrors(), true) . "'"); if ($thumbselectValue == 'upload') { // if thumbselectvalue == '', i have to read the file content // as required $form->thumbnail->setRequired(true); // i need to check it again if thumbnail upload is required $valid = $form->isValid($post); X_Debug::i("Valid = '{$valid}'"); } if ($valid != true) { $this->_helper->flashMessenger(array('text' => X_Env::_('p_youtube_save_invaliddata'), 'type' => 'error')); //$this->_helper->flashMessenger(array('text' => '<pre>'.var_export($form, true).'</pre>', 'type' => 'error')); foreach ($form->getErrorMessages() as $error) { $this->_helper->flashMessenger(array('text' => $error, 'type' => 'error')); } $this->_helper->redirector('index', 'youtube'); } if ($thumbselectValue == 'upload' && $form->thumbnail->isUploaded()) { try { $form->thumbnail->receive(); } catch (Exception $e) { $this->_helper->flashMessenger(array('text' => X_Env::_('p_youtube_save_err_receivedata'), 'type' => 'error')); $this->_helper->redirector('index', 'youtube'); } $thumbselectValue = '/images/youtube/uploads/' . pathinfo($form->thumbnail->getFileName(), PATHINFO_BASENAME); } else { $thumbselectValue = '/images/youtube/uploads/' . $thumbselectValue; } try { $category = new Application_Model_YoutubeCategory(); $categoryId = $form->getValue('id'); if ($categoryId) { Application_Model_YoutubeCategoriesMapper::i()->find($categoryId, $category); } $category->setLabel($form->getValue('label'))->setThumbnail($thumbselectValue); Application_Model_YoutubeCategoriesMapper::i()->save($category); $this->_helper->flashMessenger(array('text' => X_Env::_('p_youtube_save_completed_category'), 'type' => 'info')); $this->_helper->redirector('index', 'youtube'); } catch (Exception $e) { $this->_helper->flashMessenger(array('text' => X_Env::_('p_youtube_save_err_dberror') . ": {$e->getMessage()}", 'type' => 'error')); $this->_helper->redirector('index', 'youtube'); } }
public static function init($options, $helpersOptions = array()) { // plugins are registered in plugin broker self::$_pluginBroker = new X_VlcShares_Plugins_Broker(); if (!$options instanceof Zend_Config) { if (!is_array($options)) { $options = array(); } $options = new Zend_Config($options); } if (!$helpersOptions instanceof Zend_Config) { if (!is_array($helpersOptions)) { $helpersOptions = array(); } $helpersOptions = new Zend_Config($helpersOptions); } $plugins = Application_Model_PluginsMapper::i()->fetchAll(); //foreach ($options as $o_k => $o_v ) { // $pValue = $o_v->toArray(); // $pKey = $o_k; foreach ($plugins as $plugin) { /* @var $plugin Application_Model_Plugin */ if (!$plugin->isEnabled() && $plugin->getType() != Application_Model_Plugin::SYSTEM) { continue; } $pKey = $plugin->getKey(); try { if ($options->{$pKey}) { $pValue = $options->{$pKey}->toArray(); } else { // no configs $pValue = array(); } } catch (Exception $e) { // no configs $pValue = array(); } $pValue['class'] = $plugin->getClass(); if ($plugin->getFile() != null) { $pValue['path'] = APPLICATION_PATH . "/../library/" . $plugin->getFile(); } $className = $pValue['class']; $path = @$pValue['path']; // se class non e' settato, il plugin nn e' valido if (!$className) { continue; } if ($path && substr($path, -4) == '.php' && file_exists($path)) { require_once $path; } if (class_exists($className) && is_subclass_of($className, 'X_VlcShares_Plugins_Abstract')) { $pValue['id'] = $pKey; // si auto referenzia //new $className(new Zend_Config($pValue)); // plugins system from // event-based -> function-based $plugin = new $className(); //X_Debug::i($pKey . ":\n".var_export($pValue, true)); $plugin->setConfigs(new Zend_Config($pValue)); self::$_pluginBroker->registerPlugin($pKey, $plugin, true); } } self::$_helperBroker = new X_VlcShares_Plugins_Helper_Broker($helpersOptions); X_Debug::i("Plugin system enabled"); $pluginlist = implode(', ', array_keys(self::$_pluginBroker->getPlugins())); X_Debug::i("Plugins registered: {$pluginlist}"); $helperlist = implode(', ', array_keys(self::$_helperBroker->getHelpers())); X_Debug::i("Helpers registered: {$helperlist}"); self::$_pluginBroker->gen_afterPluginsInitialized(self::$_pluginBroker); }
private function _send($command) { $commandFull = str_replace('{%command%}', "?{$command}", $this->http_command); X_Debug::i(__METHOD__ . ": sending message {{$command}}: {{$commandFull}}"); $ctx = stream_context_create(array('http' => array('timeout' => $this->http_timeout))); //$return = X_Env::execute($command, $outtype, X_Env::EXECUTE_PS_WAIT); $return = @file_get_contents($commandFull, false, $ctx); return $return; }
/** * Add button -watch megavideo stream directly- * * @param string $provider * @param string $location * @param Zend_Controller_Action $controller */ public function preGetModeItems($provider, $location, Zend_Controller_Action $controller) { if ($provider != $this->getId()) { return; } X_Debug::i("Plugin triggered"); $url = $this->resolveLocation($location); if ($url) { $link = new X_Page_Item_PItem('core-directwatch', X_Env::_('p_animeland_watchdirectly')); $link->setIcon('/images/icons/play.png')->setType(X_Page_Item_PItem::TYPE_PLAYABLE)->setLink($url); return new X_Page_ItemList_PItem(array($link)); } }
/** * Add the button BackToStream in controls page * * @param X_Streamer_Engine $engine * @param Zend_Controller_Action $controller the controller who handle the request * @return array */ public function preGetControlItems(X_Streamer_Engine $engine, Zend_Controller_Action $controller) { // ignore if the streamer is not vlc if (!$engine instanceof X_Streamer_Engine_Vlc) { return; } X_Debug::i('Plugin triggered'); $profileId = $controller->getRequest()->getParam($this->getId(), false); $urlHelper = $controller->getHelper('url'); $outputLink = false; // i store the default link, so if i don't find the proper output // i will have a valid link for -go-to-stream- button //$output->setLink($this->config('default.link', "http://{$_SERVER['SERVER_ADDR']}:8081")); if ($profileId !== false) { $profile = new Application_Model_Profile(); Application_Model_ProfilesMapper::i()->find($profileId, $profile); $outputLink = $profile->getLink(); } else { // if store session is enabled, i try to get last output // method from store // else i fallback to best selection try { if ($this->config('store.session', true)) { /* @var $cache X_VlcShares_Plugins_Helper_Cache */ $cache = $this->helpers()->helper('cache'); $outputLink = $cache->retrieveItem('profile::lastvlclink'); } } catch (Exception $e) { // cache expired or cache disabled; X_Debug::i("Stored session not used"); } if (!$outputLink) { X_Debug::i("Outputlink not found. Using best for this device"); $profile = $this->getBest(); $outputLink = $profile->getLink(); } } $outputLink = self::prepareOutputLink($outputLink); $outputLink = str_replace(array('{%SERVER_IP%}', '{%SERVER_NAME%}'), array($_SERVER['SERVER_ADDR'], $_SERVER['HTTP_HOST']), $outputLink); $item = new X_Page_Item_PItem($this->getId(), X_Env::_('p_profiles_backstream')); $item->setType(X_Page_Item_PItem::TYPE_PLAYABLE)->setIcon('/images/icons/play.png')->setLink($outputLink); return new X_Page_ItemList_PItem(array($item)); }
public function streamAction() { $request = $this->getRequest(); X_VlcShares_Plugins::broker()->gen_preProviderSelection($this); $provider = $request->getParam('p', false); if ($provider === false || !X_VlcShares_Plugins::broker()->isRegistered($provider)) { throw new Exception("Invalid provider"); } $location = X_Env::decode($request->getParam('l', '')); $providerObj = X_VlcShares_Plugins::broker()->getPlugins($provider); // if provider is a resolver, i can use new streamer api if (X_VlcShares_Plugins::helpers()->streamer()->isEnabled() && $providerObj instanceof X_VlcShares_Plugins_ResolverInterface) { $url = $providerObj->resolveLocation($location); X_Debug::i("Resolved location: {{$url}}"); // check if url is valid (resolver give null or false on error) if (!$url) { X_Debug::e("Invalid location: {$location}"); throw new Exception("Stream location is invalid: {$url}"); } $engine = X_VlcShares_Plugins::helpers()->streamer()->find($url); X_Debug::i("Streamer engine found: {{$engine->getId()}}"); // automatically set the url as source param in the engine $engine->setSource($url); // NEW APIS // each arg is stored as in a LIFO stack. If i put top priority as first, // low priority args could override it. So i use an inverse priority insertion // register low priority args X_VlcShares_Plugins::broker()->preRegisterStreamerArgs($engine, $url, $provider, $location, $this); // register normal priority args X_VlcShares_Plugins::broker()->registerStreamerArgs($engine, $url, $provider, $location, $this); // register top priority args X_VlcShares_Plugins::broker()->postRegisterStreamerArgs($engine, $url, $provider, $location, $this); X_VlcShares_Plugins::broker()->preStartStreamer($engine, $url, $provider, $location, $this); $results = X_VlcShares_Plugins::broker()->canStartStreamer($engine, $url, $provider, $location, $this); $started = false; if (is_null($results) || !in_array(false, $results)) { X_Debug::i("Starting streamer {{$engine->getId()}}: {$engine}"); $started = true; X_Streamer::i()->start($engine); } else { $pluginId = array_search(false, $results, true); X_Debug::f("Plugin {{$pluginId}} prevented streamer from starting..."); //throw new Exception("Plugin {{$pluginId}} prevented streamer from starting"); } X_VlcShares_Plugins::broker()->postStartStreamer($started, $engine, $url, $provider, $location, $this); } else { // otherwise i'm forced to fallback to old api //{{{ THIS CODE BLOCK WILL IS DEPRECATED AND WILL BE REMOVED IN 0.5.6 or 0.6 //TODO remove in 0.5.6 or 0.6 // each arg is stored as in a LIFO stack. If i put top priority as first, // low priority args could override it. So i use an inverse priority insertion // register low priority args X_VlcShares_Plugins::broker()->preRegisterVlcArgs($this->vlc, $provider, $location, $this); // register normal priority args X_VlcShares_Plugins::broker()->registerVlcArgs($this->vlc, $provider, $location, $this); // register top priority args X_VlcShares_Plugins::broker()->postRegisterVlcArgs($this->vlc, $provider, $location, $this); X_VlcShares_Plugins::broker()->preSpawnVlc($this->vlc, $provider, $location, $this); $this->vlc->spawn(); X_VlcShares_Plugins::broker()->postSpawnVlc($this->vlc, $provider, $location, $this); try { $engine = X_VlcShares_Plugins::helpers()->streamer()->get('vlc'); } catch (Exception $e) { X_Debug::w('No vlc streamer available'); $engine = new X_Streamer_Engine_Vlc($this->vlc); } $url = $this->vlc->getArg('source'); //}}} } $pageItems = new X_Page_ItemList_PItem(); // i can't add here the go to play button // because i don't know the output type // i need to leave this to the plugins, too // i hope that an output manager plugin // will be always enabled // top links $pageItems->merge(X_VlcShares_Plugins::broker()->preGetStreamItems($engine, $url, $provider, $location, $this)); // normal links $pageItems->merge(X_VlcShares_Plugins::broker()->getStreamItems($engine, $url, $provider, $location, $this)); // bottom links $pageItems->merge(X_VlcShares_Plugins::broker()->postGetStreamItems($engine, $url, $provider, $location, $this)); // trigger for page creation X_VlcShares_Plugins::broker()->gen_afterPageBuild($pageItems, $this); }