Beispiel #1
0
 /**
  * @return bool
  */
 protected function triggered()
 {
     $foundTriggers = 0;
     $hitTriggers = 0;
     /** @var RuleTrigger $trigger */
     foreach ($this->rule->ruleTriggers()->orderBy('order', 'ASC')->get() as $trigger) {
         $foundTriggers++;
         $type = $trigger->trigger_type;
         if (!isset($this->triggerTypes[$type])) {
             abort(500, 'No such trigger exists ("' . $type . '").');
         }
         $class = $this->triggerTypes[$type];
         Log::debug('Trigger #' . $trigger->id . ' for rule #' . $trigger->rule_id . ' (' . $type . ')');
         if (!class_exists($class)) {
             abort(500, 'Could not instantiate class for rule trigger type "' . $type . '" (' . $class . ').');
         }
         /** @var TriggerInterface $triggerClass */
         $triggerClass = new $class($trigger, $this->journal);
         if ($triggerClass->triggered()) {
             $hitTriggers++;
         }
         if ($trigger->stop_processing) {
             break;
         }
     }
     Log::debug('Total: ' . $foundTriggers . ' found triggers. ' . $hitTriggers . ' triggers were hit.');
     return $hitTriggers == $foundTriggers;
 }
 /**
  * This method will make a Processor that will process each transaction journal using the triggers
  * and actions found in the given Rule.
  *
  * @param Rule $rule
  *
  * @return Processor
  */
 public static function make(Rule $rule)
 {
     Log::debug(sprintf('Making new rule from Rule %d', $rule->id));
     $self = new self();
     $self->rule = $rule;
     $triggerSet = $rule->ruleTriggers()->orderBy('order', 'ASC')->get();
     /** @var RuleTrigger $trigger */
     foreach ($triggerSet as $trigger) {
         $self->triggers->push(TriggerFactory::getTrigger($trigger));
     }
     $self->actions = $rule->ruleActions()->orderBy('order', 'ASC')->get();
     return $self;
 }
Beispiel #3
0
 /**
  * @param Rule  $rule
  * @param array $data
  *
  * @return Rule
  */
 public function update(Rule $rule, array $data)
 {
     // update rule:
     $rule->active = $data['active'];
     $rule->stop_processing = $data['stop_processing'];
     $rule->title = $data['title'];
     $rule->description = $data['description'];
     $rule->save();
     // delete triggers:
     $rule->ruleTriggers()->delete();
     // delete actions:
     $rule->ruleActions()->delete();
     // recreate triggers:
     $order = 1;
     $stopProcessing = false;
     $triggerValues = ['action' => 'user_action', 'value' => $data['trigger'], 'stopProcessing' => $stopProcessing, 'order' => $order];
     $this->storeTrigger($rule, $triggerValues);
     foreach ($data['rule-triggers'] as $index => $trigger) {
         $value = $data['rule-trigger-values'][$index];
         $stopProcessing = isset($data['rule-trigger-stop'][$index]) ? true : false;
         $triggerValues = ['action' => $trigger, 'value' => $value, 'stopProcessing' => $stopProcessing, 'order' => $order];
         $this->storeTrigger($rule, $triggerValues);
         $order++;
     }
     // recreate actions:
     $order = 1;
     foreach ($data['rule-actions'] as $index => $action) {
         $value = $data['rule-action-values'][$index];
         $stopProcessing = isset($data['rule-action-stop'][$index]) ? true : false;
         $actionValues = ['action' => $action, 'value' => $value, 'stopProcessing' => $stopProcessing, 'order' => $order];
         $this->storeAction($rule, $actionValues);
     }
     return $rule;
 }
 /**
  * @param Rule  $rule
  * @param array $data
  *
  * @return Rule
  */
 public function update(Rule $rule, array $data) : Rule
 {
     // update rule:
     $rule->active = $data['active'];
     $rule->stop_processing = $data['stop_processing'];
     $rule->title = $data['title'];
     $rule->description = $data['description'];
     $rule->save();
     // delete triggers:
     $rule->ruleTriggers()->delete();
     // delete actions:
     $rule->ruleActions()->delete();
     // recreate triggers:
     $this->storeTriggers($rule, $data);
     // recreate actions:
     $this->storeActions($rule, $data);
     return $rule;
 }