/**
  * @param int $fromPartnerId
  * @param int $toPartnerId
  */
 protected function copyMetadataProfiles($fromPartnerId, $toPartnerId)
 {
     KalturaLog::debug("Copy metadata profiles from [{$fromPartnerId}] to [{$toPartnerId}]");
     $c = new Criteria();
     $c->add(MetadataProfilePeer::PARTNER_ID, $fromPartnerId);
     $metadataProfiles = MetadataProfilePeer::doSelect($c);
     foreach ($metadataProfiles as $metadataProfile) {
         $newMetadataProfile = $metadataProfile->copy();
         $newMetadataProfile->setPartnerId($toPartnerId);
         $newMetadataProfile->save();
         kFileSyncUtils::createSyncFileLinkForKey($newMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION), $metadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION), false);
         kFileSyncUtils::createSyncFileLinkForKey($newMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_VIEWS), $metadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_VIEWS), false);
         $metadataProfileFields = MetadataProfileFieldPeer::retrieveByMetadataProfileId($metadataProfile->getId());
         foreach ($metadataProfileFields as $metadataProfileField) {
             $newMetadataProfileField = $metadataProfileField->copy();
             $newMetadataProfileField->setMetadataProfileId($newMetadataProfile->getId());
             $newMetadataProfileField->setPartnerId($toPartnerId);
             $newMetadataProfileField->save();
         }
     }
 }
 /**
  * @param Partner $fromPartner
  * @param Partner $toPartner
  */
 protected function copyMetadataProfiles(Partner $fromPartner, Partner $toPartner, $permissionRequiredOnly = false)
 {
     $fromPartnerId = $fromPartner->getId();
     $toPartnerId = $toPartner->getId();
     KalturaLog::debug("Copy metadata profiles from [{$fromPartnerId}] to [{$toPartnerId}]");
     $c = new Criteria();
     $c->add(MetadataProfilePeer::PARTNER_ID, $fromPartnerId);
     $systemNameCriteria = new Criteria();
     $systemNameCriteria->add(MetadataProfilePeer::PARTNER_ID, $toPartnerId);
     $systemNameCriteria->add(MetadataProfilePeer::STATUS, MetadataProfile::STATUS_ACTIVE);
     $metadataProfiles = MetadataProfilePeer::doSelect($c);
     foreach ($metadataProfiles as $metadataProfile) {
         /* @var $metadataProfile MetadataProfile */
         if ($permissionRequiredOnly && !count($metadataProfile->getRequiredCopyTemplatePermissions())) {
             continue;
         }
         if (!myPartnerUtils::isPartnerPermittedForCopy($toPartner, $metadataProfile->getRequiredCopyTemplatePermissions())) {
             continue;
         }
         if ($metadataProfile->getSystemName()) {
             $c = clone $systemNameCriteria;
             $c->add(MetadataProfilePeer::SYSTEM_NAME, $metadataProfile->getSystemName());
             if (MetadataProfilePeer::doCount($c)) {
                 continue;
             }
         }
         $newMetadataProfile = $metadataProfile->copy();
         $newMetadataProfile->setPartnerId($toPartnerId);
         $newMetadataProfile->save();
         kFileSyncUtils::createSyncFileLinkForKey($newMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION), $metadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION));
         kFileSyncUtils::createSyncFileLinkForKey($newMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_VIEWS), $metadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_VIEWS));
         kFileSyncUtils::createSyncFileLinkForKey($newMetadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_XSLT), $metadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_XSLT));
         $metadataProfileFields = MetadataProfileFieldPeer::retrieveByMetadataProfileId($metadataProfile->getId());
         foreach ($metadataProfileFields as $metadataProfileField) {
             $newMetadataProfileField = $metadataProfileField->copy();
             $newMetadataProfileField->setMetadataProfileId($newMetadataProfile->getId());
             $newMetadataProfileField->setPartnerId($toPartnerId);
             $newMetadataProfileField->save();
         }
     }
 }
