diff --git a/tests/unit/workflow/engine/methods/cases/CasesOpenTest.php b/tests/unit/workflow/engine/methods/cases/CasesOpenTest.php new file mode 100644 index 000000000..0d5a262a8 --- /dev/null +++ b/tests/unit/workflow/engine/methods/cases/CasesOpenTest.php @@ -0,0 +1,90 @@ +get() + ->first(); + + $_SESSION['USER_LOGGED'] = $user['USR_UID']; + $_SESSION['USR_USERNAME'] = $user['USR_USERNAME']; + + $G_PUBLISH = new Publisher(); + + $RBAC = RBAC::getSingleton(PATH_DATA, session_id()); + $RBAC->initRBAC(); + $RBAC->loadUserRolePermission('PROCESSMAKER', $_SESSION['USER_LOGGED']); + + $task = factory(Task::class)->create(); + $dynaform = factory(Dynaform::class)->create(); + $process = factory(Process::class)->create([ + 'PRO_DYNAFORMS' => $dynaform['DYN_UID'] + ]); + $application = factory(Application::class)->create([ + 'PRO_UID' => $process['PRO_UID'], + 'APP_STATUS' => 'COMPLETED' + ]); + $delegation = factory(Delegation::class)->create([ + 'APP_UID' => $application['APP_UID'], + 'TAS_UID' => $task['TAS_UID'], + 'DEL_INDEX' => 1, + 'DEL_THREAD_STATUS' => 'CLOSED' + ]); + + factory(Delegation::class)->create([ + 'APP_UID' => $application['APP_UID'], + 'TAS_UID' => $task['TAS_UID'], + 'DEL_INDEX' => 2, + 'DEL_LAST_INDEX' => 1, + 'DEL_THREAD_STATUS' => 'OPEN', + 'DEL_DELEGATE_DATE' => $delegation['DEL_DELEGATE_DATE'] + ]); + + $_GET['APP_UID'] = $application['APP_UID']; + $_GET['DEL_INDEX'] = $delegation['DEL_INDEX']; + $_GET['action'] = 'jump'; + + define("PATH_GULLIVER_HOME", PATH_TRUNK . "gulliver" . PATH_SEP); + define("PATH_TEMPLATE", PATH_GULLIVER_HOME . "templates" . PATH_SEP); + + //Turn on output buffering + ob_start(); + + //Call the tested file + require_once PATH_METHODS . 'cases/cases_Open.php'; + + //Return the contents of the output buffer + $outputBuffer = ob_get_contents(); + + //Clean the output buffer and turn off output buffering + ob_end_clean(); + + $res = ''; + $this->assertContains($res, $outputBuffer); + } +} diff --git a/workflow/engine/methods/cases/cases_Open.php b/workflow/engine/methods/cases/cases_Open.php index bdba04b22..0f01f0ebd 100644 --- a/workflow/engine/methods/cases/cases_Open.php +++ b/workflow/engine/methods/cases/cases_Open.php @@ -1,4 +1,5 @@ userCanAccess( 'PM_CASES' ) != 1) { - switch ($RBAC->userCanAccess( 'PM_CASES' )) { - case - 2: - G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_SYSTEM', 'error', 'labels' ); - G::header( 'location: ../login/login' ); +if ($RBAC->userCanAccess('PM_CASES') != 1) { + switch ($RBAC->userCanAccess('PM_CASES')) { + case -2: + G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_SYSTEM', 'error', 'labels'); + G::header('location: ../login/login'); break; - case - 1: + case -1: default: - G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels' ); - G::header( 'location: ../login/login' ); + G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); + G::header('location: ../login/login'); break; } } @@ -42,21 +43,30 @@ Cases::clearCaseSessionData(); try { //Loading data for a Jump request if (!isset($_GET['APP_UID']) && isset($_GET['APP_NUMBER'])) { - $_GET['APP_UID'] = $caseInstance->getApplicationUIDByNumber( $_GET['APP_NUMBER'] ); + $_GET['APP_UID'] = $caseInstance->getApplicationUIDByNumber($_GET['APP_NUMBER']); //Get the index related to the userLogged but this thread can be OPEN or CLOSED - $_GET['DEL_INDEX'] = $caseInstance->getCurrentDelegation($_GET['APP_UID'], $_SESSION['USER_LOGGED']); + if (isset($_GET['actionFromList'])) { + if ($_GET['actionFromList'] == 'unassigned') { + $_SESSION['APPLICATION'] = $_GET['APP_UID']; + $_GET['DEL_INDEX'] = $caseInstance->getCurrentDelegation($_GET['APP_UID'], $_SESSION['USER_LOGGED'], true); + } else { + $_GET['DEL_INDEX'] = $caseInstance->getCurrentDelegation($_GET['APP_UID'], $_SESSION['USER_LOGGED']); + } + } else { + $_GET['DEL_INDEX'] = $caseInstance->getCurrentDelegation($_GET['APP_UID'], $_SESSION['USER_LOGGED']); + } //if the application doesn't exist if (is_null($_GET['APP_UID'])) { - G::SendMessageText( G::LoadTranslation( 'ID_CASE_DOES_NOT_EXISTS' ), 'info' ); - G::header( 'location: casesListExtJs' ); + G::SendMessageText(G::LoadTranslation('ID_CASE_DOES_NOT_EXISTS'), 'info'); + G::header('location: casesListExtJs'); exit(); } //if the application exists but the if (is_null($_GET['DEL_INDEX'])) { - G::SendMessageText( G::LoadTranslation( 'ID_CASE_IS_CURRENTLY_WITH_ANOTHER_USER' ), 'info' ); - G::header( 'location: casesListExtJs' ); + G::SendMessageText(G::LoadTranslation('ID_CASE_IS_CURRENTLY_WITH_ANOTHER_USER'), 'info'); + G::header('location: casesListExtJs'); exit(); } } @@ -123,7 +133,6 @@ try { require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php'); exit(); } - } //Proceed and try to open the case @@ -151,8 +160,8 @@ try { //If the current users is in the AppDelegation row and the thread is open will be open the case if (($delegationInfo['USR_UID'] == $_SESSION['USER_LOGGED'] && $delegationInfo['DEL_THREAD_STATUS'] === 'OPEN') - && $action != 'sent') - { + && $action != 'sent' + ) { $_SESSION['APPLICATION'] = $appUid; $_SESSION['INDEX'] = $delIndex; @@ -180,7 +189,6 @@ try { $pageOpenCase = $nextStep['PAGE']; G::header('location: ' . $pageOpenCase); - } else { $_SESSION['APPLICATION'] = $appUid; $_SESSION['PROCESS'] = $fieldCase['PRO_UID']; @@ -210,7 +218,6 @@ try { $_SESSION['CURRENT_TASK'] = $fields['TAS_UID']; require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php'); - } break; default: //APP_STATUS IS COMPLETED OR CANCELLED @@ -231,4 +238,3 @@ try { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $message); G::RenderPage('publishBlank', 'blank'); } -