/** * creates a new case impersonating a user who has the proper privileges to create new cases * * @param string $processId * @param string $userId * @param string $variables * @param string $taskId, must be in the starting group. * @return $result will return an object */ public function newCaseImpersonate ($processId, $userId, $variables, $taskId = '') { try { if (is_array( $variables )) { if (count( $variables ) > 0) { $c = count( $variables ); $Fields = $variables; } else { if ($c == 0) { $result = new wsResponse( 10, G::loadTranslation( 'ID_ARRAY_VARIABLES_EMPTY' ) ); return $result; } } } else { $result = new wsResponse( 10, G::loadTranslation( 'ID_VARIABLES_PARAM_NOT_ARRAY' ) ); return $result; } $processes = new Processes(); if (! $processes->processExists( $processId )) { $result = new wsResponse( 11, G::loadTranslation( 'ID_INVALID_PROCESS' ) . " " . $processId . "!!" ); return $result; } $user = new Users(); if (! $user->userExists( $userId )) { $result = new wsResponse( 11, G::loadTranslation( 'ID_USER_NOT_REGISTERED' ) . " " . $userId . "!!" ); return $result; } $oCase = new Cases(); $numTasks = 0; if ($taskId != '') { $aTasks = $processes->getStartingTaskForUser( $processId, null ); foreach ($aTasks as $task) { if ($task['TAS_UID'] == $taskId) { $arrayTask[0]['TAS_UID'] = $taskId; $numTasks = 1; } } } else { $arrayTask = $processes->getStartingTaskForUser( $processId, null ); $numTasks = count( $arrayTask ); } if ($numTasks == 1) { $case = $oCase->startCase( $arrayTask[0]['TAS_UID'], $userId ); $caseId = $case['APPLICATION']; $caseNumber = $case['CASE_NUMBER']; $oldFields = $oCase->loadCase( $caseId ); $oldFields['APP_DATA'] = array_merge( $oldFields['APP_DATA'], $Fields ); $up_case = $oCase->updateCase( $caseId, $oldFields ); $result = new wsResponse( 0, G::loadTranslation( 'ID_COMMAND_EXECUTED_SUCCESSFULLY' ) ); $result->caseId = $caseId; $result->caseNumber = $caseNumber; return $result; } else { if ($numTasks == 0) { $result = new wsResponse( 12, G::loadTranslation( 'ID_NO_STARTING_TASK' ) ); return $result; } if ($numTasks > 1) { $result = new wsResponse( 13, G::loadTranslation( 'ID_MULTIPLE_STARTING_TASKS' ) ); return $result; } } } catch (Exception $e) { $result = new wsResponse( 100, $e->getMessage() ); return $result; } }