diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index d88c44935..535e27a13 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -76,7 +76,7 @@ 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) { @@ -1616,6 +1616,92 @@ 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. * @@ -1628,44 +1714,9 @@ class wsBase public function newCase ($processId, $userId, $taskId, $variables) { try { - $originalValues = array (); - - //Unset any variable, because we are starting a new case - if (isset( $_SESSION['APPLICATION'] )) { - $originalValues['APPLICATION'] = $_SESSION['APPLICATION']; - unset( $_SESSION['APPLICATION'] ); - } - - if (isset( $_SESSION['PROCESS'] )) { - $originalValues['PROCESS'] = $_SESSION['PROCESS']; - unset( $_SESSION['PROCESS'] ); - } - - if (isset( $_SESSION['TASK'] )) { - $originalValues['TASK'] = $_SESSION['TASK']; - unset( $_SESSION['TASK'] ); - } - - if (isset( $_SESSION['INDEX'] )) { - $originalValues['INDEX'] = $_SESSION['INDEX']; - unset( $_SESSION['INDEX'] ); - } - - if (isset( $_SESSION['USER_LOGGED'] )) { - $originalValues['USER_LOGGED'] = $_SESSION['USER_LOGGED']; - unset( $_SESSION['USER_LOGGED'] ); - } - - if (isset( $_SESSION['USR_USERNAME'] )) { - $originalValues['USR_USERNAME'] = $_SESSION['USR_USERNAME']; - unset( $_SESSION['USR_USERNAME'] ); - } - - if (isset( $_SESSION['STEP_POSITION'] )) { - $originalValues['STEP_POSITION'] = $_SESSION['STEP_POSITION']; - unset( $_SESSION['STEP_POSITION'] ); - } - + + $this->saveTemporarySessionVars(); + $Fields = array (); if (is_array( $variables ) && count( $variables ) > 0) { @@ -1677,7 +1728,7 @@ class wsBase if (! $pro) { $result = new wsResponse( 11, G::loadTranslation( 'ID_INVALID_PROCESS' ) . " " . $processId ); - + $this->restoreSessionVars(); return $result; } @@ -1708,14 +1759,14 @@ class wsBase if ($tasksInThisProcess > 1) { $result = new wsResponse( 13, G::loadTranslation( 'ID_MULTIPLE_STARTING_TASKS' ) ); - + $this->restoreSessionVars(); return $result; } } if ($founded == '') { $result = new wsResponse( 14, G::loadTranslation( 'ID_TASK_INVALID_USER_NOT_ASSIGNED_TASK' ) ); - + $this->restoreSessionVars(); return $result; } @@ -1738,31 +1789,8 @@ class wsBase $up_case = $oCase->updateCase( $caseId, $oldFields ); - //Restore original values - if (isset( $originalValues['APPLICATION'] )) { - $_SESSION['APPLICATION'] = $originalValues['APPLICATION']; - } - - if (isset( $originalValues['PROCESS'] )) { - $_SESSION['PROCESS'] = $originalValues['PROCESS']; - } - - if (isset( $originalValues['TASK'] )) { - $_SESSION['TASK'] = $originalValues['TASK']; - } - - if (isset( $originalValues['INDEX'] )) { - $_SESSION['INDEX'] = $originalValues['INDEX']; - } - - if (isset( $originalValues['USR_USERNAME'] )) { - $_SESSION['USR_USERNAME'] = $originalValues['USR_USERNAME']; - } - - if (isset( $originalValues['STEP_POSITION'] )) { - $_SESSION['STEP_POSITION'] = $originalValues['STEP_POSITION']; - } - + $this->restoreSessionVars(); + $result = new wsResponse( 0, G::loadTranslation( 'ID_STARTED_SUCCESSFULLY' ) ); $result->caseId = $caseId; $result->caseNumber = $caseNr; @@ -1770,7 +1798,7 @@ class wsBase return $result; } catch (Exception $e) { $result = new wsResponse( 100, $e->getMessage() ); - + $this->restoreSessionVars(); return $result; } }