/package/app/app/plugins/content_distribution/providers/dailymotion/lib/DailymotionDistributionEngine.php
PHP | 278 lines | 179 code | 48 blank | 51 comment | 26 complexity | e6ad6e58921891d9ecc7fa24ab6017b9 MD5 | raw file
Possible License(s): AGPL-3.0, GPL-3.0, BSD-3-Clause, LGPL-2.1, GPL-2.0, LGPL-3.0, JSON, MPL-2.0-no-copyleft-exception, Apache-2.0
- <?php
- require_once 'DailymotionImpl.php';
- /**
- * @package plugins.dailymotionDistribution
- * @subpackage lib
- */
- class DailymotionDistributionEngine extends DistributionEngine implements
- IDistributionEngineSubmit,
- IDistributionEngineCloseSubmit,
- IDistributionEngineUpdate,
- IDistributionEngineDelete,
- IDistributionEngineReport,
- IDistributionEngineEnable,
- IDistributionEngineDisable
- {
- protected $tempXmlPath;
-
- protected $requestTimeout = 10;
-
- protected $connectTimeout = 15;
-
- protected $fieldValues;
-
- /* (non-PHPdoc)
- * @see DistributionEngine::configure()
- */
- public function configure(KSchedularTaskConfig $taskConfig)
- {
- if($taskConfig->params->tempXmlPath)
- {
- $this->tempXmlPath = $taskConfig->params->tempXmlPath;
- if(!is_dir($this->tempXmlPath))
- mkdir($this->tempXmlPath, 0777, true);
- }
- else
- {
- KalturaLog::err("params.tempXmlPath configuration not supplied");
- $this->tempXmlPath = sys_get_temp_dir();
- }
-
- if (isset($taskConfig->params->dailymotion))
- {
- if (isset($taskConfig->params->dailymotion->requestTimeout))
- $this->requestTimeout = $taskConfig->params->dailymotion->requestTimeout;
-
- if (isset($taskConfig->params->dailymotion->connectTimeout))
- $this->connectTimeout = $taskConfig->params->dailymotion->connectTimeout;
- }
- }
-
- /* (non-PHPdoc)
- * @see IDistributionEngineSubmit::submit()
- */
- public function submit(KalturaDistributionSubmitJobData $data)
- {
- if(!$data->distributionProfile || !($data->distributionProfile instanceof KalturaDailymotionDistributionProfile))
- throw new Exception("Distribution profile must be of type KalturaDailymotionDistributionProfile");
-
- return $this->doSubmit($data, $data->distributionProfile);
- }
-
- /**
- * @param KalturaDistributionJobData $data
- * @param KalturaDailymotionDistributionProfile $distributionProfile
- * @return array()
- */
- public function getDailymotionProps($enabled = null)
- {
- $props = array();
- $props['tags'] = str_replace(',', ' , ', $this->getValueForField(KalturaDailymotionDistributionField::VIDEO_TAGS));
- $props['title'] = $this->getValueForField(KalturaDailymotionDistributionField::VIDEO_TITLE);
- $props['channel'] = $this->translateCategory($this->getValueForField(KalturaDailymotionDistributionField::VIDEO_CHANNEL));
- $props['description'] = $this->getValueForField(KalturaDailymotionDistributionField::VIDEO_DESCRIPTION);
- //$props['date'] = time();
- $props['language'] = $this->getValueForField(KalturaDailymotionDistributionField::VIDEO_LANGUAGE);
-
- $props['published']= true;
- if(!is_null($enabled))
- $props['private']= !$enabled;
-
- return $props;
- }
-
- /**
- * Tries to transalte the friendly name of the category to the api value, if not found the same value will be returned (as a fallback)
- * @param string $category
- */
- protected function translateCategory($category)
- {
- foreach(DailyMotionImpl::getCategoriesMap() as $id => $name)
- {
- if ($name == $category)
- return $id;
- }
- return $category;
- }
-
-
- public function doSubmit(KalturaDistributionSubmitJobData $data, KalturaDailymotionDistributionProfile $distributionProfile)
- {
- $this->fieldValues = unserialize($data->providerData->fieldValues);
-
- $enabled = false;
- if($data->entryDistribution->sunStatus == KalturaEntryDistributionSunStatus::AFTER_SUNRISE)
- $enabled = true;
-
- $needDel = false;
-
- $props = $this->getDailymotionProps($enabled);
-
- if($data->entryDistribution->remoteId)
- {
- $dailyMotionImpl = new DailyMotionImpl($distributionProfile->user, $distributionProfile->password);
- $this->configureTimeouts($dailyMotionImpl);
- $dailyMotionImpl->update($data->remoteId, $props);
-
- $data->remoteId = $data->entryDistribution->remoteId;
- return true;
- }
-
- $videoFilePath = $data->providerData->videoAssetFilePath;
-
- if (!$videoFilePath)
- throw new KalturaException('No video asset to distribute, the job will fail');
-
- if (!file_exists($videoFilePath))
- throw new KalturaDistributionException('The file ['.$videoFilePath.'] was not found (probably not synced yet), the job will retry');
-
- if (FALSE === strstr($videoFilePath, "."))
- {
- $videoFilePathNew = $this->tempXmlPath . "/" . uniqid() . ".dme";
- /* try
- {
- KalturaLog::debug("DM : before " . $videoFilePathNew);
- @symlink ($videoFilePath, $videoFilePathNew);
- KalturaLog::debug("DM : after");
- }
- catch(Exception $ex)
- {
- KalturaLog::debug("DM : exception");
- }*/
- if (!file_exists($videoFilePathNew))
- {
- copy($videoFilePath,$videoFilePathNew);
- $needDel = true;
- }
- $videoFilePath = $videoFilePathNew;
- }
-
- $dailyMotionImpl = new DailyMotionImpl($distributionProfile->user, $distributionProfile->password);
- $this->configureTimeouts($dailyMotionImpl);
- $remoteId = $dailyMotionImpl->upload($videoFilePath);
- $dailyMotionImpl->update($remoteId, $props);
-
- if ($needDel == true)
- {
- unlink($videoFilePath);
- }
- $data->remoteId = $remoteId;
- return false;
- }
-
- /* (non-PHPdoc)
- * @see IDistributionEngineCloseSubmit::closeSubmit()
- */
- public function closeSubmit(KalturaDistributionSubmitJobData $data)
- {
- $distributionProfile = $data->distributionProfile;
- $dailyMotionImpl = new DailyMotionImpl($distributionProfile->user, $distributionProfile->password);
- $this->configureTimeouts($dailyMotionImpl);
-
- $status = $dailyMotionImpl->getStatus($data->remoteId);
-
- switch($status)
- {
- case 'encoding_error':
- throw new Exception("Dailymotion error encoding");
-
- case 'waiting':
- case 'processing':
- case 'rejected':
- return false;
-
- case 'deleted':
- case 'ready':
- case 'published':
- return true;
- }
- }
-
- /* (non-PHPdoc)
- * @see IDistributionEngineUpdate::update()
- */
- public function update(KalturaDistributionUpdateJobData $data)
- {
- if(!$data->distributionProfile || !($data->distributionProfile instanceof KalturaDailymotionDistributionProfile))
- throw new Exception("Distribution profile must be of type KalturaDailymotionDistributionProfile");
-
- return $this->doUpdate($data, $data->distributionProfile);
- }
-
- /* (non-PHPdoc)
- * @see IDistributionEngineDisable::disable()
- */
- public function disable(KalturaDistributionDisableJobData $data)
- {
- if(!$data->distributionProfile || !($data->distributionProfile instanceof KalturaDailymotionDistributionProfile))
- throw new Exception("Distribution profile must be of type KalturaDailymotionDistributionProfile");
-
- return $this->doUpdate($data, $data->distributionProfile, false);
- }
-
- /* (non-PHPdoc)
- * @see IDistributionEngineEnable::enable()
- */
- public function enable(KalturaDistributionEnableJobData $data)
- {
- if(!$data->distributionProfile || !($data->distributionProfile instanceof KalturaDailymotionDistributionProfile))
- throw new Exception("Distribution profile must be of type KalturaDailymotionDistributionProfile");
-
- return $this->doUpdate($data, $data->distributionProfile, true);
- }
-
- public function doUpdate(KalturaDistributionUpdateJobData $data, KalturaDailymotionDistributionProfile $distributionProfile, $enabled = null)
- {
- $this->fieldValues = unserialize($data->providerData->fieldValues);
-
- $props = $this->getDailymotionProps($enabled);
-
- $dailyMotionImpl = new DailyMotionImpl($distributionProfile->user, $distributionProfile->password);
- $this->configureTimeouts($dailyMotionImpl);
- $dailyMotionImpl->update($data->remoteId, $props);
-
- // $data->sentData = $dailymotionMediaService->request;
- // $data->results = $dailymotionMediaService->response;
-
- return true;
- }
-
- /* (non-PHPdoc)
- * @see IDistributionEngineDelete::delete()
- */
- public function delete(KalturaDistributionDeleteJobData $data)
- {
- $distributionProfile = $data->distributionProfile;
- $dailyMotionImpl = new DailyMotionImpl($distributionProfile->user, $distributionProfile->password);
- $this->configureTimeouts($dailyMotionImpl);
-
- $dailyMotionImpl->delete($data->remoteId);
-
- return true;
- }
-
- /* (non-PHPdoc)
- * @see IDistributionEngineReport::fetchReport()
- */
- public function fetchReport(KalturaDistributionFetchReportJobData $data)
- {
- // TODO
- }
-
- protected function configureTimeouts(DailyMotionImpl $dailyMotionImpl)
- {
- KalturaLog::info('Setting connection timeout to ' . $this->connectTimeout . ' seconds');
- $dailyMotionImpl->setOption('connectionTimeout', $this->connectTimeout);
- KalturaLog::info('Setting request timeout to ' . $this->requestTimeout . ' seconds');
- $dailyMotionImpl->setOption('timeout', $this->requestTimeout);
- }
-
-
- private function getValueForField($fieldName)
- {
- if (isset($this->fieldValues[$fieldName])) {
- return $this->fieldValues[$fieldName];
- }
- return null;
- }
- }