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; }
/** * 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(); }
<?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; }
/** * 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.";