/**
  * List metadata profile fields by metadata profile id
  * 
  * @action listFields
  * @param int $metadataProfileId
  * @return KalturaMetadataProfileFieldListResponse
  */
 function listFieldsAction($metadataProfileId)
 {
     $dbFields = MetadataProfileFieldPeer::retrieveActiveByMetadataProfileId($metadataProfileId);
     $response = new KalturaMetadataProfileFieldListResponse();
     $response->objects = KalturaMetadataProfileFieldArray::fromMetadataProfileFieldArray($dbFields);
     $response->totalCount = count($dbFields);
     return $response;
 }
 /**
  * @param      int $partnerId
  * @param      PropelPDO $con the connection to use
  * @return     array<string> keys
  */
 public static function retrievePartnerKeys($partnerId, PropelPDO $con = null)
 {
     $criteria = new Criteria();
     $criteria->addSelectColumn(MetadataProfileFieldPeer::KEY);
     $criteria->add(MetadataProfileFieldPeer::PARTNER_ID, $partnerId);
     $criteria->add(MetadataProfileFieldPeer::STATUS, MetadataProfileField::STATUS_ACTIVE);
     $stmt = MetadataProfileFieldPeer::doSelectStmt($criteria, $con);
     return $stmt->fetchAll(PDO::FETCH_COLUMN);
 }
 public function doGetCondition($xPaths = null)
 {
     if ($this->condition) {
         return $this->condition;
     }
     if (is_null($xPaths)) {
         $xPaths = array();
         $profileFields = MetadataProfileFieldPeer::retrieveActiveByMetadataProfileId($this->metadataProfileId);
         foreach ($profileFields as $profileField) {
             $xPaths[$profileField->getXpath()] = $profileField->getId();
         }
     }
     $conditions = array();
     $pluginName = MetadataPlugin::PLUGIN_NAME;
     if (count($this->items)) {
         foreach ($this->items as $item) {
             $condition = null;
             if ($item instanceof AdvancedSearchFilterCondition) {
                 $field = $item->getField();
                 if (isset($xPaths[$field])) {
                     $value = $item->getValue();
                     $value = SphinxUtils::escapeString($value);
                     $fieldId = $xPaths[$field];
                     $condition = "\"{$pluginName}_{$fieldId} {$value} " . kMetadataManager::SEARCH_TEXT_SUFFIX . "\"";
                 }
             } elseif ($item instanceof MetadataSearchFilter) {
                 $condition = $item->doGetCondition($xPaths);
             }
             KalturaLog::debug("Append item [" . get_class($item) . "] condition [{$condition}]");
             if ($condition) {
                 $conditions[] = "({$condition})";
             }
         }
     }
     if (!count($conditions)) {
         return null;
     }
     $glue = $this->type == MetadataSearchFilter::SEARCH_AND ? ' & ' : ' | ';
     $this->condition = implode($glue, $conditions);
     return $this->condition;
 }
 /**
  * @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();
         }
     }
 }
 /**
  * Delete an existing metadata profile
  *
  * @action delete
  * @param int $id
  * @throws MetadataErrors::METADATA_PROFILE_NOT_FOUND
  */
 function deleteAction($id)
 {
     $dbMetadataProfile = MetadataProfilePeer::retrieveByPK($id);
     if (!$dbMetadataProfile) {
         throw new KalturaAPIException(MetadataErrors::METADATA_PROFILE_NOT_FOUND, $id);
     }
     // if this profile is a dynamic object, check for references in other profiles
     if ($dbMetadataProfile->getObjectType() == MetadataObjectType::DYNAMIC_OBJECT) {
         $referencedFields = MetadataProfileFieldPeer::retrieveByPartnerAndRelatedMetadataProfileId(kCurrentContext::getCurrentPartnerId(), $dbMetadataProfile->getId());
         if (count($referencedFields)) {
             /** @var MetadataProfileField $referencedField */
             $referencedField = $referencedFields[0];
             throw new KalturaAPIException(MetadataErrors::METADATA_PROFILE_REFERENCE_EXISTS, $referencedField->getMetadataProfileId(), $referencedField->getKey());
         }
     }
     $dbMetadataProfile->setStatus(KalturaMetadataProfileStatus::DEPRECATED);
     $dbMetadataProfile->save();
     $c = new Criteria();
     $c->add(MetadataProfileFieldPeer::METADATA_PROFILE_ID, $id);
     $c->add(MetadataProfileFieldPeer::STATUS, MetadataProfileField::STATUS_DEPRECATED, Criteria::NOT_EQUAL);
     $MetadataProfileFields = MetadataProfileFieldPeer::doSelect($c);
     foreach ($MetadataProfileFields as $MetadataProfileField) {
         $MetadataProfileField->setStatus(MetadataProfileField::STATUS_DEPRECATED);
         $MetadataProfileField->save();
     }
     $c = new Criteria();
     $c->add(MetadataPeer::METADATA_PROFILE_ID, $id);
     $c->add(MetadataPeer::STATUS, KalturaMetadataStatus::DELETED, Criteria::NOT_EQUAL);
     $peer = null;
     MetadataPeer::setUseCriteriaFilter(false);
     $metadatas = MetadataPeer::doSelect($c);
     foreach ($metadatas as $metadata) {
         kEventsManager::raiseEvent(new kObjectDeletedEvent($metadata));
     }
     $update = new Criteria();
     $update->add(MetadataPeer::STATUS, KalturaMetadataStatus::DELETED);
     $con = Propel::getConnection(MetadataPeer::DATABASE_NAME);
     BasePeer::doUpdate($c, $update, $con);
 }
 public static function validateMetadataProfileField($partnerId, $xsdData, $isPath, $obejctType, $metadataProfileId = null)
 {
     $additionalSearchableFieldsCounter = 0;
     $profileFields = MetadataProfileFieldPeer::retrieveIndexableByPartnerAndType($partnerId, $obejctType);
     foreach ($profileFields as $profileField) {
         if ($profileField->getMetadataProfileId() == $metadataProfileId) {
             continue;
         }
         $type = $profileField->getType();
         if ($type == MetadataSearchFilter::KMC_FIELD_TYPE_DATE || $type == MetadataSearchFilter::KMC_FIELD_TYPE_INT) {
             $additionalSearchableFieldsCounter++;
         }
     }
     $xPaths = kXsd::findXpathsByAppInfo($xsdData, kMetadataManager::APP_INFO_SEARCH, 'true', $isPath);
     foreach ($xPaths as $xPath => $xPathData) {
         if (isset($xPathData['type']) && ($xPathData['type'] == MetadataSearchFilter::KMC_FIELD_TYPE_DATE || $xPathData['type'] == MetadataSearchFilter::KMC_FIELD_TYPE_INT)) {
             $additionalSearchableFieldsCounter++;
         }
     }
     $partnerLimit = MetadataPlugin::getAdditionalSearchableFieldsLimit($partnerId, $obejctType);
     if ($additionalSearchableFieldsCounter > $partnerLimit) {
         throw new APIException(MetadataErrors::EXCEEDED_ADDITIONAL_SEARCHABLE_FIELDS_LIMIT, $partnerLimit);
     }
 }
 /**
  * Populates the object using an array.
  *
  * This is particularly useful when populating an object from one of the
  * request arrays (e.g. $_POST).  This method goes through the column
  * names, checking to see whether a matching key exists in populated
  * array. If so the setByName() method is called for that column.
  *
  * You can specify the key type of the array by additionally passing one
  * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,
  * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
  * The default key type is the column's phpname (e.g. 'AuthorId')
  *
  * @param      array  $arr     An array to populate the object from.
  * @param      string $keyType The type of keys the array uses.
  * @return     void
  */
 public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
 {
     $keys = MetadataProfileFieldPeer::getFieldNames($keyType);
     if (array_key_exists($keys[0], $arr)) {
         $this->setId($arr[$keys[0]]);
     }
     if (array_key_exists($keys[1], $arr)) {
         $this->setCreatedAt($arr[$keys[1]]);
     }
     if (array_key_exists($keys[2], $arr)) {
         $this->setUpdatedAt($arr[$keys[2]]);
     }
     if (array_key_exists($keys[3], $arr)) {
         $this->setMetadataProfileId($arr[$keys[3]]);
     }
     if (array_key_exists($keys[4], $arr)) {
         $this->setMetadataProfileVersion($arr[$keys[4]]);
     }
     if (array_key_exists($keys[5], $arr)) {
         $this->setPartnerId($arr[$keys[5]]);
     }
     if (array_key_exists($keys[6], $arr)) {
         $this->setLabel($arr[$keys[6]]);
     }
     if (array_key_exists($keys[7], $arr)) {
         $this->setKey($arr[$keys[7]]);
     }
     if (array_key_exists($keys[8], $arr)) {
         $this->setType($arr[$keys[8]]);
     }
     if (array_key_exists($keys[9], $arr)) {
         $this->setXpath($arr[$keys[9]]);
     }
     if (array_key_exists($keys[10], $arr)) {
         $this->setStatus($arr[$keys[10]]);
     }
 }
 /**
  * @param EntryDistribution $entryDistribution
  * @param int $action enum from DistributionAction
  * @param array $validationErrors
  * @param bool $validateDescription
  * @param bool $validateTags
  * @return array
  */
 public function validateMetadataForSubmission(EntryDistribution $entryDistribution, $action, array $validationErrors, &$validateDescription, &$validateTags)
 {
     $validateDescription = true;
     $validateTags = true;
     if (!class_exists('MetadataProfile')) {
         return $validationErrors;
     }
     $metadataProfileId = $this->getMetadataProfileId();
     if (!$metadataProfileId) {
         return $validationErrors;
     }
     $metadata = MetadataPeer::retrieveByObject($metadataProfileId, Metadata::TYPE_ENTRY, $entryDistribution->getEntryId());
     if (!$metadata) {
         return $validationErrors;
     }
     $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_DESCRIPTION);
     if ($metadataProfileCategoryField) {
         $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_DESCRIPTION);
         if (count($values)) {
             foreach ($values as $value) {
                 if (!strlen($value)) {
                     continue;
                 }
                 $validateDescription = false;
                 // validate entry description minumum length of 1 character
                 if (strlen($value) < self::ENTRY_DESCRIPTION_MINIMUM_LENGTH) {
                     $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_DESCRIPTION, 'YouTube description is too short');
                     $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
                     $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MINIMUM_LENGTH);
                     $validationErrors[] = $validationError;
                 }
                 // validate entry description maximum length of 60 characters
                 if (strlen($value) > self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH) {
                     $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_DESCRIPTION, 'YouTube description is too long');
                     $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
                     $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH);
                     $validationErrors[] = $validationError;
                 }
             }
         }
     }
     $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_TAGS);
     if ($metadataProfileCategoryField) {
         $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_TAGS);
         if (count($values)) {
             foreach ($values as $value) {
                 if (!strlen($value)) {
                     continue;
                 }
                 $validateTags = false;
                 // validate entry tags minumum length of 1 character
                 if (strlen($value) < self::ENTRY_TAGS_MINIMUM_LENGTH) {
                     $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'YouTube tags is too short');
                     $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
                     $validationError->setValidationErrorParam(self::ENTRY_TAGS_MINIMUM_LENGTH);
                     $validationErrors[] = $validationError;
                 }
                 // validate entry tags maximum length of 60 characters
                 if (strlen($value) > self::ENTRY_TAGS_MAXIMUM_LENGTH) {
                     $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'YouTube tags is too long');
                     $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
                     $validationError->setValidationErrorParam(self::ENTRY_TAGS_MAXIMUM_LENGTH);
                     $validationErrors[] = $validationError;
                 }
             }
         }
     }
     return $validationErrors;
 }
 /**
  * Retrieve multiple objects by pkey.
  *
  * @param      array $pks List of primary keys
  * @param      PropelPDO $con the connection to use
  * @throws     PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function retrieveByPKs($pks, PropelPDO $con = null)
 {
     $objs = null;
     if (empty($pks)) {
         $objs = array();
     } else {
         $criteria = new Criteria(MetadataProfileFieldPeer::DATABASE_NAME);
         $criteria->add(MetadataProfileFieldPeer::ID, $pks, Criteria::IN);
         $objs = MetadataProfileFieldPeer::doSelect($criteria, $con);
     }
     return $objs;
 }
Beispiel #10
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;
 }
Beispiel #11
0
 /**
  * Parse the XML and update the list of search values
  * 
  * @param Metadata $metadata
  * 
  * @return array
  */
 public static function getSearchValues(Metadata $metadata, $searchTexts = array())
 {
     KalturaLog::debug("Parsing metadata [" . $metadata->getId() . "] search values");
     $key = $metadata->getSyncKey(Metadata::FILE_SYNC_METADATA_DATA);
     $xmlPath = kFileSyncUtils::getLocalFilePathForKey($key);
     $xml = new DOMDocument();
     $xml->load($xmlPath);
     $xPath = new DOMXPath($xml);
     $profileFields = MetadataProfileFieldPeer::retrieveActiveByMetadataProfileId($metadata->getMetadataProfileId());
     KalturaLog::debug("Metadata fields [" . count($profileFields) . "] found");
     $searchItems = array();
     $textItems = array();
     foreach ($profileFields as $profileField) {
         $nodes = $xPath->query($profileField->getXpath());
         if (!$nodes->length) {
             continue;
         }
         if ($profileField->getType() == MetadataSearchFilter::KMC_FIELD_TYPE_DATE) {
             continue;
         }
         $searchItemValues = array();
         foreach ($nodes as $node) {
             $searchItemValues[] = $node->nodeValue;
         }
         if (!count($searchItemValues)) {
             continue;
         }
         if ($profileField->getType() == MetadataSearchFilter::KMC_FIELD_TYPE_TEXT) {
             $textItem = implode(' ', $searchItemValues);
             $textItems[] = $textItem;
             if (iconv_strlen($textItem, 'UTF-8') < 128) {
                 $searchItems[$profileField->getId()] = $searchItemValues;
             }
         } else {
             $searchItems[$profileField->getId()] = $searchItemValues;
         }
     }
     foreach ($searchItems as $key => $searchItem) {
         foreach ($searchItem as $searchPhrase) {
             $searchTexts[] = MetadataPlugin::PLUGIN_NAME . '_' . "{$key} {$searchPhrase} " . kMetadataManager::SEARCH_TEXT_SUFFIX;
         }
     }
     if (count($textItems)) {
         if (!isset($searchTexts['text'])) {
             $searchTexts['text'] = MetadataPlugin::PLUGIN_NAME . '_text';
         }
         $searchTexts['text'] .= ' ' . implode(' ', $textItems);
     }
     $searchTexts['text'] .= ' ' . kMetadataManager::SEARCH_TEXT_SUFFIX;
     //		KalturaLog::debug('Search Texts: ' . print_r($searchTexts, true));
     $ret = array();
     foreach ($searchTexts as $index => $value) {
         if (is_int($index)) {
             $ret[$index] = $value;
         }
     }
     if (isset($searchTexts['text'])) {
         $ret['text'] = $searchTexts['text'];
     }
     return $ret;
 }
 /**
  * @param EntryDistribution $entryDistribution
  * @param int $action enum from DistributionAction
  * @param array $validationErrors
  * @param bool $validateDescription
  * @param bool $validateTags
  * @return array
  */
 public function validateMetadataForSubmission(EntryDistribution $entryDistribution, $action, array $validationErrors, &$validateDescription, &$validateTags)
 {
     $validateDescription = true;
     $validateTags = true;
     if (!class_exists('MetadataProfile')) {
         return $validationErrors;
     }
     $metadataProfileId = $this->getMetadataProfileId();
     if (!$metadataProfileId) {
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_CATEGORY, '');
         return $validationErrors;
     }
     $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_CATEGORY);
     if (!$metadataProfileCategoryField) {
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_CATEGORY, '');
         return $validationErrors;
     }
     $metadata = MetadataPeer::retrieveByObject($metadataProfileId, Metadata::TYPE_ENTRY, $entryDistribution->getEntryId());
     if (!$metadata) {
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_CATEGORY);
         return $validationErrors;
     }
     $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_CATEGORY);
     if (!count($values)) {
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_CATEGORY, '');
     }
     foreach ($values as $value) {
         if (!strlen($value)) {
             $validationErrors[] = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_CATEGORY, '');
             return $validationErrors;
         }
     }
     $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_DESCRIPTION);
     if ($metadataProfileCategoryField) {
         $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_DESCRIPTION);
         if (count($values)) {
             foreach ($values as $value) {
                 if (!strlen($value)) {
                     continue;
                 }
                 $validateDescription = false;
                 // validate entry description minumum length of 1 character
                 if (strlen($value) < self::ENTRY_DESCRIPTION_MINIMUM_LENGTH) {
                     $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_DESCRIPTION, 'Dailymotion description is too short');
                     $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
                     $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MINIMUM_LENGTH);
                     $validationErrors[] = $validationError;
                 }
                 // validate entry description minumum length of 1 character
                 if (strlen($value) > self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH) {
                     $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_DESCRIPTION, 'Dailymotion description is too long');
                     $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
                     $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH);
                     $validationErrors[] = $validationError;
                 }
             }
         }
     }
     $metadataProfileCategoryField = MetadataProfileFieldPeer::retrieveByMetadataProfileAndKey($metadataProfileId, self::METADATA_FIELD_TAGS);
     if ($metadataProfileCategoryField) {
         $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_TAGS);
         if (count($values) && strlen(implode('', $values))) {
             $tags = implode(',', $values);
             $tags = explode(',', $tags);
             $tagsStr = implode(' , ', $tags);
             $validateTags = false;
             if (strlen($tagsStr) > self::ENTRY_TAGS_MAXIMUM_LENGTH) {
                 $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'Dailymotion tags is too long');
                 $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
                 $validationError->setValidationErrorParam(self::ENTRY_TAGS_MAXIMUM_LENGTH);
                 $validationErrors[] = $validationError;
             }
             if (count($tags) < self::ENTRY_TAGS_MINIMUM_COUNT) {
                 $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'Dailymotion tags must contain at least ' . self::ENTRY_TAGS_MINIMUM_COUNT . ' tags');
                 $validationError->setValidationErrorType(DistributionValidationErrorType::CUSTOM_ERROR);
                 $validationError->setValidationErrorParam('Dailymotion tags must contain at least ' . self::ENTRY_TAGS_MINIMUM_COUNT . ' tags');
                 $validationErrors[] = $validationError;
             }
             foreach ($tags as $tag) {
                 if (strlen($tag) < self::ENTRY_TAG_MINIMUM_LENGTH) {
                     $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TAGS, 'Dailymotion tag [$tag] must contain at least ' . self::ENTRY_TAG_MINIMUM_LENGTH . ' characters');
                     $validationError->setValidationErrorType(DistributionValidationErrorType::CUSTOM_ERROR);
                     $validationError->setValidationErrorParam('Dailymotion tag [$tag] must contain at least ' . self::ENTRY_TAG_MINIMUM_LENGTH . ' characters');
                     $validationErrors[] = $validationError;
                 }
             }
         }
     }
     return $validationErrors;
 }
