drop select builder factory service
This commit is contained in:
@@ -133,11 +133,6 @@ class Binding implements BindingProcessor
|
||||
'authTokenManager'
|
||||
);
|
||||
|
||||
$binder->bindService(
|
||||
'Espo\\Core\\Select\\SelectBuilderFactory',
|
||||
'selectBuilderFactory'
|
||||
);
|
||||
|
||||
$binder->bindService(
|
||||
'Espo\\Core\\ServiceFactory',
|
||||
'serviceFactory'
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
* EspoCRM – Open Source CRM application.
|
||||
* Copyright (C) 2014-2025 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
|
||||
* Website: https://www.espocrm.com
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of this program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU Affero General Public License version 3.
|
||||
*
|
||||
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Core\Di;
|
||||
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
|
||||
interface SelectBuilderFactoryAware
|
||||
{
|
||||
public function setSelectBuilderFactory(SelectBuilderFactory $selectBuilderFactory): void;
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
<?php
|
||||
/************************************************************************
|
||||
* This file is part of EspoCRM.
|
||||
*
|
||||
* EspoCRM – Open Source CRM application.
|
||||
* Copyright (C) 2014-2025 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko
|
||||
* Website: https://www.espocrm.com
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of this program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU Affero General Public License version 3.
|
||||
*
|
||||
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
namespace Espo\Core\Di;
|
||||
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
|
||||
trait SelectBuilderFactorySetter
|
||||
{
|
||||
/**
|
||||
* @var SelectBuilderFactory
|
||||
*/
|
||||
protected $selectBuilderFactory;
|
||||
|
||||
public function setSelectBuilderFactory(SelectBuilderFactory $selectBuilderFactory): void
|
||||
{
|
||||
$this->selectBuilderFactory = $selectBuilderFactory;
|
||||
}
|
||||
}
|
||||
@@ -34,16 +34,22 @@ use Espo\Core\Exceptions\Forbidden;
|
||||
use Espo\Core\Formula\Exceptions\Error;
|
||||
use Espo\Core\Formula\Functions\Base;
|
||||
use Espo\Core\Formula\Functions\RecordGroup\Util\FindQueryUtil;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
use Espo\ORM\Defs\Params\RelationParam;
|
||||
use Espo\Core\Di;
|
||||
use stdClass;
|
||||
|
||||
/**
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
class CountRelatedType extends Base implements
|
||||
Di\EntityManagerAware,
|
||||
Di\SelectBuilderFactoryAware
|
||||
Di\InjectableFactoryAware,
|
||||
Di\UserAware
|
||||
{
|
||||
use Di\EntityManagerSetter;
|
||||
use Di\SelectBuilderFactorySetter;
|
||||
use Di\InjectableFactorySetter;
|
||||
use Di\UserSetter;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
@@ -77,8 +83,9 @@ class CountRelatedType extends Base implements
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
$builder = $this->selectBuilderFactory
|
||||
$builder = $this->injectableFactory->create(SelectBuilderFactory::class)
|
||||
->create()
|
||||
->forUser($this->user)
|
||||
->from($foreignEntityType);
|
||||
|
||||
if ($filter) {
|
||||
|
||||
@@ -35,17 +35,23 @@ use Espo\Core\Di;
|
||||
use Espo\Core\Exceptions\Forbidden;
|
||||
use Espo\Core\Formula\Functions\Base;
|
||||
use Espo\Core\Formula\Functions\RecordGroup\Util\FindQueryUtil;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
use Espo\ORM\Defs\Params\RelationParam;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use stdClass;
|
||||
use PDO;
|
||||
|
||||
/**
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
class SumRelatedType extends Base implements
|
||||
Di\EntityManagerAware,
|
||||
Di\SelectBuilderFactoryAware
|
||||
Di\InjectableFactoryAware,
|
||||
Di\UserAware
|
||||
{
|
||||
use Di\EntityManagerSetter;
|
||||
use Di\SelectBuilderFactorySetter;
|
||||
use Di\InjectableFactorySetter;
|
||||
use Di\UserSetter;
|
||||
|
||||
/**
|
||||
* @return float
|
||||
@@ -92,8 +98,9 @@ class SumRelatedType extends Base implements
|
||||
throw new Error("No foreign link for link {$link}.");
|
||||
}
|
||||
|
||||
$builder = $this->selectBuilderFactory
|
||||
$builder = $this->injectableFactory->create(SelectBuilderFactory::class)
|
||||
->create()
|
||||
->forUser($this->user)
|
||||
->from($foreignEntityType);
|
||||
|
||||
if ($filter) {
|
||||
|
||||
@@ -36,13 +36,19 @@ use Espo\Core\Formula\Exceptions\Error;
|
||||
use Espo\Core\Formula\Functions\BaseFunction;
|
||||
use Espo\Core\Formula\Functions\RecordGroup\Util\FindQueryUtil;
|
||||
use Espo\Core\Di;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
|
||||
/**
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
class CountType extends BaseFunction implements
|
||||
Di\EntityManagerAware,
|
||||
Di\SelectBuilderFactoryAware
|
||||
Di\InjectableFactoryAware,
|
||||
Di\UserAware
|
||||
{
|
||||
use Di\EntityManagerSetter;
|
||||
use Di\SelectBuilderFactorySetter;
|
||||
use Di\InjectableFactorySetter;
|
||||
use Di\UserSetter;
|
||||
|
||||
public function process(ArgumentList $args)
|
||||
{
|
||||
@@ -59,8 +65,9 @@ class CountType extends BaseFunction implements
|
||||
$filter = $this->evaluate($args[1]);
|
||||
}
|
||||
|
||||
$builder = $this->selectBuilderFactory
|
||||
$builder = $this->injectableFactory->create(SelectBuilderFactory::class)
|
||||
->create()
|
||||
->forUser($this->user)
|
||||
->from($entityType);
|
||||
|
||||
(new FindQueryUtil())->applyFilter($builder, $filter, 2);
|
||||
|
||||
@@ -36,13 +36,19 @@ use Espo\Core\Formula\Exceptions\Error;
|
||||
use Espo\Core\Formula\Functions\BaseFunction;
|
||||
use Espo\Core\Di;
|
||||
use Espo\Core\Formula\Functions\RecordGroup\Util\FindQueryUtil;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
|
||||
/**
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
class ExistsType extends BaseFunction implements
|
||||
Di\EntityManagerAware,
|
||||
Di\SelectBuilderFactoryAware
|
||||
Di\InjectableFactoryAware,
|
||||
Di\UserAware
|
||||
{
|
||||
use Di\EntityManagerSetter;
|
||||
use Di\SelectBuilderFactorySetter;
|
||||
use Di\InjectableFactorySetter;
|
||||
use Di\UserSetter;
|
||||
|
||||
public function process(ArgumentList $args)
|
||||
{
|
||||
@@ -59,8 +65,9 @@ class ExistsType extends BaseFunction implements
|
||||
$filter = $this->evaluate($args[1]);
|
||||
}
|
||||
|
||||
$builder = $this->selectBuilderFactory
|
||||
$builder = $this->injectableFactory->create(SelectBuilderFactory::class)
|
||||
->create()
|
||||
->forUser($this->user)
|
||||
->from($entityType);
|
||||
|
||||
(new FindQueryUtil())->applyFilter($builder, $filter, 2);
|
||||
|
||||
@@ -36,6 +36,7 @@ use Espo\Core\Formula\Exceptions\Error as FormulaError;
|
||||
use Espo\Core\Formula\Functions\BaseFunction;
|
||||
use Espo\Core\Di;
|
||||
use Espo\Core\Formula\Functions\RecordGroup\Util\FindQueryUtil;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use Espo\ORM\Query\Part\Order;
|
||||
|
||||
@@ -44,10 +45,12 @@ use Espo\ORM\Query\Part\Order;
|
||||
*/
|
||||
class FindOneType extends BaseFunction implements
|
||||
Di\EntityManagerAware,
|
||||
Di\SelectBuilderFactoryAware
|
||||
Di\InjectableFactoryAware,
|
||||
Di\UserAware
|
||||
{
|
||||
use Di\EntityManagerSetter;
|
||||
use Di\SelectBuilderFactorySetter;
|
||||
use Di\InjectableFactorySetter;
|
||||
use Di\UserSetter;
|
||||
|
||||
public function process(ArgumentList $args)
|
||||
{
|
||||
@@ -59,8 +62,9 @@ class FindOneType extends BaseFunction implements
|
||||
$orderBy = $this->evaluate($args[1]);
|
||||
$order = $this->evaluate($args[2]) ?? Order::ASC;
|
||||
|
||||
$builder = $this->selectBuilderFactory
|
||||
$builder = $this->injectableFactory->create(SelectBuilderFactory::class)
|
||||
->create()
|
||||
->forUser($this->user)
|
||||
->from($entityType);
|
||||
|
||||
$whereClause = [];
|
||||
|
||||
@@ -41,20 +41,24 @@ use Espo\Core\Formula\ArgumentList;
|
||||
use Espo\Core\Formula\Functions\BaseFunction;
|
||||
use Espo\Core\Di;
|
||||
use Espo\Core\Select\Helpers\RandomStringGenerator;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
use Espo\ORM\Defs\Params\RelationParam;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use Espo\ORM\Type\RelationType;
|
||||
|
||||
/**
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
class FindRelatedManyType extends BaseFunction implements
|
||||
Di\EntityManagerAware,
|
||||
Di\SelectBuilderFactoryAware,
|
||||
Di\MetadataAware,
|
||||
Di\InjectableFactoryAware
|
||||
Di\InjectableFactoryAware,
|
||||
Di\UserAware
|
||||
{
|
||||
use Di\EntityManagerSetter;
|
||||
use Di\SelectBuilderFactorySetter;
|
||||
use Di\MetadataSetter;
|
||||
use Di\InjectableFactorySetter;
|
||||
use Di\UserSetter;
|
||||
|
||||
/**
|
||||
* @throws Error
|
||||
@@ -158,8 +162,9 @@ class FindRelatedManyType extends BaseFunction implements
|
||||
$this->throwError("Not supported link '$link'.");
|
||||
}
|
||||
|
||||
$builder = $this->selectBuilderFactory
|
||||
$builder = $this->injectableFactory->create(SelectBuilderFactory::class)
|
||||
->create()
|
||||
->forUser($this->user)
|
||||
->from($foreignEntityType);
|
||||
|
||||
$whereClause = [];
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Espo\Core\Formula\Functions\RecordGroup;
|
||||
use Espo\Core\Exceptions\BadRequest;
|
||||
use Espo\Core\Exceptions\Forbidden;
|
||||
use Espo\Core\ORM\Entity as CoreEntity;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
use Espo\ORM\Defs\Params\RelationParam;
|
||||
use Espo\ORM\Name\Attribute;
|
||||
use Espo\Core\Formula\ArgumentList;
|
||||
@@ -42,14 +43,19 @@ use Espo\Core\Di;
|
||||
use Espo\ORM\Query\Part\Order;
|
||||
use Espo\ORM\Type\RelationType;
|
||||
|
||||
/**
|
||||
* @noinspection PhpUnused
|
||||
*/
|
||||
class FindRelatedOneType extends BaseFunction implements
|
||||
Di\EntityManagerAware,
|
||||
Di\SelectBuilderFactoryAware,
|
||||
Di\MetadataAware
|
||||
Di\MetadataAware,
|
||||
Di\InjectableFactoryAware,
|
||||
Di\UserAware
|
||||
{
|
||||
use Di\EntityManagerSetter;
|
||||
use Di\SelectBuilderFactorySetter;
|
||||
use Di\MetadataSetter;
|
||||
use Di\InjectableFactorySetter;
|
||||
use Di\UserSetter;
|
||||
|
||||
public function process(ArgumentList $args)
|
||||
{
|
||||
@@ -142,8 +148,9 @@ class FindRelatedOneType extends BaseFunction implements
|
||||
$this->throwError("Not supported link '$link'.");
|
||||
}
|
||||
|
||||
$builder = $this->selectBuilderFactory
|
||||
$builder = $this->injectableFactory->create(SelectBuilderFactory::class)
|
||||
->create()
|
||||
->forUser($this->user)
|
||||
->from($foreignEntityType);
|
||||
|
||||
$whereClause = [];
|
||||
|
||||
@@ -59,6 +59,8 @@ use Espo\Core\Record\Input\Data;
|
||||
use Espo\Core\Record\Input\Filter;
|
||||
use Espo\Core\Record\Input\FilterProvider;
|
||||
use Espo\Core\Select\Primary\Filters\One;
|
||||
use Espo\Core\Select\SelectBuilder;
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
use Espo\Core\Utils\Json;
|
||||
use Espo\Core\Acl;
|
||||
use Espo\Core\Acl\Table as AclTable;
|
||||
@@ -109,7 +111,6 @@ class Service implements Crud,
|
||||
Di\FieldUtilAware,
|
||||
Di\FieldValidationManagerAware,
|
||||
Di\RecordServiceContainerAware,
|
||||
Di\SelectBuilderFactoryAware,
|
||||
Di\AssignmentCheckerManagerAware
|
||||
{
|
||||
use Di\ConfigSetter;
|
||||
@@ -122,7 +123,6 @@ class Service implements Crud,
|
||||
use Di\FieldUtilSetter;
|
||||
use Di\FieldValidationManagerSetter;
|
||||
use Di\RecordServiceContainerSetter;
|
||||
use Di\SelectBuilderFactorySetter;
|
||||
use Di\AssignmentCheckerManagerSetter;
|
||||
|
||||
protected string $entityType;
|
||||
@@ -156,11 +156,21 @@ class Service implements Crud,
|
||||
|
||||
protected const MAX_SELECT_TEXT_ATTRIBUTE_LENGTH = 10000;
|
||||
|
||||
public function __construct(string $entityType = '')
|
||||
{
|
||||
public function __construct(
|
||||
protected SelectBuilderFactory $selectBuilderFactory,
|
||||
string $entityType = '',
|
||||
) {
|
||||
$this->entityType = $entityType;
|
||||
|
||||
$this->initEntityType();
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
protected function initEntityType(): void
|
||||
{}
|
||||
|
||||
/**
|
||||
* @return RDBRepository<TEntity>
|
||||
*/
|
||||
@@ -240,8 +250,7 @@ class Service implements Crud,
|
||||
public function getEntity(string $id): ?Entity
|
||||
{
|
||||
try {
|
||||
$builder = $this->selectBuilderFactory
|
||||
->create()
|
||||
$builder = $this->selectBuilderFactory->create()
|
||||
->from($this->entityType)
|
||||
->withSearchParams(
|
||||
SearchParams::create()
|
||||
@@ -887,9 +896,7 @@ class Service implements Crud,
|
||||
|
||||
$preparedSearchParams = $this->prepareSearchParams($searchParams);
|
||||
|
||||
$selectBuilder = $this->selectBuilderFactory->create();
|
||||
|
||||
$query = $selectBuilder
|
||||
$query = $this->selectBuilderFactory->create()
|
||||
->from($this->entityType)
|
||||
->withStrictAccessControl()
|
||||
->withSearchParams($preparedSearchParams)
|
||||
|
||||
@@ -29,18 +29,27 @@
|
||||
|
||||
namespace Espo\Core\Select;
|
||||
|
||||
use Espo\Core\Binding\BindingContainerBuilder;
|
||||
use Espo\Core\InjectableFactory;
|
||||
use Espo\Entities\User;
|
||||
|
||||
/**
|
||||
* Creates instances of Select Builder.
|
||||
*/
|
||||
class SelectBuilderFactory
|
||||
{
|
||||
public function __construct(private InjectableFactory $injectableFactory)
|
||||
{}
|
||||
public function __construct(
|
||||
private InjectableFactory $injectableFactory,
|
||||
private User $user,
|
||||
) {}
|
||||
|
||||
public function create(): SelectBuilder
|
||||
{
|
||||
return $this->injectableFactory->create(SelectBuilder::class);
|
||||
return $this->injectableFactory->createWithBinding(
|
||||
SelectBuilder::class,
|
||||
BindingContainerBuilder::create()
|
||||
->bindInstance(User::class, $this->user)
|
||||
->build()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,6 @@
|
||||
"number": {
|
||||
"loaderClassName": "Espo\\Core\\Loaders\\NumberUtil"
|
||||
},
|
||||
"selectBuilderFactory": {
|
||||
"className": "Espo\\Core\\Select\\SelectBuilderFactory"
|
||||
},
|
||||
"selectManagerFactory": {
|
||||
"className": "Espo\\Core\\Select\\SelectManagerFactory"
|
||||
},
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
namespace Espo\Services;
|
||||
|
||||
use Espo\Core\Select\SelectBuilderFactory;
|
||||
use Espo\ORM\Entity;
|
||||
use Espo\Core\Record\Service as RecordService;
|
||||
use Espo\Core\Utils\Util;
|
||||
@@ -41,21 +42,24 @@ use Espo\Core\Utils\Util;
|
||||
*/
|
||||
class Record extends RecordService
|
||||
{
|
||||
public function __construct(string $entityType = '')
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
protected function initEntityType(): void
|
||||
{
|
||||
parent::__construct($entityType);
|
||||
|
||||
if (!$this->entityType) {
|
||||
// Detecting the entity type by the class-name.
|
||||
$name = get_class($this);
|
||||
|
||||
$matches = null;
|
||||
|
||||
if (preg_match('@\\\\([\w]+)$@', $name, $matches)) {
|
||||
$name = $matches[1];
|
||||
}
|
||||
|
||||
$this->entityType = Util::normalizeScopeName($name);
|
||||
if ($this->entityType) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Detecting the entity type by the class-name.
|
||||
$name = get_class($this);
|
||||
|
||||
$matches = null;
|
||||
|
||||
if (preg_match('@\\\\([\w]+)$@', $name, $matches)) {
|
||||
$name = $matches[1];
|
||||
}
|
||||
|
||||
$this->entityType = Util::normalizeScopeName($name);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user