take all mandatory reviewers/approvers into account

This commit is contained in:
Uwe Steinmann 2024-02-21 15:33:13 +01:00
parent f4003f72e9
commit a0b3d9da27
2 changed files with 123 additions and 140 deletions

View File

@ -144,10 +144,14 @@ else
$mreviewers = getMandatoryReviewers($folder, $user); $mreviewers = getMandatoryReviewers($folder, $user);
if($mreviewers['i']) if($mreviewers['i'])
$reviewers['i'] = array_merge($reviewers['i'], $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, $user);
if($mapprovers['i']) if($mapprovers['i'])
$approvers['i'] = array_merge($approvers['i'], $mapprovers['i']); $approvers['i'] = array_merge($approvers['i'], $mapprovers['i']);
if($mapprovers['g'])
$approvers['g'] = array_merge($approvers['g'], $mapprovers['g']);
if($settings->_workflowMode == 'traditional' && !$settings->_allowReviewerOnly) { if($settings->_workflowMode == 'traditional' && !$settings->_allowReviewerOnly) {
/* Check if reviewers are send but no approvers */ /* Check if reviewers are send but no approvers */
@ -156,11 +160,19 @@ else
} }
} }
} elseif($settings->_workflowMode == 'advanced') { } elseif($settings->_workflowMode == 'advanced') {
if(!$workflow = $user->getMandatoryWorkflow()) { if(!$workflows = $user->getMandatoryWorkflows()) {
if(isset($_POST["workflow"])) if(isset($_POST["workflow"]))
$workflow = $dms->getWorkflow($_POST["workflow"]); $workflow = $dms->getWorkflow($_POST["workflow"]);
else else
$workflow = null; $workflow = null;
} else {
/* If there is excactly 1 mandatory workflow, then set no matter what has
* been posted in 'workflow', otherwise check if the posted workflow is in the
* list of mandatory workflows. If not, then take the first one.
*/
$workflow = array_shift($workflows);
foreach($workflows as $mw)
if($mw->getID() == $_POST['workflow']) {$workflow = $mw; break;}
} }
} }

View File

