public function toObject($dbObject = null, $skip = array())
 {
     parent::toObject($dbObject, $skip);
     $mrssParams = $dbObject->getMrssParameters();
     if (!$mrssParams) {
         $mrssParams = new kMrssParameters();
     }
     if ($this->itemXpathsToExtend) {
         $itemXpathsToExtend = $this->itemXpathsToExtend->toObjectsArray();
         $mrssParams->setItemXpathsToExtend($itemXpathsToExtend);
     }
     $dbObject->setMrssParameters($mrssParams);
 }
 public function toObject($dbObject = null, $skip = array())
 {
     parent::toObject($dbObject, $skip);
     $mrssParams = $dbObject->getMrssParameters();
     if (!$mrssParams) {
         $mrssParams = new kMrssParameters();
     }
     if ($this->itemXpathsToExtend) {
         $itemXpathsToExtend = array();
         foreach ($this->itemXpathsToExtend as $curXpath) {
             $itemXpathsToExtend[] = $curXpath->value;
         }
         $mrssParams->setItemXpathsToExtend($itemXpathsToExtend);
     }
     $dbObject->setMrssParameters($mrssParams);
 }
 /**
  * @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();
 }
 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 #5
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 kMrssParameters $mrssParams
  */
 public function setMrssParameters(kMrssParameters $mrssParams)
 {
     if (is_array($mrssParams->getItemXpathsToExtend())) {
         $this->putInCustomData(self::CUSTOM_DATA_MRSS_PARAMETERS, $mrssParams);
     }
 }
Example #7
0
<?php

if ($argc != 4) {
    echo "Arguments missing.\n\n";
    echo "Usage: php " . __FILE__ . " {feed id} {encoding} {realrun / dryrun}\n";
    exit;
}
$feedId = $argv[1];
$encoding = $argv[2];
$dryRun = $argv[3] != 'realrun';
require_once __DIR__ . '/../bootstrap.php';
KalturaStatement::setDryRun($dryRun);
$feed = syndicationFeedPeer::retrieveByPK($feedId);
$mrssParameters = $feed->getMrssParameters();
if (!$mrssParameters) {
    $mrssParameters = new kMrssParameters();
    $mrssParameters->setItemXpathsToExtend(array());
}
$mrssParameters->setEncoding($encoding);
$feed->setMrssParameters($mrssParameters);
$feed->save();
KalturaLog::debug('Done');
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;
 }
 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 #10
0
 /**
  * Function goes over finished MRSS XML and adds the required extending items in the appropriate slots
  * @param SimpleXMLElement $mrss
  * @param kMrssParameters $mrssParams
  * @return SimpleXMLElement
  */
 protected static function addExtendingItemsToMrss(SimpleXMLElement $mrss, kMrssParameters $mrssParams)
 {
     foreach ($mrssParams->getItemXpathsToExtend() as $itemXPathToExtend) {
         /* @var $itemXPathToExtend KExtendingItemMrssParameter */
         $xmlNodesToExtend = $mrss->xpath($itemXPathToExtend->getXpath());
         //metdata/entryIdX   /entry/customMetadata/metadata/entryIdY
         foreach ($xmlNodesToExtend as $xmlNodeToExtend) {
             /* @var $xmlNodeToExtend SimpleXMLElement */
             $identifierValue = strval($xmlNodeToExtend[0]);
             $extendingObject = $itemXPathToExtend->getIdentifier()->retrieveByIdentifier($identifierValue);
             if ($extendingObject) {
                 $mrssParams->setItemXpathsToExtend(array());
                 $featuresArray = strlen($itemXPathToExtend->getIdentifier()->getExtendedFeatures()) ? explode(',', $itemXPathToExtend->getIdentifier()->getExtendedFeatures()) : null;
                 if ($itemXPathToExtend->getExtensionMode() == MrssExtensionMode::APPEND) {
                     $parents = $xmlNodeToExtend->xpath("parent::*");
                     self::addExtendingItemNode($extendingObject, $identifierValue, $parents[0], $xmlNodeToExtend->getName(), $mrssParams, $featuresArray);
                 } else {
                     $xmlNodeToExtend[0] = null;
                     self::addExtendingItemNode($extendingObject, $identifierValue, $xmlNodeToExtend, $xmlNodeToExtend->getName(), $mrssParams, $featuresArray);
                 }
             }
         }
     }
     return $mrss;
 }
/*
 * Before running the script please insert the following two parameters
 */
