/**
  * @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;
 }
Example #6
0
 /**
  * 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);
                 }
             }
         }
     }
 }
Example #8
0
 /**
  * @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;
 }
Example #11
0
 /**
  * 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();
 }
Example #13
0
 /**
  * @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();
 }