/**
  * @static
  * @return ApiWrapperFactory
  */
 public static function getInstance()
 {
     wfProfileIn(__METHOD__);
     if (self::$instance == null) {
         self::$instance = new ApiWrapperFactory();
     }
     wfProfileOut(__METHOD__);
     return self::$instance;
 }
Esempio n. 2
0
 private function execute3rdPartyVideo($url)
 {
     if (empty(F::app()->wg->allowNonPremiumVideos)) {
         $this->dieUsage('Only premium videos are allowed', 'onlyallowpremium');
     }
     if (!preg_match('/^https?:\\/\\//', $url)) {
         $url = 'http://' . $url;
     }
     try {
         $apiwrapper = ApiWrapperFactory::getInstance()->getApiWrapper($url);
     } catch (Exception $e) {
         $this->dieUsage('There was an issue with ApiWrapper', 'apiwrapper-error');
     }
     if (empty($apiwrapper)) {
         $this->dieUsageMsg('The supplied video does not exist');
     }
     $duplicate = $this->getVideoDuplicate($apiwrapper->getProvider(), $apiwrapper->getVideoId());
     $result = array('provider' => $apiwrapper->getProvider(), 'videoId' => $apiwrapper->getVideoId());
     if ($duplicate) {
         $result['title'] = $duplicate->getTitle()->getText();
         $result['url'] = $duplicate->getUrl();
     } else {
         // Check whether upload is enabled
         if (!UploadBase::isEnabled()) {
             $this->dieUsageMsg('uploaddisabled');
         }
         F::app()->wg->DisableProxy = true;
         $this->mUpload = new UploadFromUrl();
         $this->mUpload->initializeFromRequest(new FauxRequest(array('wpUpload' => 1, 'wpSourceType' => 'web', 'wpUploadFileURL' => $apiwrapper->getThumbnailUrl()), true));
         $this->mUpload->fetchFile();
         $this->checkPermissions();
         $this->verifyUpload();
         $tempFile = $this->createTempFile($this->mUpload->getTempPath());
         $result['title'] = $apiwrapper->getTitle();
         $result['tempUrl'] = $tempFile->getUrl();
         $result['tempName'] = $tempFile->getName();
     }
     return $result;
 }
Esempio n. 3
0
 public function getApiWrapper()
 {
     wfProfileIn(__METHOD__);
     if (!empty($this->oApiWrapper)) {
         wfProfileOut(__METHOD__);
         return $this->oApiWrapper;
     }
     if (!empty($this->sExternalUrl)) {
         $apiWF = ApiWrapperFactory::getInstance();
         $this->oApiWrapper = $apiWF->getApiWrapper($this->sExternalUrl);
         if (!empty($this->oApiWrapper)) {
             wfProfileOut(__METHOD__);
             return $this->oApiWrapper;
         }
     }
     if (!empty($this->sProvider)) {
         if (strstr($this->sProvider, '/')) {
             $provider = explode('/', $this->sProvider);
             $apiWrapperPrefix = $provider[0];
         } else {
             $apiWrapperPrefix = $this->sProvider;
         }
         $class = ucfirst($apiWrapperPrefix) . 'ApiWrapper';
         $this->oApiWrapper = new $class($this->sVideoId, $this->aOverrideMetadata);
     }
     wfProfileOut(__METHOD__);
     return $this->oApiWrapper;
 }
Esempio n. 4
0
 function insertVideo()
 {
     global $wgRequest, $wgUser, $wgContLang;
     $url = $wgRequest->getVal('url');
     $tempname = 'Temp_video_' . $wgUser->getID() . '_' . rand(0, 1000);
     $title = Title::makeTitle(NS_FILE, $tempname);
     $isNonPremium = false;
     try {
         $awf = ApiWrapperFactory::getInstance();
         /* @var $awf ApiWrapperFactory */
         $apiwrapper = $awf->getApiWrapper($url);
     } catch (WikiaException $e) {
         $isNonPremium = true;
     }
     if (!empty($apiwrapper)) {
         // try ApiWrapper first - is it from partners?
         $provider = $apiwrapper->getMimeType();
         $file = new WikiaLocalFile($title, RepoGroup::singleton()->getLocalRepo());
         $file->forceMime($provider);
         $file->setVideoId($apiwrapper->getVideoId());
         $file->setProps(array('mime' => $provider));
         $props['id'] = $apiwrapper->getVideoId();
         $props['vname'] = $apiwrapper->getTitle();
         $props['metadata'] = '';
         $props['provider'] = $provider;
         $props['code'] = $file->getEmbedCode(VIDEO_PREVIEW, false, false, true);
         $props['oname'] = '';
     } else {
         // if not a partner video try to parse link for File:
         $file = null;
         // get the video name
         $nsFileTranslated = $wgContLang->getNsText(NS_FILE);
         // added $nsFileTransladed to fix bugId:#48874
         $pattern = '/(File:|Video:|' . $nsFileTranslated . ':)(.+)$/';
         if (preg_match($pattern, $url, $matches)) {
             $file = wfFindFile($matches[2]);
             if (!$file) {
                 // bugID: 26721
                 $file = wfFindFile(urldecode($matches[2]));
             }
         } elseif (preg_match($pattern, urldecode($url), $matches)) {
             $file = wfFindFile($matches[2]);
             if (!$file) {
                 // bugID: 26721
                 $file = wfFindFile($matches[2]);
             }
         } else {
             if ($isNonPremium) {
                 header('X-screen-type: error');
                 if (!empty(F::app()->wg->allowNonPremiumVideos)) {
                     return $e->getMessage();
                 }
                 // return wfMessage("videohandler-non-premium")->parse(); //TODO: re-instate html links once VETUpgrade branch is merged into trunk (Liz)
                 return wfMsg('videohandler-non-premium');
             }
             header('X-screen-type: error');
             return wfMsg('vet-bad-url');
         }
         if (!$file) {
             header('X-screen-type: error');
             return wfMsg('vet-non-existing');
         }
         $embedCode = $file->getEmbedCode(VIDEO_PREVIEW, false, false, true);
         $props['provider'] = 'FILE';
         $props['id'] = $file->getHandler()->getVideoId();
         $props['vname'] = $file->getTitle()->getText();
         $props['code'] = is_string($embedCode) ? $embedCode : json_encode($embedCode);
         $props['metadata'] = '';
         $props['oname'] = '';
     }
     return $this->detailsPage($props);
 }
 protected function getApiWrapper()
 {
     wfProfileIn(__METHOD__);
     if (!empty($this->oApiWrapper)) {
         return $this->oApiWrapper;
     }
     if (!empty($this->sExternalUrl)) {
         $apiWF = ApiWrapperFactory::getInstance();
         $this->oApiWrapper = $apiWF->getApiWrapper($this->sExternalUrl);
         if (!empty($this->oApiWrapper)) {
             return $this->oApiWrapper;
         }
     }
     if (!empty($this->sProvider)) {
         $this->oApiWrapper = F::build(ucfirst($this->sProvider) . 'ApiWrapper', array($this->sVideoId, $this->aOverrideMetadata));
     }
     wfProfileOut(__METHOD__);
     return $this->oApiWrapper;
 }