Beispiel #13
0
 public function objectDataChanged(BaseObject $object, $previousVersion = null, BatchJob $raisedJob = null)
 {
     // updated in the indexing server (sphinx)
     $relatedObject = kMetadataManager::getObjectFromPeer($object);
     if ($relatedObject && $relatedObject instanceof IIndexable) {
         $relatedObject->setUpdatedAt(time());
         $relatedObject->save();
         $relatedObject->indexToSearchIndex();
     }
     /** @var Metadata $object */
     if ($object->getObjectType() == MetadataObjectType::DYNAMIC_OBJECT && !$object->isLikeNew()) {
         /**
          * when dynamic object is modified, we need to reindex the metadata and the objects (users, entries)
          * that are referencing it
          */
         $profileFields = MetadataProfileFieldPeer::retrieveByPartnerAndRelatedMetadataProfileId($object->getPartnerId(), $object->getMetadataProfileId());
         $relatedMetadataProfiles = array();
         foreach ($profileFields as $profileField) {
             /** @var MetadataProfileField $profileField */
             if (in_array($profileField->getMetadataProfileId(), $relatedMetadataProfiles)) {
                 continue;
             }
             $filter = new MetadataFilter();
             $filter->set('_eq_metadata_profile_id', $profileField->getMetadataProfileId());
             $indexObjectType = kPluginableEnumsManager::apiToCore('IndexObjectType', MetadataPlugin::getApiValue(MetadataIndexObjectType::METADATA));
             kJobsManager::addIndexJob($object->getPartnerId(), $indexObjectType, $filter, true);
             $relatedMetadataProfiles[] = $profileField->getMetadataProfileId();
         }
     }
     if ($relatedObject instanceof entry) {
         kStorageExporter::reExportEntry($relatedObject);
     }
     return true;
 }
 /**
  * Builds a Criteria object containing the primary key for this object.
  *
  * Unlike buildCriteria() this method includes the primary key values regardless
  * of whether or not they have been modified.
  *
  * @return     Criteria The Criteria object containing value(s) for primary key(s).
  */
 public function buildPkeyCriteria()
 {
     $criteria = new Criteria(MetadataProfileFieldPeer::DATABASE_NAME);
     $criteria->add(MetadataProfileFieldPeer::ID, $this->id);
     if ($this->alreadyInSave && count($this->modifiedColumns) == 2 && $this->isColumnModified(MetadataProfileFieldPeer::UPDATED_AT)) {
         $theModifiedColumn = null;
         foreach ($this->modifiedColumns as $modifiedColumn) {
             if ($modifiedColumn != MetadataProfileFieldPeer::UPDATED_AT) {
                 $theModifiedColumn = $modifiedColumn;
             }
         }
         $atomicColumns = MetadataProfileFieldPeer::getAtomicColumns();
         if (in_array($theModifiedColumn, $atomicColumns)) {
             $criteria->add($theModifiedColumn, $this->getByName($theModifiedColumn, BasePeer::TYPE_COLNAME), Criteria::NOT_EQUAL);
         }
     }
     return $criteria;
 }
