From 84aa83d1d921a3760d3b3b53a52a502eff5733ae Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 8 May 2020 12:42:44 +0200 Subject: [PATCH] rework countDocuments() check if user is actually set, 'WorkflowByMe' now uses a single sql statement --- SeedDMS_Core/Core/inc.ClassDMS.php | 76 ++++++++++++++---------------- 1 file changed, 35 insertions(+), 41 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 7722c4fbf..332f0657c 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -904,7 +904,7 @@ class SeedDMS_Core_DMS { foreach($tmp as $group) $groups[] = $group->getID(); } - $selectStr = "SELECT count(*) c "; + $selectStr = "count(distinct ttcontentid.document) c "; $queryStr = "FROM `ttcontentid` ". "LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID`=`ttcontentid`.`document` AND `tblDocumentStatus`.`version`=`ttcontentid`.`maxVersion` ". @@ -936,10 +936,12 @@ class SeedDMS_Core_DMS { "LEFT JOIN `ttapproveid` ON `ttapproveid`.`approveID` = `tblDocumentApprovers`.`approveID` ". "LEFT JOIN `tblDocumentApproveLog` ON `tblDocumentApproveLog`.`approveLogID`=`ttapproveid`.`maxLogID` "; - $queryStr .= "WHERE (`tblDocumentApprovers`.`type` = 0 AND `tblDocumentApprovers`.`required` = ".$user->getID()." "; - if($groups) - $queryStr .= "OR `tblDocumentApprovers`.`type` = 1 AND `tblDocumentApprovers`.`required` IN (".implode(',', $groups).") "; - $queryStr .= ") "; + 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 `tblDocumentApproveLog`.`status` = 0 "; $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_DRAFT_APP.", ".S_EXPIRED.") "; break; /* }}} */ @@ -952,10 +954,12 @@ class SeedDMS_Core_DMS { "LEFT JOIN `ttreceiptid` ON `ttreceiptid`.`receiptID` = `tblDocumentRecipients`.`receiptID` ". "LEFT JOIN `tblDocumentReceiptLog` ON `tblDocumentReceiptLog`.`receiptLogID`=`ttreceiptid`.`maxLogID` "; - $queryStr .= "WHERE (`tblDocumentRecipients`.`type` = 0 AND `tblDocumentRecipients`.`required` = ".$user->getID()." "; - if($groups) - $queryStr .= "OR `tblDocumentRecipients`.`type` = 1 AND `tblDocumentRecipients`.`required` IN (".implode(',', $groups).") "; - $queryStr .= ") "; + if($user) { + $queryStr .= "WHERE (`tblDocumentRecipients`.`type` = 0 AND `tblDocumentRecipients`.`required` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblDocumentRecipients`.`type` = 1 AND `tblDocumentRecipients`.`required` IN (".implode(',', $groups).") "; + $queryStr .= ") "; + } $queryStr .= "AND `tblDocumentReceiptLog`.`status` = 0 "; $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_RELEASED.") "; break; /* }}} */ @@ -968,51 +972,40 @@ class SeedDMS_Core_DMS { "LEFT JOIN `ttrevisionid` ON `ttrevisionid`.`revisionID` = `tblDocumentRevisors`.`revisionID` ". "LEFT JOIN `tblDocumentRevisionLog` ON `tblDocumentRevisionLog`.`revisionLogID`=`ttrevisionid`.`maxLogID` "; - $queryStr .= "WHERE (`tblDocumentRevisors`.`type` = 0 AND `tblDocumentRevisors`.`required` = ".$user->getID()." "; - if($groups) - $queryStr .= "OR `tblDocumentRevisors`.`type` = 1 AND `tblDocumentRevisors`.`required` IN (".implode(',', $groups).") "; - $queryStr .= ") "; + if($user) { + $queryStr .= "WHERE (`tblDocumentRevisors`.`type` = 0 AND `tblDocumentRevisors`.`required` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblDocumentRevisors`.`type` = 1 AND `tblDocumentRevisors`.`required` IN (".implode(',', $groups).") "; + $queryStr .= ") "; + } $queryStr .= "AND `tblDocumentRevisionLog`.`status` = 0 "; $queryStr .= "AND `tblDocumentStatusLog`.`status` IN (".S_IN_REVISION.") "; break; /* }}} */ - case 'NeedsCorrectionOwner': + case 'NeedsCorrectionOwner': // Documents that need to be corrected {{{ $queryStr .= "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `ttcontentid`.`document` "; $queryStr .= "WHERE `tblDocuments`.`owner` = '".$user->getID()."' ". "AND `tblDocumentStatusLog`.`status` IN (".S_NEEDS_CORRECTION.") "; break; /* }}} */ - case 'WorkflowByMe': - // Get document list for the current user. - $workflowStatus = $user->getWorkflowStatus(); + case 'WorkflowByMe': // Documents which need my workflow action {{{ - // Create a comma separated list of all the documentIDs whose information is - // required. - $dList = array(); - foreach ($workflowStatus["u"] as $st) { - if (!in_array($st["document"], $dList)) { - $dList[] = $st["document"]; - } - } - foreach ($workflowStatus["g"] as $st) { - if (!in_array($st["document"], $dList)) { - $dList[] = $st["document"]; - } - } - $docCSV = ""; - foreach ($dList as $d) { - $docCSV .= (strlen($docCSV)==0 ? "" : ", ")."'".$d."'"; - } + $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 ($dList) { - $queryStr .= - "WHERE `ttcontentid`.`document` IN (" . implode(',', $dList) . ")"; - } else { - $queryStr = ''; + if($user) { + $queryStr .= "WHERE (`tblWorkflowTransitionUsers`.`userid` = ".$user->getID()." "; + if($groups) + $queryStr .= "OR `tblWorkflowTransitionGroups`.`groupid` IN (".implode(',', $groups).")"; + $queryStr .= ") "; } - break; + $queryStr .= "AND `tblDocumentStatusLog`.`status` = ".S_IN_WORKFLOW." "; + break; // }}} } if($queryStr) { - $resArr = $this->db->getResultArray($selectStr.$queryStr); + $resArr = $this->db->getResultArray('SELECT '.$selectStr.$queryStr); if (is_bool($resArr) && !$resArr) { return false; } @@ -1518,6 +1511,7 @@ class SeedDMS_Core_DMS { $queryStr .= "OR `tblWorkflowTransitionGroups`.`groupid` IN (".implode(',', $groups).")"; $queryStr .= ") "; } + $queryStr .= "AND `tblDocumentStatusLog`.`status` = ".S_IN_WORKFLOW." "; // echo 'SELECT '.$selectStr." ".$queryStr; if ($orderby=='e') $queryStr .= "ORDER BY `expires`"; else if ($orderby=='u') $queryStr .= "ORDER BY `statusDate`";