public function onSearchInputTemplatePreRender(tubepress_api_event_EventInterface $event)
 {
     /*
      * @var array
      */
     $existingTemplateVars = $event->getSubject();
     $resultsUrl = $this->_context->get(tubepress_api_options_Names::SEARCH_RESULTS_URL);
     $url = '';
     try {
         $url = $this->_urlFactory->fromString($resultsUrl);
     } catch (Exception $e) {
         //this is not a real problem, as the user might simply not supply a custom URL
     }
     /* if the user didn't request a certain page, just send the search results right back here */
     if ($url == '') {
         $url = $this->_urlFactory->fromCurrent();
     }
     /* clean up the search terms a bit */
     $searchTerms = $this->_requestParams->getParamValue('tubepress_search');
     $searchTerms = urldecode($searchTerms);
     /*
      * read http://stackoverflow.com/questions/1116019/submitting-a-get-form-with-query-string-params-and-hidden-params-disappear
      * if you're curious as to what's going on here
      */
     $params = $url->getQuery();
     $params->remove('tubepress_page');
     $params->remove('tubepress_search');
     /* apply the template variables */
     $newVars = array(tubepress_api_template_VariableNames::SEARCH_HANDLER_URL => $url->toString(), tubepress_api_template_VariableNames::SEARCH_HIDDEN_INPUTS => $params->toArray(), tubepress_api_template_VariableNames::SEARCH_TERMS => $searchTerms);
     $existingTemplateVars = array_merge($existingTemplateVars, $newVars);
     $event->setSubject($existingTemplateVars);
 }
 private function _getDataUrl(tubepress_api_media_MediaItem $mediaItem)
 {
     $link = $this->_urlFactory->fromString('https://www.youtube.com/embed/' . $mediaItem->getId());
     $embedQuery = $link->getQuery();
     $url = $this->_urlFactory->fromCurrent();
     $origin = $url->getScheme() . '://' . $url->getHost();
     $autoPlay = $this->_context->get(tubepress_api_options_Names::EMBEDDED_AUTOPLAY);
     $loop = $this->_context->get(tubepress_api_options_Names::EMBEDDED_LOOP);
     $showInfo = $this->_context->get(tubepress_api_options_Names::EMBEDDED_SHOW_INFO);
     $autoHide = $this->_context->get(tubepress_youtube3_api_Constants::OPTION_AUTOHIDE);
     $fullscreen = $this->_context->get(tubepress_youtube3_api_Constants::OPTION_FULLSCREEN);
     $modestBranding = $this->_context->get(tubepress_youtube3_api_Constants::OPTION_MODEST_BRANDING);
     $showRelated = $this->_context->get(tubepress_youtube3_api_Constants::OPTION_SHOW_RELATED);
     $embedQuery->set('autohide', $this->_getAutoHideValue($autoHide));
     $embedQuery->set('autoplay', $this->_langUtils->booleanToStringOneOrZero($autoPlay));
     $embedQuery->set('enablejsapi', '1');
     $embedQuery->set('fs', $this->_langUtils->booleanToStringOneOrZero($fullscreen));
     $embedQuery->set('modestbranding', $this->_langUtils->booleanToStringOneOrZero($modestBranding));
     $embedQuery->set('origin', $origin);
     $embedQuery->set('rel', $this->_langUtils->booleanToStringOneOrZero($showRelated));
     $embedQuery->set('showinfo', $this->_langUtils->booleanToStringOneOrZero($showInfo));
     $embedQuery->set('wmode', 'opaque');
     if ($loop) {
         $embedQuery->set('loop', $this->_langUtils->booleanToStringOneOrZero($loop));
         $embedQuery->set('playlist', $mediaItem->getId());
     }
     return $link;
 }
