/** * derivate Case moves the case to the next task in the process according to the routing rules * * @param string $userId * @param string $caseId * @param string $delIndex * @param array $tasks * @param bool $bExecuteTriggersBeforeAssignment * @return $result will return an object */ public function derivateCase ($userId, $caseId, $delIndex, $bExecuteTriggersBeforeAssignment = false, $tasks = array()) { $g = new G(); try { $g->sessionVarSave(); $_SESSION["APPLICATION"] = $caseId; $_SESSION["INDEX"] = $delIndex; $_SESSION["USER_LOGGED"] = $userId; $sStatus = 'TO_DO'; $varResponse = ''; $varTriggers = "\n"; if ($delIndex == '') { $oCriteria = new Criteria( 'workflow' ); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); $oCriteria->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL ); if (AppDelegationPeer::doCount( $oCriteria ) > 1) { $result = new wsResponse( 20, G::loadTranslation( 'ID_SPECIFY_DELEGATION_INDEX' ) ); return $result; } $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); $delIndex = $aRow['DEL_INDEX']; } $oAppDel = new AppDelegation(); $appdel = $oAppDel->Load( $caseId, $delIndex ); if ($userId != $appdel['USR_UID']) { $result = new wsResponse( 17, G::loadTranslation( 'ID_CASE_ASSIGNED_ANOTHER_USER' ) ); return $result; } if ($appdel['DEL_FINISH_DATE'] != null) { $result = new wsResponse( 18, G::loadTranslation( 'ID_CASE_DELEGATION_ALREADY_CLOSED' ) ); return $result; } $oCriteria = new Criteria( 'workflow' ); $oCriteria->addSelectColumn( AppDelayPeer::APP_UID ); $oCriteria->addSelectColumn( AppDelayPeer::APP_DEL_INDEX ); $oCriteria->add( AppDelayPeer::APP_TYPE, '' ); $oCriteria->add( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'PAUSE' )->addOr( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'CANCEL' ) ) ); $oCriteria->addAscendingOrderByColumn( AppDelayPeer::APP_ENABLE_ACTION_DATE ); $oDataset = AppDelayPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); $aRow = $oDataset->getRow(); if (is_array( $aRow )) { if (isset( $aRow['APP_DISABLE_ACTION_USER'] ) && $aRow['APP_DISABLE_ACTION_USER'] != 0 && isset( $aRow['APP_DISABLE_ACTION_DATE'] ) && $aRow['APP_DISABLE_ACTION_DATE'] != '') { $result = new wsResponse( 19, G::loadTranslation( 'ID_CASE_IN_STATUS' ) . " " . $aRow['APP_TYPE'] ); return $result; } } $aData = array(); $aData['APP_UID'] = $caseId; $aData['DEL_INDEX'] = $delIndex; $aData['USER_UID'] = $userId; //Load data $oCase = new Cases(); $appFields = $oCase->loadCase( $caseId, $delIndex ); if (is_null( $appFields["DEL_INIT_DATE"] )) { $oCase->setDelInitDate( $caseId, $delIndex ); $appFields = $oCase->loadCase( $caseId, $delIndex ); } $appFields["APP_DATA"]["APPLICATION"] = $caseId; if (! isset( $_SESSION["PROCESS"] )) { $_SESSION["PROCESS"] = $appFields["PRO_UID"]; } if ($bExecuteTriggersBeforeAssignment) { //Execute triggers before assignment $aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 1, 'BEFORE' ); if (count( $aTriggers ) > 0) { $varTriggers = $varTriggers . "<br /><b>-= Before Assignment =-</b><br />"; $oPMScript = new PMScript(); foreach ($aTriggers as $aTrigger) { //$appFields = $oCase->loadCase( $caseId ); //$appFields['APP_DATA']['APPLICATION'] = $caseId; //Set variables $params = new stdClass(); $params->appData = $appFields["APP_DATA"]; if ($this->stored_system_variables) { $params->option = "STORED SESSION"; $params->SID = $this->wsSessionId; } $appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) ); //PMScript $oPMScript->setFields( $appFields['APP_DATA'] ); $bExecute = true; if ($aTrigger['ST_CONDITION'] !== '') { $oPMScript->setScript( $aTrigger['ST_CONDITION'] ); $bExecute = $oPMScript->evaluate(); } if ($bExecute) { $oPMScript->setScript( $aTrigger['TRI_WEBBOT'] ); $oPMScript->execute(); $trigger = TriggersPeer::retrieveByPk($aTrigger["TRI_UID"]); $varTriggers = $varTriggers . " - " . nl2br(htmlentities($trigger->getTriTitle(), ENT_QUOTES)) . "<br />"; //$appFields = $oCase->loadCase( $caseId ); $appFields['APP_DATA'] = $oPMScript->aFields; unset($appFields['APP_STATUS']); unset($appFields['APP_PROC_STATUS']); unset($appFields['APP_PROC_CODE']); unset($appFields['APP_PIN']); $oCase->updateCase( $caseId, $appFields ); } } } } //Execute triggers before derivation BEFORE_ROUTING $aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 2, 'BEFORE' ); if (count( $aTriggers ) > 0) { $varTriggers .= "<b>-= Before Derivation =-</b><br/>"; $oPMScript = new PMScript(); foreach ($aTriggers as $aTrigger) { //$appFields = $oCase->loadCase( $caseId ); //$appFields['APP_DATA']['APPLICATION'] = $caseId; //Set variables $params = new stdClass(); $params->appData = $appFields["APP_DATA"]; if ($this->stored_system_variables) { $params->option = "STORED SESSION"; $params->SID = $this->wsSessionId; } $appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) ); //PMScript $oPMScript->setFields( $appFields['APP_DATA'] ); $bExecute = true; if ($aTrigger['ST_CONDITION'] !== '') { $oPMScript->setScript( $aTrigger['ST_CONDITION'] ); $bExecute = $oPMScript->evaluate(); } if ($bExecute) { $oPMScript->setScript( $aTrigger['TRI_WEBBOT'] ); $oPMScript->execute(); $oTrigger = TriggersPeer::retrieveByPk( $aTrigger['TRI_UID'] ); $varTriggers .= " - " . nl2br( htmlentities( $oTrigger->getTriTitle(), ENT_QUOTES ) ) . "<br/>"; //$appFields = $oCase->loadCase( $caseId ); $appFields['APP_DATA'] = $oPMScript->aFields; unset($appFields['APP_STATUS']); unset($appFields['APP_PROC_STATUS']); unset($appFields['APP_PROC_CODE']); unset($appFields['APP_PIN']); //$appFields['APP_DATA']['APPLICATION'] = $caseId; $oCase->updateCase( $caseId, $appFields ); } } } $oDerivation = new Derivation(); if (!empty($tasks)) { $nextDelegations = $tasks; } else { $derive = $oDerivation->prepareInformation($aData); if (isset($derive[1])) { if ($derive[1]['ROU_TYPE'] == 'SELECT') { $result = new wsResponse(21, G::loadTranslation('ID_CAN_NOT_ROUTE_CASE_USING_WEBSERVICES')); return $result; } } else { $result = new wsResponse(22, G::loadTranslation('ID_TASK_DOES_NOT_HAVE_ROUTING_RULE')); return $result; } foreach ($derive as $key => $val) { if ($val['NEXT_TASK']['TAS_ASSIGN_TYPE'] == 'MANUAL') { $result = new wsResponse(15, G::loadTranslation('ID_TASK_DEFINED_MANUAL_ASSIGNMENT')); return $result; } //Routed to the next task, if end process then not exist user $nodeNext = array(); $usrasgdUid = null; $usrasgdUserName = null; if (isset($val['NEXT_TASK']['USER_ASSIGNED'])) { $usrasgdUid = $val['NEXT_TASK']['USER_ASSIGNED']['USR_UID']; $usrasgdUserName = '******' . $val['NEXT_TASK']['USER_ASSIGNED']['USR_USERNAME'] . ')'; } $nodeNext['TAS_UID'] = $val['NEXT_TASK']['TAS_UID']; $nodeNext['USR_UID'] = $usrasgdUid; $nodeNext['TAS_ASSIGN_TYPE'] = $val['NEXT_TASK']['TAS_ASSIGN_TYPE']; $nodeNext['TAS_DEF_PROC_CODE'] = $val['NEXT_TASK']['TAS_DEF_PROC_CODE']; $nodeNext['DEL_PRIORITY'] = $appdel['DEL_PRIORITY']; $nodeNext['TAS_PARENT'] = $val['NEXT_TASK']['TAS_PARENT']; $nextDelegations[] = $nodeNext; $varResponse = $varResponse . (($varResponse != '') ? ',' : '') . $val['NEXT_TASK']['TAS_TITLE'] . $usrasgdUserName; } } $appFields['DEL_INDEX'] = $delIndex; if (isset( $derive['TAS_UID'] )) { $appFields['TAS_UID'] = $derive['TAS_UID']; } //Save data - Start //$appFields = $oCase->loadCase( $caseId ); //$oCase->updateCase ( $caseId, $appFields ); //Save data - End $row = array (); $oCriteria = new Criteria( 'workflow' ); $del = DBAdapter::getStringDelimiter(); $oCriteria->addSelectColumn( RoutePeer::ROU_TYPE ); $oCriteria->addSelectColumn( RoutePeer::ROU_NEXT_TASK ); $oCriteria->add( RoutePeer::TAS_UID, $appdel['TAS_UID'] ); $oDataset = TaskPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $oDataset->next(); while ($aRow = $oDataset->getRow()) { $row[] = array ('ROU_TYPE' => $aRow['ROU_TYPE'],'ROU_NEXT_TASK' => $aRow['ROU_NEXT_TASK'] ); $oDataset->next(); } //derivate case $aCurrentDerivation = array ('APP_UID' => $caseId,'DEL_INDEX' => $delIndex,'APP_STATUS' => $sStatus,'TAS_UID' => $appdel['TAS_UID'],'ROU_TYPE' => $row[0]['ROU_TYPE'] ); $oDerivation->derivate( $aCurrentDerivation, $nextDelegations ); $appFields = $oCase->loadCase( $caseId ); //Execute triggers after derivation $aTriggers = $oCase->loadTriggers( $appdel['TAS_UID'], 'ASSIGN_TASK', - 2, 'AFTER' ); if (count( $aTriggers ) > 0) { //$appFields['APP_DATA']['APPLICATION'] = $caseId; //Set variables $params = new stdClass(); $params->appData = $appFields["APP_DATA"]; if ($this->stored_system_variables) { $params->option = "STORED SESSION"; $params->SID = $this->wsSessionId; } $appFields["APP_DATA"] = array_merge( $appFields["APP_DATA"], G::getSystemConstants( $params ) ); //PMScript $oPMScript = new PMScript(); $oPMScript->setFields( $appFields['APP_DATA'] ); $varTriggers .= "<b>-= After Derivation =-</b><br/>"; foreach ($aTriggers as $aTrigger) { $bExecute = true; if ($aTrigger['ST_CONDITION'] !== '') { $oPMScript->setScript( $aTrigger['ST_CONDITION'] ); $bExecute = $oPMScript->evaluate(); } if ($bExecute) { $oPMScript->setScript( $aTrigger['TRI_WEBBOT'] ); $oPMScript->execute(); $oTrigger = TriggersPeer::retrieveByPk( $aTrigger['TRI_UID'] ); $varTriggers .= " - " . nl2br( htmlentities( $oTrigger->getTriTitle(), ENT_QUOTES ) ) . "<br/>"; //$appFields = $oCase->loadCase($caseId); $appFields['APP_DATA'] = $oPMScript->aFields; //$appFields['APP_DATA']['APPLICATION'] = $caseId; //$appFields = $oCase->loadCase($caseId); unset($aFields['APP_STATUS']); unset($aFields['APP_PROC_STATUS']); unset($aFields['APP_PROC_CODE']); unset($aFields['APP_PIN']); $oCase->updateCase( $caseId, $appFields ); } } } $sFromName = ""; if ($userId != "") { $user = new Users(); $arrayUserData = $user->load($userId); if (trim($arrayUserData["USR_EMAIL"]) == "") { $arrayUserData["USR_EMAIL"] = "info@" . $_SERVER["HTTP_HOST"]; } $sFromName = "\"" . $arrayUserData["USR_FIRSTNAME"] . " " . $arrayUserData["USR_LASTNAME"] . "\" <" . $arrayUserData["USR_EMAIL"] . ">"; } $oCase->sendNotifications( $appdel['TAS_UID'], $nextDelegations, $appFields['APP_DATA'], $caseId, $delIndex, $sFromName ); // Send notifications Mobile - Start try { $oLight = new \ProcessMaker\BusinessModel\Light(); $nextIndex = $oLight->getInformationDerivatedCase($appFields['APP_UID'], $delIndex); $notificationMobile = new \ProcessMaker\BusinessModel\Light\NotificationDevice(); $notificationMobile->routeCaseNotification($userId, $_SESSION["PROCESS"], $appdel['TAS_UID'], $appFields, $nextDelegations, $nextIndex); } catch (Exception $e) { \G::log(G::loadTranslation( 'ID_NOTIFICATION_ERROR' ) . '|' . $e->getMessage() , PATH_DATA, "mobile.log"); } // Send notifications Mobile - End //Save data - Start //$appFields = $oCase->loadCase($caseId); //$oCase->updateCase($caseId, $appFields); //Save data - End $oProcess = new Process(); $oProcessFieds = $oProcess->Load( $appFields['PRO_UID'] ); //here dubug mode in web entry if (isset( $oProcessFieds['PRO_DEBUG'] ) && $oProcessFieds['PRO_DEBUG']) { $result = new wsResponse( 0, $varResponse . " <br><br><table width='100%' cellpadding='0' cellspacing='0'><tr><td class='FormTitle'> " . G::LoadTranslation( 'ID_DEBUG_MESSAGE' ) . "</td></tr></table>" . $varTriggers ); } else { $result = new wsResponse( 0, $varResponse . " --- " . $oProcessFieds['PRO_DEBUG'] ); } $res = $result->getPayloadArray(); //now fill the array of AppDelegationPeer $oCriteria = new Criteria( 'workflow' ); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_INDEX ); $oCriteria->addSelectColumn( AppDelegationPeer::USR_UID ); $oCriteria->addSelectColumn( AppDelegationPeer::TAS_UID ); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_THREAD ); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_THREAD_STATUS ); $oCriteria->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); $oCriteria->add( AppDelegationPeer::APP_UID, $caseId ); $oCriteria->add( AppDelegationPeer::DEL_PREVIOUS, $delIndex ); $oCriteria->addAscendingOrderByColumn( AppDelegationPeer::DEL_INDEX ); $oDataset = AppDelegationPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $aCurrentUsers = array (); while ($oDataset->next()) { $aAppDel = $oDataset->getRow(); $oUser = new Users(); try { $oUser->load( $aAppDel['USR_UID'] ); $uFields = $oUser->toArray( BasePeer::TYPE_FIELDNAME ); $currentUserName = $oUser->getUsrFirstname() . ' ' . $oUser->getUsrLastname(); } catch (Exception $e) { $currentUserName = ''; } $oTask = new Task(); try { $uFields = $oTask->load( $aAppDel['TAS_UID'] ); $taskName = $uFields['TAS_TITLE']; } catch (Exception $e) { $taskName = ''; } // execute events $eventPro = $_SESSION["PROCESS"]; $eventApp = $caseId; $eventInd = $aAppDel['DEL_INDEX']; $eventTas = $aAppDel['TAS_UID']; $oEvent = new Event(); $oEvent->createAppEvents( $eventPro, $eventApp, $eventInd, $eventTas ); // end events $currentUser = new stdClass(); $currentUser->userId = $aAppDel['USR_UID']; $currentUser->userName = $currentUserName; $currentUser->taskId = $aAppDel['TAS_UID']; $currentUser->taskName = $taskName; $currentUser->delIndex = $aAppDel['DEL_INDEX']; $currentUser->delThread = $aAppDel['DEL_THREAD']; $currentUser->delThreadStatus = $aAppDel['DEL_THREAD_STATUS']; $aCurrentUsers[] = $currentUser; } $res['routing'] = $aCurrentUsers; $g->sessionVarRestore(); return $res; } catch (Exception $e) { $result = new wsResponse( 100, $e->getMessage() ); $g->sessionVarRestore(); return $result; } }
/** * verify if Trigger row specified in [sUid] exists. * * @param string $sUid the uid of the Prolication */ public function TriggerExists($sUid) { $con = Propel::getConnection(TriggersPeer::DATABASE_NAME); try { $oObj = TriggersPeer::retrieveByPk($sUid); if (is_object($oObj) && get_class($oObj) == 'Triggers') { return true; } else { return false; } } catch (Exception $oError) { throw $oError; } }
function create($aData) { if (!isset($aData['EVN_UID']) || $aData['EVN_UID'] == '') { $aData['EVN_UID'] = G::generateUniqueID(); } $oConnection = Propel::getConnection(EventPeer::DATABASE_NAME); try { $oEvent = new Event(); $oEvent->setEvnUid($aData['EVN_UID']); $oEvent->setProUid($aData['PRO_UID']); if (isset($aData['EVN_RELATED_TO'])) { $oEvent->setEvnRelatedTo($aData['EVN_RELATED_TO']); if ($aData['EVN_RELATED_TO'] == 'SINGLE') { if (isset($aData['TAS_UID'])) { $oEvent->setTasUid($aData['TAS_UID']); } $oEvent->setEvnTasUidTo(''); $oEvent->setEvnTasUidFrom(''); } else { $oEvent->setTasUid(''); if (isset($aData['EVN_TAS_UID_TO'])) { $oEvent->setEvnTasUidTo($aData['EVN_TAS_UID_TO']); } if (isset($aData['EVN_TAS_UID_FROM'])) { $oEvent->setEvnTasUidFrom($aData['EVN_TAS_UID_FROM']); } } } if (isset($aData['EVN_POSX'])) { $oEvent->setEvnPosx($aData['EVN_POSX']); } if (isset($aData['EVN_POSY'])) { $oEvent->setEvnPosy($aData['EVN_POSY']); } if (isset($aData['EVN_TYPE'])) { $oEvent->setEvnType($aData['EVN_TYPE']); } if (isset($aData['EVN_TAS_ESTIMATED_DURATION'])) { $oEvent->setEvnTasEstimatedDuration($aData['EVN_TAS_ESTIMATED_DURATION']); } if (isset($aData['EVN_WHEN_OCCURS'])) { $oEvent->setEvnWhenOccurs($aData['EVN_WHEN_OCCURS']); } if (isset($aData['EVN_ACTION'])) { $oEvent->setEvnAction($aData['EVN_ACTION']); } if (isset($aData['EVN_CONDITIONS'])) { $oEvent->setEvnConditions($aData['EVN_CONDITIONS']); } if (isset($aData['EVN_STATUS'])) { $oEvent->setEvnStatus($aData['EVN_STATUS']); } if (isset($aData['EVN_WHEN'])) { $oEvent->setEvnWhen($aData['EVN_WHEN']); } $oEvent->setEvnMaxAttempts(3); //start the transaction $oConnection->begin(); if (isset($aData['EVN_TYPE'])) { if ($aData['EVN_TYPE'] === 'bpmnEventEmptyEnd') { unset($aData['TRI_UID']); } } if (isset($aData['TRI_UID'])) { $oTrigger = new Triggers(); if (trim($aData['TRI_UID']) === "" || !$oTrigger->TriggerExists($aData['TRI_UID'])) { //create an empty trigger $aTrigger = array(); $aTrigger['PRO_UID'] = $aData['PRO_UID']; $aTrigger['TRI_TITLE'] = 'For event: ' . $aData['EVN_DESCRIPTION']; $aTrigger['TRI_DESCRIPTION'] = 'Autogenerated ' . $aTrigger['TRI_TITLE']; $aTrigger['TRI_WEBBOT'] = '// ' . $aTrigger['TRI_DESCRIPTION']; $oTrigger->create($aTrigger); } else { $oTrigger = TriggersPeer::retrieveByPk($aData['TRI_UID']); } $oEvent->setTriUid($oTrigger->getTriUid()); $parameters = new StdClass(); $parameters->hash = md5($oTrigger->getTriWebbot()); if (isset($aData['EVN_ACTION_PARAMETERS']->SUBJECT)) { $parameters->SUBJECT = $aData['EVN_ACTION_PARAMETERS']->SUBJECT; $parameters->TO = $aData['EVN_ACTION_PARAMETERS']->TO; $parameters->CC = $aData['EVN_ACTION_PARAMETERS']->CC; $parameters->BCC = $aData['EVN_ACTION_PARAMETERS']->BCC; $parameters->TEMPLATE = $aData['EVN_ACTION_PARAMETERS']->TEMPLATE; } $oEvent->setEvnActionParameters(serialize($parameters)); } if ($oEvent->validate()) { $iResult = $oEvent->save(); if (isset($aData['EVN_DESCRIPTION'])) { $oEvent->setEvnDescription($aData['EVN_DESCRIPTION']); } $oConnection->commit(); return $aData['EVN_UID']; } else { $sMessage = ''; $aValidationFailures = $oEvent->getValidationFailures(); foreach ($aValidationFailures as $oValidationFailure) { $sMessage .= $oValidationFailure->getMessage() . '<br />'; } throw new Exception('The row Event cannot be created!<br />' . $sMessage); } } catch (Exception $oError) { $oConnection->rollback(); throw $oError; } }
public function executeEvents($sNow, $debug = false, &$log = array(), $cron = 0) { require_once 'classes/model/Configuration.php'; require_once 'classes/model/Triggers.php'; G::LoadClass('case'); $debug = 1; $oCase = new Cases(); try { $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->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); $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); $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["processcTimeStart"] = time(); @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; if ($debug) { require_once 'classes/model/Application.php'; $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']); } 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"); } $oAppEvent->setAppEvnStatus('CLOSE'); $oAppEvent->save(); continue; } $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"); } $oAppEvent->setAppEvnStatus('CLOSE'); $oAppEvent->save(); continue; } global $oPMScript; $oPMScript = new PMScript(); $task = new Task(); $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->setFields($aFields['APP_DATA']); $oPMScript->setScript($oTrigger->getTriWebbot()); $oPMScript->execute(); $oAppEvent->setAppEvnLastExecutionDate(date('Y-m-d H:i:s')); 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); } $aFields['APP_DATA'] = $oPMScript->aFields; $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']); } if ($oAppEvent->getAppEvnAttempts() > 0) { $oAppEvent->setAppEvnAttempts($oAppEvent->getAppEvnAttempts() - 1); } else { $oAppEvent->setAppEvnStatus('CLOSE'); } } $oAppEvent->save(); } return $c; } catch (Exception $oError) { $log[] = ' Error execute event : ' . $oError->getMessage(); die($oError->getMessage()); return $oError->getMessage(); } }