From aa09d7dde62c346f1f030c2bd12953d9f44b7528 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 13 Sep 2024 15:44:54 +0300 Subject: [PATCH] email search by address change --- .../ItemConverters/EmailAddressEquals.php | 41 ++++++++++--------- .../Email/Where/ItemConverters/ToEquals.php | 35 ++++++++-------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/EmailAddressEquals.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/EmailAddressEquals.php index 1c373bc5c0..d3659534ea 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/EmailAddressEquals.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/EmailAddressEquals.php @@ -29,19 +29,21 @@ namespace Espo\Classes\Select\Email\Where\ItemConverters; -use Espo\Core\Select\Helpers\RandomStringGenerator; use Espo\Core\Select\Where\Item; use Espo\Core\Select\Where\ItemConverter; use Espo\Classes\Select\Email\Helpers\EmailAddressHelper; +use Espo\ORM\Query\Part\Condition as Cond; +use Espo\ORM\Query\Part\Expression as Expr; +use Espo\ORM\Query\Part\Where\OrGroup; use Espo\ORM\Query\Part\WhereClause; use Espo\ORM\Query\Part\WhereItem as WhereClauseItem; +use Espo\ORM\Query\SelectBuilder; use Espo\ORM\Query\SelectBuilder as QueryBuilder; class EmailAddressEquals implements ItemConverter { public function __construct( private EmailAddressHelper $emailAddressHelper, - private RandomStringGenerator $randomStringGenerator ) {} public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem @@ -58,24 +60,23 @@ class EmailAddressEquals implements ItemConverter return WhereClause::fromRaw(['id' => null]); } - $queryBuilder->distinct(); - - $alias = 'emailEmailAddress' . $this->randomStringGenerator->generate(); - - $queryBuilder->leftJoin( - 'EmailEmailAddress', - $alias, - [ - 'emailId:' => 'id', - 'deleted' => false, - ] + return OrGroup::create( + Cond::equal( + Expr::column('fromEmailAddressId'), + $emailAddressId + ), + Cond::exists( + SelectBuilder::create() + ->from('EmailEmailAddress', 'sq') + ->where(['emailAddressId' => $emailAddressId]) + ->where( + Cond::equal( + Expr::column('sq.emailId'), + Expr::column('email.id') + ) + ) + ->build() + ) ); - - return WhereClause::fromRaw([ - 'OR' => [ - 'fromEmailAddressId' => $emailAddressId, - $alias . '.emailAddressId' => $emailAddressId, - ], - ]); } } diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/ToEquals.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/ToEquals.php index 1579ff929b..454af3fe1e 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/ToEquals.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/ToEquals.php @@ -29,12 +29,14 @@ namespace Espo\Classes\Select\Email\Where\ItemConverters; -use Espo\Core\Select\Helpers\RandomStringGenerator; use Espo\Core\Select\Where\Item; use Espo\Core\Select\Where\ItemConverter; use Espo\Classes\Select\Email\Helpers\EmailAddressHelper; +use Espo\ORM\Query\Part\Condition as Cond; +use Espo\ORM\Query\Part\Expression as Expr; use Espo\ORM\Query\Part\WhereClause; use Espo\ORM\Query\Part\WhereItem as WhereClauseItem; +use Espo\ORM\Query\SelectBuilder; use Espo\ORM\Query\SelectBuilder as QueryBuilder; class ToEquals implements ItemConverter @@ -43,7 +45,6 @@ class ToEquals implements ItemConverter public function __construct( private EmailAddressHelper $emailAddressHelper, - private RandomStringGenerator $randomStringGenerator ) {} public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem @@ -60,22 +61,20 @@ class ToEquals implements ItemConverter return WhereClause::fromRaw(['id' => null]); } - $queryBuilder->distinct(); - - $alias = 'emailEmailAddress' . $this->randomStringGenerator->generate(); - - $queryBuilder->leftJoin( - 'EmailEmailAddress', - $alias, - [ - 'emailId:' => 'id', - 'deleted' => false, - ] + return Cond::exists( + SelectBuilder::create() + ->from('EmailEmailAddress', 'sq') + ->where([ + 'emailAddressId' => $emailAddressId, + 'addressType' => $this->addressType, + ]) + ->where( + Cond::equal( + Expr::column('sq.emailId'), + Expr::column('email.id') + ) + ) + ->build() ); - - return WhereClause::fromRaw([ - $alias . '.emailAddressId' => $emailAddressId, - $alias . '.addressType' => $this->addressType, - ]); } }