diff --git a/app/Handlers/Events/FireRulesForStore.php b/app/Handlers/Events/FireRulesForStore.php index 1220f4ed10..782e244bec 100644 --- a/app/Handlers/Events/FireRulesForStore.php +++ b/app/Handlers/Events/FireRulesForStore.php @@ -15,6 +15,7 @@ use FireflyIII\Models\Rule; use FireflyIII\Models\RuleGroup; use FireflyIII\Rules\Processor; use FireflyIII\User; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Auth; use Log; @@ -48,7 +49,13 @@ class FireRulesForStore // get all the user's rule groups, with the rules, order by 'order'. /** @var User $user */ $user = Auth::user(); - $groups = $user->ruleGroups()->with('rules')->hasTrigger('user_action','store-journal')->orderBy('order', 'ASC')->get(); + $groups = $user->ruleGroups()->with( + [ + 'rules' => function (HasMany $query) { + $query->hasTrigger('user_action', 'store-journal'); + } + ] + )->orderBy('order', 'ASC')->get(); // /** @var RuleGroup $group */ foreach ($groups as $group) { @@ -63,7 +70,7 @@ class FireRulesForStore } } Log::debug('FireRulesForStore!'); - echo 'handle'; + echo 'done handling rules.'; exit; } } \ No newline at end of file diff --git a/app/Models/Rule.php b/app/Models/Rule.php index c4c73aac1c..55a6f97ab5 100644 --- a/app/Models/Rule.php +++ b/app/Models/Rule.php @@ -9,7 +9,7 @@ namespace FireflyIII\Models; -use Crypt; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; /** @@ -34,7 +34,6 @@ use Illuminate\Database\Eloquent\Model; */ class Rule extends Model { - /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ @@ -67,5 +66,23 @@ class Rule extends Model return $this->hasMany('FireflyIII\Models\RuleTrigger'); } + /** + * @param $query + * @param $triggerType + * @param null $triggerValue + * + * @return Builder + */ + public function scopeHasTrigger(Builder $query, $triggerType, $triggerValue = null) + { + $query->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id'); + $query->where('rule_triggers.trigger_type', $triggerType); + if (!is_null($triggerValue)) { + $query->where('rule_triggers.trigger_value', $triggerValue); + } + return $query; + + } + } diff --git a/app/Rules/Processor.php b/app/Rules/Processor.php index 870fc1ecd6..ef44b53af0 100644 --- a/app/Rules/Processor.php +++ b/app/Rules/Processor.php @@ -60,7 +60,7 @@ class Processor $type = $trigger->trigger_type; $class = $this->triggerTypes[$type]; if (!class_exists($class)) { - throw new Exception('Could not instantiate class for rule trigger type "' . $type . '".'); + abort(500, 'Could not instantiate class for rule trigger type "' . $type . '" ('.$class.').'); } }