예제 #1
0
 public function handleFooter()
 {
     $mrss = $this->getKalturaMrssXml($this->syndicationFeed->name, $this->syndicationFeed->feedLandingPage, $this->syndicationFeed->feedDescription);
     if ($this->kalturaXslt) {
         $mrss = kXml::transformXmlUsingXslt($mrss, $this->kalturaXslt);
     }
     $divideHeaderFromFooter = strpos($mrss, self::ITEMS_PLACEHOLDER) + strlen(self::ITEMS_PLACEHOLDER);
     $mrss = substr($mrss, $divideHeaderFromFooter);
     return $mrss;
 }
예제 #2
0
 public function updateFromXSLImpl($id, $xslData)
 {
     $dbMetadataObject = MetadataPeer::retrieveByPK($id);
     if (!$dbMetadataObject) {
         throw new KalturaAPIException(MetadataErrors::METADATA_NOT_FOUND);
     }
     $dbMetadataObjectFileSyncKey = $dbMetadataObject->getSyncKey(Metadata::FILE_SYNC_METADATA_DATA);
     $xsltErrors = array();
     $transformMetadataObjectData = kXml::transformXmlUsingXslt(kFileSyncUtils::file_get_contents($dbMetadataObjectFileSyncKey), $xslData, array(), $xsltErrors);
     if (count($xsltErrors)) {
         throw new KalturaAPIException(MetadataErrors::XSLT_VALIDATION_ERROR, implode(',', $xsltErrors));
     }
     return $this->updateImpl($id, $transformMetadataObjectData);
 }
 public function handleCustomData($objectId, SimpleXMLElement $customData)
 {
     $action = KBulkUploadEngine::$actionsMap[KalturaBulkUploadAction::REPLACE];
     if (isset($customData->action)) {
         $action = strtolower($customData->action);
     }
     $metadataProfileId = null;
     if (!empty($customData['metadataProfileId'])) {
         $metadataProfileId = (int) $customData['metadataProfileId'];
     }
     if (!$metadataProfileId && !empty($customData['metadataProfile'])) {
         $metadataProfileId = $this->getMetadataProfileId($customData['metadataProfile']);
     }
     if (!$metadataProfileId) {
         throw new KalturaBatchException("Missing custom data metadataProfile attribute", KalturaBatchJobAppErrors::BULK_MISSING_MANDATORY_PARAMETER);
     }
     $metadataPlugin = KalturaMetadataClientPlugin::get(KBatchBase::$kClient);
     $metadataFilter = new KalturaMetadataFilter();
     $metadataFilter->metadataObjectTypeEqual = $this->objectType;
     $metadataFilter->objectIdEqual = $objectId;
     $metadataFilter->metadataProfileIdEqual = $metadataProfileId;
     $pager = new KalturaFilterPager();
     $pager->pageSize = 1;
     $metadataListResponse = $metadataPlugin->metadata->listAction($metadataFilter, $pager);
     $metadataId = null;
     $metadata = null;
     if (is_array($metadataListResponse->objects) && count($metadataListResponse->objects) > 0) {
         $metadata = reset($metadataListResponse->objects);
         $metadataId = $metadata->id;
     }
     switch ($action) {
         case KBulkUploadEngine::$actionsMap[KalturaBulkUploadAction::TRANSFORM_XSLT]:
             if (!isset($customData->xslt)) {
                 throw new KalturaBatchException($this->containerName . '->' . $this->nodeName . "->xslt element is missing", KalturaBatchJobAppErrors::BULK_ELEMENT_NOT_FOUND);
             }
             if ($metadata) {
                 $metadataXml = $metadata->xml;
             } else {
                 $metadataXml = '<metadata></metadata>';
             }
             $decodedXslt = kXml::decodeXml($customData->xslt);
             $metadataXml = kXml::transformXmlUsingXslt($metadataXml, $decodedXslt);
             break;
         case KBulkUploadEngine::$actionsMap[KalturaBulkUploadAction::REPLACE]:
             if (!isset($customData->xmlData)) {
                 throw new KalturaBatchException($this->containerName . '->' . $this->nodeName . "->xmlData element is missing", KalturaBatchJobAppErrors::BULK_ELEMENT_NOT_FOUND);
             }
             $metadataXmlObject = $customData->xmlData->children();
             $metadataXml = $metadataXmlObject->asXML();
             break;
         default:
             throw new KalturaBatchException($this->containerName . '->' . $this->nodeName . "->action: {$action} is not supported", KalturaBatchJobAppErrors::BULK_ACTION_NOT_SUPPORTED);
     }
     if ($metadataId) {
         $metadataPlugin->metadata->update($metadataId, $metadataXml);
     } else {
         $metadataPlugin->metadata->add($metadataProfileId, $this->objectType, $objectId, $metadataXml);
     }
 }
 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();
 }
 private function transformMetadata($metadataProfileId, $xmlData)
 {
     $result = null;
     $metadataProfile = MetadataProfilePeer::retrieveByPK($metadataProfileId);
     if (!$metadataProfile) {
         KalturaLog::err('Cannot find metadata profile id [' . $metadataProfileId . ']');
         return null;
     }
     $metadataXsltKey = $metadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_XSLT);
     if (!kFileSyncUtils::file_exists($metadataXsltKey, true)) {
         return null;
     }
     $xsltString = kFileSyncUtils::file_get_contents($metadataXsltKey, true, false);
     if (!$xsltString) {
         return null;
     }
     $xsltParams = array(XsltParameterName::KALTURA_CURRENT_TIMESTAMP => time());
     $xsltErrors = array();
     $xmlDataTransformed = kXml::transformXmlUsingXslt($xmlData, $xsltString, $xsltParams, $xsltErrors);
     if (!empty($xsltErrors)) {
         throw new KalturaAPIException(MetadataErrors::XSLT_VALIDATION_ERROR, implode(',', $xsltErrors));
     }
     if ($xmlDataTransformed) {
         return $xmlDataTransformed;
     }
     KalturaLog::err('Failed XML [$xmlData] transformation for metadata with XSL [$xsltString]');
     return null;
 }
 /**
  * @param $entry
  * @param $syndicationFeed
  * @return string
  */
 public static function getMrssEntry(entry $entry, syndicationFeed $syndicationFeed = null, $link = null, $xslParams = array())
 {
     $entryMrss = self::getMrssEntryXml($entry, $syndicationFeed, $link);
     if (!$entryMrss) {
         KalturaLog::err("No MRSS returned for entry [" . $entry->getId() . "]");
         return null;
     }
     if ($syndicationFeed->getType() == syndicationFeedType::KALTURA_XSLT && !is_null(self::getXslt($syndicationFeed))) {
         $itemXslt = self::getKalturaItemXslt(self::getXslt($syndicationFeed));
         $entryMrss = kXml::transformXmlUsingXslt($entryMrss, $itemXslt, $xslParams);
         $entryMrss = self::removeNamespaces($entryMrss);
     }
     $entryMrss = self::removeXmlHeader($entryMrss);
     return $entryMrss;
 }