Beispiel #15
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));
     }
 }
 /**
  * Builds a Criteria object containing the primary key for this object.
  *
  * Unlike buildCriteria() this method includes the primary key values regardless
  * of whether or not they have been modified.
  *
  * @return     Criteria The Criteria object containing value(s) for primary key(s).
  */
 public function buildPkeyCriteria()
 {
     $criteria = new Criteria(MetadataProfileFieldPeer::DATABASE_NAME);
     $criteria->add(MetadataProfileFieldPeer::ID, $this->id);
     if ($this->alreadyInSave) {
         if ($this->isColumnModified(MetadataProfileFieldPeer::CUSTOM_DATA)) {
             if (!is_null($this->custom_data_md5)) {
                 $criteria->add(MetadataProfileFieldPeer::CUSTOM_DATA, "MD5(cast(" . MetadataProfileFieldPeer::CUSTOM_DATA . " as char character set latin1)) = '{$this->custom_data_md5}'", Criteria::CUSTOM);
             } else {
                 $criteria->add(MetadataProfileFieldPeer::CUSTOM_DATA, NULL, Criteria::ISNULL);
             }
         }
         if (count($this->modifiedColumns) == 2 && $this->isColumnModified(MetadataProfileFieldPeer::UPDATED_AT)) {
             $theModifiedColumn = null;
             foreach ($this->modifiedColumns as $modifiedColumn) {
                 if ($modifiedColumn != MetadataProfileFieldPeer::UPDATED_AT) {
                     $theModifiedColumn = $modifiedColumn;
                 }
             }
             $atomicColumns = MetadataProfileFieldPeer::getAtomicColumns();
             if (in_array($theModifiedColumn, $atomicColumns)) {
                 $criteria->add($theModifiedColumn, $this->getByName($theModifiedColumn, BasePeer::TYPE_COLNAME), Criteria::NOT_EQUAL);
             }
         }
     }
     return $criteria;
 }
 /**
  * 
  * @param string $field - xPath (metadataProfileField)
  */
 public function getMetadataSearchField($field = null, $xPaths = array())
 {
     if (!$field) {
         return MetadataPlugin::getSphinxFieldName(MetadataPlugin::SPHINX_EXPANDER_FIELD_DATA);
     }
     if (!count($xPaths)) {
         $profileFields = MetadataProfileFieldPeer::retrieveActiveByMetadataProfileId($this->metadataProfileId);
         foreach ($profileFields as $profileField) {
             $xPaths[$profileField->getXpath()] = $profileField;
         }
     }
     if (!isset($xPaths[$field])) {
         KalturaLog::ERR("Missing field: " . $field);
         return null;
     }
     if (is_null($xPaths[$field]->getSearchIndex())) {
         KalturaLog::ERR("Missing field search index: " . $field);
         return null;
     }
     switch ($xPaths[$field]->getType()) {
         case MetadataSearchFilter::KMC_FIELD_TYPE_DATE:
         case MetadataSearchFilter::KMC_FIELD_TYPE_INT:
             $metadataField = MetadataPlugin::getSphinxFieldName(MetadataPlugin::SPHINX_EXPENDER_FIELD_INT) . $xPaths[$field]->getSearchIndex();
             break;
         default:
             KalturaLog::ERR("Missing field type: " . $xPaths[$field]->getType());
             return null;
     }
     return $metadataField;
 }
