From d8c2a9df06dbb418d0fa6c3785a7fbf319f6b977 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 12 Feb 2024 14:06:53 +0100 Subject: [PATCH] add global group approver/reviewer --- inc/inc.ClassSettings.php | 14 +++++++-- inc/inc.Utils.php | 10 ++++++ op/op.Settings.php | 2 ++ views/bootstrap/class.GroupMgr.php | 12 +++++++- views/bootstrap/class.Settings.php | 49 ++++++++++++++++++++++++++++++ 5 files changed, 84 insertions(+), 3 deletions(-) diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 5d35b016f..39b8ec88e 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -186,10 +186,14 @@ class Settings { /* {{{ */ var $_addManagerAsReviewer = false; // group manager is mandatory approver var $_addManagerAsApprover = false; - // global reviewer + // global individuel reviewer var $_globalReviewer = array(); - // global approver + // global individuel approver var $_globalApprover = array(); + // global group reviewer + var $_globalGroupReviewer = array(); + // global group approver + var $_globalGroupApprover = array(); // enable/disable default notification for owner var $_enableOwnerNotification = false; // enable/disable deleting of versions for regular users @@ -761,6 +765,10 @@ class Settings { /* {{{ */ $this->_globalReviewer = explode(',',strval($tab["globalReviewer"])); if(trim(strval($tab["globalApprover"]))) $this->_globalApprover = explode(',',strval($tab["globalApprover"])); + if(trim(strval($tab["globalGroupReviewer"]))) + $this->_globalGroupReviewer = explode(',',strval($tab["globalGroupReviewer"])); + if(trim(strval($tab["globalGroupApprover"]))) + $this->_globalGroupApprover = explode(',',strval($tab["globalGroupApprover"])); $this->_presetExpirationDate = strval($tab["presetExpirationDate"]); $this->_versioningFileName = strval($tab["versioningFileName"]); $this->_workflowMode = strval($tab["workflowMode"]); @@ -1115,6 +1123,8 @@ class Settings { /* {{{ */ $this->setXMLAttributValue($node, "addManagerAsApprover", $this->_addManagerAsApprover); $this->setXMLAttributValue($node, "globalReviewer", implode(',', $this->_globalReviewer)); $this->setXMLAttributValue($node, "globalApprover", implode(',', $this->_globalApprover)); + $this->setXMLAttributValue($node, "globalGroupReviewer", implode(',', $this->_globalGroupReviewer)); + $this->setXMLAttributValue($node, "globalGroupApprover", implode(',', $this->_globalGroupApprover)); $this->setXMLAttributValue($node, "presetExpirationDate", $this->_presetExpirationDate); $this->setXMLAttributValue($node, "apiOrigin", $this->_apiOrigin); $this->setXMLAttributValue($node, "versioningFileName", $this->_versioningFileName); diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index b205857b1..ff740d904 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -1080,6 +1080,11 @@ function getMandatoryReviewers($folder, $document, $user) { /* {{{ */ $revi = array_merge($revi, $settings->_globalReviewer); } + /* Add global group reviewers as mandatory reviewers */ + if(!empty($settings->_globalGroupReviewer)) { + $revg = array_merge($revg, $settings->_globalGroupReviewer); + } + /* Check if reviewers are allowed to review */ $revi = array_unique($revi); $revg = array_unique($revg); @@ -1161,6 +1166,11 @@ function getMandatoryApprovers($folder, $document, $user) { /* {{{ */ $appi = array_merge($appi, $settings->_globalApprover); } + /* Add global group approvers as mandatory approvers */ + if(!empty($settings->_globalGroupApprover)) { + $appg = array_merge($appg, $settings->_globalGroupApprover); + } + /* Check if approvers are allowed to approve */ $appi = array_unique($appi); $appg = array_unique($appg); diff --git a/op/op.Settings.php b/op/op.Settings.php index c36df1032..351d1560b 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -251,6 +251,8 @@ if ($action == "saveSettings") setBoolValue("addManagerAsApprover"); setArrayValue("globalReviewer"); setArrayValue("globalApprover"); + setArrayValue("globalGroupReviewer"); + setArrayValue("globalGroupApprover"); setBoolValue("enableUpdateRevApp"); setBoolValue("enableRemoveRevApp"); setBoolValue("enableVersionDeletion"); diff --git a/views/bootstrap/class.GroupMgr.php b/views/bootstrap/class.GroupMgr.php index fa53d78dd..e0cb49596 100644 --- a/views/bootstrap/class.GroupMgr.php +++ b/views/bootstrap/class.GroupMgr.php @@ -149,6 +149,7 @@ $(document).ready( function() { function showGroupForm($group) { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; + $settings = $this->params['settings']; $allUsers = $this->params['allusers']; $groups = $this->params['allgroups']; $sortusersinlist = $this->params['sortusersinlist']; @@ -213,7 +214,16 @@ $(document).ready( function() { print "
getID()."\" />getID()."\" />".createHiddenFieldWithKey('rmmember')."
"; print " "; print "
getID()."\" />getID()."\" />".createHiddenFieldWithKey('tmanager')."
"; - print ""; + print ""; + echo ""; + if($group->isMember($member, true) && $member->isAdmin() && $settings->_addManagerAsReviewer && !$settings->_enableAdminRevApp) { + $this->warningMsg(getMLText("settings_manager_reviewer_is_admin", ['login'=>$member->getLogin()])); + } + if($group->isMember($member, true) && $member->isAdmin() && $settings->_addManagerAsApprover && !$settings->_enableAdminRevApp) { + $this->warningMsg(getMLText("settings_manager_approver_is_admin", ['login'=>$member->getLogin()])); + } + echo ""; + print ""; } } ?> diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 7319c4655..fe7041832 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -225,6 +225,37 @@ class SeedDMS_View_Settings extends SeedDMS_Theme_Style { params['settings']; + $dms = $this->params['dms']; +?> + "> + + +getAllGroups(); + if($groups) { + if(is_array($settings->{"_".$name})) + $selections = $settings->{"_".$name}; + else + $selections = explode(',', $settings->{"_".$name}); + echo ""; + } +?> + + +params['extmgr']; @@ -516,6 +547,8 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk)) showConfigCheckbox('settings_addManagerAsApprover', 'addManagerAsApprover'); ?> showConfigUser('settings_globalReviewer', 'globalReviewer', true, true); ?> showConfigUser('settings_globalApprover', 'globalApprover', true, true); ?> +showConfigGroup('settings_globalGroupReviewer', 'globalGroupReviewer', true, true); ?> +showConfigGroup('settings_globalGroupApprover', 'globalGroupApprover', true, true); ?> showConfigCheckbox('settings_enableVersionDeletion', 'enableVersionDeletion'); ?> showConfigCheckbox('settings_enableVersionModification', 'enableVersionModification'); ?> showConfigCheckbox('settings_enableDuplicateDocNames', 'enableDuplicateDocNames'); ?> @@ -752,6 +785,22 @@ if(is_writeable($settings->_configFilePath)) { $this->warningMsg(getMLText("settings_partionsize_below_max_filesize")); } + /* Check if globally defined reviewer/approvers are admins */ + if(!$settings->_enableAdminRevApp) { + foreach($settings->_globalReviewer as $uid) { + $u = $dms->getUser($uid); + if($u->isAdmin()) { + $this->warningMsg(getMLText("settings_global_reviewer_is_admin", ['login'=>$u->getLogin()])); + } + } + foreach($settings->_globalReviewer as $uid) { + $u = $dms->getUser($uid); + if($u->isAdmin()) { + $this->warningMsg(getMLText("settings_global_approver_is_admin", ['login'=>$u->getLogin()])); + } + } + } + foreach($extmgr->getExtensionConfiguration() as $extname=>$extconf) { if($this->hasHook('checkConfig')) $this->callHook('checkConfig', $extname, $extconf);