Esempio n. 3
0
 public function onFilter_PucRequestInfoResultTubePress(tubepress_api_event_EventInterface $event)
 {
     $pluginInfo = $event->getSubject();
     if ($pluginInfo && $this->_environment->isPro()) {
         $apiKey = $this->_context->get(tubepress_api_options_Names::TUBEPRESS_API_KEY);
         if (!$apiKey) {
             /*
              * We don't want to downgrade Pro users that haven't entered an API key.
              */
             $pluginInfo->download_url = null;
         }
         if (property_exists($pluginInfo, 'download_url') && strpos($pluginInfo->download_url, 'free') !== false) {
             /*
              * Extra assurance that we don't downgrade Pro users
              */
             $pluginInfo->download_url = null;
         }
         if (property_exists($pluginInfo, 'download_url') && $pluginInfo->download_url && $apiKey) {
             $url = $this->_urlFactory->fromString($pluginInfo->download_url);
             $url->getQuery()->set('key', $apiKey)->set('pid', 2);
             $pluginInfo->download_url = $url->toString();
         }
         $event->setSubject($pluginInfo);
     }
 }
Esempio n. 4
0
 /**
  * @return tubepress_api_url_UrlInterface
  */
 private function _startAdminUrl($pageSlug, tubepress_spi_http_oauth2_Oauth2ProviderInterface $provider)
 {
     $asString = $this->_wpFunctions->admin_url('admin.php');
     $toReturn = $this->_urlFactory->fromString($asString);
     $providerName = $provider->getName();
     $toReturn->getQuery()->set('page', $pageSlug)->set('provider', $providerName)->set('csrf_token', $this->getCsrfSecret());
     return $toReturn;
 }
Esempio n. 5
0
 private function _getHtml($vidCount)
 {
     $currentPage = $this->_requestParams->getParamValueAsInt('tubepress_page', 1);
     $vidsPerPage = $this->_context->get(tubepress_api_options_Names::FEED_ADJUSTED_RESULTS_PER_PAGE);
     if (!$vidsPerPage) {
         $vidsPerPage = $this->_context->get(tubepress_api_options_Names::FEED_RESULTS_PER_PAGE);
     }
     $newurl = $this->_urlFactory->fromCurrent();
     if (!$this->_isLegacyTheme()) {
         return $this->_paginationFromTemplate($vidCount, $currentPage, $vidsPerPage, $newurl);
     }
     return $this->_legacyPagination($vidCount, $currentPage, $vidsPerPage, 1, $newurl, 'tubepress_page');
 }
Esempio n. 6
0
 /**
  * {@inheritdoc}
  */
 public function buildUrlForItem($id)
 {
     $url = $this->_urlFactory->fromString(self::$_URL_BASE);
     $id = str_replace('dailymotion_', '', $id);
     $url->addPath('video')->addPath($id);
     $this->_addFieldsParam($url->getQuery());
     return $url;
 }
Esempio n. 7
0
 private function _toUrl($url)
 {
     if (!$url instanceof tubepress_api_url_UrlInterface) {
         $url = $this->_urlFactory->fromString($url);
     }
     $url->freeze();
     return $url;
 }
Esempio n. 8
0
 public function transform($incoming)
 {
     if ($this->_looksLikeDailymotionUser($incoming)) {
         //looks like a valid user idn
         return $incoming;
     }
     $incoming = trim($incoming, '/');
     /*
      * Might be
      *
      * 1. http://www.dailymotion.com/user/foobar/1
      * 2. http://www.dailymotion.com/user/foobar
      * 3. http://www.dailymotion.com/foobar
      */
     try {
         $url = $this->_urlFactory->fromString($incoming);
         $host = $url->getHost();
         if (!$this->_stringUtils->endsWith($host, 'dailymotion.com')) {
             return null;
         }
         $pathSegments = $url->getPathSegments();
         $pathCount = count($pathSegments);
         if ($pathCount < 2) {
             return null;
         }
         if ($pathCount > 2 && $pathSegments[1] !== 'user') {
             return null;
         }
         if ($pathCount > 2) {
             $user = $pathSegments[2];
         } else {
             $user = $pathSegments[1];
         }
         $error = $user === 'user' || !$this->_looksLikeDailymotionUser($user);
         if ($error) {
             return null;
         }
         return $user;
     } catch (InvalidArgumentException $e) {
         //invalid URL
         return null;
     }
 }
