diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 60abaaf81..f81ed95b2 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -30,6 +30,8 @@ class G { + public $sessionVar = array(); //SESSION temporary array store. + /** * is_https * @return void @@ -3130,7 +3132,7 @@ class G } else { $setup['MESS_RAUTH'] = 1; } - + if (count($setup) == 0 || !isset($setup['MESS_ENGINE']) || !isset($setup['MESS_SERVER']) || !isset($setup['MESS_ENABLED']) || !isset($setup['MESS_RAUTH']) || $setup['MESS_SERVER'] == '') { return G::LoadTranslation('ID_EMAIL_ENGINE_IS_NOT_CONFIGURED'); @@ -4763,6 +4765,90 @@ class G } return false; } + + /** + * Save the $_SESSION variables into $sessionVar array, to unset them temporary. + * + */ + public function sessionVarSave() + { + //Unset any variable + $this->sessionVar = array(); + + if (isset($_SESSION["APPLICATION"])) { + $this->sessionVar["APPLICATION"] = $_SESSION["APPLICATION"]; + } + + if (isset($_SESSION["INDEX"])) { + $this->sessionVar["INDEX"] = $_SESSION["INDEX"]; + } + + if (isset($_SESSION["PROCESS"])) { + $this->sessionVar["PROCESS"] = $_SESSION["PROCESS"]; + } + + if (isset($_SESSION["TASK"])) { + $this->sessionVar["TASK"] = $_SESSION["TASK"]; + } + + if (isset($_SESSION["USER_LOGGED"])) { + $this->sessionVar["USER_LOGGED"] = $_SESSION["USER_LOGGED"]; + } + + if (isset($_SESSION["USR_USERNAME"])) { + $this->sessionVar["USR_USERNAME"] = $_SESSION["USR_USERNAME"]; + } + + if (isset($_SESSION["STEP_POSITION"])) { + $this->sessionVar["STEP_POSITION"] = $_SESSION["STEP_POSITION"]; + } + } + + /** + * Restore the session variables with values of $sessionVar array, if this is set. + * + */ + public function sessionVarRestore() + { + if (count($this->sessionVar) > 0) { + //Restore original values + unset($_SESSION["APPLICATION"]); + unset($_SESSION["INDEX"]); + unset($_SESSION["PROCESS"]); + unset($_SESSION["TASK"]); + unset($_SESSION["USER_LOGGED"]); + unset($_SESSION["USR_USERNAME"]); + unset($_SESSION["STEP_POSITION"]); + + if (isset($this->sessionVar["APPLICATION"])) { + $_SESSION["APPLICATION"] = $this->sessionVar["APPLICATION"]; + } + + if (isset($this->sessionVar["INDEX"])) { + $_SESSION["INDEX"] = $this->sessionVar["INDEX"]; + } + + if (isset($this->sessionVar["PROCESS"])) { + $_SESSION["PROCESS"] = $this->sessionVar["PROCESS"]; + } + + if (isset($this->sessionVar["TASK"])) { + $_SESSION["TASK"] = $this->sessionVar["TASK"]; + } + + if (isset($this->sessionVar["USER_LOGGED"])) { + $_SESSION["USER_LOGGED"] = $this->sessionVar["USER_LOGGED"]; + } + + if (isset($this->sessionVar["USR_USERNAME"])) { + $_SESSION["USR_USERNAME"] = $this->sessionVar["USR_USERNAME"]; + } + + if (isset($this->sessionVar["STEP_POSITION"])) { + $_SESSION["STEP_POSITION"] = $this->sessionVar["STEP_POSITION"]; + } + } + } } /** diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index f6cd3314a..9e99fa4cf 100755 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -1485,6 +1485,16 @@ function PMFAddInputDocument( $file = "path_to_file/myfile.txt" ) { G::LoadClass("case"); + + $g = new G(); + + $g->sessionVarSave(); + + $_SESSION["APPLICATION"] = $caseUid; + $_SESSION["INDEX"] = $delIndex; + $_SESSION["TASK"] = $taskUid; + $_SESSION["USER_LOGGED"] = $userUid; + $case = new Cases(); $appDocUid = $case->addInputDocument( @@ -1502,6 +1512,8 @@ function PMFAddInputDocument( $file ); + $g->sessionVarRestore(); + return $appDocUid; } @@ -1518,14 +1530,26 @@ function PMFAddInputDocument( */ function PMFGenerateOutputDocument ($outputID, $sApplication = null, $index = null, $sUserLogged = null) { - if (! $sApplication) { - $sApplication = $_SESSION['APPLICATION']; + $g = new G(); + + $g->sessionVarSave(); + + if ($sApplication) { + $_SESSION["APPLICATION"] = $sApplication; + } else { + $sApplication = $_SESSION["APPLICATION"]; } - if (! $index) { - $index = $_SESSION['INDEX']; + + if ($index) { + $_SESSION["INDEX"] = $index; + } else { + $index = $_SESSION["INDEX"]; } - if (! $sUserLogged) { - $sUserLogged = $_SESSION['USER_LOGGED']; + + if ($sUserLogged) { + $_SESSION["USER_LOGGED"] = $sUserLogged; + } else { + $sUserLogged = $_SESSION["USER_LOGGED"]; } G::LoadClass( 'case' ); @@ -1688,6 +1712,8 @@ function PMFGenerateOutputDocument ($outputID, $sApplication = null, $index = nu break; } } + + $g->sessionVarRestore(); } /** @@ -2157,7 +2183,15 @@ function PMFgetLabelOption ($PROCESS, $DYNAFORM_UID, $FIELD_NAME, $FIELD_SELECTE */ function PMFRedirectToStep ($sApplicationUID, $iDelegation, $sStepType, $sStepUid) { - $iDelegation = intval( $iDelegation ); + $g = new G(); + + $g->sessionVarSave(); + + $iDelegation = intval($iDelegation); + + $_SESSION["APPLICATION"] = $sApplicationUID; + $_SESSION["INDEX"] = $iDelegation; + require_once 'classes/model/AppDelegation.php'; $oCriteria = new Criteria( 'workflow' ); $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); @@ -2206,10 +2240,15 @@ function PMFRedirectToStep ($sApplicationUID, $iDelegation, $sStepType, $sStepUi $aFields['APP_DATA'] = $oPMScript->aFields; $oCase->updateCase( $sApplicationUID, $aFields ); } + + $g->sessionVarRestore(); + G::header( 'Location: ' . 'cases_Step?TYPE=' . $sStepType . '&UID=' . $sStepUid . '&POSITION=' . $oTheStep->getStepPosition() . '&ACTION=' . $sAction ); die(); } } + + $g->sessionVarRestore(); } /** diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index fe9a6f8dd..03cf2bb0b 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -77,7 +77,6 @@ class wsBase { public $stored_system_variables; //boolean public $wsSessionId; //web service session id, if the wsbase function is used from a WS request - private $originalValues = array (); // SESSION temporary array store. public function __construct ($params = null) { @@ -1685,92 +1684,6 @@ class wsBase } } - /** - * save the $_SESSION variables into $originalValues array, to unset them temporary. - * - */ - private function saveTemporarySessionVars() - { - //Unset any variable, because we are starting a new case - if (isset( $_SESSION['APPLICATION'] )) { - $this->originalValues['APPLICATION'] = $_SESSION['APPLICATION']; - unset( $_SESSION['APPLICATION'] ); - } - - if (isset( $_SESSION['PROCESS'] )) { - $this->originalValues['PROCESS'] = $_SESSION['PROCESS']; - unset( $_SESSION['PROCESS'] ); - } - - if (isset( $_SESSION['TASK'] )) { - $this->originalValues['TASK'] = $_SESSION['TASK']; - unset( $_SESSION['TASK'] ); - } - - if (isset( $_SESSION['INDEX'] )) { - $this->originalValues['INDEX'] = $_SESSION['INDEX']; - unset( $_SESSION['INDEX'] ); - } - - if (isset( $_SESSION['USER_LOGGED'] )) { - $this->originalValues['USER_LOGGED'] = $_SESSION['USER_LOGGED']; - unset( $_SESSION['USER_LOGGED'] ); - } - - if (isset( $_SESSION['USR_USERNAME'] )) { - $this->originalValues['USR_USERNAME'] = $_SESSION['USR_USERNAME']; - unset( $_SESSION['USR_USERNAME'] ); - } - - if (isset( $_SESSION['STEP_POSITION'] )) { - $this->originalValues['STEP_POSITION'] = $_SESSION['STEP_POSITION']; - unset( $_SESSION['STEP_POSITION'] ); - } - } - - /** - * restore the Session variables with values of $originalValues array, if this is set. - * - */ - private function restoreSessionVars() - { - //Restore original values - if (isset( $this->originalValues['APPLICATION'] )) { - $_SESSION['APPLICATION'] = $this->originalValues['APPLICATION']; - unset( $this->originalValues['APPLICATION']); - } - - if (isset( $this->originalValues['PROCESS'] )) { - $_SESSION['PROCESS'] = $this->originalValues['PROCESS']; - unset( $this->originalValues['PROCESS']); - } - - if (isset( $this->originalValues['TASK'] )) { - $_SESSION['TASK'] = $this->originalValues['TASK']; - unset( $this->originalValues['TASK']); - } - - if (isset( $this->originalValues['INDEX'] )) { - $_SESSION['INDEX'] = $this->originalValues['INDEX']; - unset( $this->originalValues['INDEX']); - } - - if (isset( $this->originalValues['USR_USERNAME'] )) { - $_SESSION['USR_USERNAME'] = $this->originalValues['USR_USERNAME']; - unset( $this->originalValues['USR_USERNAME']); - } - - if (isset( $this->originalValues['USER_LOGGED'] )) { - $_SESSION['USER_LOGGED'] = $this->originalValues['USER_LOGGED']; - unset( $this->originalValues['USER_LOGGED']); - } - - if (isset( $this->originalValues['STEP_POSITION'] )) { - $_SESSION['STEP_POSITION'] = $this->originalValues['STEP_POSITION']; - unset( $this->originalValues['STEP_POSITION']); - } - } - /** * new Case begins a new case under the name of the logged-in user. * @@ -1782,9 +1695,14 @@ class wsBase */ public function newCase ($processId, $userId, $taskId, $variables) { - try { + $g = new G(); - $this->saveTemporarySessionVars(); + try { + $g->sessionVarSave(); + + $_SESSION["PROCESS"] = $processId; + $_SESSION["TASK"] = $taskId; + $_SESSION["USER_LOGGED"] = $userId; $Fields = array (); @@ -1797,7 +1715,9 @@ class wsBase if (! $pro) { $result = new wsResponse( 11, G::loadTranslation( 'ID_INVALID_PROCESS' ) . " " . $processId ); - $this->restoreSessionVars(); + + $g->sessionVarRestore(); + return $result; } @@ -1828,14 +1748,18 @@ class wsBase if ($tasksInThisProcess > 1) { $result = new wsResponse( 13, G::loadTranslation( 'ID_MULTIPLE_STARTING_TASKS' ) ); - $this->restoreSessionVars(); + + $g->sessionVarRestore(); + return $result; } } if ($founded == '') { $result = new wsResponse( 14, G::loadTranslation( 'ID_TASK_INVALID_USER_NOT_ASSIGNED_TASK' ) ); - $this->restoreSessionVars(); + + $g->sessionVarRestore(); + return $result; } @@ -1858,16 +1782,18 @@ class wsBase $up_case = $oCase->updateCase( $caseId, $oldFields ); - $this->restoreSessionVars(); - $result = new wsResponse( 0, G::loadTranslation( 'ID_STARTED_SUCCESSFULLY' ) ); $result->caseId = $caseId; $result->caseNumber = $caseNr; + $g->sessionVarRestore(); + return $result; } catch (Exception $e) { $result = new wsResponse( 100, $e->getMessage() ); - $this->restoreSessionVars(); + + $g->sessionVarRestore(); + return $result; } } @@ -1969,7 +1895,15 @@ class wsBase */ public function derivateCase ($userId, $caseId, $delIndex, $bExecuteTriggersBeforeAssignment = false) { + $g = new G(); + try { + $g->sessionVarSave(); + + $_SESSION["APPLICATION"] = $caseId; + $_SESSION["INDEX"] = $delIndex; + $_SESSION["USER_LOGGED"] = $userId; + $sStatus = 'TO_DO'; $varResponse = ''; @@ -2357,10 +2291,14 @@ class wsBase $res['routing'] = $aCurrentUsers; + $g->sessionVarRestore(); + return $res; } catch (Exception $e) { $result = new wsResponse( 100, $e->getMessage() ); + $g->sessionVarRestore(); + return $result; } } @@ -2377,19 +2315,31 @@ class wsBase */ public function executeTrigger ($userId, $caseId, $triggerIndex, $delIndex) { + $g = new G(); + try { + $g->sessionVarSave(); + + $_SESSION["APPLICATION"] = $caseId; + $_SESSION["INDEX"] = $delIndex; + $_SESSION["USER_LOGGED"] = $userId; + $oAppDel = new AppDelegation(); $appdel = $oAppDel->Load( $caseId, $delIndex ); if ($userId != $appdel['USR_UID']) { $result = new wsResponse( 17, G::loadTranslation( 'ID_CASE_ASSIGNED_ANOTHER_USER' ) ); + $g->sessionVarRestore(); + return $result; } if ($appdel['DEL_FINISH_DATE'] != null) { $result = new wsResponse( 18, G::loadTranslation( 'ID_CASE_DELEGATION_ALREADY_CLOSED' ) ); + $g->sessionVarRestore(); + return $result; } @@ -2408,6 +2358,8 @@ class wsBase if ($aRow['APP_DISABLE_ACTION_USER'] != 0 && $aRow['APP_DISABLE_ACTION_DATE'] != '') { $result = new wsResponse( 19, G::loadTranslation( 'ID_CASE_IN_STATUS' ) . " " . $aRow['APP_TYPE'] ); + $g->sessionVarRestore(); + return $result; } } @@ -2448,17 +2400,22 @@ class wsBase $data['TRIGGER_INDEX'] = $triggerIndex; $result = new wsResponse( 100, G::loadTranslation( 'ID_INVALID_TRIGGER', SYS_LANG, $data ) ); + $g->sessionVarRestore(); + return $result; } $result = new wsResponse( 0, G::loadTranslation( 'ID_EXECUTED' ) . ": " . trim( $row['TRI_WEBBOT'] ) ); //$result = new wsResponse(0, 'executed: ' . print_r($oPMScript, 1)); + $g->sessionVarRestore(); return $result; } catch (Exception $e) { $result = new wsResponse( 100, $e->getMessage() ); + $g->sessionVarRestore(); + return $result; } } @@ -2555,10 +2512,20 @@ class wsBase */ public function reassignCase ($sessionId, $caseId, $delIndex, $userIdSource, $userIdTarget) { + $g = new G(); + try { + $g->sessionVarSave(); + + $_SESSION["APPLICATION"] = $caseId; + $_SESSION["INDEX"] = $delIndex; + $_SESSION["USER_LOGGED"] = $userIdSource; + if ($userIdTarget == $userIdSource) { $result = new wsResponse( 30, G::loadTranslation( 'ID_TARGET_ORIGIN_USER_SAME' ) ); + $g->sessionVarRestore(); + return $result; } @@ -2576,6 +2543,8 @@ class wsBase if (! is_array( $aRow )) { $result = new wsResponse( 31, G::loadTranslation( 'ID_INVALID_ORIGIN_USER' ) ); + $g->sessionVarRestore(); + return $result; } @@ -2588,6 +2557,8 @@ class wsBase if (! is_array( $aRow )) { $result = new wsResponse( 32, G::loadTranslation( 'ID_CASE_NOT_OPEN' ) ); + $g->sessionVarRestore(); + return $result; } @@ -2612,6 +2583,8 @@ class wsBase if (! is_array( $aRow )) { $result = new wsResponse( 33, G::loadTranslation( 'ID_INVALID_CASE_DELEGATION_INDEX' ) ); + $g->sessionVarRestore(); + return $result; } @@ -2622,6 +2595,8 @@ class wsBase if (! in_array( $userIdTarget, $userList )) { $result = new wsResponse( 34, G::loadTranslation( 'ID_TARGET_USER_DOES_NOT_HAVE_RIGHTS' ) ); + $g->sessionVarRestore(); + return $result; } @@ -2639,6 +2614,8 @@ class wsBase if (! is_array( $aRow )) { $result = new wsResponse( 35, G::loadTranslation( 'ID_TARGET_USER_DESTINATION_INVALID' ) ); + $g->sessionVarRestore(); + return $result; } @@ -2650,16 +2627,22 @@ class wsBase if (! $var) { $result = new wsResponse( 36, G::loadTranslation( 'ID_CASE_COULD_NOT_REASSIGNED' ) ); + $g->sessionVarRestore(); + return $result; } $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULLY' ) ); + $g->sessionVarRestore(); + return $result; } catch (Exception $e) { $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage() ); + $g->sessionVarRestore(); + return $result; } } @@ -2884,10 +2867,18 @@ class wsBase */ public function deleteCase ($caseUid) { + $g = new G(); + try { + $g->sessionVarSave(); + + $_SESSION["APPLICATION"] = $caseUid; + if (empty( $caseUid )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " caseUid" ); + $g->sessionVarRestore(); + return $result; } @@ -2900,10 +2891,14 @@ class wsBase $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); + $g->sessionVarRestore(); + return $result; } catch (Exception $e) { $result = new wsResponse(100, $e->getMessage()); + $g->sessionVarRestore(); + return $result; } } @@ -2918,22 +2913,36 @@ class wsBase */ public function cancelCase ($caseUid, $delIndex, $userUid) { + $g = new G(); + try { + $g->sessionVarSave(); + + $_SESSION["APPLICATION"] = $caseUid; + $_SESSION["INDEX"] = $delIndex; + $_SESSION["USER_LOGGED"] = $userUid; + if (empty( $caseUid )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " caseUid" ); + $g->sessionVarRestore(); + return $result; } if (empty( $delIndex )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " delIndex" ); + $g->sessionVarRestore(); + return $result; } if (empty( $userUid )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " userUid" ); + $g->sessionVarRestore(); + return $result; } @@ -2946,10 +2955,14 @@ class wsBase $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); + $g->sessionVarRestore(); + return $result; } catch (Exception $e) { $result = new wsResponse(100, $e->getMessage()); + $g->sessionVarRestore(); + return $result; } } @@ -2966,22 +2979,36 @@ class wsBase */ public function pauseCase ($caseUid, $delIndex, $userUid, $unpauseDate = null) { + $g = new G(); + try { + $g->sessionVarSave(); + + $_SESSION["APPLICATION"] = $caseUid; + $_SESSION["INDEX"] = $delIndex; + $_SESSION["USER_LOGGED"] = $userUid; + if (empty( $caseUid )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " caseUid" ); + $g->sessionVarRestore(); + return $result; } if (empty( $delIndex )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " delIndex" ); + $g->sessionVarRestore(); + return $result; } if (empty( $userUid )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " userUid" ); + $g->sessionVarRestore(); + return $result; } @@ -2989,6 +3016,8 @@ class wsBase if (! preg_match( "/^\d{4}-\d{2}-\d{2}$/", $unpauseDate )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_INVALID_DATA" ) . " $unpauseDate" ); + $g->sessionVarRestore(); + return $result; } } @@ -3002,10 +3031,14 @@ class wsBase $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); + $g->sessionVarRestore(); + return $result; } catch (Exception $e) { $result = new wsResponse(100, $e->getMessage()); + $g->sessionVarRestore(); + return $result; } } @@ -3020,22 +3053,36 @@ class wsBase */ public function unpauseCase ($caseUid, $delIndex, $userUid) { + $g = new G(); + try { + $g->sessionVarSave(); + + $_SESSION["APPLICATION"] = $caseUid; + $_SESSION["INDEX"] = $delIndex; + $_SESSION["USER_LOGGED"] = $userUid; + if (empty( $caseUid )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " caseUid" ); + $g->sessionVarRestore(); + return $result; } if (empty( $delIndex )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " delIndex" ); + $g->sessionVarRestore(); + return $result; } if (empty( $userUid )) { $result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " userUid" ); + $g->sessionVarRestore(); + return $result; } @@ -3048,10 +3095,14 @@ class wsBase $result = array ("status_code" => $res->status_code,"message" => $res->message,"timestamp" => $res->timestamp ); + $g->sessionVarRestore(); + return $result; } catch (Exception $e) { $result = new wsResponse(100, $e->getMessage()); + $g->sessionVarRestore(); + return $result; } }