diff --git a/workflow/engine/methods/cases/cases_Open.php b/workflow/engine/methods/cases/cases_Open.php
index 8e79f67b2..bdba04b22 100644
--- a/workflow/engine/methods/cases/cases_Open.php
+++ b/workflow/engine/methods/cases/cases_Open.php
@@ -2,24 +2,17 @@
/**
* cases_Open.php
*
- * ProcessMaker Open Source Edition
- * Copyright (C) 2004 - 2008 Colosa Inc.
+ * @see cases/casesList.js
+ * @see cases/cases_Step.php
+ * @see cases/cases_CatchSelfService.php
+ * @see cases/derivatedGmail.php
+ * @see cases/open.php
+ * @see controllers/Home::indexSingle()
+ * @see controllers/Home::startCase()
+ * @see pmGmail/sso.php
+ * @see webentry/access.php
*
- * 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.
+ * @link https://wiki.processmaker.com/3.2/Cases/Cases#Search_Criteria
*/
if(isset( $_GET['gmail']) && $_GET['gmail'] == 1){
@@ -50,7 +43,8 @@ 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['DEL_INDEX'] = $caseInstance->getCurrentDelegation( $_GET['APP_UID'], $_SESSION['USER_LOGGED'] );
+ //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 the application doesn't exist
if (is_null($_GET['APP_UID'])) {
@@ -67,87 +61,86 @@ try {
}
}
- $sAppUid = $_GET['APP_UID'];
- $iDelIndex = $_GET['DEL_INDEX'];
- $_action = isset($_GET['action']) ? $_GET['action'] : '';
+ $appUid = $_GET['APP_UID'];
+ $delIndex = $_GET['DEL_INDEX'];
+ $action = isset($_GET['action']) ? $_GET['action'] : '';
//loading application data
- $aFields = $caseInstance->loadCase( $sAppUid, $iDelIndex );
+ $fieldCase = $caseInstance->loadCase($appUid, $delIndex);
if (!isset($_SESSION['CURRENT_TASK'])) {
- $_SESSION['CURRENT_TASK'] = $aFields['TAS_UID'];
+ $_SESSION['CURRENT_TASK'] = $fieldCase['TAS_UID'];
} elseif ($_SESSION['CURRENT_TASK'] == '') {
- $_SESSION['CURRENT_TASK'] = $aFields['TAS_UID'];
+ $_SESSION['CURRENT_TASK'] = $fieldCase['TAS_UID'];
}
unset($_SESSION['ACTION']);
$flagJump = '';
- if ($_action == 'jump') {
+ if ($action == 'jump') {
$_SESSION['ACTION'] = 'jump';
$flagJump = 1;
}
- switch ($aFields['APP_STATUS']) {
+ switch ($fieldCase['APP_STATUS']) {
case 'DRAFT':
case 'TO_DO':
//Check if the case is in pause, check a valid record in table APP_DELAY
- $isPaused = AppDelay::isPaused($sAppUid, $iDelIndex);
+ $isPaused = AppDelay::isPaused($appUid, $delIndex);
//Check if the case is a waiting for a SYNCHRONOUS subprocess
- $subAppData = new \SubApplication();
- $caseSubprocessPending = $subAppData->isSubProcessWithCasePending($sAppUid, $iDelIndex);
+ $subAppData = new SubApplication();
+ $caseSubprocessPending = $subAppData->isSubProcessWithCasePending($appUid, $delIndex);
if ($isPaused || $caseSubprocessPending) {
//the case is paused show only the resume
- $_SESSION['APPLICATION'] = $sAppUid;
- $_SESSION['INDEX'] = $iDelIndex;
- $_SESSION['PROCESS'] = $aFields['PRO_UID'];
- $_SESSION['TASK'] = - 1;
+ $_SESSION['APPLICATION'] = $appUid;
+ $_SESSION['INDEX'] = $delIndex;
+ $_SESSION['PROCESS'] = $fieldCase['PRO_UID'];
+ $_SESSION['TASK'] = -1;
$_SESSION['STEP_POSITION'] = 0;
- $_SESSION['CURRENT_TASK'] = $aFields['TAS_UID'];
+ $_SESSION['CURRENT_TASK'] = $fieldCase['TAS_UID'];
- require_once (PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
+ require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
exit();
}
/**
* these routine is to verify if the case was acceded from advanced search list
*/
-
- if ($_action == 'search') {
+ if ($action == 'search') {
//verify if the case is with the current user
- $aData = AppDelegation::getCurrentUsers($sAppUid, $iDelIndex);
- if ($aData['USR_UID'] !== $_SESSION['USER_LOGGED'] && !empty($aData['USR_UID'])) {
+ $delegationUsers = AppDelegation::getCurrentUsers($appUid, $delIndex);
+ if ($delegationUsers['USR_UID'] !== $_SESSION['USER_LOGGED'] && !empty($delegationUsers['USR_UID'])) {
//distinct "" for selfservice
//so we show just the resume
$_SESSION['alreadyDerivated'] = true;
- $_SESSION['APPLICATION'] = $sAppUid;
- $_SESSION['INDEX'] = $iDelIndex;
- $_SESSION['PROCESS'] = $aFields['PRO_UID'];
- $_SESSION['TASK'] = - 1;
+ $_SESSION['APPLICATION'] = $appUid;
+ $_SESSION['INDEX'] = $delIndex;
+ $_SESSION['PROCESS'] = $fieldCase['PRO_UID'];
+ $_SESSION['TASK'] = -1;
$_SESSION['STEP_POSITION'] = 0;
- require_once (PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
+ require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
exit();
}
}
- //proceed and try to open the case
- $oAppDelegation = new AppDelegation();
- $aDelegation = $oAppDelegation->load( $sAppUid, $iDelIndex );
+ //Proceed and try to open the case
+ $appDelegation = new AppDelegation();
+ $delegationInfo = $appDelegation->load($appUid, $delIndex);
- //if there are no user in the delegation row, this case is in selfservice
- if ($aDelegation['USR_UID'] == "") {
- $_SESSION['APPLICATION'] = $sAppUid;
- $_SESSION['INDEX'] = $iDelIndex;
- $_SESSION['PROCESS'] = $aFields['PRO_UID'];
- $_SESSION['TASK'] = - 1;
+ //If there are no user in the delegation row, this case is in selfservice
+ if (empty($delegationInfo['USR_UID'])) {
+ $_SESSION['APPLICATION'] = $appUid;
+ $_SESSION['INDEX'] = $delIndex;
+ $_SESSION['PROCESS'] = $fieldCase['PRO_UID'];
+ $_SESSION['TASK'] = -1;
$_SESSION['STEP_POSITION'] = 0;
- $_SESSION['CURRENT_TASK'] = $aFields['TAS_UID'];
+ $_SESSION['CURRENT_TASK'] = $fieldCase['TAS_UID'];
- //if the task is in the valid selfservice tasks for this user, then catch the case, else just view the resume
- if ($caseInstance->isSelfService($_SESSION['USER_LOGGED'], $aFields['TAS_UID'], $sAppUid)) {
+ //If the task is in the valid selfservice tasks for this user, then catch the case, else just view the resume
+ if ($caseInstance->isSelfService($_SESSION['USER_LOGGED'], $fieldCase['TAS_UID'], $appUid)) {
require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_CatchSelfService.php');
} else {
require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
@@ -156,49 +149,56 @@ try {
exit();
}
- //If the current users is in the AppDelegation row, then open the case
- if (($aDelegation['USR_UID'] == $_SESSION['USER_LOGGED']) && $_action != 'sent') {
- $_SESSION['APPLICATION'] = $sAppUid;
- $_SESSION['INDEX'] = $iDelIndex;
+ //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')
+ {
+ $_SESSION['APPLICATION'] = $appUid;
+ $_SESSION['INDEX'] = $delIndex;
- if (is_null( $aFields['DEL_INIT_DATE'] )) {
- $caseInstance->setDelInitDate( $sAppUid, $iDelIndex );
- $aFields = $caseInstance->loadCase( $sAppUid, $iDelIndex );
+ if (is_null($fieldCase['DEL_INIT_DATE'])) {
+ $caseInstance->setDelInitDate($appUid, $delIndex);
+ $fieldCase = $caseInstance->loadCase($appUid, $delIndex);
}
- $_SESSION['PROCESS'] = $aFields['PRO_UID'];
- $_SESSION['TASK'] = $aFields['TAS_UID'];
+ $_SESSION['PROCESS'] = $fieldCase['PRO_UID'];
+ $_SESSION['TASK'] = $fieldCase['TAS_UID'];
$_SESSION['STEP_POSITION'] = 0;
/* Redirect to next step */
- unset( $_SESSION['bNoShowSteps'] );
+ unset($_SESSION['bNoShowSteps']);
- /* Execute Before Triggers for first Task*/
- $caseInstance->getExecuteTriggerProcess($sAppUid, 'OPEN');
- /*end Execute Before Triggers for first Task*/
+ /** Execute a trigger when a case is open */
+ $caseInstance->getExecuteTriggerProcess($appUid, 'OPEN');
- $aNextStep = $caseInstance->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] );
- $sPage = $aNextStep['PAGE'];
- G::header( 'location: ' . $sPage );
+ $nextStep = $caseInstance->getNextStep(
+ $_SESSION['PROCESS'],
+ $_SESSION['APPLICATION'],
+ $_SESSION['INDEX'],
+ $_SESSION['STEP_POSITION']
+ );
+ $pageOpenCase = $nextStep['PAGE'];
+
+ G::header('location: ' . $pageOpenCase);
} else {
- $_SESSION['APPLICATION'] = $sAppUid;
- $_SESSION['PROCESS'] = $aFields['PRO_UID'];
- $_SESSION['TASK'] = - 1;
+ $_SESSION['APPLICATION'] = $appUid;
+ $_SESSION['PROCESS'] = $fieldCase['PRO_UID'];
+ $_SESSION['TASK'] = -1;
$_SESSION['bNoShowSteps'] = 1;
$_SESSION['STEP_POSITION'] = 0;
//When the case have another user or current user doesn't have rights to this self-service,
//Just view the case Resume
- if ($_action === 'search' || $_action === 'to_reassign') {
+ if ($action === 'search' || $action === 'to_reassign') {
//We need to use the index sent with the corresponding record
- $_SESSION['INDEX'] = $iDelIndex;
+ $_SESSION['INDEX'] = $delIndex;
} else {
//Get DEL_INDEX
$criteria = new Criteria('workflow');
$criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX);
- $criteria->add(AppDelegationPeer::APP_UID, $sAppUid);
- $criteria->add(AppDelegationPeer::DEL_LAST_INDEX , 1);
+ $criteria->add(AppDelegationPeer::APP_UID, $appUid);
+ $criteria->add(AppDelegationPeer::DEL_LAST_INDEX, 1);
$rs = AppDelegationPeer::doSelectRS($criteria);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next();
@@ -206,29 +206,29 @@ try {
$_SESSION['INDEX'] = $row['DEL_INDEX'];
}
- $Fields = $caseInstance->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $flagJump);
+ $fields = $caseInstance->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $flagJump);
+ $_SESSION['CURRENT_TASK'] = $fields['TAS_UID'];
- $_SESSION['CURRENT_TASK'] = $Fields['TAS_UID'];
- require_once (PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
+ require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
}
break;
default: //APP_STATUS IS COMPLETED OR CANCELLED
- $_SESSION['APPLICATION'] = $sAppUid;
- $_SESSION['INDEX'] = $caseInstance->getCurrentDelegationCase( $_GET['APP_UID'] );
- $_SESSION['PROCESS'] = $aFields['PRO_UID'];
- $_SESSION['TASK'] = - 1;
+ $_SESSION['APPLICATION'] = $appUid;
+ $_SESSION['INDEX'] = $caseInstance->getCurrentDelegationCase($_GET['APP_UID']);
+ $_SESSION['PROCESS'] = $fieldCase['PRO_UID'];
+ $_SESSION['TASK'] = -1;
$_SESSION['STEP_POSITION'] = 0;
- $Fields = $caseInstance->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $flagJump);
- $_SESSION['CURRENT_TASK'] = $Fields['TAS_UID'];
+ $fields = $caseInstance->loadCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $flagJump);
+ $_SESSION['CURRENT_TASK'] = $fields['TAS_UID'];
- require_once (PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
+ require_once(PATH_METHODS . 'cases' . PATH_SEP . 'cases_Resume.php');
}
} catch (Exception $e) {
- $aMessage = array ();
- $aMessage['MESSAGE'] = $e->getMessage();
+ $message = [];
+ $message['MESSAGE'] = $e->getMessage();
$G_PUBLISH = new Publisher();
- $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', $aMessage );
- G::RenderPage( 'publishBlank', 'blank' );
+ $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $message);
+ G::RenderPage('publishBlank', 'blank');
}
diff --git a/workflow/engine/methods/cases/open.php b/workflow/engine/methods/cases/open.php
index 0b2b9685a..c30ea1c4b 100644
--- a/workflow/engine/methods/cases/open.php
+++ b/workflow/engine/methods/cases/open.php
@@ -1,4 +1,21 @@
getApplicationUIDByNumber(htmlspecialchars($_GET['APP_NUMBER']));
+ $caseInstance = new Cases();
+ $appUid = $caseInstance->getApplicationUIDByNumber(htmlspecialchars($_GET['APP_NUMBER']));
if (is_null($appUid)) {
throw new Exception(G::LoadTranslation('ID_CASE_DOES_NOT_EXISTS'));
}
} else {
$appUid = htmlspecialchars($_GET['APP_UID']);
}
-//If we don't have the DEL_INDEX we get the current delIndex. Data reporting tool does not have this information
+//If we don't have the DEL_INDEX we get the current delIndex for example data reporting tool and jump to
if (!isset($_GET['DEL_INDEX'])) {
- $oCase = new Cases();
- $delIndex = $oCase->getCurrentDelegation($appUid, $_SESSION['USER_LOGGED']);
+ $caseInstance = new Cases();
+ $delIndex = $caseInstance->getCurrentDelegation($appUid, $_SESSION['USER_LOGGED']);
if (is_null($delIndex)) {
throw new Exception(G::LoadTranslation('ID_CASE_IS_CURRENTLY_WITH_ANOTHER_USER'));
}
@@ -34,13 +51,11 @@ if (!isset($_GET['DEL_INDEX'])) {
$tasUid = (isset($_GET['TAS_UID'])) ? $tasUid = htmlspecialchars($_GET['TAS_UID']) : '';
-$oCase = new Cases();
+$caseInstance = new Cases();
$conf = new Configurations();
-
-$oHeadPublisher = headPublisher::getSingleton();
+$headPublisher = headPublisher::getSingleton();
$urlToRedirectAfterPause = 'casesListExtJs';
-
/*----------------------------------********---------------------------------*/
$licensedFeatures = PMLicensedFeatures::getSingleton();
if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) {
@@ -52,78 +67,110 @@ if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) {
}
/*----------------------------------********---------------------------------*/
-
-$oHeadPublisher->assign('urlToRedirectAfterPause', $urlToRedirectAfterPause);
-
-
-$oHeadPublisher->addExtJsScript('app/main', true);
-$oHeadPublisher->addExtJsScript('cases/open', true);
-$oHeadPublisher->assign('FORMATS', $conf->getFormats());
+$headPublisher->assign('urlToRedirectAfterPause', $urlToRedirectAfterPause);
+$headPublisher->addExtJsScript('app/main', true);
+$headPublisher->addExtJsScript('cases/open', true);
+$headPublisher->assign('FORMATS', $conf->getFormats());
$uri = '';
foreach ($_GET as $k => $v) {
$uri .= ($uri == '') ? "$k=$v" : "&$k=$v";
}
-if (isset($_GET['action']) && ($_GET['action'] == 'jump')) {
- $oNewCase = new \ProcessMaker\BusinessModel\Cases();
- //We need to get the last index OPEN or CLOSED (by Paused cases)
- //Set true because we need to check if the case is paused
- $delIndex = $oNewCase->getOneLastThread($appUid, true);
- $case = $oCase->loadCase($appUid, $delIndex, $_GET['action']);
-} else {
- $case = $oCase->loadCase($appUid, $delIndex);
+/**
+ * @todo, the action over the case from Open Case, Case Link and jump to needs to work similar, we need to have a PRD
+ */
+
+$case = $caseInstance->loadCase($appUid, $delIndex);
+$canClaimCase = false;
+$caseCanBeReview = false;
+if (isset($_GET['action'])) {
+ switch ($_GET['action']) {
+ case 'todo': //Inbox
+ case 'draft': //Draft
+ case 'sent': //Participated
+ case 'unassigned': //Unassigned
+ case 'paused': //Paused
+ case 'search': //Advanced search
+ //For add the validation in the others list we need to a have a PRD, because is change of the functionality
+ break;
+ case 'to_reassign': //Reassign
+ //From reassign: Review if the user can be claim the case
+ if ($caseInstance->isSelfService($_SESSION['USER_LOGGED'], $case['TAS_UID'], $appUid)) {
+ $canClaimCase = true;
+ }
+ break;
+ case 'to_revise': //Review
+ $proSupervisor = new ProcessSupervisor();
+ $caseCanBeReview = $proSupervisor->reviewCaseStatusForSupervisor($appUid, $delIndex);
+ break;
+ case 'jump': //Jump To action
+ //From Review: Review if the user is supervisor
+ if (isset($_GET['actionFromList']) && ($_GET['actionFromList'] === 'to_revise')) {
+ $proSupervisor = new ProcessSupervisor();
+ $caseCanBeReview = $proSupervisor->reviewCaseStatusForSupervisor($appUid, $delIndex);
+ }
+ //From Unassigned: Review if the user can be claim the case
+ if ($caseInstance->isSelfService($_SESSION['USER_LOGGED'], $case['TAS_UID'], $appUid)) {
+ $canClaimCase = true;
+ }
+ //From Paused: Get the last index OPEN or CLOSED (by Paused cases)
+ $bmCases = new BmCases();
+ $delIndex = $bmCases->getOneLastThread($appUid, true);
+ $case = $caseInstance->loadCase($appUid, $delIndex, $_GET['action']);
+ break;
+ }
}
-if (isset($_GET['actionFromList']) && ($_GET['actionFromList'] === 'to_revise')) {
- $oSupervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor();
- $caseCanBeReview = $oSupervisor->reviewCaseStatusForSupervisor($appUid, $delIndex);
- //Check if the case has the correct status for update the information from supervisor/review
- if (!$caseCanBeReview) {
- //The supervisor can not edit the information
- $script = 'cases_Open?';
- } else {
- //The supervisor can edit the information, the case are in TO_DO
- $script = 'cases_OpenToRevise?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex . '&TAS_UID=' . $tasUid;
- $oHeadPublisher->assign('treeToReviseTitle', G::loadtranslation('ID_STEP_LIST'));
- $casesPanelUrl = 'casesToReviseTreeContent?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex;
- $oHeadPublisher->assign('casesPanelUrl', $casesPanelUrl); //translations
- echo "
";
- }
-} else {
+/**
+ * Review if the user can be open the case from Review list
+ * @link https://wiki.processmaker.com/3.2/Cases/Process_Supervisor#Review
+ */
+if (!$caseCanBeReview) {
+ //The supervisor can not edit the information
$script = 'cases_Open?';
+} else {
+ //The supervisor can edit the information, the case are in TO_DO
+ $script = 'cases_OpenToRevise?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex . '&TAS_UID=' . $tasUid;
+ $headPublisher->assign('treeToReviseTitle', G::loadtranslation('ID_STEP_LIST'));
+ $casesPanelUrl = 'casesToReviseTreeContent?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex;
+ $headPublisher->assign('casesPanelUrl', $casesPanelUrl); //translations
+ echo "";
}
$process = new Process();
$fields = $process->load($case['PRO_UID']);
$isBpmn = $fields['PRO_BPMN'] === 1 ? true : false;
+/**
+ * Review if the user can be open summary form
+ * @link https://wiki.processmaker.com/3.2/Case_Summary#Viewing_the_Custom_Dynaform_when_Opening_a_Case
+ */
$showCustomForm = false;
/*----------------------------------********---------------------------------*/
-
-$respView = $oCase->getAllObjectsFrom($case['PRO_UID'], $appUid, $case['TAS_UID'], $_SESSION['USER_LOGGED'], 'VIEW');
+$respView = $caseInstance->getAllObjectsFrom($case['PRO_UID'], $appUid, $case['TAS_UID'], $_SESSION['USER_LOGGED'], 'VIEW');
$viewSummaryForm = isset($respView['SUMMARY_FORM']) && $respView['SUMMARY_FORM'] === 1 ? true : false;
$isNoEmpty = isset($fields['PRO_DYNAFORMS']['PROCESS']) && !empty($fields['PRO_DYNAFORMS']['PROCESS']);
if ($isBpmn && $viewSummaryForm && $isNoEmpty) {
$showCustomForm = true;
}
-
/*----------------------------------********---------------------------------*/
-$oStep = new Step();
-$oStep = $oStep->loadByProcessTaskPosition($case['PRO_UID'], $case['TAS_UID'], 1);
-$oHeadPublisher->assign('uri', $script . $uri);
-$oHeadPublisher->assign('_APP_NUM', '#: ' . $case['APP_NUMBER']);
-$oHeadPublisher->assign('_PROJECT_TYPE', $isBpmn ? 'bpmn' : 'classic');
-$oHeadPublisher->assign('_PRO_UID', $case['PRO_UID']);
-$oHeadPublisher->assign('_APP_UID', $appUid);
-$oHeadPublisher->assign('_ENV_CURRENT_DATE', $conf->getSystemDate(date('Y-m-d')));
-$oHeadPublisher->assign('_ENV_CURRENT_DATE_NO_FORMAT', date('Y-m-d-h-i-A'));
-$oHeadPublisher->assign('idfirstform', is_null($oStep) ? '-1' : $oStep->getStepUidObj());
-$oHeadPublisher->assign('appStatus', $case['APP_STATUS']);
-$oHeadPublisher->assign('tbarGmail', $tBarGmail);
-$oHeadPublisher->assign('showCustomForm', $showCustomForm);
+$step = new Step();
+$step = $step->loadByProcessTaskPosition($case['PRO_UID'], $case['TAS_UID'], 1);
+$headPublisher->assign('uri', $script . $uri);
+$headPublisher->assign('_APP_NUM', '#: ' . $case['APP_NUMBER']);
+$headPublisher->assign('_PROJECT_TYPE', $isBpmn ? 'bpmn' : 'classic');
+$headPublisher->assign('_PRO_UID', $case['PRO_UID']);
+$headPublisher->assign('_APP_UID', $appUid);
+$headPublisher->assign('_ENV_CURRENT_DATE', $conf->getSystemDate(date('Y-m-d')));
+$headPublisher->assign('_ENV_CURRENT_DATE_NO_FORMAT', date('Y-m-d-h-i-A'));
+$headPublisher->assign('idfirstform', is_null($step) ? '-1' : $step->getStepUidObj());
+$headPublisher->assign('appStatus', $case['APP_STATUS']);
+$headPublisher->assign('tbarGmail', $tBarGmail);
+$headPublisher->assign('showCustomForm', $showCustomForm);
+$headPublisher->assign('canClaimCase', $canClaimCase);
if (!isset($_SESSION['APPLICATION']) || !isset($_SESSION['TASK']) || !isset($_SESSION['INDEX'])) {
$_SESSION['PROCESS'] = $case['PRO_UID'];
diff --git a/workflow/engine/templates/cases/open.js b/workflow/engine/templates/cases/open.js
index 4bb148437..02bf72736 100644
--- a/workflow/engine/templates/cases/open.js
+++ b/workflow/engine/templates/cases/open.js
@@ -562,7 +562,8 @@ Ext.onReady(function(){
return key === false ? result : null;
}
- if (this.showCustomForm && this.showCustomForm === true && getParameterURL('action') === 'unassigned') {
+ var urlAction = getParameterURL('action');
+ if (this.showCustomForm && this.showCustomForm === true && (urlAction === 'unassigned' || this.canClaimCase === true)) {
navPanel.items[navPanel.items.length] = navPanelBottom;
}