Esempio n. 9
0
 public function transform($incoming)
 {
     if ($this->_looksLikeDailymotionVideoId($incoming)) {
         //looks like a valid video ID
         return $incoming;
     }
     // x2xv8yy_description
     if (preg_match_all('~^[a-z0-9]+_.+$~', $incoming, $matches) === 1) {
         $exploded = explode('_', $incoming);
         return $exploded[0];
     }
     $incoming = trim($incoming, '/');
     /*
      * Might be
      *
      * 1. http://www.dailymotion.com/video/videoid
      * 2. http://www.dailymotion.com/video/videoid_description
      */
     try {
         $url = $this->_urlFactory->fromString($incoming);
         $host = $url->getHost();
         $path = $url->getPath();
         if (!$this->_stringUtils->endsWith($host, 'dailymotion.com')) {
             return null;
         }
         if (!$this->_stringUtils->startsWith($path, '/video/') && !$this->_stringUtils->startsWith($path, '/hub/')) {
             return null;
         }
         $one = 1;
         $path = str_replace(array('/video/', '/hub/'), '', $path, $one);
         $exploded = explode('_', $path);
         $videoId = $exploded[0];
         $error = !$this->_looksLikeDailymotionVideoId($videoId);
         if ($error) {
             return null;
         }
         return $videoId;
     } catch (InvalidArgumentException $e) {
         //invalid URL
         return null;
     }
 }
 private function _getDataUrl(tubepress_api_media_MediaItem $mediaItem, $playerId)
 {
     $autoPlay = $this->_context->get(tubepress_api_options_Names::EMBEDDED_AUTOPLAY);
     $showInfo = $this->_context->get(tubepress_api_options_Names::EMBEDDED_SHOW_INFO);
     $actualId = str_replace('dailymotion_', '', $mediaItem->getId());
     /* build the data URL based on these options */
     $link = $this->_urlFactory->fromString("https://www.dailymotion.com/embed/video/{$actualId}");
     $query = $link->getQuery();
     $query->set(self::$_URL_PARAM_AUTOPLAY, $this->_langUtils->booleanToStringOneOrZero($autoPlay));
     $query->set(self::$_URL_PARAM_UI_START_SCREEN, $this->_langUtils->booleanToStringOneOrZero($showInfo));
     $query->set(self::$_URL_PARAM_ID, $playerId);
     return $link;
 }
 public function getValueMap()
 {
     if (!isset($this->_cache)) {
         $url = $this->_urlFactory->fromString($this->_urlAsString);
         $response = $this->_apiUtility->getDecodedApiResponse($url);
         $list = $this->_arrayReader->getAsArray($response, 'list');
         $this->_cache = array();
         foreach ($list as $entry) {
             if (!isset($entry[$this->_codeKey])) {
                 continue;
             }
             $code = $entry[$this->_codeKey];
             $displayName = $this->getDisplayNameFromCode($code, $entry);
             if ($displayName) {
                 $this->_cache[$code] = "{$code} - {$displayName}";
             }
         }
         ksort($this->_cache);
         $this->_cache = array_merge(array('none' => 'select ...'), $this->_cache);
     }
     return $this->_cache;
 }
Esempio n. 12
0
 private function _maybeConvertUrl($originalValue, $pathSegment)
 {
     $url = null;
     try {
         $url = $this->_urlFactory->fromString($originalValue);
     } catch (Exception $e) {
         return $originalValue;
     }
     $host = $url->getHost();
     if (!$this->_stringUtils->endsWith($host, 'vimeo.com')) {
         return $originalValue;
     }
     $path = $url->getPath();
     $pathStartsWithSegment = $this->_stringUtils->startsWith($path, '/' . $pathSegment);
     if (!$pathStartsWithSegment) {
         return $originalValue;
     }
     $explodedPath = preg_split('~/~', $path);
     if (count($explodedPath) < 3) {
         return $originalValue;
     }
     return $explodedPath[2];
 }
