diff --git a/controllers/class.AddDocument.php b/controllers/class.AddDocument.php index ff61cafaf..1d9b6393a 100644 --- a/controllers/class.AddDocument.php +++ b/controllers/class.AddDocument.php @@ -56,7 +56,36 @@ class SeedDMS_Controller_AddDocument extends SeedDMS_Controller_Common { $reqversion = $this->getParam('reqversion'); $version_comment = $this->getParam('versioncomment'); $attributes = $this->getParam('attributes'); + foreach($attributes as $attrdefid=>$attribute) { + if($attrdef = $dms->getAttributeDefinition($attrdefid)) { + if(false === $this->callHook('validateAttribute', $attrdef, $attribute)) { + return false; + } + if($attribute) { + if(!$attrdef->validate($attribute)) { + $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); + return false; + } + } elseif($attrdef->getMinValues() > 0) { + $this->errormsg = array("attr_min_values", array("attrname"=>$attrdef->getName())); + return false; + } + } + } $attributes_version = $this->getParam('attributesversion'); + foreach($attributes_version as $attrdefid=>$attribute) { + if($attrdef = $dms->getAttributeDefinition($attrdefid)) { + if(false === $this->callHook('validateAttribute', $attrdef, $attribute)) { + return false; + } + if($attribute) { + if(!$attrdef->validate($attribute)) { + $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); + return false; + } + } + } + } $workflow = $this->getParam('workflow'); $notificationgroups = $this->getParam('notificationgroups'); $notificationusers = $this->getParam('notificationusers'); diff --git a/controllers/class.AddSubFolder.php b/controllers/class.AddSubFolder.php index 0d6582855..71f86f5b6 100644 --- a/controllers/class.AddSubFolder.php +++ b/controllers/class.AddSubFolder.php @@ -40,6 +40,22 @@ class SeedDMS_Controller_AddSubFolder extends SeedDMS_Controller_Common { $comment = $this->getParam('comment'); $sequence = $this->getParam('sequence'); $attributes = $this->getParam('attributes'); + foreach($attributes as $attrdefid=>$attribute) { + if($attrdef = $dms->getAttributeDefinition($attrdefid)) { + if(false === $this->callHook('validateAttribute', $attrdef, $attribute)) { + return false; + } + if($attribute) { + if(!$attrdef->validate($attribute)) { + $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); + return false; + } + } elseif($attrdef->getMinValues() > 0) { + $this->errormsg = array("attr_min_values", array("attrname"=>$attrdef->getName())); + return false; + } + } + } $notificationgroups = $this->getParam('notificationgroups'); $notificationusers = $this->getParam('notificationusers'); diff --git a/controllers/class.EditDocument.php b/controllers/class.EditDocument.php index 6d8714df4..d84ceae8d 100644 --- a/controllers/class.EditDocument.php +++ b/controllers/class.EditDocument.php @@ -116,22 +116,28 @@ class SeedDMS_Controller_EditDocument extends SeedDMS_Controller_Common { $oldattributes = $document->getAttributes(); if($attributes) { foreach($attributes as $attrdefid=>$attribute) { - $attrdef = $dms->getAttributeDefinition($attrdefid); - if($attribute) { - if(!$attrdef->validate($attribute)) { - $this->errormsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute); - return false; - } + if($attrdef = $dms->getAttributeDefinition($attrdefid)) { + if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { + if($attribute) { + if(!$attrdef->validate($attribute)) { + $this->errormsg = getAttributeValidationError($attrdef->getValidationError(), $attrdef->getName(), $attribute); + return false; + } - if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) { - if(!$document->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) + if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) { + if(!$document->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) + return false; + } + } elseif($attrdef->getMinValues() > 0) { + $this->errormsg = array("attr_min_values", array("attrname"=>$attrdef->getName())); + } elseif(isset($oldattributes[$attrdefid])) { + if(!$document->removeAttribute($dms->getAttributeDefinition($attrdefid))) + return false; + } + } else { + if($ret === false) return false; } - } elseif($attrdef->getMinValues() > 0) { - $this->errormsg = getMLText("attr_min_values", array("attrname"=>$attrdef->getName())); - } elseif(isset($oldattributes[$attrdefid])) { - if(!$document->removeAttribute($dms->getAttributeDefinition($attrdefid))) - return false; } } } diff --git a/controllers/class.EditFolder.php b/controllers/class.EditFolder.php index f41399fe5..02c6d1163 100644 --- a/controllers/class.EditFolder.php +++ b/controllers/class.EditFolder.php @@ -51,6 +51,7 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common { if($attributes) { foreach($attributes as $attrdefid=>$attribute) { $attrdef = $dms->getAttributeDefinition($attrdefid); + if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { if($attribute) { if(!$attrdef->validate($attribute)) { $this->errormsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute); @@ -67,6 +68,10 @@ class SeedDMS_Controller_EditFolder extends SeedDMS_Controller_Common { if(!$folder->removeAttribute($dms->getAttributeDefinition($attrdefid))) return false; } + } else { + if($ret === false) + return false; + } } } foreach($oldattributes as $attrdefid=>$oldattribute) { diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index 5cc09cc88..a82105aa5 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -93,6 +93,7 @@ if(isset($_POST["attributes"])) $attributes = $_POST["attributes"]; else $attributes = array(); +/* Has been moved to controller foreach($attributes as $attrdefid=>$attribute) { if($attrdef = $dms->getAttributeDefinition($attrdefid)) { if($attribute) { @@ -105,11 +106,13 @@ foreach($attributes as $attrdefid=>$attribute) { } } } + */ if(isset($_POST["attributes_version"])) $attributes_version = $_POST["attributes_version"]; else $attributes_version = array(); +/* Has been moved to controller foreach($attributes_version as $attrdefid=>$attribute) { $attrdef = $dms->getAttributeDefinition($attrdefid); if($attribute) { @@ -119,6 +122,7 @@ foreach($attributes_version as $attrdefid=>$attribute) { } } } + */ $reqversion = (int)$_POST["reqversion"]; if ($reqversion<1) $reqversion=1; @@ -387,7 +391,15 @@ for ($file_num=0;$file_numsetParam('defaultaccessdocs', $settings->_defaultAccessDocs); if(!$document = $controller->run()) { - UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText($controller->getErrorMsg())); + $err = $controller->getErrorMsg(); + if(is_string($err)) + $errmsg = getMLText($err); + elseif(is_array($err)) { + $errmsg = getMLText($err[0], $err[1]); + } else { + $errmsg = $err; + } + UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),$errmsg); } else { // Send notification to subscribers of folder. if($notifier) { diff --git a/op/op.AddSubFolder.php b/op/op.AddSubFolder.php index f0284d1cb..19012dd46 100644 --- a/op/op.AddSubFolder.php +++ b/op/op.AddSubFolder.php @@ -67,6 +67,7 @@ if(isset($_POST["attributes"])) $attributes = $_POST["attributes"]; else $attributes = array(); +/* foreach($attributes as $attrdefid=>$attribute) { $attrdef = $dms->getAttributeDefinition($attrdefid); if($attribute) { @@ -78,6 +79,7 @@ foreach($attributes as $attrdefid=>$attribute) { UI::exitError(getMLText("folder_title", array("foldername" => $document->getName())),getMLText("attr_min_values", array("attrname"=>$attrdef->getName()))); } } + */ /* Check if additional notification shall be added */ $notusers = array(); diff --git a/op/op.EditDocument.php b/op/op.EditDocument.php index 5c3a66d4f..a8ef4fbc4 100644 --- a/op/op.EditDocument.php +++ b/op/op.EditDocument.php @@ -127,9 +127,15 @@ $controller->setParam('expires', $expires); $controller->setParam('sequence', $sequence); $controller->setParam('attributes', $attributes); if(!$controller->run()) { - if($controller->getErrorMsg()) { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())), $controller->getErrorMsg()); + $err = $controller->getErrorMsg(); + if(is_string($err)) + $errmsg = getMLText($err); + elseif(is_array($err)) { + $errmsg = getMLText($err[0], $err[1]); + } else { + $errmsg = $err; } + UI::exitError(getMLText("document_title", array("documentname" => $document->getName())), $errmsg); } if ($oldname != $name) { diff --git a/op/op.EditFolder.php b/op/op.EditFolder.php index 050d6b3f5..6ea93f654 100644 --- a/op/op.EditFolder.php +++ b/op/op.EditFolder.php @@ -80,9 +80,15 @@ $controller->setParam('comment', $comment); $controller->setParam('sequence', $sequence); $controller->setParam('attributes', $attributes); if(!$controller->run()) { - if($controller->getErrorMsg()) { - UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())), $controller->getErrorMsg()); + $err = $controller->getErrorMsg(); + if(is_string($err)) + $errmsg = getMLText($err); + elseif(is_array($err)) { + $errmsg = getMLText($err[0], $err[1]); + } else { + $errmsg = $err; } + UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())), $errmsg); } if($oldname != $name) {