From ea7292e6e7e57b39c51183d259c561d4c7c60510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 30 Oct 2018 13:41:00 -0400 Subject: [PATCH] HOR-4525 --- workflow/engine/bin/cron_single.php | 1 + workflow/engine/classes/Applications.php | 1 + workflow/engine/classes/Cases.php | 6 + workflow/engine/classes/Derivation.php | 1 + workflow/engine/classes/WsBase.php | 47 ++++--- workflow/engine/classes/class.pmFunctions.php | 60 ++++---- workflow/engine/classes/class.pmScript.php | 113 +++++++++++++++- workflow/engine/classes/model/AppEvent.php | 128 +++++++++--------- .../ProcessMaker/BusinessModel/ScriptTask.php | 1 + .../templates/cases/cases_StepsTree.php | 1 + 10 files changed, 249 insertions(+), 110 deletions(-) diff --git a/workflow/engine/bin/cron_single.php b/workflow/engine/bin/cron_single.php index 9019c0721..31b17228d 100644 --- a/workflow/engine/bin/cron_single.php +++ b/workflow/engine/bin/cron_single.php @@ -792,6 +792,7 @@ function executeCaseSelfService() $oPMScript->setDataTrigger($row); $oPMScript->setFields($appFields["APP_DATA"]); $oPMScript->setScript($row["TRI_WEBBOT"]); + $oPMScript->setExecutedOn(PMScript::SELF_SERVICE_TIMEOUT); $oPMScript->execute(); /*----------------------------------********---------------------------------*/ diff --git a/workflow/engine/classes/Applications.php b/workflow/engine/classes/Applications.php index f11197ab2..bd0d2db58 100644 --- a/workflow/engine/classes/Applications.php +++ b/workflow/engine/classes/Applications.php @@ -1138,6 +1138,7 @@ class Applications // if it has a condition if (trim($caseStep->getStepCondition()) != '') { $pmScript->setScript($caseStep->getStepCondition()); + $pmScript->setExecutedOn(PMScript::CONDITION); if (! $pmScript->evaluate()) { //evaluated false, jump & continue with the others steps diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index ad712e913..1f0b75495 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -2344,6 +2344,7 @@ class Cases if ($oStep) { if (trim($oStep->getStepCondition()) !== '') { $oPMScript->setScript($oStep->getStepCondition()); + $oPMScript->setExecutedOn(PMScript::CONDITION); $bAccessStep = $oPMScript->evaluate(); } else { $bAccessStep = true; @@ -2474,6 +2475,7 @@ class Cases if ($oStep) { if (trim($oStep->getStepCondition()) !== '') { $oPMScript->setScript($oStep->getStepCondition()); + $oPMScript->setExecutedOn(PMScript::CONDITION); $bAccessStep = $oPMScript->evaluate(); } else { $bAccessStep = true; @@ -3480,12 +3482,15 @@ class Cases if ($aTrigger['ST_CONDITION'] !== '') { $oPMScript->setDataTrigger($aTrigger); $oPMScript->setScript($aTrigger['ST_CONDITION']); + $oPMScript->setExecutedOn(PMScript::CONDITION); $bExecute = $oPMScript->evaluate(); } if ($bExecute) { $oPMScript->setDataTrigger($aTrigger); $oPMScript->setScript($aTrigger['TRI_WEBBOT']); + $executedOn = $oPMScript->getExecutionOriginForAStep($sStepType, $sStepUidObj, $sTriggerType); + $oPMScript->setExecutedOn($executedOn); $oPMScript->execute(); $this->arrayTriggerExecutionTime[$aTrigger['TRI_UID']] = $oPMScript->scriptExecutionTime; @@ -7142,6 +7147,7 @@ class Cases $oPMScript->setDataTrigger($arrayWebBotTrigger); $oPMScript->setFields($aFields['APP_DATA']); $oPMScript->setScript($arrayWebBotTrigger['TRI_WEBBOT']); + $oPMScript->setExecutedOn(PMScript::PROCESS_ACTION); $oPMScript->execute(); $aFields['APP_DATA'] = array_merge($aFields['APP_DATA'], $oPMScript->aFields); diff --git a/workflow/engine/classes/Derivation.php b/workflow/engine/classes/Derivation.php index 98d52cf72..124a4dd2a 100644 --- a/workflow/engine/classes/Derivation.php +++ b/workflow/engine/classes/Derivation.php @@ -179,6 +179,7 @@ class Derivation $pmScript = new PMScript(); $pmScript->setFields($arrayApplicationData["APP_DATA"]); $pmScript->setScript($arrayRouteData["ROU_CONDITION"]); + $pmScript->setExecutedOn(PMScript::CONDITION); $flagAddDelegation = $pmScript->evaluate(); } diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php index d526e22b1..489fdd533 100644 --- a/workflow/engine/classes/WsBase.php +++ b/workflow/engine/classes/WsBase.php @@ -1719,34 +1719,35 @@ class WsBase * * @param string $caseId * @param string $variables + * @param bool $forceToSave * * @return $result will return an object */ - public function sendVariables($caseId, $variables) + public function sendVariables($caseId, $variables, $forceToSave = false) { - //delegation where app uid (caseId) y usruid(session) ordenar delindes descendente y agaarr el primero - //delfinishdate != null error try { - $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); - $oCriteria->add(AppDelegationPeer::APP_UID, $caseId); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + if (!$forceToSave) { + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); + $criteria->add(AppDelegationPeer::APP_UID, $caseId); + $criteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $oCriteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); - $oDataset = AppDelegationPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $criteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); + $dataset = AppDelegationPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $cnt = 0; + $cnt = 0; - while ($oDataset->next()) { - $aRow = $oDataset->getRow(); - $cnt++; - } + while ($dataset->next()) { + $row = $dataset->getRow(); + $cnt++; + } - if ($cnt == 0) { - $result = new WsResponse(18, G::loadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED')); + if ($cnt == 0) { + $result = new WsResponse(18, G::loadTranslation('ID_CASE_DELEGATION_ALREADY_CLOSED')); - return $result; + return $result; + } } if (is_array($variables)) { @@ -2197,7 +2198,11 @@ class WsBase if (count($aTriggers) > 0) { $varTriggers = $varTriggers . "
" . $labelAssignment . "
"; - $oPMScript = new PMScript(); + global $oPMScript; + + if (!isset($oPMScript)) { + $oPMScript = new PMScript(); + } foreach ($aTriggers as $aTrigger) { //Set variables @@ -2218,12 +2223,15 @@ class WsBase if ($aTrigger['ST_CONDITION'] !== '') { $oPMScript->setScript($aTrigger['ST_CONDITION']); + $oPMScript->setExecutedOn(PMScript::CONDITION); $bExecute = $oPMScript->evaluate(); } if ($bExecute) { $oPMScript->setDataTrigger($aTrigger); $oPMScript->setScript($aTrigger['TRI_WEBBOT']); + $executedOn = $oPMScript->getExecutionOriginForAStep($stepType, $stepUidObj, $triggerType); + $oPMScript->setExecutedOn($executedOn); $oPMScript->execute(); $trigger = TriggersPeer::retrieveByPk($aTrigger["TRI_UID"]); @@ -2687,6 +2695,7 @@ class WsBase $oPMScript->setDataTrigger($row); $oPMScript->setFields($appFields['APP_DATA']); $oPMScript->setScript($row['TRI_WEBBOT']); + $oPMScript->setExecutedOn(PMScript::ISOLATED_TRIGGER); $oPMScript->execute(); if (isset($oPMScript->aFields["__ERROR__"]) && trim($oPMScript->aFields["__ERROR__"]) != "" && $oPMScript->aFields["__ERROR__"] != "none") { diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index 95d042a51..8d1fb765b 100644 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -418,18 +418,19 @@ function orderGrid ($dataM, $field, $ord = 'ASC') * @return array | $aGrid | Grid | Grid with executed operation * */ -function evaluateFunction ($aGrid, $sExpresion) +function evaluateFunction($aGrid, $sExpresion) { - $sExpresion = str_replace( 'Array', '$this->aFields', $sExpresion ); + $sExpresion = str_replace('Array', '$this->aFields', $sExpresion); $sExpresion .= ';'; $pmScript = new PMScript(); - $pmScript->setScript( $sExpresion ); + $pmScript->setScript($sExpresion); + $pmScript->setExecutedOn(PMScript::EVALUATE_FUNCTION); - for ($i = 1; $i <= count( $aGrid ); $i ++) { + for ($i = 1; $i <= count($aGrid); $i ++) { $aFields = $aGrid[$i]; - $pmScript->setFields( $aFields ); + $pmScript->setFields($aFields); $pmScript->execute(); @@ -2030,13 +2031,19 @@ function PMFProcessList () //its test was successfull */ function PMFSendVariables ($caseId, $variables) { - $ws = new WsBase(); + global $oPMScript; + + if (!isset($oPMScript)) { + $oPMScript = new PMScript(); + } + + $ws = new WsBase(); + $result = $ws->sendVariables($caseId, $variables, + $oPMScript->executedOn() === PMScript::AFTER_ROUTING); - $result = $ws->sendVariables( $caseId, $variables ); if ($result->status_code == 0) { if (isset($_SESSION['APPLICATION'])) { if ($caseId == $_SESSION['APPLICATION']) { - global $oPMScript; if (isset($oPMScript->aFields) && is_array($oPMScript->aFields)) { if (is_array($variables)) { $oPMScript->aFields = array_merge($oPMScript->aFields, $variables); @@ -2432,7 +2439,7 @@ function PMFgetLabelOption ($PROCESS, $DYNAFORM_UID, $FIELD_NAME, $FIELD_SELECTE * @return none | $none | None | None * */ -function PMFRedirectToStep ($sApplicationUID, $iDelegation, $sStepType, $sStepUid) +function PMFRedirectToStep($sApplicationUID, $iDelegation, $sStepType, $sStepUid) { $g = new G(); @@ -2444,26 +2451,27 @@ function PMFRedirectToStep ($sApplicationUID, $iDelegation, $sStepType, $sStepUi $_SESSION["INDEX"] = $iDelegation; require_once 'classes/model/AppDelegation.php'; - $oCriteria = new Criteria( 'workflow' ); - $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); - $oCriteria->add( AppDelegationPeer::APP_UID, $sApplicationUID ); - $oCriteria->add( AppDelegationPeer::DEL_INDEX, $iDelegation ); - $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); + $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDelegationPeer::DEL_INDEX, $iDelegation); + $oDataset = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); global $oPMScript; $aRow = $oDataset->getRow(); if ($aRow) { require_once 'classes/model/Step.php'; $oStep = new Step(); - $oTheStep = $oStep->loadByType( $aRow['TAS_UID'], $sStepType, $sStepUid ); + $oTheStep = $oStep->loadByType($aRow['TAS_UID'], $sStepType, $sStepUid); $bContinue = true; $oCase = new Cases(); - $aFields = $oCase->loadCase( $sApplicationUID ); + $aFields = $oCase->loadCase($sApplicationUID); if ($oTheStep->getStepCondition() != '') { $pmScript = new PMScript(); - $pmScript->setFields( $aFields['APP_DATA'] ); - $pmScript->setScript( $oTheStep->getStepCondition() ); + $pmScript->setFields($aFields['APP_DATA']); + $pmScript->setScript($oTheStep->getStepCondition()); + $pmScript->setExecutedOn(PMScript::CONDITION); $bContinue = $pmScript->evaluate(); } if ($bContinue) { @@ -2485,18 +2493,18 @@ function PMFRedirectToStep ($sApplicationUID, $iDelegation, $sStepType, $sStepUi break; } // save data - if (! is_null( $oPMScript )) { + if (!is_null($oPMScript)) { $aFields['APP_DATA'] = $oPMScript->aFields; unset($aFields['APP_STATUS']); unset($aFields['APP_PROC_STATUS']); unset($aFields['APP_PROC_CODE']); unset($aFields['APP_PIN']); - $oCase->updateCase( $sApplicationUID, $aFields ); + $oCase->updateCase($sApplicationUID, $aFields); } $g->sessionVarRestore(); - G::header( 'Location: ' . 'cases_Step?TYPE=' . $sStepType . '&UID=' . $sStepUid . '&POSITION=' . $oTheStep->getStepPosition() . '&ACTION=' . $sAction ); + G::header('Location: ' . 'cases_Step?TYPE=' . $sStepType . '&UID=' . $sStepUid . '&POSITION=' . $oTheStep->getStepPosition() . '&ACTION=' . $sAction); die(); } } @@ -2980,11 +2988,17 @@ function PMFRemoveMask ($field, $separator = '.', $currency = '') function PMFSaveCurrentData () { global $oPMScript; + + if (!isset($oPMScript)) { + $oPMScript = new PMScript(); + } + $response = 0; if (isset($_SESSION['APPLICATION']) && isset($oPMScript->aFields)) { $ws = new WsBase(); - $result = $ws->sendVariables($_SESSION['APPLICATION'], $oPMScript->aFields); + $result = $ws->sendVariables($_SESSION['APPLICATION'], $oPMScript->aFields, + $oPMScript->executedOn() === PMScript::AFTER_ROUTING); $response = $result->status_code == 0 ? 1 : 0; } return $response; diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index 8b4feef84..94c68265b 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -35,11 +35,51 @@ if (file_exists($dir)) { /** * PMScript - PMScript class * - * @copyright 2007 COLOSA * @package workflow.engine.ProcessMaker */ class PMScript { + /** + * Constants to identify the execution origin + */ + const UNDEFINED_ORIGIN = 'executed.undefined.origin'; + + const BEFORE_DYNAFORM = 'executed.before.dynaform'; + + const AFTER_DYNAFORM = 'executed.after.dynaform'; + + const BEFORE_INPUT_DOCUMENT = 'executed.before.input'; + + const AFTER_INPUT_DOCUMENT = 'executed.after.input'; + + const BEFORE_OUTPUT_DOCUMENT = 'executed.before.output'; + + const AFTER_OUTPUT_DOCUMENT = 'executed.after.output'; + + const BEFORE_EXTERNAL_STEP = 'executed.before.external'; + + const AFTER_EXTERNAL_STEP = 'executed.after.external'; + + const BEFORE_ASSIGNMENT = 'executed.before.assignment'; + + const BEFORE_ROUTING = 'executed.before.routing'; + + const AFTER_ROUTING = 'executed.after.routing'; + + const CONDITION = 'executed.condition'; + + const SCRIPT_TASK = 'executed.script.task'; + + const CLASSIC_PROCESS_EVENTS = 'executed.classic.process.events'; + + const SELF_SERVICE_TIMEOUT = 'executed.selfservice.timeout'; + + const ISOLATED_TRIGGER = 'executed.isolated.trigger'; + + const PROCESS_ACTION = 'executed.process.action'; + + const EVALUATE_FUNCTION = 'executed.evaluate.function'; + /** * @var array $dataTrigger */ @@ -72,12 +112,17 @@ class PMScript public $scriptExecutionTime = 0; public $sRegexp = '/\@(?:([\@\%\#\?\$\=\&])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+|\-\>([a-zA-Z\_]\w*))?/'; + /** + * Execution origin, by default is undefined + */ + protected $executedOn = self::UNDEFINED_ORIGIN; + /** * Constructor of the class PMScript * * @return void */ - public function PMScript() + public function __construct() { $this->aFields['__ERROR__'] = 'none'; } @@ -161,6 +206,70 @@ class PMScript $this->dataTrigger = is_array($dataTrigger) ? $dataTrigger : []; } + /** + * Set the execution origin + * + * @param string $executedOn + */ + public function setExecutedOn($executedOn) + { + $this->executedOn = $executedOn; + } + + /** + * Get the execution origin + * + * @return string + */ + public function executedOn() { + return $this->executedOn; + } + + /** + * Helper to get the execution origin from an step + * + * @param string $stepType + * @param mixed $stepUidObj + * @param string $triggerType + * + * @return string + */ + public function getExecutionOriginForAStep($stepType, $stepUidObj, $triggerType) + { + switch ($stepType) { + case 'DYNAFORM': + $executedOn = $triggerType === 'BEFORE' ? self::BEFORE_DYNAFORM : $triggerType === 'AFTER' ? + self::AFTER_DYNAFORM : self::UNDEFINED_ORIGIN; + break; + case 'INPUT_DOCUMENT': + $executedOn = $triggerType === 'BEFORE' ? self::BEFORE_INPUT_DOCUMENT : $triggerType === 'AFTER' ? + self::AFTER_INPUT_DOCUMENT : self::UNDEFINED_ORIGIN; + break; + case 'OUTPUT_DOCUMENT': + $executedOn = $triggerType === 'BEFORE' ? self::BEFORE_OUTPUT_DOCUMENT : $triggerType === 'AFTER' ? + self::AFTER_OUTPUT_DOCUMENT : self::UNDEFINED_ORIGIN; + break; + case 'EXTERNAL': + $executedOn = $triggerType === 'BEFORE' ? self::BEFORE_EXTERNAL_STEP : $triggerType === 'AFTER' ? + self::AFTER_EXTERNAL_STEP : self::UNDEFINED_ORIGIN; + break; + case 'ASSIGN_TASK': + if ($stepUidObj === -1) { + $executedOn = $triggerType === 'BEFORE' ? self::BEFORE_ASSIGNMENT : self::UNDEFINED_ORIGIN; + } elseif ($stepUidObj === -2) { + $executedOn = $triggerType === 'BEFORE' ? self::BEFORE_ROUTING : $triggerType === 'AFTER' ? + self::AFTER_ROUTING : self::UNDEFINED_ORIGIN; + } else { + $executedOn = self::UNDEFINED_ORIGIN; + } + break; + default: + $executedOn = self::UNDEFINED_ORIGIN; + break; + } + return $executedOn; + } + /** * @param $sScript * @param $sCode diff --git a/workflow/engine/classes/model/AppEvent.php b/workflow/engine/classes/model/AppEvent.php index bbde16350..7a4c91b3c 100644 --- a/workflow/engine/classes/model/AppEvent.php +++ b/workflow/engine/classes/model/AppEvent.php @@ -178,99 +178,96 @@ class AppEvent extends BaseAppEvent } } - public function executeEvents ($sNow, $debug = false, &$log = array(), $cron = 0) + public function executeEvents($sNow, $debug = false, &$log = array(), $cron = 0) { $debug = 1; $oCase = new Cases(); try { - $oCriteria = new Criteria( 'workflow' ); + $oCriteria = new Criteria('workflow'); - $oCriteria->addSelectColumn( AppEventPeer::APP_UID ); - $oCriteria->addSelectColumn( AppEventPeer::DEL_INDEX ); - $oCriteria->addSelectColumn( AppEventPeer::EVN_UID ); - $oCriteria->addSelectColumn( AppEventPeer::APP_EVN_ACTION_DATE ); - $oCriteria->addSelectColumn( AppEventPeer::APP_EVN_ATTEMPTS ); - $oCriteria->addSelectColumn( AppEventPeer::APP_EVN_LAST_EXECUTION_DATE ); - $oCriteria->addSelectColumn( AppEventPeer::APP_EVN_STATUS ); - $oCriteria->addSelectColumn( EventPeer::PRO_UID ); - $oCriteria->addSelectColumn( EventPeer::EVN_ACTION ); - $oCriteria->addSelectColumn( EventPeer::TRI_UID ); - $oCriteria->addSelectColumn( EventPeer::EVN_ACTION_PARAMETERS ); - $oCriteria->addSelectColumn( EventPeer::EVN_RELATED_TO ); - $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); - $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); - $oCriteria->addSelectColumn( AppDelegationPeer::DEL_TASK_DUE_DATE ); - $oCriteria->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); + $oCriteria->addSelectColumn(AppEventPeer::APP_UID); + $oCriteria->addSelectColumn(AppEventPeer::DEL_INDEX); + $oCriteria->addSelectColumn(AppEventPeer::EVN_UID); + $oCriteria->addSelectColumn(AppEventPeer::APP_EVN_ACTION_DATE); + $oCriteria->addSelectColumn(AppEventPeer::APP_EVN_ATTEMPTS); + $oCriteria->addSelectColumn(AppEventPeer::APP_EVN_LAST_EXECUTION_DATE); + $oCriteria->addSelectColumn(AppEventPeer::APP_EVN_STATUS); + $oCriteria->addSelectColumn(EventPeer::PRO_UID); + $oCriteria->addSelectColumn(EventPeer::EVN_ACTION); + $oCriteria->addSelectColumn(EventPeer::TRI_UID); + $oCriteria->addSelectColumn(EventPeer::EVN_ACTION_PARAMETERS); + $oCriteria->addSelectColumn(EventPeer::EVN_RELATED_TO); + $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); + $oCriteria->addSelectColumn(AppDelegationPeer::USR_UID); + $oCriteria->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); + $oCriteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); - $oCriteria->addJoin( AppEventPeer::EVN_UID, EventPeer::EVN_UID, Criteria::JOIN ); + $oCriteria->addJoin(AppEventPeer::EVN_UID, EventPeer::EVN_UID, Criteria::JOIN); $aConditions = array (); - array_push( $aConditions, Array (AppEventPeer::APP_UID,AppDelegationPeer::APP_UID - ) ); - array_push( $aConditions, Array (AppEventPeer::DEL_INDEX,AppDelegationPeer::DEL_INDEX - ) ); - $oCriteria->addJoinMC( $aConditions, Criteria::LEFT_JOIN ); + array_push($aConditions, Array (AppEventPeer::APP_UID,AppDelegationPeer::APP_UID + )); + array_push($aConditions, Array (AppEventPeer::DEL_INDEX,AppDelegationPeer::DEL_INDEX + )); + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - $oCriteria->addJoin( ApplicationPeer::APP_UID, AppEventPeer::APP_UID ); + $oCriteria->addJoin(ApplicationPeer::APP_UID, AppEventPeer::APP_UID); - $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); //by me - $oCriteria->add( AppEventPeer::APP_EVN_STATUS, 'OPEN' ); - $oCriteria->add( AppEventPeer::APP_EVN_ACTION_DATE, $sNow, Criteria::LESS_EQUAL ); + $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $oCriteria->add(AppEventPeer::APP_EVN_STATUS, 'OPEN'); + $oCriteria->add(AppEventPeer::APP_EVN_ACTION_DATE, $sNow, Criteria::LESS_EQUAL); - $oDataset = AppEventPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset = AppEventPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $c = 0; while ($oDataset->next()) { if ($cron == 1) { - $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); + $arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron"))); $arrayCron["processcTimeStart"] = time(); - @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) ); + @file_put_contents(PATH_DATA . "cron", serialize($arrayCron)); } $c ++; $aRow = $oDataset->getRow(); $oTrigger = new Triggers(); - $aFields = $oCase->loadCase( $aRow['APP_UID'] ); - $oAppEvent = AppEventPeer::retrieveByPK( $aRow['APP_UID'], $aRow['DEL_INDEX'], $aRow['EVN_UID'] ); - - //g::pr($aRow); //die; - + $aFields = $oCase->loadCase($aRow['APP_UID']); + $oAppEvent = AppEventPeer::retrieveByPK($aRow['APP_UID'], $aRow['DEL_INDEX'], $aRow['EVN_UID']); if ($debug) { require_once 'classes/model/Application.php'; - $oApp = ApplicationPeer::retrieveByPk( $aRow['APP_UID'] ); - $oEv = EventPeer::retrieveByPk( $aRow['EVN_UID'] ); + $oApp = ApplicationPeer::retrieveByPk($aRow['APP_UID']); + $oEv = EventPeer::retrieveByPk($aRow['EVN_UID']); $log[] = 'Event ' . $oEv->getEvnDescription() . ' with ID ' . $aRow['EVN_UID']; - println( "\nOK+ event \"" . $oEv->getEvnDescription() . "\" with ID {} was found" ); - println( " - PROCESS................" . $aRow['PRO_UID'] ); - println( " - APPLICATION............" . $aRow['APP_UID'] . " CASE #" . $oApp->getAppNumber() ); - println( " - ACTION DATE............" . $aRow['APP_EVN_ACTION_DATE'] ); - println( " - ATTEMPTS..............." . $aRow['APP_EVN_ATTEMPTS'] ); - println( " - INTERVAL WITH TASKS...." . $aRow['EVN_RELATED_TO'] ); + println("\nOK+ event \"" . $oEv->getEvnDescription() . "\" with ID {} was found"); + println(" - PROCESS................" . $aRow['PRO_UID']); + println(" - APPLICATION............" . $aRow['APP_UID'] . " CASE #" . $oApp->getAppNumber()); + println(" - ACTION DATE............" . $aRow['APP_EVN_ACTION_DATE']); + println(" - ATTEMPTS..............." . $aRow['APP_EVN_ATTEMPTS']); + println(" - INTERVAL WITH TASKS...." . $aRow['EVN_RELATED_TO']); } if ($aRow['TRI_UID'] == '') { //a rare case when the tri_uid is not set. $log[] = " (!) Any trigger was set................................SKIPPED and will be CLOSED"; if ($debug) { - println( " (!) Any trigger was set................................SKIPPED and will be CLOSED" ); + println(" (!) Any trigger was set................................SKIPPED and will be CLOSED"); } - $oAppEvent->setAppEvnStatus( 'CLOSE' ); + $oAppEvent->setAppEvnStatus('CLOSE'); $oAppEvent->save(); continue; } - $oTrigger = TriggersPeer::retrieveByPk( $aRow['TRI_UID'] ); - if (! is_object( $oTrigger )) { + $oTrigger = TriggersPeer::retrieveByPk($aRow['TRI_UID']); + if (! is_object($oTrigger)) { //the trigger record doesn't exist.. $log[] = ' (!) The trigger ' . $aRow['TRI_UID'] . ' ' . $oTrigger->getTriTitle() . " doesn't exist.......SKIPPED and will be CLOSED"; if ($debug) { - println( " (!) The trigger {$aRow['TRI_UID']} {$oTrigger->getTriTitle()} doesn't exist.......SKIPPED and will be CLOSED" ); + println(" (!) The trigger {$aRow['TRI_UID']} {$oTrigger->getTriTitle()} doesn't exist.......SKIPPED and will be CLOSED"); } - $oAppEvent->setAppEvnStatus( 'CLOSE' ); + $oAppEvent->setAppEvnStatus('CLOSE'); $oAppEvent->save(); continue; } @@ -279,38 +276,37 @@ class AppEvent extends BaseAppEvent $oPMScript = new PMScript(); $task = new Task(); - $taskFields = $task->load( $aRow['TAS_UID'] ); + $taskFields = $task->load($aRow['TAS_UID']); $aFields['APP_DATA']['APP_NUMBER'] = $aFields['APP_NUMBER']; $aFields['APP_DATA']['TAS_TITLE'] = $taskFields['TAS_TITLE']; $aFields['APP_DATA']['DEL_TASK_DUE_DATE'] = $aRow['DEL_TASK_DUE_DATE']; $oPMScript->setDataTrigger($oTrigger->toArray(\BasePeer::TYPE_FIELDNAME)); - $oPMScript->setFields( $aFields['APP_DATA'] ); - $oPMScript->setScript( $oTrigger->getTriWebbot() ); - + $oPMScript->setFields($aFields['APP_DATA']); + $oPMScript->setScript($oTrigger->getTriWebbot()); + $oPMScript->setExecutedOn(PMScript::CLASSIC_PROCESS_EVENTS); $oPMScript->execute(); - $oAppEvent->setAppEvnLastExecutionDate( date( 'Y-m-d H:i:s' ) ); + $oAppEvent->setAppEvnLastExecutionDate(date('Y-m-d H:i:s')); - if (sizeof( $_SESSION['TRIGGER_DEBUG']['ERRORS'] ) == 0) { + if (sizeof($_SESSION['TRIGGER_DEBUG']['ERRORS']) == 0) { $log[] = ' - The trigger ' . $oTrigger->getTriTitle() . ' was executed successfully!'; if ($debug) { - println( " - The trigger '{$oTrigger->getTriTitle()}' was executed successfully!" ); - //g::pr($aFields); + println(" - The trigger '{$oTrigger->getTriTitle()}' was executed successfully!"); } $aFields['APP_DATA'] = $oPMScript->aFields; - $oCase->updateCase( $aRow['APP_UID'], $aFields ); - $oAppEvent->setAppEvnStatus( 'CLOSE' ); + $oCase->updateCase($aRow['APP_UID'], $aFields); + $oAppEvent->setAppEvnStatus('CLOSE'); } else { if ($debug) { $log[] = ' - The trigger ' . $aRow['TRI_UID'] . ' throw some errors!'; - println( " - The trigger {$aRow['TRI_UID']} throw some errors!" ); - print_r( $_SESSION['TRIGGER_DEBUG']['ERRORS'] ); + println(" - The trigger {$aRow['TRI_UID']} throw some errors!"); + print_r($_SESSION['TRIGGER_DEBUG']['ERRORS']); $_SESSION['TRIGGER_DEBUG']['ERRORS'] = array(); } if ($oAppEvent->getAppEvnAttempts() > 0) { - $oAppEvent->setAppEvnAttempts( $oAppEvent->getAppEvnAttempts() - 1 ); + $oAppEvent->setAppEvnAttempts($oAppEvent->getAppEvnAttempts() - 1); } else { - $oAppEvent->setAppEvnStatus( 'CLOSE' ); + $oAppEvent->setAppEvnStatus('CLOSE'); } } $oAppEvent->save(); @@ -320,7 +316,7 @@ class AppEvent extends BaseAppEvent $log[] = ' Error execute event : ' . $oError->getMessage(); $token = strtotime("now"); PMException::registerErrorLog($oError, $token); - G::outRes( G::LoadTranslation("ID_EXCEPTION_LOG_INTERFAZ", array($token)) ); + G::outRes(G::LoadTranslation("ID_EXCEPTION_LOG_INTERFAZ", array($token))); die; return $oError->getMessage(); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ScriptTask.php b/workflow/engine/src/ProcessMaker/BusinessModel/ScriptTask.php index a2105a553..371eb0bae 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ScriptTask.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ScriptTask.php @@ -638,6 +638,7 @@ class ScriptTask $oPMScript->setDataTrigger($trigger->toArray(BasePeer::TYPE_FIELDNAME)); $oPMScript->setFields($arrayApplicationData["APP_DATA"]); $oPMScript->setScript($trigger->getTriWebbot()); + $oPMScript->setExecutedOn(PMScript::SCRIPT_TASK); $oPMScript->execute(); if (isset($oPMScript->aFields["__ERROR__"])) { diff --git a/workflow/engine/templates/cases/cases_StepsTree.php b/workflow/engine/templates/cases/cases_StepsTree.php index d560cbea0..94c0d3b4f 100644 --- a/workflow/engine/templates/cases/cases_StepsTree.php +++ b/workflow/engine/templates/cases/cases_StepsTree.php @@ -49,6 +49,7 @@ foreach ($rs as $key => $aRow) { $bAccessStep = false; if (trim($aRow->getStepCondition()) != '') { $oPMScript->setScript($aRow->getStepCondition()); + $oPMScript->setExecutedOn(PMScript::CONDITION); $bAccessStep = $oPMScript->evaluate(); } else { $bAccessStep = true;