Beispiel #18
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);
     }
 }
$dbConf = kConf::getDB();
DbManager::setConfig($dbConf);
DbManager::initialize();
$c = new Criteria();
if ($argc > 1 && is_numeric($argv[1])) {
    $c->add(entryPeer::INT_ID, $argv[1], Criteria::GREATER_EQUAL);
}
$c->addAscendingOrderByColumn(entryPeer::INT_ID);
$c->setLimit(10000);
$con = myDbHelper::getConnection(myDbHelper::DB_HELPER_CONN_PROPEL2);
//$sphinxCon = DbManager::getSphinxConnection();
$entries = entryPeer::doSelect($c, $con);
$sphinx = new kSphinxSearchManager();
while (count($entries)) {
    foreach ($entries as $entry) {
        KalturaLog::log('entry id ' . $entry->getId() . ' int id[' . $entry->getIntId() . '] crc id[' . $sphinx->getSphinxId($entry) . ']');
        try {
            $ret = $sphinx->saveToSphinx($entry, true);
        } catch (Exception $e) {
            KalturaLog::err($e->getMessage());
            exit - 1;
        }
    }
    $c->setOffset($c->getOffset() + count($entries));
    entryPeer::clearInstancePool();
    MetadataPeer::clearInstancePool();
    MetadataProfilePeer::clearInstancePool();
    MetadataProfileFieldPeer::clearInstancePool();
    $entries = entryPeer::doSelect($c, $con);
}
KalturaLog::log('Done');
 protected function loadFields($metadataProfileId)
 {
     $xPaths = array();
     $profileFields = MetadataProfileFieldPeer::retrieveActiveByMetadataProfileId($metadataProfileId);
     foreach ($profileFields as $profileField) {
         /** @var MetadataProfileField $profileField */
         $xPaths[$profileField->getXpath()] = $profileField;
     }
     return $xPaths;
 }
 public function validateForSubmission(EntryDistribution $entryDistribution, $action)
 {
     // get validation errors from parent class
     $validationErrors = parent::validateForSubmission($entryDistribution, $action);
     // get the entry object
     $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId());
     if (!$entry) {
         KalturaLog::err("Entry [" . $entryDistribution->getEntryId() . "] not found");
         return $validationErrors;
     }
     // validate entry name length
     if (strlen($entry->getName()) < self::ENTRY_NAME_MINIMUM_LENGTH) {
         $description = 'entry name length must be between ' . self::ENTRY_NAME_MINIMUM_LENGTH . ' and ' . self::ENTRY_NAME_MAXIMUM_LENGTH;
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, $description);
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MINIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     if (strlen($entry->getName()) > self::ENTRY_NAME_MAXIMUM_LENGTH) {
         $description = 'entry name length must be between ' . self::ENTRY_NAME_MINIMUM_LENGTH . ' and ' . self::ENTRY_NAME_MAXIMUM_LENGTH;
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, $description);
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MAXIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     // get all metadata objects that related to the entry
     $metadatas = MetadataPeer::retrieveAllByObject(MetadataObjectType::ENTRY, $entryDistribution->getEntryId());
     if (!count($metadatas)) {
         $description = 'field is missing because there is no metadata object defined';
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_TEST_DATA, $description);
     }
     // get all fields from all metadata profile for the testData key
     $metadataProfileFields = MetadataProfileFieldPeer::retrieveByPartnerAndKey($this->getPartnerId(), self::METADATA_FIELD_TEST_DATA);
     if (!count($metadataProfileFields)) {
         $description = 'field is not defined in any of the metadata profiles';
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_TEST_DATA, $description);
     } elseif (count($metadatas)) {
         // get the values for the testData key from all metadata objects
         $values = $this->findMetadataValue($metadatas, self::METADATA_FIELD_TEST_DATA);
         if (!count($values)) {
             $description = 'field is not defined in any of the metadata objects';
             $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, self::METADATA_FIELD_TEST_DATA, $description);
             continue;
         } else {
             foreach ($metadatas as $metadata) {
                 $values = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_TEST_DATA);
                 foreach ($values as $value) {
                     // validate that the field is not empty
                     if (!strlen($value)) {
                         $description = 'field is empty';
                         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TEST_DATA, $description);
                         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_EMPTY);
                         $validationError->setMetadataProfileId($metadata->getMetadataProfileId());
                         $validationErrors[] = $validationError;
                         continue;
                     }
                     // match the value to the required format
                     $matches = null;
                     $isMatched = preg_match('/' . self::METADATA_FIELD_TEST_DATA_FORMAT . '/', $value, $matches);
                     if (!$isMatched) {
                         $description = 'test data must match the required format';
                         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TEST_DATA, $description);
                         $validationError->setValidationErrorType(DistributionValidationErrorType::INVALID_FORMAT);
                         $validationError->setValidationErrorParam(self::METADATA_FIELD_TEST_DATA_FORMAT);
                         $validationError->setMetadataProfileId($metadata->getMetadataProfileId());
                         $validationErrors[] = $validationError;
                     }
                     $formatNumber = (int) $matches[1];
                     if ($formatNumber < self::METADATA_FIELD_TEST_DATA_MINIMUM_FORMAT || $formatNumber > self::METADATA_FIELD_TEST_DATA_MAXIMUM_FORMAT) {
                         $description = 'format number must be between ' . self::METADATA_FIELD_TEST_DATA_MINIMUM_FORMAT . ' and ' . self::METADATA_FIELD_TEST_DATA_MAXIMUM_FORMAT;
                         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, self::METADATA_FIELD_TEST_DATA, $description);
                         $validationError->setValidationErrorType(DistributionValidationErrorType::CUSTOM_ERROR);
                         $validationError->setMetadataProfileId($metadata->getMetadataProfileId());
                         $validationErrors[] = $validationError;
                     }
                 }
             }
         }
     }
     return $validationErrors;
 }
