select additional appliers in selectDefs

This commit is contained in:
Yuri Kuznetsov
2025-03-18 11:08:12 +02:00
parent a6c0e2aa0e
commit 9e65549eb3
4 changed files with 24 additions and 7 deletions
@@ -30,12 +30,12 @@
namespace Espo\Core\Select\Applier\Appliers;
use Espo\Core\Binding\ContextualBinder;
use Espo\Core\Utils\Metadata;
use Espo\ORM\Query\SelectBuilder as QueryBuilder;
use Espo\Core\Select\SearchParams;
use Espo\Core\InjectableFactory;
use Espo\Core\Select\Applier\AdditionalApplier;
use Espo\Core\Binding\BindingContainerBuilder;
use Espo\Entities\User;
class Additional
@@ -44,6 +44,7 @@ class Additional
private User $user,
private InjectableFactory $injectableFactory,
private string $entityType,
private Metadata $metadata,
) {}
/**
@@ -51,6 +52,8 @@ class Additional
*/
public function apply(array $classNameList, QueryBuilder $queryBuilder, SearchParams $searchParams): void
{
$classNameList = array_merge($this->getMandatoryClassNameList(), $classNameList);
foreach ($classNameList as $className) {
$applier = $this->createApplier($className);
@@ -73,4 +76,13 @@ class Additional
->build()
);
}
/**
* @return class-string<AdditionalApplier>[]
*/
private function getMandatoryClassNameList(): array
{
/** @var class-string<AdditionalApplier>[] */
return $this->metadata->get("selectDefs.$this->entityType.additionalApplierClassNameList") ?? [];
}
}
@@ -495,10 +495,6 @@ class SelectBuilder
{
assert($this->queryBuilder !== null);
if (count($this->additionalApplierClassNameList) === 0) {
return;
}
$searchParams = SearchParams::create()
->withBoolFilterList($this->boolFilterList)
->withPrimaryFilter($this->primaryFilter)
+7
View File
@@ -80,6 +80,13 @@
"type": "string",
"description": "A field."
}
},
"additionalApplierClassNameList": {
"type": "array",
"items": {
"type": "string"
},
"description": "Additional appliers. Should implement Espo\\Core\\Select\\Applier\\AdditionalApplier interface. Since v9.1.0."
}
}
}
@@ -220,10 +220,12 @@ class SelectBuilderTest extends \PHPUnit\Framework\TestCase
);
$this->additionalApplier
->expects($this->never())
->expects($this->once())
->method('apply')
->with(
$this->isInstanceOf(QueryBuilder::class)
[],
$this->isInstanceOf(QueryBuilder::class),
$this->isInstanceOf(SearchParams::class),
);
$query = $this->selectBuilder