Esempio n. 13
0
 private function _applyCategory(array &$toReturn, array $json, $index)
 {
     $categoryId = $this->_relativeQueryAsString($json, $index, array(tubepress_youtube3_impl_ApiUtility::RESOURCE_VIDEO_SNIPPET, tubepress_youtube3_impl_ApiUtility::RESOURCE_VIDEO_SNIPPET_CATEGORY_ID));
     $categoryUrl = $this->_urlFactory->fromString(tubepress_youtube3_impl_ApiUtility::YOUTUBE_API_URL);
     $categoryUrl->addPath(tubepress_youtube3_impl_ApiUtility::PATH_VIDEO_CATEGORIES);
     $categoryUrl->getQuery()->set(tubepress_youtube3_impl_ApiUtility::QUERY_PART, tubepress_youtube3_impl_ApiUtility::PART_SNIPPET)->set(tubepress_youtube3_impl_ApiUtility::QUERY_CATEGORIES_ID, $categoryId);
     $response = $this->_apiUtility->getDecodedApiResponse($categoryUrl);
     $responseItems = $this->_arrayReader->getAsArray($response, tubepress_youtube3_impl_ApiUtility::RESPONSE_ITEMS);
     $firstItem = $responseItems[0];
     $categoryTitle = $this->_arrayReader->getAsString($firstItem, sprintf('%s.%s', tubepress_youtube3_impl_ApiUtility::RESOURCE_VIDEO_SNIPPET, tubepress_youtube3_impl_ApiUtility::RESOURCE_SNIPPET_TITLE));
     if ($categoryTitle !== '') {
         $toReturn[tubepress_api_media_MediaItem::ATTRIBUTE_CATEGORY_DISPLAY_NAME] = $categoryTitle;
     }
 }
Esempio n. 14
0
 protected function toUrl($candidate, $mustBeAbsolute = true)
 {
     if (!is_string($candidate) || !$candidate) {
         return false;
     }
     try {
         $url = $this->_urlFactory->fromString($candidate);
         if ($mustBeAbsolute && !$url->isAbsolute()) {
             return null;
         }
         return $url;
     } catch (InvalidArgumentException $e) {
         return null;
     }
 }
 private function _getDataUrl(tubepress_api_media_MediaItem $mediaItem)
 {
     $autoPlay = $this->_context->get(tubepress_api_options_Names::EMBEDDED_AUTOPLAY);
     $showInfo = $this->_context->get(tubepress_api_options_Names::EMBEDDED_SHOW_INFO);
     $loop = $this->_context->get(tubepress_api_options_Names::EMBEDDED_LOOP);
     $color = $this->_context->get(tubepress_vimeo3_api_Constants::OPTION_PLAYER_COLOR);
     /* build the data URL based on these options */
     $link = $this->_urlFactory->fromString('https://player.vimeo.com/video/' . $mediaItem->getId());
     $query = $link->getQuery();
     $query->set(self::$_URL_PARAM_AUTOPLAY, $this->_langUtils->booleanToStringOneOrZero($autoPlay));
     $query->set(self::$_URL_PARAM_COLOR, $color);
     $query->set(self::$_URL_PARAM_LOOP, $this->_langUtils->booleanToStringOneOrZero($loop));
     $query->set(self::$_URL_PARAM_PORTRAIT, $this->_langUtils->booleanToStringOneOrZero($showInfo));
     $query->set(self::$_URL_PARAM_BYLINE, $this->_langUtils->booleanToStringOneOrZero($showInfo));
     $query->set(self::$_URL_PARAM_TITLE, $this->_langUtils->booleanToStringOneOrZero($showInfo));
     return $link;
 }
Esempio n. 16
0
 protected function validateState(tubepress_spi_http_oauth2_Oauth2ProviderInterface $provider)
 {
     if (!$provider->isStateUsed()) {
         return;
     }
     $currentUrl = $this->_urlFactory->fromCurrent();
     $stateFromProvider = $currentUrl->getQuery()->get('state');
     if (!$stateFromProvider) {
         $this->bail(sprintf('%s did not supply state. Possible replay attack.', $provider->getDisplayName()));
     }
     $sessionKey = $this->_getSessionKey($provider);
     if (!isset($_SESSION[$sessionKey])) {
         $this->bail(sprintf('No stored state for %s. Try again.', $provider->getDisplayName()));
     }
     if ($_SESSION[$sessionKey] !== $stateFromProvider) {
         $this->bail(sprintf('State from %s did not match our saved state. Possible reply attack. Please try again.', $provider->getDisplayName()));
     }
     return;
 }
 private function _maybeGetPlaylistValueFromUrl($originalValue)
 {
     $url = null;
     try {
         $url = $this->_urlFactory->fromString($originalValue);
     } catch (Exception $e) {
         return $originalValue;
     }
     $host = $url->getHost();
     if (!$this->_stringUtils->endsWith($host, 'youtube.com')) {
         return $originalValue;
     }
     $params = $url->getQuery();
     if (!$params->hasKey('list') && !$params->hasKey('p')) {
         return $originalValue;
     }
     if ($params->hasKey('list')) {
         return $params->get('list');
     }
     return $params->get('p');
 }
