/** * @return array<IKalturaMrssContributor> */ public static function getMrssContributors() { if (self::$mrssContributors) { return self::$mrssContributors; } self::$mrssContributors = KalturaPluginManager::getPluginInstances('IKalturaMrssContributor'); return self::$mrssContributors; }
/** * @param $entry * @param $syndicationFeed * @return string */ private static function getMrssEntryXml(entry $entry, syndicationFeed $syndicationFeed = null, $link = null) { $mrss = kMrssManager::getEntryMrssXml($entry, null, $link, $syndicationFeed->getFlavorParamId()); if (!$mrss) { KalturaLog::err("No MRSS returned for entry [" . $entry->getId() . "]"); return null; } $uiconfId = $syndicationFeed->getPlayerUiconfId ? '/ui_conf_id/' . $syndicationFeed->getPlayerUiconfId : ''; $playerUrl = 'http://' . kConf::get('www_host') . '/kwidget/wid/_' . $entry->getPartnerId() . '/entry_id/' . $entry->getId() . $syndicationFeed->getPlayerUiconfId(); $player = $mrss->addChild('player'); $player->addAttribute('url', $playerUrl); return $mrss->asXML(); }
/** * @param BaseObject $object * @param SimpleXMLElement $mrss * @param kMrssParameters $mrssParams * @return SimpleXMLElement */ public function contribute(BaseObject $object, SimpleXMLElement $mrss, kMrssParameters $mrssParams = null) { if (!$object instanceof entry) { return; } $children = entryPeer::retrieveChildEntriesByEntryIdAndPartnerId($object->getId(), $object->getPartnerId()); if (!count($children)) { return; } $childrenNode = $mrss->addChild('children'); $childrenDom = dom_import_simplexml($childrenNode); foreach ($children as $child) { $childXML = kMrssManager::getEntryMrssXml($child); $childDom = dom_import_simplexml($childXML); $childDom = $childrenDom->ownerDocument->importNode($childDom, true); $childrenDom->appendChild($childDom); } }
/** * @param $entry * @param $syndicationFeed * @return string */ private static function getMrssEntryXml(entry $entry, syndicationFeed $syndicationFeed = null, $link = null) { if ($syndicationFeed->getMrssParameters()) { $mrssParams = clone $syndicationFeed->getMrssParameters(); } else { $mrssParams = new kMrssParameters(); } $mrssParams->setLink($link); $mrssParams->setFilterByFlavorParams($syndicationFeed->getFlavorParamId()); $mrssParams->setIncludePlayerTag(true); $mrssParams->setPlayerUiconfId($syndicationFeed->getPlayerUiconfId()); $mrssParams->setStorageId($syndicationFeed->getStorageId()); $mrss = kMrssManager::getEntryMrssXml($entry, null, $mrssParams); if (!$mrss) { KalturaLog::err("No MRSS returned for entry [" . $entry->getId() . "]"); return null; } return $mrss->asXML(); }
private function createXml() { // Init the document $this->_doc = new DOMDocument(); $this->_doc->formatOutput = true; $this->_doc->encoding = "UTF-8"; $feedAsXml = kMrssManager::getEntryMrssXml($this->entry); if ($this->distributionProfile->xsltFile && strlen($this->distributionProfile->xsltFile) !== 0) { // custom non empty xslt $xslt = $this->distributionProfile->xsltFile; } else { $xslt = file_get_contents(__DIR__ . "/../xml/tvinci_default.xslt"); } $feedAsString = kXml::transformXmlUsingXslt($feedAsXml->saveXML(), $xslt, $this->createArgumentsForXSLT()); $data = $this->_doc->createElement('data'); $data->appendChild($this->_doc->createCDATASection($feedAsString)); // Create the document's root node $envelopeRootNode = $this->_doc->createElement('s:Envelope'); $this->setAttribute($envelopeRootNode, "xmlns:s", "http://www.w3.org/2003/05/soap-envelope"); $this->setAttribute($envelopeRootNode, "xmlns:a", "http://www.w3.org/2005/08/addressing"); $envelopeHeaderNode = $this->_doc->createElement('s:Header'); $envelopeHeaderActionNode = $this->_doc->createElement('a:Action', 'urn:Iservice/IngestTvinciData'); $this->setAttribute($envelopeHeaderActionNode, "s:mustUnderstand", "1"); $envelopeHeaderNode->appendChild($envelopeHeaderActionNode); $envelopeBodyNode = $this->_doc->createElement('s:Body'); $ingestTvinciDataNode = $this->_doc->createElement('IngestTvinciData'); $tvinciDataRequestNode = $this->_doc->createElement('request'); $this->setAttribute($tvinciDataRequestNode, "xmlns:i", "http://www.w3.org/2001/XMLSchema-instance"); $tvinciDataRequestNode->appendChild($this->_doc->createElement('userName', $this->distributionProfile->username)); $tvinciDataRequestNode->appendChild($this->_doc->createElement('passWord', $this->distributionProfile->password)); // Attach the CDATA section $tvinciDataRequestNode->appendChild($data); $ingestTvinciDataNode->appendChild($tvinciDataRequestNode); $envelopeBodyNode->appendChild($ingestTvinciDataNode); $envelopeRootNode->appendChild($envelopeHeaderNode); $envelopeRootNode->appendChild($envelopeBodyNode); // Attach the root node to the document $this->_doc->appendChild($envelopeRootNode); return $this->getXml(); }
/** * @param AttachmentAsset $attachmentAsset * @param SimpleXMLElement $mrss * @return SimpleXMLElement */ public function contributeAttachmentAssets(AttachmentAsset $attachmentAsset, SimpleXMLElement $mrss) { $attachment = $mrss->addChild('attachment'); $attachment->addAttribute('url', $attachmentAsset->getDownloadUrl(true)); $attachment->addAttribute('attachmentAssetId', $attachmentAsset->getId()); $attachment->addAttribute('format', $attachmentAsset->getContainerFormat()); $tags = $attachment->addChild('tags'); foreach (explode(',', $attachmentAsset->getTags()) as $tag) { $tags->addChild('tag', kMrssManager::stringToSafeXml($tag)); } $attachment->addChild('filename', $attachmentAsset->getFilename()); $attachment->addChild('title', $attachmentAsset->getTitle()); $attachment->addChild('description', $attachmentAsset->getPartnerDescription()); }
/** * Get MRSS by entry id * XML will return as an escaped string * * @action getMrss * @param string $entryId Entry id * @return string */ function getMrssAction($entryId) { $dbEntry = entryPeer::retrieveByPKNoFilter($entryId); if (!$dbEntry || $dbEntry->getType() != KalturaEntryType::MEDIA_CLIP) { throw new KalturaAPIException(KalturaErrors::ENTRY_ID_NOT_FOUND, $entryId); } /* @var $mrss SimpleXMLElement */ $mrss = kMrssManager::getEntryMrssXml($dbEntry); return $mrss->asXML(); }
public static function syndicate(CuePoint $cuePoint, SimpleXMLElement $scenes, SimpleXMLElement $scene = null) { if (!$cuePoint instanceof Annotation) { return $scene; } if (!$scene) { $scene = kCuePointManager::syndicateCuePointXml($cuePoint, $scenes->addChild('scene-annotation')); } $scene->addChild('sceneEndTime', kXml::integerToTime($cuePoint->getEndTime())); if ($cuePoint->getText()) { $scene->addChild('sceneText', kMrssManager::stringToSafeXml($cuePoint->getText())); } if ($cuePoint->getParentId()) { $parentCuePoint = CuePointPeer::retrieveByPK($cuePoint->getParentId()); if ($parentCuePoint) { if ($parentCuePoint->getSystemName()) { $scene->addChild('parent', kMrssManager::stringToSafeXml($parentCuePoint->getSystemName())); } $scene->addChild('parentId', $parentCuePoint->getId()); } } return $scene; }
/** * @param CuePoint $cuePoint * @param SimpleXMLElement $scene * @return SimpleXMLElement the created scene */ public static function syndicateCuePointXml(CuePoint $cuePoint, SimpleXMLElement $scene) { $scene->addAttribute('sceneId', $cuePoint->getId()); if ($cuePoint->getSystemName()) { $scene->addAttribute('systemName', kMrssManager::stringToSafeXml($cuePoint->getSystemName())); } $scene->addChild('sceneStartTime', kXml::integerToTime($cuePoint->getStartTime())); $scene->addChild('createdAt', $cuePoint->getCreatedAt(kMrssManager::FORMAT_DATETIME)); $scene->addChild('updatedAt', $cuePoint->getCreatedAt(kMrssManager::FORMAT_DATETIME)); if ($cuePoint->getPuserId()) { $scene->addChild('userId', kMrssManager::stringToSafeXml($cuePoint->getPuserId())); } if (trim($cuePoint->getTags(), " \r\n\t")) { $tags = $scene->addChild('tags'); foreach (explode(',', $cuePoint->getTags()) as $tag) { $tags->addChild('tag', kMrssManager::stringToSafeXml($tag)); } } return $scene; }
/** * @param string $entryId * @param KalturaIdeticDistributionJobProviderData $providerData * @return DOMDocument */ public static function generateXML($entryId, KalturaIdeticDistributionJobProviderData $providerData) { $entry = entryPeer::retrieveByPKNoFilter($entryId); $mrss = kMrssManager::getEntryMrss($entry); if (!$mrss) { KalturaLog::err("No MRSS returned for entry [{$entryId}]"); return null; } $xml = new KDOMDocument(); if (!$xml->loadXML($mrss)) { KalturaLog::err("Could not load MRSS as XML for entry [{$entryId}]"); return null; } $xslPath = realpath(dirname(__FILE__) . '/../') . '/xml/submit.xsl'; if (!file_exists($xslPath)) { KalturaLog::err("XSL file not found [{$xslPath}]"); return null; } $xsl = new KDOMDocument(); $xsl->load($xslPath); // set variables in the xsl $varNodes = $xsl->getElementsByTagName('variable'); foreach ($varNodes as $varNode) { $nameAttr = $varNode->attributes->getNamedItem('name'); if (!$nameAttr) { continue; } $name = $nameAttr->value; if ($name && $providerData->{$name}) { $varNode->textContent = $providerData->{$name}; $varNode->appendChild($xsl->createTextNode($providerData->{$name})); KalturaLog::debug("Set variable [{$name}] to [{$providerData->{$name}}]"); } } $proc = new XSLTProcessor(); $proc->registerPHPFunctions(); $proc->importStyleSheet($xsl); $xml = $proc->transformToDoc($xml); if (!$xml) { KalturaLog::err("XML Transformation failed"); return null; } // TODO create validation XSD $xsdPath = realpath(dirname(__FILE__) . '/../') . '/xml/submit.xsd'; if (file_exists($xsdPath) && !$xml->schemaValidate($xsdPath)) { KalturaLog::err("Schema validation failed"); return null; } return $xml; }
/** * Get MRSS by entry id * XML will return as an escaped string * * @action getMrss * @param string $entryId Entry id * @param KalturaExtendingItemMrssParameterArray $extendingItemsArray * @return string * @throws KalturaErrors::ENTRY_ID_NOT_FOUND */ function getMrssAction($entryId, KalturaExtendingItemMrssParameterArray $extendingItemsArray = null) { $dbEntry = entryPeer::retrieveByPKNoFilter($entryId); if (!$dbEntry || $dbEntry->getType() != KalturaEntryType::MEDIA_CLIP) { throw new KalturaAPIException(KalturaErrors::ENTRY_ID_NOT_FOUND, $entryId); } $mrssParams = new kMrssParameters(); if ($extendingItemsArray) { $coreExtendingItemArray = $extendingItemsArray->toObjectsArray(); $mrssParams->setItemXpathsToExtend($coreExtendingItemArray); } /* @var $mrss SimpleXMLElement */ $mrss = kMrssManager::getEntryMrssXml($dbEntry, null, $mrssParams); return $mrss->asXML(); }
/** * Returns the log file for bulk upload job * @param BatchJob $batchJob bulk upload batchjob * @return SimpleXMLElement */ public static function getBulkUploadMrssXml($batchJob) { $actionsMap = array(BulkUploadAction::ADD => 'add', BulkUploadAction::UPDATE => 'update', BulkUploadAction::DELETE => 'delete'); $criteria = new Criteria(); $criteria->add(BulkUploadResultPeer::BULK_UPLOAD_JOB_ID, $batchJob->getId()); $criteria->addAscendingOrderByColumn(BulkUploadResultPeer::LINE_INDEX); $criteria->setLimit(100); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); if (!count($bulkUploadResults)) { return null; } header("Content-Type: text/xml; charset=UTF-8"); $data = $batchJob->getData(); $xmlElement = new SimpleXMLElement('<mrss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'); $xmlElement->addAttribute('version', '2.0'); $channel = $xmlElement->addChild('channel'); $handledResults = 0; while (count($bulkUploadResults)) { $handledResults += count($bulkUploadResults); // insert all entries to instance pool $pks = array(); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $pks[] = $bulkUploadResult->getEntryId(); } entryPeer::retrieveByPKs($pks); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $item = $channel->addChild('item'); $result = $item->addChild('result'); $result->addChild('errorDescription', self::stringToSafeXml($bulkUploadResult->getErrorDescription())); // $result->addChild('entryStatus', self::stringToSafeXml($bulkUploadResult->getEntryStatus())); // $result->addChild('entryStatusName', self::stringToSafeXml($title)); $action = isset($actionsMap[$bulkUploadResult->getAction()]) ? $actionsMap[$bulkUploadResult->getAction()] : $actionsMap[BulkUploadAction::ADD]; $item->addChild('action', $action); $entry = $bulkUploadResult->getObject(); if (!$entry) { continue; } kMrssManager::getEntryMrssXml($entry, $item); } if (count($bulkUploadResults) < $criteria->getLimit()) { break; } kMemoryManager::clearMemory(); $criteria->setOffset($handledResults); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); } return $xmlElement; }
/** * @param CaptionAsset $captionAsset * @param SimpleXMLElement $mrss * @return SimpleXMLElement */ public function contributeCaptionAssets(CaptionAsset $captionAsset, SimpleXMLElement $mrss) { $subTitle = $mrss->addChild('subTitle'); $subTitle->addAttribute('href', $captionAsset->getDownloadUrl(true)); $subTitle->addAttribute('captionAssetId', $captionAsset->getId()); $subTitle->addAttribute('isDefault', $captionAsset->getDefault() ? 'true' : 'false'); $subTitle->addAttribute('format', $captionAsset->getContainerFormat()); $subTitle->addAttribute('lang', $captionAsset->getLanguage()); if ($captionAsset->getFlavorParamsId()) { $subTitle->addAttribute('captionParamsId', $captionAsset->getFlavorParamsId()); } $tags = $subTitle->addChild('tags'); foreach (explode(',', $captionAsset->getTags()) as $tag) { $tags->addChild('tag', kMrssManager::stringToSafeXml($tag)); } }
private static function addIsmLink(entry $entry, SimpleXMLElement $mrss) { if (self::$addedIsmUrl) { return; } self::$addedIsmUrl = true; $syncKey = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_ISM); $kalturaFileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey); $urlPrefix = myPartnerUtils::getIisHost($entry->getPartnerId(), StorageProfile::PLAY_FORMAT_HTTP); $iisHost = parse_url($urlPrefix, PHP_URL_HOST); $matches = null; if (preg_match('/(https?:\\/\\/[^\\/]+)(.*)/', $urlPrefix, $matches)) { $urlPrefix = $matches[1]; } $urlPrefix = rtrim($urlPrefix, '/') . '/'; $urlManager = kUrlManager::getUrlManagerByCdn($iisHost, $entry->getId()); if ($kalturaFileSync) { $urlManager->setFileExtension(pathinfo($kalturaFileSync->getFilePath(), PATHINFO_EXTENSION)); } $urlManager->setProtocol(StorageProfile::PLAY_FORMAT_SILVER_LIGHT); $partner = $entry->getPartner(); if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST) { if ($kalturaFileSync) { $url = $urlManager->getFileSyncUrl($kalturaFileSync, false); $mrss->addChild('ismUrl', $urlPrefix . $url); return; } } if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY) { return null; } $externalFileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey); if ($externalFileSync) { $urlManager = kUrlManager::getUrlManagerByStorageProfile($externalFileSync->getDc(), $entry->getId()); $urlManager->setFileExtension(pathinfo($externalFileSync->getFilePath(), PATHINFO_EXTENSION)); $urlManager->setProtocol(StorageProfile::PLAY_FORMAT_SILVER_LIGHT); $url = $urlManager->getFileSyncUrl($externalFileSync, false); $url = ltrim($url, '/'); if (strpos($url, "://") !== false) { $urlPrefix = ''; } $mrss->addChild('ismUrl', $urlPrefix . $url); return; } if ($partner->getStorageServePriority() != StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY) { if ($kalturaFileSync) { $url = $urlManager->getFileSyncUrl($kalturaFileSync, false); $mrss->addChild('ismUrl', $urlPrefix . $url); return; } } }
/** * @param EntryDistribution $entryDistribution * @param SimpleXMLElement $mrss * @return SimpleXMLElement */ public function contributeDistribution(EntryDistribution $entryDistribution, SimpleXMLElement $mrss) { $distributionsProvider = null; $distributionsProfile = DistributionProfilePeer::retrieveByPK($entryDistribution->getDistributionProfileId()); if ($distributionsProfile) { $distributionsProvider = $distributionsProfile->getProvider(); } $distribution = $mrss->addChild('distribution'); $distribution->addAttribute('entryDistributionId', $entryDistribution->getId()); $distribution->addAttribute('distributionProfileId', $entryDistribution->getDistributionProfileId()); if ($distributionsProfile) { $distribution->addAttribute('distributionProfileName', $distributionsProfile->getName()); } if ($distributionsProvider) { $distribution->addAttribute('provider', $distributionsProvider->getName()); if ($distributionsProvider->getType() == DistributionProviderType::GENERIC) { $distribution->addAttribute('distributionProviderId', $distributionsProvider->getId()); } elseif ($distributionsProvider->getType() == DistributionProviderType::SYNDICATION) { if ($distributionsProfile instanceof SyndicationDistributionProfile) { $distribution->addAttribute('feedId', $distributionsProfile->getFeedId()); } } else { $pluginInstances = KalturaPluginManager::getPluginInstances('IKalturaContentDistributionProvider'); foreach ($pluginInstances as $pluginInstance) { if ($pluginInstance->getProvider() === $distributionsProvider) { $pluginInstance->contributeMRSS($entryDistribution, $distribution); } } } } if ($entryDistribution->getRemoteId()) { $distribution->addChild('remoteId', $entryDistribution->getRemoteId()); } if ($entryDistribution->getSunrise(null)) { $distribution->addChild('sunrise', $entryDistribution->getSunrise(null)); } if ($entryDistribution->getSunset(null)) { $distribution->addChild('sunset', $entryDistribution->getSunset(null)); } $flavorAssetIds = explode(',', $entryDistribution->getFlavorAssetIds()); $flavorAssetIdsNode = $distribution->addChild('flavorAssetIds'); foreach ($flavorAssetIds as $flavorAssetId) { $flavorAssetIdsNode->addChild('flavorAssetId', $flavorAssetId); } $thumbAssetIds = explode(',', $entryDistribution->getThumbAssetIds()); $thumbAssetIdsNode = $distribution->addChild('thumbAssetIds'); foreach ($thumbAssetIds as $thumbAssetId) { $thumbAssetIdsNode->addChild('thumbAssetId', $thumbAssetId); } $assetIds = explode(',', $entryDistribution->getAssetIds()); $assetIdsNode = $distribution->addChild('assetIds'); foreach ($assetIds as $assetId) { $assetIdsNode->addChild('assetId', $assetId); } if ($entryDistribution->getErrorDescription()) { $distribution->addChild('errorDescription', kMrssManager::stringToSafeXml($entryDistribution->getErrorDescription())); } $distribution->addChild('createdAt', $entryDistribution->getCreatedAt(kMrssManager::FORMAT_DATETIME)); $distribution->addChild('updatedAt', $entryDistribution->getUpdatedAt(kMrssManager::FORMAT_DATETIME)); if ($entryDistribution->getSubmittedAt(null)) { $distribution->addChild('submittedAt', $entryDistribution->getSubmittedAt(kMrssManager::FORMAT_DATETIME)); } if ($entryDistribution->getLastReport(null)) { $distribution->addChild('lastReport', $entryDistribution->getLastReport(kMrssManager::FORMAT_DATETIME)); } if ($entryDistribution->getDirtyStatus()) { $distribution->addChild('dirtyStatus', $entryDistribution->getDirtyStatus()); } $distribution->addChild('status', $entryDistribution->getStatus()); $distribution->addChild('sunStatus', $entryDistribution->getSunStatus()); if ($entryDistribution->getPlays()) { $distribution->addChild('plays', $entryDistribution->getPlays()); } if ($entryDistribution->getViews()) { $distribution->addChild('views', $entryDistribution->getViews()); } if ($entryDistribution->getErrorNumber()) { $distribution->addChild('errorNumber', $entryDistribution->getErrorNumber()); } if ($entryDistribution->getErrorType()) { $distribution->addChild('errorType', $entryDistribution->getErrorType()); } }
/** * @param SimpleXMLElement $mrss * @param SimpleXMLElement $metadata * @param kMrssParameters $mrssParams * @return SimpleXMLElement */ public function contributeMetadataObject(SimpleXMLElement $mrss, SimpleXMLElement $metadata, kMrssParameters $mrssParams = null, $currentXPath) { $currentXPath .= "/*[local-name()='" . $metadata->getName() . "']"; $metadataObject = $mrss->addChild($metadata->getName()); foreach ($metadata->attributes() as $attributeField => $attributeValue) { $metadataObject->addAttribute($attributeField, $attributeValue); } foreach ($metadata as $metadataField => $metadataValue) { if ($metadataValue instanceof SimpleXMLElement && count($metadataValue)) { $this->contributeMetadataObject($metadataObject, $metadataValue, $mrssParams, $currentXPath); } else { $metadataObject->addChild($metadataField, kString::stringToSafeXml($metadataValue)); $itemXPath = $currentXPath . "/*[local-name()='{$metadataField}']"; if ($mrssParams && is_array($mrssParams->getItemXpathsToExtend()) && in_array($itemXPath, $mrssParams->getItemXpathsToExtend())) { $relatedEntry = entryPeer::retrieveByPK((string) $metadataValue); if ($relatedEntry) { $relatedItemField = $metadataObject->addChild($metadataField . '_item'); $recursionMrssParams = null; if ($mrssParams) { $recursionMrssParams = clone $mrssParams; $recursionMrssParams->setItemXpathsToExtend(array()); // stop the recursion } $relatedEntryMrss = kMrssManager::getEntryMrssXml($relatedEntry, $relatedItemField, $recursionMrssParams); } } } } }
public static function syndicate(CuePoint $cuePoint, SimpleXMLElement $scenes, SimpleXMLElement $scene = null) { if (!$cuePoint instanceof CodeCuePoint) { return $scene; } if (!$scene) { $scene = kCuePointManager::syndicateCuePointXml($cuePoint, $scenes->addChild('scene-code-cue-point')); } if ($cuePoint->getEndTime()) { $scene->addChild('sceneEndTime', kXml::integerToTime($cuePoint->getEndTime())); } $scene->addChild('code', kMrssManager::stringToSafeXml($cuePoint->getName())); if ($cuePoint->getText()) { $scene->addChild('description', kMrssManager::stringToSafeXml($cuePoint->getText())); } return $scene; }
private static function addIsmLink(entry $entry, SimpleXMLElement $mrss) { if (self::$addedIsmUrl) { return; } self::$addedIsmUrl = true; $syncKey = $entry->getSyncKey(entry::FILE_SYNC_ENTRY_SUB_TYPE_ISM); $kalturaFileSync = kFileSyncUtils::getReadyInternalFileSyncForKey($syncKey); $urlManager = DeliveryProfilePeer::getDeliveryProfile($entry->getId(), PlaybackProtocol::SILVER_LIGHT); if (!$urlManager) { return; } $urlManager->initDeliveryDynamicAttributes($kalturaFileSync); $partner = $entry->getPartner(); if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_FIRST) { if ($kalturaFileSync) { $urlPrefix = $urlManager->getUrl(); $url = $urlManager->getFileSyncUrl($kalturaFileSync, false); $mrss->addChild('ismUrl', $urlPrefix . $url); return; } } if (!$partner->getStorageServePriority() || $partner->getStorageServePriority() == StorageProfile::STORAGE_SERVE_PRIORITY_KALTURA_ONLY) { return null; } $externalFileSync = kFileSyncUtils::getReadyExternalFileSyncForKey($syncKey); if ($externalFileSync) { $urlManager = DeliveryProfilePeer::getRemoteDeliveryByStorageId(DeliveryProfileDynamicAttributes::init($externalFileSync->getDc(), $entry->getId(), PlaybackProtocol::SILVER_LIGHT)); if (is_null($urlManager)) { return; } $url = $urlManager->getFileSyncUrl($externalFileSync, false); $urlPrefix = $urlManager->getUrl(); $mrss->addChild('ismUrl', $urlPrefix . $url); return; } if ($partner->getStorageServePriority() != StorageProfile::STORAGE_SERVE_PRIORITY_EXTERNAL_ONLY) { if ($kalturaFileSync) { $url = $urlManager->getFileSyncUrl($kalturaFileSync, false); $mrss->addChild('ismUrl', $urlPrefix . $url); return; } } }
public function loadProperties(KalturaDistributionJobData $distributionJobData, KalturaGenericDistributionProfile $distributionProfile, $action) { $actionName = self::$actionAttributes[$action]; $genericProviderAction = GenericDistributionProviderActionPeer::retrieveByProviderAndAction($distributionProfile->genericProviderId, $action); if (!$genericProviderAction) { KalturaLog::err("Generic provider [{$distributionProfile->genericProviderId}] action [{$actionName}] not found"); return; } if (!$distributionJobData->entryDistribution) { KalturaLog::err("Entry Distribution object not provided"); return; } if (!$distributionProfile->{$actionName}->protocol) { $distributionProfile->{$actionName}->protocol = $genericProviderAction->getProtocol(); } if (!$distributionProfile->{$actionName}->serverUrl) { $distributionProfile->{$actionName}->serverUrl = $genericProviderAction->getServerAddress(); } if (!$distributionProfile->{$actionName}->serverPath) { $distributionProfile->{$actionName}->serverPath = $genericProviderAction->getRemotePath(); } if (!$distributionProfile->{$actionName}->username) { $distributionProfile->{$actionName}->username = $genericProviderAction->getRemoteUsername(); } if (!$distributionProfile->{$actionName}->password) { $distributionProfile->{$actionName}->password = $genericProviderAction->getRemotePassword(); } if (!$distributionProfile->{$actionName}->ftpPassiveMode) { $distributionProfile->{$actionName}->ftpPassiveMode = $genericProviderAction->getFtpPassiveMode(); } if (!$distributionProfile->{$actionName}->httpFieldName) { $distributionProfile->{$actionName}->httpFieldName = $genericProviderAction->getHttpFieldName(); } if (!$distributionProfile->{$actionName}->httpFileName) { $distributionProfile->{$actionName}->httpFileName = $genericProviderAction->getHttpFileName(); } $entry = entryPeer::retrieveByPKNoFilter($distributionJobData->entryDistribution->entryId); if (!$entry) { KalturaLog::err("Entry [" . $distributionJobData->entryDistribution->entryId . "] not found"); return; } $mrss = kMrssManager::getEntryMrss($entry); if (!$mrss) { KalturaLog::err("MRSS not returned for entry [" . $entry->getId() . "]"); return; } $xml = new KDOMDocument(); if (!$xml->loadXML($mrss)) { KalturaLog::err("MRSS not is not valid XML:\n{$mrss}\n"); return; } $key = $genericProviderAction->getSyncKey(GenericDistributionProviderAction::FILE_SYNC_DISTRIBUTION_PROVIDER_ACTION_MRSS_TRANSFORMER); if (kFileSyncUtils::fileSync_exists($key)) { $xslPath = kFileSyncUtils::getLocalFilePathForKey($key); if ($xslPath) { $xsl = new KDOMDocument(); $xsl->load($xslPath); // set variables in the xsl $varNodes = $xsl->getElementsByTagName('variable'); foreach ($varNodes as $varNode) { $nameAttr = $varNode->attributes->getNamedItem('name'); if (!$nameAttr) { continue; } $name = $nameAttr->value; if ($name && $distributionJobData->{$name}) { $varNode->textContent = $distributionJobData->{$name}; $varNode->appendChild($xsl->createTextNode($distributionJobData->{$name})); } } $proc = new XSLTProcessor(); $proc->registerPHPFunctions(kXml::getXslEnabledPhpFunctions()); $proc->importStyleSheet($xsl); $xml = $proc->transformToDoc($xml); if (!$xml) { KalturaLog::err("Transform returned false"); return; } } } $key = $genericProviderAction->getSyncKey(GenericDistributionProviderAction::FILE_SYNC_DISTRIBUTION_PROVIDER_ACTION_MRSS_VALIDATOR); if (kFileSyncUtils::fileSync_exists($key)) { $xsdPath = kFileSyncUtils::getLocalFilePathForKey($key); if ($xsdPath && !$xml->schemaValidate($xsdPath)) { KalturaLog::err("Inavlid XML:\n" . $xml->saveXML()); KalturaLog::err("Schema [{$xsdPath}]:\n" . file_get_contents($xsdPath)); return; } } $this->xml = $xml->saveXML(); $key = $genericProviderAction->getSyncKey(GenericDistributionProviderAction::FILE_SYNC_DISTRIBUTION_PROVIDER_ACTION_RESULTS_TRANSFORMER); if (kFileSyncUtils::fileSync_exists($key)) { $this->resultParseData = kFileSyncUtils::file_get_contents($key, true, false); } $this->resultParserType = $genericProviderAction->getResultsParser(); }
protected function getFieldValuesXml(EntryDistribution $entryDistribution, $fieldName = null) { $entry = entryPeer::retrieveByPKNoFilter($entryDistribution->getEntryId()); if (!$entry) { KalturaLog::err('Entry not found with ID [' . $entryDistribution->getEntryId() . ']'); return null; } // set the default criteria to use the current entry distribution partner id (it is restored later) // this is needed for related entries under kMetadataMrssManager which is using retrieveByPK without the correct partner id filter $oldEntryCriteria = entryPeer::getCriteriaFilter()->getFilter(); myPartnerUtils::resetPartnerFilter('entry'); myPartnerUtils::addPartnerToCriteria('entry', $entryDistribution->getPartnerId(), true); try { $mrss = null; $mrssParams = new kMrssParameters(); if ($this->getItemXpathsToExtend()) { $mrssParams->setItemXpathsToExtend($this->getItemXpathsToExtend()); } $mrss = kMrssManager::getEntryMrssXml($entry, $mrss, $mrssParams); $mrssStr = $mrss->asXML(); } catch (Exception $e) { // restore the original criteria so it will not get stuck due to the exception entryPeer::getCriteriaFilter()->setFilter($oldEntryCriteria); throw $e; } // restore the original criteria entryPeer::getCriteriaFilter()->setFilter($oldEntryCriteria); if (!$mrssStr) { KalturaLog::err('No MRSS returned for entry [' . $entry->getId() . ']'); return null; } $mrssObj = new DOMDocument(); if (!$mrssObj->loadXML($mrssStr)) { KalturaLog::err('Error loading MRSS XML object for entry [' . $entry->getId() . ']'); return null; } $xslObj = new DOMDocument(); $xslStr = $this->getFieldValuesXslt($entryDistribution, $fieldName); $xslStr = trim($xslStr); if (!$xslObj->loadXML($xslStr)) { KalturaLog::err('Error loading distribution profile XSLT for profile ID [' . $this->getId() . ']'); return null; } $proc = new XSLTProcessor(); $proc->registerPHPFunctions(kXml::getXslEnabledPhpFunctions()); $proc->importStyleSheet($xslObj); $resultXml = $proc->transformToXml($mrssObj); //in order to keep the UTF-8 encoding we transformToXml http://www.php.net/manual/en/xsltprocessor.transformtodoc.php#69305 $resultXmlObj = new DOMDocument(); $resultXmlObj->loadXML($resultXml); if (!$resultXmlObj) { KalturaLog::err('Error transforming XML for distribution profile [' . $this->getId() . '] and entry id [' . $entry->getId() . ']'); return null; } /* DEBUG logs KalturaLog::log('entry mrss = '.$mrssStr); KalturaLog::log('profile xslt = '.$xslStr); */ KalturaLog::debug('Result XML: ' . $resultXmlObj->saveXML()); return $resultXmlObj; }
public function getEntryMrssDoc(EntryDistribution $entryDistribution) { $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId()); // set the default criteria to use the current entry distribution partner id (it is restored later) // this is needed for related entries under kMetadataMrssManager which is using retrieveByPK without the correct partner id filter $oldEntryCriteria = entryPeer::getCriteriaFilter()->getFilter(); entryPeer::setDefaultCriteriaFilter(); entryPeer::addPartnerToCriteria($this->getPartnerId(), true); try { $mrss = null; $mrssParams = new kMrssParameters(); if ($this->getItemXpathsToExtend()) { $mrssParams->setItemXpathsToExtend($this->getItemXpathsToExtend()); } $mrss = kMrssManager::getEntryMrssXml($entry, $mrss, $mrssParams); $mrssStr = $mrss->asXML(); } catch (Exception $e) { // restore the original criteria so it will not get stuck due to the exception entryPeer::getCriteriaFilter()->setFilter($oldEntryCriteria); throw $e; } // restore the original criteria entryPeer::getCriteriaFilter()->setFilter($oldEntryCriteria); $mrssObj = new DOMDocument(); if (!$mrssObj->loadXML($mrssStr)) { throw new Exception('Entry mrss xml is not valid'); } return $mrssObj; }
/** * Returns the log file for bulk upload job * @param BatchJob $batchJob bulk upload batchjob * @return SimpleXMLElement */ public static function getBulkUploadMrssXml($batchJob) { $actionsMap = array(BulkUploadAction::ADD => 'add', BulkUploadAction::UPDATE => 'update', BulkUploadAction::DELETE => 'delete'); $bulkUploadResults = BulkUploadResultPeer::retrieveByBulkUploadId($batchJob->getId()); if (!count($bulkUploadResults)) { return null; } header("Content-Type: text/xml; charset=UTF-8"); $data = $batchJob->getData(); $xmlElement = new SimpleXMLElement('<mrss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'); $xmlElement->addAttribute('version', '2.0'); // $xmlElement->addAttribute('xmlns:content', 'http://www.w3.org/2001/XMLSchema-instance'); // $xmlElement->addAttribute('xmlns', 'http://' . kConf::get('www_host') . '/' . SchemaType::SYNDICATION); // $xmlElement->addAttribute('xsi:noNamespaceSchemaLocation', 'http://' . kConf::get('cdn_host') . '/api_v3/service/schema/action/serve/type/' . SchemaType::SYNDICATION); $channel = $xmlElement->addChild('channel'); // insert all entries to instance pool $pks = array(); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $pks[] = $bulkUploadResult->getEntryId(); } entryPeer::retrieveByPKs($pks); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $item = $channel->addChild('item'); $result = $item->addChild('result'); $result->addChild('errorDescription', self::stringToSafeXml($bulkUploadResult->getErrorDescription())); // $result->addChild('entryStatus', self::stringToSafeXml($bulkUploadResult->getEntryStatus())); // $result->addChild('entryStatusName', self::stringToSafeXml($title)); $action = isset($actionsMap[$bulkUploadResult->getAction()]) ? $actionsMap[$bulkUploadResult->getAction()] : $actionsMap[BulkUploadAction::ADD]; $item->addChild('action', $action); $entry = $bulkUploadResult->getObject(); if (!$entry) { continue; } kMrssManager::getEntryMrssXml($entry, $item); } return $xmlElement; }
$field = $matches[1]; // $providerData->$field = $matches[2]; } } $fileTransferMgr = kFileTransferMgr::getInstance(kFileTransferMgrType::FTP); if(!$fileTransferMgr) throw new Exception("SFTP manager not loaded"); $fileTransferMgr->login('ftp-int.vzw.real.com', 'vp_foxsports', 'X4ul3ap'); print_r($fileTransferMgr->listDir("/pub/in")); // $fileTransferMgr->putFile($destFile, $srcFile, true); return;*/ $entry = entryPeer::retrieveByPKNoFilter($entryId); $mrss = kMrssManager::getEntryMrss($entry); file_put_contents('mrss.xml', $mrss); KalturaLog::debug("MRSS [{$mrss}]"); $distributionJobData = new KalturaDistributionSubmitJobData(); $dbDistributionProfile = DistributionProfilePeer::retrieveByPK(3); $distributionProfile = new KalturaDailymotionDistributionProfile(); $distributionProfile->fromObject($dbDistributionProfile); $distributionJobData->distributionProfileId = $distributionProfile->id; $distributionJobData->distributionProfile = $distributionProfile; $dbEntryDistribution = EntryDistributionPeer::retrieveByPK(24); $entryDistribution = new KalturaEntryDistribution(); $entryDistribution->fromObject($dbEntryDistribution); $distributionJobData->entryDistributionId = $entryDistribution->id; $distributionJobData->entryDistribution = $entryDistribution; $myp = new DailymotionDistributionProfile(); print_r($myp->validateForSubmission($dbEntryDistribution, "submit"));
/** * @return string path value * @param entry $entry * @param string $xslStr */ protected function getPathValue(entry $entry, $xslStr) { // set the default criteria to use the current entry distribution partner id (it is restored later) // this is needed for related entries under kMetadataMrssManager which is using retrieveByPK without the correct partner id filter $oldEntryCriteria = entryPeer::getCriteriaFilter()->getFilter(); myPartnerUtils::resetPartnerFilter('entry'); myPartnerUtils::addPartnerToCriteria('entry', $entry->getPartnerId(), true); $mrss = null; $mrssParams = new kMrssParameters(); $mrssParams->setStatuses(array(flavorAsset::ASSET_STATUS_READY, flavorAsset::ASSET_STATUS_EXPORTING)); $mrss = kMrssManager::getEntryMrssXml($entry, $mrss, $mrssParams); $mrssStr = $mrss->asXML(); // restore the original criteria entryPeer::getCriteriaFilter()->setFilter($oldEntryCriteria); if (!$mrssStr) { KalturaLog::err('No MRSS returned for entry [' . $entry->getId() . ']'); return null; } $mrssObj = new DOMDocument(); if (!$mrssObj->loadXML($mrssStr)) { KalturaLog::err('Error loading MRSS XML object for entry [' . $entry->getId() . ']'); return null; } $xslObj = new DOMDocument(); $xslStr = trim($xslStr); if (!$xslObj->loadXML($xslStr)) { KalturaLog::err('Error loading XSL'); return null; } $proc = new XSLTProcessor(); $proc->registerPHPFunctions(kXml::getXslEnabledPhpFunctions()); $proc->importStyleSheet($xslObj); $resultXmlObj = $proc->transformToDoc($mrssObj); if (!$resultXmlObj) { KalturaLog::err('Error transforming XML for entry id [' . $entry->getId() . ']'); return null; } /* DEBUG logs KalturaLog::log('entry mrss = '.$mrssStr); KalturaLog::log('profile xslt = '.$xslStr); */ KalturaLog::debug('Result XML: ' . $resultXmlObj->saveXML()); $xpath = new DOMXPath($resultXmlObj); $fieldElement = $xpath->query("//path_value")->item(0); if (!$fieldElement) { KalturaLog::err('Cannot find element <path_value> in XML'); return null; } $fieldValue = $fieldElement->nodeValue; return $fieldValue; }
public static function syndicate(CuePoint $cuePoint, SimpleXMLElement $scenes, SimpleXMLElement $scene = null) { if (!$cuePoint instanceof AdCuePoint) { return $scene; } if (!$scene) { $scene = kCuePointManager::syndicateCuePointXml($cuePoint, $scenes->addChild('scene-ad-cue-point')); } if ($cuePoint->getEndTime()) { $scene->addChild('sceneEndTime', kXml::integerToTime($cuePoint->getEndTime())); } if ($cuePoint->getName()) { $scene->addChild('sceneTitle', kMrssManager::stringToSafeXml($cuePoint->getName())); } if ($cuePoint->getSourceUrl()) { $scene->addChild('sourceUrl', htmlspecialchars($cuePoint->getSourceUrl())); } $scene->addChild('adType', $cuePoint->getAdType()); $scene->addChild('protocolType', $cuePoint->getSubType()); return $scene; }
/** * @param $entry * @param $syndicationFeed * @return string */ private function getMrssEntryXml(entry $entry, syndicationFeed $syndicationFeed = null, $link = null) { if ($syndicationFeed->getMrssParameters()) { $mrssParams = clone $syndicationFeed->getMrssParameters(); } else { $mrssParams = new kMrssParameters(); } $mrssParams->setLink($link); $mrssParams->setFilterByFlavorParams($syndicationFeed->getFlavorParamId()); $mrssParams->setIncludePlayerTag(true); $mrssParams->setPlayerUiconfId($syndicationFeed->getPlayerUiconfId()); $mrssParams->setStorageId($syndicationFeed->getStorageId()); $mrssParams->setServePlayManifest($syndicationFeed->getServePlayManifest()); $mrssParams->setPlayManifestClientTag('feed:' . $syndicationFeed->getId()); $features = null; if ($syndicationFeed->getUseCategoryEntries()) { KalturaLog::info("Getting entry's associated categories from the category_entry table"); $features = array(ObjectFeatureType::CATEGORY_ENTRIES); } $mrss = kMrssManager::getEntryMrssXml($entry, null, $mrssParams, $features); if (!$mrss) { KalturaLog::err("No MRSS returned for entry [" . $entry->getId() . "]"); return null; } return $mrss->asXML(); }