diff --git a/workflow/engine/classes/AppSolr.php b/workflow/engine/classes/AppSolr.php
index 88678d95a..b45e8a4c3 100644
--- a/workflow/engine/classes/AppSolr.php
+++ b/workflow/engine/classes/AppSolr.php
@@ -1,2270 +1,2168 @@
_solrIsEnabled = $this->isSolrEnabled();
- $this->_solrHost = $SolrHost;
- $this->_solrInstance = $SolrInstance;
- }
-
- /**
- * Return if the Solr server is currently working.
- * @return boolean true:enabled functionality, false:disabled functionality
- */
- public function isSolrEnabled()
- {
- $searchIndex = new BpmnEngineServicesSearchIndex ($this->_solrIsEnabled, $this->_solrHost);
- // execute query
- $solrStatusResult = $searchIndex->isEnabled ($this->_solrInstance);
- return $solrStatusResult;
- }
-
- /**
- * Gets the information of Grids using Solr server.
- *
- * Returns the list of records for the grid depending of the function
- * conditions
- * If doCount is true only the count of records is returned.
- *
- * @param string $userUid
- * current logged user.
- * @param int $start
- * the offset to return the group of records. Used for pagination.
- * @param int $limit
- * The number of records to return in the set.
- * @param string $action
- * the action: todo, participated, draft, unassigned
- * @param string $filter
- * filter the results posible values ('read', 'unread', 'started',
- * 'completed')
- * @param string $search
- * search string
- * @param string $process
- * PRO_UID to filter results by specified process.
- * @param string $user
- * USR_UID to filter results by specified user.
- * @param string $status
- * filter by an application Status : TO_DO, COMPLETED, DRAFT
- * @param string $type
- * default extjs
- * @param string $dateFrom
- * filter by DEL_DELEGATE_DATE, not used
- * @param string $dateTo
- * filter by DEL_DELEGATE_DATE, not used
- * @param string $callback
- * default stcCallback1001 not used
- * @param string $dir
- * sort direction ASC, DESC
- * @param string $sort
- * sort field
- * @param boolean $doCount
- * default=false, if true only the count of records is returned.
- * @return array return the list of cases
- */
- public function getAppGridData(
- $userUid,
- $start = null,
- $limit = null,
- $action = null,
- $filter = null,
- $search = null,
- $process = null,
- $status = null,
- $type = null,
- $dateFrom = null,
- $dateTo = null,
- $callback = null,
- $dir = null,
- $sort = 'APP_CACHE_VIEW.APP_NUMBER',
- $category = null,
- $doCount = false
- ) {
-
- $callback = isset ($callback) ? $callback : 'stcCallback1001';
- $dir = isset ($dir) ? $dir : 'DESC'; // direction of sort column
- // (ASC, DESC)
- $sort = isset ($sort) ? $sort : ''; // sort column (APP_NUMBER,
- // CASE_SUMMARY,
- // CASE_NOTES_COUNT, APP_TITLE,
- // APP_PRO_TITLE, APP_TAS_TITLE,
- // APP_DEL_PREVIOUS_USER,
- // DEL_TASK_DUE_DATE,
- // APP_UPDATE_DATE, DEL_PRIORITY)
- $start = isset ($start) ? $start : '0';
- $limit = isset ($limit) ? $limit : '25';
- $filter = isset ($filter) ? $filter : ''; // posible values ('read',
- // 'unread', 'started',
- // 'completed')
- $search = isset ($search) ? $search : ''; // search in fields, plain text
- $process = isset ($process) ? $process : ''; // filter by an specific
- // process
- // uid
- $user = $userUid; // filter by an specific user uid
- $status = isset ($status) ? strtoupper ($status) : ''; // filter by an
- // specific
- // app_status
- $action = isset ($action) ? $action : 'todo'; // todo, paused
- $type = isset ($type) ? $type : 'extjs';
- $dateFrom = isset ($dateFrom) ? $dateFrom : ''; // filter by
- // DEL_DELEGATE_DATE
- $dateTo = isset ($dateTo) ? $dateTo : ''; // filter by DEL_DELEGATE_DATE
-
- $swErrorInSearchText = false;
- $solrQueryResult = null;
- $aPriorities = array('1'=>'VL', '2'=>'L', '3'=>'N', '4'=>'H', '5'=>'VH');
- $delegationIndexes = array();
-
- $result = array ();
- $result ['totalCount'] = 0;
- $result ['data'] = array ();
- $result ['success'] = false;
- $result ['message'] = "Error description.";
-
- try {
- if($this->debug)
- {
- $this->initTimeAll = microtime (true);
- }
-
- // the array of data that must be returned with placeholders
- /*$columsToInclude = array (
- 'APP_CREATE_DATE',
- 'APP_NUMBER',
- 'APP_PRO_TITLE',
- 'APP_STATUS',
- 'APP_TITLE',
- 'APP_UID',
- 'DEL_LAST_UPDATE_DATE',
- 'DEL_MAX_PRIORITY',
- 'PRO_UID'
- );*/
+ private $_solrIsEnabled = false;
+ private $_solrHost = "";
+ private $_solrInstance = "";
+ private $debug = false; //false
+ private $debugAppInfo = false;
+ private $trunkSizeAcumulated;
+ private $totalTimeAcumulated;
- $columsToInclude = array (
- 'APP_PRO_TITLE',
- 'APP_TITLE',
- 'APP_UID',
- 'DEL_MAX_PRIORITY'
- );
+ public function __construct($SolrEnabled, $SolrHost, $SolrInstance)
+ {
+ // define solr availability
+ $this->_solrIsEnabled = $this->isSolrEnabled();
+ $this->_solrHost = $SolrHost;
+ $this->_solrInstance = $SolrInstance;
+ }
- // create pagination data
- $solrSearchText = "";
- $sortableCols = array ();
- $sortCols = array ();
- $sortDir = array ();
- $numSortingCols = 0;
-
- // define sort conditions, default APP_NUMBER, desc
- // only one column is sorted
- $dir = strtolower ($dir);
-
- if (! empty ($sort)) {
- switch ($sort) {
- case 'APP_CACHE_VIEW.APP_NUMBER' :
- case 'APP_NUMBER' :
- $sortCols [0] = 'APP_NUMBER'; //4;
- //$sortableCols [0] = 'true';
- $sortDir [0] = $dir;
- break;
- // multivalue field can't be ordered
- case 'APP_TITLE' :
- $sortCols [0] = 'APP_TITLE'; //10;
- //$sortableCols [0] = 'true';
- $sortDir [0] = $dir;
- break;
- case 'APP_PRO_TITLE' :
- $sortCols [0] = 'APP_PRO_TITLE'; //6;
- //$sortableCols [0] = 'true';
- $sortDir [0] = $dir;
- break;
- case 'APP_STATUS' :
- $sortCols [0] = 'APP_STATUS'; //6;
- //$sortableCols [0] = 'true';
- $sortDir [0] = $dir;
- break;
- case 'APP_UPDATE_DATE' :
- $sortCols [0] = 'DEL_LAST_UPDATE_DATE'; //12;
- //$sortableCols [0] = 'true';
- $sortDir [0] = $dir;
- break;
- default :
- $sortCols [0] = 'APP_NUMBER'; //4;
- //$sortableCols [0] = 'true';
- $sortDir [0] = 'desc';
- break;
- }
- $numSortingCols ++;
- }
-
- // get del_index field
- $delIndexDynaField = "";
- // process filter
- if ($process != '') {
- $solrSearchText .= "PRO_UID:" . $process . " AND ";
- }
- // status filter
- if ($status != '') {
- $solrSearchText .= "APP_STATUS:" . $status . " AND ";
- }
- //Category filter
- if (!empty($category)) {
- $solrSearchText .= "PRO_CATEGORY_UID_s:" . $category . " AND ";
- }
-
- // todo list, add condition
- if ($userUid != null && $action == 'todo') {
- if ($filter == 'read') {
- $solrSearchText .= "APP_ASSIGNED_USERS_READ:" . $userUid . " AND ";
- $delegationIndexes[] = "APP_ASSIGNED_USER_READ_DEL_INDEX_" . trim ($userUid) . '_txt';
- }
- elseif ($filter == 'unread') {
- $solrSearchText .= "APP_ASSIGNED_USERS_UNREAD:" . $userUid . " AND ";
- $delegationIndexes[] = "APP_ASSIGNED_USER_UNREAD_DEL_INDEX_" . trim ($userUid) . '_txt';
- }
- else {
- $solrSearchText .= "APP_ASSIGNED_USERS:" . $userUid . " AND ";
- $delegationIndexes[] = "APP_ASSIGNED_USER_DEL_INDEX_" . trim ($userUid) . '_txt';
- }
- }
- // participated, add condition
- if ($userUid != null && $action == 'sent') {
- if ($filter == 'started') {
- $solrSearchText .= "APP_PARTICIPATED_USERS_STARTED:" . $userUid . " AND ";
- $delegationIndexes[] = "APP_PARTICIPATED_USER_STARTED_DEL_INDEX_" . trim ($userUid) . '_txt';
- }
- elseif ($filter == 'completed') {
- $solrSearchText .= "APP_PARTICIPATED_USERS_COMPLETED:" . $userUid . " AND ";
- $delegationIndexes[] = "APP_PARTICIPATED_USER_COMPLETED_DEL_INDEX_" . trim ($userUid) . '_txt';
- }
- else {
- $solrSearchText .= "APP_PARTICIPATED_USERS:" . $userUid . " AND ";
- //$delegationIndexes[] = "APP_PARTICIPATED_USER_DEL_INDEX_" . trim ($userUid) . '_txt';
- //show the last index of the case
- $delegationIndexes[] = "DEL_LAST_INDEX";
- }
- }
- // draft, add condition
- if ($userUid != null && $action == 'draft') {
- $solrSearchText .= "APP_DRAFT_USER:" . $userUid . " AND ";
- // index is allways 1
- }
- // unassigned, add condition
- if ($userUid != null && $action == 'unassigned') {
- // get the list of groups to which belongs the user.
- $userGroups = $this->getUserGroups ($userUid);
+ /**
+ * Return if the Solr server is currently working.
+ * @return boolean true:enabled functionality, false:disabled functionality
+ */
+ public function isSolrEnabled()
+ {
+ $searchIndex = new BpmnEngineServicesSearchIndex($this->_solrIsEnabled, $this->_solrHost);
+ // execute query
+ $solrStatusResult = $searchIndex->isEnabled($this->_solrInstance);
+ return $solrStatusResult;
+ }
- $solrSearchText .= "(APP_UNASSIGNED_USERS:" . $userUid;
- if (count ($userGroups) > 0) {
- $solrSearchText .= " OR ";
-
- foreach ($userGroups as $group) {
- $solrSearchText .= "APP_UNASSIGNED_GROUPS:" . $group ['GRP_UID'] . " OR ";
- }
-
- // remove last OR in condition
- if ($solrSearchText != '')
- $solrSearchText = substr_replace ($solrSearchText, "", - 4);
- }
- $solrSearchText .= ") AND ";
-
- $delegationIndexes[] = "APP_UNASSIGNED_USER_GROUP_DEL_INDEX_" . trim ($userUid) . '_txt';
- foreach ($userGroups as $group) {
- $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 != "") {
- $fromDate = ($dateFrom != '')? date ("Y-m-d", strtotime ($dateFrom)): '*';
- $toDate = ($dateTo != '') ? date ("Y-m-d", strtotime ($dateTo)): '*';
-
- $searchDateOriginal = "DEL_LAST_UPDATE_DATE:[" . $fromDate . " TO " . $toDate . "]";
- //FechaRegistro:[2011-04-15 TO 2011-04-30]
-
- $searchDateFormatedSolr = $this->getSearchText ($searchDateOriginal);
-
- $solrSearchText .= "(" . $searchDateFormatedSolr . ") AND ";
- }
+ /**
+ * Gets the information of Grids using Solr server.
+ *
+ * Returns the list of records for the grid depending of the function
+ * conditions
+ * If doCount is true only the count of records is returned.
+ *
+ * @param string $userUid
+ * current logged user.
+ * @param int $start
+ * the offset to return the group of records. Used for pagination.
+ * @param int $limit
+ * The number of records to return in the set.
+ * @param string $action
+ * the action: todo, participated, draft, unassigned
+ * @param string $filter
+ * filter the results posible values ('read', 'unread', 'started',
+ * 'completed')
+ * @param string $search
+ * search string
+ * @param string $process
+ * PRO_UID to filter results by specified process.
+ * @param string $user
+ * USR_UID to filter results by specified user.
+ * @param string $status
+ * filter by an application Status : TO_DO, COMPLETED, DRAFT
+ * @param string $type
+ * default extjs
+ * @param string $dateFrom
+ * filter by DEL_DELEGATE_DATE, not used
+ * @param string $dateTo
+ * filter by DEL_DELEGATE_DATE, not used
+ * @param string $callback
+ * default stcCallback1001 not used
+ * @param string $dir
+ * sort direction ASC, DESC
+ * @param string $sort
+ * sort field
+ * @param boolean $doCount
+ * default=false, if true only the count of records is returned.
+ * @return array return the list of cases
+ */
+ public function getAppGridData(
+ $userUid, $start = null, $limit = null, $action = null, $filter = null, $search = null, $process = null, $status = null, $type = null, $dateFrom = null, $dateTo = null, $callback = null, $dir = null, $sort = 'APP_CACHE_VIEW.APP_NUMBER', $category = null, $doCount = false
+ ) {
+ $callback = isset($callback) ? $callback : 'stcCallback1001';
+ $dir = isset($dir) ? $dir : 'DESC'; // direction of sort column
+ // (ASC, DESC)
+ $sort = isset($sort) ? $sort : ''; // sort column (APP_NUMBER,
+ // CASE_SUMMARY,
+ // CASE_NOTES_COUNT, APP_TITLE,
+ // APP_PRO_TITLE, APP_TAS_TITLE,
+ // APP_DEL_PREVIOUS_USER,
+ // DEL_TASK_DUE_DATE,
+ // APP_UPDATE_DATE, DEL_PRIORITY)
+ $start = isset($start) ? $start : '0';
+ $limit = isset($limit) ? $limit : '25';
+ $filter = isset($filter) ? $filter : ''; // posible values ('read',
+ // 'unread', 'started',
+ // 'completed')
+ $search = isset($search) ? $search : ''; // search in fields, plain text
+ $process = isset($process) ? $process : ''; // filter by an specific
+ // process
+ // uid
+ $user = $userUid; // filter by an specific user uid
+ $status = isset($status) ? strtoupper($status) : ''; // filter by an
+ // specific
+ // app_status
+ $action = isset($action) ? $action : 'todo'; // todo, paused
+ $type = isset($type) ? $type : 'extjs';
+ $dateFrom = isset($dateFrom) ? $dateFrom : ''; // filter by
+ // DEL_DELEGATE_DATE
+ $dateTo = isset($dateTo) ? $dateTo : ''; // filter by DEL_DELEGATE_DATE
- //verify if we need to filter by user
- if($user != ''){
- $solrSearchText .= "(APP_PARTICIPATED_USERS:" . $user . ") AND ";
- }
- //in all cases of search show the last index of the case
- $delegationIndexes[] = "DEL_LAST_INDEX";
- }
-
- // remove last AND in condition
- if ($solrSearchText != '')
- $solrSearchText = substr_replace ($solrSearchText, "", - 5);
-
- // add parenthesis to Solr search text
- if ($solrSearchText != "")
- $solrSearchText = "(" . $solrSearchText . ")";
-
- // create query string, add query conditions
- if ($search != '') {
- // format search string
- // return exception in case of invalid text
- $search = $this->getSearchText ($search);
-
- if ($solrSearchText != "" && $search != "")
- $solrSearchText .= " AND ";
- if ($search != "")
- $solrSearchText .= "(" . $search . ")";
- }
- // add del_index dynamic fields to list of resulting columns
- $columsToIncludeFinal = array();
- $columsToIncludeFinal = array_merge ($columsToInclude, $delegationIndexes);
-
- // if is a counter no records are returned
- if ($doCount) {
- $start = 0;
- $limit = 0;
- $numSortingCols = 0;
- $columsToIncludeFinal = array ();
- }
-
- $data = array (
- 'workspace' => $this->_solrInstance, // solr instance
- 'startAfter' => intval ($start),
- 'pageSize' => intval ($limit),
- 'searchText' => $solrSearchText,
- 'filterText' => '', // $filter, //ex:'field1:value1,field2:[value2.1
- // TO value2.2],field3:value3'
- 'numSortingCols' => $numSortingCols,
- 'sortableCols' => $sortableCols,
- 'sortCols' => $sortCols,
- 'sortDir' => $sortDir,
- 'includeCols' => $columsToIncludeFinal,
- 'resultFormat' => 'json'
- );
- $solrRequestData = Entity_SolrRequestData::createForRequestPagination ($data);
- // use search index to return list of cases
- $searchIndex = new BpmnEngineServicesSearchIndex ($this->_solrIsEnabled, $this->_solrHost);
- // execute query
- $solrQueryResult = $searchIndex->getDataTablePaginatedList ($solrRequestData);
- if($this->debug)
- {
- $this->afterSolrQueryTime = microtime (true);
- }
- //return inmediatelly
- if ($doCount) {
- $result ['totalCount'] = $solrQueryResult->iTotalDisplayRecords;
+ $swErrorInSearchText = false;
+ $solrQueryResult = null;
+ $aPriorities = array('1' => 'VL', '2' => 'L', '3' => 'N', '4' => 'H', '5' => 'VH');
+ $delegationIndexes = array();
+
+ $result = array();
+ $result ['totalCount'] = 0;
$result ['data'] = array();
- $result ['success'] = true;
- $result ['result'] = true;
- $result ['message'] = "";
-
- return $result;
- }
- // complete return data, complete list of columns in grid
- $resultColumns = array (
- "APP_CREATE_DATE",
- "APP_CURRENT_USER",
- "APP_DEL_PREVIOUS_USER",
- "APP_FINISH_DATE",
- "APP_NUMBER",
- "APP_OVERDUE_PERCENTAGE",
- "APP_PRO_TITLE",
- "APP_STATUS",
- "APP_TAS_TITLE",
- "APP_THREAD_STATUS",
- "APP_TITLE",
- "APP_UID",
- "APP_UPDATE_DATE",
- "DEL_DELAYED",
- "DEL_DELAY_DURATION",
- "DEL_DELEGATE_DATE",
- "DEL_DURATION",
- "DEL_FINISHED",
- "DEL_FINISH_DATE",
- "DEL_INDEX",
- "DEL_INIT_DATE",
- "DEL_PRIORITY",
- "DEL_QUEUE_DURATION",
- "DEL_STARTED",
- "DEL_TASK_DUE_DATE",
- "DEL_THREAD_STATUS",
- "PREVIOUS_USR_UID",
- "PRO_UID",
- "TAS_UID",
- "USR_UID"
- );
-
- $rows = array ();
- // number of found records
- $result ['totalCount'] = $solrQueryResult->iTotalDisplayRecords;
+ $result ['success'] = false;
+ $result ['message'] = "Error description.";
- //var_dump($solrQueryResult->aaData); die;
-
- //get the missing data from database
- $appUids = array();
- foreach ($solrQueryResult->aaData as $i => $data) {
- $appUids[] = $data ['APP_UID'];//APP_UID
- }
-
- $aaappsDBData = $this->getListApplicationDelegationData ($appUids);
-
- if($this->debug)
- {
- $this->afterDbQueryTime = microtime (true);
- }
- //****************************************************************
- //Begin the list of Cases and define which delegations are display
- //to complete the data for each delegation
- //****************************************************************
- // complete the missing data to display it in the grid.
- $delIndexes = array(); //store all the delegation indexes
- foreach ($solrQueryResult->aaData as $i => $data) {
- //initialize array
- $delIndexes = array();
- // complete empty values
- $appUID = $data ['APP_UID'];//APP_UID
- //get all the indexes returned by Solr as columns
- for($i = count($columsToInclude) ; $i < count($data) ; $i++) {
- //var_dump($data [$columsToIncludeFinal[$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
- }
- /*elseif ($action == 'search') {
- // get all the indexes
- //$delIndexes = $this->getApplicationDelegationsIndex ($appUID);
- $indexes = $this->aaSearchRecords ($aaappsDBData, array (
- 'APP_UID' => $appUID
- ));
-
- foreach ($indexes as $index) {
- $delIndexes[] = $aaappsDBData [$index]['DEL_INDEX'];
+ try {
+ if ($this->debug) {
+ $this->initTimeAll = microtime(true);
}
- }*/
- else {
- //error an index must always be defined
- print date('Y-m-d H:i:s:u') . " Delegation not defined\n";
- }
- /*
- elseif ($action == 'unassigned'){
- $delIndexes = $this->getApplicationDelegationsIndex ($appUID);
- }*/
- }
- //remove duplicated
- $delIndexes = array_unique($delIndexes);
+ // the array of data that must be returned with placeholders
+ /* $columsToInclude = array (
+ 'APP_CREATE_DATE',
+ 'APP_NUMBER',
+ 'APP_PRO_TITLE',
+ 'APP_STATUS',
+ 'APP_TITLE',
+ 'APP_UID',
+ 'DEL_LAST_UPDATE_DATE',
+ 'DEL_MAX_PRIORITY',
+ 'PRO_UID'
+ ); */
- //var_dump($delIndexes);
+ $columsToInclude = array(
+ 'APP_PRO_TITLE',
+ 'APP_TITLE',
+ 'APP_UID',
+ 'DEL_MAX_PRIORITY'
+ );
- foreach ($delIndexes as $delIndex) {
- $aRow = array ();
+ // create pagination data
+ $solrSearchText = "";
+ $sortableCols = array();
+ $sortCols = array();
+ $sortDir = array();
+ $numSortingCols = 0;
- //copy result values to new row from Solr server
- $aRow ['APP_UID'] = $data['APP_UID'];
- $aRow ['DEL_PRIORITY'] = $data['DEL_MAX_PRIORITY'];//different name
- $aRow ['APP_PRO_TITLE'] = $data['APP_PRO_TITLE'];
- $aRow ['APP_TITLE'] = $data['APP_TITLE'];
-
-/*
- foreach ($resultColumns as $j => $columnName) {
- if(isset($data [$columnName]))
- $aRow [$columnName] = $data [$columnName];
- else if($columnName = 'DEL_PRIORITY')
- $aRow [$columnName] = $data['DEL_MAX_PRIORITY'];//different name
- else
- $aRow [$columnName] = '';//placeholder
- }
+ // define sort conditions, default APP_NUMBER, desc
+ // only one column is sorted
+ $dir = strtolower($dir);
- //var_dump($aRow);
-
- // convert date from solr format UTC to local time in MySQL format
- $solrdate = $data ['APP_CREATE_DATE'];
- $localDate = date ('Y-m-d H:i:s', strtotime ($solrdate));
- $aRow ['APP_CREATE_DATE'] = $localDate;
-
- $solrdate = $data ['DEL_LAST_UPDATE_DATE'];
- $localDate = date ('Y-m-d H:i:s', strtotime ($solrdate));
- $aRow ['APP_UPDATE_DATE'] = $localDate;
- */
-
- // get delegation data from DB
- //filter data from db
- $indexes = $this->aaSearchRecords ($aaappsDBData, array (
- 'APP_UID' => $appUID,
- 'DEL_INDEX' => $delIndex
- ));
- $row = '';
- foreach ($indexes as $index) {
- $row = $aaappsDBData [$index];
- }
-
- if (empty($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", $appUID, $delIndex));
- fclose($fh);
- continue;
- }
- //$row = $this->getAppDelegationData ($appUID, $delIndex);
- $aRow ['APP_CREATE_DATE'] = $row ['APP_CREATE_DATE'];
- $aRow ['APP_UPDATE_DATE'] = $row ['APP_UPDATE_DATE'];
- $aRow ['APP_NUMBER'] = $row ['APP_NUMBER'];
- $aRow ['APP_STATUS'] = $row ['APP_STATUS'];
- $aRow ['PRO_UID'] = $row ['PRO_UID'];
-
- $aRow ['APP_FINISH_DATE'] = null;
- $aRow ['APP_CURRENT_USER'] = $row ['USR_NAME'] . " " . $row ['USR_LAST'];
- $aRow ['APP_DEL_PREVIOUS_USER'] = $row ['USR_PREV_NAME'] . " " . $row ['USR_PREV_LAST'];
- $aRow ['APP_OVERDUE_PERCENTAGE'] = $row ['APP_OVERDUE_PERCENTAGE'];
- $aRow ['APP_TAS_TITLE'] = $row ['APP_TAS_TITLE'];
- $aRow ['APP_THREAD_STATUS'] = $row ['APP_THREAD_STATUS'];
- $aRow ['DEL_DELAYED'] = $row ['DEL_DELAYED'];
- $aRow ['DEL_DELAY_DURATION'] = $row ['DEL_DELAY_DURATION'];
- $aRow ['DEL_DELEGATE_DATE'] = $row ['DEL_DELEGATE_DATE'];
- $aRow ['DEL_DURATION'] = $row ['DEL_DURATION'];
- $aRow ['DEL_FINISHED'] = (isset ($row ['DEL_FINISH_DATE']) && $row ['DEL_FINISH_DATE'] != '') ? 1 : 0;
- $aRow ['DEL_FINISH_DATE'] = $row ['DEL_FINISH_DATE'];
- $aRow ['DEL_INDEX'] = $row ['DEL_INDEX'];
- $aRow ['DEL_INIT_DATE'] = $row ['DEL_INIT_DATE'];
- $aRow ['DEL_QUEUE_DURATION'] = $row ['DEL_QUEUE_DURATION'];
- $aRow ['DEL_STARTED'] = (isset ($row ['DEL_INIT_DATE']) && $row ['DEL_INIT_DATE'] != '') ? 1 : 0;
- $aRow ['DEL_TASK_DUE_DATE'] = $row ['DEL_TASK_DUE_DATE'];
- $aRow ['DEL_THREAD_STATUS'] = $row ['DEL_THREAD_STATUS'];
- $aRow ['PREVIOUS_USR_UID'] = $row ['PREVIOUS_USR_UID'];
- $aRow ['TAS_UID'] = $row ['TAS_UID'];
- $aRow ['USR_UID'] = $userUid;
- $aRow ['DEL_PRIORITY'] = G::LoadTranslation("ID_PRIORITY_{$aPriorities[$aRow['DEL_PRIORITY']]}");
-
- $rows [] = $aRow;
- }
-
- }
- $result ['data'] = $rows;
- $result ['success'] = true;
- $result ['result'] = true;
- $result ['message'] = "";
-
- //var_dump($result);
-
- /*********************************************/
- if($this->debug)
- {
- $this->afterPrepareResultTime = microtime (true);
-
- $fh = fopen("SolrSearchTime.txt", 'a') or die("can't open file to store Solr search time.");
- //fwrite($fh, sprintf("Solr Query time: %s DB Query time: %s Prepare result time: %s \n", gmdate ('H:i:s:u', ($this->afterSolrQueryTime - $this->initTimeAll)), gmdate ('H:i:s:u', ($this->afterDbQueryTime - $this->afterSolrQueryTime)), gmdate ('H:i:s:u', ($this->afterPrepareResultTime - $this->afterDbQueryTime)) ));
- fwrite($fh, sprintf("Solr Query time: %s DB Query time: %s Prepare result time: %s Total:%s \r\n", ($this->afterSolrQueryTime - $this->initTimeAll), ($this->afterDbQueryTime - $this->afterSolrQueryTime), ($this->afterPrepareResultTime - $this->afterDbQueryTime), ($this->afterPrepareResultTime - $this->initTimeAll) ));
- fclose($fh);
- }
- /***************************************/
-
- return $result;
-
- } // end try
- catch ( InvalidIndexSearchTextException $ex ) {
- // return empty result with description of error
- $result = array ();
- $result ['totalCount'] = 0;
- $result ['data'] = array ();
- $result ['success'] = true;
- $result ['result'] = false;
- $result ['message'] = $ex->getMessage ();
- return $result;
- }
- }
-
- /**
- * Get the array of counters of cases
- *
- * @param string $userUid
- * the current logged user uid identifier
- */
- 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);
- $casesCount ['to_do'] = $data ['totalCount'];
- // get number of records in participated list
- $data = $this->getAppGridData ($userUid, 0, 0, 'sent', null, null, null, null, null,
- null, null, null, null, null, null, true);
- $casesCount ['sent'] = $data ['totalCount'];
- // get number of records in draft list
- $data = $this->getAppGridData ($userUid, 0, 0, 'draft', null, null, null, null, null,
- null, null, null, null, null, null, true);
- $casesCount ['draft'] = $data ['totalCount'];
- // get number of records in unassigned list
- $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;
- }
-
- /**
- * Get the user groups
- * @param string $usrUID the user identifier
- * @return array of user groups
- */
- public function getUserGroups($usrUID)
- {
- $gu = new GroupUser ();
- $rows = $gu->getAllUserGroups ($usrUID);
- return $rows;
- }
-
- /**
- * Get the application delegation record from database
- *
- * @param string $aappUIDs
- * array of Application identifiers
- * @return array of arrays with delegation information.
- */
- public function getListApplicationDelegationData($aappUIDs)
- {
-
- $c = new Criteria ();
-
- $c->addSelectColumn (ApplicationPeer::APP_CREATE_DATE);
- $c->addSelectColumn (ApplicationPeer::APP_NUMBER);
- $c->addSelectColumn (ApplicationPeer::APP_STATUS);
- $c->addSelectColumn (ApplicationPeer::APP_UPDATE_DATE);
- $c->addSelectColumn (ApplicationPeer::PRO_UID);
-
- $c->addSelectColumn (AppDelegationPeer::APP_UID);
- $c->addSelectColumn (AppDelegationPeer::DEL_INDEX);
-
- $c->addAsColumn ('USR_NAME', 'u.USR_FIRSTNAME');
- $c->addAsColumn ('USR_LAST', 'u.USR_LASTNAME');
-
- $c->addAsColumn ('USR_PREV_NAME', 'uprev.USR_FIRSTNAME');
- $c->addAsColumn ('USR_PREV_LAST', 'uprev.USR_LASTNAME');
- $c->addAsColumn ('PREVIOUS_USR_UID', 'uprev.USR_UID');
-
- $c->addAsColumn ('APP_TAS_TITLE', TaskPeer::TAS_TITLE);
- $c->addAsColumn ('APP_THREAD_STATUS', 'at.APP_THREAD_STATUS');
-
- $c->addSelectColumn (AppDelegationPeer::APP_OVERDUE_PERCENTAGE);
-
- $c->addSelectColumn (AppDelegationPeer::DEL_DELAYED);
- $c->addSelectColumn (AppDelegationPeer::DEL_DELAY_DURATION);
- $c->addSelectColumn (AppDelegationPeer::DEL_DELEGATE_DATE);
- $c->addSelectColumn (AppDelegationPeer::DEL_DURATION);
- $c->addSelectColumn (AppDelegationPeer::DEL_FINISH_DATE);
- $c->addSelectColumn (AppDelegationPeer::DEL_INIT_DATE);
- $c->addSelectColumn (AppDelegationPeer::DEL_QUEUE_DURATION);
- $c->addSelectColumn (AppDelegationPeer::DEL_TASK_DUE_DATE);
- $c->addSelectColumn (AppDelegationPeer::DEL_THREAD_STATUS);
- $c->addSelectColumn (AppDelegationPeer::TAS_UID);
-
- $c->addAlias ('u', 'USERS');
- $c->addAlias ('uprev', 'USERS');
- $c->addAlias ('adprev', 'APP_DELEGATION');
- $c->addAlias ('at', 'APP_THREAD');
-
- $aConditions = array ();
- $aConditions [] = array (
- AppDelegationPeer::APP_UID,
- ApplicationPeer::APP_UID
- );
- $c->addJoinMC ($aConditions, Criteria::JOIN);
-
- $aConditions = array ();
- $aConditions [] = array (
- AppDelegationPeer::USR_UID,
- 'u.USR_UID'
- );
- $c->addJoinMC ($aConditions, Criteria::LEFT_JOIN);
-
- $aConditions = array ();
- $aConditions [] = array (
- AppDelegationPeer::APP_UID,
- 'adprev.APP_UID'
- );
- $aConditions [] = array (
- AppDelegationPeer::DEL_PREVIOUS,
- 'adprev.DEL_INDEX'
- );
- $c->addJoinMC ($aConditions, Criteria::LEFT_JOIN);
-
- $c->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID);
-
- $aConditions = array ();
- $aConditions [] = array (
- 'adprev.USR_UID',
- 'uprev.USR_UID'
- );
- $c->addJoinMC ($aConditions, Criteria::LEFT_JOIN);
-
- $aConditions = array ();
- $aConditions [] = array (
- AppDelegationPeer::APP_UID,
- 'at.APP_UID'
- );
- $aConditions [] = array (
- AppDelegationPeer::DEL_THREAD,
- 'at.APP_THREAD_INDEX'
- );
- $c->addJoinMC ($aConditions, Criteria::LEFT_JOIN);
-
- $c->add (AppDelegationPeer::APP_UID, $aappUIDs, Criteria::IN );
- //$c->add (AppDelegationPeer::DEL_INDEX, $delIndex);
-
- $rs = AppDelegationPeer::doSelectRS ($c);
- $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC);
- // echo $c->toString();
- $rs->next ();
- $row = $rs->getRow ();
-
- $appDataRows = array ();
- while (is_array ($row)) {
- $appDataRows [] = $row;
- $rs->next ();
- $row = $rs->getRow ();
- }
-
- //Propel::close();
-
- return $appDataRows;
- }
-
- /**
- * Get the application delegation record from database
- *
- * @param string $appUID
- * Application identifier
- * @param string $delIndex
- * delegation index
- * @return array with delegation record.
- */
- public function getAppDelegationData($appUID, $delIndex)
- {
-
- $c = new Criteria ();
-
- $c->addSelectColumn (AppDelegationPeer::APP_UID);
- $c->addSelectColumn (AppDelegationPeer::DEL_INDEX);
-
- $c->addAsColumn ('USR_NAME', 'u.USR_FIRSTNAME');
- $c->addAsColumn ('USR_LAST', 'u.USR_LASTNAME');
-
- $c->addAsColumn ('USR_PREV_NAME', 'uprev.USR_FIRSTNAME');
- $c->addAsColumn ('USR_PREV_LAST', 'uprev.USR_LASTNAME');
- $c->addAsColumn ('PREVIOUS_USR_UID', 'uprev.USR_UID');
-
- $c->addAsColumn ('APP_TAS_TITLE', TaskPeer::TAS_TITLE);
- $c->addAsColumn ('APP_THREAD_STATUS', 'at.APP_THREAD_STATUS');
-
- $c->addSelectColumn (AppDelegationPeer::APP_OVERDUE_PERCENTAGE);
-
- $c->addSelectColumn (AppDelegationPeer::DEL_DELAYED);
- $c->addSelectColumn (AppDelegationPeer::DEL_DELAY_DURATION);
- $c->addSelectColumn (AppDelegationPeer::DEL_DELEGATE_DATE);
- $c->addSelectColumn (AppDelegationPeer::DEL_DURATION);
- $c->addSelectColumn (AppDelegationPeer::DEL_FINISH_DATE);
- $c->addSelectColumn (AppDelegationPeer::DEL_INIT_DATE);
- $c->addSelectColumn (AppDelegationPeer::DEL_QUEUE_DURATION);
- $c->addSelectColumn (AppDelegationPeer::DEL_TASK_DUE_DATE);
- $c->addSelectColumn (AppDelegationPeer::DEL_THREAD_STATUS);
- $c->addSelectColumn (AppDelegationPeer::TAS_UID);
-
- $c->addAlias ('u', 'USERS');
- $c->addAlias ('uprev', 'USERS');
- $c->addAlias ('adprev', 'APP_DELEGATION');
- $c->addAlias ('at', 'APP_THREAD');
-
- $aConditions = array ();
- $aConditions [] = array (
- AppDelegationPeer::USR_UID,
- 'u.USR_UID'
- );
- $c->addJoinMC ($aConditions, Criteria::LEFT_JOIN);
-
- $aConditions = array ();
- $aConditions [] = array (
- AppDelegationPeer::APP_UID,
- 'adprev.APP_UID'
- );
- $aConditions [] = array (
- AppDelegationPeer::DEL_PREVIOUS,
- 'adprev.DEL_INDEX'
- );
- $c->addJoinMC ($aConditions, Criteria::LEFT_JOIN);
-
- $c->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID);
-
- $aConditions = array ();
- $aConditions [] = array (
- 'adprev.USR_UID',
- 'uprev.USR_UID'
- );
- $c->addJoinMC ($aConditions, Criteria::LEFT_JOIN);
-
- $aConditions = array ();
- $aConditions [] = array (
- AppDelegationPeer::APP_UID,
- 'at.APP_UID'
- );
- $aConditions [] = array (
- AppDelegationPeer::DEL_THREAD,
- 'at.APP_THREAD_INDEX'
- );
- $c->addJoinMC ($aConditions, Criteria::LEFT_JOIN);
-
- $c->add (AppDelegationPeer::APP_UID, $appUID);
- $c->add (AppDelegationPeer::DEL_INDEX, $delIndex);
-
- $rs = AppDelegationPeer::doSelectRS ($c);
- $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC);
- // echo $c->toString();
- $rs->next ();
- $row = $rs->getRow ();
-
- //Propel::close();
-
- return $row;
- }
-
- /**
- * return the correct search text for solr.
- * if a field is included only search in this field.
- *
- * @param string $plainSearchText
- * @return string formated Solr search string.
- */
- public function getSearchText($plainSearchText)
- {
- $formattedSearchText = "";
- // if an error is found in string null is returned
- $includeToken = true;
-
- // prepare string to separate and join parentesis
- // " " => " "
- $count = 1;
- while ($count > 0) {
- $plainSearchText = preg_replace ('/\s\s+/', ' ', $plainSearchText, - 1, $count);
- }
- // "text0( text1" => "text0 (text1"; "text0 )text1" => "text0) text1";
- $plainSearchText = preg_replace ('/\s\[\s/', '[', $plainSearchText);
- $plainSearchText = preg_replace ('/\s\]\s/', '] ', $plainSearchText);
- $plainSearchText = preg_replace ('/\s"\s/', '" ', $plainSearchText);
-
- // print "format search string: " . $plainSearchText . "\n";
- // format
- // 1: plain text that is used to search in text field: concat field
- // 2: a field is specified [field_name]:["phrase search"]
- // [field_name]:["phrase search"] [field_name]:[word_search] word_search
- // "phrase search"
- // to scape a reserved character use a double value: "::", """"
- // ex: (APP_ASSIGNED_USERS:7091676694d9269da75c254003021135) AND
- // (contrato_t:76* AND Causal_t:1021 AND Materiales AND 143073)
- // ex: date search => APP_CREATE_DATE:[2012-03-12T00:00:00Z TO
- // 2012-04-12T00:00:00Z]
- // ex: phrase => TEXT:"This is a lazy dog"
-
- // search the first
-
- $searchIndex = new BpmnEngineServicesSearchIndex ($this->_solrIsEnabled, $this->_solrHost);
- // execute query
- $ListFieldsInfo = $searchIndex->getIndexFields ($this->_solrInstance);
-
- $tok = strtok ($plainSearchText, " ");
-
- while ($tok !== false) {
- $fieldName = substr ($tok, 0, strpos ($tok, ":")); // strstr ( $tok,
- // ":",
- // true ); php 5.3
- $searchText = strstr ($tok, ":");
-
- // verify if there's a field definition
- if ($fieldName === false || $fieldName == "") {
- // it's not a field
- // the token is not a field
- // add it completelly
- $includeToken = true;
- // no field found
- $formattedSearchText .= $tok; // used to search in the general default
- // text field
- }
- else {
- // it's a field
- // verify if is complete
- if ($fieldName == "" || $searchText == ":") {
- $includeToken = false;
- throw new InvalidIndexSearchTextException (" Invalid search text, verify the syntax. Expected format = {variable_name}:{search_text}");
- }
-
- // field name found
- // search index field name
- $indexFieldName = "";
- if (array_key_exists ($fieldName, $ListFieldsInfo)) {
- $indexFieldName = $ListFieldsInfo [$fieldName];
- }
- else {
- // no field name found
- // don't include field search
- // return message about it
- $includeToken = false;
- throw new InvalidIndexSearchTextException (" Invalid search text, variable not found.");
- }
-
- // The token is part of a phrase, date or a word?
- if ($searchText [1] == "[" || $searchText [1] == "\"") { //
- // expecting
- // date
- // interval
- // we must
- // search
- // the end of
- // the
- // phrase
-
- // the phrase is complete?
- if ($searchText [1] == "[" && $searchText [strlen ($searchText) - 1] == "]") {
- // complete phrase ok, the date must be validated
- // throw new InvalidIndexSearchTextException("Invalid search text.
- // Expected date interval format =>
- // {variable_name}:[YYYY-MM-DDThh:mm:ssZ TO YYYY-MM-DDThh:mm:ssZ]");
- }
- elseif ($searchText [1] == "\"" && $searchText [strlen ($searchText) - 1] == "\"") {
- // the phrase is complete and is ok.
- }
- else {
- // search end of phrase
- $tok = strtok (" ");
- $found = false;
- while ($tok !== false) {
- if ((($searchText [1] == "[") && ($tok [strlen ($tok) - 1] == "]")) || (($searchText [1] == "\"") && ($tok [strlen ($tok) - 1] == "\""))) {
- // end of phrase found
- $found = true;
- $searchText .= " " . $tok;
- break;
- }
- else {
- // continue adding text
- $searchText .= " " . $tok;
- }
- $tok = strtok (" ");
+ if (!empty($sort)) {
+ switch ($sort) {
+ case 'APP_CACHE_VIEW.APP_NUMBER':
+ case 'APP_NUMBER':
+ $sortCols [0] = 'APP_NUMBER'; //4;
+ //$sortableCols [0] = 'true';
+ $sortDir [0] = $dir;
+ break;
+ // multivalue field can't be ordered
+ case 'APP_TITLE':
+ $sortCols [0] = 'APP_TITLE'; //10;
+ //$sortableCols [0] = 'true';
+ $sortDir [0] = $dir;
+ break;
+ case 'APP_PRO_TITLE':
+ $sortCols [0] = 'APP_PRO_TITLE'; //6;
+ //$sortableCols [0] = 'true';
+ $sortDir [0] = $dir;
+ break;
+ case 'APP_STATUS':
+ $sortCols [0] = 'APP_STATUS'; //6;
+ //$sortableCols [0] = 'true';
+ $sortDir [0] = $dir;
+ break;
+ case 'APP_UPDATE_DATE':
+ $sortCols [0] = 'DEL_LAST_UPDATE_DATE'; //12;
+ //$sortableCols [0] = 'true';
+ $sortDir [0] = $dir;
+ break;
+ default:
+ $sortCols [0] = 'APP_NUMBER'; //4;
+ //$sortableCols [0] = 'true';
+ $sortDir [0] = 'desc';
+ break;
+ }
+ $numSortingCols ++;
}
- if (! $found) {
- // error invalid text
- // Expected date interval format => {variable_name}:[YYYY-MM-DDThh:mm:ssZ TO YYYY-MM-DDThh:mm:ssZ]
- throw new InvalidIndexSearchTextException ("Invalid search text. The date or phase is not completed");
- }
- }
- }
- // validate phrase in case of date
- if (($searchText [1] == "[")) {
- // validate date range format
- // use regular expresion to validate it [yyyy-mm-dd TO yyyy-mm-dd]
- $result1 = strpos($searchText, '-');
- if ($result1 !== false) {
- $result2 = strpos($searchText, 'TO');
- if ($result2 !== false) {
- $reg = "/:\[(\d\d\d\d-\d\d-\d\d|\*)\sTO\s(\d\d\d\d-\d\d-\d\d|\*)\]/";
- // convert date to utc
- $matched = preg_match ($reg, $searchText, $matches);
- if ($matched == 1) {
- // the date interval is valid
- // convert to SOlr format
- $fromDateOriginal = $matches [1];
- $fromDate = $matches [1];
- $toDateOriginal = $matches [2];
- $toDate = $matches [2];
- if ($fromDateOriginal != '*') {
- $fromDate = gmdate ("Y-m-d\T00:00:00\Z", strtotime ($fromDateOriginal));
- }
- if ($toDateOriginal != '*') {
- // list($year, $month, $day) = sscanf($fromDateOriginal,
- // '%04d/%02d/%02d');
- // $toDateDatetime = new DateTime($toDateOriginal);
- // $toDateDatetime = date_create_from_format ( 'Y-m-d',
- // $toDateOriginal );
- $toDate = gmdate ("Y-m-d\T23:59:59.999\Z", strtotime ($toDateOriginal));
- }
- $searchText = ":[" . $fromDate . " TO " . $toDate . "]";
- }
+ // get del_index field
+ $delIndexDynaField = "";
+ // process filter
+ if ($process != '') {
+ $solrSearchText .= "PRO_UID:" . $process . " AND ";
+ }
+ // status filter
+ if ($status != '') {
+ $solrSearchText .= "APP_STATUS:" . $status . " AND ";
+ }
+ //Category filter
+ if (!empty($category)) {
+ $solrSearchText .= "PRO_CATEGORY_UID_s:" . $category . " AND ";
+ }
+
+ // todo list, add condition
+ if ($userUid != null && $action == 'todo') {
+ if ($filter == 'read') {
+ $solrSearchText .= "APP_ASSIGNED_USERS_READ:" . $userUid . " AND ";
+ $delegationIndexes[] = "APP_ASSIGNED_USER_READ_DEL_INDEX_" . trim($userUid) . '_txt';
+ } elseif ($filter == 'unread') {
+ $solrSearchText .= "APP_ASSIGNED_USERS_UNREAD:" . $userUid . " AND ";
+ $delegationIndexes[] = "APP_ASSIGNED_USER_UNREAD_DEL_INDEX_" . trim($userUid) . '_txt';
} else {
- $searchText = str_replace( "[", "", $searchText );
- $searchText = str_replace( "]", "", $searchText );
- $searchText = str_replace( ":", "", $searchText );
- $searchText = ":[" . $searchText . "T00:00:00Z TO " . $searchText . "T23:59:59.999Z]";
+ $solrSearchText .= "APP_ASSIGNED_USERS:" . $userUid . " AND ";
+ $delegationIndexes[] = "APP_ASSIGNED_USER_DEL_INDEX_" . trim($userUid) . '_txt';
+ }
+ }
+ // participated, add condition
+ if ($userUid != null && $action == 'sent') {
+ if ($filter == 'started') {
+ $solrSearchText .= "APP_PARTICIPATED_USERS_STARTED:" . $userUid . " AND ";
+ $delegationIndexes[] = "APP_PARTICIPATED_USER_STARTED_DEL_INDEX_" . trim($userUid) . '_txt';
+ } elseif ($filter == 'completed') {
+ $solrSearchText .= "APP_PARTICIPATED_USERS_COMPLETED:" . $userUid . " AND ";
+ $delegationIndexes[] = "APP_PARTICIPATED_USER_COMPLETED_DEL_INDEX_" . trim($userUid) . '_txt';
+ } else {
+ $solrSearchText .= "APP_PARTICIPATED_USERS:" . $userUid . " AND ";
+ //$delegationIndexes[] = "APP_PARTICIPATED_USER_DEL_INDEX_" . trim ($userUid) . '_txt';
+ //show the last index of the case
+ $delegationIndexes[] = "DEL_LAST_INDEX";
+ }
+ }
+ // draft, add condition
+ if ($userUid != null && $action == 'draft') {
+ $solrSearchText .= "APP_DRAFT_USER:" . $userUid . " AND ";
+ // index is allways 1
+ }
+ // unassigned, add condition
+ if ($userUid != null && $action == 'unassigned') {
+ // get the list of groups to which belongs the user.
+ $userGroups = $this->getUserGroups($userUid);
+
+ $solrSearchText .= "(APP_UNASSIGNED_USERS:" . $userUid;
+ if (count($userGroups) > 0) {
+ $solrSearchText .= " OR ";
+
+ foreach ($userGroups as $group) {
+ $solrSearchText .= "APP_UNASSIGNED_GROUPS:" . $group ['GRP_UID'] . " OR ";
+ }
+
+ // remove last OR in condition
+ if ($solrSearchText != '') {
+ $solrSearchText = substr_replace($solrSearchText, "", - 4);
+ }
+ }
+ $solrSearchText .= ") AND ";
+
+ $delegationIndexes[] = "APP_UNASSIGNED_USER_GROUP_DEL_INDEX_" . trim($userUid) . '_txt';
+ foreach ($userGroups as $group) {
+ $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 != "") {
+ $fromDate = ($dateFrom != '') ? date("Y-m-d", strtotime($dateFrom)) : '*';
+ $toDate = ($dateTo != '') ? date("Y-m-d", strtotime($dateTo)) : '*';
+
+ $searchDateOriginal = "DEL_LAST_UPDATE_DATE:[" . $fromDate . " TO " . $toDate . "]";
+ //FechaRegistro:[2011-04-15 TO 2011-04-30]
+
+ $searchDateFormatedSolr = $this->getSearchText($searchDateOriginal);
+
+ $solrSearchText .= "(" . $searchDateFormatedSolr . ") AND ";
+ }
+
+ //verify if we need to filter by user
+ if ($user != '') {
+ $solrSearchText .= "(APP_PARTICIPATED_USERS:" . $user . ") AND ";
+ }
+ //in all cases of search show the last index of the case
+ $delegationIndexes[] = "DEL_LAST_INDEX";
+ }
+
+ // remove last AND in condition
+ if ($solrSearchText != '') {
+ $solrSearchText = substr_replace($solrSearchText, "", - 5);
+ }
+
+ // add parenthesis to Solr search text
+ if ($solrSearchText != "") {
+ $solrSearchText = "(" . $solrSearchText . ")";
+ }
+
+ // create query string, add query conditions
+ if ($search != '') {
+ // format search string
+ // return exception in case of invalid text
+ $search = $this->getSearchText($search);
+
+ if ($solrSearchText != "" && $search != "") {
+ $solrSearchText .= " AND ";
+ }
+ if ($search != "") {
+ $solrSearchText .= "(" . $search . ")";
+ }
+ }
+ // add del_index dynamic fields to list of resulting columns
+ $columsToIncludeFinal = array();
+ $columsToIncludeFinal = array_merge($columsToInclude, $delegationIndexes);
+
+ // if is a counter no records are returned
+ if ($doCount) {
+ $start = 0;
+ $limit = 0;
+ $numSortingCols = 0;
+ $columsToIncludeFinal = array();
+ }
+
+ $data = array(
+ 'workspace' => $this->_solrInstance, // solr instance
+ 'startAfter' => intval($start),
+ 'pageSize' => intval($limit),
+ 'searchText' => $solrSearchText,
+ 'filterText' => '', // $filter, //ex:'field1:value1,field2:[value2.1
+ // TO value2.2],field3:value3'
+ 'numSortingCols' => $numSortingCols,
+ 'sortableCols' => $sortableCols,
+ 'sortCols' => $sortCols,
+ 'sortDir' => $sortDir,
+ 'includeCols' => $columsToIncludeFinal,
+ 'resultFormat' => 'json'
+ );
+ $solrRequestData = EntitySolrRequestData::createForRequestPagination($data);
+ // use search index to return list of cases
+ $searchIndex = new BpmnEngineServicesSearchIndex($this->_solrIsEnabled, $this->_solrHost);
+ // execute query
+ $solrQueryResult = $searchIndex->getDataTablePaginatedList($solrRequestData);
+ if ($this->debug) {
+ $this->afterSolrQueryTime = microtime(true);
+ }
+ //return inmediatelly
+ if ($doCount) {
+ $result ['totalCount'] = $solrQueryResult->iTotalDisplayRecords;
+ $result ['data'] = array();
+ $result ['success'] = true;
+ $result ['result'] = true;
+ $result ['message'] = "";
+
+ return $result;
+ }
+ // complete return data, complete list of columns in grid
+ $resultColumns = array(
+ "APP_CREATE_DATE",
+ "APP_CURRENT_USER",
+ "APP_DEL_PREVIOUS_USER",
+ "APP_FINISH_DATE",
+ "APP_NUMBER",
+ "APP_OVERDUE_PERCENTAGE",
+ "APP_PRO_TITLE",
+ "APP_STATUS",
+ "APP_TAS_TITLE",
+ "APP_THREAD_STATUS",
+ "APP_TITLE",
+ "APP_UID",
+ "APP_UPDATE_DATE",
+ "DEL_DELAYED",
+ "DEL_DELAY_DURATION",
+ "DEL_DELEGATE_DATE",
+ "DEL_DURATION",
+ "DEL_FINISHED",
+ "DEL_FINISH_DATE",
+ "DEL_INDEX",
+ "DEL_INIT_DATE",
+ "DEL_PRIORITY",
+ "DEL_QUEUE_DURATION",
+ "DEL_STARTED",
+ "DEL_TASK_DUE_DATE",
+ "DEL_THREAD_STATUS",
+ "PREVIOUS_USR_UID",
+ "PRO_UID",
+ "TAS_UID",
+ "USR_UID"
+ );
+
+ $rows = array();
+ // number of found records
+ $result ['totalCount'] = $solrQueryResult->iTotalDisplayRecords;
+
+ //var_dump($solrQueryResult->aaData); die;
+ //get the missing data from database
+ $appUids = array();
+ foreach ($solrQueryResult->aaData as $i => $data) {
+ $appUids[] = $data ['APP_UID']; //APP_UID
+ }
+
+ $aaappsDBData = $this->getListApplicationDelegationData($appUids);
+
+ if ($this->debug) {
+ $this->afterDbQueryTime = microtime(true);
+ }
+ //****************************************************************
+ //Begin the list of Cases and define which delegations are display
+ //to complete the data for each delegation
+ //****************************************************************
+ // complete the missing data to display it in the grid.
+ $delIndexes = array(); //store all the delegation indexes
+ foreach ($solrQueryResult->aaData as $i => $data) {
+ //initialize array
+ $delIndexes = array();
+ // complete empty values
+ $appUID = $data ['APP_UID']; //APP_UID
+ //get all the indexes returned by Solr as columns
+ for ($i = count($columsToInclude); $i < count($data); $i++) {
+ //var_dump($data [$columsToIncludeFinal[$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
+ }
+ /* elseif ($action == 'search') {
+ // get all the indexes
+ //$delIndexes = $this->getApplicationDelegationsIndex ($appUID);
+ $indexes = $this->aaSearchRecords ($aaappsDBData, array (
+ 'APP_UID' => $appUID
+ ));
+
+ foreach ($indexes as $index) {
+ $delIndexes[] = $aaappsDBData [$index]['DEL_INDEX'];
+ }
+
+ } */ else {
+ //error an index must always be defined
+ print date('Y-m-d H:i:s:u') . " Delegation not defined\n";
+ }
+ /*
+ elseif ($action == 'unassigned'){
+ $delIndexes = $this->getApplicationDelegationsIndex ($appUID);
+ } */
+ }
+ //remove duplicated
+ $delIndexes = array_unique($delIndexes);
+
+ //var_dump($delIndexes);
+
+ foreach ($delIndexes as $delIndex) {
+ $aRow = array();
+
+ //copy result values to new row from Solr server
+ $aRow ['APP_UID'] = $data['APP_UID'];
+ $aRow ['DEL_PRIORITY'] = $data['DEL_MAX_PRIORITY']; //different name
+ $aRow ['APP_PRO_TITLE'] = $data['APP_PRO_TITLE'];
+ $aRow ['APP_TITLE'] = $data['APP_TITLE'];
+
+ /*
+ foreach ($resultColumns as $j => $columnName) {
+ if(isset($data [$columnName]))
+ $aRow [$columnName] = $data [$columnName];
+ else if($columnName = 'DEL_PRIORITY')
+ $aRow [$columnName] = $data['DEL_MAX_PRIORITY'];//different name
+ else
+ $aRow [$columnName] = '';//placeholder
+ }
+
+ //var_dump($aRow);
+
+ // convert date from solr format UTC to local time in MySQL format
+ $solrdate = $data ['APP_CREATE_DATE'];
+ $localDate = date ('Y-m-d H:i:s', strtotime ($solrdate));
+ $aRow ['APP_CREATE_DATE'] = $localDate;
+
+ $solrdate = $data ['DEL_LAST_UPDATE_DATE'];
+ $localDate = date ('Y-m-d H:i:s', strtotime ($solrdate));
+ $aRow ['APP_UPDATE_DATE'] = $localDate;
+ */
+
+ // get delegation data from DB
+ //filter data from db
+ $indexes = $this->aaSearchRecords($aaappsDBData, array(
+ 'APP_UID' => $appUID,
+ 'DEL_INDEX' => $delIndex
+ ));
+ $row = '';
+ foreach ($indexes as $index) {
+ $row = $aaappsDBData [$index];
+ }
+
+ if (empty($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", $appUID, $delIndex));
+ fclose($fh);
+ continue;
+ }
+ //$row = $this->getAppDelegationData ($appUID, $delIndex);
+ $aRow ['APP_CREATE_DATE'] = $row ['APP_CREATE_DATE'];
+ $aRow ['APP_UPDATE_DATE'] = $row ['APP_UPDATE_DATE'];
+ $aRow ['APP_NUMBER'] = $row ['APP_NUMBER'];
+ $aRow ['APP_STATUS'] = $row ['APP_STATUS'];
+ $aRow ['PRO_UID'] = $row ['PRO_UID'];
+
+ $aRow ['APP_FINISH_DATE'] = null;
+ $aRow ['APP_CURRENT_USER'] = $row ['USR_NAME'] . " " . $row ['USR_LAST'];
+ $aRow ['APP_DEL_PREVIOUS_USER'] = $row ['USR_PREV_NAME'] . " " . $row ['USR_PREV_LAST'];
+ $aRow ['APP_OVERDUE_PERCENTAGE'] = $row ['APP_OVERDUE_PERCENTAGE'];
+ $aRow ['APP_TAS_TITLE'] = $row ['APP_TAS_TITLE'];
+ $aRow ['APP_THREAD_STATUS'] = $row ['APP_THREAD_STATUS'];
+ $aRow ['DEL_DELAYED'] = $row ['DEL_DELAYED'];
+ $aRow ['DEL_DELAY_DURATION'] = $row ['DEL_DELAY_DURATION'];
+ $aRow ['DEL_DELEGATE_DATE'] = $row ['DEL_DELEGATE_DATE'];
+ $aRow ['DEL_DURATION'] = $row ['DEL_DURATION'];
+ $aRow ['DEL_FINISHED'] = (isset($row ['DEL_FINISH_DATE']) && $row ['DEL_FINISH_DATE'] != '') ? 1 : 0;
+ $aRow ['DEL_FINISH_DATE'] = $row ['DEL_FINISH_DATE'];
+ $aRow ['DEL_INDEX'] = $row ['DEL_INDEX'];
+ $aRow ['DEL_INIT_DATE'] = $row ['DEL_INIT_DATE'];
+ $aRow ['DEL_QUEUE_DURATION'] = $row ['DEL_QUEUE_DURATION'];
+ $aRow ['DEL_STARTED'] = (isset($row ['DEL_INIT_DATE']) && $row ['DEL_INIT_DATE'] != '') ? 1 : 0;
+ $aRow ['DEL_TASK_DUE_DATE'] = $row ['DEL_TASK_DUE_DATE'];
+ $aRow ['DEL_THREAD_STATUS'] = $row ['DEL_THREAD_STATUS'];
+ $aRow ['PREVIOUS_USR_UID'] = $row ['PREVIOUS_USR_UID'];
+ $aRow ['TAS_UID'] = $row ['TAS_UID'];
+ $aRow ['USR_UID'] = $userUid;
+ $aRow ['DEL_PRIORITY'] = G::LoadTranslation("ID_PRIORITY_{$aPriorities[$aRow['DEL_PRIORITY']]}");
+
+ $rows [] = $aRow;
+ }
+ }
+ $result ['data'] = $rows;
+ $result ['success'] = true;
+ $result ['result'] = true;
+ $result ['message'] = "";
+
+ //var_dump($result);
+
+ /* * ****************************************** */
+ if ($this->debug) {
+ $this->afterPrepareResultTime = microtime(true);
+
+ $fh = fopen("SolrSearchTime.txt", 'a') or die("can't open file to store Solr search time.");
+ //fwrite($fh, sprintf("Solr Query time: %s DB Query time: %s Prepare result time: %s \n", gmdate ('H:i:s:u', ($this->afterSolrQueryTime - $this->initTimeAll)), gmdate ('H:i:s:u', ($this->afterDbQueryTime - $this->afterSolrQueryTime)), gmdate ('H:i:s:u', ($this->afterPrepareResultTime - $this->afterDbQueryTime)) ));
+ fwrite($fh, sprintf("Solr Query time: %s DB Query time: %s Prepare result time: %s Total:%s \r\n", ($this->afterSolrQueryTime - $this->initTimeAll), ($this->afterDbQueryTime - $this->afterSolrQueryTime), ($this->afterPrepareResultTime - $this->afterDbQueryTime), ($this->afterPrepareResultTime - $this->initTimeAll)));
+ fclose($fh);
+ }
+ /* * ************************************ */
+
+ return $result;
+ } // end try
+ catch (InvalidIndexSearchTextException $ex) {
+ // return empty result with description of error
+ $result = array();
+ $result ['totalCount'] = 0;
+ $result ['data'] = array();
+ $result ['success'] = true;
+ $result ['result'] = false;
+ $result ['message'] = $ex->getMessage();
+ return $result;
+ }
+ }
+
+ /**
+ * Get the array of counters of cases
+ *
+ * @param string $userUid
+ * the current logged user uid identifier
+ */
+ 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);
+ $casesCount ['to_do'] = $data ['totalCount'];
+ // get number of records in participated list
+ $data = $this->getAppGridData($userUid, 0, 0, 'sent', null, null, null, null, null, null, null, null, null, null, null, true);
+ $casesCount ['sent'] = $data ['totalCount'];
+ // get number of records in draft list
+ $data = $this->getAppGridData($userUid, 0, 0, 'draft', null, null, null, null, null, null, null, null, null, null, null, true);
+ $casesCount ['draft'] = $data ['totalCount'];
+ // get number of records in unassigned list
+ $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;
+ }
+
+ /**
+ * Get the user groups
+ * @param string $usrUID the user identifier
+ * @return array of user groups
+ */
+ public function getUserGroups($usrUID)
+ {
+ $gu = new GroupUser();
+ $rows = $gu->getAllUserGroups($usrUID);
+ return $rows;
+ }
+
+ /**
+ * Get the application delegation record from database
+ *
+ * @param string $aappUIDs
+ * array of Application identifiers
+ * @return array of arrays with delegation information.
+ */
+ public function getListApplicationDelegationData($aappUIDs)
+ {
+ $c = new Criteria();
+
+ $c->addSelectColumn(ApplicationPeer::APP_CREATE_DATE);
+ $c->addSelectColumn(ApplicationPeer::APP_NUMBER);
+ $c->addSelectColumn(ApplicationPeer::APP_STATUS);
+ $c->addSelectColumn(ApplicationPeer::APP_UPDATE_DATE);
+ $c->addSelectColumn(ApplicationPeer::PRO_UID);
+
+ $c->addSelectColumn(AppDelegationPeer::APP_UID);
+ $c->addSelectColumn(AppDelegationPeer::DEL_INDEX);
+
+ $c->addAsColumn('USR_NAME', 'u.USR_FIRSTNAME');
+ $c->addAsColumn('USR_LAST', 'u.USR_LASTNAME');
+
+ $c->addAsColumn('USR_PREV_NAME', 'uprev.USR_FIRSTNAME');
+ $c->addAsColumn('USR_PREV_LAST', 'uprev.USR_LASTNAME');
+ $c->addAsColumn('PREVIOUS_USR_UID', 'uprev.USR_UID');
+
+ $c->addAsColumn('APP_TAS_TITLE', TaskPeer::TAS_TITLE);
+ $c->addAsColumn('APP_THREAD_STATUS', 'at.APP_THREAD_STATUS');
+
+ $c->addSelectColumn(AppDelegationPeer::APP_OVERDUE_PERCENTAGE);
+
+ $c->addSelectColumn(AppDelegationPeer::DEL_DELAYED);
+ $c->addSelectColumn(AppDelegationPeer::DEL_DELAY_DURATION);
+ $c->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE);
+ $c->addSelectColumn(AppDelegationPeer::DEL_DURATION);
+ $c->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE);
+ $c->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE);
+ $c->addSelectColumn(AppDelegationPeer::DEL_QUEUE_DURATION);
+ $c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
+ $c->addSelectColumn(AppDelegationPeer::DEL_THREAD_STATUS);
+ $c->addSelectColumn(AppDelegationPeer::TAS_UID);
+
+ $c->addAlias('u', 'USERS');
+ $c->addAlias('uprev', 'USERS');
+ $c->addAlias('adprev', 'APP_DELEGATION');
+ $c->addAlias('at', 'APP_THREAD');
+
+ $aConditions = array();
+ $aConditions [] = array(
+ AppDelegationPeer::APP_UID,
+ ApplicationPeer::APP_UID
+ );
+ $c->addJoinMC($aConditions, Criteria::JOIN);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ AppDelegationPeer::USR_UID,
+ 'u.USR_UID'
+ );
+ $c->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ AppDelegationPeer::APP_UID,
+ 'adprev.APP_UID'
+ );
+ $aConditions [] = array(
+ AppDelegationPeer::DEL_PREVIOUS,
+ 'adprev.DEL_INDEX'
+ );
+ $c->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $c->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ 'adprev.USR_UID',
+ 'uprev.USR_UID'
+ );
+ $c->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ AppDelegationPeer::APP_UID,
+ 'at.APP_UID'
+ );
+ $aConditions [] = array(
+ AppDelegationPeer::DEL_THREAD,
+ 'at.APP_THREAD_INDEX'
+ );
+ $c->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $c->add(AppDelegationPeer::APP_UID, $aappUIDs, Criteria::IN);
+ //$c->add (AppDelegationPeer::DEL_INDEX, $delIndex);
+
+ $rs = AppDelegationPeer::doSelectRS($c);
+ $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ // echo $c->toString();
+ $rs->next();
+ $row = $rs->getRow();
+
+ $appDataRows = array();
+ while (is_array($row)) {
+ $appDataRows [] = $row;
+ $rs->next();
+ $row = $rs->getRow();
+ }
+
+ //Propel::close();
+
+ return $appDataRows;
+ }
+
+ /**
+ * Get the application delegation record from database
+ *
+ * @param string $appUID
+ * Application identifier
+ * @param string $delIndex
+ * delegation index
+ * @return array with delegation record.
+ */
+ public function getAppDelegationData($appUID, $delIndex)
+ {
+ $c = new Criteria();
+
+ $c->addSelectColumn(AppDelegationPeer::APP_UID);
+ $c->addSelectColumn(AppDelegationPeer::DEL_INDEX);
+
+ $c->addAsColumn('USR_NAME', 'u.USR_FIRSTNAME');
+ $c->addAsColumn('USR_LAST', 'u.USR_LASTNAME');
+
+ $c->addAsColumn('USR_PREV_NAME', 'uprev.USR_FIRSTNAME');
+ $c->addAsColumn('USR_PREV_LAST', 'uprev.USR_LASTNAME');
+ $c->addAsColumn('PREVIOUS_USR_UID', 'uprev.USR_UID');
+
+ $c->addAsColumn('APP_TAS_TITLE', TaskPeer::TAS_TITLE);
+ $c->addAsColumn('APP_THREAD_STATUS', 'at.APP_THREAD_STATUS');
+
+ $c->addSelectColumn(AppDelegationPeer::APP_OVERDUE_PERCENTAGE);
+
+ $c->addSelectColumn(AppDelegationPeer::DEL_DELAYED);
+ $c->addSelectColumn(AppDelegationPeer::DEL_DELAY_DURATION);
+ $c->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE);
+ $c->addSelectColumn(AppDelegationPeer::DEL_DURATION);
+ $c->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE);
+ $c->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE);
+ $c->addSelectColumn(AppDelegationPeer::DEL_QUEUE_DURATION);
+ $c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE);
+ $c->addSelectColumn(AppDelegationPeer::DEL_THREAD_STATUS);
+ $c->addSelectColumn(AppDelegationPeer::TAS_UID);
+
+ $c->addAlias('u', 'USERS');
+ $c->addAlias('uprev', 'USERS');
+ $c->addAlias('adprev', 'APP_DELEGATION');
+ $c->addAlias('at', 'APP_THREAD');
+
+ $aConditions = array();
+ $aConditions [] = array(
+ AppDelegationPeer::USR_UID,
+ 'u.USR_UID'
+ );
+ $c->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ AppDelegationPeer::APP_UID,
+ 'adprev.APP_UID'
+ );
+ $aConditions [] = array(
+ AppDelegationPeer::DEL_PREVIOUS,
+ 'adprev.DEL_INDEX'
+ );
+ $c->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $c->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ 'adprev.USR_UID',
+ 'uprev.USR_UID'
+ );
+ $c->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ AppDelegationPeer::APP_UID,
+ 'at.APP_UID'
+ );
+ $aConditions [] = array(
+ AppDelegationPeer::DEL_THREAD,
+ 'at.APP_THREAD_INDEX'
+ );
+ $c->addJoinMC($aConditions, Criteria::LEFT_JOIN);
+
+ $c->add(AppDelegationPeer::APP_UID, $appUID);
+ $c->add(AppDelegationPeer::DEL_INDEX, $delIndex);
+
+ $rs = AppDelegationPeer::doSelectRS($c);
+ $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ // echo $c->toString();
+ $rs->next();
+ $row = $rs->getRow();
+
+ //Propel::close();
+
+ return $row;
+ }
+
+ /**
+ * return the correct search text for solr.
+ * if a field is included only search in this field.
+ *
+ * @param string $plainSearchText
+ * @return string formated Solr search string.
+ */
+ public function getSearchText($plainSearchText)
+ {
+ $formattedSearchText = "";
+ // if an error is found in string null is returned
+ $includeToken = true;
+
+ // prepare string to separate and join parentesis
+ // " " => " "
+ $count = 1;
+ while ($count > 0) {
+ $plainSearchText = preg_replace('/\s\s+/', ' ', $plainSearchText, - 1, $count);
+ }
+ // "text0( text1" => "text0 (text1"; "text0 )text1" => "text0) text1";
+ $plainSearchText = preg_replace('/\s\[\s/', '[', $plainSearchText);
+ $plainSearchText = preg_replace('/\s\]\s/', '] ', $plainSearchText);
+ $plainSearchText = preg_replace('/\s"\s/', '" ', $plainSearchText);
+
+ // print "format search string: " . $plainSearchText . "\n";
+ // format
+ // 1: plain text that is used to search in text field: concat field
+ // 2: a field is specified [field_name]:["phrase search"]
+ // [field_name]:["phrase search"] [field_name]:[word_search] word_search
+ // "phrase search"
+ // to scape a reserved character use a double value: "::", """"
+ // ex: (APP_ASSIGNED_USERS:7091676694d9269da75c254003021135) AND
+ // (contrato_t:76* AND Causal_t:1021 AND Materiales AND 143073)
+ // ex: date search => APP_CREATE_DATE:[2012-03-12T00:00:00Z TO
+ // 2012-04-12T00:00:00Z]
+ // ex: phrase => TEXT:"This is a lazy dog"
+ // search the first
+
+ $searchIndex = new BpmnEngineServicesSearchIndex($this->_solrIsEnabled, $this->_solrHost);
+ // execute query
+ $ListFieldsInfo = $searchIndex->getIndexFields($this->_solrInstance);
+
+ $tok = strtok($plainSearchText, " ");
+
+ while ($tok !== false) {
+ $fieldName = substr($tok, 0, strpos($tok, ":")); // strstr ( $tok,
+ // ":",
+ // true ); php 5.3
+ $searchText = strstr($tok, ":");
+
+ // verify if there's a field definition
+ if ($fieldName === false || $fieldName == "") {
+ // it's not a field
+ // the token is not a field
+ // add it completelly
+ $includeToken = true;
+ // no field found
+ $formattedSearchText .= $tok; // used to search in the general default
+ // text field
+ } else {
+ // it's a field
+ // verify if is complete
+ if ($fieldName == "" || $searchText == ":") {
+ $includeToken = false;
+ throw new InvalidIndexSearchTextException(" Invalid search text, verify the syntax. Expected format = {variable_name}:{search_text}");
+ }
+
+ // field name found
+ // search index field name
+ $indexFieldName = "";
+ if (array_key_exists($fieldName, $ListFieldsInfo)) {
+ $indexFieldName = $ListFieldsInfo [$fieldName];
+ } else {
+ // no field name found
+ // don't include field search
+ // return message about it
+ $includeToken = false;
+ throw new InvalidIndexSearchTextException(" Invalid search text, variable not found.");
+ }
+
+ // The token is part of a phrase, date or a word?
+ if ($searchText [1] == "[" || $searchText [1] == "\"") { //
+ // expecting
+ // date
+ // interval
+ // we must
+ // search
+ // the end of
+ // the
+ // phrase
+ // the phrase is complete?
+ if ($searchText [1] == "[" && $searchText [strlen($searchText) - 1] == "]") {
+ // complete phrase ok, the date must be validated
+ // throw new InvalidIndexSearchTextException("Invalid search text.
+ // Expected date interval format =>
+ // {variable_name}:[YYYY-MM-DDThh:mm:ssZ TO YYYY-MM-DDThh:mm:ssZ]");
+ } elseif ($searchText [1] == "\"" && $searchText [strlen($searchText) - 1] == "\"") {
+ // the phrase is complete and is ok.
+ } else {
+ // search end of phrase
+ $tok = strtok(" ");
+ $found = false;
+ while ($tok !== false) {
+ if ((($searchText [1] == "[") && ($tok [strlen($tok) - 1] == "]")) || (($searchText [1] == "\"") && ($tok [strlen($tok) - 1] == "\""))) {
+ // end of phrase found
+ $found = true;
+ $searchText .= " " . $tok;
+ break;
+ } else {
+ // continue adding text
+ $searchText .= " " . $tok;
+ }
+ $tok = strtok(" ");
+ }
+ if (!$found) {
+ // error invalid text
+ // Expected date interval format => {variable_name}:[YYYY-MM-DDThh:mm:ssZ TO YYYY-MM-DDThh:mm:ssZ]
+ throw new InvalidIndexSearchTextException("Invalid search text. The date or phase is not completed");
+ }
+ }
+ }
+
+ // validate phrase in case of date
+ if (($searchText [1] == "[")) {
+ // validate date range format
+ // use regular expresion to validate it [yyyy-mm-dd TO yyyy-mm-dd]
+ $result1 = strpos($searchText, '-');
+ if ($result1 !== false) {
+ $result2 = strpos($searchText, 'TO');
+ if ($result2 !== false) {
+ $reg = "/:\[(\d\d\d\d-\d\d-\d\d|\*)\sTO\s(\d\d\d\d-\d\d-\d\d|\*)\]/";
+ // convert date to utc
+ $matched = preg_match($reg, $searchText, $matches);
+ if ($matched == 1) {
+ // the date interval is valid
+ // convert to SOlr format
+ $fromDateOriginal = $matches [1];
+ $fromDate = $matches [1];
+ $toDateOriginal = $matches [2];
+ $toDate = $matches [2];
+ if ($fromDateOriginal != '*') {
+ $fromDate = gmdate("Y-m-d\T00:00:00\Z", strtotime($fromDateOriginal));
+ }
+ if ($toDateOriginal != '*') {
+ // list($year, $month, $day) = sscanf($fromDateOriginal,
+ // '%04d/%02d/%02d');
+ // $toDateDatetime = new DateTime($toDateOriginal);
+ // $toDateDatetime = date_create_from_format ( 'Y-m-d',
+ // $toDateOriginal );
+ $toDate = gmdate("Y-m-d\T23:59:59.999\Z", strtotime($toDateOriginal));
+ }
+ $searchText = ":[" . $fromDate . " TO " . $toDate . "]";
+ }
+ } else {
+ $searchText = str_replace("[", "", $searchText);
+ $searchText = str_replace("]", "", $searchText);
+ $searchText = str_replace(":", "", $searchText);
+ $searchText = ":[" . $searchText . "T00:00:00Z TO " . $searchText . "T23:59:59.999Z]";
+ }
+ }
+ }
+
+ // validate phrase in case of < and <=
+ $result1 = strpos($searchText, '<');
+ if ($result1 !== false) {
+ $result = strpos($searchText, '<=');
+ if ($result !== false) {
+ $v1 = str_replace('<=', '', $searchText);
+ $v2 = str_replace(':', '', $v1);
+ $v3 = str_replace('<', '', ':[* TO ' . $v2 . ']');
+ $searchText = $v3;
+ } else {
+ $v1 = str_replace('<', '', $searchText);
+ $v2 = str_replace(':', '', $v1);
+ $v3 = (int) $v2 - 1;
+ $v4 = str_replace('<', '', ':[* TO ' . $v3 . ']');
+ $searchText = $v4;
+ }
+ }
+ // validate phrase in case of > and >=
+ $result2 = strpos($searchText, '>');
+ if ($result2 !== false) {
+ $result = strpos($searchText, '>=');
+ if ($result !== false) {
+ $v1 = str_replace('>=', '', $searchText);
+ $v2 = str_replace(':', '', $v1);
+ $v3 = str_replace('>', '', ':[' . $v2 . ' TO *]');
+ $searchText = $v3;
+ } else {
+ $v1 = str_replace('>', '', $searchText);
+ $v2 = str_replace(':', '', $v1);
+ $v3 = (int) $v2 + 1;
+ $v4 = str_replace('>', '', ':[' . $v3 . ' TO *]');
+ $searchText = $v4;
+ }
+ }
+ $formattedSearchText .= $indexFieldName . $searchText;
+ $includeToken = true;
+ }
+
+ if ($includeToken) {
+ $formattedSearchText .= " AND ";
+ }
+
+ // next token
+ $tok = strtok(" ");
+ }
+
+ // remove last AND
+ $formattedSearchText = substr_replace($formattedSearchText, "", - 5);
+ return $formattedSearchText;
+ }
+
+ /**
+ * Get all the application delegation records from database
+ *
+ * @param string $appUID
+ * Application identifier
+ * @return array delegation records
+ */
+ public function getApplicationDelegationsIndex($appUID)
+ {
+ $delIndexes = array();
+
+ $c = new Criteria();
+
+ $c->addSelectColumn(AppDelegationPeer::DEL_INDEX);
+ $c->add(AppDelegationPeer::APP_UID, $appUID);
+
+ $rs = AppDelegationPeer::doSelectRS($c);
+ $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+
+ $rs->next();
+ $row = $rs->getRow();
+
+ while (is_array($row)) {
+ $delIndexes [] = $row ['DEL_INDEX'];
+ $rs->next();
+ $row = $rs->getRow();
+ }
+
+ //Propel::close();
+
+ return $delIndexes;
+ }
+
+ /**
+ * Update the information of the specified applications in Solr
+ *
+ * @param array $aaAPPUIDs
+ * Array of arrays of App_UID that must be updated,
+ * APP_UID is permitted also
+ */
+ public function updateApplicationSearchIndex($aaAPPUIDs, $saveDBRecord = false)
+ {
+ if (empty($aaAPPUIDs)) {
+ return;
+ }
+
+ if ($this->debug) {
+ //show app to reindex
+ var_dump($aaAPPUIDs);
+ }
+
+ if (!is_array($aaAPPUIDs)) {
+ // convert to array
+ $APPUID = $aaAPPUIDs;
+ $aaAPPUIDs = array();
+ $aaAPPUIDs [] = array(
+ 'APP_UID' => $APPUID
+ );
+ }
+
+ if ($this->debug) {
+ //show app to reindex
+ var_dump($aaAPPUIDs);
+ }
+
+ try {
+
+ // check if index server is available
+ /*
+ if ($saveDBRecord) {
+ if($this->isSolrEnabled()){
+ //store update in table but with status updated
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 0);
+ }
+ }
+ else{
+ // store update in table and return
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], true);
+ }
+ return;
+ }
+
+ } */
+
+
+ if ($this->debug) {
+ $this->getApplicationDataDBTime = 0;
+ $this->getPreparedApplicationDataDBTime = 0;
+ $this->getBuilXMLDocTime = 0;
+ $this->afterUpdateSolrXMLDocTime = 0;
+
+ $this->beforeCreateSolrXMLDocTime = microtime(true);
+ }
+ // create XML document
+ $xmlDoc = $this->createSolrXMLDocument($aaAPPUIDs);
+
+ if ($this->debug) {
+ $this->afterCreateSolrXMLDocTime = microtime(true);
+ }
+ // update document
+ $data = array(
+ 'workspace' => $this->_solrInstance,
+ 'document' => $xmlDoc
+ );
+ $oSolrUpdateDocument = EntitySolrUpdateDocument::createForRequest($data);
+
+ $oSearchIndex = new BpmnEngineServicesSearchIndex($this->_solrIsEnabled, $this->_solrHost);
+
+ $oSearchIndex->updateIndexDocument($oSolrUpdateDocument);
+
+ if ($this->debug) {
+ $this->afterUpdateSolrXMLDocTime = microtime(true);
+ }
+ // commit changes no required because of the commitwithin option
+ //$oSearchIndex->commitIndexChanges ($this->_solrInstance);
+ //change status in db to indexed
+ if ($saveDBRecord) {
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $this->applicationChangedUpdateSolrQueue($aAPPUID ['APP_UID'], 0);
+ }
+ }
+ } catch (Exception $ex) {
+ //echo $ex->getMessage();
+ //echo $ex->getTraceAsString();
+ $appuidsString = " ";
+ //register all the appuids that can't be indexed
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $this->applicationChangedUpdateSolrQueue($aAPPUID ['APP_UID'], true);
+ $appuidsString .= $aAPPUID ['APP_UID'] . ", ";
+ }
+ //print "Excepcion indexing data: " . $ex->getMessage() . "\n"; die;
+ $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
+ fwrite($fh, date('Y-m-d H:i:s:u') . ":" . $appuidsString . $ex->getMessage() . "\r\n");
+ fclose($fh);
+ }
+ if ($this->debug) {
+
+ //$this->afterCommitSolrDocTime = microtime (true);
+
+ $fh = fopen("SolrIndexTime.txt", 'a') or die("can't open file to store Solr index time.");
+ //fwrite($fh, sprintf("Solr Query time: %s DB Query time: %s Prepare result time: %s \n", gmdate ('H:i:s:u', ($this->afterSolrQueryTime - $this->initTimeAll)), gmdate ('H:i:s:u', ($this->afterDbQueryTime - $this->afterSolrQueryTime)), gmdate ('H:i:s:u', ($this->afterPrepareResultTime - $this->afterDbQueryTime)) ));
+ $trunkSize = count($aaAPPUIDs);
+ $this->trunkSizeAcumulated += $trunkSize;
+ $this->totalTimeAcumulated += ($this->afterUpdateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime);
+
+ //Solr App trunk size| Get Data from DB (s)| Prepare DB data (s) | Create XML file (s)| Create XML Document total (s)| Update Solr Document (s)
+ fwrite($fh, sprintf("%s|%s|%s|%s|%s|%s|%s|%s\r\n", $this->trunkSizeAcumulated, $this->totalTimeAcumulated, $this->getApplicationDataDBTime, $this->getPreparedApplicationDataDBTime, $this->getBuilXMLDocTime, ($this->afterCreateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime), ($this->afterUpdateSolrXMLDocTime - $this->afterCreateSolrXMLDocTime), ($this->afterUpdateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime)
+ ));
+
+ fclose($fh);
+
+ /*
+ fwrite($fh, sprintf("Solr App trunk size: %s => Create XML Document total (s): %s, Update Solr Document (s): %s, Total (s):%s \r\n",
+ $trunkSize, ($this->afterCreateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime), ($this->afterUpdateSolrXMLDocTime - $this->afterCreateSolrXMLDocTime),
+ ($this->afterUpdateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime)));
+ fclose($fh);
+ $fh = fopen("SolrIndexTime.txt", 'a') or die("can't open file to store Solr index time.");
+ fwrite($fh, sprintf("APP range => Get Data from DB (s): %s, Prepare DB data (s): %s, Create XML file(s): %s \r\n",
+ $this->getApplicationDataDBTime, $this->getPreparedApplicationDataDBTime, $this->getBuilXMLDocTime ));
+ fclose($fh); */
+ }
+ }
+
+ /**
+ * Delete the specified application record from Solr
+ *
+ * @param string $aaAPPUIDs
+ * array of arrays of Application identifiers format:$aaAPPUIDs [] = array ('APP_UID' => '...')
+ */
+ public function deleteApplicationSearchIndex($aaAPPUIDs, $saveDBRecord = false)
+ {
+ if (empty($aaAPPUIDs)) {
+ return;
+ }
+
+
+ if (!is_array($aaAPPUIDs)) {
+ // convert to array
+ $APPUID = $aaAPPUIDs;
+ $aaAPPUIDs = array();
+ $aaAPPUIDs [] = array(
+ 'APP_UID' => $APPUID
+ );
+ }
+
+ /*
+ if ($saveDBRecord) {
+ if($this->isSolrEnabled()){
+ //store update in table but with status updated
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 0);
+ }
+ }
+ else{
+ // store update in table and return
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 2);
+ }
+ return;
+ }
+ } */
+
+ try {
+ $oSearchIndex = new BpmnEngineServicesSearchIndex($this->_solrIsEnabled, $this->_solrHost);
+
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $idQuery = "APP_UID:" . $aAPPUID ['APP_UID'];
+
+ $oSearchIndex->deleteDocumentFromIndex($this->_solrInstance, $idQuery);
+ }
+
+ if ($saveDBRecord) {
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $this->applicationChangedUpdateSolrQueue($aAPPUID ['APP_UID'], 0);
+ }
+ }
+ } catch (Exception $ex) {
+ //register all the appuids that can't be indexed
+ $appuidsString = " ";
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $this->applicationChangedUpdateSolrQueue($aAPPUID ['APP_UID'], 2);
+ $appuidsString .= $aAPPUID ['APP_UID'] . ", ";
+ }
+ //print "Excepcion indexing data: " . $ex->getMessage() . "\n"; die;
+ $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
+ fwrite($fh, date('Y-m-d H:i:s:u') . ":" . $appuidsString . $ex->getMessage() . "\r\n");
+ fclose($fh);
+ }
+
+ // commit changes
+ //$oSearchIndex->commitIndexChanges ($this->_solrInstance);
+ }
+
+ /**
+ * Create XML data in Solr format of the specified applications
+ * this function uses the buildSearchIndexDocumentPMOS2 function to create
+ * each record
+ *
+ * @param array $aaAPPUIDs
+ * array of arrays of application identifiers
+ * @return string The resulting XML document in Solr format
+ */
+ public function createSolrXMLDocument($aaAPPUIDs)
+ {
+ if ($this->debug) {
+ $this->getApplicationDataDBTime = 0;
+ $this->getPreparedApplicationDataDBTime = 0;
+ $this->getBuilXMLDocTime = 0;
+ }
+ // search data from DB
+ $xmlDoc = "\n";
+ $xmlDoc .= "\n";
+
+ //get all application data from DB of all applications and delegations
+ $aAPPUIDs = array();
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ $aAPPUIDs[] = $aAPPUID ['APP_UID'];
+ }
+ if ($this->debug) {
+ $this->beforeGetApplicationDataDBTime = microtime(true);
+ }
+ $aaAllAppDelData = $this->getListApplicationUpdateDelegationData($aAPPUIDs);
+ if ($this->debug) {
+ $this->afterGetApplicationDataDBTime = microtime(true);
+
+ $this->getApplicationDataDBTime = $this->afterGetApplicationDataDBTime - $this->beforeGetApplicationDataDBTime;
+ }
+ foreach ($aaAPPUIDs as $aAPPUID) {
+ try {
+ if ($this->debug) {
+ $this->beforePrepareApplicationDataDBTime = microtime(true);
+ }
+ //filter data, include all the rows of the application
+ // get delegation data from DB
+ $aaAppData = array();
+ //filter data from db
+ $indexes = $this->aaSearchRecords($aaAllAppDelData, array(
+ 'APP_UID' => $aAPPUID ['APP_UID']
+ ));
+
+ foreach ($indexes as $index) {
+ $aaAppData[] = $aaAllAppDelData [$index];
+ }
+
+ $result = $this->getApplicationIndexData($aAPPUID ['APP_UID'], $aaAppData);
+
+ if ($this->debug) {
+ $this->afterPrepareApplicationDataDBTime = microtime(true);
+
+ $this->getPreparedApplicationDataDBTime += $this->afterPrepareApplicationDataDBTime - $this->beforePrepareApplicationDataDBTime;
+ }
+ } catch (ApplicationWithoutDelegationRecordsException $ex) {
+ // exception trying to get application information
+ // skip and continue with the next application
+ $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
+ fwrite($fh, date('Y-m-d H:i:s:u') . " " . $ex->getMessage());
+ fclose($fh);
+ continue;
+ } catch (ApplicationWithCorruptDynaformException $ex) {
+ $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
+ fwrite($fh, date('Y-m-d H:i:s:u') . " " . $ex->getMessage());
+ fclose($fh);
+ continue;
+ } catch (Exception $ex) {
+ $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
+ fwrite($fh, date('Y-m-d H:i:s:u') . " " . "getApplicationIndexData " . $aAPPUID['APP_UID'] . ":" . $ex->getMessage() . "\n");
+ fclose($fh);
+ continue;
+ }
+ /* $documentInformation,
+ * $dynaformFieldTypes,
+ * $lastUpdateDate,
+ * $maxPriority,
+ * $delLastIndex,
+ * $assignedUsers,
+ * $assignedUsersRead,
+ * $assignedUsersUnread,
+ * $draftUser,
+ * $participatedUsers,
+ * $participatedUsersStartedByUser,
+ * $participatedUsersCompletedByUser,
+ * $unassignedUsers,
+ * $unassignedGroups */
+ $documentInformation = $result [0];
+ $dynaformFieldTypes = $result [1];
+ $lastUpdateDate = $result [2];
+ $maxPriority = $result [3];
+ $delLastIndex = $result [4];
+ $assignedUsers = $result [5];
+ $assignedUsersRead = $result [6];
+ $assignedUsersUnread = $result [7];
+ $draftUser = $result [8];
+ $participatedUsers = $result [9];
+ $participatedUsersStartedByUser = $result [10];
+ $participatedUsersCompletedByUser = $result [11];
+ $unassignedUsers = $result [12];
+ $unassignedGroups = $result [13];
+ $pausedtUser = $result [14];
+
+ try {
+
+ // create document
+ $xmlCurrentDoc = $this->buildSearchIndexDocumentPMOS2($documentInformation, $dynaformFieldTypes, $lastUpdateDate, $maxPriority, $delLastIndex, $assignedUsers, $assignedUsersRead, $assignedUsersUnread, $draftUser, $participatedUsers, $participatedUsersStartedByUser, $participatedUsersCompletedByUser, $unassignedUsers, $unassignedGroups, $pausedtUser);
+
+ //concat doc to the list of docs
+ $xmlDoc .= $xmlCurrentDoc;
+
+ if ($this->debug) {
+ $this->afterBuilXMLDocTime = microtime(true);
+
+ $this->getBuilXMLDocTime += $this->afterBuilXMLDocTime - $this->afterPrepareApplicationDataDBTime;
+ }
+ } catch (ApplicationAppDataUnserializeException $ex) {
+ // exception trying to get application information
+ $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
+ fwrite($fh, date('Y-m-d H:i:s:u') . " " . $ex->getMessage());
+ fclose($fh);
+ // skip and continue with the next application
+ continue;
+ } catch (Exception $ex) {
+ $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
+ fwrite($fh, date('Y-m-d H:i:s:u') . " " . "buildSearchIndexDocumentPMOS2 " . $aAPPUID['APP_UID'] . ":" . $ex->getMessage() . "\n");
+ fclose($fh);
+ continue;
+ }
+
+ if ($this->debugAppInfo) {
+ $fh = fopen("SolrAPPUIDIndexSize.txt", 'a') or die("can't open file to store Solr index time.");
+ //fwrite($fh, sprintf("APP UID %s => doc size: %s\r\n",
+ // $aAPPUID['APP_UID'], strlen($xmlCurrentDoc)));
+ fwrite($fh, sprintf("%s|%s|%s\r\n", $documentInformation ['APP_NUMBER'], $aAPPUID['APP_UID'], strlen($xmlCurrentDoc)));
+ fclose($fh);
+ }
+ }//End foreach APPUID
+
+ $xmlDoc .= "\n";
+
+ /*
+ if($this->debug)
+ {
+ $fh = fopen("SolrIndexTime.txt", 'a') or die("can't open file to store Solr index time.");
+ fwrite($fh, sprintf("APP range => Get Data from DB (s): %s, Prepare DB data (s): %s, Create XML file(s): %s \r\n",
+ $this->getApplicationDataDBTime, $this->getPreparedApplicationDataDBTime, $this->getBuilXMLDocTime ));
+ fclose($fh);
+ } */
+
+ return $xmlDoc;
+ }
+
+ /**
+ * build Solr index document xml for an application
+ * @gearman = false
+ * @rest = false
+ * @background = false
+ *
+ * @param
+ * [in] array $documentData array of data for the xml document of
+ * application
+ * @param
+ * [in] array $dynaformFieldTypes array of dynaform field types, used
+ * to store the info of APP_DATA with types
+ * @param
+ * [in] array $appTitles array of array of application titles in all
+ * languages
+ * @param
+ * [in] array $proTitles array of array of process titles in all
+ * languages
+ * @param
+ * [in] array $assignedUsers array of array of uids of assigned users
+ * to Application UIDs
+ * @param
+ * [in] array $draftUsers array of array of uids of draft users to
+ * Application UIDs
+ * @param
+ * [in] array $participatedUsers array of array of participated users
+ * UIDs in application
+ * @param
+ * [in] array $unassignedUsers array of unassigned users UIDs
+ * @param
+ * [in] array $unassignedGroups array of unassigned groups UIDs
+ * @param
+ * [out] xml xml document
+ *
+ * $xmlDoc .= buildSearchIndexDocumentPMOS2($documentInformation,
+ * $dynaformFieldTypes,
+ * $lastUpdateDate, $maxPriority,
+ * $assignedUsers, $assignedUsersRead, $assignedUsersUnread,
+ * $draftUser,
+ * $participatedUsers, $participatedUsersStartedByUser,
+ * $participatedUsersCompletedByUser,
+ * $unassignedUsers, $unassignedGroups);*
+ */
+ public function buildSearchIndexDocumentPMOS2($documentData, $dynaformFieldTypes, $lastUpdateDate, $maxPriority, $delLastIndex, $assignedUsers, $assignedUsersRead, $assignedUsersUnread, $draftUser, $participatedUsers, $participatedUsersStartedByUser, $participatedUsersCompletedByUser, $unassignedUsers, $unassignedGroups, $pausedtUser)
+ {
+ // build xml document
+
+ $writer = new XMLWriter();
+ $writer->openMemory();
+ $writer->setIndent(4);
+
+ $writer->startElement("doc");
+
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_UID');
+ $writer->text($documentData ['APP_UID']);
+ $writer->endElement();
+
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_NUMBER');
+ $writer->text($documentData ['APP_NUMBER']);
+ $writer->endElement();
+
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_STATUS');
+ $writer->text($documentData ['APP_STATUS']);
+ $writer->endElement();
+
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'PRO_UID');
+ $writer->text($documentData ['PRO_UID']);
+ $writer->endElement();
+
+ if (!empty($documentData ['APP_TITLE'])) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_TITLE');
+ $writer->text($documentData ['APP_TITLE']);
+ $writer->endElement();
+ } else {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_TITLE');
+ $writer->text("");
+ $writer->endElement();
+ }
+
+ if (!empty($documentData ['PRO_TITLE'])) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_PRO_TITLE');
+ $writer->text($documentData ['PRO_TITLE']);
+ $writer->endElement();
+ } else {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_PRO_TITLE');
+ $writer->text("");
+ $writer->endElement();
+ }
+
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_CREATE_DATE');
+ // convert date to UTC with gmdate
+ $writer->text(gmdate("Y-m-d\TH:i:s\Z", strtotime($documentData ['APP_CREATE_DATE'])));
+ $writer->endElement();
+
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'DEL_LAST_UPDATE_DATE');
+ // convert date to UTC with gmdate
+ $writer->text(gmdate("Y-m-d\TH:i:s\Z", strtotime($lastUpdateDate)));
+ $writer->endElement();
+
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'DEL_MAX_PRIORITY');
+ $writer->text($maxPriority);
+ $writer->endElement();
+
+ if (!empty($documentData["PRO_CATEGORY_UID"])) {
+ $writer->startElement("field");
+ $writer->writeAttribute("name", "PRO_CATEGORY_UID_s");
+ $writer->text($documentData["PRO_CATEGORY_UID"]);
+ $writer->endElement();
+ }
+
+ foreach ($delLastIndex as $lastIndex) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'DEL_LAST_INDEX');
+ $writer->text($lastIndex);
+ $writer->endElement();
+ }
+
+ if (is_array($assignedUsers) && !empty($assignedUsers)) {
+ foreach ($assignedUsers as $userUID) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_ASSIGNED_USERS');
+ $writer->text($userUID ['USR_UID']);
+ $writer->endElement();
+
+ // add dynamic field for del_index information
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_ASSIGNED_USER_DEL_INDEX_' . trim($userUID ['USR_UID']) . '_txt');
+ $writer->text($userUID ['DEL_INDEX']);
+ $writer->endElement();
+ }
+ }
+
+ if (is_array($assignedUsersRead) && !empty($assignedUsersRead)) {
+ foreach ($assignedUsersRead as $userUID) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_ASSIGNED_USERS_READ');
+ $writer->text($userUID ['USR_UID']);
+ $writer->endElement();
+
+ // add dynamic field for del_index information
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_ASSIGNED_USER_READ_DEL_INDEX_' . trim($userUID ['USR_UID']) . '_txt');
+ $writer->text($userUID ['DEL_INDEX']);
+ $writer->endElement();
+ }
+ }
+
+ if (is_array($assignedUsersUnread) && !empty($assignedUsersUnread)) {
+ foreach ($assignedUsersUnread as $userUID) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_ASSIGNED_USERS_UNREAD');
+ $writer->text($userUID ['USR_UID']);
+ $writer->endElement();
+
+ // add dynamic field for del_index information
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_ASSIGNED_USER_UNREAD_DEL_INDEX_' . trim($userUID ['USR_UID']) . '_txt');
+ $writer->text($userUID ['DEL_INDEX']);
+ $writer->endElement();
+ }
+ }
+
+ if (!empty($draftUser)) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_DRAFT_USER');
+ $writer->text($draftUser ['USR_UID']);
+ $writer->endElement();
+ }
+
+ if (is_array($participatedUsers) && !empty($participatedUsers)) {
+ foreach ($participatedUsers as $userUID) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_PARTICIPATED_USERS');
+ $writer->text($userUID ['USR_UID']);
+ $writer->endElement();
+
+ // add dynamic field for del_index information
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_PARTICIPATED_USER_DEL_INDEX_' . trim($userUID ['USR_UID']) . '_txt');
+ $writer->text($userUID ['DEL_INDEX']);
+ $writer->endElement();
+ }
+ }
+
+ if (is_array($participatedUsersStartedByUser) && !empty($participatedUsersStartedByUser)) {
+ foreach ($participatedUsersStartedByUser as $userUID) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_PARTICIPATED_USERS_STARTED');
+ $writer->text($userUID ['USR_UID']);
+ $writer->endElement();
+
+ // add dynamic field for del_index information
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_PARTICIPATED_USER_STARTED_DEL_INDEX_' . trim($userUID ['USR_UID']) . '_txt');
+ $writer->text($userUID ['DEL_INDEX']);
+ $writer->endElement();
+ }
+ }
+
+ if (is_array($participatedUsersCompletedByUser) && !empty($participatedUsersCompletedByUser)) {
+ foreach ($participatedUsersCompletedByUser as $userUID) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_PARTICIPATED_USERS_COMPLETED');
+ $writer->text($userUID ['USR_UID']);
+ $writer->endElement();
+
+ // add dynamic field for del_index information
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_PARTICIPATED_USER_COMPLETED_DEL_INDEX_' . trim($userUID ['USR_UID']) . '_txt');
+ $writer->text($userUID ['DEL_INDEX']);
+ $writer->endElement();
+ }
+ }
+
+ if (is_array($unassignedUsers) && !empty($unassignedUsers)) {
+ foreach ($unassignedUsers as $userUID) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_UNASSIGNED_USERS');
+ $writer->text($userUID ['USR_UID']);
+ $writer->endElement();
+
+ // add dynamic field for del_index information
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_UNASSIGNED_USER_GROUP_DEL_INDEX_' . trim($userUID ['USR_UID']) . '_txt');
+ $writer->text($userUID ['DEL_INDEX']);
+ $writer->endElement();
+ }
+ }
+
+ if (is_array($unassignedGroups) && !empty($unassignedGroups)) {
+ foreach ($unassignedGroups as $groupUID) {
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_UNASSIGNED_GROUPS');
+ $writer->text($groupUID ['USR_UID']);
+ $writer->endElement();
+
+ // add dynamic field for del_index information
+ $writer->startElement("field");
+ $writer->writeAttribute('name', 'APP_UNASSIGNED_USER_GROUP_DEL_INDEX_' . trim($groupUID ['USR_UID']) . '_txt');
+ $writer->text($groupUID ['DEL_INDEX']);
+ $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;") {
+ $UnSerializedCaseData = unserialize($documentData ['APP_DATA']);
+
+ if ($UnSerializedCaseData === false) {
+ $UnSerializedCaseData = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $documentData ['APP_DATA']); // utf8_encode
+ $UnSerializedCaseData = unserialize($UnSerializedCaseData);
+ }
+
+ if (!$UnSerializedCaseData) {
+ // error unserializing
+ throw new ApplicationAppDataUnserializeException(date('Y-m-d H:i:s:u') . " Could not unserialize APP_DATA of APP_UID: " . $documentData ['APP_UID'] . "\n");
+ } else {
+ foreach ($UnSerializedCaseData as $k => $value) {
+ //This validation is only for the 'checkbox' control for the BPMN forms,
+ //the request is not made to the database to obtain the control
+ //associated with the variable so as not to decrease the performance.
+ if (is_array($value) && count($value) === 1 && isset($value[0]) && !is_object($value[0]) && !is_array($value[0])) {
+ $value = $value[0];
+ }
+ if (!is_array($value) && !is_object($value) && $value != '' && $k != 'SYS_LANG' && $k != 'SYS_SKIN' && $k != 'SYS_SYS') {
+ // search the field type in array of dynaform fields
+ if (!empty($dynaformFieldTypes) && array_key_exists(trim($k), $dynaformFieldTypes)) {
+ $type = $dynaformFieldTypes [trim($k)];
+ $typeSufix = '_t';
+ switch ($type) {
+ case 'text':
+ $typeSufix = '_t';
+ break;
+ case 'Int':
+ if (intval($value) > 2147483647) {
+ $typeSufix = '_tl'; //for long values
+ $value = intval($value);
+ } else {
+ $typeSufix = '_ti';
+ $value = str_replace(',', '', $value);
+ $value = intval($value);
+ }
+ break;
+ case 'Real':
+ $typeSufix = '_td';
+ $value = str_replace(',', '', $value);
+ $value = floatval($value);
+ break;
+ case 'date':
+ $newdate = false;
+ $withHour = true;
+ // try to convert string to date
+ // TODO convert to php 5.2 format
+ /*
+ * $newdate = date_create_from_format ( 'Y-m-d H:i:s', $value
+ * ); if (! $newdate) { $newdate = date_create_from_format (
+ * 'Y-m-d', $value ); $withHour = false; } if (! $newdate) {
+ * $newdate = date_create_from_format ( 'd/m/Y', $value );
+ * $withHour = false; } if (! $newdate) { $newdate =
+ * date_create_from_format ( 'j/m/Y', $value ); $withHour =
+ * false; }
+ */
+ $newdate = strtotime($value);
+ if (!$newdate) {
+ $typeSufix = '*'; // not store field
+ } else {
+ $typeSufix = '_tdt';
+ /*
+ * if ($withHour) //$value = gmdate ( "Y-m-d\TH:i:s\Z",
+ * $newdate->getTimestamp () ); $value = gmdate (
+ * "Y-m-d\TH:i:s\Z", $newdate ); else { $value = gmdate (
+ * "Y-m-d\T00:00:00\Z", $newdate ); }
+ */
+ $value = gmdate("Y-m-d\T00:00:00\Z", $newdate);
+ }
+ break;
+ case 'dropdown':
+ $typeSufix = '_t';
+ break;
+ case 'textarea':
+ $typeSufix = '_t';
+ break;
+ case 'currency':
+ $typeSufix = '_td';
+ $value = floatval($value);
+ break;
+ case 'percentage':
+ $typeSufix = '_t';
+ break;
+ case 'password':
+ $typeSufix = '_t';
+ break;
+ case 'suggest':
+ $typeSufix = '_t';
+ break;
+ case 'yesno':
+ $typeSufix = '_t';
+ break;
+ case 'listbox':
+ $typeSufix = '_t';
+ break;
+ case 'checkbox':
+ $typeSufix = '_t';
+ break;
+ case 'checkgroup':
+ $typeSufix = '_t';
+ break;
+ case 'radiogroup':
+ $typeSufix = '_t';
+ break;
+ case 'hidden':
+ $typeSufix = '_t';
+ break;
+ }
+ if ($typeSufix != '*') {
+ $value = trim($value);
+ $pairs = array(
+ "\x03" => "",
+ "\x04" => "",
+ "\x05" => "",
+ "\x06" => "",
+ "\x07" => "",
+ "\x08" => "",
+ "\x0E" => "",
+ "\x16" => "",
+ "\x00-" => "",
+ "\x09" => "",
+ "\x11" => "",
+ "\x12" => "",
+ "\x14-" => "",
+ "\x1f" => "",
+ "\x7f" => "",
+ );
+ $value = strtr($value, $pairs);
+ $writer->startElement("field");
+ $writer->writeAttribute('name', trim($k) . $typeSufix);
+ $writer->startCData();
+ $writer->text($value);
+ $writer->endCData();
+ $writer->endElement();
+ }
+ } else {
+ $value = trim($value);
+ $pairs = array(
+ "\x03" => "",
+ "\x04" => "",
+ "\x05" => "",
+ "\x06" => "",
+ "\x07" => "",
+ "\x08" => "",
+ "\x0E" => "",
+ "\x16" => "",
+ "\x00-" => "",
+ "\x09" => "",
+ "\x11" => "",
+ "\x12" => "",
+ "\x14-" => "",
+ "\x1f" => "",
+ "\x7f" => "",
+ );
+ $value = strtr($value, $pairs);
+ $writer->startElement("field");
+ $writer->writeAttribute('name', trim($k) . '_t');
+ $writer->startCData();
+ $writer->text($value);
+ $writer->endCData();
+ $writer->endElement();
+ }
+ }
+ } // foreach unserialized data
+ }// else unserialize APP_DATA
+ } // empty APP_DATA
+
+ $writer->endElement(); // end /doc
+
+ return $writer->outputMemory(true);
+ }
+
+ /**
+ * Search records in specified application delegation data
+ *
+ * @param string $AppUID
+ * application identifier
+ * @param string $allAppDbData
+ * array of rows (array) with application data
+ * @throws ApplicationWithoutDelegationRecordsException
+ * @return array array of arrays with the following information(
+ * $documentInformation,
+ * $dynaformFieldTypes,
+ * $lastUpdateDate,
+ * $maxPriority,
+ * $delLastIndex,
+ * $assignedUsers,
+ * $assignedUsersRead,
+ * $assignedUsersUnread,
+ * $draftUser,
+ * $participatedUsers,
+ * $participatedUsersStartedByUser,
+ * $participatedUsersCompletedByUser,
+ * $unassignedUsers,
+ * $unassignedGroups
+ */
+ public function getApplicationIndexData($AppUID, $allAppDbData)
+ {
+ // get all the application data
+ //$allAppDbData = $this->getApplicationDelegationData ($AppUID);
+ // check if the application record was found
+ // this case occurs when the application doesn't have related delegation
+ // records.
+ if (empty($allAppDbData) || !isset($allAppDbData [0])) {
+ throw new ApplicationWithoutDelegationRecordsException(date('Y-m-d H:i:s:u') . " Application without delegation records. APP_UID: " . $AppUID . "\n");
+ }
+
+ // copy the application information
+ $documentInformation = $allAppDbData [0];
+
+ // get the last delegate date using the del_delegate_date
+ $index = $this->aaGetMaximun($allAppDbData, 'DEL_DELEGATE_DATE', 'DATE');
+
+ $lastUpdateDate = $allAppDbData [$index] ['DEL_DELEGATE_DATE'];
+
+ // get the delegate with max priority => minimun value
+ $index2 = $this->aaGetMinimun($allAppDbData, 'DEL_PRIORITY', 'NUMBER', 'DEL_THREAD_STATUS', 'OPEN');
+
+ if ($index2 == null) {
+ // get the last priority
+ $maxPriority = $allAppDbData [$index] ['DEL_PRIORITY'];
+ } else {
+ $maxPriority = $allAppDbData [$index2] ['DEL_PRIORITY'];
+ }
+
+ //get last delegation
+ //in the case of parallel cases see the open cases
+ $delLastIndex = array();
+ $appStatus = $allAppDbData [0]['APP_STATUS'];
+ if ($appStatus == 'COMPLETED' || $appStatus == 'CANCELLED' || $appStatus == 'PAUSED') {
+ //case closed
+ //get the last delegation
+ //The correct would be to get all the cases paused in parallel cases
+ $index = $this->aaGetMaximun($allAppDbData, 'DEL_INDEX', 'NUMBER');
+ $delLastIndex[] = $allAppDbData [$index] ['DEL_INDEX'];
+ } else {
+ //case is vigent
+ $indexes = $this->aaSearchRecords($allAppDbData, array(
+ 'DEL_THREAD_STATUS' => 'OPEN',
+ 'DEL_FINISH_DATE' => 'NULL'
+ ));
+ foreach ($indexes as $index) {
+ $delLastIndex[] = $allAppDbData [$index] ['DEL_INDEX'];
+ }
+ if (count($indexes) == 0) {
+ //verify if is a paused case
+ //show the last delegation
+ //the correct would be to identify multiple cases if paused
+ $index = $this->aaGetMaximun($allAppDbData, 'DEL_INDEX', 'NUMBER');
+ $delLastIndex[] = $allAppDbData [$index] ['DEL_INDEX'];
+ }
+ }
+
+ $assignedUsers = array();
+ $indexes = $this->aaSearchRecords($allAppDbData, array(
+ 'DEL_THREAD_STATUS' => 'OPEN',
+ 'DEL_FINISH_DATE' => 'NULL',
+ 'APP_STATUS' => 'TO_DO', //, 'APP_THREAD_STATUS' => 'OPEN'
+ 'APP_TYPE' => ''
+ ));
+ foreach ($indexes as $index) {
+ $assignedUsers [] = array(
+ 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
+ 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX']
+ );
+ }
+
+ $assignedUsersRead = array();
+ $indexes = $this->aaSearchRecords($allAppDbData, array(
+ 'DEL_THREAD_STATUS' => 'OPEN',
+ 'DEL_FINISH_DATE' => 'NULL',
+ 'APP_STATUS' => 'TO_DO', //, 'APP_THREAD_STATUS' => 'OPEN',
+ 'DEL_INIT_DATE' => 'NOTNULL'
+ ));
+ foreach ($indexes as $index) {
+ $assignedUsersRead [] = array(
+ 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
+ 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX']
+ );
+ }
+
+ $assignedUsersUnread = array();
+ $indexes = $this->aaSearchRecords($allAppDbData, array(
+ 'DEL_THREAD_STATUS' => 'OPEN',
+ 'DEL_FINISH_DATE' => 'NULL',
+ 'APP_STATUS' => 'TO_DO', //, 'APP_THREAD_STATUS' => 'OPEN',
+ 'DEL_INIT_DATE' => 'NULL'
+ ));
+ foreach ($indexes as $index) {
+ $assignedUsersUnread [] = array(
+ 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
+ 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX']
+ );
+ }
+
+ $draftUser = array();
+ $indexes = $this->aaSearchRecords($allAppDbData, array(
+ 'DEL_THREAD_STATUS' => 'OPEN',
+ 'DEL_FINISH_DATE' => 'NULL',
+ 'APP_STATUS' => 'DRAFT'//, 'APP_THREAD_STATUS' => 'OPEN'
+ ));
+ if (!empty($indexes)) {
+ $draftUser = array(
+ 'USR_UID' => $allAppDbData [$indexes [0]] ['USR_UID'],
+ 'DEL_INDEX' => $allAppDbData [$indexes [0]] ['DEL_INDEX']
+ );
+ }
+
+ $participatedUsers = array();
+ foreach ($allAppDbData as $row) {
+ $participatedUsers [] = array(
+ 'USR_UID' => $row ['USR_UID'],
+ 'DEL_INDEX' => $row ['DEL_INDEX']
+ );
+ }
+
+ $participatedUsersStartedByUser = array();
+ $indexes = $this->aaSearchRecords($allAppDbData, array(
+ 'DEL_INDEX' => '1'
+ ));
+ foreach ($indexes as $index) {
+ $participatedUsersStartedByUser [] = array(
+ 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
+ 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX']
+ );
+ }
+
+ $participatedUsersCompletedByUser = array();
+ $indexes = $this->aaSearchRecords($allAppDbData, array(
+ 'APP_STATUS' => 'COMPLETED'
+ ));
+ foreach ($indexes as $index) {
+ $participatedUsersCompletedByUser [] = array(
+ 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
+ '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.
+ $unassignedUsers = array();
+ $unassignedGroups = array();
+ //filter only the delegations that are in selfservice status
+ // `USR_UID` = '' AND `DEL_FINISH_DATE` IS NULL
+ $indexes = $this->aaSearchRecords($allAppDbData, array(
+ 'USR_UID' => 'NULL',
+ 'DEL_FINISH_DATE' => 'NULL' //, 'APP_THREAD_STATUS' => 'OPEN'
+ ));
+ foreach ($indexes as $index) {
+ $unassignedUsersGroups = array();
+ // use cache
+ //$oMemcache = PMmemcached::getSingleton ($this->_solrInstance);
+ //$unassignedUsersGroups = $oMemcache->get ("SOLR_UNASSIGNED_USERS_GROUPS_" . $allAppDbData [$index] ['PRO_UID'] . "_" . $allAppDbData [$index] ['TAS_UID']);
+ //if (! $unassignedUsersGroups) {
+
+ $unassignedUsersGroups = $this->getTaskUnassignedUsersGroupsData($allAppDbData [$index] ['PRO_UID'], $allAppDbData [$index] ['TAS_UID']);
+
+ // if the task has unassigned users or groups add del_index of delegation
+ //foreach ($unassignedUsersGroups as $i => $newRow) {
+ // $unassignedUsersGroups [$i] ['DEL_INDEX'] = $allAppDbData [$index] ['DEL_INDEX'];
+ //}
+ // store in cache
+ //$oMemcache->set ("SOLR_UNASSIGNED_USERS_GROUPS_" . $allAppDbData [$index] ['PRO_UID'] . "_" . $allAppDbData [$index] ['TAS_UID'], $unassignedUsersGroups);
+ //}
+ // copy list of unassigned users and groups
+ foreach ($unassignedUsersGroups as $unassignedUserGroup) {
+ //unassigned users
+ if ($unassignedUserGroup ['TU_RELATION'] == 1) {
+ $unassignedUsers [] = array(
+ 'USR_UID' => $unassignedUserGroup ['USR_UID'],
+ 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX'] //$unassignedUserGroup ['DEL_INDEX']
+ );
+ }
+ //unassigned groups
+ elseif ($unassignedUserGroup ['TU_RELATION'] == 2) {
+ $unassignedGroups [] = array(
+ 'USR_UID' => $unassignedUserGroup ['USR_UID'],
+ 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX'] //$unassignedUserGroup ['DEL_INDEX']
+ );
}
}
}
- // validate phrase in case of < and <=
- $result1 = strpos($searchText, '<');
- if($result1 !== false) {
- $result = strpos($searchText, '<=');
- if($result !== false) {
- $v1 = str_replace( '<=', '', $searchText );
- $v2 = str_replace( ':', '', $v1);
- $v3 = str_replace( '<','' ,':[* TO '.$v2.']' );
- $searchText = $v3;
- } else {
- $v1 = str_replace( '<', '', $searchText );
- $v2 = str_replace( ':', '', $v1);
- $v3 = (int) $v2-1;
- $v4 = str_replace( '<','' ,':[* TO '.$v3.']' );
- $searchText = $v4;
- }
- }
- // validate phrase in case of > and >=
- $result2 = strpos($searchText, '>');
- if($result2 !== false) {
- $result = strpos($searchText, '>=');
- if($result !== false) {
- $v1 = str_replace( '>=', '', $searchText );
- $v2 = str_replace( ':', '', $v1);
- $v3 = str_replace( '>','' ,':['.$v2.' TO *]' );
- $searchText = $v3;
- } else {
- $v1 = str_replace( '>', '', $searchText );
- $v2 = str_replace( ':', '', $v1 );
- $v3 = (int) $v2+1;
- $v4 = str_replace( '>','' ,':['.$v3.' TO *]' );
- $searchText = $v4;
+ // Get DataTypes of dynaforms
+ // use cache array to store the dynaform variables per process
+ // use memory array to store information of Datatypes of Dynaforms
+ // All the datatypes of the process => all variables in all dynaforms in the
+ // process
+ $dynaformFieldTypes = array();
+
+ // get cache instance
+ //$oMemcache = PMmemcached::getSingleton ($this->_solrInstance);
+ //$dynaformFieldTypes = $oMemcache->get ("SOLR_DYNAFORM_FIELD_TYPES_" . $documentInformation ['PRO_UID']);
+ //if (! $dynaformFieldTypes) {
+ $dynaformFileNames = $this->getProcessDynaformFileNames($documentInformation ['PRO_UID']);
+ $dynaformFields = array();
+ foreach ($dynaformFileNames as $dynaformFileName) {
+ if (is_file(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml') &&
+ filesize(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml') > 0) {
+ $dyn = new DynaformHandler(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml');
+ $dynaformFields [] = $dyn->getFields();
}
- }
- $formattedSearchText .= $indexFieldName . $searchText;
- $includeToken = true;
- }
-
- if ($includeToken)
- $formattedSearchText .= " AND ";
-
- // next token
- $tok = strtok (" ");
- }
-
- // remove last AND
- $formattedSearchText = substr_replace ($formattedSearchText, "", - 5);
- return $formattedSearchText;
- }
-
- /**
- * Get all the application delegation records from database
- *
- * @param string $appUID
- * Application identifier
- * @return array delegation records
- */
- public function getApplicationDelegationsIndex($appUID)
- {
- $delIndexes = array ();
-
- $c = new Criteria ();
-
- $c->addSelectColumn (AppDelegationPeer::DEL_INDEX);
- $c->add (AppDelegationPeer::APP_UID, $appUID);
-
- $rs = AppDelegationPeer::doSelectRS ($c);
- $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC);
-
- $rs->next ();
- $row = $rs->getRow ();
-
- while (is_array ($row)) {
- $delIndexes [] = $row ['DEL_INDEX'];
- $rs->next ();
- $row = $rs->getRow ();
- }
-
- //Propel::close();
-
- return $delIndexes;
-
- }
-
-
- /**
- * Update the information of the specified applications in Solr
- *
- * @param array $aaAPPUIDs
- * Array of arrays of App_UID that must be updated,
- * APP_UID is permitted also
- */
- public function updateApplicationSearchIndex($aaAPPUIDs, $saveDBRecord = false)
- {
- if (empty ($aaAPPUIDs))
- return;
-
- if($this->debug)
- {
- //show app to reindex
- var_dump($aaAPPUIDs);
- }
-
- if (! is_array ($aaAPPUIDs)) {
- // convert to array
- $APPUID = $aaAPPUIDs;
- $aaAPPUIDs = array ();
- $aaAPPUIDs [] = array (
- 'APP_UID' => $APPUID
- );
- }
-
- if($this->debug)
- {
- //show app to reindex
- var_dump($aaAPPUIDs);
- }
-
- try{
-
- // check if index server is available
- /*
- if ($saveDBRecord) {
- if($this->isSolrEnabled()){
- //store update in table but with status updated
- foreach ($aaAPPUIDs as $aAPPUID) {
- $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 0);
- }
- }
- else{
- // store update in table and return
- foreach ($aaAPPUIDs as $aAPPUID) {
- $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], true);
- }
- return;
- }
-
- }*/
-
-
- if($this->debug)
- {
- $this->getApplicationDataDBTime = 0;
- $this->getPreparedApplicationDataDBTime = 0;
- $this->getBuilXMLDocTime = 0;
- $this->afterUpdateSolrXMLDocTime = 0;
-
- $this->beforeCreateSolrXMLDocTime = microtime (true);
-
- }
- // create XML document
- $xmlDoc = $this->createSolrXMLDocument ($aaAPPUIDs);
-
- if($this->debug )
- {
- $this->afterCreateSolrXMLDocTime = microtime (true);
- }
- // update document
- $data = array (
- 'workspace' => $this->_solrInstance,
- 'document' => $xmlDoc
- );
- $oSolrUpdateDocument = Entity_SolrUpdateDocument::createForRequest ($data);
-
- $oSearchIndex = new BpmnEngineServicesSearchIndex ($this->_solrIsEnabled, $this->_solrHost);
-
- $oSearchIndex->updateIndexDocument ($oSolrUpdateDocument);
-
- if($this->debug)
- {
- $this->afterUpdateSolrXMLDocTime = microtime (true);
- }
- // commit changes no required because of the commitwithin option
- //$oSearchIndex->commitIndexChanges ($this->_solrInstance);
- //change status in db to indexed
- if ($saveDBRecord) {
- foreach ($aaAPPUIDs as $aAPPUID) {
- $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 0);
+ if (is_file(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml') &&
+ filesize(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml') == 0) {
+ throw new ApplicationWithCorruptDynaformException(date('Y-m-d H:i:s:u') . "Application with corrupt dynaform. APP_UID: " . $AppUID . "\n");
}
}
- }
- catch(Exception $ex) {
- //echo $ex->getMessage();
- //echo $ex->getTraceAsString();
- $appuidsString = " ";
- //register all the appuids that can't be indexed
- foreach ($aaAPPUIDs as $aAPPUID) {
- $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], true);
- $appuidsString .= $aAPPUID ['APP_UID'] . ", ";
- }
- //print "Excepcion indexing data: " . $ex->getMessage() . "\n"; die;
- $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
- fwrite($fh, date('Y-m-d H:i:s:u') . ":" . $appuidsString . $ex->getMessage() . "\r\n");
- fclose($fh);
- }
- if($this->debug)
- {
-
- //$this->afterCommitSolrDocTime = microtime (true);
-
- $fh = fopen("SolrIndexTime.txt", 'a') or die("can't open file to store Solr index time.");
- //fwrite($fh, sprintf("Solr Query time: %s DB Query time: %s Prepare result time: %s \n", gmdate ('H:i:s:u', ($this->afterSolrQueryTime - $this->initTimeAll)), gmdate ('H:i:s:u', ($this->afterDbQueryTime - $this->afterSolrQueryTime)), gmdate ('H:i:s:u', ($this->afterPrepareResultTime - $this->afterDbQueryTime)) ));
- $trunkSize = count($aaAPPUIDs);
- $this->trunkSizeAcumulated += $trunkSize;
- $this->totalTimeAcumulated += ($this->afterUpdateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime);
-
- //Solr App trunk size| Get Data from DB (s)| Prepare DB data (s) | Create XML file (s)| Create XML Document total (s)| Update Solr Document (s)
- fwrite($fh, sprintf("%s|%s|%s|%s|%s|%s|%s|%s\r\n",
- $this->trunkSizeAcumulated,
- $this->totalTimeAcumulated,
- $this->getApplicationDataDBTime,
- $this->getPreparedApplicationDataDBTime,
- $this->getBuilXMLDocTime,
- ($this->afterCreateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime),
- ($this->afterUpdateSolrXMLDocTime - $this->afterCreateSolrXMLDocTime),
- ($this->afterUpdateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime)
- ));
-
- fclose($fh);
-
- /*
- fwrite($fh, sprintf("Solr App trunk size: %s => Create XML Document total (s): %s, Update Solr Document (s): %s, Total (s):%s \r\n",
- $trunkSize, ($this->afterCreateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime), ($this->afterUpdateSolrXMLDocTime - $this->afterCreateSolrXMLDocTime),
- ($this->afterUpdateSolrXMLDocTime - $this->beforeCreateSolrXMLDocTime)));
- fclose($fh);
- $fh = fopen("SolrIndexTime.txt", 'a') or die("can't open file to store Solr index time.");
- fwrite($fh, sprintf("APP range => Get Data from DB (s): %s, Prepare DB data (s): %s, Create XML file(s): %s \r\n",
- $this->getApplicationDataDBTime, $this->getPreparedApplicationDataDBTime, $this->getBuilXMLDocTime ));
- fclose($fh);*/
-
- }
- }
-
- /**
- * Delete the specified application record from Solr
- *
- * @param string $aaAPPUIDs
- * array of arrays of Application identifiers format:$aaAPPUIDs [] = array ('APP_UID' => '...')
- */
- public function deleteApplicationSearchIndex($aaAPPUIDs, $saveDBRecord = false)
- {
- if (empty ($aaAPPUIDs))
- return;
-
-
- if (! is_array ($aaAPPUIDs)) {
- // convert to array
- $APPUID = $aaAPPUIDs;
- $aaAPPUIDs = array ();
- $aaAPPUIDs [] = array (
- 'APP_UID' => $APPUID
- );
- }
-
- /*
- if ($saveDBRecord) {
- if($this->isSolrEnabled()){
- //store update in table but with status updated
- foreach ($aaAPPUIDs as $aAPPUID) {
- $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 0);
- }
- }
- else{
- // store update in table and return
- foreach ($aaAPPUIDs as $aAPPUID) {
- $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 2);
- }
- return;
- }
- }*/
-
- try{
-
- $oSearchIndex = new BpmnEngineServicesSearchIndex ($this->_solrIsEnabled, $this->_solrHost);
-
- foreach ($aaAPPUIDs as $aAPPUID) {
- $idQuery = "APP_UID:" . $aAPPUID ['APP_UID'];
-
- $oSearchIndex->deleteDocumentFromIndex ($this->_solrInstance, $idQuery);
-
- }
-
- if ($saveDBRecord) {
- foreach ($aaAPPUIDs as $aAPPUID) {
- $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 0);
- }
- }
- }
- catch(Exception $ex) {
- //register all the appuids that can't be indexed
- $appuidsString = " ";
- foreach ($aaAPPUIDs as $aAPPUID) {
- $this->applicationChangedUpdateSolrQueue ($aAPPUID ['APP_UID'], 2);
- $appuidsString .= $aAPPUID ['APP_UID'] . ", ";
- }
- //print "Excepcion indexing data: " . $ex->getMessage() . "\n"; die;
- $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
- fwrite($fh, date('Y-m-d H:i:s:u') . ":" . $appuidsString . $ex->getMessage() . "\r\n");
- fclose($fh);
- }
-
- // commit changes
- //$oSearchIndex->commitIndexChanges ($this->_solrInstance);
- }
-
- /**
- * Create XML data in Solr format of the specified applications
- * this function uses the buildSearchIndexDocumentPMOS2 function to create
- * each record
- *
- * @param array $aaAPPUIDs
- * array of arrays of application identifiers
- * @return string The resulting XML document in Solr format
- */
- public function createSolrXMLDocument($aaAPPUIDs)
- {
- if($this->debug)
- {
- $this->getApplicationDataDBTime = 0;
- $this->getPreparedApplicationDataDBTime = 0;
- $this->getBuilXMLDocTime = 0;
- }
- // search data from DB
- $xmlDoc = "\n";
- $xmlDoc .= "\n";
-
- //get all application data from DB of all applications and delegations
- $aAPPUIDs = array();
- foreach($aaAPPUIDs as $aAPPUID) {
- $aAPPUIDs[] =$aAPPUID ['APP_UID'];
- }
- if($this->debug)
- {
- $this->beforeGetApplicationDataDBTime = microtime (true);
- }
- $aaAllAppDelData = $this->getListApplicationUpdateDelegationData($aAPPUIDs);
- if($this->debug)
- {
- $this->afterGetApplicationDataDBTime = microtime (true);
-
- $this->getApplicationDataDBTime = $this->afterGetApplicationDataDBTime - $this->beforeGetApplicationDataDBTime;
- }
- foreach ($aaAPPUIDs as $aAPPUID) {
- try {
-
- if($this->debug)
- {
- $this->beforePrepareApplicationDataDBTime = microtime (true);
- }
- //filter data, include all the rows of the application
- // get delegation data from DB
- $aaAppData = array();
- //filter data from db
- $indexes = $this->aaSearchRecords ($aaAllAppDelData, array (
- 'APP_UID' => $aAPPUID ['APP_UID']
- ));
-
- foreach ($indexes as $index) {
- $aaAppData[] = $aaAllAppDelData [$index];
- }
-
- $result = $this->getApplicationIndexData ($aAPPUID ['APP_UID'], $aaAppData);
-
- if($this->debug)
- {
- $this->afterPrepareApplicationDataDBTime = microtime (true);
-
- $this->getPreparedApplicationDataDBTime += $this->afterPrepareApplicationDataDBTime - $this->beforePrepareApplicationDataDBTime;
- }
-
- }
- catch ( ApplicationWithoutDelegationRecordsException $ex ) {
- // exception trying to get application information
- // skip and continue with the next application
- $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
- fwrite($fh, date('Y-m-d H:i:s:u') . " " . $ex->getMessage());
- fclose($fh);
- continue;
- }
- catch( ApplicationWithCorruptDynaformException $ex) {
- $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
- fwrite($fh, date('Y-m-d H:i:s:u') . " " . $ex->getMessage());
- fclose($fh);
- continue;
- }
- catch (Exception $ex) {
- $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
- fwrite($fh, date('Y-m-d H:i:s:u') . " " . "getApplicationIndexData " . $aAPPUID['APP_UID'] . ":" . $ex->getMessage() . "\n");
- fclose($fh);
- continue;
- }
- /*$documentInformation,
- * $dynaformFieldTypes,
- * $lastUpdateDate,
- * $maxPriority,
- * $delLastIndex,
- * $assignedUsers,
- * $assignedUsersRead,
- * $assignedUsersUnread,
- * $draftUser,
- * $participatedUsers,
- * $participatedUsersStartedByUser,
- * $participatedUsersCompletedByUser,
- * $unassignedUsers,
- * $unassignedGroups */
- $documentInformation = $result [0];
- $dynaformFieldTypes = $result [1];
- $lastUpdateDate = $result [2];
- $maxPriority = $result [3];
- $delLastIndex = $result [4];
- $assignedUsers = $result [5];
- $assignedUsersRead = $result [6];
- $assignedUsersUnread = $result [7];
- $draftUser = $result [8];
- $participatedUsers = $result [9];
- $participatedUsersStartedByUser = $result [10];
- $participatedUsersCompletedByUser = $result [11];
- $unassignedUsers = $result [12];
- $unassignedGroups = $result [13];
- $pausedtUser = $result [14];
-
- try {
-
- // create document
- $xmlCurrentDoc = $this->buildSearchIndexDocumentPMOS2 ($documentInformation, $dynaformFieldTypes,
- $lastUpdateDate, $maxPriority, $delLastIndex, $assignedUsers, $assignedUsersRead, $assignedUsersUnread,
- $draftUser, $participatedUsers, $participatedUsersStartedByUser, $participatedUsersCompletedByUser,
- $unassignedUsers, $unassignedGroups,$pausedtUser);
-
- //concat doc to the list of docs
- $xmlDoc .= $xmlCurrentDoc;
-
- if($this->debug)
- {
- $this->afterBuilXMLDocTime = microtime (true);
-
- $this->getBuilXMLDocTime += $this->afterBuilXMLDocTime - $this->afterPrepareApplicationDataDBTime;
- }
- }
- catch ( ApplicationAppDataUnserializeException $ex ) {
- // exception trying to get application information
- $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
- fwrite($fh, date('Y-m-d H:i:s:u') . " " . $ex->getMessage());
- fclose($fh);
- // skip and continue with the next application
- continue;
- }
- catch (Exception $ex) {
- $fh = fopen("./SolrIndexErrors.txt", 'a') or die("can't open file to store Solr index errors.");
- fwrite($fh, date('Y-m-d H:i:s:u') . " " . "buildSearchIndexDocumentPMOS2 " . $aAPPUID['APP_UID'] . ":" . $ex->getMessage() . "\n");
- fclose($fh);
- continue;
- }
-
- if($this->debugAppInfo)
- {
- $fh = fopen("SolrAPPUIDIndexSize.txt", 'a') or die("can't open file to store Solr index time.");
- //fwrite($fh, sprintf("APP UID %s => doc size: %s\r\n",
- // $aAPPUID['APP_UID'], strlen($xmlCurrentDoc)));
- fwrite($fh, sprintf("%s|%s|%s\r\n",
- $documentInformation ['APP_NUMBER'], $aAPPUID['APP_UID'], strlen($xmlCurrentDoc)));
- fclose($fh);
- }
-
-
- }//End foreach APPUID
-
- $xmlDoc .= "\n";
-
- /*
- if($this->debug)
- {
- $fh = fopen("SolrIndexTime.txt", 'a') or die("can't open file to store Solr index time.");
- fwrite($fh, sprintf("APP range => Get Data from DB (s): %s, Prepare DB data (s): %s, Create XML file(s): %s \r\n",
- $this->getApplicationDataDBTime, $this->getPreparedApplicationDataDBTime, $this->getBuilXMLDocTime ));
- fclose($fh);
- }*/
-
- return $xmlDoc;
- }
-
- /**
- * build Solr index document xml for an application
- * @gearman = false
- * @rest = false
- * @background = false
- *
- * @param
- * [in] array $documentData array of data for the xml document of
- * application
- * @param
- * [in] array $dynaformFieldTypes array of dynaform field types, used
- * to store the info of APP_DATA with types
- * @param
- * [in] array $appTitles array of array of application titles in all
- * languages
- * @param
- * [in] array $proTitles array of array of process titles in all
- * languages
- * @param
- * [in] array $assignedUsers array of array of uids of assigned users
- * to Application UIDs
- * @param
- * [in] array $draftUsers array of array of uids of draft users to
- * Application UIDs
- * @param
- * [in] array $participatedUsers array of array of participated users
- * UIDs in application
- * @param
- * [in] array $unassignedUsers array of unassigned users UIDs
- * @param
- * [in] array $unassignedGroups array of unassigned groups UIDs
- * @param
- * [out] xml xml document
- *
- * $xmlDoc .= buildSearchIndexDocumentPMOS2($documentInformation,
- * $dynaformFieldTypes,
- * $lastUpdateDate, $maxPriority,
- * $assignedUsers, $assignedUsersRead, $assignedUsersUnread,
- * $draftUser,
- * $participatedUsers, $participatedUsersStartedByUser,
- * $participatedUsersCompletedByUser,
- * $unassignedUsers, $unassignedGroups);*
- */
- public function buildSearchIndexDocumentPMOS2($documentData, $dynaformFieldTypes, $lastUpdateDate,
- $maxPriority, $delLastIndex, $assignedUsers, $assignedUsersRead, $assignedUsersUnread, $draftUser,
- $participatedUsers, $participatedUsersStartedByUser, $participatedUsersCompletedByUser,
- $unassignedUsers, $unassignedGroups,$pausedtUser)
- {
- // build xml document
-
- $writer = new XMLWriter ();
- $writer->openMemory ();
- $writer->setIndent (4);
-
- $writer->startElement ("doc");
-
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_UID');
- $writer->text ($documentData ['APP_UID']);
- $writer->endElement ();
-
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_NUMBER');
- $writer->text ($documentData ['APP_NUMBER']);
- $writer->endElement ();
-
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_STATUS');
- $writer->text ($documentData ['APP_STATUS']);
- $writer->endElement ();
-
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'PRO_UID');
- $writer->text ($documentData ['PRO_UID']);
- $writer->endElement ();
-
- if (! empty ($documentData ['APP_TITLE'])) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_TITLE');
- $writer->text ($documentData ['APP_TITLE']);
- $writer->endElement ();
- }
- else {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_TITLE');
- $writer->text ("");
- $writer->endElement ();
- }
-
- if (! empty ($documentData ['PRO_TITLE'])) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_PRO_TITLE');
- $writer->text ($documentData ['PRO_TITLE']);
- $writer->endElement ();
-
- }
- else {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_PRO_TITLE');
- $writer->text ("");
- $writer->endElement ();
- }
-
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_CREATE_DATE');
- // convert date to UTC with gmdate
- $writer->text (gmdate ("Y-m-d\TH:i:s\Z", strtotime ($documentData ['APP_CREATE_DATE'])));
- $writer->endElement ();
-
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'DEL_LAST_UPDATE_DATE');
- // convert date to UTC with gmdate
- $writer->text (gmdate ("Y-m-d\TH:i:s\Z", strtotime ($lastUpdateDate)));
- $writer->endElement ();
-
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'DEL_MAX_PRIORITY');
- $writer->text ($maxPriority);
- $writer->endElement ();
-
- if (!empty($documentData["PRO_CATEGORY_UID"])) {
- $writer->startElement("field");
- $writer->writeAttribute("name", "PRO_CATEGORY_UID_s");
- $writer->text($documentData["PRO_CATEGORY_UID"]);
- $writer->endElement();
- }
-
- foreach ($delLastIndex as $lastIndex) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'DEL_LAST_INDEX');
- $writer->text ($lastIndex);
- $writer->endElement ();
- }
-
- if (is_array ($assignedUsers) && ! empty ($assignedUsers)) {
- foreach ($assignedUsers as $userUID) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_ASSIGNED_USERS');
- $writer->text ($userUID ['USR_UID']);
- $writer->endElement ();
-
- // add dynamic field for del_index information
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_ASSIGNED_USER_DEL_INDEX_' . trim ($userUID ['USR_UID']) . '_txt');
- $writer->text ($userUID ['DEL_INDEX']);
- $writer->endElement ();
-
- }
- }
-
- if (is_array ($assignedUsersRead) && ! empty ($assignedUsersRead)) {
- foreach ($assignedUsersRead as $userUID) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_ASSIGNED_USERS_READ');
- $writer->text ($userUID ['USR_UID']);
- $writer->endElement ();
-
- // add dynamic field for del_index information
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_ASSIGNED_USER_READ_DEL_INDEX_' . trim ($userUID ['USR_UID']) . '_txt');
- $writer->text ($userUID ['DEL_INDEX']);
- $writer->endElement ();
- }
- }
-
- if (is_array ($assignedUsersUnread) && ! empty ($assignedUsersUnread)) {
- foreach ($assignedUsersUnread as $userUID) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_ASSIGNED_USERS_UNREAD');
- $writer->text ($userUID ['USR_UID']);
- $writer->endElement ();
-
- // add dynamic field for del_index information
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_ASSIGNED_USER_UNREAD_DEL_INDEX_' . trim ($userUID ['USR_UID']) . '_txt');
- $writer->text ($userUID ['DEL_INDEX']);
- $writer->endElement ();
- }
- }
-
- if (! empty ($draftUser)) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_DRAFT_USER');
- $writer->text ($draftUser ['USR_UID']);
- $writer->endElement ();
- }
-
- if (is_array ($participatedUsers) && ! empty ($participatedUsers)) {
- foreach ($participatedUsers as $userUID) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_PARTICIPATED_USERS');
- $writer->text ($userUID ['USR_UID']);
- $writer->endElement ();
-
- // add dynamic field for del_index information
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_PARTICIPATED_USER_DEL_INDEX_' . trim ($userUID ['USR_UID']) . '_txt');
- $writer->text ($userUID ['DEL_INDEX']);
- $writer->endElement ();
- }
- }
-
- if (is_array ($participatedUsersStartedByUser) && ! empty ($participatedUsersStartedByUser)) {
- foreach ($participatedUsersStartedByUser as $userUID) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_PARTICIPATED_USERS_STARTED');
- $writer->text ($userUID ['USR_UID']);
- $writer->endElement ();
-
- // add dynamic field for del_index information
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_PARTICIPATED_USER_STARTED_DEL_INDEX_' . trim ($userUID ['USR_UID']) . '_txt');
- $writer->text ($userUID ['DEL_INDEX']);
- $writer->endElement ();
- }
- }
-
- if (is_array ($participatedUsersCompletedByUser) && ! empty ($participatedUsersCompletedByUser)) {
- foreach ($participatedUsersCompletedByUser as $userUID) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_PARTICIPATED_USERS_COMPLETED');
- $writer->text ($userUID ['USR_UID']);
- $writer->endElement ();
-
- // add dynamic field for del_index information
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_PARTICIPATED_USER_COMPLETED_DEL_INDEX_' . trim ($userUID ['USR_UID']) . '_txt');
- $writer->text ($userUID ['DEL_INDEX']);
- $writer->endElement ();
- }
- }
-
- if (is_array ($unassignedUsers) && ! empty ($unassignedUsers)) {
- foreach ($unassignedUsers as $userUID) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_UNASSIGNED_USERS');
- $writer->text ($userUID ['USR_UID']);
- $writer->endElement ();
-
- // add dynamic field for del_index information
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_UNASSIGNED_USER_GROUP_DEL_INDEX_' . trim ($userUID ['USR_UID']) . '_txt');
- $writer->text ($userUID ['DEL_INDEX']);
- $writer->endElement ();
- }
- }
-
- if (is_array ($unassignedGroups) && ! empty ($unassignedGroups)) {
- foreach ($unassignedGroups as $groupUID) {
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_UNASSIGNED_GROUPS');
- $writer->text ($groupUID ['USR_UID']);
- $writer->endElement ();
-
- // add dynamic field for del_index information
- $writer->startElement ("field");
- $writer->writeAttribute ('name', 'APP_UNASSIGNED_USER_GROUP_DEL_INDEX_' . trim ($groupUID ['USR_UID']) . '_txt');
- $writer->text ($groupUID ['DEL_INDEX']);
- $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;" ) {
-
- $UnSerializedCaseData = unserialize ($documentData ['APP_DATA']);
-
- if ($UnSerializedCaseData === false) {
- $UnSerializedCaseData = preg_replace ('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $documentData ['APP_DATA']); // utf8_encode
- $UnSerializedCaseData = unserialize ($UnSerializedCaseData);
- }
-
- if (! $UnSerializedCaseData) {
- // error unserializing
- throw new ApplicationAppDataUnserializeException (date('Y-m-d H:i:s:u') . " Could not unserialize APP_DATA of APP_UID: " . $documentData ['APP_UID'] . "\n");
- }
- else {
- foreach ($UnSerializedCaseData as $k => $value) {
- //This validation is only for the 'checkbox' control for the BPMN forms,
- //the request is not made to the database to obtain the control
- //associated with the variable so as not to decrease the performance.
- if (is_array($value) && count($value) === 1 && isset($value[0]) && !is_object($value[0]) && !is_array($value[0])) {
- $value = $value[0];
+ foreach ($dynaformFields as $aDynFormFields) {
+ foreach ($aDynFormFields as $field) {
+ // create array of fields and types
+ if ($field->getAttribute('validate') == 'Int') {
+ $dynaformFieldTypes [$field->nodeName] = 'Int';
+ } elseif ($field->getAttribute('validate') == 'Real') {
+ $dynaformFieldTypes [$field->nodeName] = 'Real';
+ } else {
+ $dynaformFieldTypes [$field->nodeName] = $field->getAttribute('type');
+ }
}
- if (! is_array ($value) && ! is_object ($value) && $value != '' && $k != 'SYS_LANG' && $k != 'SYS_SKIN' && $k != 'SYS_SYS') {
- // search the field type in array of dynaform fields
- if (! empty ($dynaformFieldTypes) && array_key_exists (trim ($k), $dynaformFieldTypes)) {
- $type = $dynaformFieldTypes [trim ($k)];
- $typeSufix = '_t';
- switch ($type) {
- case 'text' :
- $typeSufix = '_t';
- break;
- case 'Int' :
- if(intval ($value) > 2147483647) {
- $typeSufix = '_tl'; //for long values
- $value = intval ($value);
- }
- else {
- $typeSufix = '_ti';
- $value = str_replace( ',', '', $value );
- $value = intval ($value);
- }
- break;
- case 'Real' :
- $typeSufix = '_td';
- $value = str_replace( ',', '', $value );
- $value = floatval ($value);
- break;
- case 'date' :
- $newdate = false;
- $withHour = true;
- // try to convert string to date
- // TODO convert to php 5.2 format
- /*
- * $newdate = date_create_from_format ( 'Y-m-d H:i:s', $value
- * ); if (! $newdate) { $newdate = date_create_from_format (
- * 'Y-m-d', $value ); $withHour = false; } if (! $newdate) {
- * $newdate = date_create_from_format ( 'd/m/Y', $value );
- * $withHour = false; } if (! $newdate) { $newdate =
- * date_create_from_format ( 'j/m/Y', $value ); $withHour =
- * false; }
- */
- $newdate = strtotime ($value);
- if (! $newdate) {
- $typeSufix = '*'; // not store field
- }
- else {
- $typeSufix = '_tdt';
- /*
- * if ($withHour) //$value = gmdate ( "Y-m-d\TH:i:s\Z",
- * $newdate->getTimestamp () ); $value = gmdate (
- * "Y-m-d\TH:i:s\Z", $newdate ); else { $value = gmdate (
- * "Y-m-d\T00:00:00\Z", $newdate ); }
- */
- $value = gmdate ("Y-m-d\T00:00:00\Z", $newdate);
- }
- break;
- case 'dropdown' :
- $typeSufix = '_t';
- break;
- case 'textarea' :
- $typeSufix = '_t';
- break;
- case 'currency' :
- $typeSufix = '_td';
- $value = floatval ($value);
- break;
- case 'percentage' :
- $typeSufix = '_t';
- break;
- case 'password' :
- $typeSufix = '_t';
- break;
- case 'suggest' :
- $typeSufix = '_t';
- break;
- case 'yesno' :
- $typeSufix = '_t';
- break;
- case 'listbox' :
- $typeSufix = '_t';
- break;
- case 'checkbox' :
- $typeSufix = '_t';
- break;
- case 'checkgroup' :
- $typeSufix = '_t';
- break;
- case 'radiogroup' :
- $typeSufix = '_t';
- break;
- case 'hidden' :
- $typeSufix = '_t';
- break;
- }
- if ($typeSufix != '*') {
- $value = trim($value);
- $pairs = array(
- "\x03" => "",
- "\x04" => "",
- "\x05" => "",
- "\x06" => "",
- "\x07" => "",
- "\x08" => "",
- "\x0E" => "",
- "\x16" => "",
- "\x00-" => "",
- "\x09" => "",
- "\x11" => "",
- "\x12" => "",
- "\x14-" => "",
- "\x1f" => "",
- "\x7f" => "",
- );
- $value = strtr($value, $pairs);
- $writer->startElement ("field");
- $writer->writeAttribute ('name', trim ($k) . $typeSufix);
- $writer->startCData ();
- $writer->text ($value);
- $writer->endCData();
- $writer->endElement ();
- }
- }
- else {
- $value = trim($value);
- $pairs = array(
- "\x03" => "",
- "\x04" => "",
- "\x05" => "",
- "\x06" => "",
- "\x07" => "",
- "\x08" => "",
- "\x0E" => "",
- "\x16" => "",
- "\x00-" => "",
- "\x09" => "",
- "\x11" => "",
- "\x12" => "",
- "\x14-" => "",
- "\x1f" => "",
- "\x7f" => "",
- );
- $value = strtr($value, $pairs);
- $writer->startElement ("field");
- $writer->writeAttribute ('name', trim ($k) . '_t');
- $writer->startCData ();
- $writer->text ($value);
- $writer->endCData();
- $writer->endElement ();
- }
- }
- } // foreach unserialized data
- }// else unserialize APP_DATA
- } // empty APP_DATA
-
- $writer->endElement (); // end /doc
-
- return $writer->outputMemory (true);
- }
-
- /**
- * Search records in specified application delegation data
- *
- * @param string $AppUID
- * application identifier
- * @param string $allAppDbData
- * array of rows (array) with application data
- * @throws ApplicationWithoutDelegationRecordsException
- * @return array array of arrays with the following information(
- * $documentInformation,
- * $dynaformFieldTypes,
- * $lastUpdateDate,
- * $maxPriority,
- * $delLastIndex,
- * $assignedUsers,
- * $assignedUsersRead,
- * $assignedUsersUnread,
- * $draftUser,
- * $participatedUsers,
- * $participatedUsersStartedByUser,
- * $participatedUsersCompletedByUser,
- * $unassignedUsers,
- * $unassignedGroups
- */
- public function getApplicationIndexData($AppUID, $allAppDbData)
- {
- // get all the application data
- //$allAppDbData = $this->getApplicationDelegationData ($AppUID);
- // check if the application record was found
- // this case occurs when the application doesn't have related delegation
- // records.
- if (empty ($allAppDbData) || ! isset ($allAppDbData [0])) {
- throw new ApplicationWithoutDelegationRecordsException ( date('Y-m-d H:i:s:u') . " Application without delegation records. APP_UID: " . $AppUID . "\n");
- }
-
- // copy the application information
- $documentInformation = $allAppDbData [0];
-
- // get the last delegate date using the del_delegate_date
- $index = $this->aaGetMaximun ($allAppDbData, 'DEL_DELEGATE_DATE', 'DATE');
-
- $lastUpdateDate = $allAppDbData [$index] ['DEL_DELEGATE_DATE'];
-
- // get the delegate with max priority => minimun value
- $index2 = $this->aaGetMinimun ($allAppDbData, 'DEL_PRIORITY', 'NUMBER', 'DEL_THREAD_STATUS', 'OPEN');
-
- if ($index2 == null) {
- // get the last priority
- $maxPriority = $allAppDbData [$index] ['DEL_PRIORITY'];
- }
- else {
- $maxPriority = $allAppDbData [$index2] ['DEL_PRIORITY'];
- }
-
- //get last delegation
- //in the case of parallel cases see the open cases
- $delLastIndex = array();
- $appStatus = $allAppDbData [0]['APP_STATUS'];
- if($appStatus == 'COMPLETED' || $appStatus == 'CANCELLED' || $appStatus == 'PAUSED'){
- //case closed
- //get the last delegation
- //The correct would be to get all the cases paused in parallel cases
- $index = $this->aaGetMaximun ($allAppDbData, 'DEL_INDEX', 'NUMBER');
- $delLastIndex[] = $allAppDbData [$index] ['DEL_INDEX'];
- }else{
- //case is vigent
- $indexes = $this->aaSearchRecords ($allAppDbData, array (
- 'DEL_THREAD_STATUS' => 'OPEN',
- 'DEL_FINISH_DATE' => 'NULL'
- ));
- foreach ($indexes as $index) {
- $delLastIndex[] = $allAppDbData [$index] ['DEL_INDEX'];
- }
- if(count($indexes) == 0){
- //verify if is a paused case
- //show the last delegation
- //the correct would be to identify multiple cases if paused
- $index = $this->aaGetMaximun ($allAppDbData, 'DEL_INDEX', 'NUMBER');
- $delLastIndex[] = $allAppDbData [$index] ['DEL_INDEX'];
- }
- }
-
- $assignedUsers = array ();
- $indexes = $this->aaSearchRecords ($allAppDbData, array (
- 'DEL_THREAD_STATUS' => 'OPEN',
- 'DEL_FINISH_DATE' => 'NULL',
- 'APP_STATUS' => 'TO_DO', //, 'APP_THREAD_STATUS' => 'OPEN'
- 'APP_TYPE' => ''
- ));
- foreach ($indexes as $index) {
- $assignedUsers [] = array (
- 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
- 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX']
- );
- }
-
- $assignedUsersRead = array ();
- $indexes = $this->aaSearchRecords ($allAppDbData, array (
- 'DEL_THREAD_STATUS' => 'OPEN',
- 'DEL_FINISH_DATE' => 'NULL',
- 'APP_STATUS' => 'TO_DO', //, 'APP_THREAD_STATUS' => 'OPEN',
- 'DEL_INIT_DATE' => 'NOTNULL'
- ));
- foreach ($indexes as $index) {
- $assignedUsersRead [] = array (
- 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
- 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX']
- );
- }
-
- $assignedUsersUnread = array ();
- $indexes = $this->aaSearchRecords ($allAppDbData, array (
- 'DEL_THREAD_STATUS' => 'OPEN',
- 'DEL_FINISH_DATE' => 'NULL',
- 'APP_STATUS' => 'TO_DO', //, 'APP_THREAD_STATUS' => 'OPEN',
- 'DEL_INIT_DATE' => 'NULL'
- ));
- foreach ($indexes as $index) {
- $assignedUsersUnread [] = array (
- 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
- 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX']
- );
- }
-
- $draftUser = array ();
- $indexes = $this->aaSearchRecords ($allAppDbData, array (
- 'DEL_THREAD_STATUS' => 'OPEN',
- 'DEL_FINISH_DATE' => 'NULL',
- 'APP_STATUS' => 'DRAFT'//, 'APP_THREAD_STATUS' => 'OPEN'
- ));
- if (! empty ($indexes)) {
- $draftUser = array (
- 'USR_UID' => $allAppDbData [$indexes [0]] ['USR_UID'],
- 'DEL_INDEX' => $allAppDbData [$indexes [0]] ['DEL_INDEX']
- );
- }
-
- $participatedUsers = array ();
- foreach ($allAppDbData as $row) {
- $participatedUsers [] = array (
- 'USR_UID' => $row ['USR_UID'],
- 'DEL_INDEX' => $row ['DEL_INDEX']
- );
- }
-
- $participatedUsersStartedByUser = array ();
- $indexes = $this->aaSearchRecords ($allAppDbData, array (
- 'DEL_INDEX' => '1'
- ));
- foreach ($indexes as $index) {
- $participatedUsersStartedByUser [] = array (
- 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
- 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX']
- );
- }
-
- $participatedUsersCompletedByUser = array ();
- $indexes = $this->aaSearchRecords ($allAppDbData, array (
- 'APP_STATUS' => 'COMPLETED'
- ));
- foreach ($indexes as $index) {
- $participatedUsersCompletedByUser [] = array (
- 'USR_UID' => $allAppDbData [$index] ['USR_UID'],
- '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.
- $unassignedUsers = array ();
- $unassignedGroups = array ();
- //filter only the delegations that are in selfservice status
- // `USR_UID` = '' AND `DEL_FINISH_DATE` IS NULL
- $indexes = $this->aaSearchRecords ($allAppDbData, array (
- 'USR_UID' => 'NULL',
- 'DEL_FINISH_DATE' => 'NULL' //, 'APP_THREAD_STATUS' => 'OPEN'
- ));
- foreach ($indexes as $index) {
- $unassignedUsersGroups = array ();
- // use cache
- //$oMemcache = PMmemcached::getSingleton ($this->_solrInstance);
- //$unassignedUsersGroups = $oMemcache->get ("SOLR_UNASSIGNED_USERS_GROUPS_" . $allAppDbData [$index] ['PRO_UID'] . "_" . $allAppDbData [$index] ['TAS_UID']);
- //if (! $unassignedUsersGroups) {
-
- $unassignedUsersGroups = $this->getTaskUnassignedUsersGroupsData ($allAppDbData [$index] ['PRO_UID'], $allAppDbData [$index] ['TAS_UID']);
-
- // if the task has unassigned users or groups add del_index of delegation
- //foreach ($unassignedUsersGroups as $i => $newRow) {
- // $unassignedUsersGroups [$i] ['DEL_INDEX'] = $allAppDbData [$index] ['DEL_INDEX'];
+ $dynaformFieldTypes = $this->getVariablesDynaform($documentInformation['PRO_UID'], $dynaformFieldTypes);
+ // create cache of dynaformfields
+ //$oMemcache->set ("SOLR_DYNAFORM_FIELD_TYPES_" . $documentInformation ['PRO_UID'], $dynaformFieldTypes);
//}
- // store in cache
- //$oMemcache->set ("SOLR_UNASSIGNED_USERS_GROUPS_" . $allAppDbData [$index] ['PRO_UID'] . "_" . $allAppDbData [$index] ['TAS_UID'], $unassignedUsersGroups);
- //}
-
- // copy list of unassigned users and groups
- foreach ($unassignedUsersGroups as $unassignedUserGroup) {
- //unassigned users
- if ($unassignedUserGroup ['TU_RELATION'] == 1) {
- $unassignedUsers [] = array (
- 'USR_UID' => $unassignedUserGroup ['USR_UID'],
- 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX'] //$unassignedUserGroup ['DEL_INDEX']
- );
- }
- //unassigned groups
- elseif ($unassignedUserGroup ['TU_RELATION'] == 2) {
- $unassignedGroups [] = array (
- 'USR_UID' => $unassignedUserGroup ['USR_UID'],
- 'DEL_INDEX' => $allAppDbData [$index] ['DEL_INDEX'] //$unassignedUserGroup ['DEL_INDEX']
- );
- }
- }
-
- }
+ // return result values
+ $result = array(
+ $documentInformation,
+ $dynaformFieldTypes,
+ $lastUpdateDate,
+ $maxPriority,
+ $delLastIndex,
+ $assignedUsers,
+ $assignedUsersRead,
+ $assignedUsersUnread,
+ $draftUser,
+ $participatedUsers,
+ $participatedUsersStartedByUser,
+ $participatedUsersCompletedByUser,
+ $unassignedUsers,
+ $unassignedGroups,
+ $pausedUsers
+ );
- // Get DataTypes of dynaforms
- // use cache array to store the dynaform variables per process
- // use memory array to store information of Datatypes of Dynaforms
- // All the datatypes of the process => all variables in all dynaforms in the
- // process
- $dynaformFieldTypes = array ();
+ return $result;
+ }
- // get cache instance
- //$oMemcache = PMmemcached::getSingleton ($this->_solrInstance);
- //$dynaformFieldTypes = $oMemcache->get ("SOLR_DYNAFORM_FIELD_TYPES_" . $documentInformation ['PRO_UID']);
- //if (! $dynaformFieldTypes) {
- $dynaformFileNames = $this->getProcessDynaformFileNames ($documentInformation ['PRO_UID']);
- $dynaformFields = array ();
- foreach ($dynaformFileNames as $dynaformFileName) {
- if (is_file(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml') &&
- filesize(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml') >0 ) {
- $dyn = new DynaformHandler (PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml');
- $dynaformFields [] = $dyn->getFields ();
- }
- if (is_file(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml') &&
- filesize(PATH_DYNAFORM . $dynaformFileName ['DYN_FILENAME'] . '.xml') == 0 ) {
- throw new ApplicationWithCorruptDynaformException(date('Y-m-d H:i:s:u') . "Application with corrupt dynaform. APP_UID: " . $AppUID . "\n");
- }
- }
-
- foreach ($dynaformFields as $aDynFormFields) {
- foreach ($aDynFormFields as $field) {
- // create array of fields and types
- if ($field->getAttribute ('validate') == 'Int') {
- $dynaformFieldTypes [$field->nodeName] = 'Int';
- }
- elseif ($field->getAttribute ('validate') == 'Real') {
- $dynaformFieldTypes [$field->nodeName] = 'Real';
- }
- else {
- $dynaformFieldTypes [$field->nodeName] = $field->getAttribute ('type');
- }
- }
- }
- $dynaformFieldTypes = $this->getVariablesDynaform($documentInformation['PRO_UID'], $dynaformFieldTypes);
- // create cache of dynaformfields
- //$oMemcache->set ("SOLR_DYNAFORM_FIELD_TYPES_" . $documentInformation ['PRO_UID'], $dynaformFieldTypes);
- //}
- // return result values
- $result = array (
- $documentInformation,
- $dynaformFieldTypes,
- $lastUpdateDate,
- $maxPriority,
- $delLastIndex,
- $assignedUsers,
- $assignedUsersRead,
- $assignedUsersUnread,
- $draftUser,
- $participatedUsers,
- $participatedUsersStartedByUser,
- $participatedUsersCompletedByUser,
- $unassignedUsers,
- $unassignedGroups,
- $pausedUsers
- );
-
- return $result;
- }
-
- /**
- *
- *
+ /**
+ *
+ *
* @param array $dynaformFieldTypes
* @return array
*/
@@ -2285,462 +2183,455 @@ class AppSolr
return $dynaformFieldTypes;
}
- /**
- * Find the maximun value of the specified column in the array and return the
- * row index
- *
- * @param array $arr
- * array of arrays with the data
- * @param string $column
- * column name to search in
- * @param string $columnType
- * column type STRING, NUMBER, DATE
- * @param string $columnCondition
- * column condition
- * @param string $condition
- * the condition
- * @return integer The index of the maximun record in array
- */
- public function aaGetMaximun($arr, $column, $columnType = 'STRING',
- $columnCondition = "", $condition = "")
- {
- // get first value
- $auxValue = $arr [0] [$column];
- $index = null;
- foreach ($arr as $i => $row) {
- switch ($columnType) {
- case 'STRING' :
- if ((strnatcmp ($row [$column], $auxValue) >= 0) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
- $auxValue = $row [$column];
- $index = $i;
- }
- break;
- case 'NUMBER' :
- if (($row [$column] >= $auxValue) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
- $auxValue = $row [$column];
- $index = $i;
- }
- break;
- case 'DATE' :
- if ((strtotime ($row [$column]) >= strtotime ($auxValue)) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
- $auxValue = $row [$column];
- $index = $i;
- }
- break;
- }
+ /**
+ * Find the maximun value of the specified column in the array and return the
+ * row index
+ *
+ * @param array $arr
+ * array of arrays with the data
+ * @param string $column
+ * column name to search in
+ * @param string $columnType
+ * column type STRING, NUMBER, DATE
+ * @param string $columnCondition
+ * column condition
+ * @param string $condition
+ * the condition
+ * @return integer The index of the maximun record in array
+ */
+ public function aaGetMaximun($arr, $column, $columnType = 'STRING', $columnCondition = "", $condition = "")
+ {
+ // get first value
+ $auxValue = $arr [0] [$column];
+ $index = null;
+ foreach ($arr as $i => $row) {
+ switch ($columnType) {
+ case 'STRING':
+ if ((strnatcmp($row [$column], $auxValue) >= 0) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
+ $auxValue = $row [$column];
+ $index = $i;
+ }
+ break;
+ case 'NUMBER':
+ if (($row [$column] >= $auxValue) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
+ $auxValue = $row [$column];
+ $index = $i;
+ }
+ break;
+ case 'DATE':
+ if ((strtotime($row [$column]) >= strtotime($auxValue)) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
+ $auxValue = $row [$column];
+ $index = $i;
+ }
+ break;
+ }
+ }
+ return $index;
}
- return $index;
- }
-
- /**
- * Get minimum of array of arrays
- *
- * @param array $arr
- * array of arrays with the data
- * @param string $column
- * the name of the column to search in
- * @param string $columnType
- * the column type STRING, NUMBER, DATE
- * @param string $columnCondition
- * the column condition
- * @param string $condition
- * the condition
- * @return Ambigous Index of the minimun value found
- */
- public function aaGetMinimun($arr, $column, $columnType = 'STRING',
- $columnCondition = "", $condition = "")
- {
- // get first value
- $auxValue = $arr [0] [$column];
- $index = null;
- foreach ($arr as $i => $row) {
- switch ($columnType) {
- case 'STRING' :
- if ((strnatcmp ($row [$column], $auxValue) <= 0) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
- $auxValue = $row [$column];
- $index = $i;
- }
- break;
- case 'NUMBER' :
- if (($row [$column] <= $auxValue) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
- $auxValue = $row [$column];
- $index = $i;
- }
- break;
- case 'DATE' :
- if ((strtotime ($row [$column]) <= strtotime ($auxValue)) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
- $auxValue = $row [$column];
- $index = $i;
-
- }
- break;
- }
+
+ /**
+ * Get minimum of array of arrays
+ *
+ * @param array $arr
+ * array of arrays with the data
+ * @param string $column
+ * the name of the column to search in
+ * @param string $columnType
+ * the column type STRING, NUMBER, DATE
+ * @param string $columnCondition
+ * the column condition
+ * @param string $condition
+ * the condition
+ * @return Ambigous Index of the minimun value found
+ */
+ public function aaGetMinimun($arr, $column, $columnType = 'STRING', $columnCondition = "", $condition = "")
+ {
+ // get first value
+ $auxValue = $arr [0] [$column];
+ $index = null;
+ foreach ($arr as $i => $row) {
+ switch ($columnType) {
+ case 'STRING':
+ if ((strnatcmp($row [$column], $auxValue) <= 0) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
+ $auxValue = $row [$column];
+ $index = $i;
+ }
+ break;
+ case 'NUMBER':
+ if (($row [$column] <= $auxValue) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
+ $auxValue = $row [$column];
+ $index = $i;
+ }
+ break;
+ case 'DATE':
+ if ((strtotime($row [$column]) <= strtotime($auxValue)) && (($columnCondition == "") || ($row [$columnCondition] == $condition))) {
+ $auxValue = $row [$column];
+ $index = $i;
+ }
+ break;
+ }
+ }
+ return $index;
}
- return $index;
- }
-
- /**
- * Search array of indexes that fullfill the conditions
- *
- * @param
- * array of arrays $arr contains the arrays that are searched
- * @param array $andColumnsConditions
- * contain the conditions that must fullfill 'Column'=>'Condition'
- * @return array of indexes with the found records
- */
- public function aaSearchRecords($arr, $andColumnsConditions)
- {
- $indexes = array ();
- $isEqual = true;
- foreach ($arr as $i => $row) {
- $evaluateRow = false;
- // evaluate each row
- foreach ($andColumnsConditions as $column => $valueCondition) {
- $condition = $valueCondition;
+
+ /**
+ * Search array of indexes that fullfill the conditions
+ *
+ * @param
+ * array of arrays $arr contains the arrays that are searched
+ * @param array $andColumnsConditions
+ * contain the conditions that must fullfill 'Column'=>'Condition'
+ * @return array of indexes with the found records
+ */
+ public function aaSearchRecords($arr, $andColumnsConditions)
+ {
+ $indexes = array();
$isEqual = true;
- if ($valueCondition == 'NULL') {
- $isEqual = true;
- $condition = '';
- }
- if ($valueCondition == 'NOTNULL') {
- $isEqual = false;
- $condition = '';
- }
- if ($isEqual) {
- if ($row [$column] == $condition) {
- $evaluateRow = true;
- }
- else {
+ foreach ($arr as $i => $row) {
$evaluateRow = false;
- breaK;
- }
+ // evaluate each row
+ foreach ($andColumnsConditions as $column => $valueCondition) {
+ $condition = $valueCondition;
+ $isEqual = true;
+ if ($valueCondition == 'NULL') {
+ $isEqual = true;
+ $condition = '';
+ }
+ if ($valueCondition == 'NOTNULL') {
+ $isEqual = false;
+ $condition = '';
+ }
+ if ($isEqual) {
+ if ($row [$column] == $condition) {
+ $evaluateRow = true;
+ } else {
+ $evaluateRow = false;
+ break;
+ }
+ } else {
+ if ($row [$column] != $condition) {
+ $evaluateRow = true;
+ } else {
+ $evaluateRow = false;
+ break;
+ }
+ }
+ }
+ // add row to indexes
+ if ($evaluateRow) {
+ $indexes [] = $i;
+ }
}
- else {
- if ($row [$column] != $condition) {
- $evaluateRow = true;
- }
- else {
- $evaluateRow = false;
- breaK;
- }
+ return $indexes;
+ }
+
+ /**
+ * Get application and delegation data from database
+ *
+ * @param string $AppUID
+ * the application identifier
+ * @return array of records from database
+ */
+ public function getApplicationDelegationData($AppUID)
+ {
+ $allAppDbData = array();
+
+ $c = new Criteria();
+
+ $c->addSelectColumn(ApplicationPeer::APP_UID);
+ $c->addSelectColumn(ApplicationPeer::APP_TITLE);
+ $c->addSelectColumn(ApplicationPeer::APP_NUMBER);
+ $c->addSelectColumn(ApplicationPeer::APP_STATUS);
+ $c->addSelectColumn(ApplicationPeer::PRO_UID);
+ $c->addSelectColumn(ApplicationPeer::APP_CREATE_DATE);
+ $c->addSelectColumn(ApplicationPeer::APP_FINISH_DATE);
+ $c->addSelectColumn(ApplicationPeer::APP_UPDATE_DATE);
+ $c->addSelectColumn(ApplicationPeer::APP_DATA);
+
+ $c->addSelectColumn(ProcessPeer::PRO_TITLE);
+
+ $c->addSelectColumn('ad.DEL_INDEX');
+ $c->addSelectColumn('ad.DEL_PREVIOUS');
+ $c->addSelectColumn('ad.TAS_UID');
+ $c->addSelectColumn('ad.USR_UID');
+ $c->addSelectColumn('ad.DEL_TYPE');
+ $c->addSelectColumn('ad.DEL_THREAD');
+ $c->addSelectColumn('ad.DEL_THREAD_STATUS');
+ $c->addSelectColumn('ad.DEL_PRIORITY');
+ $c->addSelectColumn('ad.DEL_DELEGATE_DATE');
+ $c->addSelectColumn('ad.DEL_INIT_DATE');
+ $c->addSelectColumn('ad.DEL_TASK_DUE_DATE');
+ $c->addSelectColumn('ad.DEL_FINISH_DATE');
+ $c->addSelectColumn('ad.DEL_DURATION');
+ $c->addSelectColumn('ad.DEL_QUEUE_DURATION');
+ $c->addSelectColumn('ad.DEL_DELAY_DURATION');
+ $c->addSelectColumn('ad.DEL_STARTED');
+ $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->addAlias('ad', 'APP_DELEGATION');
+ $c->addAlias('at', 'APP_THREAD');
+
+ $c->addJoin(ApplicationPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
+ $c->addJoin(ApplicationPeer::APP_UID, 'ad.APP_UID', Criteria::JOIN);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ 'ad.APP_UID',
+ 'at.APP_UID'
+ );
+ $aConditions [] = array(
+ 'ad.DEL_THREAD',
+ 'at.APP_THREAD_INDEX'
+ );
+ $c->addJoinMC($aConditions, Criteria::JOIN);
+
+ $c->add(ApplicationPeer::APP_UID, $AppUID);
+
+ $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();
}
- }
- // add row to indexes
- if ($evaluateRow) {
- $indexes [] = $i;
- }
- }
- return $indexes;
- }
-
- /**
- * Get application and delegation data from database
- *
- * @param string $AppUID
- * the application identifier
- * @return array of records from database
- */
- public function getApplicationDelegationData($AppUID)
- {
-
- $allAppDbData = array ();
-
- $c = new Criteria ();
-
- $c->addSelectColumn (ApplicationPeer::APP_UID);
- $c->addSelectColumn (ApplicationPeer::APP_TITLE);
- $c->addSelectColumn (ApplicationPeer::APP_NUMBER);
- $c->addSelectColumn (ApplicationPeer::APP_STATUS);
- $c->addSelectColumn (ApplicationPeer::PRO_UID);
- $c->addSelectColumn (ApplicationPeer::APP_CREATE_DATE);
- $c->addSelectColumn (ApplicationPeer::APP_FINISH_DATE);
- $c->addSelectColumn (ApplicationPeer::APP_UPDATE_DATE);
- $c->addSelectColumn (ApplicationPeer::APP_DATA);
- $c->addSelectColumn (ProcessPeer::PRO_TITLE);
+ //Propel::close();
- $c->addSelectColumn ('ad.DEL_INDEX');
- $c->addSelectColumn ('ad.DEL_PREVIOUS');
- $c->addSelectColumn ('ad.TAS_UID');
- $c->addSelectColumn ('ad.USR_UID');
- $c->addSelectColumn ('ad.DEL_TYPE');
- $c->addSelectColumn ('ad.DEL_THREAD');
- $c->addSelectColumn ('ad.DEL_THREAD_STATUS');
- $c->addSelectColumn ('ad.DEL_PRIORITY');
- $c->addSelectColumn ('ad.DEL_DELEGATE_DATE');
- $c->addSelectColumn ('ad.DEL_INIT_DATE');
- $c->addSelectColumn ('ad.DEL_TASK_DUE_DATE');
- $c->addSelectColumn ('ad.DEL_FINISH_DATE');
- $c->addSelectColumn ('ad.DEL_DURATION');
- $c->addSelectColumn ('ad.DEL_QUEUE_DURATION');
- $c->addSelectColumn ('ad.DEL_DELAY_DURATION');
- $c->addSelectColumn ('ad.DEL_STARTED');
- $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->addAlias ('ad', 'APP_DELEGATION');
- $c->addAlias ('at', 'APP_THREAD');
-
- $c->addJoin (ApplicationPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
- $c->addJoin (ApplicationPeer::APP_UID, 'ad.APP_UID', Criteria::JOIN);
-
- $aConditions = array ();
- $aConditions [] = array (
- 'ad.APP_UID',
- 'at.APP_UID'
- );
- $aConditions [] = array (
- 'ad.DEL_THREAD',
- 'at.APP_THREAD_INDEX'
- );
- $c->addJoinMC ($aConditions, Criteria::JOIN);
-
- $c->add (ApplicationPeer::APP_UID, $AppUID);
-
- $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 ();
+ return $allAppDbData;
}
- //Propel::close();
+ /**
+ * Get application and delegation data from database
+ *
+ * @param string $aAppUID
+ * array of application identifiers
+ * @return array of array of records from database
+ */
+ public function getListApplicationUpdateDelegationData($aaAppUIDs)
+ {
+ $allAppDbData = array();
- return $allAppDbData;
- }
-
- /**
- * Get application and delegation data from database
- *
- * @param string $aAppUID
- * array of application identifiers
- * @return array of array of records from database
- */
- public function getListApplicationUpdateDelegationData($aaAppUIDs)
- {
- $allAppDbData = array ();
-
- $c = new Criteria ();
-
- $c->addSelectColumn (ApplicationPeer::APP_UID);
- $c->addSelectColumn (ApplicationPeer::APP_TITLE);
- $c->addSelectColumn (ApplicationPeer::APP_NUMBER);
- $c->addSelectColumn (ApplicationPeer::APP_STATUS);
- $c->addSelectColumn (ApplicationPeer::PRO_UID);
- $c->addSelectColumn (ApplicationPeer::APP_CREATE_DATE);
- $c->addSelectColumn (ApplicationPeer::APP_FINISH_DATE);
- $c->addSelectColumn (ApplicationPeer::APP_UPDATE_DATE);
- $c->addSelectColumn (ApplicationPeer::APP_DATA);
-
- $c->addSelectColumn ('pro.PRO_TITLE');
-
- $c->addSelectColumn ('ad.DEL_INDEX');
- $c->addSelectColumn ('ad.DEL_PREVIOUS');
- $c->addSelectColumn ('ad.TAS_UID');
- $c->addSelectColumn ('ad.USR_UID');
- $c->addSelectColumn ('ad.DEL_TYPE');
- $c->addSelectColumn ('ad.DEL_THREAD');
- $c->addSelectColumn ('ad.DEL_THREAD_STATUS');
- $c->addSelectColumn ('ad.DEL_PRIORITY');
- $c->addSelectColumn ('ad.DEL_DELEGATE_DATE');
- $c->addSelectColumn ('ad.DEL_INIT_DATE');
- $c->addSelectColumn ('ad.DEL_TASK_DUE_DATE');
- $c->addSelectColumn ('ad.DEL_FINISH_DATE');
- $c->addSelectColumn ('ad.DEL_DURATION');
- $c->addSelectColumn ('ad.DEL_QUEUE_DURATION');
- $c->addSelectColumn ('ad.DEL_DELAY_DURATION');
- $c->addSelectColumn ('ad.DEL_STARTED');
- $c->addSelectColumn ('ad.DEL_FINISHED');
- $c->addSelectColumn ('ad.DEL_DELAYED');
- $c->addSelectColumn ('ad.APP_OVERDUE_PERCENTAGE');
+ $c = new Criteria();
- $c->addSelectColumn ('at.APP_THREAD_INDEX');
- $c->addSelectColumn ('at.APP_THREAD_PARENT');
- $c->addSelectColumn ('at.APP_THREAD_STATUS');
+ $c->addSelectColumn(ApplicationPeer::APP_UID);
+ $c->addSelectColumn(ApplicationPeer::APP_TITLE);
+ $c->addSelectColumn(ApplicationPeer::APP_NUMBER);
+ $c->addSelectColumn(ApplicationPeer::APP_STATUS);
+ $c->addSelectColumn(ApplicationPeer::PRO_UID);
+ $c->addSelectColumn(ApplicationPeer::APP_CREATE_DATE);
+ $c->addSelectColumn(ApplicationPeer::APP_FINISH_DATE);
+ $c->addSelectColumn(ApplicationPeer::APP_UPDATE_DATE);
+ $c->addSelectColumn(ApplicationPeer::APP_DATA);
- $c->addSelectColumn ('ade.APP_DELAY_UID');
- $c->addSelectColumn ('ade.APP_TYPE');
- $c->addSelectColumn ('ade.APP_DISABLE_ACTION_USER');
+ $c->addSelectColumn('pro.PRO_TITLE');
- $c->addAsColumn("PRO_CATEGORY_UID", "pro.PRO_CATEGORY");
+ $c->addSelectColumn('ad.DEL_INDEX');
+ $c->addSelectColumn('ad.DEL_PREVIOUS');
+ $c->addSelectColumn('ad.TAS_UID');
+ $c->addSelectColumn('ad.USR_UID');
+ $c->addSelectColumn('ad.DEL_TYPE');
+ $c->addSelectColumn('ad.DEL_THREAD');
+ $c->addSelectColumn('ad.DEL_THREAD_STATUS');
+ $c->addSelectColumn('ad.DEL_PRIORITY');
+ $c->addSelectColumn('ad.DEL_DELEGATE_DATE');
+ $c->addSelectColumn('ad.DEL_INIT_DATE');
+ $c->addSelectColumn('ad.DEL_TASK_DUE_DATE');
+ $c->addSelectColumn('ad.DEL_FINISH_DATE');
+ $c->addSelectColumn('ad.DEL_DURATION');
+ $c->addSelectColumn('ad.DEL_QUEUE_DURATION');
+ $c->addSelectColumn('ad.DEL_DELAY_DURATION');
+ $c->addSelectColumn('ad.DEL_STARTED');
+ $c->addSelectColumn('ad.DEL_FINISHED');
+ $c->addSelectColumn('ad.DEL_DELAYED');
+ $c->addSelectColumn('ad.APP_OVERDUE_PERCENTAGE');
- $c->addAlias ('ad', 'APP_DELEGATION');
- $c->addAlias ('at', 'APP_THREAD');
- $c->addAlias ('ade', 'APP_DELAY');
- $c->addAlias ("pro", ProcessPeer::TABLE_NAME);
-
- $c->addJoin (ApplicationPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
- $c->addJoin (ApplicationPeer::APP_UID, 'ad.APP_UID', Criteria::JOIN);
-
- $aConditions = array ();
- $aConditions [] = array (
- 'ad.APP_UID',
- 'at.APP_UID'
- );
- $aConditions [] = array (
- 'ad.DEL_THREAD',
- '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);
-
+ $c->addSelectColumn('at.APP_THREAD_INDEX');
+ $c->addSelectColumn('at.APP_THREAD_PARENT');
+ $c->addSelectColumn('at.APP_THREAD_STATUS');
- $arrayCondition = array();
- $arrayCondition[] = array(ApplicationPeer::PRO_UID, "pro.PRO_UID");
- $c->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
-
- $c->add (ApplicationPeer::APP_UID, $aaAppUIDs, Criteria::IN);
+ $c->addSelectColumn('ade.APP_DELAY_UID');
+ $c->addSelectColumn('ade.APP_TYPE');
+ $c->addSelectColumn('ade.APP_DISABLE_ACTION_USER');
- $rs = ApplicationPeer::doSelectRS ($c);
- $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC);
+ $c->addAsColumn("PRO_CATEGORY_UID", "pro.PRO_CATEGORY");
- $rs->next ();
- $row = $rs->getRow ();
+ $c->addAlias('ad', 'APP_DELEGATION');
+ $c->addAlias('at', 'APP_THREAD');
+ $c->addAlias('ade', 'APP_DELAY');
+ $c->addAlias("pro", ProcessPeer::TABLE_NAME);
- while (is_array ($row)) {
- $allAppDbData [] = $row;
- $rs->next ();
- $row = $rs->getRow ();
+ $c->addJoin(ApplicationPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
+ $c->addJoin(ApplicationPeer::APP_UID, 'ad.APP_UID', Criteria::JOIN);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ 'ad.APP_UID',
+ 'at.APP_UID'
+ );
+ $aConditions [] = array(
+ 'ad.DEL_THREAD',
+ '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;
}
- //Propel::close();
- return $allAppDbData;
- }
-
- /**
- * Get the list of groups of unassigned users of the specified task from
- * database
- *
- * @param string $ProUID
- * Process identifier
- * @param string $TaskUID
- * task identifier
- * @return array of unassigned user groups
- */
- public function getTaskUnassignedUsersGroupsData($ProUID, $TaskUID)
- {
- $unassignedUsersGroups = array ();
-
- $c = new Criteria ();
-
- $c->addSelectColumn (TaskUserPeer::USR_UID);
- $c->addSelectColumn (TaskUserPeer::TU_RELATION);
-
- $aConditions = array ();
- $aConditions [] = array (
- TaskPeer::TAS_UID,
- TaskUserPeer::TAS_UID
- );
- $aConditions [] = array (
- TaskPeer::TAS_ASSIGN_TYPE,
- DBAdapter::getStringDelimiter () . 'SELF_SERVICE' . DBAdapter::getStringDelimiter ()
- );
- $c->addJoinMC ($aConditions, Criteria::JOIN);
-
- $c->add (TaskPeer::PRO_UID, $ProUID);
- $c->add (TaskPeer::TAS_UID, $TaskUID);
-
- $rs = TaskPeer::doSelectRS ($c);
- $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC);
- // echo $c->toString();
- $rs->next ();
- $row = $rs->getRow ();
-
- while (is_array ($row)) {
- $unassignedUsersGroups [] = $row;
- $rs->next ();
- $row = $rs->getRow ();
+ /**
+ * Get the list of groups of unassigned users of the specified task from
+ * database
+ *
+ * @param string $ProUID
+ * Process identifier
+ * @param string $TaskUID
+ * task identifier
+ * @return array of unassigned user groups
+ */
+ public function getTaskUnassignedUsersGroupsData($ProUID, $TaskUID)
+ {
+ $unassignedUsersGroups = array();
+
+ $c = new Criteria();
+
+ $c->addSelectColumn(TaskUserPeer::USR_UID);
+ $c->addSelectColumn(TaskUserPeer::TU_RELATION);
+
+ $aConditions = array();
+ $aConditions [] = array(
+ TaskPeer::TAS_UID,
+ TaskUserPeer::TAS_UID
+ );
+ $aConditions [] = array(
+ TaskPeer::TAS_ASSIGN_TYPE,
+ DBAdapter::getStringDelimiter() . 'SELF_SERVICE' . DBAdapter::getStringDelimiter()
+ );
+ $c->addJoinMC($aConditions, Criteria::JOIN);
+
+ $c->add(TaskPeer::PRO_UID, $ProUID);
+ $c->add(TaskPeer::TAS_UID, $TaskUID);
+
+ $rs = TaskPeer::doSelectRS($c);
+ $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ // echo $c->toString();
+ $rs->next();
+ $row = $rs->getRow();
+
+ while (is_array($row)) {
+ $unassignedUsersGroups [] = $row;
+ $rs->next();
+ $row = $rs->getRow();
+ }
+
+ //Propel::close();
+
+ return $unassignedUsersGroups;
}
-
- //Propel::close();
- return $unassignedUsersGroups;
- }
-
- /**
- * Get the list of dynaform file names associated with the specified process
- * from database
- *
- * @param string $ProUID
- * process identifier
- * @return array of dynaform file names
- */
- public function getProcessDynaformFileNames($ProUID)
- {
- $dynaformFileNames = array ();
-
- $c = new Criteria ();
-
- $c->addSelectColumn (DynaformPeer::DYN_FILENAME);
-
- $c->add (DynaformPeer::PRO_UID, $ProUID);
-
- $rs = DynaformPeer::doSelectRS ($c);
- $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC);
- $rs->next ();
- $row = $rs->getRow ();
-
- while (is_array ($row)) {
- $dynaformFileNames [] = $row;
- $rs->next ();
- $row = $rs->getRow ();
+ /**
+ * Get the list of dynaform file names associated with the specified process
+ * from database
+ *
+ * @param string $ProUID
+ * process identifier
+ * @return array of dynaform file names
+ */
+ public function getProcessDynaformFileNames($ProUID)
+ {
+ $dynaformFileNames = array();
+
+ $c = new Criteria();
+
+ $c->addSelectColumn(DynaformPeer::DYN_FILENAME);
+
+ $c->add(DynaformPeer::PRO_UID, $ProUID);
+
+ $rs = DynaformPeer::doSelectRS($c);
+ $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+ $rs->next();
+ $row = $rs->getRow();
+
+ while (is_array($row)) {
+ $dynaformFileNames [] = $row;
+ $rs->next();
+ $row = $rs->getRow();
+ }
+
+ //Propel::close();
+
+ return $dynaformFileNames;
}
-
- //Propel::close();
- return $dynaformFileNames;
- }
-
- /**
- * Store a flag indicating if the application was updated in database
- * table APP_SOLR_QUEUE
- *
- * @param string $AppUid
- * applicatiom identifier
- * @param integer $updated
- * 0:false, not updated, 1: updated, 2:deleted
- */
- public function applicationChangedUpdateSolrQueue($AppUid, $updated)
- {
- $traceData = $this->getCurrentTraceInfo();
- //var_dump($traceData);
+ /**
+ * Store a flag indicating if the application was updated in database
+ * table APP_SOLR_QUEUE
+ *
+ * @param string $AppUid
+ * applicatiom identifier
+ * @param integer $updated
+ * 0:false, not updated, 1: updated, 2:deleted
+ */
+ public function applicationChangedUpdateSolrQueue($AppUid, $updated)
+ {
+ $traceData = $this->getCurrentTraceInfo();
+ //var_dump($traceData);
- $oAppSolrQueue = new AppSolrQueue ();
-
- $oAppSolrQueue->createUpdate ($AppUid, $traceData, $updated);
- }
+ $oAppSolrQueue = new AppSolrQueue();
+
+ $oAppSolrQueue->createUpdate($AppUid, $traceData, $updated);
+ }
private function getCurrentTraceInfo()
{
@@ -2756,184 +2647,184 @@ class AppSolr
return $resultTraceString;
}
- /**
- * Update application records in Solr that are stored in APP_SOLR_QUEUE table
- */
- public function synchronizePendingApplications()
- {
- if(!$this->isSolrEnabled())
- throw new Exception(date('Y-m-d H:i:s:u') . " Error connecting to solr server.");
-
- // check table of pending updates
- $oAppSolrQueue = new AppSolrQueue ();
-
- $aAppSolrQueue = $oAppSolrQueue->getListUpdatedApplications ();
+ /**
+ * Update application records in Solr that are stored in APP_SOLR_QUEUE table
+ */
+ public function synchronizePendingApplications()
+ {
+ if (!$this->isSolrEnabled()) {
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error connecting to solr server.");
+ }
- $trunkSize = 100;
- //filter updated cases
- $aUpdatedApplications = array();
- $aDeletedApplications = array();
- foreach ($aAppSolrQueue as $oAppSolrQueueEntity) {
- // call the syncronization function
- if($oAppSolrQueueEntity->appUpdated == 1){
- $aUpdatedApplications[] = array ('APP_UID' => $oAppSolrQueueEntity->appUid );
- }
- if($oAppSolrQueueEntity->appUpdated == 2){
- $aDeletedApplications[] = array ('APP_UID' => $oAppSolrQueueEntity->appUid );
- }
+ // check table of pending updates
+ $oAppSolrQueue = new AppSolrQueue();
+
+ $aAppSolrQueue = $oAppSolrQueue->getListUpdatedApplications();
+
+ $trunkSize = 100;
+ //filter updated cases
+ $aUpdatedApplications = array();
+ $aDeletedApplications = array();
+ foreach ($aAppSolrQueue as $oAppSolrQueueEntity) {
+ // call the syncronization function
+ if ($oAppSolrQueueEntity->appUpdated == 1) {
+ $aUpdatedApplications[] = array('APP_UID' => $oAppSolrQueueEntity->appUid);
+ }
+ if ($oAppSolrQueueEntity->appUpdated == 2) {
+ $aDeletedApplications[] = array('APP_UID' => $oAppSolrQueueEntity->appUid);
+ }
+ }
+
+ $totalCasesUpdated = count($aUpdatedApplications);
+ $loops = ((($totalCasesUpdated % $trunkSize) > 0) ? ($totalCasesUpdated / $trunkSize) + 1 : ($totalCasesUpdated / $trunkSize));
+ for ($i = 0; $i < $loops; $i++) {
+ //prepare trunk of appuids
+ $trunkUpdatedApplications = array_slice($aUpdatedApplications, $i * $trunkSize, $trunkSize);
+
+ $this->updateApplicationSearchIndex($trunkUpdatedApplications, true);
+
+ /* foreach($trunkUpdatedApplications as $appUid){
+ $this->applicationChangedUpdateSolrQueue ($appUid, 0);
+ } */
+ }
+
+ $totalCasesDeleted = count($aDeletedApplications);
+ $loops = ((($totalCasesDeleted % $trunkSize) > 0) ? ($totalCasesDeleted / $trunkSize) + 1 : ($totalCasesDeleted / $trunkSize));
+ for ($i = 0; $i < $loops; $i++) {
+ //prepare trunk of appuids
+ $trunkDeleteddApplications = array_slice($aDeletedApplications, $i * $trunkSize, $trunkSize);
+
+ $this->deleteApplicationSearchIndex($trunkDeleteddApplications, true);
+
+ /* foreach($trunkDeleteddApplications as $appUid){
+ $this->applicationChangedUpdateSolrQueue ($appUid, 0);
+ } */
+ }
+
+ /*
+ foreach ($aAppSolrQueue as $oAppSolrQueueEntity) {
+ // call the syncronization function
+ if($oAppSolrQueueEntity->appUpdated == 1){
+ $this->updateApplicationSearchIndex ($oAppSolrQueueEntity->appUid, false);
+ }
+ if($oAppSolrQueueEntity->appUpdated == 2){
+ $this->deleteApplicationSearchIndex ($oAppSolrQueueEntity->appUid, false);
+ }
+ $this->applicationChangedUpdateSolrQueue ($oAppSolrQueueEntity->appUid, 0);
+ } */
}
- $totalCasesUpdated = count($aUpdatedApplications);
- $loops = ((($totalCasesUpdated % $trunkSize) > 0 )? ($totalCasesUpdated / $trunkSize)+1: ($totalCasesUpdated / $trunkSize));
- for ($i = 0; $i < $loops; $i++) {
- //prepare trunk of appuids
- $trunkUpdatedApplications = array_slice($aUpdatedApplications, $i * $trunkSize, $trunkSize);
+ /**
+ * Get the total number of application records in database
+ *
+ * @return integer application counter
+ */
+ public function getCountApplicationsPMOS2()
+ {
+ $c = new Criteria();
- $this->updateApplicationSearchIndex ($trunkUpdatedApplications, true);
+ $c->addSelectColumn(ApplicationPeer::APP_UID);
- /*foreach($trunkUpdatedApplications as $appUid){
- $this->applicationChangedUpdateSolrQueue ($appUid, 0);
- }*/
+ $count = ApplicationPeer::doCount($c);
+
+ //Propel::close();
+
+ return $count;
}
- $totalCasesDeleted = count($aDeletedApplications);
- $loops = ((($totalCasesDeleted % $trunkSize) > 0 )? ($totalCasesDeleted / $trunkSize)+1: ($totalCasesDeleted / $trunkSize));
- for ($i = 0; $i < $loops; $i++) {
- //prepare trunk of appuids
- $trunkDeleteddApplications = array_slice($aDeletedApplications, $i * $trunkSize, $trunkSize);
+ /**
+ * Get the total number of application records in search index
+ *
+ * @return integer application counter
+ */
+ public function getCountApplicationsSearchIndex()
+ {
+ $searchIndex = new BpmnEngineServicesSearchIndex($this->_solrIsEnabled, $this->_solrHost);
+ // execute query
+ $count = $searchIndex->getNumberDocuments($this->_solrInstance);
- $this->deleteApplicationSearchIndex ($trunkDeleteddApplications, true);
-
- /*foreach($trunkDeleteddApplications as $appUid){
- $this->applicationChangedUpdateSolrQueue ($appUid, 0);
- }*/
- }
-
- /*
- foreach ($aAppSolrQueue as $oAppSolrQueueEntity) {
- // call the syncronization function
- if($oAppSolrQueueEntity->appUpdated == 1){
- $this->updateApplicationSearchIndex ($oAppSolrQueueEntity->appUid, false);
- }
- if($oAppSolrQueueEntity->appUpdated == 2){
- $this->deleteApplicationSearchIndex ($oAppSolrQueueEntity->appUid, false);
- }
- $this->applicationChangedUpdateSolrQueue ($oAppSolrQueueEntity->appUid, 0);
- }*/
- }
-
- /**
- * Get the total number of application records in database
- *
- * @return integer application counter
- */
- public function getCountApplicationsPMOS2()
- {
- $c = new Criteria ();
-
- $c->addSelectColumn (ApplicationPeer::APP_UID);
-
- $count = ApplicationPeer::doCount ($c);
-
- //Propel::close();
-
- return $count;
- }
-
- /**
- * Get the total number of application records in search index
- *
- * @return integer application counter
- */
- public function getCountApplicationsSearchIndex()
- {
- $searchIndex = new BpmnEngineServicesSearchIndex ($this->_solrIsEnabled, $this->_solrHost);
- // execute query
- $count = $searchIndex->getNumberDocuments ($this->_solrInstance);
-
- return $count;
- }
-
- /**
- * Optimize the records in search index
- *
- * @return
- */
- public function optimizeSearchIndex()
- {
- $searchIndex = new BpmnEngineServicesSearchIndex ($this->_solrIsEnabled, $this->_solrHost);
- // execute query
- $searchIndex->optimizeIndexChanges ($this->_solrInstance);
- }
-
- /**
- * Get a paginated list of application uids from database.
- *
- * @param integer $skip
- * the offset from where to return the application records
- * @param integer $pagesize
- * the size of the page
- * @return array of application id's in the specified page.
- */
- public function getPagedApplicationUids($skip, $pagesize)
- {
-
- $c = new Criteria ();
-
- $c->addSelectColumn (ApplicationPeer::APP_UID);
- $c->setOffset ($skip);
- $c->setLimit ($pagesize);
-
- $rs = ApplicationPeer::doSelectRS ($c);
- $rs->setFetchmode (ResultSet::FETCHMODE_ASSOC);
-
- $rs->next ();
- $row = $rs->getRow ();
- $appUIds = array ();
- while (is_array ($row)) {
- $appUIds [] = $row;
- $rs->next ();
- $row = $rs->getRow ();
+ return $count;
}
- //Propel::close();
+ /**
+ * Optimize the records in search index
+ *
+ * @return
+ */
+ public function optimizeSearchIndex()
+ {
+ $searchIndex = new BpmnEngineServicesSearchIndex($this->_solrIsEnabled, $this->_solrHost);
+ // execute query
+ $searchIndex->optimizeIndexChanges($this->_solrInstance);
+ }
- return $appUIds;
- }
-
- /**
- * Reindex all the application records in Solr server
- * update applications in groups of 1000
- */
- public function reindexAllApplications($SkipRecords = 0, $indexTrunkSize = 1000)
- {
- $trunk = $indexTrunkSize;
+ /**
+ * Get a paginated list of application uids from database.
+ *
+ * @param integer $skip
+ * the offset from where to return the application records
+ * @param integer $pagesize
+ * the size of the page
+ * @return array of application id's in the specified page.
+ */
+ public function getPagedApplicationUids($skip, $pagesize)
+ {
+ $c = new Criteria();
- if(!$this->isSolrEnabled())
- throw new Exception(date('Y-m-d H:i:s:u') . " Error connecting to solr server.");
+ $c->addSelectColumn(ApplicationPeer::APP_UID);
+ $c->setOffset($skip);
+ $c->setLimit($pagesize);
+
+ $rs = ApplicationPeer::doSelectRS($c);
+ $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+
+ $rs->next();
+ $row = $rs->getRow();
+ $appUIds = array();
+ while (is_array($row)) {
+ $appUIds [] = $row;
+ $rs->next();
+ $row = $rs->getRow();
+ }
+
+ //Propel::close();
+
+ return $appUIds;
+ }
+
+ /**
+ * Reindex all the application records in Solr server
+ * update applications in groups of 1000
+ */
+ public function reindexAllApplications($SkipRecords = 0, $indexTrunkSize = 1000)
+ {
+ $trunk = $indexTrunkSize;
+
+ if (!$this->isSolrEnabled()) {
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error connecting to solr server.");
+ }
// delete all documents to begin reindex
// deleteAllDocuments();
// commitChanges();
// print "Deleted all documents \n";
// search trunks of id's to regenerate index
- $numRows = $this->getCountApplicationsPMOS2 ();
+ $numRows = $this->getCountApplicationsPMOS2();
print "Total number of records: " . $numRows . "\n";
//
- $initTimeAll = microtime (true);
+ $initTimeAll = microtime(true);
for ($skip = $SkipRecords; $skip <= $numRows;) {
- $aaAPPUIds = $this->getPagedApplicationUids ($skip, $trunk);
- printf ("Indexing %d to %d \n", $skip, $skip + $trunk);
- $initTimeDoc = microtime (true);
- $this->updateApplicationSearchIndex ($aaAPPUIds, false);
- $curTimeDoc = gmdate ('H:i:s', (microtime (true) - $initTimeDoc));
- printf ("Indexing document time: %s \n", $curTimeDoc);
+ $aaAPPUIds = $this->getPagedApplicationUids($skip, $trunk);
+ printf("Indexing %d to %d \n", $skip, $skip + $trunk);
+ $initTimeDoc = microtime(true);
+ $this->updateApplicationSearchIndex($aaAPPUIds, false);
+ $curTimeDoc = gmdate('H:i:s', (microtime(true) - $initTimeDoc));
+ printf("Indexing document time: %s \n", $curTimeDoc);
$skip += $trunk;
+ }
+ $curTimeDoc = gmdate('H:i:s', (microtime(true) - $initTimeAll));
+ printf("Total reindex time: %s \n", $curTimeDoc);
+ printf("Reindex completed successfully!!.\n");
}
- $curTimeDoc = gmdate ('H:i:s', (microtime (true) - $initTimeAll));
- printf ("Total reindex time: %s \n", $curTimeDoc);
- printf ("Reindex completed successfully!!.\n");
- }
-
}
diff --git a/workflow/engine/classes/BpmnEngineSearchIndexAccessSolr.php b/workflow/engine/classes/BpmnEngineSearchIndexAccessSolr.php
index 13192ef84..f50765c5e 100644
--- a/workflow/engine/classes/BpmnEngineSearchIndexAccessSolr.php
+++ b/workflow/engine/classes/BpmnEngineSearchIndexAccessSolr.php
@@ -6,6 +6,7 @@
class BpmnEngineSearchIndexAccessSolr
{
const SOLR_VERSION = '&version=2.2';
+
private $_solrIsEnabled = false;
private $_solrHost = "";
@@ -78,7 +79,7 @@ class BpmnEngineSearchIndexAccessSolr
// verify the result of solr
$responseSolrTotal = G::json_decode($responseTotal);
if ($responseSolrTotal->responseHeader->status != 0) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error returning the total number of documents in Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error returning the total number of documents in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
$numTotalDocs = $responseSolrTotal->response->numFound;
return $numTotalDocs;
@@ -99,13 +100,13 @@ class BpmnEngineSearchIndexAccessSolr
$workspace = $solrRequestData->workspace;
// format request
- $query = empty ($solrRequestData->searchText) ? '*:*' : $solrRequestData->searchText;
+ $query = empty($solrRequestData->searchText) ? '*:*' : $solrRequestData->searchText;
$query = rawurlencode($query);
$start = '&start=' . $solrRequestData->startAfter;
$rows = '&rows=' . $solrRequestData->pageSize;
$fieldList = '';
$cols = $solrRequestData->includeCols;
- if (!empty ($cols)) {
+ if (!empty($cols)) {
$fieldList = "&fl=" . implode(",", $cols);
}
$sort = '';
@@ -117,7 +118,7 @@ class BpmnEngineSearchIndexAccessSolr
$sort = substr_replace($sort, "", -1);
}
- $resultFormat = empty ($solrRequestData->resultFormat) ? '' : '&wt=' . $solrRequestData->resultFormat;
+ $resultFormat = empty($solrRequestData->resultFormat) ? '' : '&wt=' . $solrRequestData->resultFormat;
$filters = '';
$aFilters = explode(',', $solrRequestData->filterText);
foreach ($aFilters as $value) {
@@ -159,7 +160,7 @@ class BpmnEngineSearchIndexAccessSolr
// decode
$responseSolr = G::json_decode($response);
if ($responseSolr->responseHeader->status != 0) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error executing query to Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error executing query to Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
@@ -186,9 +187,8 @@ class BpmnEngineSearchIndexAccessSolr
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
));
- curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
+ curl_setopt($handler, CURLOPT_BINARYTRANSFER, true); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, $solrUpdateDocument->document); // data
-
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
@@ -207,7 +207,7 @@ class BpmnEngineSearchIndexAccessSolr
$swOk = strpos($response, '0');
if (!$swOk) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error updating document in Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error updating document in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
@@ -232,9 +232,8 @@ class BpmnEngineSearchIndexAccessSolr
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
));
- curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
+ curl_setopt($handler, CURLOPT_BINARYTRANSFER, true); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, ""); // data
-
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
@@ -253,7 +252,7 @@ class BpmnEngineSearchIndexAccessSolr
$swOk = strpos($response, '0');
if (!$swOk) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error commiting changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error commiting changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
@@ -278,9 +277,8 @@ class BpmnEngineSearchIndexAccessSolr
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
));
- curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
+ curl_setopt($handler, CURLOPT_BINARYTRANSFER, true); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, ""); // data
-
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
@@ -299,7 +297,7 @@ class BpmnEngineSearchIndexAccessSolr
$swOk = strpos($response, '0');
if (!$swOk) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error rolling back changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error rolling back changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
@@ -324,9 +322,8 @@ class BpmnEngineSearchIndexAccessSolr
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
));
- curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
+ curl_setopt($handler, CURLOPT_BINARYTRANSFER, true); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, ""); // data
-
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
@@ -345,7 +342,7 @@ class BpmnEngineSearchIndexAccessSolr
$swOk = strpos($response, '0');
if (!$swOk) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error optimizing changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error optimizing changes in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
@@ -386,7 +383,7 @@ class BpmnEngineSearchIndexAccessSolr
// decode
$responseSolr = G::json_decode($response);
if ($responseSolr->responseHeader->status != 0) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error getting index fields in Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error getting index fields in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
}
@@ -413,13 +410,14 @@ class BpmnEngineSearchIndexAccessSolr
curl_close($handler);
//there's no response
- if (!$response)
+ if (!$response) {
return false;
+ }
// decode
$responseSolr = G::json_decode($response);
if ($responseSolr->responseHeader->status != "OK") {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error pinging Solr server." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error pinging Solr server." . $solrIntruct . " response error: " . $response . "\n");
}
return true;
}
@@ -445,9 +443,8 @@ class BpmnEngineSearchIndexAccessSolr
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
));
- curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
+ curl_setopt($handler, CURLOPT_BINARYTRANSFER, true); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, "*:*"); // data
-
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
@@ -467,7 +464,7 @@ class BpmnEngineSearchIndexAccessSolr
$swOk = strpos($response, '0');
if (!$swOk) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error deleting all documents in Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error deleting all documents in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
@@ -492,9 +489,8 @@ class BpmnEngineSearchIndexAccessSolr
curl_setopt($handler, CURLOPT_HTTPHEADER, array(
'Content-type:application/xml'
));
- curl_setopt($handler, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
+ curl_setopt($handler, CURLOPT_BINARYTRANSFER, true); // --data-binary
curl_setopt($handler, CURLOPT_POSTFIELDS, "" . $idQuery . ""); // data
-
//Apply proxy settings
$sysConf = PmSystem::getSystemConfiguration();
if ($sysConf['proxy_host'] != '') {
@@ -514,14 +510,14 @@ class BpmnEngineSearchIndexAccessSolr
$swOk = strpos($response, '0');
if (!$swOk) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error deleting document in Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error deleting document in Solr." . $solrIntruct . " response error: " . $response . "\n");
}
}
/**
* Execute a query in base to Request data
*
- * @param Entity_FacetRequest $facetRequestEntity
+ * @param EntityFacetRequest $facetRequestEntity
* @return solr response: list of facets array
*/
public function getFacetsList($facetRequest)
@@ -531,7 +527,7 @@ class BpmnEngineSearchIndexAccessSolr
$workspace = $facetRequest->workspace;
// format request
- $query = empty ($facetRequest->searchText) ? '*:*' : $facetRequest->searchText;
+ $query = empty($facetRequest->searchText) ? '*:*' : $facetRequest->searchText;
$query = rawurlencode($query);
$start = '&start=0';
$rows = '&rows=0';
@@ -545,12 +541,12 @@ class BpmnEngineSearchIndexAccessSolr
foreach ($facetRequest->facetQueries as $value) {
$facets .= '&facet.query=' . $value;
}
- if (!empty ($facetRequest->facetDates)) {
+ if (!empty($facetRequest->facetDates)) {
foreach ($facetRequest->facetDates as $value) {
$facets .= '&facet.date=' . $value;
}
$facets .= '&facet.date.start=' . $facetRequest->facetDatesStart;
- $facets .= '&facet.date.end=' . $facetRequest->facet | DatesEnd;
+ $facets .= '&facet.date.end=' . $facetRequest->facetDatesEnd;
$facets .= '&facet.date.gap=' . $facetRequest->facetDateGap;
}
$filters = '';
@@ -595,7 +591,7 @@ class BpmnEngineSearchIndexAccessSolr
// decode
$responseSolr = G::json_decode($response);
if ($responseSolr->responseHeader->status != 0) {
- throw new Exception (date('Y-m-d H:i:s:u') . " Error getting faceted list from Solr." . $solrIntruct . " response error: " . $response . "\n");
+ throw new Exception(date('Y-m-d H:i:s:u') . " Error getting faceted list from Solr." . $solrIntruct . " response error: " . $response . "\n");
}
return $responseSolr;
diff --git a/workflow/engine/classes/BpmnEngineServicesSearchIndex.php b/workflow/engine/classes/BpmnEngineServicesSearchIndex.php
index 21df3695c..5d6687f33 100644
--- a/workflow/engine/classes/BpmnEngineServicesSearchIndex.php
+++ b/workflow/engine/classes/BpmnEngineServicesSearchIndex.php
@@ -74,7 +74,7 @@ class BpmnEngineServicesSearchIndex
'selectedFacetRemoveCondition' => $removeCondition
);
- $aSelectedFacetGroups [] = Entity_SelectedFacetGroupItem::createForRequest($selectedFacetGroupData);
+ $aSelectedFacetGroups [] = EntitySelectedFacetGroupItem::createForRequest($selectedFacetGroupData);
}
// convert request to index request
@@ -127,11 +127,11 @@ class BpmnEngineServicesSearchIndex
$dataItem ['facetPrintName'] = $facetvalues [$i];
$dataItem ['facetCount'] = $facetvalues [$i + 1];
$dataItem ['facetSelectCondition'] = $facetRequestEntity->selectedFacetsString . (empty($facetRequestEntity->selectedFacetsString) ? '' : ',') . $data ['facetGroupName'] . '::' . $data ['facetGroupPrintName'] . ':::' . $dataItem ['facetName'] . '::' . $dataItem ['facetPrintName'];
- $newFacetItem = Entity_FacetItem::createForInsert($dataItem);
+ $newFacetItem = EntityFacetItem::createForInsert($dataItem);
$facetItems [] = $newFacetItem;
}
$data ['facetItems'] = $facetItems;
- $newFacetGroup = Entity_FacetGroup::createForInsert($data);
+ $newFacetGroup = EntityFacetGroup::createForInsert($data);
$facetGroups [] = $newFacetGroup;
}
@@ -165,13 +165,13 @@ class BpmnEngineServicesSearchIndex
$dataItem ['facetCount'] = $facetvalues->$k;
$dataItem ['facetSelectCondition'] = $facetRequestEntity->selectedFacetsString . (empty($facetRequestEntity->selectedFacetsString) ? '' : ',') . $data ['facetGroupName'] . '::' . $data ['facetGroupPrintName'] . ':::' . $dataItem ['facetName'] . '::' . $dataItem ['facetPrintName'];
- $newFacetItem = Entity_FacetItem::createForInsert($dataItem);
+ $newFacetItem = EntityFacetItem::createForInsert($dataItem);
$facetItems [] = $newFacetItem;
}
}
$data ['facetItems'] = $facetItems;
- $newFacetGroup = Entity_FacetGroup::createForInsert($data);
+ $newFacetGroup = EntityFacetGroup::createForInsert($data);
$facetGroups [] = $newFacetGroup;
}
@@ -185,14 +185,14 @@ class BpmnEngineServicesSearchIndex
$filterText .= $selectedFacetGroup->selectedFacetGroupName . ':' . urlencode($selectedFacetGroup->selectedFacetItemName) . ',';
}
$filterText = substr_replace($filterText, '', - 1);
-
+
// Create result
$dataFacetResult = array(
'aFacetGroups' => $facetGroups,
'aSelectedFacetGroups' => $aSelectedFacetGroups,
'sFilterText' => $filterText
);
- $facetResult = Entity_FacetResult::createForRequest($dataFacetResult);
+ $facetResult = EntityFacetResult::createForRequest($dataFacetResult);
return $facetResult;
}
@@ -266,7 +266,7 @@ class BpmnEngineServicesSearchIndex
/**
* Call Solr server to return the list of paginated pages.
* @param FacetRequest $solrRequestData
- * @return Entity_SolrQueryResult
+ * @return EntitySolrQueryResult
*/
public function getDataTablePaginatedList($solrRequestData)
{
@@ -285,7 +285,7 @@ class BpmnEngineServicesSearchIndex
$numFound = $solrPaginatedResult->response->numFound;
$docs = $solrPaginatedResult->response->docs;
-
+
// insert list of names in docs result
$data = array(
"sEcho" => '', // must be completed in response
@@ -310,7 +310,7 @@ class BpmnEngineServicesSearchIndex
}
}
- $solrQueryResponse = Entity_SolrQueryResult::createForRequest($data);
+ $solrQueryResponse = EntitySolrQueryResult::createForRequest($data);
return $solrQueryResponse;
}
@@ -332,7 +332,7 @@ class BpmnEngineServicesSearchIndex
foreach ($solrFieldsData->fields as $key => $fieldData) {
if (array_key_exists('dynamicBase', $fieldData)) {
$originalFieldName = substr($key, 0, - strlen($fieldData->dynamicBase) + 1);
-
+
// Maintain case sensitive variable names
$listFields [$originalFieldName] = $key;
} else {
diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php
index e64c43a11..46661e383 100644
--- a/workflow/engine/classes/WsBase.php
+++ b/workflow/engine/classes/WsBase.php
@@ -307,7 +307,7 @@ class WsBase
//Add del_index dynamic fields to list of resulting columns
$columsToIncludeFinal = array_merge($columsToInclude, $delegationIndexes);
- $solrRequestData = Entity_SolrRequestData::createForRequestPagination(
+ $solrRequestData = EntitySolrRequestData::createForRequestPagination(
array(
"workspace" => $solrEnv["solr_instance"],
"startAfter" => 0,
diff --git a/workflow/engine/classes/entities/EntityAppSolrQueue.php b/workflow/engine/classes/entities/EntityAppSolrQueue.php
new file mode 100644
index 000000000..95c54094e
--- /dev/null
+++ b/workflow/engine/classes/entities/EntityAppSolrQueue.php
@@ -0,0 +1,37 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "appUid",
+ "appChangeDate",
+ "appChangeTrace",
+ "appUpdated"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntityBase.php b/workflow/engine/classes/entities/EntityBase.php
new file mode 100644
index 000000000..55689d79a
--- /dev/null
+++ b/workflow/engine/classes/entities/EntityBase.php
@@ -0,0 +1,148 @@
+ $f) {
+ if (isset($this->temp [$f])) {
+ $fieldIsEmpty = false;
+ return $this->temp [$f];
+ }
+ }
+
+ // field empty means the user has not sent a value for this Field, so we are
+ // using the default value
+ if ($fieldIsEmpty) {
+ if ($default !== false) {
+ return $default;
+ }
+ }
+ }
+
+ protected function validateRequiredFields($requiredFields = array())
+ {
+ foreach ($requiredFields as $k => $field) {
+ if ($this->{$field} === null) {
+ throw (new Exception("Field $field is required in " . get_class($this)));
+ die();
+ }
+ }
+ }
+
+ /**
+ * Copy the values of the Entity to the array of aliases
+ * The array of aliases must be defined.
+ *
+ * @return Array of alias with the Entity values
+ */
+ public function getAliasDataArray()
+ {
+ $aAlias = array();
+ // get aliases from class
+ $className = get_class($this);
+ if (method_exists($className, 'GetAliases')) {
+ $aliases = call_user_func(array(
+ $className,
+ 'GetAliases'
+ ));
+
+ foreach ($this as $field => $value) {
+ if (isset($aliases [$field])) {
+ // echo "Field exists in Aliases: " . $field . "\n";
+ // echo "Alias Name:" . $aliases[$field] . "\n";
+ // echo "Alias value:" . $value . "\n";
+ $aAlias [$aliases [$field]] = $value;
+ }
+ }
+ }
+
+ return $aAlias;
+ }
+
+ /**
+ * Set the data from array of alias to Entity
+ *
+ * @param $aAliasData array of data of aliases
+ */
+ public function setAliasDataArray($aAliasData)
+ {
+ // get aliases from class
+ $className = get_class($this);
+ if (method_exists($className, 'GetAliases')) {
+ $aliases = call_user_func(array(
+ $className,
+ 'GetAliases'
+ ));
+ // $aliases = $className::GetAliases ();
+ foreach ($this as $field => $value) {
+ if (isset($aliases [$field])) {
+ $this->{$field} = $aAliasData [$aliases [$field]];
+ }
+ }
+ }
+ }
+
+ /**
+ * Initialize object with values from $data.
+ * The values from data use properties or alias array.
+ *
+ * @param $data
+ */
+ protected function initializeObject($data)
+ {
+ // get aliases from class
+ $className = get_class($this);
+ $aliases = array();
+ $swAliases = false;
+ if (method_exists($className, 'GetAliases')) {
+ $aliases = call_user_func(array(
+ $className,
+ 'GetAliases'
+ ));
+ // $aliases = $className::GetAliases ();
+ $swAliases = true;
+ }
+ // use object properties or aliases to initialize
+ foreach ($this as $field => $value) {
+ if (isset($data [$field])) {
+ $this->$field = $data [$field];
+ } elseif ($swAliases && isset($aliases [$field]) && isset($data [$aliases [$field]])) {
+ $this->$field = $data [$aliases [$field]];
+ }
+ }
+ }
+
+ public function serialize()
+ {
+ if (isset($this->temp)) {
+ unset($this->temp);
+ }
+ return serialize($this);
+ }
+
+ public function unserialize($str)
+ {
+ $className = get_class($this);
+ $data = unserialize($str);
+ return new $className($data);
+ }
+}
diff --git a/workflow/engine/classes/entities/EntityFacetGroup.php b/workflow/engine/classes/entities/EntityFacetGroup.php
new file mode 100644
index 000000000..045bc5284
--- /dev/null
+++ b/workflow/engine/classes/entities/EntityFacetGroup.php
@@ -0,0 +1,36 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "facetGroupName",
+ "facetItems"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntityFacetInterfaceRequest.php b/workflow/engine/classes/entities/EntityFacetInterfaceRequest.php
new file mode 100644
index 000000000..f1d6a94ae
--- /dev/null
+++ b/workflow/engine/classes/entities/EntityFacetInterfaceRequest.php
@@ -0,0 +1,40 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "searchText",
+ "selectedFacetsString"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntityFacetInterfaceResult.php b/workflow/engine/classes/entities/EntityFacetInterfaceResult.php
new file mode 100644
index 000000000..651e54e3a
--- /dev/null
+++ b/workflow/engine/classes/entities/EntityFacetInterfaceResult.php
@@ -0,0 +1,36 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "aFacetGroup",
+ "aSelectedFacetGroupItem",
+ "sFilterText"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntityFacetItem.php b/workflow/engine/classes/entities/EntityFacetItem.php
new file mode 100644
index 000000000..84df00cf9
--- /dev/null
+++ b/workflow/engine/classes/entities/EntityFacetItem.php
@@ -0,0 +1,36 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "facetName",
+ "facetCount"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntityFacetRequest.php b/workflow/engine/classes/entities/EntityFacetRequest.php
new file mode 100644
index 000000000..e8b38d989
--- /dev/null
+++ b/workflow/engine/classes/entities/EntityFacetRequest.php
@@ -0,0 +1,41 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "workspace"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntityFacetResult.php b/workflow/engine/classes/entities/EntityFacetResult.php
new file mode 100644
index 000000000..4ba58d9cb
--- /dev/null
+++ b/workflow/engine/classes/entities/EntityFacetResult.php
@@ -0,0 +1,35 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "aFacetGroups",
+ "aSelectedFacetGroups",
+ "sFilterText"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntitySelectedFacetGroupItem.php b/workflow/engine/classes/entities/EntitySelectedFacetGroupItem.php
new file mode 100644
index 000000000..fcf6b5a14
--- /dev/null
+++ b/workflow/engine/classes/entities/EntitySelectedFacetGroupItem.php
@@ -0,0 +1,38 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "selectedFacetGroupName",
+ "selectedFacetItemName"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntitySolrQueryResult.php b/workflow/engine/classes/entities/EntitySolrQueryResult.php
new file mode 100644
index 000000000..355fb8f91
--- /dev/null
+++ b/workflow/engine/classes/entities/EntitySolrQueryResult.php
@@ -0,0 +1,38 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ 'sEcho',
+ 'iTotalRecords',
+ 'iTotalDisplayRecords',
+ 'aaData'
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntitySolrRequestData.php b/workflow/engine/classes/entities/EntitySolrRequestData.php
new file mode 100644
index 000000000..9b3eea5b8
--- /dev/null
+++ b/workflow/engine/classes/entities/EntitySolrRequestData.php
@@ -0,0 +1,44 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ 'workspace'
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/EntitySolrUpdateDocument.php b/workflow/engine/classes/entities/EntitySolrUpdateDocument.php
new file mode 100644
index 000000000..e132faf0a
--- /dev/null
+++ b/workflow/engine/classes/entities/EntitySolrUpdateDocument.php
@@ -0,0 +1,33 @@
+initializeObject($data);
+
+ $requiredFields = array(
+ "workspace",
+ "document"
+ );
+
+ $obj->validateRequiredFields($requiredFields);
+
+ return $obj;
+ }
+}
diff --git a/workflow/engine/classes/entities/Entity_AppSolrQueue.php b/workflow/engine/classes/entities/Entity_AppSolrQueue.php
deleted file mode 100644
index 724845498..000000000
--- a/workflow/engine/classes/entities/Entity_AppSolrQueue.php
+++ /dev/null
@@ -1,46 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "appUid",
- "appChangeDate",
- "appChangeTrace",
- "appUpdated"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
diff --git a/workflow/engine/classes/entities/Entity_Base.php b/workflow/engine/classes/entities/Entity_Base.php
deleted file mode 100644
index 9bcb878e1..000000000
--- a/workflow/engine/classes/entities/Entity_Base.php
+++ /dev/null
@@ -1,158 +0,0 @@
- $f) {
- if (isset ($this->temp [$f])) {
- $fieldIsEmpty = false;
- return $this->temp [$f];
- }
- }
-
- // field empty means the user has not sent a value for this Field, so we are
- // using the default value
- if ($fieldIsEmpty) {
- if ($default !== false) {
- return $default;
- }
- }
- }
-
- protected function validateRequiredFields($requiredFields = array())
- {
- foreach ($requiredFields as $k => $field) {
- if ($this->{$field} === NULL) {
- throw (new Exception ("Field $field is required in " . get_class ($this)));
- die ();
- }
- }
- }
-
- /**
- *
- *
- *
- * Copy the values of the Entity to the array of aliases
- * The array of aliases must be defined.
- *
- * @return Array of alias with the Entity values
- */
- public function getAliasDataArray()
- {
- $aAlias = array ();
- // get aliases from class
- $className = get_class ($this);
- if (method_exists ($className, 'GetAliases')) {
- $aliases = call_user_func (array (
- $className,
- 'GetAliases'
- ));
- // $aliases = $className::GetAliases ();
- foreach ($this as $field => $value)
- if (isset ($aliases [$field])) {
- // echo "Field exists in Aliases: " . $field . "\n";
- // echo "Alias Name:" . $aliases[$field] . "\n";
- // echo "Alias value:" . $value . "\n";
- $aAlias [$aliases [$field]] = $value;
- }
- }
-
- return $aAlias;
- }
-
- /**
- *
- *
- *
- * Set the data from array of alias to Entity
- *
- * @param $aAliasData array
- * of data of aliases
- */
- public function setAliasDataArray($aAliasData)
- {
- // get aliases from class
- $className = get_class ($this);
- if (method_exists ($className, 'GetAliases')) {
- $aliases = call_user_func (array (
- $className,
- 'GetAliases'
- ));
- // $aliases = $className::GetAliases ();
- foreach ($this as $field => $value)
- if (isset ($aliases [$field]))
- $this->{$field} = $aAliasData [$aliases [$field]];
- }
- }
-
- /**
- *
- *
- *
- * Initialize object with values from $data.
- * The values from data use properties or alias array.
- *
- * @param
- * $data
- */
- protected function initializeObject($data)
- {
- // get aliases from class
- $className = get_class ($this);
- $aliases = array ();
- $swAliases = false;
- if (method_exists ($className, 'GetAliases')) {
- $aliases = call_user_func (array (
- $className,
- 'GetAliases'
- ));
- // $aliases = $className::GetAliases ();
- $swAliases = true;
- }
- // use object properties or aliases to initialize
- foreach ($this as $field => $value)
- if (isset ($data [$field])) {
- $this->$field = $data [$field];
- }
- elseif ($swAliases && isset ($aliases [$field]) && isset ($data [$aliases [$field]])) {
- $this->$field = $data [$aliases [$field]];
- }
- }
-
- public function serialize()
- {
- if (isset ($this->temp))
- unset ($this->temp);
- return serialize ($this);
- }
-
- public function unserialize($str)
- {
- $className = get_class ($this);
- $data = unserialize ($str);
- return new $className ($data);
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_FacetGroup.php b/workflow/engine/classes/entities/Entity_FacetGroup.php
deleted file mode 100644
index cb6b6fdb9..000000000
--- a/workflow/engine/classes/entities/Entity_FacetGroup.php
+++ /dev/null
@@ -1,64 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "facetGroupName",
- "facetItems"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_FacetInterfaceRequest.php b/workflow/engine/classes/entities/Entity_FacetInterfaceRequest.php
deleted file mode 100644
index 0e2573b05..000000000
--- a/workflow/engine/classes/entities/Entity_FacetInterfaceRequest.php
+++ /dev/null
@@ -1,41 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "searchText",
- "selectedFacetsString"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
diff --git a/workflow/engine/classes/entities/Entity_FacetInterfaceResult.php b/workflow/engine/classes/entities/Entity_FacetInterfaceResult.php
deleted file mode 100644
index e7dbe8f32..000000000
--- a/workflow/engine/classes/entities/Entity_FacetInterfaceResult.php
+++ /dev/null
@@ -1,40 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "aFacetGroup",
- "aSelectedFacetGroupItem",
- "sFilterText"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_FacetItem.php b/workflow/engine/classes/entities/Entity_FacetItem.php
deleted file mode 100644
index 37310aa0d..000000000
--- a/workflow/engine/classes/entities/Entity_FacetItem.php
+++ /dev/null
@@ -1,56 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "facetName",
- "facetCount"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_FacetRequest.php b/workflow/engine/classes/entities/Entity_FacetRequest.php
deleted file mode 100644
index 2a5d0c1e4..000000000
--- a/workflow/engine/classes/entities/Entity_FacetRequest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "workspace"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_FacetResult.php b/workflow/engine/classes/entities/Entity_FacetResult.php
deleted file mode 100644
index 9e2dccfac..000000000
--- a/workflow/engine/classes/entities/Entity_FacetResult.php
+++ /dev/null
@@ -1,38 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "aFacetGroups",
- "aSelectedFacetGroups",
- "sFilterText"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_SelectedFacetGroupItem.php b/workflow/engine/classes/entities/Entity_SelectedFacetGroupItem.php
deleted file mode 100644
index 90412e082..000000000
--- a/workflow/engine/classes/entities/Entity_SelectedFacetGroupItem.php
+++ /dev/null
@@ -1,41 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "selectedFacetGroupName",
- "selectedFacetItemName"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_SolrQueryResult.php b/workflow/engine/classes/entities/Entity_SolrQueryResult.php
deleted file mode 100644
index a2f67f3d6..000000000
--- a/workflow/engine/classes/entities/Entity_SolrQueryResult.php
+++ /dev/null
@@ -1,41 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- 'sEcho',
- 'iTotalRecords',
- 'iTotalDisplayRecords',
- 'aaData'
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_SolrRequestData.php b/workflow/engine/classes/entities/Entity_SolrRequestData.php
deleted file mode 100644
index 713516c22..000000000
--- a/workflow/engine/classes/entities/Entity_SolrRequestData.php
+++ /dev/null
@@ -1,47 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- 'workspace'
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/entities/Entity_SolrUpdateDocument.php b/workflow/engine/classes/entities/Entity_SolrUpdateDocument.php
deleted file mode 100644
index 23cf1a437..000000000
--- a/workflow/engine/classes/entities/Entity_SolrUpdateDocument.php
+++ /dev/null
@@ -1,36 +0,0 @@
-initializeObject ($data);
-
- $requiredFields = array (
- "workspace",
- "document"
- );
-
- $obj->validateRequiredFields ($requiredFields);
-
- return $obj;
- }
-
-}
\ No newline at end of file
diff --git a/workflow/engine/classes/model/AppSolrQueue.php b/workflow/engine/classes/model/AppSolrQueue.php
index 680481646..562b7b825 100644
--- a/workflow/engine/classes/model/AppSolrQueue.php
+++ b/workflow/engine/classes/model/AppSolrQueue.php
@@ -86,31 +86,31 @@ class AppSolrQueue extends BaseAppSolrQueue
$updatedApplications = array ();
try {
$c = new Criteria();
-
+
$c->addSelectColumn(AppSolrQueuePeer::APP_UID);
$c->addSelectColumn(AppSolrQueuePeer::APP_CHANGE_DATE);
$c->addSelectColumn(AppSolrQueuePeer::APP_CHANGE_TRACE);
$c->addSelectColumn(AppSolrQueuePeer::APP_UPDATED);
-
- //"WHERE
- if($updated == true && $deleted == true){
- $c->add(AppSolrQueuePeer::APP_UPDATED, 0, Criteria::NOT_EQUAL);
- }
- if($updated == true && $deleted == false){
- $c->add(AppSolrQueuePeer::APP_UPDATED, 1, Criteria::EQUAL);
- }
- if($updated == false && $deleted == true){
- $c->add(AppSolrQueuePeer::APP_UPDATED, 2, Criteria::EQUAL);
- }
-
- $rs = AppSolrQueuePeer::doSelectRS($c);
- $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
+
+ //"WHERE
+ if($updated == true && $deleted == true){
+ $c->add(AppSolrQueuePeer::APP_UPDATED, 0, Criteria::NOT_EQUAL);
+ }
+ if($updated == true && $deleted == false){
+ $c->add(AppSolrQueuePeer::APP_UPDATED, 1, Criteria::EQUAL);
+ }
+ if($updated == false && $deleted == true){
+ $c->add(AppSolrQueuePeer::APP_UPDATED, 2, Criteria::EQUAL);
+ }
+
+ $rs = AppSolrQueuePeer::doSelectRS($c);
+ $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
//echo $c->toString();
$rs->next();
$row = $rs->getRow();
while (is_array( $row )) {
- $appSolrQueue = Entity_AppSolrQueue::createEmpty();
+ $appSolrQueue = EntityAppSolrQueue::createEmpty();
$appSolrQueue->appUid = $row["APP_UID"];
$appSolrQueue->appChangeDate = $row["APP_CHANGE_DATE"];
$appSolrQueue->appChangeTrace = $row["APP_CHANGE_TRACE"];
@@ -119,11 +119,11 @@ class AppSolrQueue extends BaseAppSolrQueue
$rs->next();
$row = $rs->getRow();
}
-
+
return $updatedApplications;
} catch (Exception $e) {
$con->rollback();
throw ($e);
}
}
-} // AppSolrQueue
+} // AppSolrQueue
diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php
index b8af79742..7f821129f 100644
--- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php
+++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php
@@ -402,7 +402,7 @@ class Cases
$solrSearchText = "($solrSearchText)";
//Add del_index dynamic fields to list of resulting columns
$columsToIncludeFinal = array_merge($columsToInclude, $delegationIndexes);
- $solrRequestData = \Entity_SolrRequestData::createForRequestPagination(
+ $solrRequestData = \EntitySolrRequestData::createForRequestPagination(
array(
"workspace" => $solrEnv["solr_instance"],
"startAfter" => 0,