Esempio n. 18
0
 /**
  * {@inheritdoc}
  */
 public function buildUrlForItem($id)
 {
     $url = $this->_urlFactory->fromString(self::$_URL_BASE);
     $url->addPath(self::$_PATH_SEGMENT_VIDEOS)->addPath($id);
     return $url;
 }
Esempio n. 19
0
 private function _collectMetadata()
 {
     $idQueriesToTest = array(sprintf('%s.%s.%s', tubepress_youtube3_impl_ApiUtility::RESOURCE_PLITEM_SNIPPET, tubepress_youtube3_impl_ApiUtility::RESOURCE_PLITEM_SNIPPET_RESOURCE_ID, tubepress_youtube3_impl_ApiUtility::RESOURCE_PLITEM_SNIPPET_RESOURCE_ID_VIDEO_ID), sprintf('%s.%s', tubepress_youtube3_impl_ApiUtility::RESOURCE_SEARCH_ID, tubepress_youtube3_impl_ApiUtility::RESOURCE_SEARCH_ID_VIDEO_ID), tubepress_youtube3_impl_ApiUtility::RESOURCE_ID);
     $items = $this->_arrayReader->getAsArray($this->_feedAsArray, tubepress_youtube3_impl_ApiUtility::RESPONSE_ITEMS, array());
     $ids = array();
     $selectedQuery = null;
     for ($index = 0; $index < count($items); $index++) {
         if ($this->getReasonUnableToUseItemAtIndex($index) !== null) {
             if ($this->_logger->isEnabled()) {
                 $reason = $this->getReasonUnableToUseItemAtIndex($index);
                 $this->_logDebug(sprintf('Skipping video at index <code>%d</code>: <code>%s</code>', $index, $reason));
             }
             $this->_skippedVideoCount++;
             unset($this->_feedAsArray[tubepress_youtube3_impl_ApiUtility::RESPONSE_ITEMS][$index]);
             continue;
         }
         $item = $items[$index];
         if ($selectedQuery === null) {
             foreach ($idQueriesToTest as $query) {
                 if ($this->_arrayReader->getAsString($item, $query) !== '') {
                     $selectedQuery = $query;
                     break;
                 }
             }
         }
         if ($selectedQuery === null) {
             throw new RuntimeException('Unable to determine query to get video IDs');
         }
         $id = $this->_arrayReader->getAsString($item, $selectedQuery);
         if ($id == '') {
             throw new RuntimeException('Unable to determine ID for a video in the result.');
         }
         $ids[] = $id;
     }
     if ($this->_logger->isEnabled()) {
         $this->_logDebug(sprintf('Making API call to collect metadata for <code>%d</code> video(s): <code>[ %s ]</code>', count($ids), implode(', ', $ids)));
     }
     $url = $this->_urlFactory->fromString(tubepress_youtube3_impl_ApiUtility::YOUTUBE_API_URL);
     $url->addPath(tubepress_youtube3_impl_ApiUtility::PATH_VIDEOS);
     $partsToRequest = array(tubepress_youtube3_impl_ApiUtility::PART_ID, tubepress_youtube3_impl_ApiUtility::PART_SNIPPET, tubepress_youtube3_impl_ApiUtility::PART_VIDEO_STATISTICS, tubepress_youtube3_impl_ApiUtility::PART_VIDEO_CONTENT_DETAILS);
     $fieldsToRequest = array(tubepress_youtube3_impl_ApiUtility::RESOURCE_ID, tubepress_youtube3_impl_ApiUtility::RESOURCE_SNIPPET, tubepress_youtube3_impl_ApiUtility::RESOURCE_VIDEO_STATS, tubepress_youtube3_impl_ApiUtility::RESOURCE_VIDEO_CONTENT_DETAILS);
     $fields = sprintf('%s,%s(%s)', tubepress_youtube3_impl_ApiUtility::RESPONSE_ETAG, tubepress_youtube3_impl_ApiUtility::RESPONSE_ITEMS, implode(',', $fieldsToRequest));
     /*
      * author           //snippet.channelId and snippet.channelTitle
      * category         //snippet.categoryId
      * comments count   //statistics.commentCount
      * date uploaded    //snippet.publishedAt
      * description      //snippet.description
      * disklikes count  //statistics.disklikeCount
      * favorites count  //statistics.favoriteCount
      * id               //id
      * length           //contentDetails.duration
      * likes count      //statistics.likeCount
      * tags             //snippet.tags
      * title            //snippet.title
      * url              //https://youtu.be/<id>
      * view count       //statistics.viewCount
      */
     $url->getQuery()->set(tubepress_youtube3_impl_ApiUtility::QUERY_VIDEOS_ID, implode(',', $ids))->set(tubepress_youtube3_impl_ApiUtility::QUERY_PART, implode(',', $partsToRequest))->set(tubepress_youtube3_impl_ApiUtility::QUERY_FIELDS, $fields);
     return $this->_apiUtility->getDecodedApiResponse($url);
 }
