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);
 }
 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;
 }
Beispiel #4
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();
 }
Beispiel #5
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');
 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;
 }
Beispiel #7
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.";