From bc3d64a2fff006d6726633d1c9bf096dc7c8d0e6 Mon Sep 17 00:00:00 2001 From: Robert Horlings Date: Wed, 17 Feb 2016 13:13:23 +0100 Subject: [PATCH] Moved creation of Trigger objects to factory for reuse --- app/Rules/Processor.php | 15 ++---- app/Rules/Triggers/TriggerFactory.php | 69 +++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 12 deletions(-) create mode 100644 app/Rules/Triggers/TriggerFactory.php diff --git a/app/Rules/Processor.php b/app/Rules/Processor.php index 1b1d78341b..b8a53664fd 100644 --- a/app/Rules/Processor.php +++ b/app/Rules/Processor.php @@ -16,6 +16,7 @@ use FireflyIII\Models\RuleTrigger; use FireflyIII\Models\TransactionJournal; use FireflyIII\Rules\Actions\ActionInterface; use FireflyIII\Rules\Triggers\TriggerInterface; +use FireflyIII\Rules\Triggers\TriggerFactory; use FireflyIII\Support\Domain; use Log; @@ -147,19 +148,9 @@ class Processor /** @var RuleTrigger $trigger */ foreach ($triggers 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); + $triggerClass = TriggerFactory::getTrigger($trigger, $this->journal); if ($triggerClass->triggered()) { $hitTriggers++; } diff --git a/app/Rules/Triggers/TriggerFactory.php b/app/Rules/Triggers/TriggerFactory.php new file mode 100644 index 0000000000..cb7c68efd2 --- /dev/null +++ b/app/Rules/Triggers/TriggerFactory.php @@ -0,0 +1,69 @@ +trigger_type; + $class = self::getTriggerClass($triggerType); + + return new $class($trigger, $journal); + } + + /** + * Returns a map with triggertypes, mapped to the class representing that type + */ + protected static function getTriggerTypes() { + if( !self::$triggerTypes ) { + self::$triggerTypes = Domain::getRuleTriggers(); + } + + return self::$triggerTypes; + } +}