/** * Get case list * * @param string $userId * @return $result will return an object */ public function caseList($userUid) { try { $solrEnabled = 0; if (($solrEnv = System::solrEnv()) !== false) { G::LoadClass("AppSolr"); $appSolr = new AppSolr( $solrEnv["solr_enabled"], $solrEnv["solr_host"], $solrEnv["solr_instance"] ); if ($appSolr->isSolrEnabled() && $solrEnv["solr_enabled"] == true) { //Check if there are missing records to reindex and reindex them $appSolr->synchronizePendingApplications(); $solrEnabled = 1; } } if ($solrEnabled == 1) { try { G::LoadClass("searchIndex"); $arrayData = array(); $delegationIndexes = array(); $columsToInclude = array("APP_UID"); $solrSearchText = null; //Todo $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:TO_DO AND APP_ASSIGNED_USERS:" . $userUid . ")"; $delegationIndexes[] = "APP_ASSIGNED_USER_DEL_INDEX_" . $userUid . "_txt"; //Draft $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:DRAFT AND APP_DRAFT_USER:"******")"; //Index is allways 1 $solrSearchText = "($solrSearchText)"; //Add del_index dynamic fields to list of resulting columns $columsToIncludeFinal = array_merge($columsToInclude, $delegationIndexes); $solrRequestData = Entity_SolrRequestData::createForRequestPagination( array( "workspace" => $solrEnv["solr_instance"], "startAfter" => 0, "pageSize" => 1000, "searchText" => $solrSearchText, "numSortingCols" => 1, "sortCols" => array("APP_NUMBER"), "sortDir" => array(strtolower("DESC")), "includeCols" => $columsToIncludeFinal, "resultFormat" => "json" ) ); //Use search index to return list of cases $searchIndex = new BpmnEngine_Services_SearchIndex($appSolr->isSolrEnabled(), $solrEnv["solr_host"]); //Execute query $solrQueryResult = $searchIndex->getDataTablePaginatedList($solrRequestData); //$rows = array(); //Number of found records //$numRecTotal = $solrQueryResult->iTotalDisplayRecords; //print_r($solrQueryResult->aaData); exit(0); //Get the missing data from database $arrayApplicationUid = array(); foreach ($solrQueryResult->aaData as $i => $data) { $arrayApplicationUid[] = $data["APP_UID"]; } $aaappsDBData = $appSolr->getListApplicationDelegationData($arrayApplicationUid); foreach ($solrQueryResult->aaData as $i => $data) { //Initialize array $delIndexes = array(); //Store all the delegation indexes //Complete empty values $applicationUid = $data["APP_UID"]; //APP_UID //Get all the indexes returned by Solr as columns for($i = count($columsToInclude); $i <= count($data) - 1; $i++) { if (is_array($data[$columsToIncludeFinal[$i]])) { foreach ($data[$columsToIncludeFinal[$i]] as $delIndex) { $delIndexes[] = $delIndex; } } } //Verify if the delindex is an array //if is not check different types of repositories //the delegation index must always be defined. if (count($delIndexes) == 0) { ////if is draft //if ($action == "draft") { $delIndexes[] = 1; // the first default index //} else { // //error an index must always be defined // print date("Y-m-d H:i:s:u") . " Delegation not defined\n"; //} } //Remove duplicated $delIndexes = array_unique($delIndexes); //Get records foreach ($delIndexes as $delIndex) { $aRow = array(); //Copy result values to new row from Solr server $aRow["APP_UID"] = $data["APP_UID"]; //Get delegation data from DB //Filter data from db $indexes = $appSolr->aaSearchRecords($aaappsDBData, array( "APP_UID" => $applicationUid, "DEL_INDEX" => $delIndex )); foreach ($indexes as $index) { $row = $aaappsDBData[$index]; } if(!isset($row)) { //$fh = fopen("SolrAppWithoutDelIndex.txt", "a") or die("can't open file to store Solr search time."); //fwrite($fh, sprintf("Solr AppUid: %s DelIndex: %s not found.\r\n", $applicationUid, $delIndex)); //fclose($fh); continue; } $aRow["APP_NUMBER"] = $row["APP_NUMBER"]; $aRow["APP_STATUS"] = $row["APP_STATUS"]; $aRow["PRO_UID"] = $row["PRO_UID"]; $aRow["DEL_INDEX"] = $row["DEL_INDEX"]; //$rows[] = $aRow; $arrayData[] = array( "guid" => $aRow["APP_UID"], "name" => $aRow["APP_NUMBER"], "status" => $aRow["APP_STATUS"], "delIndex" => $aRow["DEL_INDEX"], "processId" => $aRow["PRO_UID"] ); } } return $arrayData; } catch (InvalidIndexSearchTextException $e) { $arrayData = array(); $arrayData[] = array ( "guid" => $e->getMessage(), "name" => $e->getMessage(), "status" => $e->getMessage(), "delIndex" => $e->getMessage(), "processId" => $e->getMessage() ); return $arrayData; } } else { $arrayData = array(); $criteria = new Criteria("workflow"); $criteria->addSelectColumn(AppCacheViewPeer::APP_UID); $criteria->addSelectColumn(AppCacheViewPeer::DEL_INDEX); $criteria->addSelectColumn(AppCacheViewPeer::APP_NUMBER); $criteria->addSelectColumn(AppCacheViewPeer::APP_STATUS); $criteria->addSelectColumn(AppCacheViewPeer::PRO_UID); $criteria->add(AppCacheViewPeer::USR_UID, $userUid); $criteria->add( //ToDo - getToDo() $criteria->getNewCriterion(AppCacheViewPeer::APP_STATUS, "TO_DO", CRITERIA::EQUAL)->addAnd( $criteria->getNewCriterion(AppCacheViewPeer::DEL_FINISH_DATE, null, Criteria::ISNULL))->addAnd( $criteria->getNewCriterion(AppCacheViewPeer::APP_THREAD_STATUS, "OPEN"))->addAnd( $criteria->getNewCriterion(AppCacheViewPeer::DEL_THREAD_STATUS, "OPEN")) )->addOr( //Draft - getDraft() $criteria->getNewCriterion(AppCacheViewPeer::APP_STATUS, "DRAFT", CRITERIA::EQUAL)->addAnd( $criteria->getNewCriterion(AppCacheViewPeer::APP_THREAD_STATUS, "OPEN"))->addAnd( $criteria->getNewCriterion(AppCacheViewPeer::DEL_THREAD_STATUS, "OPEN")) ); $criteria->addDescendingOrderByColumn(AppCacheViewPeer::APP_NUMBER); $rsCriteria = AppCacheViewPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $arrayData[] = array( "guid" => $row["APP_UID"], "name" => $row["APP_NUMBER"], "status" => $row["APP_STATUS"], "delIndex" => $row["DEL_INDEX"], "processId" => $row["PRO_UID"] ); } return $arrayData; } } catch (Exception $e) { $arrayData = array(); $arrayData[] = array ( "guid" => $e->getMessage(), "name" => $e->getMessage(), "status" => $e->getMessage(), "delIndex" => $e->getMessage(), "processId" => $e->getMessage() ); return $arrayData; } }
/** * Get data of a Case * * @param string $applicationUid Unique id of Case * @param string $userUid Unique id of User * * return array Return an array with data of Case Info */ public function getCaseInfo($applicationUid, $userUid) { try { $solrEnabled = 0; if (($solrEnv = \System::solrEnv()) !== false) { \G::LoadClass("AppSolr"); $appSolr = new \AppSolr( $solrEnv["solr_enabled"], $solrEnv["solr_host"], $solrEnv["solr_instance"] ); if ($appSolr->isSolrEnabled() && $solrEnv["solr_enabled"] == true) { //Check if there are missing records to reindex and reindex them $appSolr->synchronizePendingApplications(); $solrEnabled = 1; } } if ($solrEnabled == 1) { try { \G::LoadClass("searchIndex"); $arrayData = array(); $delegationIndexes = array(); $columsToInclude = array("APP_UID"); $solrSearchText = null; //Todo $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:TO_DO AND APP_ASSIGNED_USERS:" . $userUid . ")"; $delegationIndexes[] = "APP_ASSIGNED_USER_DEL_INDEX_" . $userUid . "_txt"; //Draft $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:DRAFT AND APP_DRAFT_USER:"******")"; //Index is allways 1 $solrSearchText = "($solrSearchText)"; //Add del_index dynamic fields to list of resulting columns $columsToIncludeFinal = array_merge($columsToInclude, $delegationIndexes); $solrRequestData = \Entity_SolrRequestData::createForRequestPagination( array( "workspace" => $solrEnv["solr_instance"], "startAfter" => 0, "pageSize" => 1000, "searchText" => $solrSearchText, "numSortingCols" => 1, "sortCols" => array("APP_NUMBER"), "sortDir" => array(strtolower("DESC")), "includeCols" => $columsToIncludeFinal, "resultFormat" => "json" ) ); //Use search index to return list of cases $searchIndex = new \BpmnEngine_Services_SearchIndex($appSolr->isSolrEnabled(), $solrEnv["solr_host"]); //Execute query $solrQueryResult = $searchIndex->getDataTablePaginatedList($solrRequestData); //Get the missing data from database $arrayApplicationUid = array(); foreach ($solrQueryResult->aaData as $i => $data) { $arrayApplicationUid[] = $data["APP_UID"]; } $aaappsDBData = $appSolr->getListApplicationDelegationData($arrayApplicationUid); foreach ($solrQueryResult->aaData as $i => $data) { //Initialize array $delIndexes = array(); //Store all the delegation indexes //Complete empty values $applicationUid = $data["APP_UID"]; //APP_UID //Get all the indexes returned by Solr as columns for ($i = count($columsToInclude); $i <= count($data) - 1; $i++) { if (is_array($data[$columsToIncludeFinal[$i]])) { foreach ($data[$columsToIncludeFinal[$i]] as $delIndex) { $delIndexes[] = $delIndex; } } } //Verify if the delindex is an array //if is not check different types of repositories //the delegation index must always be defined. if (count($delIndexes) == 0) { $delIndexes[] = 1; // the first default index } //Remove duplicated $delIndexes = array_unique($delIndexes); //Get records foreach ($delIndexes as $delIndex) { $aRow = array(); //Copy result values to new row from Solr server $aRow["APP_UID"] = $data["APP_UID"]; //Get delegation data from DB //Filter data from db $indexes = $appSolr->aaSearchRecords($aaappsDBData, array( "APP_UID" => $applicationUid, "DEL_INDEX" => $delIndex )); foreach ($indexes as $index) { $row = $aaappsDBData[$index]; } if (!isset($row)) { continue; } \G::LoadClass('wsBase'); $ws = new \wsBase(); $fields = $ws->getCaseInfo($applicationUid, $row["DEL_INDEX"]); $array = json_decode(json_encode($fields), true); if ($array ["status_code"] != 0) { throw (new \Exception($array ["message"])); } else { $array['app_uid'] = $array['caseId']; $array['app_number'] = $array['caseNumber']; $array['app_name'] = $array['caseName']; $array['app_status'] = $array['caseStatus']; $array['app_init_usr_uid'] = $array['caseCreatorUser']; $array['app_init_usr_username'] = trim($array['caseCreatorUserName']); $array['pro_uid'] = $array['processId']; $array['pro_name'] = $array['processName']; $array['app_create_date'] = $array['createDate']; $array['app_update_date'] = $array['updateDate']; $array['current_task'] = $array['currentUsers']; for ($i = 0; $i<=count($array['current_task'])-1; $i++) { $current_task = $array['current_task'][$i]; $current_task['usr_uid'] = $current_task['userId']; $current_task['usr_name'] = trim($current_task['userName']); $current_task['tas_uid'] = $current_task['taskId']; $current_task['tas_title'] = $current_task['taskName']; $current_task['del_index'] = $current_task['delIndex']; $current_task['del_thread'] = $current_task['delThread']; $current_task['del_thread_status'] = $current_task['delThreadStatus']; unset($current_task['userId']); unset($current_task['userName']); unset($current_task['taskId']); unset($current_task['taskName']); unset($current_task['delIndex']); unset($current_task['delThread']); unset($current_task['delThreadStatus']); $aCurrent_task[] = $current_task; } unset($array['status_code']); unset($array['message']); unset($array['timestamp']); unset($array['caseParalell']); unset($array['caseId']); unset($array['caseNumber']); unset($array['caseName']); unset($array['caseStatus']); unset($array['caseCreatorUser']); unset($array['caseCreatorUserName']); unset($array['processId']); unset($array['processName']); unset($array['createDate']); unset($array['updateDate']); unset($array['currentUsers']); $current_task = json_decode(json_encode($aCurrent_task), false); $oResponse = json_decode(json_encode($array), false); $oResponse->current_task = $current_task; } //Return return $oResponse; } } } catch (\InvalidIndexSearchTextException $e) { $arrayData = array(); $arrayData[] = array ("app_uid" => $e->getMessage(), "app_name" => $e->getMessage(), "del_index" => $e->getMessage(), "pro_uid" => $e->getMessage()); throw (new \Exception($arrayData)); } } else { \G::LoadClass("wsBase"); //Verify data $this->throwExceptionIfNotExistsCase($applicationUid, 0, $this->getFieldNameByFormatFieldName("APP_UID")); $criteria = new \Criteria("workflow"); $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); $criteria->add(\AppDelegationPeer::APP_UID, $applicationUid); $criteria->add(\AppDelegationPeer::USR_UID, $userUid); $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { throw new \Exception(\G::LoadTranslation("ID_NO_PERMISSION_NO_PARTICIPATED")); } //Get data $ws = new \wsBase(); $fields = $ws->getCaseInfo($applicationUid, 0); $array = json_decode(json_encode($fields), true); if ($array ["status_code"] != 0) { throw (new \Exception($array ["message"])); } else { $array['app_uid'] = $array['caseId']; $array['app_number'] = $array['caseNumber']; $array['app_name'] = $array['caseName']; $array["app_status"] = $array["caseStatus"]; $array['app_init_usr_uid'] = $array['caseCreatorUser']; $array['app_init_usr_username'] = trim($array['caseCreatorUserName']); $array['pro_uid'] = $array['processId']; $array['pro_name'] = $array['processName']; $array['app_create_date'] = $array['createDate']; $array['app_update_date'] = $array['updateDate']; $array['current_task'] = $array['currentUsers']; $aCurrent_task = array(); for ($i = 0; $i<=count($array['current_task'])-1; $i++) { $current_task = $array['current_task'][$i]; $current_task['usr_uid'] = $current_task['userId']; $current_task['usr_name'] = trim($current_task['userName']); $current_task['tas_uid'] = $current_task['taskId']; $current_task['tas_title'] = $current_task['taskName']; $current_task['del_index'] = $current_task['delIndex']; $current_task['del_thread'] = $current_task['delThread']; $current_task['del_thread_status'] = $current_task['delThreadStatus']; $current_task["del_init_date"] = $current_task["delInitDate"] . ""; $current_task["del_task_due_date"] = $current_task["delTaskDueDate"]; unset($current_task['userId']); unset($current_task['userName']); unset($current_task['taskId']); unset($current_task['taskName']); unset($current_task['delIndex']); unset($current_task['delThread']); unset($current_task['delThreadStatus']); $aCurrent_task[] = $current_task; } unset($array['status_code']); unset($array['message']); unset($array['timestamp']); unset($array['caseParalell']); unset($array['caseId']); unset($array['caseNumber']); unset($array['caseName']); unset($array['caseStatus']); unset($array['caseCreatorUser']); unset($array['caseCreatorUserName']); unset($array['processId']); unset($array['processName']); unset($array['createDate']); unset($array['updateDate']); unset($array['currentUsers']); } $current_task = json_decode(json_encode($aCurrent_task), false); $oResponse = json_decode(json_encode($array), false); $oResponse->current_task = $current_task; //Return return $oResponse; } } catch (\Exception $e) { throw $e; } }