示例#3
0
 /**
  * @param string $entryId the new created entry
  * @param array $data key => value pairs
  */
 public static function handleBulkUploadData($entryId, array $data)
 {
     KalturaLog::debug("Handle metadata bulk upload data:\n" . print_r($data, true));
     if (!isset($data[self::BULK_UPLOAD_COLUMN_PROFILE_ID])) {
         return;
     }
     $metadataProfileId = $data[self::BULK_UPLOAD_COLUMN_PROFILE_ID];
     $xmlData = null;
     $entry = entryPeer::retrieveByPK($entryId);
     if (!$entry) {
         return;
     }
     //		$criteriaFilter = FileSyncPeer::getCriteriaFilter();
     //		$criteria = $criteriaFilter->getFilter();
     //		$criteria->add(FileSyncPeer::PARTNER_ID, $entry->getPartnerId());
     $metadataProfile = MetadataProfilePeer::retrieveById($metadataProfileId);
     if (!$metadataProfile) {
         $errorMessage = "Metadata profile [{$metadataProfileId}] not found";
         KalturaLog::err($errorMessage);
         self::addBulkUploadResultDescription($entryId, $entry->getBulkUploadId(), $errorMessage);
         return;
     }
     if (isset($data[self::BULK_UPLOAD_COLUMN_URL])) {
         try {
             $xmlData = file_get_contents($data[self::BULK_UPLOAD_COLUMN_URL]);
             KalturaLog::debug("Metadata downloaded [" . $data[self::BULK_UPLOAD_COLUMN_URL] . "]");
         } catch (Exception $e) {
             $errorMessage = "Download metadata[" . $data[self::BULK_UPLOAD_COLUMN_URL] . "] error: " . $e->getMessage();
             KalturaLog::err($errorMessage);
             self::addBulkUploadResultDescription($entryId, $entry->getBulkUploadId(), $errorMessage);
             $xmlData = null;
         }
     } elseif (isset($data[self::BULK_UPLOAD_COLUMN_XML])) {
         $xmlData = $data[self::BULK_UPLOAD_COLUMN_XML];
     } else {
         $metadataProfileFields = array();
         MetadataProfileFieldPeer::setUseCriteriaFilter(false);
         $tmpMetadataProfileFields = MetadataProfileFieldPeer::retrieveByMetadataProfileId($metadataProfileId);
         MetadataProfileFieldPeer::setUseCriteriaFilter(true);
         foreach ($tmpMetadataProfileFields as $metadataProfileField) {
             $metadataProfileFields[$metadataProfileField->getKey()] = $metadataProfileField;
         }
         KalturaLog::debug("Found fields [" . count($metadataProfileFields) . "] for metadata profile [{$metadataProfileId}]");
         $xml = new DOMDocument();
         $dataFound = false;
         foreach ($data as $key => $value) {
             if (!$value || !strlen($value)) {
                 continue;
             }
             if (!preg_match('/^' . self::BULK_UPLOAD_COLUMN_FIELD_PREFIX . '(.+)$/', $key, $matches)) {
                 continue;
             }
             $key = $matches[1];
             if (!isset($metadataProfileFields[$key])) {
                 $errorMessage = "Field [{$key}] does not exist";
                 KalturaLog::debug($errorMessage);
                 self::addBulkUploadResultDescription($entryId, $entry->getBulkUploadId(), $errorMessage);
                 continue;
             }
             $metadataProfileField = $metadataProfileFields[$key];
             KalturaLog::debug("Found field [" . $metadataProfileField->getXpath() . "] for value [{$value}]");
             $fieldValues = explode(self::BULK_UPLOAD_MULTI_VALUES_DELIMITER, $value);
             foreach ($fieldValues as $fieldValue) {
                 if ($metadataProfileField->getType() == MetadataSearchFilter::KMC_FIELD_TYPE_DATE && !is_numeric($fieldValue)) {
                     $value = self::parseFormatedDate($fieldValue);
                     if (!$value || !strlen($value)) {
                         $errorMessage = "Could not parse date format [{$fieldValue}] for field [{$key}]";
                         KalturaLog::debug($errorMessage);
                         self::addBulkUploadResultDescription($entryId, $entry->getBulkUploadId(), $errorMessage);
                         continue;
                     }
                     $fieldValue = $value;
                 }
                 self::addXpath($xml, $metadataProfileField->getXpath(), $fieldValue);
             }
             $dataFound = true;
         }
         if ($dataFound) {
             $xmlData = $xml->saveXML($xml->firstChild);
             $xmlData = trim($xmlData, " \n\r\t");
         }
     }
     if (!$xmlData) {
         return;
     }
     $dbMetadata = new Metadata();
     $dbMetadata->setPartnerId($entry->getPartnerId());
     $dbMetadata->setMetadataProfileId($metadataProfileId);
     $dbMetadata->setMetadataProfileVersion($metadataProfile->getVersion());
     $dbMetadata->setObjectType(Metadata::TYPE_ENTRY);
     $dbMetadata->setObjectId($entryId);
     $dbMetadata->setStatus(Metadata::STATUS_INVALID);
     $dbMetadata->save();
     KalturaLog::debug("Metadata [" . $dbMetadata->getId() . "] saved [{$xmlData}]");
     $key = $dbMetadata->getSyncKey(Metadata::FILE_SYNC_METADATA_DATA);
     kFileSyncUtils::file_put_contents($key, $xmlData);
     $errorMessage = '';
     $status = kMetadataManager::validateMetadata($dbMetadata, $errorMessage);
     if ($status == Metadata::STATUS_VALID) {
         kEventsManager::raiseEvent(new kObjectDataChangedEvent($dbMetadata));
     } else {
         self::addBulkUploadResultDescription($entryId, $entry->getBulkUploadId(), $errorMessage);
     }
 }
