move attribute validation into controller and call hook

This commit is contained in:
Uwe Steinmann 2019-12-13 15:00:04 +01:00
parent d27d4f118d
commit a0661536b3
8 changed files with 100 additions and 18 deletions

View File

@ -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');

View File

@ -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');

View File

@ -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;
}
}
}

View File

@ -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) {

View File

@ -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_num<count($_FILES["userfile"]["tmp_name"]);$file_num++){
$controller->setParam('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) {

View File

@ -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();

View File

@ -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) {

View File

@ -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) {