. * * For more information, contact Colosa Inc, 2566 Le Jeune Rd., * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ if (!isset($_SESSION['USER_LOGGED'])) { G::SendTemporalMessage( 'ID_LOGIN_AGAIN', 'warning', 'labels' ); die( ''); } /* 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'] = array(); } /* GET , POST & $_SESSION Vars */ /* Process the info */ $sStatus = 'TO_DO'; foreach ($_POST['form']['TASKS'] as $aValues) { } try { //load data $oCase = new Cases(); //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'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_NAMES'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_VALUES'] = Array (); $_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 = array ( 'APP_UID' => $_SESSION['APPLICATION'], 'DEL_INDEX' => $_SESSION['INDEX'], 'APP_STATUS' => $sStatus, 'TAS_UID' => $_SESSION['TASK'], 'ROU_TYPE' => $_POST['form']['ROU_TYPE'] ); $aDataForPrepareInfo = array ( '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( $_SESSION['PROCESS'], $_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 = array (); $aMessage['MESSAGE'] = $e->getMessage(); $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); G::RenderPage( 'publish', 'blank' ); }