allows(basename(__FILE__), $name); parent::call($name); } public function __construct() { // setting client browser information $this->clientBrowser = G::getBrowser(); // getting the ux type from user o group conf. $this->userUxType = isset($_SESSION['user_experience']) ? $_SESSION['user_experience'] : 'SIMPLIFIED'; $this->lastSkin = isset($_SESSION['user_last_skin']) ? $_SESSION['user_last_skin'] : 'neoclassic'; $this->userUxBaseTemplate = (is_dir(PATH_CUSTOM_SKINS . 'uxs')) ? PATH_CUSTOM_SKINS . 'simplified' . PATH_SEP . 'templates' : 'home'; if (isset($_SESSION['USER_LOGGED']) && ! empty($_SESSION['USER_LOGGED'])) { $this->userUid = isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : null; $this->userName = isset($_SESSION['USR_USERNAME']) ? $_SESSION['USR_USERNAME'] : ''; $this->userFullName = isset($_SESSION['USR_FULLNAME']) ? $_SESSION['USR_FULLNAME'] : ''; $this->userRolName = isset($_SESSION['USR_ROLENAME']) ? $_SESSION['USR_ROLENAME'] : ''; $users = new Users(); $users = $users->load($this->userUid); $this->usrId = $users["USR_ID"]; } } public function login($httpData) { //start new session @session_destroy(); session_start(); session_regenerate_id(); $data = isset($httpData->d) ? unserialize(base64_decode($httpData->d)) : ''; $template = $this->clientBrowser['name'] == 'msie' ? 'login_ie' : 'login_standard'; $skin = $this->clientBrowser['name'] == 'msie' ? $this->lastSkin : 'simplified'; if (! is_array($data)) { $data = array( 'u' => '', 'p' => '', 'm' => '' ); } $this->setVar('msg', $data['m']); $this->setVar('usr', $data['u']); $this->setVar('pwd', $data['p']); $this->setVar('timeZoneFailed', (isset($data['timeZoneFailed']))? $data['timeZoneFailed'] : 0); $this->setVar('userTimeZone', (isset($data['userTimeZone']))? $data['userTimeZone'] : ''); $this->setVar('browserTimeZone', (isset($data['browserTimeZone']))? $data['browserTimeZone'] : ''); $this->setVar('skin', $skin); $this->setView($this->userUxBaseTemplate . PATH_SEP . $template); $this->render(); } /** * getting default list * * @param string $httpData (opional) */ public function index($httpData) { if ($this->userUxType == 'SINGLE') { $this->indexSingle($httpData); return; } $userProperty = new UsersProperties(); $process = new Process(); $case = new Cases(); $sysConf = System::getSystemConfiguration(PATH_CONFIG . 'env.ini'); //Get ProcessStatistics Info $start = 0; $limit = ''; $proData = $process->getAllProcesses($start, $limit, null, null, false, true); $processList = $case->getStartCasesPerType($_SESSION['USER_LOGGED'], 'category'); $processesList = array(); foreach ($processList as $key => $valueProcess) { foreach ($proData as $keyPro => $valuePro) { if (!isset($valueProcess['pro_uid'])) { $valueProcess['pro_uid'] = ''; } if ($valueProcess['pro_uid'] == $valuePro['PRO_UID']) { $processesList[] = $valueProcess; } } } $switchLink = $userProperty->getUserLocation($_SESSION['USER_LOGGED'], SYS_LANG); if (!isset($_COOKIE['workspaceSkin'])) { if (substr($sysConf['default_skin'], 0, 2) == 'ux') { $_SESSION['_defaultUserLocation'] = $switchLink; $switchLink = '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . $sysConf['default_skin'] . '/main'; } } $oServerConf = ServerConf::getSingleton(); if ($oServerConf->isRtl(SYS_LANG)) { $swRtl = 1; } else { $swRtl = 0; } //Get simplified options global $G_TMP_MENU; $mnu = new Menu(); $mnu->load('simplified'); $arrayMnuOption = array(); $mnuNewCase = array(); if (! empty($mnu->Options)) { foreach ($mnu->Options as $index => $value) { $option = array('id' => $mnu->Id[$index],'url' => $mnu->Options[$index],'label' => $mnu->Labels[$index],'icon' => $mnu->Icons[$index],'class' => $mnu->ElementClass[$index] ); if ($mnu->Id[$index] != 'S_NEW_CASE') { $arrayMnuOption[] = $option; } else { $mnuNewCase = $option; } } } $this->setView($this->userUxBaseTemplate . PATH_SEP . 'index'); $this->setVar('usrUid', $this->userUid); $this->setVar('userName', $this->userName); $this->setVar('processList', $processesList); $this->setVar('canStartCase', $case->canStartCase($_SESSION['USER_LOGGED'])); $this->setVar('userUxType', $this->userUxType); $this->setVar('clientBrowser', $this->clientBrowser['name']); $this->setVar('switchLink', $switchLink); $this->setVar('arrayMnuOption', $arrayMnuOption); $this->setVar('mnuNewCase', $mnuNewCase); $this->setVar('rtl', $swRtl); $this->render(); } public function indexSingle($httpData) { $step = new Step(); $solrEnabled = false; if (($solrConf = System::solrEnv()) !== false) { $ApplicationSolrIndex = new AppSolr( $solrConf["solr_enabled"], $solrConf["solr_host"], $solrConf["solr_instance"] ); if ($ApplicationSolrIndex->isSolrEnabled() && $solrConf['solr_enabled'] == true) { //Check if there are missing records to reindex and reindex them $ApplicationSolrIndex->synchronizePendingApplications(); $solrEnabled = true; } else { $solrEnabled = false; } } if ($solrEnabled) { $cases = $ApplicationSolrIndex->getAppGridData($this->userUid, 0, 1, 'todo'); } else { $apps = new Applications(); $cases = $apps->getAll($this->userUid, 0, 1, 'todo'); } if (! isset($cases['data'][0])) { //the current user has not any aplication to do $this->setView($this->userUxBaseTemplate . PATH_SEP . 'indexSingle'); $this->setVar('default_url', $this->userUxBaseTemplate . "/" . 'error?no=2'); $this->render(); exit(); } $lastApp = $cases['data'][0]; $_SESSION['INDEX'] = $lastApp['DEL_INDEX']; $_SESSION['APPLICATION'] = $lastApp['APP_UID']; $_SESSION['PROCESS'] = $lastApp['PRO_UID']; $_SESSION['TASK'] = $lastApp['TAS_UID']; $steps = $apps->getSteps($lastApp['APP_UID'], $lastApp['DEL_INDEX'], $lastApp['TAS_UID'], $lastApp['PRO_UID']); $lastStep = array_pop($steps); $lastStep['title'] = G::LoadTranslation('ID_FINISH'); $steps[] = $lastStep; $this->setView($this->userUxBaseTemplate . PATH_SEP . 'indexSingle'); $this->setVar('usrUid', $this->userUid); $this->setVar('userName', $this->userName); $this->setVar('steps', $steps); $this->setVar('default_url', "cases/cases_Open?APP_UID={$lastApp['APP_UID']}&DEL_INDEX={$lastApp['DEL_INDEX']}&action=todo"); $this->render(); } public function appList($httpData) { // setting default list applications types [default: todo] $httpData->t = isset($httpData->t) ? $httpData->t : 'todo'; // setting main list title switch ($httpData->t) { case 'todo': $title = G::LoadTranslation("ID_MY_INBOX"); break; case 'draft': $title = G::LoadTranslation("ID_MY_DRAFTS"); break; case 'unassigned': $title = G::LoadTranslation("ID_UNASSIGNED_INBOX"); break; default: $title = ucwords($httpData->t); break; } // getting apps data $cases = $this->getAppsData($httpData->t); // settings html template $this->setView($this->userUxBaseTemplate . PATH_SEP . 'appList'); // settings vars and rendering $this->setVar('cases', $cases['data']); $this->setVar('title', $title); $this->setVar('noPerms', G::LoadTranslation('ID_CASES_NOTES_NO_PERMISSIONS')); $this->setVar('appListStart', $this->appListLimit); $this->setVar('appListLimit', 10); $this->setVar('listType', $httpData->t); $this->render(); } public function appAdvancedSearch($httpData) { $title = G::LoadTranslation("ID_ADVANCEDSEARCH"); $httpData->t = 'search'; // settings html template $this->setView($this->userUxBaseTemplate . PATH_SEP . 'appListSearch'); // get data $process = (isset($httpData->process)) ? $httpData->process : null; $status = (isset($httpData->status)) ? $httpData->status : null; $search = (isset($httpData->search)) ? $httpData->search : null; $category = (isset($httpData->category)) ? $httpData->category : null; $user = (isset($httpData->user)) ? $httpData->user : null; $dateFrom = (isset($httpData->dateFrom)) ? $httpData->dateFrom : null; $dateTo = (isset($httpData->dateTo)) ? $httpData->dateTo : null; $processTitle = ""; if (!empty($process)) { $processTitle = Process::loadById($process)->getProTitle(); } $userName = ""; if (!empty($user) && $user !== "ALL" && $user !== "CURRENT_USER") { $userObject = Users::loadById($user); $userName = $userObject->getUsrLastname() . " " . $userObject->getUsrFirstname(); } $cases = $this->getAppsData( $httpData->t, null, null, $user, null, $search, $process, $status, $dateFrom, $dateTo, null, null, 'APP_CACHE_VIEW.APP_NUMBER', $category ); $arraySearch = array($process, $status, $search, $category, $user, $dateFrom, $dateTo ); // settings vars and rendering $this->setVar('statusValues', $this->getStatusArray($httpData->t, $this->userUid)); $this->setVar('categoryValues', $this->getCategoryArray()); $this->setVar('allUsersValues', $this->getAllUsersArray('search')); $this->setVar('categoryTitle', G::LoadTranslation("ID_CATEGORY")); $this->setVar('processTitle', G::LoadTranslation("ID_PROCESS")); $this->setVar('statusTitle', G::LoadTranslation("ID_STATUS")); $this->setVar('searchTitle', G::LoadTranslation("ID_SEARCH")); $this->setVar('userTitle', G::LoadTranslation("ID_USER")); $this->setVar('fromTitle', G::LoadTranslation("ID_DELEGATE_DATE_FROM")); $this->setVar('toTitle', G::LoadTranslation("ID_DELEGATE_DATE_TO")); $this->setVar('filterTitle', G::LoadTranslation("ID_FILTER")); $this->setVar('arraySearch', $arraySearch); $this->setVar('cases', $cases['data']); $this->setVar('title', $title); $this->setVar('noPerms', G::LoadTranslation('ID_CASES_NOTES_NO_PERMISSIONS')); $this->setVar('appListStart', $this->appListLimit); $this->setVar('appListLimit', 10); $this->setVar('listType', $httpData->t); $this->setVar('processCurrentTitle', $processTitle); $this->setVar('userCurrentName', $userName); $this->setVar('currentUserLabel', G::LoadTranslation("ID_ALL_USERS")); $this->setVar('allProcessLabel', G::LoadTranslation("ID_ALL_PROCESS")); $this->render(); } public function getApps($httpData) { $cases = $this->getAppsData($httpData->t, $httpData->start, $httpData->limit); $this->setView($this->userUxBaseTemplate . PATH_SEP . 'applications'); $this->setVar('cases', $cases['data']); $this->render(); } public function getAppsData( $type, $start = null, $limit = null, $user = null, $filter = null, $search = null, $process = null, $status = null, $dateFrom = null, $dateTo = null, $callback = null, $dir = 'DESC', $sort = "APP_CACHE_VIEW.APP_NUMBER", $category = null ) { $appNotes = new AppNotes(); $start = empty($start) ? $this->appListStart : $start; $limit = empty($limit) ? $this->appListLimit : $limit; $notesStart = 0; $notesLimit = 4; switch ($user) { case 'CURRENT_USER': $user = $this->usrId; break; case 'ALL': $user = null; break; case null: if ($type === 'search') { $user = null; } else { $user = $this->usrId; } break; default: break; } $solrEnabled = false; if (( $type == "todo" || $type == "draft" || $type == "paused" || $type == "sent" || $type == "selfservice" || $type == "unassigned" || $type == "search" ) && (($solrConf = System::solrEnv()) !== false) ) { $ApplicationSolrIndex = new AppSolr( $solrConf["solr_enabled"], $solrConf["solr_host"], $solrConf["solr_instance"] ); if ($ApplicationSolrIndex->isSolrEnabled() && $solrConf['solr_enabled'] == true) { //Check if there are missing records to reindex and reindex them $ApplicationSolrIndex->synchronizePendingApplications(); $solrEnabled = true; } else { $solrEnabled = false; } } if ($solrEnabled) { $cases = $ApplicationSolrIndex->getAppGridData( $user, $start, $limit, $type, $filter, $search, $process, $status, '', $dateFrom, $dateTo, $callback, $dir, $sort, $category ); } else { $dataList['userId'] = $user; $dataList['userUid'] = $this->userUid; $dataList['start'] = $start; $dataList['limit'] = $limit; $dataList['filter'] = $filter; $dataList['search'] = $search; $dataList['process'] = $process; $dataList['status'] = $status; $dataList['dateFrom'] = $dateFrom; $dataList['dateTo'] = $dateTo; $dataList['callback'] = $callback; $dataList['dir'] = $dir; $dataList['sort'] = $sort; $dataList['category'] = $category; $dataList['action'] = $type; $dataList['dir'] = 'DESC'; /*----------------------------------********---------------------------------*/ if (true) { //In enterprise version this block of code should always be executed //In community version this block of code is deleted and is executed the other $listType = ''; if (!empty($type)) { switch ($type) { case 'todo': $listType = 'inbox'; break; case 'draft': $listType = 'inbox'; break; case 'unassigned': $listType = 'unassigned'; break; case 'search': $dataList['filterStatus'] = $status; break; } } if (!empty($listType)) { //The change is made because the method 'getList()' does not //support 'USR_UID', this method uses the numeric field 'USR_ID'. $userObject = Users::loadById($dataList['userId']); $dataList['userId'] = $userObject->getUsrUid(); $list = new \ProcessMaker\BusinessModel\Lists(); $cases = $list->getList($listType, $dataList); } } else { /*----------------------------------********---------------------------------*/ $case = new \ProcessMaker\BusinessModel\Cases(); $cases = $case->getList($dataList); foreach ($cases['data'] as &$value) { $value = array_change_key_case($value, CASE_UPPER); } /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ } if (empty($cases) && $type == 'search') { $case = new \ProcessMaker\BusinessModel\Cases(); $cases = $case->getCasesSearch($dataList); foreach ($cases['data'] as &$value) { $value = array_change_key_case($value, CASE_UPPER); } } if (!isset($cases['totalCount'])) { $cases['totalCount'] = $cases['total']; } // formating & complitting apps data with 'Notes' foreach ($cases['data'] as $i => $row) { // Formatting $appTitle = str_replace('#', '', $row['APP_TITLE']); if (is_numeric($appTitle)) { $cases['data'][$i]['APP_TITLE'] = G::LoadTranslation('ID_CASE') . ' ' . $appTitle; } if (isset($row['DEL_DELEGATE_DATE'])) { $conf = new Configurations(); $generalConfCasesList = $conf->getConfiguration('ENVIRONMENT_SETTINGS', ''); $cases['data'][$i]['DEL_DELEGATE_DATE'] = ''; if (!empty(config("system.workspace"))) { if (isset( $generalConfCasesList['casesListDateFormat'] ) && ! empty( $generalConfCasesList['casesListDateFormat'] )) { $cases['data'][$i]['DEL_DELEGATE_DATE'] = $conf->getSystemDate($row['DEL_DELEGATE_DATE'], 'casesListDateFormat'); } } if ($cases['data'][$i]['DEL_DELEGATE_DATE'] == '') { $cases['data'][$i]['DEL_DELEGATE_DATE'] = $conf->getSystemDate($row['DEL_DELEGATE_DATE']); } } if (isset($row['APP_DEL_PREVIOUS_USER'])) { $cases['data'][$i]['APP_DEL_PREVIOUS_USER'] = ucwords($row['APP_DEL_PREVIOUS_USER']); } // Completting with Notes $notes = $appNotes->getNotesList($row['APP_UID'], '', $notesStart, $notesLimit); $notes = AppNotes::applyHtmlentitiesInNotes($notes); $notes = $notes['array']; $cases['data'][$i]['NOTES_COUNT'] = $notes['totalCount']; $cases['data'][$i]['NOTES_LIST'] = $notes['notes']; } return $cases; } public function startCase($httpData) { $case = new Cases(); $aData = $case->startCase($httpData->id, $_SESSION['USER_LOGGED']); $_SESSION['APPLICATION'] = $aData['APPLICATION']; $_SESSION['INDEX'] = $aData['INDEX']; $_SESSION['PROCESS'] = $aData['PROCESS']; $_SESSION['TASK'] = $httpData->id; $_SESSION['STEP_POSITION'] = 0; $_SESSION['CASES_REFRESH'] = true; $oCase = new Cases(); $aNextStep = $oCase->getNextStep($_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION']); $aNextStep['PAGE'] = '../cases/cases_Open?APP_UID=' . $aData['APPLICATION'] . '&DEL_INDEX=' . $aData['INDEX'] . '&action=draft'; $_SESSION['BREAKSTEP']['NEXT_STEP'] = $aNextStep; $this->redirect($aNextStep['PAGE']); } public function error($httpData) { $httpData->no = isset($httpData->no) ? $httpData->no : 0; switch ($httpData->no) { case 2: $tpl = $this->userUxBaseTemplate . PATH_SEP . 'noAppsMsg'; break; default: $tpl = $this->userUxBaseTemplate . PATH_SEP . 'error'; } $this->setView($tpl); $this->render(); } public function getUserArray($action, $userUid, $search = null) { $conf = new Configurations(); $confEnvSetting = $conf->getFormats(); $users = array(); $users[] = array("CURRENT_USER", G::LoadTranslation("ID_CURRENT_USER")); $users[] = array("ALL", G::LoadTranslation("ID_ALL_USERS")); //now get users, just for the Search action switch ($action) { case 'search_simple': case 'search': $cUsers = new Criteria('workflow'); $cUsers->clearSelectColumns(); $cUsers->addSelectColumn(UsersPeer::USR_UID); $cUsers->addSelectColumn(UsersPeer::USR_FIRSTNAME); $cUsers->addSelectColumn(UsersPeer::USR_LASTNAME); $cUsers->addSelectColumn(UsersPeer::USR_USERNAME); $cUsers->addSelectColumn(UsersPeer::USR_ID); if (!empty($search)) { $cUsers->add( $cUsers->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $search . '%', Criteria::LIKE)->addOr( $cUsers->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $search . '%', Criteria::LIKE) ) ); } $oDataset = UsersPeer::doSelectRS($cUsers); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { $usrFullName = $conf->usersNameFormatBySetParameters( $confEnvSetting["format"], $aRow["USR_USERNAME"], $aRow["USR_FIRSTNAME"], $aRow["USR_LASTNAME"] ); $users[] = array($aRow['USR_ID'], htmlentities($usrFullName, ENT_QUOTES, "UTF-8")); $oDataset->next(); } break; default: return $users; break; } return $users; } public function getCategoryArray() { $category = array(); $category[] = array("",G::LoadTranslation("ID_ALL_CATEGORIES")); $criteria = new Criteria('workflow'); $criteria->addSelectColumn(ProcessCategoryPeer::CATEGORY_UID); $criteria->addSelectColumn(ProcessCategoryPeer::CATEGORY_NAME); $dataset = ProcessCategoryPeer::doSelectRS($criteria); $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); while ($row = $dataset->getRow()) { $category[] = array($row['CATEGORY_UID'],$row['CATEGORY_NAME']); $dataset->next(); } return $category; } public function getAllUsersArray($action) { global $oAppCache; $users = array(); $users[] = array("CURRENT_USER",G::LoadTranslation("ID_CURRENT_USER")); $users[] = array("",G::LoadTranslation("ID_ALL_USERS")); if ($action == 'to_reassign') { //now get users, just for the Search action $cUsers = $oAppCache->getToReassignListCriteria(null); $cUsers->addSelectColumn(AppCacheViewPeer::USR_UID); if (g::MySQLSintaxis()) { $cUsers->addGroupByColumn(AppCacheViewPeer::USR_UID); } $cUsers->addAscendingOrderByColumn(AppCacheViewPeer::APP_CURRENT_USER); $oDataset = AppCacheViewPeer::doSelectRS($cUsers); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { $users[] = array($aRow['USR_UID'],$aRow['APP_CURRENT_USER']); $oDataset->next(); } } return $users; } public function getStatusArray($action, $userUid) { $status = array(); $aStatus = Application::$app_status_values; $status[] = array('', G::LoadTranslation('ID_ALL_STATUS')); foreach ($aStatus as $key => $value) { if ($action == 'search') { $status[] = array($value, G::LoadTranslation('ID_CASES_STATUS_' . $key)); } else { $status[] = array($key, G::LoadTranslation('ID_CASES_STATUS_' . $key)); } } return $status; } /** * Get the list of active processes * * @global type $oAppCache * @param type $action * @param type $userUid * @return array */ private function getProcessArray($action, $userUid, $search=null) { $processes = array(); $processes[] = array("", G::LoadTranslation("ID_ALL_PROCESS")); $cProcess = new Criteria("workflow"); $cProcess->clearSelectColumns(); $cProcess->addSelectColumn(ProcessPeer::PRO_ID); $cProcess->addSelectColumn(ProcessPeer::PRO_TITLE); $cProcess->add(ProcessPeer::PRO_STATUS, "ACTIVE"); if (!empty($search)) { $cProcess->add(ProcessPeer::PRO_TITLE, "%$search%", Criteria::LIKE); } $oDataset = ProcessPeer::doSelectRS($cProcess); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { $processes[] = array($aRow["PRO_ID"], $aRow["PRO_TITLE"]); $oDataset->next(); } return ($processes); } /** * Get the list of processes * @param type $httpData */ public function getProcesses($httpData) { $processes = []; foreach ($this->getProcessArray($httpData->t, null, $httpData->term) as $row) { $processes[] = [ 'id' => $row[0], 'label' => $row[1], 'value' => $row[1], ]; } print G::json_encode($processes); } /** * Get the list of users * @param type $httpData */ public function getUsers($httpData) { $users = []; foreach ($this->getUserArray($httpData->t, null, $httpData->term) as $row) { $users[] = [ 'id' => $row[0], 'label' => $row[1], 'value' => $row[1], ]; } print G::json_encode($users); } }