From d0259109e1a485bd524a80b4727ecaea6b49054e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 8 May 2020 07:40:04 +0200 Subject: [PATCH] rework getDocumentList() WorkflowByMe just returns those documents which still need action. propperly handle $param1 = null --- SeedDMS_Core/Core/inc.ClassDMS.php | 71 +++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index f9009b4bf..f3c65c68d 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -861,8 +861,8 @@ class SeedDMS_Core_DMS { * 'AppRevOwner', 'ReceiptByMe', 'ReviseByMe', 'LockedByMe', 'MyDocs' * @param SeedDMS_Core_User $param1 user * @param bool $param2 set to true - * if 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' shall return even documents - * І have already taken care of. + * if 'ReviewByMe', 'ApproveByMe', 'AppRevByMe', 'ReviseByMe', 'ReceiptByMe' + * shall return even documents І have already taken care of. * @param string $param3 sort list by this field * @param string $param4 order direction * @return array|bool @@ -900,7 +900,7 @@ class SeedDMS_Core_DMS { * It doesn't need the where clause anymore. Hence the statement could be * extended with further left joins. */ - $selectStr = "SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". + $selectStr = "`tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser`, ". "`tblDocumentContent`.`version`, `tblDocumentStatus`.*, `tblDocumentStatusLog`.`status`, ". "`tblDocumentStatusLog`.`comment` AS `statusComment`, `tblDocumentStatusLog`.`date` as `statusDate`, ". "`tblDocumentStatusLog`.`userID`, `oTbl`.`fullName` AS `ownerName`, `sTbl`.`fullName` AS `statusName` "; @@ -975,9 +975,11 @@ class SeedDMS_Core_DMS { $orderdir = 'ASC'; $groups = array(); - $tmp = $user->getGroups(); - foreach($tmp as $group) - $groups[] = $group->getID(); + if($user) { + $tmp = $user->getGroups(); + foreach($tmp as $group) + $groups[] = $group->getID(); + } $selectStr .= ", `tblDocumentReviewLog`.`date` as `duedate` "; $queryStr .= @@ -986,10 +988,12 @@ class SeedDMS_Core_DMS { "LEFT JOIN `tblDocumentReviewLog` ON `tblDocumentReviewLog`.`reviewLogID`=`ttreviewid`.`maxLogID` "; if(1) { - $queryStr .= "WHERE (`tblDocumentReviewers`.`type` = 0 AND `tblDocumentReviewers`.`required` = ".$user->getID()." "; - if($groups) - $queryStr .= "OR `tblDocumentReviewers`.`type` = 1 AND `tblDocumentReviewers`.`required` IN (".implode(',', $groups).") "; - $queryStr .= ") "; + if($user) { + $queryStr .= "WHERE (`tblDocumentReviewers`.`type` = 0 AND `tblDocumentReviewers`.`required` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblDocumentReviewers`.`type` = 1 AND `tblDocumentReviewers`.`required` IN (".implode(',', $groups).") "; + $queryStr .= ") "; + } $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_REV.", ".S_EXPIRED.") "; if(!$param2) $queryStr .= " AND `tblDocumentReviewLog`.`status` = 0 "; @@ -1050,9 +1054,11 @@ class SeedDMS_Core_DMS { $orderdir = 'ASC'; $groups = array(); - $tmp = $user->getGroups(); - foreach($tmp as $group) - $groups[] = $group->getID(); + if($user) { + $tmp = $user->getGroups(); + foreach($tmp as $group) + $groups[] = $group->getID(); + } $selectStr .= ", `tblDocumentApproveLog`.`date` as `duedate` "; $queryStr .= @@ -1061,10 +1067,12 @@ class SeedDMS_Core_DMS { "LEFT JOIN `tblDocumentApproveLog` ON `tblDocumentApproveLog`.`approveLogID`=`ttapproveid`.`maxLogID` "; if(1) { + if($user) { $queryStr .= "WHERE (`tblDocumentApprovers`.`type` = 0 AND `tblDocumentApprovers`.`required` = ".$user->getID()." "; if($groups) $queryStr .= "OR `tblDocumentApprovers`.`type` = 1 AND `tblDocumentApprovers`.`required` IN (".implode(',', $groups).")"; $queryStr .= ") "; + } $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") "; if(!$param2) $queryStr .= " AND `tblDocumentApproveLog`.`status` = 0 "; @@ -1114,9 +1122,39 @@ class SeedDMS_Core_DMS { } break; // }}} case 'WorkflowByMe': // Documents I to trigger in Worklflow {{{ - $queryStr .= "WHERE 1=1 "; - $user = $param1; + $orderby = $param3; + if($param4 == 'desc') + $orderdir = 'DESC'; + else + $orderdir = 'ASC'; + + if(1) { + $groups = array(); + if($user) { + $tmp = $user->getGroups(); + foreach($tmp as $group) + $groups[] = $group->getID(); + } + $selectStr = 'distinct '.$selectStr; + $queryStr .= + "LEFT JOIN `tblWorkflowDocumentContent` on `ttcontentid`.`document`=`tblWorkflowDocumentContent`.`document` AND `ttcontentid`.`maxVersion`=`tblWorkflowDocumentContent`.`version` ". + "LEFT JOIN `tblWorkflowTransitions` on `tblWorkflowDocumentContent`.`workflow`=`tblWorkflowTransitions`.`workflow` AND `tblWorkflowDocumentContent`.`state`=`tblWorkflowTransitions`.`state` ". + "LEFT JOIN `tblWorkflowTransitionUsers` on `tblWorkflowTransitionUsers`.`transition` = `tblWorkflowTransitions`.`id` ". + "LEFT JOIN `tblWorkflowTransitionGroups` on `tblWorkflowTransitionGroups`.`transition` = `tblWorkflowTransitions`.`id` "; + + if($user) { + $queryStr .= "WHERE (`tblWorkflowTransitionUsers`.`userid` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblWorkflowTransitionGroups`.`groupid` IN (".implode(',', $groups).")"; + $queryStr .= ") "; + } +// echo 'SELECT '.$selectStr." ".$queryStr; + if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; + else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`"; + else $queryStr .= "ORDER BY `name`"; + } else { + $queryStr .= "WHERE 1=1 "; // Get document list for the current user. $workflowStatus = $user->getWorkflowStatus(); @@ -1146,6 +1184,7 @@ class SeedDMS_Core_DMS { } else { $queryStr = ''; } + } break; // }}} case 'AppRevOwner': // Documents waiting for review/approval/revision I'm owning {{{ $queryStr .= "WHERE 1=1 "; @@ -1280,7 +1319,7 @@ class SeedDMS_Core_DMS { } if($queryStr) { - $resArr = $this->db->getResultArray($selectStr.$queryStr); + $resArr = $this->db->getResultArray('SELECT '.$selectStr.$queryStr); if (is_bool($resArr) && !$resArr) { return false; }