Esempio n. 6
0
 function insertVideo()
 {
     global $wgRequest, $wgUser;
     wfProfileIn(__METHOD__);
     if ($wgUser->isBlocked()) {
         header('X-screen-type: error');
         wfProfileOut(__METHOD__);
         return wfMessage('videos-error-blocked-user')->plain();
     }
     if (!$wgUser->isAllowed('videoupload')) {
         header('X-screen-type: error');
         wfProfileOut(__METHOD__);
         return wfMessage('videos-error-admin-only')->plain();
     }
     $url = $wgRequest->getVal('url');
     $tempname = 'Temp_video_' . $wgUser->getID() . '_' . rand(0, 1000);
     $title = Title::makeTitle(NS_FILE, $tempname);
     $nonPremiumException = null;
     try {
         $awf = ApiWrapperFactory::getInstance();
         /* @var $awf ApiWrapperFactory */
         $apiwrapper = $awf->getApiWrapper($url);
     } catch (Exception $e) {
         $nonPremiumException = $e;
     }
     $embedOptions = ['autoplay' => false, 'isAjax' => false];
     if (!empty($apiwrapper)) {
         // try ApiWrapper first - is it from a supported 3rd party ( non-premium ) provider?
         $provider = $apiwrapper->getMimeType();
         $file = new WikiaLocalFile($title, RepoGroup::singleton()->getLocalRepo());
         $file->forceMime($provider);
         $file->setVideoId($apiwrapper->getVideoId());
         $file->setProps(array('mime' => $provider));
         // Loading this to deal with video descriptions
         $vHelper = new VideoHandlerHelper();
         $props['id'] = $apiwrapper->getVideoId();
         $props['vname'] = $apiwrapper->getTitle();
         $props['metadata'] = '';
         $props['description'] = $vHelper->getVideoDescription($file);
         $props['provider'] = $provider;
         $embed_code = $file->getEmbedCode(VIDEO_PREVIEW, $embedOptions);
         $props['code'] = json_encode($embed_code);
     } else {
         // if not a supported 3rd party ( non-premium ) video, try to parse link for File:
         // get the video file
         $videoService = new VideoService();
         $file = $videoService->getVideoFileByUrl($url);
         if (!$file) {
             header('X-screen-type: error');
             if ($nonPremiumException) {
                 if (empty(F::app()->wg->allowNonPremiumVideos)) {
                     wfProfileOut(__METHOD__);
                     return wfMessage('videohandler-non-premium')->parse();
                 }
                 if ($nonPremiumException->getMessage() != '') {
                     wfProfileOut(__METHOD__);
                     return $nonPremiumException->getMessage();
                 }
             }
             wfProfileOut(__METHOD__);
             return wfMessage('vet-bad-url')->plain();
         }
         // Loading this to deal with video descriptions
         $vHelper = new VideoHandlerHelper();
         $embedCode = $file->getEmbedCode(VIDEO_PREVIEW, $embedOptions);
         $props['provider'] = 'FILE';
         $props['id'] = $file->getHandler()->getVideoId();
         $props['vname'] = $file->getTitle()->getText();
         $props['code'] = json_encode($embedCode);
         $props['metadata'] = '';
         $props['description'] = $vHelper->getVideoDescription($file);
         $props['premiumVideo'] = !$file->isLocal();
     }
     wfProfileOut(__METHOD__);
     return $this->detailsPage($props);
 }