From 5bce2fa6fdfe9c05b119099229d3580495c77558 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 23 Jul 2025 22:53:27 +0200 Subject: [PATCH] move code into controller --- controllers/class.EditAttributes.php | 123 +++++++++++++++++++++++++++ op/op.EditAttributes.php | 71 ++++------------ 2 files changed, 139 insertions(+), 55 deletions(-) create mode 100644 controllers/class.EditAttributes.php diff --git a/controllers/class.EditAttributes.php b/controllers/class.EditAttributes.php new file mode 100644 index 000000000..1df2c91e6 --- /dev/null +++ b/controllers/class.EditAttributes.php @@ -0,0 +1,123 @@ + + * @copyright Copyright (C) 2010-2013 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Class which does the busines logic for editing the version attributes + * + * @category DMS + * @package SeedDMS + * @author Uwe Steinmann + * @copyright Copyright (C) 2010-2025 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_Controller_EditAttributes extends SeedDMS_Controller_Common { + + public function run() { + $dms = $this->params['dms']; + $user = $this->params['user']; + $settings = $this->params['settings']; + $document = $this->params['document']; + $version = $this->params['version']; + + if(false === $this->callHook('preEditAttributes')) { + if(empty($this->errormsg)) + $this->errormsg = 'hook_preEditAttributes_failed'; + return null; + } + + $result = $this->callHook('editAttributes', $version); + if($result === null) { + $attributes = $this->params['attributes']; + $oldattributes = $version->getAttributes(); + if($attributes) { + foreach($attributes as $attrdefid=>$attribute) { + if($attrdef = $dms->getAttributeDefinition($attrdefid)) { + if(null === ($ret = $this->callHook('validateAttribute', $attrdef, $attribute))) { + if($attribute) { + switch($attrdef->getType()) { + case SeedDMS_Core_AttributeDefinition::type_date: + if(is_array($attribute)) + $attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute); + else + $attribute = date('Y-m-d', makeTsFromDate($attribute)); + break; + case SeedDMS_Core_AttributeDefinition::type_folder: + if(is_array($attribute)) + $attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute); + else + $attribute = $dms->getFolder((int) $attribute); + break; + case SeedDMS_Core_AttributeDefinition::type_document: + if(is_array($attribute)) + $attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute); + else + $attribute = $dms->getDocument((int) $attribute); + break; + case SeedDMS_Core_AttributeDefinition::type_user: + if(is_array($attribute)) + $attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute); + else + $attribute = $dms->getUser((int) $attribute); + break; + case SeedDMS_Core_AttributeDefinition::type_group: + if(is_array($attribute)) + $attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute); + else + $attribute = $dms->getGroup((int) $attribute); + break; + } + if(!$attrdef->validate($attribute, $version, false)) { + $this->errormsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute); + return false; + } + + if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) { + if(!$version->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) { + //UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); + return false; + } + } + } elseif($attrdef->getMinValues() > 0) { + $this->errormsg = array("attr_min_values", array("attrname"=>$attrdef->getName())); + return false; + } elseif(isset($oldattributes[$attrdefid])) { + if(!$version->removeAttribute($dms->getAttributeDefinition($attrdefid))) + // UI::exitError(getMLText("document_title", array("documentname" => $folder->getName())),getMLText("error_occured")); + return false; + } + } else { + if($ret === false) + return false; + } + } + } + } + foreach($oldattributes as $attrdefid=>$oldattribute) { + if(!isset($attributes[$attrdefid])) { + if(!$version->removeAttribute($dms->getAttributeDefinition($attrdefid))) + return false; + } + } + + } elseif($result === false) { + if(empty($this->errormsg)) + $this->errormsg = 'hook_editAttributes_failed'; + return false; + } + + if(false === $this->callHook('postEditAttributes')) { + } + + return true; + } +} diff --git a/op/op.EditAttributes.php b/op/op.EditAttributes.php index 40cbf9c5a..a91000555 100644 --- a/op/op.EditAttributes.php +++ b/op/op.EditAttributes.php @@ -27,8 +27,12 @@ include("../inc/inc.Init.php"); include("../inc/inc.Extension.php"); include("../inc/inc.DBInit.php"); include("../inc/inc.ClassUI.php"); +include("../inc/inc.ClassController.php"); include("../inc/inc.Authentication.php"); +$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); +$controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); + /* Check if the form data comes from a trusted request */ if(!checkFormKey('editattributes')) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_request_token"))),getMLText("invalid_request_token")); @@ -46,7 +50,6 @@ if (!is_object($document)) { } $folder = $document->getFolder(); -$docPathHTML = getFolderPathHTML($folder, true). " / ".$document->getName().""; if ($document->getAccessMode($user, 'editDocumentContentAttributes') < M_READWRITE) { UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("access_denied")); @@ -68,59 +71,19 @@ foreach($version->getAttributes() as $ai=>$aa) $oldattributes[$ai] = clone $aa; $attributes = $_POST["attributes"]; -if($attributes) { - foreach($attributes as $attrdefid=>$attribute) { - if($attrdef = $dms->getAttributeDefinition($attrdefid)) { - if($attribute) { - switch($attrdef->getType()) { - case SeedDMS_Core_AttributeDefinition::type_date: - if(is_array($attribute)) - $attribute = array_map(fn($value): string => date('Y-m-d', makeTsFromDate($value)), $attribute); - else - $attribute = date('Y-m-d', makeTsFromDate($attribute)); - break; - case SeedDMS_Core_AttributeDefinition::type_folder: - if(is_array($attribute)) - $attribute = array_map(fn($value): object => $dms->getFolder((int) $value), $attribute); - else - $attribute = $dms->getFolder((int) $attribute); - break; - case SeedDMS_Core_AttributeDefinition::type_document: - if(is_array($attribute)) - $attribute = array_map(fn($value): object => $dms->getDocument((int) $value), $attribute); - else - $attribute = $dms->getDocument((int) $attribute); - break; - case SeedDMS_Core_AttributeDefinition::type_user: - if(is_array($attribute)) - $attribute = array_map(fn($value): object => $dms->getUser((int) $value), $attribute); - else - $attribute = $dms->getUser((int) $attribute); - break; - case SeedDMS_Core_AttributeDefinition::type_group: - if(is_array($attribute)) - $attribute = array_map(fn($value): object => $dms->getGroup((int) $value), $attribute); - else - $attribute = $dms->getGroup((int) $attribute); - break; - } - if(!$attrdef->validate($attribute, $version, false)) { - $errmsg = getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute); - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())), $errmsg); - } - if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) { - if(!$version->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); - } - } - } elseif($attrdef->getMinValues() > 0) { - UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("attr_min_values", array("attrname"=>$attrdef->getName()))); - } elseif(isset($oldattributes[$attrdefid])) { - if(!$version->removeAttribute($dms->getAttributeDefinition($attrdefid))) - UI::exitError(getMLText("document_title", array("documentname" => $folder->getName())),getMLText("error_occured")); - } - } +$controller->setParam('document', $document); +$controller->setParam('version', $version); +$controller->setParam('attributes', $attributes); +if(!$controller()) { + $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($notifier) { @@ -130,5 +93,3 @@ if($notifier) { add_log_line("?documentid=".$documentid); header("Location:../out/out.DocumentVersionDetail.php?documentid=".$documentid."&version=".$versionid); - -?>