mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 02:36:28 +00:00 
			
		
		
		
	Moved creation of Trigger objects to factory for reuse
This commit is contained in:
		| @@ -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++; | ||||
|             } | ||||
|   | ||||
							
								
								
									
										69
									
								
								app/Rules/Triggers/TriggerFactory.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								app/Rules/Triggers/TriggerFactory.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| <?php | ||||
| declare(strict_types = 1); | ||||
| /** | ||||
|  * TriggerFactory.php | ||||
|  * Copyright (C) 2016 Robert Horlings | ||||
|  * | ||||
|  * This software may be modified and distributed under the terms | ||||
|  * of the MIT license.  See the LICENSE file for details. | ||||
|  */ | ||||
|  | ||||
| namespace FireflyIII\Rules\Triggers; | ||||
|  | ||||
| use FireflyIII\Models\RuleTrigger; | ||||
| use FireflyIII\Models\TransactionJournal; | ||||
| use FireflyIII\Support\Domain; | ||||
|  | ||||
| /** | ||||
|  * Interface TriggerInterface | ||||
|  * | ||||
|  * @package FireflyIII\Rules\Triggers | ||||
|  */ | ||||
| class TriggerFactory | ||||
| { | ||||
|     protected static $triggerTypes = null; | ||||
|      | ||||
|     /** | ||||
|      * Returns the class name to be used for triggers with the given name | ||||
|      * @param string $triggerType | ||||
|      * @return TriggerInterface | ||||
|      */ | ||||
|     public static function getTriggerClass(string $triggerType): string { | ||||
|         $triggerTypes = self::getTriggerTypes(); | ||||
|          | ||||
|         if (!array_key_exists($triggerType, $triggerTypes)) { | ||||
|             abort(500, 'No such trigger exists ("' . $triggerType . '").'); | ||||
|         } | ||||
|          | ||||
|         $class = $triggerTypes[$triggerType]; | ||||
|         if (!class_exists($class)) { | ||||
|             abort(500, 'Could not instantiate class for rule trigger type "' . $triggerType . '" (' . $class . ').'); | ||||
|         } | ||||
|          | ||||
|         return $class; | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Returns the trigger for the given type and journal | ||||
|      * @param RuleTrigger $trigger | ||||
|      * @param TransactionJournal $journal | ||||
|      * @return TriggerInterface | ||||
|      */ | ||||
|     public static function getTrigger(RuleTrigger $trigger, TransactionJournal $journal): TriggerInterface { | ||||
|         $triggerType = $trigger->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; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user