. * * 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\Classes\Select\Email\Where\ItemConverters; use Espo\Core\Select\Where\Item; use Espo\Core\Select\Where\ItemConverter; use Espo\Classes\Select\Email\Helpers\EmailAddressHelper; use Espo\ORM\Name\Attribute; 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 { protected string $addressType = 'to'; public function __construct( private EmailAddressHelper $emailAddressHelper, ) {} public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem { $value = $item->getValue(); if (!$value) { return WhereClause::fromRaw([Attribute::ID => null]); } $emailAddressId = $this->emailAddressHelper->getEmailAddressIdByValue($value); if (!$emailAddressId) { return WhereClause::fromRaw([Attribute::ID => null]); } 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() ); } }