This commit is contained in:
James Cole
2025-10-08 15:16:10 +02:00
parent 1acb5d8681
commit a3cac6fd0f
2 changed files with 32 additions and 18 deletions

View File

@@ -139,7 +139,7 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface, UserGroupInte
/** @var Rule $entry */ /** @var Rule $entry */
foreach ($set as $entry) { foreach ($set as $entry) {
if ($entry->order !== $count) { if ($entry->order !== $count) {
app('log')->debug(sprintf('Rule #%d was on spot %d but must be on spot %d', $entry->id, $entry->order, $count)); Log::debug(sprintf('Rule #%d was on spot %d but must be on spot %d', $entry->id, $entry->order, $count));
$entry->order = $count; $entry->order = $count;
$entry->save(); $entry->save();
} }
@@ -167,7 +167,7 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface, UserGroupInte
if ($action->order !== $index) { if ($action->order !== $index) {
$action->order = $index; $action->order = $index;
$action->save(); $action->save();
app('log')->debug(sprintf('Rule action #%d was on spot %d but must be on spot %d', $action->id, $action->order, $index)); Log::debug(sprintf('Rule action #%d was on spot %d but must be on spot %d', $action->id, $action->order, $index));
} }
++$index; ++$index;
} }
@@ -189,7 +189,7 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface, UserGroupInte
if ($order !== $index) { if ($order !== $index) {
$trigger->order = $index; $trigger->order = $index;
$trigger->save(); $trigger->save();
app('log')->debug(sprintf('Rule trigger #%d was on spot %d but must be on spot %d', $trigger->id, $order, $index)); Log::debug(sprintf('Rule trigger #%d was on spot %d but must be on spot %d', $trigger->id, $order, $index));
} }
++$index; ++$index;
} }
@@ -235,6 +235,7 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface, UserGroupInte
public function getActiveStoreRules(RuleGroup $group): Collection public function getActiveStoreRules(RuleGroup $group): Collection
{ {
return $group->rules() return $group->rules()
->orderBy('rules.order', 'ASC')
->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id') ->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
->where('rule_triggers.trigger_type', 'user_action') ->where('rule_triggers.trigger_type', 'user_action')
->where('rule_triggers.trigger_value', 'store-journal') ->where('rule_triggers.trigger_value', 'store-journal')
@@ -275,23 +276,23 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface, UserGroupInte
if (null === $filter) { if (null === $filter) {
return $groups; return $groups;
} }
app('log')->debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter)); Log::debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter));
return $groups->map( return $groups->map(
static function (RuleGroup $group) use ($filter) { // @phpstan-ignore-line static function (RuleGroup $group) use ($filter) { // @phpstan-ignore-line
app('log')->debug(sprintf('Now filtering group #%d', $group->id)); Log::debug(sprintf('Now filtering group #%d', $group->id));
// filter the rules in the rule group: // filter the rules in the rule group:
$group->rules = $group->rules->filter( $group->rules = $group->rules->filter(
static function (Rule $rule) use ($filter) { static function (Rule $rule) use ($filter) {
app('log')->debug(sprintf('Now filtering rule #%d', $rule->id)); Log::debug(sprintf('Now filtering rule #%d', $rule->id));
foreach ($rule->ruleTriggers as $trigger) { foreach ($rule->ruleTriggers as $trigger) {
if ('user_action' === $trigger->trigger_type && $filter === $trigger->trigger_value) { if ('user_action' === $trigger->trigger_type && $filter === $trigger->trigger_value) {
app('log')->debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter)); Log::debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter));
return true; return true;
} }
} }
app('log')->debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter)); Log::debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter));
return false; return false;
} }
@@ -331,23 +332,23 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface, UserGroupInte
if (null === $filter) { if (null === $filter) {
return $groups; return $groups;
} }
app('log')->debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter)); Log::debug(sprintf('Will filter getRuleGroupsWithRules on "%s".', $filter));
return $groups->map( return $groups->map(
static function (RuleGroup $group) use ($filter) { // @phpstan-ignore-line static function (RuleGroup $group) use ($filter) { // @phpstan-ignore-line
app('log')->debug(sprintf('Now filtering group #%d', $group->id)); Log::debug(sprintf('Now filtering group #%d', $group->id));
// filter the rules in the rule group: // filter the rules in the rule group:
$group->rules = $group->rules->filter( $group->rules = $group->rules->filter(
static function (Rule $rule) use ($filter) { static function (Rule $rule) use ($filter) {
app('log')->debug(sprintf('Now filtering rule #%d', $rule->id)); Log::debug(sprintf('Now filtering rule #%d', $rule->id));
foreach ($rule->ruleTriggers as $trigger) { foreach ($rule->ruleTriggers as $trigger) {
if ('user_action' === $trigger->trigger_type && $filter === $trigger->trigger_value) { if ('user_action' === $trigger->trigger_type && $filter === $trigger->trigger_value) {
app('log')->debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter)); Log::debug(sprintf('Rule #%d triggers on %s, include it.', $rule->id, $filter));
return true; return true;
} }
} }
app('log')->debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter)); Log::debug(sprintf('Rule #%d does not trigger on %s, do not include it.', $rule->id, $filter));
return false; return false;
} }
@@ -414,7 +415,7 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface, UserGroupInte
->decrement('order') ->decrement('order')
; ;
$ruleGroup->order = $newOrder; $ruleGroup->order = $newOrder;
app('log')->debug(sprintf('Order of group #%d ("%s") is now %d', $ruleGroup->id, $ruleGroup->title, $newOrder)); Log::debug(sprintf('Order of group #%d ("%s") is now %d', $ruleGroup->id, $ruleGroup->title, $newOrder));
$ruleGroup->save(); $ruleGroup->save();
return; return;
@@ -425,7 +426,7 @@ class RuleGroupRepository implements RuleGroupRepositoryInterface, UserGroupInte
->increment('order') ->increment('order')
; ;
$ruleGroup->order = $newOrder; $ruleGroup->order = $newOrder;
app('log')->debug(sprintf('Order of group #%d ("%s") is now %d', $ruleGroup->id, $ruleGroup->title, $newOrder)); Log::debug(sprintf('Order of group #%d ("%s") is now %d', $ruleGroup->id, $ruleGroup->title, $newOrder));
$ruleGroup->save(); $ruleGroup->save();
} }

View File

@@ -506,9 +506,22 @@ class SearchRuleEngine implements RuleEngineInterface
*/ */
private function fireGroup(RuleGroup $group): void private function fireGroup(RuleGroup $group): void
{ {
Log::debug(sprintf('Going to fire group #%d with %d rule(s)', $group->id, $group->rules->count())); $rules =[];
if($group->relationLoaded('rules')) {
$rules = $group->rules()->orderBy('order', 'ASC')->get(); Log::debug('Group rules have been pre-loaded, do not reload them.');
$rules = $group->rules;
}
if(!$group->relationLoaded('rules')) {
Log::debug('Group rules have NOT been pre-loaded, load them NOW.');
$rules = $group->rules()
->orderBy('rules.order', 'ASC')
// ->leftJoin('rule_triggers', 'rules.id', '=', 'rule_triggers.rule_id')
// ->where('rule_triggers.trigger_type', 'user_action')
// ->where('rule_triggers.trigger_value', 'store-journal')
->where('rules.active', true)
->get(['rules.*']);
}
Log::debug(sprintf('Going to fire group #%d with %d rule(s)', $group->id, $rules->count()));
/** @var Rule $rule */ /** @var Rule $rule */
foreach ($rules as $rule) { foreach ($rules as $rule) {