add global group approver/reviewer

This commit is contained in:
Uwe Steinmann 2024-02-12 14:06:53 +01:00
parent 663ce7f675
commit d8c2a9df06
5 changed files with 84 additions and 3 deletions

View File

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

View File

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

View File

@ -251,6 +251,8 @@ if ($action == "saveSettings")
setBoolValue("addManagerAsApprover");
setArrayValue("globalReviewer");
setArrayValue("globalApprover");
setArrayValue("globalGroupReviewer");
setArrayValue("globalGroupApprover");
setBoolValue("enableUpdateRevApp");
setBoolValue("enableRemoveRevApp");
setBoolValue("enableVersionDeletion");

View File

@ -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 "<form action=\"../op/op.GroupMgr.php\" method=\"post\" class=\"form-inline\" style=\"display: inline-block; margin-bottom: 0px;\"><input type=\"hidden\" name=\"action\" value=\"rmmember\" /><input type=\"hidden\" name=\"groupid\" value=\"".$group->getID()."\" /><input type=\"hidden\" name=\"userid\" value=\"".$member->getID()."\" />".createHiddenFieldWithKey('rmmember')."<button type=\"submit\" class=\"btn btn-danger btn-mini btn-sm\"><i class=\"fa fa-remove\"></i><span class=\"d-none d-lg-block\"> ".getMLText("delete")."</span></button></form>";
print "&nbsp;";
print "<form action=\"../op/op.GroupMgr.php\" method=\"post\" class=\"form-inline\" style=\"display: inline-block; margin-bottom: 0px;\"><input type=\"hidden\" name=\"groupid\" value=\"".$group->getID()."\" /><input type=\"hidden\" name=\"action\" value=\"tmanager\" /><input type=\"hidden\" name=\"userid\" value=\"".$member->getID()."\" />".createHiddenFieldWithKey('tmanager')."<button type=\"submit\" class=\"btn btn-secondary btn-mini btn-sm\"><i class=\"fa fa-random\"></i><span class=\"d-none d-lg-block\"> ".getMLText("toggle_manager")."</span></button></form>";
print "</td></tr>";
print "</td>";
echo "<td>";
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 "</td>";
print "</tr>";
}
}
?>

View File

@ -225,6 +225,37 @@ class SeedDMS_View_Settings extends SeedDMS_Theme_Style {
<?php
} /* }}} */
protected function showConfigGroup($title, $name, $allowempty=false, $multiple=false, $size=0) { /* {{{ */
$settings = $this->params['settings'];
$dms = $this->params['dms'];
?>
<tr title="<?= getMLText($title."_desc") ?>">
<td><?= getMLText($title) ?></td>
<td>
<?php
$groups = $dms->getAllGroups();
if($groups) {
if(is_array($settings->{"_".$name}))
$selections = $settings->{"_".$name};
else
$selections = explode(',', $settings->{"_".$name});
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"".$name.($multiple ? "[]" : "")."\"".($multiple ? " multiple" : "").($size ? " size=\"".$size."\"" : "")." data-placeholder=\"".getMLText("select_group")."\" style=\"width: 100%;\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($groups as $curgroup) {
echo "<option value=\"".$curgroup->getID()."\"";
if(in_array($curgroup->getID(), $selections))
echo " selected";
echo ">".htmlspecialchars($curgroup->getName())."</option>";
}
echo "</select>";
}
?>
</td>
</tr>
<?php
} /* }}} */
function js() { /* {{{ */
$extmgr = $this->params['extmgr'];
@ -516,6 +547,8 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk))
<?php $this->showConfigCheckbox('settings_addManagerAsApprover', 'addManagerAsApprover'); ?>
<?php $this->showConfigUser('settings_globalReviewer', 'globalReviewer', true, true); ?>
<?php $this->showConfigUser('settings_globalApprover', 'globalApprover', true, true); ?>
<?php $this->showConfigGroup('settings_globalGroupReviewer', 'globalGroupReviewer', true, true); ?>
<?php $this->showConfigGroup('settings_globalGroupApprover', 'globalGroupApprover', true, true); ?>
<?php $this->showConfigCheckbox('settings_enableVersionDeletion', 'enableVersionDeletion'); ?>
<?php $this->showConfigCheckbox('settings_enableVersionModification', 'enableVersionModification'); ?>
<?php $this->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);