示例#4
0
 protected static function validateMetadataObjects($metadataProfileId, KDOMDocument $xml, &$errorMessage)
 {
     $profileFields = MetadataProfileFieldPeer::retrieveByMetadataProfileId($metadataProfileId);
     $xPath = new DOMXPath($xml);
     foreach ($profileFields as $profileField) {
         /** @var MetadataProfileField $profileField */
         if (!in_array($profileField->getType(), self::$metadataFieldTypesToValidate)) {
             continue;
         }
         $objectPeer = self::getObjectPeerByFieldType($profileField->getType());
         if (!$objectPeer) {
             $errorMessage = "Peer not found for field of type " . $profileField->getType();
             return false;
         }
         $objectIds = array();
         $nodes = $xPath->query($profileField->getXpath());
         foreach ($nodes as $node) {
             $objectIds[] = $node->nodeValue;
         }
         $objectIds = array_unique($objectIds);
         if (!$objectPeer->validateMetadataObjects($profileField, $objectIds, $errorMessage)) {
             return false;
         }
     }
     return true;
 }
示例#5
0
 /**
  * Read multiple metadata schemas
  * @param BaseObject $object
  * @param array $data
  */
 protected static function addMetadataWithProfilesSystemNames(BaseObject $object, array $data)
 {
     $newFieldValuesMap = array();
     $xmlDataArray = array();
     //Construct mapping of all metadata profile system names, their fields and the field values.
     foreach ($data as $key => $value) {
         if (strpos($key, self::BULK_UPLOAD_METADATA_FIELD_PREFIX) === 0) {
             $prefix = null;
             $metadataProfileSystemName = null;
             $metadataProfileFieldName = null;
             list($prefix, $metadataProfileSystemName, $metadataProfileFieldName) = explode(self::BULK_UPLOAD_METADATA_SYSTEMNAME_SEPARATOR, $key);
             if (!$prefix || !$metadataProfileSystemName || !$metadataProfileFieldName) {
                 $errorMessage = "Unexpected key structure. Expected metadata::ProfileSystemName::FieldSystemName.";
                 KalturaLog::err($errorMessage);
                 self::addBulkUploadResultDescription($object, $object->getBulkUploadId(), $errorMessage);
                 continue;
             }
             if (!isset($newFieldValuesMap[$metadataProfileSystemName])) {
                 $newFieldValuesMap[$metadataProfileSystemName] = array();
             }
             $newFieldValuesMap[$metadataProfileSystemName][$metadataProfileFieldName] = $value;
         }
     }
     foreach ($newFieldValuesMap as $metadataProfileSystemName => $fieldsArray) {
         /* @var array $fieldsArray */
         if (!$fieldsArray || !count($fieldsArray)) {
             continue;
         }
         $metadataProfile = MetadataProfilePeer::retrieveBySystemName($metadataProfileSystemName, $object->getPartnerId());
         if (!$metadataProfile) {
             $errorMessage = "Metadata profile with system name [{$metadataProfileSystemName}] could not be found.";
             KalturaLog::err($errorMessage);
             self::addBulkUploadResultDescription($object, $object->getBulkUploadId(), $errorMessage);
             continue;
         }
         if ($metadataProfile->getObjectType() != kMetadataManager::getTypeNameFromObject($object)) {
             $errorMessage = "Metadata profile [{$metadataProfileSystemName}] object type [" . $metadataProfile->getObjectType() . "] is not compatible with object type [" . kMetadataManager::getTypeNameFromObject($object) . "]";
             KalturaLog::err($errorMessage);
             self::addBulkUploadResultDescription($object, $object->getBulkUploadId(), $errorMessage);
             continue;
         }
         $metadataProfileId = $metadataProfile->getId();
         $xml = new DOMDocument();
         $metadataProfileFields = array();
         MetadataProfileFieldPeer::setUseCriteriaFilter(false);
         $tmpMetadataProfileFields = MetadataProfileFieldPeer::retrieveByMetadataProfileId($metadataProfileId);
         MetadataProfileFieldPeer::setUseCriteriaFilter(true);
         foreach ($tmpMetadataProfileFields as $metadataProfileField) {
             /* @var $metadataProfileField MetadataProfileField */
             $metadataProfileFields[$metadataProfileField->getKey()] = $metadataProfileField;
         }
         foreach ($fieldsArray as $fieldSysName => $fieldValue) {
             if (!isset($metadataProfileFields[$fieldSysName])) {
                 $errorMessage = "Metadata profile field with system name [{$fieldSysName}] missing from metadata profile with id [{$metadataProfileId}]";
                 KalturaLog::err($errorMessage);
                 self::addBulkUploadResultDescription($object, $object->getBulkUploadId(), $errorMessage);
                 continue;
             }
             $metadataProfileField = $metadataProfileFields[$fieldSysName];
             KalturaLog::debug("Found field [" . $metadataProfileField->getXpath() . "] for value [{$fieldValue}]");
             $fieldValues = explode(self::BULK_UPLOAD_MULTI_VALUES_DELIMITER, $fieldValue);
             foreach ($fieldValues as $fieldSingleValue) {
                 if ($fieldSingleValue) {
                     if ($metadataProfileField->getType() == MetadataSearchFilter::KMC_FIELD_TYPE_DATE && !is_numeric($fieldSingleValue)) {
                         $valueAsDate = self::parseFormatedDate($fieldSingleValue);
                         if (!$valueAsDate || !strlen($valueAsDate)) {
                             $errorMessage = "Could not parse date format [{$fieldValue}] for field [{$key}]";
                             KalturaLog::err($errorMessage);
                             self::addBulkUploadResultDescription($object, $object->getBulkUploadId(), $errorMessage);
                             continue;
                         }
                         $fieldSingleValue = $valueAsDate;
                     }
                     if ($metadataProfileField->getType() == MetadataSearchFilter::KMC_FIELD_TYPE_INT && !is_numeric($fieldSingleValue)) {
                         $errorMessage = "Could not parse int format [{$fieldSingleValue}] for field [{$key}]";
                         KalturaLog::err($errorMessage);
                         self::addBulkUploadResultDescription($object, $object->getBulkUploadId(), $errorMessage);
                         continue;
                     }
                     self::addXpath($xml, $metadataProfileField->getXpath(), $fieldSingleValue);
                 }
             }
             $dataFound = true;
             if ($dataFound && $xml->hasChildNodes()) {
                 $xmlDataArray[$metadataProfileId] = $xml->saveXML($xml->firstChild);
                 $xmlDataArray[$metadataProfileId] = trim($xmlDataArray[$metadataProfileId], " \n\r\t");
             }
         }
     }
     foreach ($xmlDataArray as $metadataProfileId => $xmlData) {
         $errorMessage = '';
         if (!kMetadataManager::validateMetadata($metadataProfileId, $xmlData, $errorMessage)) {
             self::addBulkUploadResultDescription($object, $object->getBulkUploadId(), $errorMessage);
             continue;
         }
         $metadataProfile = MetadataProfilePeer::retrieveByPK($metadataProfileId);
         $dbMetadata = self::createOrFindMetadataObject($object, $metadataProfile);
         KalturaLog::debug("Metadata [" . $dbMetadata->getId() . "] saved [{$xmlData}]");
         $key = $dbMetadata->getSyncKey(Metadata::FILE_SYNC_METADATA_DATA);
         kFileSyncUtils::file_put_contents($key, $xmlData);
         kEventsManager::raiseEvent(new kObjectDataChangedEvent($dbMetadata));
     }
 }
