diff --git a/workflow/engine/classes/class.AppSolr.php b/workflow/engine/classes/class.AppSolr.php index d45c7a05c..42f9d75a9 100755 --- a/workflow/engine/classes/class.AppSolr.php +++ b/workflow/engine/classes/class.AppSolr.php @@ -446,7 +446,11 @@ class AppSolr $delegationIndexes[] = "APP_UNASSIGNED_USER_GROUP_DEL_INDEX_" . trim ($group ['GRP_UID']) . '_txt'; } } - + // Paused, add condition + if ($userUid != null && $action == 'paused') { + $solrSearchText .= "APP_PAUSED_USERS:" . $userUid . ' AND '; + $delegationIndexes[] = "APP_PAUSED_USER_DEL_INDEX_" . trim ($userUid) . '_txt'; + } //search action if ($action == 'search'){ if($dateFrom != "" || $dateTo != "") { @@ -515,12 +519,12 @@ class AppSolr 'resultFormat' => 'json' ); + $solrRequestData = Entity_SolrRequestData::createForRequestPagination ($data); // use search index to return list of cases $searchIndex = new BpmnEngine_Services_SearchIndex ($this->_solrIsEnabled, $this->_solrHost); // execute query $solrQueryResult = $searchIndex->getDataTablePaginatedList ($solrRequestData); - if($this->debug) { $this->afterSolrQueryTime = microtime (true); @@ -770,7 +774,7 @@ class AppSolr public function getCasesCount($userUid) { $casesCount = array (); - + // get number of records in todo list $data = $this->getAppGridData ($userUid, 0, 0, 'todo', null, null, null, null, null, null, null, null, null, null, null, true); @@ -787,7 +791,10 @@ class AppSolr $data = $this->getAppGridData ($userUid, 0, 0, 'unassigned', null, null, null, null, null, null, null, null, null, null, null, true); $casesCount ['selfservice'] = $data ['totalCount']; - + $data = $this->getAppGridData ($userUid, 0, 0, 'paused', null, null, null, null, + null, null, null, null, null, null, null, true); + $casesCount ['paused'] = $data ['totalCount']; + return $casesCount; } @@ -1309,7 +1316,6 @@ class AppSolr */ public function updateApplicationSearchIndex($aaAPPUIDs, $saveDBRecord = false) { - if (empty ($aaAPPUIDs)) return; @@ -1582,8 +1588,8 @@ class AppSolr foreach ($indexes as $index) { $aaAppData[] = $aaAllAppDelData [$index]; - } - + } + $result = $this->getApplicationIndexData ($aAPPUID ['APP_UID'], $aaAppData); if($this->debug) @@ -1642,6 +1648,7 @@ class AppSolr $participatedUsersCompletedByUser = $result [11]; $unassignedUsers = $result [12]; $unassignedGroups = $result [13]; + $pausedtUser = $result [14]; try { @@ -1649,7 +1656,7 @@ class AppSolr $xmlCurrentDoc = $this->buildSearchIndexDocumentPMOS2 ($documentInformation, $dynaformFieldTypes, $lastUpdateDate, $maxPriority, $delLastIndex, $assignedUsers, $assignedUsersRead, $assignedUsersUnread, $draftUser, $participatedUsers, $participatedUsersStartedByUser, $participatedUsersCompletedByUser, - $unassignedUsers, $unassignedGroups); + $unassignedUsers, $unassignedGroups,$pausedtUser); //concat doc to the list of docs $xmlDoc .= $xmlCurrentDoc; @@ -1749,7 +1756,7 @@ class AppSolr public function buildSearchIndexDocumentPMOS2($documentData, $dynaformFieldTypes, $lastUpdateDate, $maxPriority, $delLastIndex, $assignedUsers, $assignedUsersRead, $assignedUsersUnread, $draftUser, $participatedUsers, $participatedUsersStartedByUser, $participatedUsersCompletedByUser, - $unassignedUsers, $unassignedGroups) + $unassignedUsers, $unassignedGroups,$pausedtUser) { // build xml document @@ -1889,7 +1896,7 @@ class AppSolr $writer->text ($draftUser ['USR_UID']); $writer->endElement (); } - + if (is_array ($participatedUsers) && ! empty ($participatedUsers)) { foreach ($participatedUsers as $userUID) { $writer->startElement ("field"); @@ -1964,6 +1971,19 @@ class AppSolr $writer->endElement (); } } + if (! empty ($pausedtUser)) { + foreach ($pausedtUser as $paused) { + $writer->startElement ("field"); + $writer->writeAttribute ('name', 'APP_PAUSED_USERS'); + $writer->text ($paused ['USR_UID']); + $writer->endElement (); + + $writer->startElement ("field"); + $writer->writeAttribute ('name', 'APP_PAUSED_USER_DEL_INDEX_' . trim ($paused ['USR_UID']) . '_txt'); + $writer->text ($paused ['DEL_INDEX']); + $writer->endElement (); + } + } // get the serialized fields if (! empty ($documentData ['APP_DATA']) && $documentData ['APP_DATA'] != "N;" ) { @@ -2184,7 +2204,8 @@ class AppSolr $indexes = $this->aaSearchRecords ($allAppDbData, array ( 'DEL_THREAD_STATUS' => 'OPEN', 'DEL_FINISH_DATE' => 'NULL', - 'APP_STATUS' => 'TO_DO' //, 'APP_THREAD_STATUS' => 'OPEN' + 'APP_STATUS' => 'TO_DO', //, 'APP_THREAD_STATUS' => 'OPEN' + 'APP_TYPE' => '' )); foreach ($indexes as $index) { $assignedUsers [] = array ( @@ -2263,6 +2284,19 @@ class AppSolr 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX'] ); } + + $pausedUsers = array (); + $indexes = $this->aaSearchRecords ($allAppDbData, array ( + 'APP_TYPE' => 'PAUSE' + )); + foreach ($indexes as $index) { + if ($allAppDbData [$index] ['APP_DISABLE_ACTION_USER'] == null || $allAppDbData [$index] ['APP_DISABLE_ACTION_USER'] == 0) { + $pausedUsers [] = array ( + 'USR_UID' => $allAppDbData [$index] ['USR_UID'], + 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX'] + ); + } + } // search information of unassigned users // the unassigned users are the self service users and groups. // the self service users are defined in the TASKs of the PROCESS. @@ -2369,7 +2403,8 @@ class AppSolr $participatedUsersStartedByUser, $participatedUsersCompletedByUser, $unassignedUsers, - $unassignedGroups + $unassignedGroups, + $pausedUsers ); return $result; @@ -2649,7 +2684,6 @@ class AppSolr */ public function getListApplicationUpdateDelegationData($aaAppUIDs) { - $allAppDbData = array (); $c = new Criteria (); @@ -2685,17 +2719,22 @@ class AppSolr $c->addSelectColumn ('ad.DEL_FINISHED'); $c->addSelectColumn ('ad.DEL_DELAYED'); $c->addSelectColumn ('ad.APP_OVERDUE_PERCENTAGE'); - + $c->addSelectColumn ('at.APP_THREAD_INDEX'); $c->addSelectColumn ('at.APP_THREAD_PARENT'); $c->addSelectColumn ('at.APP_THREAD_STATUS'); + $c->addSelectColumn ('ade.APP_DELAY_UID'); + $c->addSelectColumn ('ade.APP_TYPE'); + $c->addSelectColumn ('ade.APP_DISABLE_ACTION_USER'); + $c->addAsColumn("PRO_CATEGORY_UID", "pro.PRO_CATEGORY"); - + $c->addAlias ('capp', 'CONTENT'); $c->addAlias ('cpro', 'CONTENT'); $c->addAlias ('ad', 'APP_DELEGATION'); $c->addAlias ('at', 'APP_THREAD'); + $c->addAlias ('ade', 'APP_DELAY'); $c->addAlias ("pro", ProcessPeer::TABLE_NAME); $aConditions = array (); @@ -2740,29 +2779,52 @@ class AppSolr 'at.APP_THREAD_INDEX' ); $c->addJoinMC ($aConditions, Criteria::JOIN); + + $aConditions = array (); + $aConditions [] = array ( + 'ad.APP_UID', + 'ade.APP_UID' + ); + $aConditions [] = array ( + 'ad.DEL_INDEX', + 'ade.APP_DEL_INDEX' + ); + //$aConditions [] = array ( + // 'ade.APP_DISABLE_ACTION_USER', + // DBAdapter::getStringDelimiter () . 'null' . DBAdapter::getStringDelimiter () + //); + $aConditions [] = array ( + 'ade.APP_DISABLE_ACTION_USER', + DBAdapter::getStringDelimiter () . '0' . DBAdapter::getStringDelimiter () + ); + $aConditions [] = array ( + 'ade.APP_TYPE', + DBAdapter::getStringDelimiter () . 'PAUSE' . DBAdapter::getStringDelimiter () + ); + $c->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $arrayCondition = array(); $arrayCondition[] = array(ApplicationPeer::PRO_UID, "pro.PRO_UID"); $c->addJoinMC($arrayCondition, Criteria::LEFT_JOIN); $c->add (ApplicationPeer::APP_UID, $aaAppUIDs, Criteria::IN); - + $rs = ApplicationPeer::doSelectRS ($c); $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC); - + $rs->next (); $row = $rs->getRow (); - + while (is_array ($row)) { $allAppDbData [] = $row; $rs->next (); $row = $rs->getRow (); } - //Propel::close(); return $allAppDbData; - } + } /** * Get the list of groups of unassigned users of the specified task from diff --git a/workflow/engine/methods/cases/casesMenuLoader.php b/workflow/engine/methods/cases/casesMenuLoader.php index 4ee168108..8bab327a1 100755 --- a/workflow/engine/methods/cases/casesMenuLoader.php +++ b/workflow/engine/methods/cases/casesMenuLoader.php @@ -289,7 +289,7 @@ function getAllCounters () $aCount = $ApplicationSolrIndex->getCasesCount( $userUid ); //get paused count - $aCountMissing = $oAppCache->getAllCounters( array ('paused','completed','cancelled'), $userUid ); + $aCountMissing = $oAppCache->getAllCounters( array ('completed','cancelled'), $userUid ); $aCount = array_merge( $aCount, $aCountMissing ); } else {