BUG 9881 PM 2.0.44 testing 3. Al enviar una combinacion invalidad de parametros a PMFNewCase() se vence la sesion del usuario.

PROBLEM  The session vars were replaced with invalid values.
SOLUTION Restore the session vars with healty values.
This commit is contained in:
Ralph Asendeteufrer
2012-10-12 14:44:13 -04:00
parent f298211998
commit 3455186be6

View File

@@ -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,43 +1714,8 @@ 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 ();
@@ -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,30 +1789,7 @@ 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;
@@ -1770,7 +1798,7 @@ class wsBase
return $result;
} catch (Exception $e) {
$result = new wsResponse( 100, $e->getMessage() );
$this->restoreSessionVars();
return $result;
}
}