@ -272,28 +272,27 @@ $(document).ready(function() {
$this->warningMsg(getMLText("add_doc_workflow_warning")); $this->warningMsg(getMLText("add_doc_workflow_warning"));
} elseif($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') { } elseif($workflowmode == 'traditional' || $workflowmode == 'traditional_only_approval') {
if($workflowmode == 'traditional') { if($workflowmode == 'traditional') {
$this->contentContainerEnd();
$this->contentSubHeading(getMLText("assign_reviewers")); $this->contentSubHeading(getMLText("assign_reviewers"));
$res=$user->getMandatoryReviewers(); $this->contentContainerStart();
$mreviewers = getMandatoryReviewers($folder, $document, $user);
$options = array(); $options = array();
foreach ($docAccess["users"] as $usr) { 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['reviewerUserID']==$usr->getID()) $mandatory=true;
$option = array($usr->getID(), htmlspecialchars($usr->getLogin()." - ".$usr->getFullName()), null); $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; $options[] = $option;
} }
$tmp = array(); $tmp = array();
foreach($reviewStatus as $r) { foreach($reviewStatus as $r) {
if($r['type'] == 0) { if($r['type'] == 0) {
if($res) { if($mreviewers) {
$mandatory=false; if(!in_array($r['required'], $mreviewers['i']))
foreach ($res as $rr)
if ($rr['reviewerUserID']==$r['required']) {
$mandatory=true;
}
if(!$mandatory)
$tmp[] = $r['required']; $tmp[] = $r['required'];
} else { } else {
$tmp[] = $r['required']; $tmp[] = $r['required'];
@ -305,21 +304,18 @@ $(document).ready(function() {
$fieldwrap = array('', $this->getSelectPresetButtonHtml("IndReviewers", $tmp)); $fieldwrap = array('', $this->getSelectPresetButtonHtml("IndReviewers", $tmp));
} }
/* List all mandatory reviewers */ /* List all mandatory reviewers */
if($res) {
$tmp = array(); $tmp = array();
foreach ($res as $r) { foreach ($mreviewers['i'] as $r) {
if($r['reviewerUserID'] > 0) { $u = $dms->getUser($r);
$u = $dms->getUser($r['reviewerUserID']);
$tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')');
} }
}
if($tmp) { if($tmp) {
if(isset($fieldwrap[1])) if(isset($fieldwrap[1]))
$fieldwrap[1] .= '<div class="mandatories"><span>'.getMLText('mandatory_reviewers').':</span> '.implode(', ', $tmp)."</div>\n"; $fieldwrap[1] .= '<div class="mandatories"><span>'.getMLText('mandatory_reviewers').':</span> '.implode(', ', $tmp)."</div>\n";
else else
$fieldwrap[1] = '<div class="mandatories"><span>'.getMLText('mandatory_reviewers').':</span> '.implode(', ', $tmp)."</div>\n"; $fieldwrap[1] = '<div class="mandatories"><span>'.getMLText('mandatory_reviewers').':</span> '.implode(', ', $tmp)."</div>\n";
} }
}
$this->formField( $this->formField(
getMLText("individuals"), getMLText("individuals"),
@ -336,19 +332,17 @@ $(document).ready(function() {
); );
/* Check for mandatory reviewer without access */ /* Check for mandatory reviewer without access */
foreach($res as $r) { foreach($mreviewers['ni'] as $r) {
if($r['reviewerUserID']) {
$hasAccess = false; $hasAccess = false;
foreach ($docAccess["users"] as $usr) { foreach ($docAccess["users"] as $usr) {
if ($r['reviewerUserID']==$usr->getID()) if ($r == $usr->getID())
$hasAccess = true; $hasAccess = true;
} }
if(!$hasAccess) { if(!$hasAccess) {
$noAccessUser = $dms->getUser($r['reviewerUserID']); $noAccessUser = $dms->getUser($r);
$this->warningMsg(getMLText("mandatory_reviewer_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")")))); $this->warningMsg(getMLText("mandatory_reviewer_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")"))));
} }
} }
}
$options = array(); $options = array();
foreach ($docAccess["groups"] as $grp) { foreach ($docAccess["groups"] as $grp) {
@ -369,24 +363,17 @@ $(document).ready(function() {
$options = array(); $options = array();
foreach ($docAccess["groups"] as $grp) { 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); $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; $options[] = $option;
} }
$tmp = array(); $tmp = array();
foreach($reviewStatus as $r) { foreach($reviewStatus as $r) {
if($r['type'] == 1) { if($r['type'] == 1) {
if($res) { if($mreviewers) {
$mandatory=false; if(!in_array($r['required'], $mreviewers['g']))
foreach ($res as $rr)
if ($rr['reviewerGroupID']==$r['required']) {
$mandatory=true;
}
if(!$mandatory)
$tmp[] = $r['required']; $tmp[] = $r['required'];
} else { } else {
$tmp[] = $r['required']; $tmp[] = $r['required'];
@ -398,18 +385,18 @@ $(document).ready(function() {
$fieldwrap = array('', $this->getSelectPresetButtonHtml("GrpReviewers", $tmp)); $fieldwrap = array('', $this->getSelectPresetButtonHtml("GrpReviewers", $tmp));
} }
/* List all mandatory groups of reviewers */ /* List all mandatory groups of reviewers */
if($res) {
$tmp = array(); $tmp = array();
foreach ($res as $r) { foreach ($mreviewers['g'] as $r) {
if($r['reviewerGroupID'] > 0) { $u = $dms->getGroup($r);
$u = $dms->getGroup($r['reviewerGroupID']);
$tmp[] = htmlspecialchars($u->getName()); $tmp[] = htmlspecialchars($u->getName());
} }
}
if($tmp) { if($tmp) {
if(isset($fieldwrap[1]))
$fieldwrap[1] .= '<div class="mandatories"><span>'.getMLText('mandatory_reviewergroups').':</span> '.implode(', ', $tmp)."</div>\n"; $fieldwrap[1] .= '<div class="mandatories"><span>'.getMLText('mandatory_reviewergroups').':</span> '.implode(', ', $tmp)."</div>\n";
else
$fieldwrap[1] = '<div class="mandatories"><span>'.getMLText('mandatory_reviewergroups').':</span> '.implode(', ', $tmp)."</div>\n";
} }
}
$this->formField( $this->formField(
getMLText("groups"), getMLText("groups"),
array( array(
@ -425,11 +412,10 @@ $(document).ready(function() {
); );
/* Check for mandatory reviewer group without access */ /* Check for mandatory reviewer group without access */
foreach($res as $r) { foreach($mreviewers['ng'] as $r) {
if ($r['reviewerGroupID']) {
$hasAccess = false; $hasAccess = false;
foreach ($docAccess["groups"] as $grp) { foreach ($docAccess["groups"] as $grp) {
if ($r['reviewerGroupID']==$grp->getID()) if ($r == $grp->getID())
$hasAccess = true; $hasAccess = true;
} }
if(!$hasAccess) { if(!$hasAccess) {
@ -437,32 +423,30 @@ $(document).ready(function() {
$this->warningMsg(getMLText("mandatory_reviewergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); $this->warningMsg(getMLText("mandatory_reviewergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName()))));
} }
} }
} $this->contentContainerEnd();
} }
$this->contentSubHeading(getMLText("assign_approvers")); $this->contentSubHeading(getMLText("assign_approvers"));
$this->contentContainerStart();
$mapprovers = getMandatoryApprovers($folder, $document, $user);
$options = array(); $options = array();
$res=$user->getMandatoryApprovers();
foreach ($docAccess["users"] as $usr) { 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); $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; $options[] = $option;
} }
$tmp = array(); $tmp = array();
foreach($approvalStatus as $r) { foreach($approvalStatus as $r) {
if($r['type'] == 0) { if($r['type'] == 0) {
if($res) { if($mapprovers) {
$mandatory=false; if(!in_array($r['required'], $mapprovers['i']))
foreach ($res as $rr)
if ($rr['approverUserID']==$r['required']) {
$mandatory=true;
}
if(!$mandatory)
$tmp[] = $r['required']; $tmp[] = $r['required'];
} else { } else {
$tmp[] = $r['required']; $tmp[] = $r['required'];
@ -473,18 +457,18 @@ $(document).ready(function() {
if($tmp) { if($tmp) {
$fieldwrap = array('', $this->getSelectPresetButtonHtml("IndApprovers", $tmp)); $fieldwrap = array('', $this->getSelectPresetButtonHtml("IndApprovers", $tmp));
} }
/* List all mandatory approvers */ /* List all mandatory approvers */
if($res) {
$tmp = array(); $tmp = array();
foreach ($res as $r) { foreach ($mapprovers['i'] as $r) {
if($r['approverUserID'] > 0) { $u = $dms->getUser($r);
$u = $dms->getUser($r['approverUserID']);
$tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')'); $tmp[] = htmlspecialchars($u->getFullName().' ('.$u->getLogin().')');
} }
}
if($tmp) { if($tmp) {
if(isset($fieldwrap[1]))
$fieldwrap[1] .= '<div class="mandatories"><span>'.getMLText('mandatory_approvers').':</span> '.implode(', ', $tmp)."</div>\n"; $fieldwrap[1] .= '<div class="mandatories"><span>'.getMLText('mandatory_approvers').':</span> '.implode(', ', $tmp)."</div>\n";
} else
$fieldwrap[1] = '<div class="mandatories"><span>'.getMLText('mandatory_approvers').':</span> '.implode(', ', $tmp)."</div>\n";
} }
$this->formField( $this->formField(
@ -502,19 +486,17 @@ $(document).ready(function() {
); );
/* Check for mandatory approvers without access */ /* Check for mandatory approvers without access */
foreach($res as $r) { foreach($mapprovers['ni'] as $r) {
if($r['approverUserID']) {
$hasAccess = false; $hasAccess = false;
foreach ($docAccess["users"] as $usr) { foreach ($docAccess["users"] as $usr) {
if ($r['approverUserID']==$usr->getID()) if ($r == $usr->getID())
$hasAccess = true; $hasAccess = true;
} }
if(!$hasAccess) { 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().")")))); $this->warningMsg(getMLText("mandatory_approver_no_access", array('user'=>htmlspecialchars($noAccessUser->getFullName()." (".$noAccessUser->getLogin().")"))));
} }
} }
}
$options = array(); $options = array();
foreach ($docAccess["groups"] as $grp) { foreach ($docAccess["groups"] as $grp) {
@ -536,47 +518,33 @@ $(document).ready(function() {
$options = array(); $options = array();
foreach ($docAccess["groups"] as $grp) { 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); $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; $options[] = $option;
} }
$tmp = array(); $tmp = array();
foreach($approvalStatus as $r) { foreach($approvalStatus as $r) {
if($r['type'] == 1) { if($r['type'] == 1) {
if($res) { if(!in_array($r['required'], $mapprovers['g']))
$mandatory=false;
foreach ($res as $rr)
if ($rr['approverGroupID']==$r['required']) {
$mandatory=true;
}
if(!$mandatory)
$tmp[] = $r['required']; $tmp[] = $r['required'];
} else { } else {
$tmp[] = $r['required']; $tmp[] = $r['required'];
} }
} }
}
$fieldwrap = array('', ''); $fieldwrap = array('', '');
if($tmp) { if($tmp) {
$fieldwrap = array('', $this->getSelectPresetButtonHtml("GrpApprovers", $tmp)); $fieldwrap = array('', $this->getSelectPresetButtonHtml("GrpApprovers", $tmp));
} }
/* List all mandatory groups of approvers */ /* List all mandatory groups of approvers */
if($res) {
$tmp = array(); $tmp = array();
foreach ($res as $r) { foreach ($mapprovers['g'] as $r) {
if($r['approverGroupID'] > 0) { $u = $dms->getGroup($r);
$u = $dms->getGroup($r['approverGroupID']);
$tmp[] = htmlspecialchars($u->getName()); $tmp[] = htmlspecialchars($u->getName());
} }
}
if($tmp) { if($tmp) {
$fieldwrap[1] .= '<div class="mandatories"><span>'.getMLText('mandatory_approvergroups').':</span> '.implode(', ', $tmp)."</div>\n"; $fieldwrap[1] .= '<div class="mandatories"><span>'.getMLText('mandatory_approvergroups').':</span> '.implode(', ', $tmp)."</div>\n";
} }
}
$this->formField( $this->formField(
getMLText("groups"), getMLText("groups"),
@ -593,22 +561,25 @@ $(document).ready(function() {
); );
/* Check for mandatory approver groups without access */ /* Check for mandatory approver groups without access */
foreach($res as $r) { foreach($mapprovers['ng'] as $r) {
if ($r['approverGroupID']) {
$hasAccess = false; $hasAccess = false;
foreach ($docAccess["groups"] as $grp) { foreach ($docAccess["groups"] as $grp) {
if ($r['approverGroupID']==$grp->getID()) if ($r == $grp->getID())
$hasAccess = true; $hasAccess = true;
} }
if(!$hasAccess) { if(!$hasAccess) {
$noAccessGroup = $dms->getGroup($r['approverGroupID']); $noAccessGroup = $dms->getGroup($r);
$this->warningMsg(getMLText("mandatory_approvergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName())))); $this->warningMsg(getMLText("mandatory_approvergroup_no_access", array('group'=>htmlspecialchars($noAccessGroup->getName()))));
} }
} }
} $this->contentContainerEnd();
$this->warningMsg(getMLText("add_doc_reviewer_approver_warning")); $this->warningMsg(getMLText("add_doc_reviewer_approver_warning"));
} else {
$this->contentContainerEnd();
} }
if($enablereceiptworkflow) { if($enablereceiptworkflow) {
$this->contentSubHeading(getMLText("assign_recipients"));
$this->contentContainerStart();
$options = array(); $options = array();
foreach ($docAccess["users"] as $usr) { foreach ($docAccess["users"] as $usr) {
if (!$enableselfreceipt && $usr->getID()==$user->getID()) continue; if (!$enableselfreceipt && $usr->getID()==$user->getID()) continue;
@ -683,8 +654,8 @@ $(document).ready(function() {
array('field_wrap'=>$fieldwrap) array('field_wrap'=>$fieldwrap)
); );
}
$this->contentContainerEnd(); $this->contentContainerEnd();
}
$this->formSubmit(getMLText('checkin_document')); $this->formSubmit(getMLText('checkin_document'));
?> ?>
</form> </form>