示例#6
0
 /**
  * Parse the XSD and update the list of search fields
  * 
  * @param MetadataProfile $metadataProfile
  * 
  * @return TBD
  */
 public static function parseProfileSearchFields(MetadataProfile $metadataProfile)
 {
     $key = $metadataProfile->getSyncKey(MetadataProfile::FILE_SYNC_METADATA_DEFINITION);
     $xsdPath = kFileSyncUtils::getLocalFilePathForKey($key);
     $xPaths = kXsd::findXpathsByAppInfo($xsdPath, self::APP_INFO_SEARCH, 'true');
     MetadataProfileFieldPeer::setUseCriteriaFilter(false);
     $profileFields = MetadataProfileFieldPeer::retrieveByMetadataProfileId($metadataProfile->getId());
     MetadataProfileFieldPeer::setUseCriteriaFilter(true);
     // check all existing fields
     foreach ($profileFields as $profileField) {
         $xPath = $profileField->getXpath();
         // field removed
         if (!isset($xPaths[$xPath])) {
             $profileField->setStatus(MetadataProfileField::STATUS_DEPRECATED);
             $profileField->save();
             continue;
         }
         $xPathData = $xPaths[$xPath];
         $profileField->setStatus(MetadataProfileField::STATUS_ACTIVE);
         $profileField->setMetadataProfileVersion($metadataProfile->getVersion());
         if (isset($xPathData['name'])) {
             $profileField->setKey($xPathData['name']);
         }
         if (isset($xPathData['label'])) {
             $profileField->setLabel($xPathData['label']);
         }
         if (isset($xPathData['type'])) {
             $profileField->setType($xPathData['type']);
         }
         $profileField->save();
         unset($xPaths[$xPath]);
     }
     // add new searchable fields
     foreach ($xPaths as $xPath => $xPathData) {
         $profileField = new MetadataProfileField();
         $profileField->setMetadataProfileId($metadataProfile->getId());
         $profileField->setMetadataProfileVersion($metadataProfile->getVersion());
         $profileField->setPartnerId($metadataProfile->getPartnerId());
         $profileField->setStatus(MetadataProfileField::STATUS_ACTIVE);
         $profileField->setXpath($xPath);
         if (isset($xPathData['name'])) {
             $profileField->setKey($xPathData['name']);
         }
         if (isset($xPathData['label'])) {
             $profileField->setLabel($xPathData['label']);
         }
         if (isset($xPathData['type'])) {
             $profileField->setType($xPathData['type']);
         }
         $profileField->save();
     }
     // set none searchable existing fields
     $xPaths = kXsd::findXpathsByAppInfo($xsdPath, self::APP_INFO_SEARCH, 'false');
     foreach ($profileFields as $profileField) {
         $xPath = $profileField->getXpath();
         if (!isset($xPaths[$xPath])) {
             continue;
         }
         $xPathData = $xPaths[$xPath];
         if (isset($xPathData['name'])) {
             $profileField->setKey($xPathData['name']);
         }
         if (isset($xPathData['label'])) {
             $profileField->setLabel($xPathData['label']);
         }
         if (isset($xPathData['type'])) {
             $profileField->setType($xPathData['type']);
         }
         $profileField->setStatus(MetadataProfileField::STATUS_NONE_SEARCHABLE);
         $profileField->setMetadataProfileVersion($metadataProfile->getVersion());
         $profileField->save();
         unset($xPaths[$xPath]);
     }
     // add new none searchable fields
     foreach ($xPaths as $xPath => $xPathData) {
         $profileField = new MetadataProfileField();
         $profileField->setMetadataProfileId($metadataProfile->getId());
         $profileField->setMetadataProfileVersion($metadataProfile->getVersion());
         $profileField->setPartnerId($metadataProfile->getPartnerId());
         $profileField->setStatus(MetadataProfileField::STATUS_NONE_SEARCHABLE);
         $profileField->setXpath($xPath);
         if (isset($xPathData['name'])) {
             $profileField->setKey($xPathData['name']);
         }
         if (isset($xPathData['label'])) {
             $profileField->setLabel($xPathData['label']);
         }
         if (isset($xPathData['type'])) {
             $profileField->setType($xPathData['type']);
         }
         $profileField->save();
     }
 }