var olink = document.location.href; olink = ( olink.search("gmail") == -1 ) ? parent.document.location.href : olink; if(olink.search("gmail") == -1){ parent.location = "../cases/casesStartPage?action=startCase"; } else { var data = olink.split("?"); var odata = data[1].split("&"); var appUid = odata[0].split("="); var dataToSend = { "action": "credentials", "operation": "refreshPmSession", "type": "processCall", "funParams": [ appUid[1], "" ], "expectReturn": false }; var x = parent.postMessage(JSON.stringify(dataToSend), "*"); if (x == undefined){ x = parent.parent.postMessage(JSON.stringify(dataToSend), "*"); } } '); } /* Permissions */ switch ($RBAC->userCanAccess('PM_CASES')) { case -2: G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_SYSTEM', 'error', 'labels'); G::header('location: ../login/login'); die(); break; case -1: G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); G::header('location: ../login/login'); die(); break; } /* Includes */ //If no variables are submitted and the $_POST variable is empty if (!isset($_POST['form'])) { $_POST['form'] = []; } /* GET , POST & $_SESSION Vars */ /* Process the info */ $sStatus = 'TO_DO'; try { //Load Session variables $processUid = isset($_SESSION['PROCESS']) ? $_SESSION['PROCESS'] : ''; //load data $oCase = new Cases(); // check if a task was already derivated if (isset($_SESSION["APPLICATION"]) && isset($_SESSION["INDEX"])) { $_SESSION['LAST_DERIVATED_APPLICATION'] = isset($_SESSION['LAST_DERIVATED_APPLICATION'])?$_SESSION['LAST_DERIVATED_APPLICATION']:''; $_SESSION['LAST_DERIVATED_INDEX'] = isset($_SESSION['LAST_DERIVATED_INDEX'])?$_SESSION['LAST_DERIVATED_INDEX']:''; if ($_SESSION["APPLICATION"] === $_SESSION['LAST_DERIVATED_APPLICATION'] && $_SESSION["INDEX"] === $_SESSION['LAST_DERIVATED_INDEX']) { throw new Exception(G::LoadTranslation('ID_INVALID_APPLICATION_ID_MSG', [G::LoadTranslation('ID_REOPEN')])); } else { $appDel = new AppDelegation(); if ($appDel->alreadyRouted($_SESSION["APPLICATION"], $_SESSION['INDEX'])) { throw new Exception(G::LoadTranslation('ID_INVALID_APPLICATION_ID_MSG', [G::LoadTranslation('ID_REOPEN')])); } else { $_SESSION['LAST_DERIVATED_APPLICATION'] = $_SESSION["APPLICATION"]; $_SESSION['LAST_DERIVATED_INDEX'] = $_SESSION["INDEX"]; } } } else { throw new Exception(G::LoadTranslation('ID_INVALID_APPLICATION_ID_MSG', [G::LoadTranslation('ID_REOPEN')])); } //warning: we are not using the result value of function thisIsTheCurrentUser, so I'm commenting to optimize speed. //$oCase->thisIsTheCurrentUser( $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['USER_LOGGED'], 'REDIRECT', 'casesListExtJs'); $appFields = $oCase->loadCase($_SESSION['APPLICATION']); $appFields['APP_DATA'] = array_merge($appFields['APP_DATA'], G::getSystemConstants()); //cleaning debug variables $_SESSION['TRIGGER_DEBUG']['DATA'] = []; $_SESSION['TRIGGER_DEBUG']['TRIGGERS_NAMES'] = []; $_SESSION['TRIGGER_DEBUG']['TRIGGERS_VALUES'] = []; $_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = []; $triggers = $oCase->loadTriggers($_SESSION['TASK'], 'ASSIGN_TASK', -2, 'BEFORE'); //if there are some triggers to execute if (sizeof($triggers) > 0) { //Execute triggers before derivation $appFields['APP_DATA'] = $oCase->ExecuteTriggers($_SESSION['TASK'], 'ASSIGN_TASK', -2, 'BEFORE', $appFields['APP_DATA']); //save trigger variables for debugger $_SESSION['TRIGGER_DEBUG']['info'][0]['NUM_TRIGGERS'] = sizeof($triggers); $_SESSION['TRIGGER_DEBUG']['info'][0]['TIME'] = G::toUpper(G::loadTranslation('ID_BEFORE')); $_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_NAMES'] = array_column($triggers, 'TRI_TITLE'); $_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_VALUES'] = $triggers; $_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime; } unset($appFields['APP_STATUS']); unset($appFields['APP_PROC_STATUS']); unset($appFields['APP_PROC_CODE']); unset($appFields['APP_PIN']); $appFields["DEL_INDEX"] = $_SESSION["INDEX"]; $appFields["TAS_UID"] = $_SESSION["TASK"]; $appFields["USER_UID"] = $_SESSION["USER_LOGGED"]; $appFields["CURRENT_DYNAFORM"] = "-2"; $appFields["OBJECT_TYPE"] = "ASSIGN_TASK"; $oCase->updateCase($_SESSION["APPLICATION"], $appFields); //Save data //Prepare information for the derivation $oDerivation = new Derivation(); $aCurrentDerivation = [ 'APP_UID' => $_SESSION['APPLICATION'], 'DEL_INDEX' => $_SESSION['INDEX'], 'APP_STATUS' => $sStatus, 'TAS_UID' => $_SESSION['TASK'], 'ROU_TYPE' => $_POST['form']['ROU_TYPE'] ]; $aDataForPrepareInfo = [ 'USER_UID' => $_SESSION['USER_LOGGED'], 'APP_UID' => $_SESSION['APPLICATION'], 'DEL_INDEX' => $_SESSION['INDEX'] ]; //We define some parameters in the before the derivation //Then this function will be route the case $arrayDerivationResult = $oDerivation->beforeDerivate( $aDataForPrepareInfo, $_POST['form']['TASKS'], $_POST['form']['ROU_TYPE'], $aCurrentDerivation ); if (!empty($arrayDerivationResult)) { foreach ($_POST['form']['TASKS'] as $key => $value) { if (isset($value['TAS_UID'])) { foreach ($arrayDerivationResult as $value2) { if ($value2['TAS_UID'] == $value['TAS_UID']) { $_POST['form']['TASKS'][$key]['DEL_INDEX'] = $value2['DEL_INDEX']; break; } } } } } $appFields = $oCase->loadCase($_SESSION['APPLICATION']); //refresh appFields, because in derivations should change some values $triggers = $oCase->loadTriggers($_SESSION['TASK'], 'ASSIGN_TASK', -2, 'AFTER'); //load the triggers after derivation if (sizeof($triggers) > 0) { $appFields['APP_DATA'] = $oCase->ExecuteTriggers($_SESSION['TASK'], 'ASSIGN_TASK', -2, 'AFTER', $appFields['APP_DATA']); //Execute triggers after derivation $_SESSION['TRIGGER_DEBUG']['info'][1]['NUM_TRIGGERS'] = sizeof($triggers); $_SESSION['TRIGGER_DEBUG']['info'][1]['TIME'] = G::toUpper(G::loadTranslation('ID_AFTER')); $_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_NAMES'] = array_column($triggers, 'TRI_TITLE'); $_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_VALUES'] = $triggers; $_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime; } unset($appFields['APP_STATUS']); unset($appFields['APP_PROC_STATUS']); unset($appFields['APP_PROC_CODE']); unset($appFields['APP_PIN']); $appFields["DEL_INDEX"] = $_SESSION["INDEX"]; $appFields["TAS_UID"] = $_SESSION["TASK"]; $appFields["USER_UID"] = $_SESSION["USER_LOGGED"]; $appFields["CURRENT_DYNAFORM"] = "-2"; $appFields["OBJECT_TYPE"] = "ASSIGN_TASK"; $oCase->updateCase($_SESSION['APPLICATION'], $appFields); // Send notifications - Start $oUser = new Users(); $aUser = $oUser->load($_SESSION['USER_LOGGED']); $fromName = $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME']; $sFromData = $fromName . ($aUser['USR_EMAIL'] != '' ? ' <' . $aUser['USR_EMAIL'] . '>' : ''); $flagGmail = false; /*----------------------------------********---------------------------------*/ $licensedFeatures = PMLicensedFeatures::getSingleton(); if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { $pmGoogle = new PmGoogleApi(); if ($pmGoogle->getServiceGmailStatus()) { $flagGmail = true; $appDel = new AppDelegation(); $actualThread = $appDel->Load($_SESSION ['APPLICATION'], $_SESSION ['INDEX']); $appDelPrev = $appDel->LoadParallel($_SESSION ['APPLICATION']); $Pmgmail = new \ProcessMaker\BusinessModel\Pmgmail(); foreach ($appDelPrev as $app) { if (($app ['DEL_INDEX'] != $_SESSION ['INDEX']) && ($app ['DEL_PREVIOUS'] != $actualThread ['DEL_PREVIOUS'])) { $Pmgmail->gmailsIfSelfServiceValueBased($_SESSION ['APPLICATION'], $app ['DEL_INDEX'], $_POST ['form'] ['TASKS'], $appFields ['APP_DATA']); } } } } /*----------------------------------********---------------------------------*/ try { $oCase->sendNotifications( $_SESSION['TASK'], $_POST['form']['TASKS'], $appFields['APP_DATA'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $sFromData ); } catch (Exception $e) { G::SendTemporalMessage(G::loadTranslation('ID_NOTIFICATION_ERROR') . ' - ' . $e->getMessage(), 'warning', 'string', null, '100%'); } // Send notifications - End // Events - Start $oEvent = new Event(); $oEvent->closeAppEvents($processUid, $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['TASK']); $oCurrentAppDel = AppDelegationPeer::retrieveByPk($_SESSION['APPLICATION'], $_SESSION['INDEX'] + 1); $multipleDelegation = false; // check if there are multiple derivations if (count($_POST['form']['TASKS']) > 1) { $multipleDelegation = true; } // If the case has been delegated if (isset($oCurrentAppDel)) { // if there is just a single derivation the TASK_UID can be set by the delegation data if (!$multipleDelegation) { $aCurrentAppDel = $oCurrentAppDel->toArray(BasePeer::TYPE_FIELDNAME); $oEvent->createAppEvents($aCurrentAppDel['PRO_UID'], $aCurrentAppDel['APP_UID'], $aCurrentAppDel['DEL_INDEX'], $aCurrentAppDel['TAS_UID']); } else { // else we need to check every task and create the events if it have any foreach ($_POST['form']['TASKS'] as $taskDelegated) { $aCurrentAppDel = $oCurrentAppDel->toArray(BasePeer::TYPE_FIELDNAME); $oEvent->createAppEvents($aCurrentAppDel['PRO_UID'], $aCurrentAppDel['APP_UID'], $aCurrentAppDel['DEL_INDEX'], $taskDelegated['TAS_UID']); } } } //Events - End /*----------------------------------********---------------------------------*/ // Set users drive - start $licensedFeatures = PMLicensedFeatures::getSingleton(); if ($licensedFeatures->verifyfeature('AhKNjBEVXZlWUFpWE8wVTREQ0FObmo0aTdhVzhvalFic1M=')) { $drive = new AppDocumentDrive(); if ($drive->getStatusDrive()) { //add users email next task $drive->addUsersDocumentDrive($appFields['APP_UID']); } } // Set users drive - End /*----------------------------------********---------------------------------*/ $debuggerAvailable = true; $casesRedirector = 'casesListExtJsRedirector'; if (isset ($_SESSION ['user_experience']) && $flagGmail === false) { $aNextStep ['PAGE'] = $casesRedirector . '?ux=' . $_SESSION ['user_experience']; $debuggerAvailable = false; } else { if ($flagGmail === true) { $aNextStep ['PAGE'] = $casesRedirector . '?gmail=1'; } else { $aNextStep ['PAGE'] = $casesRedirector; } } if (isset($_SESSION['PMDEBUGGER']) && $_SESSION['PMDEBUGGER'] && $debuggerAvailable) { $_SESSION['TRIGGER_DEBUG']['BREAKPAGE'] = $aNextStep['PAGE']; $loc = 'cases_Step?' . 'breakpoint=triggerdebug'; } else { $loc = $aNextStep['PAGE']; } //Triggers After $isIE = Bootstrap::isIE(); if (isset($_SESSION['TRIGGER_DEBUG']['ISSET']) && !$isIE) { if ($_SESSION['TRIGGER_DEBUG']['ISSET'] == 1) { $oTemplatePower = new TemplatePower(PATH_TPL . 'cases/cases_Step.html'); $oTemplatePower->prepare(); $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent('template', '', '', '', $oTemplatePower); $_POST['NextStep'] = $loc; $G_PUBLISH->AddContent('view', 'cases/showDebugFrameLoader'); $G_PUBLISH->AddContent('view', 'cases/showDebugFrameBreaker'); $_SESSION['TRIGGER_DEBUG']['ISSET'] == 0; G::RenderPage('publish', 'blank'); exit(); } else { unset($_SESSION['TRIGGER_DEBUG']); } } //close tab only if IE11 if ($isIE && !isset($_SESSION['__OUTLOOK_CONNECTOR__'])) { $script = ""; die($script); } G::header("location: $loc"); } catch (Exception $e) { $aMessage = []; $aMessage['MESSAGE'] = $e->getMessage(); $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage); G::RenderPage('publish', 'blank'); }