Beispiel #22
0
 public function getFreeTextConditions($partnerScope, $freeTexts)
 {
     $metadataProfileFieldIds = array();
     $metadataProfileId = $this->getMetadataProfileId();
     if ($metadataProfileId) {
         $metadataProfileFields = MetadataProfileFieldPeer::retrieveActiveByMetadataProfileId($metadataProfileId);
         foreach ($metadataProfileFields as $metadataProfileField) {
             $metadataProfileFieldIds[] = $metadataProfileField->getId();
         }
     }
     KalturaLog::debug("freeText [{$freeTexts}]");
     $additionalConditions = array();
     if (preg_match('/^"[^"]+"$/', $freeTexts)) {
         $freeText = str_replace('"', '', $freeTexts);
         $freeText = SphinxUtils::escapeString($freeText);
         $freeText = "^{$freeText}\$";
         $additionalConditions[] = $this->createSphinxSearchPhrase($partnerScope, $freeTexts);
         return $additionalConditions;
     }
     if (strpos($freeTexts, baseObjectFilter::IN_SEPARATOR) > 0) {
         str_replace(baseObjectFilter::AND_SEPARATOR, baseObjectFilter::IN_SEPARATOR, $freeTexts);
         $freeTextsArr = explode(baseObjectFilter::IN_SEPARATOR, $freeTexts);
         foreach ($freeTextsArr as $valIndex => $valValue) {
             if (!is_numeric($valValue) && strlen($valValue) <= 0) {
                 unset($freeTextsArr[$valIndex]);
             }
         }
         foreach ($freeTextsArr as $freeText) {
             $freeText = SphinxUtils::escapeString($freeText);
             $additionalConditions[] = $this->createSphinxSearchPhrase($partnerScope, $freeText);
             foreach ($metadataProfileFieldIds as $metadataProfileFieldId) {
                 $additionalConditions[] = $this->createSphinxSearchPhrase($partnerScope, $freeText, $metadataProfileFieldId);
             }
         }
         return $additionalConditions;
     }
     $freeTextsArr = explode(baseObjectFilter::AND_SEPARATOR, $freeTexts);
     foreach ($freeTextsArr as $valIndex => $valValue) {
         if (!is_numeric($valValue) && strlen($valValue) <= 0) {
             unset($freeTextsArr[$valIndex]);
         }
     }
     $freeTextsArr = array_unique($freeTextsArr);
     $freeTextExpr = implode(baseObjectFilter::AND_SEPARATOR, $freeTextsArr);
     $freeTextExpr = SphinxUtils::escapeString($freeTextExpr);
     $additionalConditions[] = $this->createSphinxSearchPhrase($partnerScope, $freeTextExpr);
     foreach ($metadataProfileFieldIds as $metadataProfileFieldId) {
         $additionalConditions[] = $this->createSphinxSearchPhrase($partnerScope, $freeTextExpr, $metadataProfileFieldId);
     }
     return $additionalConditions;
 }
 /**
  * Delete an existing metadata profile
  * 
  * @action delete
  * @param int $id
  * @throws KalturaErrors::INVALID_OBJECT_ID
  */
 function deleteAction($id)
 {
     $dbMetadataProfile = MetadataProfilePeer::retrieveByPK($id);
     if (!$dbMetadataProfile) {
         throw new KalturaAPIException(KalturaErrors::INVALID_OBJECT_ID, $id);
     }
     $dbMetadataProfile->setStatus(KalturaMetadataProfileStatus::DEPRECATED);
     $dbMetadataProfile->save();
     $c = new Criteria();
     $c->add(MetadataProfileFieldPeer::METADATA_PROFILE_ID, $id);
     $c->add(MetadataProfileFieldPeer::STATUS, MetadataProfileField::STATUS_DEPRECATED, Criteria::NOT_EQUAL);
     $MetadataProfileFields = MetadataProfileFieldPeer::doSelect($c);
     foreach ($MetadataProfileFields as $MetadataProfileField) {
         $MetadataProfileField->setStatus(MetadataProfileField::STATUS_DEPRECATED);
         $MetadataProfileField->save();
     }
     $c = new Criteria();
     $c->add(MetadataPeer::METADATA_PROFILE_ID, $id);
     $c->add(MetadataPeer::STATUS, KalturaMetadataStatus::DELETED, Criteria::NOT_EQUAL);
     $peer = null;
     MetadataPeer::setUseCriteriaFilter(false);
     $metadatas = MetadataPeer::doSelect($c);
     foreach ($metadatas as $metadata) {
         kEventsManager::raiseEvent(new kObjectDeletedEvent($metadata));
     }
     $update = new Criteria();
     $update->add(MetadataPeer::STATUS, KalturaMetadataStatus::DELETED);
     $con = Propel::getConnection(MetadataPeer::DATABASE_NAME);
     BasePeer::doUpdate($c, $update, $con);
 }
 /**
  * @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();
         }
     }
 }
 public static function cleanMemory()
 {
     MetadataProfilePeer::clearInstancePool();
     MetadataProfileFieldPeer::clearInstancePool();
     MetadataPeer::clearInstancePool();
 }