diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index 3a3783bfe..d88c44935 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) { @@ -323,6 +323,7 @@ class wsBase $oCriteria->addSelectColumn( ApplicationPeer::APP_NUMBER ); $oCriteria->addSelectColumn( ApplicationPeer::APP_STATUS ); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); + $oCriteria->addSelectColumn( ApplicationPeer::PRO_UID ); $oCriteria->addAsColumn( 'CASE_TITLE', 'C1.CON_VALUE' ); $oCriteria->addAlias( "C1", 'CONTENT' ); $caseTitleConds = array (); @@ -354,15 +355,21 @@ class wsBase 'delIndex' => $aRow['DEL_INDEX'] ); */ - $result[] = array ('guid' => $aRow['APP_UID'],'name' => $aRow['APP_NUMBER'],'status' => $aRow['APP_STATUS'],'delIndex' => $aRow['DEL_INDEX'] - ); + $result[] = array('guid' => $aRow['APP_UID'], + 'name' => $aRow['APP_NUMBER'], + 'status' => $aRow['APP_STATUS'], + 'delIndex' => $aRow['DEL_INDEX'], + 'processId' => $aRow['PRO_UID']); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage(),'status' => $e->getMessage(),'status' => $e->getMessage() - ); + $result[] = array ('guid' => $e->getMessage(), + 'name' => $e->getMessage(), + 'status' => $e->getMessage(), + 'status' => $e->getMessage(), + 'processId' => $e->getMessage()); return $result; } @@ -385,16 +392,21 @@ class wsBase $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result[] = array ('guid' => $aRow['APP_UID'],'name' => $aRow['APP_NUMBER'],'delIndex' => $aRow['DEL_INDEX'] - ); + $result[] = array ('guid' => $aRow['APP_UID'], + 'name' => $aRow['APP_NUMBER'], + 'delIndex' => $aRow['DEL_INDEX'], + 'processId' => $aRow['PRO_UID']); $oDataset->next(); } return $result; } catch (Exception $e) { - $result[] = array ('guid' => $e->getMessage(),'name' => $e->getMessage(),'status' => $e->getMessage(),'status' => $e->getMessage() - ); + $result[] = array ('guid' => $e->getMessage(), + 'name' => $e->getMessage(), + 'status' => $e->getMessage(), + 'status' => $e->getMessage(), + 'processId' => $e->getMessage()); return $result; } @@ -665,7 +677,9 @@ class wsBase $result = array (); $oCriteria = new Criteria( 'workflow' ); $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn( TaskPeer::PRO_UID ); $oCriteria->addSelectColumn( TaskPeer::TAS_UID ); + $oCriteria->addSelectColumn( TaskPeer::TAS_START ); $oCriteria->setDistinct(); $oCriteria->addAsColumn( 'TAS_TITLE', 'C1.CON_VALUE' ); $oCriteria->addAlias( "C1", 'CONTENT' ); @@ -687,8 +701,10 @@ class wsBase $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result[] = array ('guid' => $aRow['TAS_UID'],'name' => $aRow['TAS_TITLE'] - ); + $result[] = array ('guid' => $aRow['TAS_UID'], + 'name' => $aRow['TAS_TITLE'], + 'processId' => $aRow['PRO_UID'], + 'initialTask' => $aRow['TAS_START'] == 'TRUE' ? '1' : '0'); $oDataset->next(); } @@ -1599,94 +1615,6 @@ class wsBase return $result; } } - - /** - * 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'] )) { - G::pr("restore:".$this->originalValues['USER_LOGGED']." se:".$_SESSION['USER_LOGGED']); - $_SESSION['USER_LOGGED'] = $this->originalValues['USER_LOGGED']; - unset( $this->originalValues['USER_LOGGED']); - G::pr("restore:".$this->originalValues['USER_LOGGED']." se:".$_SESSION['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. @@ -1700,23 +1628,59 @@ class wsBase public function newCase ($processId, $userId, $taskId, $variables) { try { - - $this->saveTemporarySessionVars(); - + $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'] ); + } + $Fields = array (); if (is_array( $variables ) && count( $variables ) > 0) { $Fields = $variables; } + $oProcesses = new Processes(); $pro = $oProcesses->processExists( $processId ); if (! $pro) { $result = new wsResponse( 11, G::loadTranslation( 'ID_INVALID_PROCESS' ) . " " . $processId ); - G::pr("invalid process"); - $this->restoreSessionVars(); + return $result; } + $oCase = new Cases(); $oTask = new Tasks(); $startingTasks = $oCase->getStartCases( $userId ); @@ -1744,16 +1708,17 @@ 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; } + $case = $oCase->startCase( $taskId, $userId ); $_SESSION['APPLICATION'] = $case['APPLICATION']; @@ -1766,11 +1731,37 @@ class wsBase $caseId = $case['APPLICATION']; $caseNr = $case['CASE_NUMBER']; + $oldFields = $oCase->loadCase( $caseId ); + $oldFields['APP_DATA'] = array_merge( $oldFields['APP_DATA'], $Fields ); + $up_case = $oCase->updateCase( $caseId, $oldFields ); - - $this->restoreSessionVars(); + + //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']; + } $result = new wsResponse( 0, G::loadTranslation( 'ID_STARTED_SUCCESSFULLY' ) ); $result->caseId = $caseId; @@ -1779,7 +1770,7 @@ class wsBase return $result; } catch (Exception $e) { $result = new wsResponse( 100, $e->getMessage() ); - $this->restoreSessionVars(); + return $result; } }