Esempio n. 20
0
 /**
  * {@inheritdoc}
  */
 public function getTemplateVariables(tubepress_api_media_MediaItem $mediaItem)
 {
     return array(tubepress_api_template_VariableNames::EMBEDDED_DATA_URL => $this->_urlFactory->fromString(sprintf('http://www.youtube.com/embed/%s', $mediaItem->getId())));
 }
 /**
  * {@inheritdoc}
  */
 public function getTemplateVariables(tubepress_api_media_MediaItem $mediaItem)
 {
     $dataUrl = $this->_urlFactory->fromString(sprintf('https://www.youtube.com/watch?v=%s', $mediaItem->getId()));
     return array('userContentUrl' => $this->_environment->getUserContentUrl(), 'autostart' => $this->_context->get(tubepress_api_options_Names::EMBEDDED_AUTOPLAY), tubepress_api_template_VariableNames::EMBEDDED_DATA_URL => $dataUrl, tubepress_jwplayer5_api_OptionNames::COLOR_FRONT => $this->_context->get(tubepress_jwplayer5_api_OptionNames::COLOR_FRONT), tubepress_jwplayer5_api_OptionNames::COLOR_LIGHT => $this->_context->get(tubepress_jwplayer5_api_OptionNames::COLOR_LIGHT), tubepress_jwplayer5_api_OptionNames::COLOR_SCREEN => $this->_context->get(tubepress_jwplayer5_api_OptionNames::COLOR_SCREEN), tubepress_jwplayer5_api_OptionNames::COLOR_BACK => $this->_context->get(tubepress_jwplayer5_api_OptionNames::COLOR_BACK));
 }
Esempio n. 22
0
 private function _getUrl(array $config, $key)
 {
     if (!$this->_isAllSet($config, self::$_TOP_LEVEL_KEY_USER, self::$_2ND_LEVEL_KEY_URLS, $key)) {
         return null;
     }
     $candidate = $config[self::$_TOP_LEVEL_KEY_USER][self::$_2ND_LEVEL_KEY_URLS][$key];
     try {
         $toReturn = $this->_urlFactory->fromString($candidate);
         $toReturn->freeze();
         return $toReturn;
     } catch (InvalidArgumentException $e) {
         if ($this->_shouldLog) {
             $this->_logger->error("Unable to parse {$key} URL from settings.php");
         }
         return null;
     }
 }
Esempio n. 23
0
 /**
  * {@inheritdoc}
  */
 public function getTokenEndpoint()
 {
     return $this->_urlFactory->fromString('https://api.vimeo.com/oauth/authorize/client');
 }
 public function __construct($name, $untranslatedDisplayName, tubepress_api_url_UrlFactoryInterface $urlFactory, $staticTemplateName = null)
 {
     parent::__construct($name, $untranslatedDisplayName, $staticTemplateName);
     $this->_url = $urlFactory->fromCurrent();
     $this->_url->removeSchemeAndAuthority();
 }