Merge pull request #7231 from firefly-iii/fix-7221

Fix https://github.com/firefly-iii/firefly-iii/issues/7221
This commit is contained in:
James Cole 2023-03-14 18:31:32 +01:00 committed by GitHub
commit 5c91da80e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 7 deletions

View File

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

View File

@ -73,4 +73,10 @@ interface RuleEngineInterface
* @param User $user
*/
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 Collection $rules;
private User $user;
private bool $refreshTriggers;
public function __construct()
{
@ -54,6 +55,9 @@ class SearchRuleEngine implements RuleEngineInterface
$this->groups = new Collection();
$this->operators = [];
$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));
$searchArray = [];
$triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get();
$triggers = [];
if ($this->refreshTriggers) {
$triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get();
}
if (!$this->refreshTriggers) {
$triggers = $rule->ruleTriggers;
}
/** @var RuleTrigger $ruleTrigger */
foreach ($triggers as $ruleTrigger) {
@ -224,11 +233,15 @@ class SearchRuleEngine implements RuleEngineInterface
private function findNonStrictRule(Rule $rule): Collection
{
// start a search query for individual each trigger:
$total = new Collection();
$count = 0;
/** @var Collection $triggers */
$triggers = $rule->ruleTriggers;
$total = new Collection();
$count = 0;
$triggers = [];
if ($this->refreshTriggers) {
$triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get();
}
if (!$this->refreshTriggers) {
$triggers = $rule->ruleTriggers;
}
/** @var RuleTrigger $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;
}
}