. * * 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\Select\Where; use Espo\Core\Exceptions\BadRequest; use Espo\Core\Exceptions\Forbidden; use Espo\Core\Select\Where\Item as WhereItem; use Espo\ORM\Query\SelectBuilder as QueryBuilder; use Espo\Entities\User; class Applier { public function __construct( private string $entityType, private User $user, private ConverterFactory $converterFactory, private CheckerFactory $checkerFactory ) {} /** * @throws BadRequest * @throws Forbidden */ public function apply(QueryBuilder $queryBuilder, WhereItem $whereItem, Params $params): void { $this->check($whereItem, $params); $converter = $this->converterFactory->create($this->entityType, $this->user); $convertedParams = new Converter\Params(useSubQueryIfMany: true); $queryBuilder->where( $converter->convert($queryBuilder, $whereItem, $convertedParams) ); } /** * @throws BadRequest * @throws Forbidden */ private function check(Item $whereItem, Params $params): void { $checker = $this->checkerFactory->create($this->entityType, $this->user); $checker->check($whereItem, $params); } }