예제 #1
0
 /**
  * Validates concept for saving
  *
  * @param array
  */
 protected function _validateSave($extraData)
 {
     // First check for cycles. If there are cycles we can not continue with the other validators.
     $validator = Editor_Models_ConceptValidator_SameBroaderAndNarrower::factory();
     if (!$validator->isValid($this, $extraData)) {
         $this->_errors[] = $validator->getError();
         return false;
     }
     $validator = Editor_Models_ConceptValidator_CycleInBroaders::factory();
     if (!$validator->isValid($this, $extraData)) {
         $this->_errors[] = $validator->getError();
         return false;
     }
     $validator = Editor_Models_ConceptValidator_CycleInNarrowers::factory();
     if (!$validator->isValid($this, $extraData)) {
         $this->_errors[] = $validator->getError();
         return false;
     }
     // Check for other validators.
     $validators = array();
     $validators[] = Editor_Models_ConceptValidator_UniqueNotation::factory();
     $validators[] = Editor_Models_ConceptValidator_StatusesTransition::factory();
     $validators[] = Editor_Models_ConceptValidator_RelatedToItself::factory();
     $validators[] = Editor_Models_ConceptValidator_IsAtLeastInOneScheme::factory();
     $validators[] = Editor_Models_ConceptValidator_DuplicateBroaders::factory();
     $validators[] = Editor_Models_ConceptValidator_DuplicateNarrowers::factory();
     $validators[] = Editor_Models_ConceptValidator_DuplicateRelated::factory();
     $validators[] = Editor_Models_ConceptValidator_UnneededDirectBroaders::factory();
     $validators[] = Editor_Models_ConceptValidator_UnneededDirectNarrowers::factory();
     $validators[] = Editor_Models_ConceptValidator_UniquePrefLabelInScheme::factory();
     $validators[] = Editor_Models_ConceptValidator_ExpiredWithRelations::factory();
     $isValid = true;
     foreach ($validators as $validator) {
         if (!$validator->isValid($this, $extraData)) {
             $isValid = false;
             $this->_errors[] = $validator->getError();
         }
     }
     return $isValid;
 }
 /**
  * Validates pref label for saving concept.
  * @param OpenSKOS_Solr_Document|Api_Models_Concept $concept
  * @param bool $isAfterCommit
  * @param null|Api_Models_Concept $previousState
  * @throws Zend_Controller_Action_Exception
  */
 protected function validatePrefLabel($concept, $isAfterCommit = false, $previousState = null)
 {
     if ($concept instanceof Api_Models_Concept) {
         $editorConcept = new Editor_Models_Concept($concept);
     } elseif ($concept instanceof OpenSKOS_Solr_Document) {
         $editorConcept = $this->docToEditorConcept($concept);
     } else {
         throw new \RuntimeException('$concept is not instace of Api_Models_Concept or OpenSKOS_Solr_Document.');
     }
     $prefLabelValidator = Editor_Models_ConceptValidator_UniquePrefLabelInScheme::factory();
     $isUniquePrefLabel = $prefLabelValidator->isValid($editorConcept, []);
     if (!$isUniquePrefLabel) {
         if ($isAfterCommit) {
             $this->rollbackConcept($concept, $previousState);
         }
         throw new Zend_Controller_Action_Exception($prefLabelValidator->getError()->getMessage(), 409);
     }
 }