rule = $rule; $self->triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get(); $self->actions = $rule->ruleActions()->orderBy('order', 'ASC')->get(); return $self; } /** * @param TransactionJournal $journal */ public function handleTransactionJournal(TransactionJournal $journal) { $this->journal = $journal; // get all triggers: $triggered = $this->triggered(); if ($triggered) { Log::debug('Rule #' . $this->rule->id . ' was triggered. Now process each action.'); $this->actions(); } } /** * @return bool */ private function actions() { /** * @var int $index * @var RuleAction $action */ foreach ($this->rule->ruleActions()->orderBy('order', 'ASC')->get() as $action) { /** @var ActionInterface $actionClass */ $actionClass = ActionFactory::getAction($action, $this->journal); $actionClass->act(); if ($action->stop_processing) { break; } } return true; } /** * Method to check whether the current transaction would be triggered * by the given list of triggers * * @return bool */ private function triggered() { $foundTriggers = 0; $hitTriggers = 0; /** @var RuleTrigger $trigger */ foreach ($this->triggers as $trigger) { $foundTriggers++; /** @var TriggerInterface $triggerObject */ $triggerObject = TriggerFactory::getTrigger($trigger); if ($triggerObject->triggered()) { $hitTriggers++; } if ($trigger->stop_processing) { break; } } Log::debug('Total: ' . $foundTriggers . ' found triggers. ' . $hitTriggers . ' triggers were hit.'); return ($hitTriggers == $foundTriggers); } }