public function validateForSubmission(EntryDistribution $entryDistribution, $action)
 {
     $validationErrors = parent::validateForSubmission($entryDistribution, $action);
     $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId());
     if (!$entry) {
         KalturaLog::err("Entry [" . $entryDistribution->getEntryId() . "] not found");
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, 'entry', 'entry not found');
         return $validationErrors;
     }
     // validate entry name minumum length of 1 character
     if (strlen($entry->getName()) < self::ENTRY_NAME_MINIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, 'Name is too short');
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MINIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     if (strlen($entry->getName()) > self::ENTRY_NAME_MAXIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, 'Name is too long');
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MAXIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     $validationErrors = $this->validateMetadataForSubmission($entryDistribution, $action, $validationErrors);
     if (!strlen($entry->getDescription())) {
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, entryPeer::DESCRIPTION, 'Description is empty');
     } elseif (strlen($entry->getDescription()) < self::ENTRY_DESCRIPTION_MINIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::DESCRIPTION, 'Description is too short');
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
         $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MINIMUM_LENGTH);
         $validationErrors[] = $validationError;
     } elseif (strlen($entry->getDescription()) > self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::DESCRIPTION, 'Description is too long');
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
         $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     return $validationErrors;
 }
 public function validateForSubmission(EntryDistribution $entryDistribution, $action)
 {
     $missingDesc = false;
     $missingTags = false;
     $validationErrors = parent::validateForSubmission($entryDistribution, $action);
     $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId());
     if (!$entry) {
         KalturaLog::err("Entry [" . $entryDistribution->getEntryId() . "] not found");
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, 'entry', 'entry not found');
         return $validationErrors;
     }
     // validate entry name minumum length of 1 character
     if (strlen($entry->getName()) < self::ENTRY_NAME_MINIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, '');
         $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;
     }
     if (strlen($entry->getDescription()) < self::ENTRY_DESC_MINIMUM_LENGTH) {
         $missingDesc = true;
     }
     if (strlen($entry->getTags()) < self::ENTRY_DESC_MINIMUM_LENGTH) {
         $missingTags = true;
     }
     if (!class_exists('MetadataProfile')) {
         return $validationErrors;
     }
     $metadataFields = array(self::METADATA_FIELD_KEYWORDS, self::METADATA_FIELD_DESCRIPTION);
     $metadataProfileId = $this->getMetadataProfileId();
     $metadatas = MetadataPeer::retrieveAllByObject(MetadataObjectType::ENTRY, $entryDistribution->getEntryId());
     foreach ($metadataFields as $index => $metadataField) {
         $values = $this->findMetadataValue($metadatas, $metadataField);
         if (!count($values)) {
             switch ($metadataField) {
                 case self::METADATA_FIELD_DESCRIPTION:
                     if ($missingDesc) {
                         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, entryPeer::DESCRIPTION, "");
                     }
                     break;
                 case self::METADATA_FIELD_KEYWORDS:
                     if ($missingTags) {
                         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, entryPeer::TAGS, "");
                     }
                     break;
                 default:
                     $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, $metadataField);
             }
         }
         foreach ($values as $value) {
             if (!strlen($value)) {
                 $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, $metadataField, "");
                 $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_EMPTY);
                 $validationError->setMetadataProfileId($metadataProfileId);
                 $validationErrors[] = $validationError;
                 break;
             }
         }
     }
     return $validationErrors;
 }
 public function validateForSubmission(EntryDistribution $entryDistribution, $action)
 {
     $validationErrors = parent::validateForSubmission($entryDistribution, $action);
     $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId());
     if (!$entry) {
         KalturaLog::err("Entry [" . $entryDistribution->getEntryId() . "] not found");
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, 'entry', 'entry not found');
         return $validationErrors;
     }
     // validate entry name minumum length of 1 character
     if (strlen($entry->getName()) < self::ENTRY_NAME_MINIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, '');
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MINIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     // validate entry name maximum length of 60 characters
     if (strlen($entry->getName()) > self::ENTRY_NAME_MAXIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, '');
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MAXIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     $validateDescription = true;
     $validateTags = true;
     $validationErrors = $this->validateMetadataForSubmission($entryDistribution, $action, $validationErrors, $validateDescription, $validateTags);
     if ($validateDescription) {
         if (!strlen($entry->getDescription())) {
             $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, entryPeer::DESCRIPTION, 'Description is empty');
         } elseif (strlen($entry->getDescription()) < self::ENTRY_DESCRIPTION_MINIMUM_LENGTH) {
             $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::DESCRIPTION, 'Description is too short');
             $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
             $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MINIMUM_LENGTH);
             $validationErrors[] = $validationError;
         } elseif (strlen($entry->getDescription()) > self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH) {
             $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::DESCRIPTION, 'Description is too log');
             $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
             $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH);
             $validationErrors[] = $validationError;
         }
     }
     $tags = $entry->getTags();
     if ($validateTags) {
         if (!strlen($tags)) {
             $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, entryPeer::TAGS, 'Tags is empty');
         } elseif (strlen($tags) < self::ENTRY_TAGS_MINIMUM_LENGTH) {
             $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::TAGS, 'Tags is too short');
             $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
             $validationError->setValidationErrorParam(self::ENTRY_TAGS_MINIMUM_LENGTH);
             $validationErrors[] = $validationError;
         } elseif (strlen($tags) > self::ENTRY_TAGS_MAXIMUM_LENGTH) {
             $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::TAGS, 'Tags is too log');
             $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
             $validationError->setValidationErrorParam(self::ENTRY_TAGS_MAXIMUM_LENGTH);
             $validationErrors[] = $validationError;
         }
     } elseif (class_exists('MetadataProfile')) {
         $metadataProfileId = $this->getMetadataProfileId();
         $metadata = MetadataPeer::retrieveByObject($metadataProfileId, Metadata::TYPE_ENTRY, $entryDistribution->getEntryId());
         if ($metadata) {
             $tagsArray = $this->findMetadataValue(array($metadata), self::METADATA_FIELD_TAGS);
             $tags = implode(',', $tagsArray);
         }
     }
     // validate each tag length between 2 and 30 characters
     $tags = explode(',', $tags);
     foreach ($tags as &$tag) {
         $tag = trim($tag);
     }
     foreach ($tags as $tag) {
         if (strlen($tag) < self::ENTRY_EACH_TAG_MANIMUM_LENGTH) {
             $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, 'Tag', $tag);
             $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
             $validationError->setValidationErrorParam(self::ENTRY_EACH_TAG_MANIMUM_LENGTH);
             $validationErrors[] = $validationError;
         }
         if (strlen($tag) > self::ENTRY_EACH_TAG_MAXIMUM_LENGTH) {
             $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, 'Tag', $tag);
             $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
             $validationError->setValidationErrorParam(self::ENTRY_EACH_TAG_MAXIMUM_LENGTH);
             $validationErrors[] = $validationError;
         }
     }
     return $validationErrors;
 }
 public function validateForSubmission(EntryDistribution $entryDistribution, $action)
 {
     $validationErrors = parent::validateForSubmission($entryDistribution, $action);
     //TODO: move entry validation to DistributionProfile ?
     $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId());
     if (!$entry) {
         KalturaLog::err("Entry [" . $entryDistribution->getEntryId() . "] not found");
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, 'entry', 'entry not found');
         return $validationErrors;
     }
     // verify fields markes as required
     $fieldConfigArray = $this->getFieldConfigArray();
     foreach ($fieldConfigArray as $fieldConfig) {
         if ($fieldConfig->getIsRequired() != DistributionFieldRequiredStatus::NOT_REQUIRED) {
             $this->addRequiredFieldForValidation($fieldConfig->getFieldName());
         }
     }
     $allFieldValues = $this->getAllFieldValues($entryDistribution);
     if (!$allFieldValues || !is_array($allFieldValues)) {
         KalturaLog::err('Error getting field values from entry distribution id [' . $entryDistribution->getId() . '] profile id [' . $this->getId() . ']');
         return $validationErrors;
     }
     $validationErrors = array_merge($validationErrors, $this->validateNotEmpty($this->requiredFields, $allFieldValues, $action));
     return $validationErrors;
 }
 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;
 }
 public function validateForSubmission(EntryDistribution $entryDistribution, $action)
 {
     $validationErrors = parent::validateForSubmission($entryDistribution, $action);
     $entry = entryPeer::retrieveByPK($entryDistribution->getEntryId());
     if (!$entry) {
         KalturaLog::err("Entry [" . $entryDistribution->getEntryId() . "] not found");
         $validationErrors[] = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, 'entry', 'entry not found');
         return $validationErrors;
     }
     // validate entry name minumum length of 1 character
     if (strlen($entry->getName()) < self::ENTRY_NAME_MINIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, 'Name is too short');
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MINIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     if (strlen($entry->getName()) > self::ENTRY_NAME_MAXIMUM_LENGTH) {
         $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::NAME, 'Name is too long');
         $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
         $validationError->setValidationErrorParam(self::ENTRY_NAME_MAXIMUM_LENGTH);
         $validationErrors[] = $validationError;
     }
     $validateDescription = true;
     $validateTags = true;
     $validationErrors = $this->validateMetadataForSubmission($entryDistribution, $action, $validationErrors, $validateDescription, $validateTags);
     if ($validateDescription) {
         if (!strlen($entry->getDescription())) {
             $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, entryPeer::DESCRIPTION, 'Description is empty');
         } elseif (strlen($entry->getDescription()) < self::ENTRY_DESCRIPTION_MINIMUM_LENGTH) {
             $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::DESCRIPTION, 'Description is too short');
             $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_SHORT);
             $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MINIMUM_LENGTH);
             $validationErrors[] = $validationError;
         } elseif (strlen($entry->getDescription()) > self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH) {
             $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::DESCRIPTION, 'Description is too long');
             $validationError->setValidationErrorType(DistributionValidationErrorType::STRING_TOO_LONG);
             $validationError->setValidationErrorParam(self::ENTRY_DESCRIPTION_MAXIMUM_LENGTH);
             $validationErrors[] = $validationError;
         }
     }
     if ($validateTags) {
         if (!strlen($entry->getTags())) {
             $validationErrors[] = $this->createValidationError($action, DistributionErrorType::MISSING_METADATA, entryPeer::TAGS, 'Tags is empty');
         } else {
             $tags = explode(',', $entry->getTags());
             $tagsStr = implode(' , ', $tags);
             if (strlen($tagsStr) > self::ENTRY_TAGS_MAXIMUM_LENGTH) {
                 $validationError = $this->createValidationError($action, DistributionErrorType::INVALID_DATA, entryPeer::TAGS, 'Entry 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, entryPeer::TAGS, 'Entry tags must contain at least ' . self::ENTRY_TAGS_MINIMUM_COUNT . ' tags');
                 $validationError->setValidationErrorType(DistributionValidationErrorType::CUSTOM_ERROR);
                 $validationError->setValidationErrorParam('Entry 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, entryPeer::TAGS, "Entry tag [{$tag}] must contain at least " . self::ENTRY_TAG_MINIMUM_LENGTH . " characters");
                     $validationError->setValidationErrorType(DistributionValidationErrorType::CUSTOM_ERROR);
                     $validationError->setValidationErrorParam("Entry tag [{$tag}] must contain at least " . self::ENTRY_TAG_MINIMUM_LENGTH . " characters");
                     $validationErrors[] = $validationError;
                 }
             }
         }
     }
     return $validationErrors;
 }