message = G::LoadTranslation('ID_LOGIN_AGAIN');
$response->lostSession = true;
print G::json_encode($response);
die();
}
$actionAjax = isset($_REQUEST['actionAjax']) ? $_REQUEST['actionAjax'] : 'verifySession';
global $RBAC;
$RBAC->allows(basename(__FILE__), $actionAjax);
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_UID, [RBAC::GUEST_USER_UID], Criteria::NOT_IN);
$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') {
$processUser = new ProcessUser();
$listProcess = $processUser->getProUidSupervisor($_SESSION['USER_LOGGED']);
$cProcess->add(ProcessPeer::PRO_UID, $listProcess, Criteria::IN);
}
if ($action === 'to_reassign') {
if ($RBAC->userCanAccess('PM_REASSIGNCASE') == 1) {
} elseif ($RBAC->userCanAccess('PM_REASSIGNCASE_SUPERVISOR') == 1) {
$processUser = new ProcessUser();
$listProcess = $processUser->getProUidSupervisor($_SESSION['USER_LOGGED']);
$cProcess->add(ProcessPeer::PRO_UID, $listProcess, 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 {
/** Action: Reassign from casesList */
GLOBAL $RBAC;
$response = new stdclass();
//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');
$processUser = new ProcessUser();
$listProcess = $processUser->getProUidSupervisor($_SESSION['USER_LOGGED']);
$response->processeslist = G::json_encode($listProcess);
}
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');
?>