diff --git a/doc/README.Swagger b/doc/README.Swagger index 576339a5e..f32df2f48 100644 --- a/doc/README.Swagger +++ b/doc/README.Swagger @@ -7,7 +7,17 @@ http://petstore.swagger.io/ or http://editor.swagger.io/ You may as well set up your own swagger-ui installation as described at https://medium.com/@tatianaensslin/how-to-add-swagger-ui-to-php-server-code-f1610c01dc03 -Your apache needs to have the module 'header' enabled, because some HTTP headers -are set when the file swagger.yaml is accessed by the editor. +Your apache needs to have the module `header` enabled, because some HTTP headers +are set when the file `swagger.yaml` is accessed by the editor. Currently, the swagger.yaml shipped with SeedDMS uses still swagger 2.0 + +If you are using php-fpm you will have to ensure that files with +extension .yaml are allowed to be parsed. Extend the +`security.limit_extensions` in the pool configuration by `.yaml`. Also +check the contents of the file `.htaccess` in directory `restapi`. It +by default sets the handler for php to `application/x-httpd-php` which +uses the apache module of php. If you would like to use php-fpm +instead, then set it to + + SetHandler "proxy:unix:/var/run/php/php8.2-fpm.sock|fcgi://localhost/" diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 6e4620f5a..0eb20145d 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -188,7 +188,7 @@ class Settings { /* {{{ */ var $_enableHiddenRevApp = true; // enable/disable update of a review/approval by the reviewer/approver var $_enableUpdateRevApp = false; - // enable/disable removal of a review/approval by the admiistrator + // enable/disable removal of a review/approval by the administrator var $_enableRemoveRevApp = false; // enable/disable listing logged in user as recipient var $_enableSelfReceipt = false; @@ -202,6 +202,14 @@ class Settings { /* {{{ */ var $_enableOwnerReceipt = false; // enable/disable filter for receipt by the recipient var $_enableFilterReceipt = false; + // group manager is mandatory reviewer + var $_addManagerAsReviewer = false; + // group manager is mandatory approver + var $_addManagerAsApprover = false; + // global reviewer + var $_globalReviewer = array(); + // global approver + var $_globalApprover = array(); // enable/disable default notification for owner var $_enableOwnerNotification = false; // enable/disable deleting of versions for regular users @@ -805,6 +813,12 @@ class Settings { /* {{{ */ $this->_enableOwnerReceipt = Settings::boolval($tab["enableOwnerReceipt"]); $this->_enableUpdateReceipt = Settings::boolval($tab["enableUpdateReceipt"]); $this->_enableFilterReceipt = Settings::boolval($tab["enableFilterReceipt"]); + $this->_addManagerAsReviewer = Settings::boolval($tab["addManagerAsReviewer"]); + $this->_addManagerAsApprover = Settings::boolval($tab["addManagerAsApprover"]); + if(trim(strval($tab["globalReviewer"]))) + $this->_globalReviewer = explode(',',strval($tab["globalReviewer"])); + if(trim(strval($tab["globalApprover"]))) + $this->_globalApprover = explode(',',strval($tab["globalApprover"])); $this->_presetExpirationDate = strval($tab["presetExpirationDate"]); $this->_initialDocumentStatus = intval($tab["initialDocumentStatus"]); $this->_versioningFileName = strval($tab["versioningFileName"]); @@ -1177,6 +1191,12 @@ class Settings { /* {{{ */ $this->setXMLAttributValue($node, "enableFilterReceipt", $this->_enableFilterReceipt); $this->setXMLAttributValue($node, "presetExpirationDate", $this->_presetExpirationDate); $this->setXMLAttributValue($node, "initialDocumentStatus", $this->_initialDocumentStatus); + $this->setXMLAttributValue($node, "addManagerAsReviewer", $this->_addManagerAsReviewer); + $this->setXMLAttributValue($node, "addManagerAsApprover", $this->_addManagerAsApprover); + $this->setXMLAttributValue($node, "globalReviewer", implode(',', $this->_globalReviewer)); + $this->setXMLAttributValue($node, "globalApprover", implode(',', $this->_globalApprover)); + $this->setXMLAttributValue($node, "presetExpirationDate", $this->_presetExpirationDate); + $this->setXMLAttributValue($node, "apiOrigin", $this->_apiOrigin); $this->setXMLAttributValue($node, "versioningFileName", $this->_versioningFileName); $this->setXMLAttributValue($node, "workflowMode", $this->_workflowMode); $this->setXMLAttributValue($node, "enableReceiptWorkflow", $this->_enableReceiptWorkflow); diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index 263e082b6..1c6d77b3e 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -959,7 +959,7 @@ function isAjax() { /* {{{ */ } /* }}} */ /** - * Hash a password + * Hash a password * * @param string $password * @return string hashed password @@ -969,7 +969,7 @@ function seed_pass_hash($password) { /* {{{ */ } /* }}} */ /** - * Verify a password + * Verify a password * * @param string $password * @return string hashed password @@ -1044,7 +1044,7 @@ function cmp_user_login($a, $b) { /* {{{ */ } /* }}} */ /** - * Compare function for sorting users by name + * Compare function for sorting users by name * * Use this for usort() * @@ -1066,36 +1066,80 @@ function cmp_user_fullname($a, $b) { /* {{{ */ * Returns the mandatory reviewers * * This function checks if the reviewers have at least read access - * on the folder containing the document. + * on the folder containing the document. It also checks if the + * mandatory reviewer is an admin or the uploading user and if + * those are allowed to review/approve a document. * * @param $folder folder where document is located + * @param $document document which is updated, null when adding a new document * @param $user user creating the new version or document - * @return array + * @return array containing the elements 'i' and 'g'. Each is a list of user/group ids */ -function getMandatoryReviewers($folder, $user) { /* {{{ */ +function getMandatoryReviewers($folder, $document, $user) { /* {{{ */ global $settings; - /* Get a list of all users and groups with read access on the folder. - * Only those users and groups will be added as reviewers - */ - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); - $res=$user->getMandatoryReviewers(); - $reviewers = array('i'=>[], 'g'=>[]); + /* Get mandatory reviewers of user */ + $res = $user->getMandatoryReviewers(); + $revi = $revg = []; foreach ($res as $r){ if ($r['reviewerUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['reviewerUserID']){ - $reviewers["i"][] = $r['reviewerUserID']; - break; - } + $revi[] = $r['reviewerUserID']; } elseif ($r['reviewerGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['reviewerGroupID']){ - $reviewers["g"][] = $r['reviewerGroupID']; - break; - } + $revg[] = $r['reviewerGroupID']; } } + + /* Add managers of groups as mandatory reviewers */ + if(!empty($settings->_addManagerAsReviewer)) { + $groups = $user->getGroups(); + foreach($groups as $group) { + $managers = $group->getManagers(); + foreach($managers as $manager) { + $revi[] = $manager->getId(); + } + } + } + + /* Add global reviewers as mandatory reviewers */ + if(!empty($settings->_globalReviewer)) { + $revi = array_merge($revi, $settings->_globalReviewer); + } + + /* Check if reviewers are allowed to review */ + $revi = array_unique($revi); + $revg = array_unique($revg); + $reviewers["i"] = []; // users + $reviewers["g"] = []; // groups + $reviewers["ni"] = []; // users being filtered out + $reviewers["ng"] = []; // groups being filtered out + $dms = $user->getDMS(); + foreach($revi as $uid) { + if($u = $dms->getUser($uid)) { + /* need at least read access on parent folder */ + if($folder->getAccessMode($u) < M_READ) + $reviewers["ni"][] = $u->getId(); + /* admins as reviewers must be enabled */ + elseif(!$settings->_enableAdminRevApp && $u->isAdmin()) + $reviewers["ni"][] = $u->getId(); + /* the owner of the document as a reviewer must be enabled */ + elseif(!$settings->_enableOwnerRevApp && $document && $document->getOwner()->getId() == $u->getId()) + $reviewers["ni"][] = $u->getId(); + /* the updloader as a reviewer must be enabled */ + elseif(!$settings->_enableSelfRevApp && $u->getId() == $user->getId()) + $reviewers["ni"][] = $u->getId(); + else + $reviewers["i"][] = $u->getId(); + } + } + foreach($revg as $gid) { + if($g = $dms->getGroup($gid)) { + if($folder->getGroupAccessMode($g) < M_READ) + $reviewers["ng"][] = $g->getId(); + else + $reviewers["g"][] = $g->getId(); + } + } + return $reviewers; } /* }}} */ @@ -1103,38 +1147,80 @@ function getMandatoryReviewers($folder, $user) { /* {{{ */ * Returns the mandatory approvers * * This function checks if the approvers have at least read access - * on the folder containing the document. + * on the folder containing the document. It also checks if the + * mandatory approver is an admin or the uploading user and if + * those are allowed to review/approve a document. * * @param $folder folder where document is located + * @param $document document which is updated, null when adding a new document * @param $user user creating the new version or document - * @return array + * @return array containing the elements 'i' and 'g'. Each is a list of user/group ids */ -function getMandatoryApprovers($folder, $user) { /* {{{ */ +function getMandatoryApprovers($folder, $document, $user) { /* {{{ */ global $settings; - /* Get a list of all users and groups with read access on the folder. - * Only those users and groups will be added as approvers - */ - $docAccess = $folder->getReadAccessList($settings->_enableAdminRevApp, $settings->_enableOwnerRevApp); - $res=$user->getMandatoryApprovers(); - $approvers = array('i'=>[], 'g'=>[]); + /* Get mandatory approvers of user */ + $res = $user->getMandatoryApprovers(); + $appi = $appg = []; foreach ($res as $r){ - if ($r['approverUserID']!=0){ - foreach ($docAccess["users"] as $usr) - if ($usr->getID()==$r['approverUserID']){ - $approvers["i"][] = $r['approverUserID']; - break; - } - } - else if ($r['approverGroupID']!=0){ - foreach ($docAccess["groups"] as $grp) - if ($grp->getID()==$r['approverGroupID']){ - $approvers["g"][] = $r['approverGroupID']; - break; - } + $appi[] = $r['approverUserID']; + } elseif ($r['approverGroupID']!=0){ + $appg[] = $r['approverGroupID']; } } + + /* Add managers of groups as mandatory approvers */ + if(!empty($settings->_addManagerAsApprover)) { + $groups = $user->getGroups(); + foreach($groups as $group) { + $managers = $group->getManagers(); + foreach($managers as $manager) { + $appi[] = $manager->getId(); + } + } + } + + /* Add global approvers as mandatory approvers */ + if(!empty($settings->_globalApprover)) { + $appi = array_merge($appi, $settings->_globalApprover); + } + + /* Check if approvers are allowed to approve */ + $appi = array_unique($appi); + $appg = array_unique($appg); + $approvers["i"] = []; // users + $approvers["g"] = []; // groups + $approvers["ni"] = []; // users being filtered out + $approvers["ng"] = []; // groups being filtered out + $dms = $user->getDMS(); + foreach($appi as $uid) { + if($u = $dms->getUser($uid)) { + /* need at least read access on parent folder */ + if($folder->getAccessMode($u) < M_READ) + $approvers["ni"][] = $u->getId(); + /* admins as approvers must be enabled */ + elseif(!$settings->_enableAdminRevApp && $u->isAdmin()) + $approvers["ni"][] = $u->getId(); + /* the owner of the document as a approver must be enabled */ + elseif(!$settings->_enableOwnerRevApp && $document && $document->getOwner()->getId() == $u->getId()) + $approvers["ni"][] = $u->getId(); + /* the updloader as a approver must be enabled */ + elseif(!$settings->_enableSelfRevApp && $u->getId() == $user->getId()) + $approvers["ni"][] = $u->getId(); + else + $approvers["i"][] = $u->getId(); + } + } + foreach($appg as $gid) { + if($g = $dms->getGroup($gid)) { + if($folder->getGroupAccessMode($g) < M_READ) + $approvers["ng"][] = $g->getId(); + else + $approvers["g"][] = $g->getId(); + } + } + return $approvers; } /* }}} */ diff --git a/op/op.AddDocument.php b/op/op.AddDocument.php index d22931e3f..0d5790dff 100644 --- a/op/op.AddDocument.php +++ b/op/op.AddDocument.php @@ -234,13 +234,13 @@ if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'tra // add mandatory reviewers/approvers if($settings->_workflowMode == 'traditional') { - $mreviewers = getMandatoryReviewers($folder, $user); + $mreviewers = getMandatoryReviewers($folder, null, $user); if($mreviewers['i']) $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); if($mreviewers['g']) $reviewers['g'] = array_merge($reviewers['g'], $mreviewers['g']); } - $mapprovers = getMandatoryApprovers($folder, $user); + $mapprovers = getMandatoryApprovers($folder, null, $user); if($mapprovers['i']) $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); if($mapprovers['g']) diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 655755ef3..0a6e7c30a 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -794,13 +794,13 @@ switch($command) { if($settings->_workflowMode == 'traditional' || $settings->_workflowMode == 'traditional_only_approval') { // add mandatory reviewers/approvers if($settings->_workflowMode == 'traditional') { - $mreviewers = getMandatoryReviewers($folder, $user); + $mreviewers = getMandatoryReviewers($folder, null, $user); if($mreviewers['i']) $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); if($mreviewers['g']) $reviewers['g'] = array_merge($reviewers['g'], $mreviewers['g']); } - $mapprovers = getMandatoryApprovers($folder, $user); + $mapprovers = getMandatoryApprovers($folder, null, $user); if($mapprovers['i']) $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); if($mapprovers['g']) diff --git a/op/op.Settings.php b/op/op.Settings.php index 236dd6353..a1e5443cb 100644 --- a/op/op.Settings.php +++ b/op/op.Settings.php @@ -259,6 +259,10 @@ if ($action == "saveSettings") setBoolValue("enableOwnerRevApp"); setBoolValue("enableSelfRevApp"); setBoolValue("enableSelfReceipt"); + setBoolValue("addManagerAsReviewer"); + setBoolValue("addManagerAsApprover"); + setArrayValue("globalReviewer"); + setArrayValue("globalApprover"); setBoolValue("enableUpdateRevApp"); setBoolValue("enableRemoveRevApp"); setBoolValue("enableAdminReceipt"); diff --git a/op/op.UpdateDocument.php b/op/op.UpdateDocument.php index 040c14527..b88e13b86 100644 --- a/op/op.UpdateDocument.php +++ b/op/op.UpdateDocument.php @@ -278,13 +278,13 @@ default: // add mandatory reviewers/approvers if($settings->_workflowMode == 'traditional') { - $mreviewers = getMandatoryReviewers($folder, $user); + $mreviewers = getMandatoryReviewers($folder, $document, $user); if($mreviewers['i']) $reviewers['i'] = array_merge($reviewers['i'], $mreviewers['i']); if($mreviewers['g']) $reviewers['g'] = array_merge($reviewers['g'], $mreviewers['g']); } - $mapprovers = getMandatoryApprovers($folder, $user); + $mapprovers = getMandatoryApprovers($folder, $document, $user); if($mapprovers['i']) $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); if($mapprovers['g']) diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index 67a56ed35..85eacb61a 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -514,33 +514,30 @@ console.log(params); } if($settings->_initialDocumentStatus == S_RELEASED) $this->warningMsg(getMLText("add_doc_workflow_warning")); + $this->contentContainerEnd(); } elseif($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') { $this->contentContainerEnd(); if($workflowmode == 'traditional') { $this->contentSubHeading(getMLText("assign_reviewers")); $this->contentContainerStart(); + $mreviewers = getMandatoryReviewers($folder, null, $user); + /* List all mandatory reviewers */ - $res=$user->getMandatoryReviewers(); $tmp = array(); - if($res) { - foreach ($res as $r) { - if($r['reviewerUserID'] > 0) { - $u = $dms->getUser($r['reviewerUserID']); - $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); - } - } + foreach ($mreviewers['i'] as $r) { + $u = $dms->getUser($r); + $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); } $options = array(); foreach ($docAccess["users"] as $usr) { if(!$enablehiddenrevapp && $usr->isHidden()) continue; - if (!$enableselfrevapp && $usr->getID()==$user->getID()) continue; - $mandatory=false; - foreach ($res as $r) if ($r['reviewerUserID']==$usr->getID()) $mandatory=true; + if(!$enableselfrevapp && $usr->getID()==$user->getID()) continue; $option = array($usr->getID(), htmlspecialchars($usr->getLogin()." - ".$usr->getFullName()), null); - if ($mandatory) $option[] = array(array('disabled', 'disabled')); + if(in_array($usr->getId(), $mreviewers['i'])) + $option[] = array(array('disabled', 'disabled'), array('data-subtitle', getMLText('user_is_mandatory_reviewer'))); $options[] = $option; } $this->formField( @@ -557,17 +554,15 @@ console.log(params); ); /* Check for mandatory reviewer without access */ - foreach($res as $r) { - if($r['reviewerUserID']) { - $hasAccess = false; - foreach ($docAccess["users"] as $usr) { - if ($r['reviewerUserID']==$usr->getID()) - $hasAccess = true; - } - if(!$hasAccess) { - $noAccessUser = $dms->getUser($r['reviewerUserID']); - $this->warningMsg(getMLText("mandatory_reviewer_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")")))); - } + foreach($mreviewers['ni'] as $r) { + $hasAccess = false; + foreach ($docAccess["users"] as $usr) { + if ($r == $usr->getID()) + $hasAccess = true; + } + if(!$hasAccess) { + $noAccessUser = $dms->getUser($r); + $this->warningMsg(getMLText("mandatory_reviewer_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")")))); } } @@ -590,22 +585,15 @@ console.log(params); /* List all mandatory groups of reviewers */ $tmp = array(); - if($res) { - foreach ($res as $r) { - if($r['reviewerGroupID'] > 0) { - $u = $dms->getGroup($r['reviewerGroupID']); - $tmp[] = htmlspecialchars($u->getName()); - } - } + foreach ($mreviewers['g'] as $r) { + $u = $dms->getGroup($r); + $tmp[] = htmlspecialchars($u->getName()); } $options = array(); foreach ($docAccess["groups"] as $grp) { - - $mandatory=false; - foreach ($res as $r) if ($r['reviewerGroupID']==$grp->getID()) $mandatory=true; - $option = array($grp->getID(), htmlspecialchars($grp->getName()), null); - if ($mandatory || !$grp->getUsers()) $option[] = array(array('disabled', 'disabled')); + if(in_array($grp->getId(), $mreviewers['g'])) + $option[] = array(array('disabled', 'disabled'), array('data-subtitle', getMLText('group_is_mandatory_reviewer'))); $options[] = $option; } $this->formField( @@ -621,17 +609,15 @@ console.log(params); array('field_wrap'=>array('', ($tmp ? '
'.getMLText('mandatory_reviewergroups').': '.implode(', ', $tmp).'
' : ''))) ); /* Check for mandatory reviewer group without access */ - foreach($res as $r) { - if ($r['reviewerGroupID']) { - $hasAccess = false; - foreach ($docAccess["groups"] as $grp) { - if ($r['reviewerGroupID']==$grp->getID()) - $hasAccess = true; - } - if(!$hasAccess) { - $noAccessGroup = $dms->getGroup($r['reviewerGroupID']); - $this->warningMsg(getMLText("mandatory_reviewergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); - } + foreach($mreviewers['ng'] as $r) { + $hasAccess = false; + foreach ($docAccess["groups"] as $grp) { + if ($r == $grp->getID()) + $hasAccess = true; + } + if(!$hasAccess) { + $noAccessGroup = $dms->getGroup($r['reviewerGroupID']); + $this->warningMsg(getMLText("mandatory_reviewergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); } } $this->contentContainerEnd(); @@ -639,28 +625,24 @@ console.log(params); $this->contentSubHeading(getMLText("assign_approvers")); $this->contentContainerStart(); - $res=$user->getMandatoryApprovers(); + + $mapprovers = getMandatoryApprovers($folder, null, $user); + /* List all mandatory approvers */ $tmp = array(); - if($res) { - foreach ($res as $r) { - if($r['approverUserID'] > 0) { - $u = $dms->getUser($r['approverUserID']); - $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); - } - } + foreach ($mapprovers['i'] as $r) { + $u = $dms->getUser($r); + $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); } $options = array(); foreach ($docAccess["users"] as $usr) { if(!$enablehiddenrevapp && $usr->isHidden()) continue; - if (!$enableselfrevapp && $usr->getID()==$user->getID()) continue; + if(!$enableselfrevapp && $usr->getID()==$user->getID()) continue; - $mandatory=false; - foreach ($res as $r) if ($r['approverUserID']==$usr->getID()) $mandatory=true; - $option = array($usr->getID(), htmlspecialchars($usr->getLogin()." - ".$usr->getFullName()), null); - if ($mandatory) $option[] = array(array('disabled', 'disabled')); + if(in_array($usr->getId(), $mapprovers['i'])) + $option[] = array(array('disabled', 'disabled'), array('data-subtitle', getMLText('user_is_mandatory_approver'))); $options[] = $option; } $this->formField( @@ -677,17 +659,15 @@ console.log(params); ); /* Check for mandatory approvers without access */ - foreach($res as $r) { - if($r['approverUserID']) { - $hasAccess = false; - foreach ($docAccess["users"] as $usr) { - if ($r['approverUserID']==$usr->getID()) - $hasAccess = true; - } - if(!$hasAccess) { - $noAccessUser = $dms->getUser($r['approverUserID']); - $this->warningMsg(getMLText("mandatory_approver_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")")))); - } + foreach($mapprovers['ni'] as $r) { + $hasAccess = false; + foreach ($docAccess["users"] as $usr) { + if ($r == $usr->getID()) + $hasAccess = true; + } + if(!$hasAccess) { + $noAccessUser = $dms->getUser($r); + $this->warningMsg(getMLText("mandatory_approver_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")")))); } } @@ -710,24 +690,16 @@ console.log(params); /* List all mandatory groups of approvers */ $tmp = array(); - if($res) { - foreach ($res as $r) { - if($r['approverGroupID'] > 0) { - $u = $dms->getGroup($r['approverGroupID']); - $tmp[] = htmlspecialchars($u->getName()); - } - } + foreach ($mapprovers['g'] as $r) { + $u = $dms->getGroup($r); + $tmp[] = htmlspecialchars($u->getName()); } $options = array(); foreach ($docAccess["groups"] as $grp) { - - $mandatory=false; - foreach ($res as $r) if ($r['approverGroupID']==$grp->getID()) $mandatory=true; - $option = array($grp->getID(), htmlspecialchars($grp->getName()), null); - if ($mandatory || !$grp->getUsers()) $option[] = array(array('disabled', 'disabled')); - + if(in_array($usr->getId(), $mapprovers['g'])) + $option[] = array(array('disabled', 'disabled'), array('data-subtitle', getMLText('group_is_mandatory_approver'))); $options[] = $option; } $this->formField( @@ -744,19 +716,18 @@ console.log(params); ); /* Check for mandatory approver groups without access */ - foreach($res as $r) { - if ($r['approverGroupID']) { - $hasAccess = false; - foreach ($docAccess["groups"] as $grp) { - if ($r['approverGroupID']==$grp->getID()) - $hasAccess = true; - } - if(!$hasAccess) { - $noAccessGroup = $dms->getGroup($r['approverGroupID']); - $this->warningMsg(getMLText("mandatory_approvergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); - } + foreach($mapprovers['ng'] as $r) { + $hasAccess = false; + foreach ($docAccess["groups"] as $grp) { + if ($r == $grp->getID()) + $hasAccess = true; + } + if(!$hasAccess) { + $noAccessGroup = $dms->getGroup($r); + $this->warningMsg(getMLText("mandatory_approvergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); } } + $this->contentContainerEnd(); $this->warningMsg(getMLText("add_doc_reviewer_approver_warning")); } else { } diff --git a/views/bootstrap/class.SetReviewersApprovers.php b/views/bootstrap/class.SetReviewersApprovers.php index c06df8c74..582318e89 100644 --- a/views/bootstrap/class.SetReviewersApprovers.php +++ b/views/bootstrap/class.SetReviewersApprovers.php @@ -89,51 +89,48 @@ class SeedDMS_View_SetReviewersApprovers extends SeedDMS_Theme_Style { $this->contentSubHeading(getMLText("update_reviewers")); $this->contentContainerStart(); - if($user->getID() != $owner->getID()) { - $res=$owner->getMandatoryReviewers(); - if($user->isAdmin()) - $res = array(); - } else - $res=$user->getMandatoryReviewers(); + /* + if($user->getID() != $owner->getID()) { + $res=$owner->getMandatoryReviewers(); + if($user->isAdmin()) + $res = array(); + } else + $res=$user->getMandatoryReviewers(); + */ + $mreviewers = getMandatoryReviewers($folder, $document, $user); - $options = []; - foreach ($docAccess["users"] as $usr) { - $mandatory=false; - foreach ($res as $r) if ($r['reviewerUserID']==$usr->getID()) $mandatory=true; - - if ($mandatory){ - $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), false, array(array('disabled', 'disabled'), array('data-subtitle', getMLText('user_is_mandatory_reviewer')))); - } elseif (isset($reviewIndex["i"][$usr->getID()])) { - switch ($reviewIndex["i"][$usr->getID()]["status"]) { - case S_LOG_WAITING: - $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), true); - break; - case S_LOG_USER_REMOVED: - $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), false, array(array('data-subtitle', getMLText('user_previously_removed_from_reviewers')))); - break; - default: - $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), false, array(array('disabled', 'disabled'))); - break; + $options = []; + foreach ($docAccess["users"] as $usr) { + if(in_array($usr->getId(), $mreviewers['i'])) { + $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), false, array(array('disabled', 'disabled'), array('data-subtitle', getMLText('user_is_mandatory_reviewer')))); + } elseif (isset($reviewIndex["i"][$usr->getID()])) { + switch ($reviewIndex["i"][$usr->getID()]["status"]) { + case S_LOG_WAITING: + $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), true); + break; + case S_LOG_USER_REMOVED: + $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), false, array(array('data-subtitle', getMLText('user_previously_removed_from_reviewers')))); + break; + default: + $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), false, array(array('disabled', 'disabled'))); + break; + } + } else { + if(!$enablehiddenrevapp && $usr->isHidden()) continue; + if(!$enableselfrevapp && $usr->getID()==$user->getID()) continue; + $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName())); } - } else { - if(!$enablehiddenrevapp && $usr->isHidden()) continue; - if (!$enableselfrevapp && $usr->getID()==$user->getID()) continue; - $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName())); } - } + /* List all mandatory reviewers */ $extraparams = []; - if($res) { - $tmp = array(); - foreach ($res as $r) { - if($r['reviewerUserID'] > 0) { - $u = $dms->getUser($r['reviewerUserID']); - $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); - } - } - if($tmp) { - $extraparams['field_wrap'] = ['', '
'.getMLText('mandatory_reviewers').': '.implode(', ', $tmp)."
\n"]; - } + $tmp = array(); + foreach ($mreviewers['i'] as $r) { + $u = $dms->getUser($r); + $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); + } + if($tmp) { + $extraparams['field_wrap'] = ['', '
'.getMLText('mandatory_reviewers').': '.implode(', ', $tmp)."
\n"]; } $this->formField( getMLText("individuals"), @@ -173,10 +170,7 @@ class SeedDMS_View_SetReviewersApprovers extends SeedDMS_Theme_Style { $options = []; foreach ($docAccess["groups"] as $group) { $grpusers = $group->getUsers(); - $mandatory=false; - foreach ($res as $r) if ($r['reviewerGroupID']==$group->getID()) $mandatory=true; - - if ($mandatory) { + if(in_array($group->getId(), $mreviewers['g'])) { $options[] = array($group->getID(), htmlspecialchars($group->getName().' ('.count($grpusers).')'), false, array(array('disabled', 'disabled'), array('data-subtitle', getMLText('group_is_mandatory_reviewer')))); } elseif (isset($reviewIndex["g"][$group->getID()])) { switch ($reviewIndex["g"][$group->getID()]["status"]) { @@ -197,17 +191,13 @@ class SeedDMS_View_SetReviewersApprovers extends SeedDMS_Theme_Style { /* List all mandatory groups of reviewers */ $extraparams = []; - if($res) { - $tmp = array(); - foreach ($res as $r) { - if($r['reviewerGroupID'] > 0) { - $u = $dms->getGroup($r['reviewerGroupID']); - $tmp[] = htmlspecialchars($u->getName()); - } - } - if($tmp) { - $extraparams['field_wrap'] = ['', '
'.getMLText('mandatory_reviewergroups').': '.implode(', ', $tmp)."
\n"]; - } + $tmp = array(); + foreach ($mreviewers['g'] as $r) { + $u = $dms->getGroup($r); + $tmp[] = htmlspecialchars($u->getName()); + } + if($tmp) { + $extraparams['field_wrap'] = ['', '
'.getMLText('mandatory_reviewergroups').': '.implode(', ', $tmp)."
\n"]; } $this->formField( getMLText("groups"), @@ -228,20 +218,21 @@ class SeedDMS_View_SetReviewersApprovers extends SeedDMS_Theme_Style { $this->contentSubHeading(getMLText("update_approvers")); $this->contentContainerStart(); + /* if($user->getID() != $owner->getID()) { $res=$owner->getMandatoryApprovers(); if($user->isAdmin()) $res = array(); } else $res=$user->getMandatoryApprovers(); + */ + + $mapprovers = getMandatoryApprovers($folder, $document, $user); $options = []; foreach ($docAccess["users"] as $usr) { - $mandatory=false; - foreach ($res as $r) if ($r['approverUserID']==$usr->getID()) $mandatory=true; - - if ($mandatory){ + if(in_array($usr->getId(), $mapprovers['i'])) { $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName()), false, array(array('disabled', 'disabled'), array('data-subtitle', getMLText('user_is_mandatory_approver')))); } elseif (isset($approvalIndex["i"][$usr->getID()])) { @@ -259,24 +250,20 @@ class SeedDMS_View_SetReviewersApprovers extends SeedDMS_Theme_Style { } else { if(!$enablehiddenrevapp && $usr->isHidden()) continue; - if (!$enableselfrevapp && $usr->getID()==$user->getID()) continue; + if(!$enableselfrevapp && $usr->getID()==$user->getID()) continue; $options[] = array($usr->getID(), htmlspecialchars($usr->getLogin() . " - ". $usr->getFullName())); } } /* List all mandatory approvers */ $extraparams = []; - if($res) { - $tmp = array(); - foreach ($res as $r) { - if($r['approverUserID'] > 0) { - $u = $dms->getUser($r['approverUserID']); - $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); - } - } - if($tmp) { - $extraparams['field_wrap'] = ['', '
'.getMLText('mandatory_approvers').': '.implode(', ', $tmp)."
\n"]; - } + $tmp = array(); + foreach ($mapprovers['i'] as $r) { + $u = $dms->getUser($r); + $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); + } + if($tmp) { + $extraparams['field_wrap'] = ['', '
'.getMLText('mandatory_approvers').': '.implode(', ', $tmp)."
\n"]; } $this->formField( getMLText("individuals"), @@ -316,10 +303,7 @@ class SeedDMS_View_SetReviewersApprovers extends SeedDMS_Theme_Style { $options = []; foreach ($docAccess["groups"] as $group) { $grpusers = $group->getUsers(); - $mandatory=false; - foreach ($res as $r) if ($r['approverGroupID']==$group->getID()) $mandatory=true; - - if ($mandatory) { + if(in_array($group->getId(), $mapprovers['g'])) { $options[] = array($group->getID(), htmlspecialchars($group->getName().' ('.count($grpusers).')'), false, array(array('disabled', 'disabled'), array('data-subtitle', getMLText('group_is_mandatory_approver')))); } elseif (isset($approvalIndex["g"][$group->getID()])) { @@ -342,17 +326,13 @@ class SeedDMS_View_SetReviewersApprovers extends SeedDMS_Theme_Style { /* List all mandatory groups of approvers */ $extraparams = []; - if($res) { - $tmp = array(); - foreach ($res as $r) { - if($r['approverGroupID'] > 0) { - $u = $dms->getGroup($r['approverGroupID']); - $tmp[] = htmlspecialchars($u->getName()); - } - } - if($tmp) { - $extraparams['field_wrap'] = ['', '
'.getMLText('mandatory_reviewergroups').': '.implode(', ', $tmp)."
\n"]; - } + $tmp = array(); + foreach ($mapprovers['g'] as $r) { + $u = $dms->getGroup($r); + $tmp[] = htmlspecialchars($u->getName()); + } + if($tmp) { + $extraparams['field_wrap'] = ['', '
'.getMLText('mandatory_approvergroups').': '.implode(', ', $tmp)."
\n"]; } $this->formField( getMLText("groups"), diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 3d7c6f931..f942f18df 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -544,6 +544,10 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk)) showConfigCheckbox('settings_enableOwnerReceipt', 'enableOwnerReceipt'); ?> showConfigCheckbox('settings_enableUpdateReceipt', 'enableUpdateReceipt'); ?> showConfigCheckbox('settings_enableFilterReceipt', 'enableFilterReceipt'); ?> +showConfigCheckbox('settings_addManagerAsReviewer', 'addManagerAsReviewer'); ?> +showConfigCheckbox('settings_addManagerAsApprover', 'addManagerAsApprover'); ?> +showConfigUser('settings_globalReviewer', 'globalReviewer', true, true); ?> +showConfigUser('settings_globalApprover', 'globalApprover', true, true); ?> showConfigCheckbox('settings_enableVersionDeletion', 'enableVersionDeletion'); ?> showConfigCheckbox('settings_enableVersionModification', 'enableVersionModification'); ?> showConfigCheckbox('settings_enableDuplicateDocNames', 'enableDuplicateDocNames'); ?> diff --git a/views/bootstrap/class.UpdateDocument.php b/views/bootstrap/class.UpdateDocument.php index 5fba65fe5..bfdef64d4 100644 --- a/views/bootstrap/class.UpdateDocument.php +++ b/views/bootstrap/class.UpdateDocument.php @@ -348,28 +348,24 @@ console.log(element); $this->contentContainerEnd(); $this->contentSubHeading(getMLText("assign_reviewers")); $this->contentContainerStart(); - $res=$user->getMandatoryReviewers(); + + $mreviewers = getMandatoryReviewers($folder, $document, $user); + $options = array(); foreach ($docAccess["users"] as $usr) { if(!$enablehiddenrevapp && $usr->isHidden()) continue; - if (!$enableselfrevapp && $usr->getID()==$user->getID()) continue; - $mandatory=false; - foreach ($res as $r) if ($r['reviewerUserID']==$usr->getID()) $mandatory=true; + if(!$enableselfrevapp && $usr->getID()==$user->getID()) continue; $option = array($usr->getID(), htmlspecialchars($usr->getLogin()." - ".$usr->getFullName()), null); - if ($mandatory) $option[] = array(array('disabled', 'disabled')); + if(in_array($usr->getId(), $mreviewers['i'])) + $option[] = array(array('disabled', 'disabled'), array('data-subtitle', getMLText('user_is_mandatory_reviewer'))); $options[] = $option; } $tmp = array(); foreach($reviewStatus as $r) { if($r['type'] == 0) { - if($res) { - $mandatory=false; - foreach ($res as $rr) - if ($rr['reviewerUserID']==$r['required']) { - $mandatory=true; - } - if(!$mandatory) + if($mreviewers) { + if(!in_array($r['required'], $mreviewers['i'])) $tmp[] = $r['required']; } else { $tmp[] = $r['required']; @@ -381,20 +377,17 @@ console.log(element); $fieldwrap = array('', $this->getSelectPresetButtonHtml("IndReviewers", $tmp)); } /* List all mandatory reviewers */ - if($res) { - $tmp = array(); - foreach ($res as $r) { - if($r['reviewerUserID'] > 0) { - $u = $dms->getUser($r['reviewerUserID']); - $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); - } - } - if($tmp) { - if(isset($fieldwrap[1])) - $fieldwrap[1] .= '
'.getMLText('mandatory_reviewers').': '.implode(', ', $tmp)."
\n"; - else - $fieldwrap[1] = '
'.getMLText('mandatory_reviewers').': '.implode(', ', $tmp)."
\n"; - } + $tmp = array(); + foreach ($mreviewers['i'] as $r) { + $u = $dms->getUser($r); + $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); + } + + if($tmp) { + if(isset($fieldwrap[1])) + $fieldwrap[1] .= '
'.getMLText('mandatory_reviewers').': '.implode(', ', $tmp)."
\n"; + else + $fieldwrap[1] = '
'.getMLText('mandatory_reviewers').': '.implode(', ', $tmp)."
\n"; } $this->formField( @@ -412,17 +405,15 @@ console.log(element); ); /* Check for mandatory reviewer without access */ - foreach($res as $r) { - if($r['reviewerUserID']) { - $hasAccess = false; - foreach ($docAccess["users"] as $usr) { - if ($r['reviewerUserID']==$usr->getID()) - $hasAccess = true; - } - if(!$hasAccess) { - $noAccessUser = $dms->getUser($r['reviewerUserID']); - $this->warningMsg(getMLText("mandatory_reviewer_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")")))); - } + foreach($mreviewers['ni'] as $r) { + $hasAccess = false; + foreach ($docAccess["users"] as $usr) { + if ($r == $usr->getID()) + $hasAccess = true; + } + if(!$hasAccess) { + $noAccessUser = $dms->getUser($r); + $this->warningMsg(getMLText("mandatory_reviewer_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")")))); } } @@ -445,24 +436,17 @@ console.log(element); $options = array(); foreach ($docAccess["groups"] as $grp) { - - $mandatory=false; - foreach ($res as $r) if ($r['reviewerGroupID']==$grp->getID()) $mandatory=true; - $option = array($grp->getID(), htmlspecialchars($grp->getName()), null); - if ($mandatory || !$grp->getUsers()) $option[] = array(array('disabled', 'disabled')); + if(in_array($grp->getId(), $mreviewers['g']) || !$grp->getUsers()) + $option[] = array(array('disabled', 'disabled'), array('data-subtitle', getMLText('group_is_mandatory_reviewer'))); $options[] = $option; } + $tmp = array(); foreach($reviewStatus as $r) { if($r['type'] == 1) { - if($res) { - $mandatory=false; - foreach ($res as $rr) - if ($rr['reviewerGroupID']==$r['required']) { - $mandatory=true; - } - if(!$mandatory) + if($mreviewers) { + if(!in_array($r['required'], $mreviewers['g'])) $tmp[] = $r['required']; } else { $tmp[] = $r['required']; @@ -474,18 +458,18 @@ console.log(element); $fieldwrap = array('', $this->getSelectPresetButtonHtml("GrpReviewers", $tmp)); } /* List all mandatory groups of reviewers */ - if($res) { - $tmp = array(); - foreach ($res as $r) { - if($r['reviewerGroupID'] > 0) { - $u = $dms->getGroup($r['reviewerGroupID']); - $tmp[] = htmlspecialchars($u->getName()); - } - } - if($tmp) { - $fieldwrap[1] .= '
'.getMLText('mandatory_reviewergroups').': '.implode(', ', $tmp)."
\n"; - } + $tmp = array(); + foreach ($mreviewers['g'] as $r) { + $u = $dms->getGroup($r); + $tmp[] = htmlspecialchars($u->getName()); } + if($tmp) { + if(isset($fieldwrap[1])) + $fieldwrap[1] .= '
'.getMLText('mandatory_reviewergroups').': '.implode(', ', $tmp)."
\n"; + else + $fieldwrap[1] = '
'.getMLText('mandatory_reviewergroups').': '.implode(', ', $tmp)."
\n"; + } + $this->formField( getMLText("groups"), array( @@ -501,17 +485,15 @@ console.log(element); ); /* Check for mandatory reviewer group without access */ - foreach($res as $r) { - if ($r['reviewerGroupID']) { - $hasAccess = false; - foreach ($docAccess["groups"] as $grp) { - if ($r['reviewerGroupID']==$grp->getID()) - $hasAccess = true; - } - if(!$hasAccess) { - $noAccessGroup = $dms->getGroup($r['reviewerGroupID']); - $this->warningMsg(getMLText("mandatory_reviewergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); - } + foreach($mreviewers['ng'] as $r) { + $hasAccess = false; + foreach ($docAccess["groups"] as $grp) { + if ($r == $grp->getID()) + $hasAccess = true; + } + if(!$hasAccess) { + $noAccessGroup = $dms->getGroup($r['reviewerGroupID']); + $this->warningMsg(getMLText("mandatory_reviewergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); } } $this->contentContainerEnd(); @@ -519,29 +501,25 @@ console.log(element); $this->contentSubHeading(getMLText("assign_approvers")); $this->contentContainerStart(); + + $mapprovers = getMandatoryApprovers($folder, $document, $user); + $options = array(); - $res=$user->getMandatoryApprovers(); foreach ($docAccess["users"] as $usr) { if(!$enablehiddenrevapp && $usr->isHidden()) continue; - if (!$enableselfrevapp && $usr->getID()==$user->getID()) continue; + if(!$enableselfrevapp && $usr->getID()==$user->getID()) continue; - $mandatory=false; - foreach ($res as $r) if ($r['approverUserID']==$usr->getID()) $mandatory=true; - $option = array($usr->getID(), htmlspecialchars($usr->getLogin()." - ".$usr->getFullName()), null); - if ($mandatory) $option[] = array(array('disabled', 'disabled')); + if(in_array($usr->getId(), $mapprovers['i'])) + $option[] = array(array('disabled', 'disabled'), array('data-subtitle', getMLText('user_is_mandatory_approver'))); $options[] = $option; } + $tmp = array(); foreach($approvalStatus as $r) { if($r['type'] == 0) { - if($res) { - $mandatory=false; - foreach ($res as $rr) - if ($rr['approverUserID']==$r['required']) { - $mandatory=true; - } - if(!$mandatory) + if($mapprovers) { + if(!in_array($r['required'], $mapprovers['i'])) $tmp[] = $r['required']; } else { $tmp[] = $r['required']; @@ -552,18 +530,18 @@ console.log(element); if($tmp) { $fieldwrap = array('', $this->getSelectPresetButtonHtml("IndApprovers", $tmp)); } + /* List all mandatory approvers */ - if($res) { - $tmp = array(); - foreach ($res as $r) { - if($r['approverUserID'] > 0) { - $u = $dms->getUser($r['approverUserID']); - $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); - } - } - if($tmp) { + $tmp = array(); + foreach ($mapprovers['i'] as $r) { + $u = $dms->getUser($r); + $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); + } + if($tmp) { + if(isset($fieldwrap[1])) $fieldwrap[1] .= '
'.getMLText('mandatory_approvers').': '.implode(', ', $tmp)."
\n"; - } + else + $fieldwrap[1] = '
'.getMLText('mandatory_approvers').': '.implode(', ', $tmp)."
\n"; } $this->formField( @@ -581,18 +559,16 @@ console.log(element); ); /* Check for mandatory approvers without access */ - foreach($res as $r) { - if($r['approverUserID']) { + foreach($mapprovers['ni'] as $r) { $hasAccess = false; foreach ($docAccess["users"] as $usr) { - if ($r['approverUserID']==$usr->getID()) + if ($r == $usr->getID()) $hasAccess = true; } if(!$hasAccess) { - $noAccessUser = $dms->getUser($r['approverUserID']); + $noAccessUser = $dms->getUser($r); $this->warningMsg(getMLText("mandatory_approver_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")")))); } - } } $options = array(); @@ -615,28 +591,18 @@ console.log(element); $options = array(); foreach ($docAccess["groups"] as $grp) { - $mandatory=false; - foreach ($res as $r) if ($r['approverGroupID']==$grp->getID()) $mandatory=true; - $option = array($grp->getID(), htmlspecialchars($grp->getName()), null); - if ($mandatory || !$grp->getUsers()) $option[] = array(array('disabled', 'disabled')); - + if(in_array($grp->getId(), $mapprovers['g'])) + $option[] = array(array('disabled', 'disabled'), array('data-subtitle', getMLText('group_is_mandatory_approver'))); $options[] = $option; } $tmp = array(); foreach($approvalStatus as $r) { if($r['type'] == 1) { - if($res) { - $mandatory=false; - foreach ($res as $rr) - if ($rr['approverGroupID']==$r['required']) { - $mandatory=true; - } - if(!$mandatory) - $tmp[] = $r['required']; - } else { + if(!in_array($r['required'], $mapprovers['g'])) $tmp[] = $r['required']; - } + } else { + $tmp[] = $r['required']; } } $fieldwrap = array('', ''); @@ -644,17 +610,13 @@ console.log(element); $fieldwrap = array('', $this->getSelectPresetButtonHtml("GrpApprovers", $tmp)); } /* List all mandatory groups of approvers */ - if($res) { - $tmp = array(); - foreach ($res as $r) { - if($r['approverGroupID'] > 0) { - $u = $dms->getGroup($r['approverGroupID']); - $tmp[] = htmlspecialchars($u->getName()); - } - } - if($tmp) { - $fieldwrap[1] .= '
'.getMLText('mandatory_approvergroups').': '.implode(', ', $tmp)."
\n"; - } + $tmp = array(); + foreach ($mapprovers['g'] as $r) { + $u = $dms->getGroup($r); + $tmp[] = htmlspecialchars($u->getName()); + } + if($tmp) { + $fieldwrap[1] .= '
'.getMLText('mandatory_approvergroups').': '.implode(', ', $tmp)."
\n"; } $this->formField( @@ -672,17 +634,15 @@ console.log(element); ); /* Check for mandatory approver groups without access */ - foreach($res as $r) { - if ($r['approverGroupID']) { - $hasAccess = false; - foreach ($docAccess["groups"] as $grp) { - if ($r['approverGroupID']==$grp->getID()) - $hasAccess = true; - } - if(!$hasAccess) { - $noAccessGroup = $dms->getGroup($r['approverGroupID']); - $this->warningMsg(getMLText("mandatory_approvergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); - } + foreach($mapprovers['ng'] as $r) { + $hasAccess = false; + foreach ($docAccess["groups"] as $grp) { + if ($r == $grp->getID()) + $hasAccess = true; + } + if(!$hasAccess) { + $noAccessGroup = $dms->getGroup($r); + $this->warningMsg(getMLText("mandatory_approvergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); } } $this->contentContainerEnd();