James Cole
2023-03-14 18:09:44 +01:00
parent 86ba1d151a
commit 8e56fa4ef8
3 changed files with 35 additions and 7 deletions

View File

@@ -164,6 +164,7 @@ class SelectController extends Controller
// set rules: // set rules:
$newRuleEngine->setRules(new Collection([$rule])); $newRuleEngine->setRules(new Collection([$rule]));
$newRuleEngine->setRefreshTriggers(false);
$collection = $newRuleEngine->find(); $collection = $newRuleEngine->find();
$collection = $collection->slice(0, 20); $collection = $collection->slice(0, 20);

View File

@@ -73,4 +73,10 @@ interface RuleEngineInterface
* @param User $user * @param User $user
*/ */
public function setUser(User $user): void; public function setUser(User $user): void;
/**
* @param bool $refreshTriggers
* @return void
*/
public function setRefreshTriggers(bool $refreshTriggers): void;
} }

View File

@@ -47,6 +47,7 @@ class SearchRuleEngine implements RuleEngineInterface
private array $resultCount; private array $resultCount;
private Collection $rules; private Collection $rules;
private User $user; private User $user;
private bool $refreshTriggers;
public function __construct() public function __construct()
{ {
@@ -54,6 +55,9 @@ class SearchRuleEngine implements RuleEngineInterface
$this->groups = new Collection(); $this->groups = new Collection();
$this->operators = []; $this->operators = [];
$this->resultCount = []; $this->resultCount = [];
// always collect the triggers from the database, unless indicated otherwise.
$this->refreshTriggers = true;
} }
/** /**
@@ -97,8 +101,13 @@ class SearchRuleEngine implements RuleEngineInterface
{ {
Log::debug(sprintf('Now in findStrictRule(#%d)', $rule->id ?? 0)); Log::debug(sprintf('Now in findStrictRule(#%d)', $rule->id ?? 0));
$searchArray = []; $searchArray = [];
$triggers = [];
if ($this->refreshTriggers) {
$triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get(); $triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get();
}
if (!$this->refreshTriggers) {
$triggers = $rule->ruleTriggers;
}
/** @var RuleTrigger $ruleTrigger */ /** @var RuleTrigger $ruleTrigger */
foreach ($triggers as $ruleTrigger) { foreach ($triggers as $ruleTrigger) {
@@ -226,9 +235,13 @@ class SearchRuleEngine implements RuleEngineInterface
// start a search query for individual each trigger: // start a search query for individual each trigger:
$total = new Collection(); $total = new Collection();
$count = 0; $count = 0;
$triggers = [];
/** @var Collection $triggers */ if ($this->refreshTriggers) {
$triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get();
}
if (!$this->refreshTriggers) {
$triggers = $rule->ruleTriggers; $triggers = $rule->ruleTriggers;
}
/** @var RuleTrigger $ruleTrigger */ /** @var RuleTrigger $ruleTrigger */
foreach ($triggers as $ruleTrigger) { foreach ($triggers as $ruleTrigger) {
@@ -549,4 +562,12 @@ class SearchRuleEngine implements RuleEngineInterface
} }
} }
} }
/**
* @param bool $refreshTriggers
*/
public function setRefreshTriggers(bool $refreshTriggers): void
{
$this->refreshTriggers = $refreshTriggers;
}
} }