Commit 0ec7c0f37c9f3963f6a03bbc8e08f77aaf5e8859

Authored by nbm
1 parent f97c4cd2

Implement metadata validation using the mandatory flag on fields and

verifying conditional metadata fieldsets.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3893 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/documentmanagement/documentutil.inc.php
... ... @@ -37,6 +37,8 @@ require_once(KT_LIB_DIR . '/subscriptions/SubscriptionConstants.inc');
37 37 // NEW PATHS
38 38 require_once(KT_LIB_DIR . '/storage/storagemanager.inc.php');
39 39 require_once(KT_LIB_DIR . '/filelike/filelikeutil.inc.php');
  40 +require_once(KT_LIB_DIR . '/metadata/metadatautil.inc.php');
  41 +require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php');
40 42  
41 43 class KTDocumentUtil {
42 44 function createMetadataVersion($oDocument) {
... ... @@ -214,6 +216,35 @@ class KTDocumentUtil {
214 216  
215 217 // {{{ validateMetadata
216 218 function validateMetadata(&$oDocument, $aMetadata) {
  219 + $aFieldsets =& KTFieldset::getGenericFieldsets();
  220 + $aFieldsets =& array_merge($aFieldsets,
  221 + KTFieldset::getForDocumentType($oDocument->getDocumentTypeId()));
  222 + $aFailed = array();
  223 + foreach ($aFieldsets as $oFieldset) {
  224 + $aFields =& $oFieldset->getFields();
  225 + $aFieldValues = array();
  226 + foreach ($aFields as $oField) {
  227 + $v = KTUtil::arrayGet($aMetadata, $oField->getId());
  228 + if ($oField->getIsMandatory()) {
  229 + if (empty($v)) {
  230 + // XXX: What I'd do for a setdefault...
  231 + $aFailed["field"][$oField->getId()] = 1;
  232 + }
  233 + }
  234 + if (!empty($v)) {
  235 + $aFieldValues[$oField->getId()] = $v;
  236 + }
  237 + }
  238 + if ($oFieldset->getIsConditional()) {
  239 + $res = KTMetadataUtil::getNext($oFieldset, $aFieldValues);
  240 + if ($res) {
  241 + $aFailed["fieldset"][$oFieldset->getId()] = 1;
  242 + }
  243 + }
  244 + }
  245 + if (!empty($aFailed)) {
  246 + return new KTMetadataValidationError($aFailed);
  247 + }
217 248 return $aMetadata;
218 249 }
219 250 // }}}
... ... @@ -384,4 +415,12 @@ class KTDocumentUtil {
384 415 // }}}
385 416 }
386 417  
  418 +class KTMetadataValidationError extends PEAR_Error {
  419 + function KTMetadataValidationError ($aFailed) {
  420 + $this->aFailed = $aFailed;
  421 + $message = 'Validation Failed';
  422 + parent::PEAR_Error($message);
  423 + }
  424 +}
  425 +
387 426 ?>
... ...