/** * 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); } }