//-------------------------------------------------------------------------------------------------------------
$syndicationFeedId = null;
// TODO: insert valid syndication feed Id
$metadataFieldNames = array('FIRST_FIELD', 'SECOND_FIELD');
//-------------------------------------------------------------------------------------------------------------
require_once dirname(__FILE__) . '/../bootstrap.php';
KAutoloader::addClassPath(KAutoloader::buildPath(KALTURA_ROOT_PATH, "plugins", "*"));
KAutoloader::setClassMapFilePath(kConf::get("cache_root_path") . '/scripts/' . basename(__FILE__) . '.cache');
KAutoloader::register();
// don't add to database if one of the parameters is missing or is an empty string
if (!$syndicationFeedId) {
    die('ERROR - Missing syndication feed id');
}
$syndicationFeed = syndicationFeedPeer::retrieveByPK($syndicationFeedId);
if (!$syndicationFeed) {
    die("ERROR - No such syndication feed with id [{$syndicationFeedId}]." . PHP_EOL);
}
//setting custom data fields of the syndication feed
$itemXpathsToExtend = array();
foreach ($metadataFieldNames as $fieldName) {
    $itemXpathsToExtend[] = "/*[local-name()='metadata']/*[local-name()='" . $fieldName . "']";
}
$mrssParams = new kMrssParameters();
$mrssParams->setItemXpathsToExtend($itemXpathsToExtend);
$syndicationFeed->setMrssParameters($mrssParams);
$syndicationFeed->save();
echo "Done.";
 /**
  * @param entry $entry
  * @param SimpleXMLElement $mrss
  * @param kMrssParameters $mrssParams
  * @return SimpleXMLElement
  */
 public static function getEntryMrssXml(entry $entry, SimpleXMLElement $mrss = null, kMrssParameters $mrssParams = null)
 {
     if ($mrss === null) {
         $mrss = new SimpleXMLElement('<item/>');
     }
     $mrss->addChild('entryId', $entry->getId());
     if ($entry->getReferenceID()) {
         $mrss->addChild('referenceID', $entry->getReferenceID());
     }
     $mrss->addChild('createdAt', $entry->getCreatedAt(null));
     $mrss->addChild('updatedAt', $entry->getUpdatedAt(null));
     $mrss->addChild('title', self::stringToSafeXml($entry->getName()));
     if ($mrssParams && !is_null($mrssParams->getLink())) {
         $mrss->addChild('link', $mrssParams->getLink() . $entry->getId());
     }
     $mrss->addChild('type', $entry->getType());
     $mrss->addChild('licenseType', $entry->getLicenseType());
     $mrss->addChild('userId', $entry->getPuserId(true));
     $mrss->addChild('name', self::stringToSafeXml($entry->getName()));
     $mrss->addChild('status', self::stringToSafeXml($entry->getStatus()));
     $mrss->addChild('description', self::stringToSafeXml($entry->getDescription()));
     $thumbnailUrl = $mrss->addChild('thumbnailUrl');
     $thumbnailUrl->addAttribute('url', $entry->getThumbnailUrl());
     if (trim($entry->getTags(), " \r\n\t")) {
         $tags = $mrss->addChild('tags');
         foreach (explode(',', $entry->getTags()) as $tag) {
             $tags->addChild('tag', self::stringToSafeXml($tag));
         }
     }
     $categories = explode(',', $entry->getCategories());
     foreach ($categories as $category) {
         $category = trim($category);
         if ($category) {
             $categoryNode = $mrss->addChild('category', self::stringToSafeXml($category));
             if (strrpos($category, '>') > 0) {
                 $categoryNode->addAttribute('name', self::stringToSafeXml(substr($category, strrpos($category, '>') + 1)));
             } else {
                 $categoryNode->addAttribute('name', self::stringToSafeXml($category));
             }
         }
     }
     $mrss->addChild('partnerData', self::stringToSafeXml($entry->getPartnerData()));
     if ($entry->getAccessControlId()) {
         $mrss->addChild('accessControlId', $entry->getAccessControlId());
     }
     if ($entry->getConversionProfileId()) {
         $mrss->addChild('conversionProfileId', $entry->getConversionProfileId());
     }
     if ($entry->getStartDate(null)) {
         $mrss->addChild('startDate', $entry->getStartDate(null));
     }
     if ($entry->getEndDate(null)) {
         $mrss->addChild('endDate', $entry->getEndDate(null));
     }
     switch ($entry->getType()) {
         case entryType::MEDIA_CLIP:
             self::appendMediaEntryMrss($entry, $mrss);
             break;
         case entryType::MIX:
             self::appendMixEntryMrss($entry, $mrss);
             break;
         case entryType::PLAYLIST:
             self::appendPlaylistEntryMrss($entry, $mrss);
             break;
         case entryType::DATA:
             self::appendDataEntryMrss($entry, $mrss);
             break;
         case entryType::LIVE_STREAM:
             self::appendLiveStreamEntryMrss($entry, $mrss);
             break;
         default:
             break;
     }
     $assets = assetPeer::retrieveReadyByEntryId($entry->getId());
     foreach ($assets as $asset) {
         if ($mrssParams && !is_null($mrssParams->getFilterByFlavorParams()) && $asset->getFlavorParamsId() != $mrssParams->getFilterByFlavorParams()) {
             continue;
         }
         if ($asset instanceof flavorAsset) {
             self::appendFlavorAssetMrss($asset, $mrss, $mrssParams);
         }
         if ($asset instanceof thumbAsset) {
             self::appendThumbAssetMrss($asset, $mrss);
         }
     }
     $mrssContributors = self::getMrssContributors();
     if (count($mrssContributors)) {
         foreach ($mrssContributors as $mrssContributor) {
             $mrssContributor->contribute($entry, $mrss, $mrssParams);
         }
     }
     if ($mrssParams && $mrssParams->getIncludePlayerTag()) {
         $uiconfId = !is_null($mrssParams->getPlayerUiconfId()) ? '/ui_conf_id/' . $mrssParams->getPlayerUiconfId() : '';
         $playerUrl = 'http://' . kConf::get('www_host') . '/kwidget/wid/_' . $entry->getPartnerId() . '/entry_id/' . $entry->getId() . '/ui_conf' . ($uiconfId ? "/{$uiconfId}" : '');
         $player = $mrss->addChild('player');
         $player->addAttribute('url', $playerUrl);
     }
     return $mrss;
 }
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();
 }