diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php index 3e1fa1f0fa..b086d43f01 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php @@ -30,10 +30,12 @@ namespace Espo\Classes\Select\Email\Where\ItemConverters; use Espo\Core\Name\Link; +use Espo\Core\Select\SelectBuilderFactory; use Espo\Core\Select\Where\ItemConverter; use Espo\Core\Select\Where\Item; use Espo\Entities\Email; +use Espo\Entities\GroupEmailFolder; use Espo\ORM\Name\Attribute; use Espo\ORM\Query\SelectBuilder as QueryBuilder; use Espo\ORM\Query\Part\WhereItem as WhereClauseItem; @@ -51,7 +53,8 @@ class InFolder implements ItemConverter public function __construct( private User $user, private EntityManager $entityManager, - private JoinHelper $joinHelper + private JoinHelper $joinHelper, + private SelectBuilderFactory $selectBuilderFactory ) {} public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem @@ -74,6 +77,8 @@ class InFolder implements ItemConverter { $this->joinEmailUser($queryBuilder); + $groupEmailFoldersIds = $this->getUserGroupEmailFoldersIds(); + $whereClause = [ Email::ALIAS_INBOX . '.inTrash' => false, Email::ALIAS_INBOX . '.inArchive' => false, @@ -84,7 +89,10 @@ class InFolder implements ItemConverter Email::STATUS_ARCHIVED, Email::STATUS_SENT, ], - 'groupFolderId' => null, + 'OR' => [ + 'groupFolderId' => null, + 'groupFolderId!=' => $groupEmailFoldersIds, + ] ], ]; @@ -250,4 +258,29 @@ class InFolder implements ItemConverter return $emailAddressIdList; } + + /** + * @return array + */ + private function getUserGroupEmailFoldersIds(): array + { + $selectBuilder = $this->selectBuilderFactory + ->create() + ->forUser($this->user) + ->from(GroupEmailFolder::ENTITY_TYPE) + ->withAccessControlFilter(); + + $groupEmailFolders = $this->entityManager + ->getRDBRepository(GroupEmailFolder::ENTITY_TYPE) + ->clone($selectBuilder->build()) + ->find(); + + $groupEmailFoldersIds = []; + + foreach ($groupEmailFolders as $groupEmailFolder) { + $groupEmailFoldersIds[] = $groupEmailFolder->getId(); + } + + return $groupEmailFoldersIds; + } }