From 0ec7c0f37c9f3963f6a03bbc8e08f77aaf5e8859 Mon Sep 17 00:00:00 2001 From: nbm Date: Wed, 26 Oct 2005 14:04:22 +0000 Subject: [PATCH] Implement metadata validation using the mandatory flag on fields and verifying conditional metadata fieldsets. --- lib/documentmanagement/documentutil.inc.php | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+), 0 deletions(-) diff --git a/lib/documentmanagement/documentutil.inc.php b/lib/documentmanagement/documentutil.inc.php index 9dd185a..7203bb5 100644 --- a/lib/documentmanagement/documentutil.inc.php +++ b/lib/documentmanagement/documentutil.inc.php @@ -37,6 +37,8 @@ require_once(KT_LIB_DIR . '/subscriptions/SubscriptionConstants.inc'); // NEW PATHS require_once(KT_LIB_DIR . '/storage/storagemanager.inc.php'); require_once(KT_LIB_DIR . '/filelike/filelikeutil.inc.php'); +require_once(KT_LIB_DIR . '/metadata/metadatautil.inc.php'); +require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php'); class KTDocumentUtil { function createMetadataVersion($oDocument) { @@ -214,6 +216,35 @@ class KTDocumentUtil { // {{{ validateMetadata function validateMetadata(&$oDocument, $aMetadata) { + $aFieldsets =& KTFieldset::getGenericFieldsets(); + $aFieldsets =& array_merge($aFieldsets, + KTFieldset::getForDocumentType($oDocument->getDocumentTypeId())); + $aFailed = array(); + foreach ($aFieldsets as $oFieldset) { + $aFields =& $oFieldset->getFields(); + $aFieldValues = array(); + foreach ($aFields as $oField) { + $v = KTUtil::arrayGet($aMetadata, $oField->getId()); + if ($oField->getIsMandatory()) { + if (empty($v)) { + // XXX: What I'd do for a setdefault... + $aFailed["field"][$oField->getId()] = 1; + } + } + if (!empty($v)) { + $aFieldValues[$oField->getId()] = $v; + } + } + if ($oFieldset->getIsConditional()) { + $res = KTMetadataUtil::getNext($oFieldset, $aFieldValues); + if ($res) { + $aFailed["fieldset"][$oFieldset->getId()] = 1; + } + } + } + if (!empty($aFailed)) { + return new KTMetadataValidationError($aFailed); + } return $aMetadata; } // }}} @@ -384,4 +415,12 @@ class KTDocumentUtil { // }}} } +class KTMetadataValidationError extends PEAR_Error { + function KTMetadataValidationError ($aFailed) { + $this->aFailed = $aFailed; + $message = 'Validation Failed'; + parent::PEAR_Error($message); + } +} + ?> -- libgit2 0.21.4