message = G::LoadTranslation('ID_LOGIN_AGAIN'); $response->lostSession = true; print G::json_encode($response); die(); } /** * casesList_Ajax.php * * ProcessMaker Open Source Edition * Copyright (C) 2004 - 2008 Colosa Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ $actionAjax = isset($_REQUEST['actionAjax']) ? $_REQUEST['actionAjax'] : null; function filterUserListArray($users = array(), $filter = '') { $filteredUsers = array(); foreach ($users as $user) { if (stripos($user['USR_FULLNAME'], $filter) !== false || empty($filter)) { $filteredUsers[] = $user; } } return $filteredUsers; } //Load the suggest list of users if ($actionAjax == "userValues") { $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : null; $query = isset( $_REQUEST['query'] ) ? $_REQUEST['query'] : null; $conf = new Configurations(); $confEnvSetting = $conf->getFormats(); $users = array(); $cUsers = new Criteria('workflow'); $cUsers->clearSelectColumns(); $cUsers->addSelectColumn(UsersPeer::USR_USERNAME); $cUsers->addSelectColumn(UsersPeer::USR_FIRSTNAME); $cUsers->addSelectColumn(UsersPeer::USR_LASTNAME); switch ($action) { case 'to_reassign': $cUsers->addSelectColumn(UsersPeer::USR_UID); break; case 'search_simple': case 'search': $cUsers->addSelectColumn(UsersPeer::USR_ID); break; } $cUsers->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); if (!is_null($query)) { $filters = $cUsers->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $query . '%', Criteria::LIKE)->addOr( $cUsers->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $query . '%', Criteria::LIKE)->addOr( $cUsers->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $query . '%', Criteria::LIKE))); $cUsers->addOr($filters); } $cUsers->setLimit(20); $cUsers->addAscendingOrderByColumn(UsersPeer::TABLE_NAME . "." . $conf->userNameFormatGetFirstFieldByUsersTable()); $oDataset = UsersPeer::doSelectRS($cUsers); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($oDataset->next()) { $row = $oDataset->getRow(); $usrFullName = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $row["USR_USERNAME"], $row["USR_FIRSTNAME"], $row["USR_LASTNAME"]); if ($action === 'search') { //Only for the advanced search we used the USR_ID column $users[] = array("USR_UID" => $row["USR_ID"], "USR_FULLNAME" => $usrFullName); } else { $users[] = array("USR_UID" => $row["USR_UID"], "USR_FULLNAME" => $usrFullName); } } return print G::json_encode($users); } if ($actionAjax == "processListExtJs") { $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null; $query = isset($_REQUEST['query']) ? $_REQUEST['query'] : null; $categoryUid = isset($_REQUEST['CATEGORY_UID']) ? $_REQUEST['CATEGORY_UID'] : null; $userUid = (isset($_SESSION['USER_LOGGED']) && $_SESSION['USER_LOGGED'] != '') ? $_SESSION['USER_LOGGED'] : null; $processes = array(); //in search action, the query to obtain all process is too slow, so we need to query directly to //process and content tables, and for that reason we need the current language in AppCacheView. $oConf = new Configurations(); $oConf->loadConfig($x, 'APP_CACHE_VIEW_ENGINE', '', '', '', ''); $appCacheViewEngine = $oConf->aConfig; $lang = isset($appCacheViewEngine['LANG']) ? $appCacheViewEngine['LANG'] : 'en'; $cProcess = new Criteria('workflow'); //get the processes for this user in this action $cProcess->clearSelectColumns(); if ($action == 'search') { $cProcess->addSelectColumn(ProcessPeer::PRO_ID); } else { $cProcess->addSelectColumn(ProcessPeer::PRO_UID); } $cProcess->addSelectColumn(ProcessPeer::PRO_TITLE); if ($categoryUid) { $cProcess->add(ProcessPeer::PRO_CATEGORY, $categoryUid); } $del = \DBAdapter::getStringDelimiter(); $cProcess->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); if (!is_null($query)) { $filters = $cProcess->getNewCriterion(ProcessPeer::PRO_TITLE, '%' . $query . '%', Criteria::LIKE); $cProcess->addAnd($filters); } if ($action==='to_revise') { $oAppCache = new AppCacheView(); $aProcesses = $oAppCache->getProUidSupervisor($_SESSION['USER_LOGGED']); $cProcess->add(ProcessPeer::PRO_UID, $aProcesses, Criteria::IN); } if ($action==='to_reassign') { if ($RBAC->userCanAccess('PM_REASSIGNCASE') == 1) { } elseif ($RBAC->userCanAccess('PM_REASSIGNCASE_SUPERVISOR') == 1) { $oAppCache = new AppCacheView(); $aProcesses = $oAppCache->getProUidSupervisor($_SESSION['USER_LOGGED']); $cProcess->add(ProcessPeer::PRO_UID, $aProcesses, Criteria::IN); } } $cProcess->addAscendingOrderByColumn(ProcessPeer::PRO_TITLE); $oDataset = ProcessPeer::doSelectRS($cProcess); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($oDataset->next()) { $aRow = $oDataset->getRow(); if (!isset($aRow['PRO_UID'])) { $aRow['PRO_UID'] = $aRow['PRO_ID']; } $processes[] = $aRow; } return print G::json_encode($processes); } if ($actionAjax == "verifySession") { if (!isset($_SESSION['USER_LOGGED'])) { $response = new stdclass(); $response->message = G::LoadTranslation('ID_LOGIN_AGAIN'); $response->lostSession = true; print G::json_encode( $response ); die(); } else { $response = new stdclass(); GLOBAL $RBAC; //Check if the user is a supervisor to this Process if ($RBAC->userCanAccess('PM_REASSIGNCASE') == 1) { $response->reassigncase = true; $response->message = ''; $response->processeslist = ''; } elseif ($RBAC->userCanAccess('PM_REASSIGNCASE_SUPERVISOR') == 1) { $response->reassigncase = true; $response->message = G::LoadTranslation('ID_NOT_ABLE_REASSIGN'); $oAppCache = new AppCacheView(); $aProcesses = $oAppCache->getProUidSupervisor($_SESSION['USER_LOGGED']); $response->processeslist = G::json_encode( $aProcesses ); } print G::json_encode( $response ); die(); } } if ($actionAjax == "getUsersToReassign") { $taskUid = $_POST['taskUid']; $search = $_POST['search']; $pageSize = $_POST['pageSize']; $sortField = (isset($_POST['sort']))? $_POST['sort'] : ''; $sortDir = (isset($_POST['dir']))? $_POST['dir'] : ''; $start = (isset($_POST['start']))? $_POST['start'] : 0; $limit = (isset($_POST['limit']))? $_POST['limit'] : $pageSize; $response = []; try { $case = new \ProcessMaker\BusinessModel\Cases(); $result = $case->getUsersToReassign($_SESSION['USER_LOGGED'], $taskUid, ['filter' => $search], $sortField, $sortDir, $start, $limit); $response['status'] = 'OK'; $response['success'] = true; $response['resultTotal'] = $result['total']; $response['resultRoot'] = $result['data']; } catch (Exception $e) { $response['status'] = 'ERROR'; $response['message'] = $e->getMessage(); } echo G::json_encode($response); } if ($actionAjax == 'reassignCase') { $APP_UID = $_REQUEST["APP_UID"]; $DEL_INDEX = $_REQUEST["DEL_INDEX"]; $_SESSION['APPLICATION'] = $APP_UID; $_SESSION['INDEX'] = $DEL_INDEX; $cases = new Cases(); $user = new Users(); $app = new Application(); $oAppDel = new AppDelegation(); $TO_USR_UID = $_POST['USR_UID']; try { //Current users of OPEN DEL_INDEX thread $aCurUser = $oAppDel->getCurrentUsers($APP_UID, $DEL_INDEX); $flagReassign = true; if(!empty($aCurUser)){ foreach ($aCurUser as $key => $value) { if($value === $TO_USR_UID){ $flagReassign = false; } } } else { //DEL_INDEX is CLOSED throw new Exception(G::LoadTranslation('ID_REASSIGNMENT_ERROR')); } //If the currentUser is diferent to nextUser, create the thread if($flagReassign){ $cases->reassignCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['USER_LOGGED'], $TO_USR_UID); } $caseData = $app->load($_SESSION['APPLICATION']); $userData = $user->load($TO_USR_UID); $data['APP_NUMBER'] = $caseData['APP_NUMBER']; $data['USER'] = $userData['USR_LASTNAME'] . ' ' . $userData['USR_FIRSTNAME']; //TODO change with the farmated username from environment conf $result = new stdClass(); $result->status = 0; $result->msg = G::LoadTranslation('ID_REASSIGNMENT_SUCCESS', SYS_LANG, $data); // Save the note reassign reason if (isset($_POST['NOTE_REASON']) && $_POST['NOTE_REASON'] !== '') { require_once ("classes/model/AppNotes.php"); $appNotes = new AppNotes(); $noteContent = addslashes($_POST['NOTE_REASON']); $notifyReassign = $_POST['NOTIFY_REASSIGN'] === 'true' ? true: false; $res = $appNotes->postNewNote($_SESSION['APPLICATION'], $_SESSION['USER_LOGGED'], $noteContent, $notifyReassign); } } catch (Exception $e) { $result->status = 1; $result->msg = $e->getMessage(); } print G::json_encode($result); } if ($actionAjax == 'showHistoryMessage') { ?> AddContent('xmlform', 'xmlform', 'cases/cases_MessagesView', '', $oCase->getHistoryMessagesTrackerView($_POST['APP_UID'], $_POST['APP_MSG_UID'])); ?> ?> AddContent('view', 'cases/cases_DynaformHistory'); G::RenderPage('publish', 'raw'); } if ($actionAjax == 'dynaformChangeLogViewHistory') { ?> AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_POST['DYN_UID'], '', $Fields['APP_DATA'], '', '', 'view'); ?> loadCase($_SESSION['APPLICATION']); $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['PREVIOUS_STEP_LABEL'] = ''; $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['NEXT_STEP_LABEL'] = ''; $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['NEXT_STEP'] = '#'; $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['NEXT_ACTION'] = 'return false;'; $_SESSION['DYN_UID_PRINT'] = $_POST['DYN_UID']; $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_POST['DYN_UID'], '', $Fields['APP_DATA'], '', '', 'view'); ?>