/** * @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(); }
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; }
/** * 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(); }
/** * @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); } } } } }
/** * @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; }
/** * 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; }
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; }
/** * 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; }
/** * 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(); }
/** * @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(); }