From 880b9949b7a2d941efe4cc6414c643241c7692aa Mon Sep 17 00:00:00 2001 From: Osama Bashir Date: Fri, 15 Aug 2025 14:33:06 +0300 Subject: [PATCH 1/3] keep user-addressed emails visible when routed to a Group Folder --- .../Email/Where/ItemConverters/InFolder.php | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php index 3e1fa1f0fa..fe7a8abb80 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,28 @@ class InFolder implements ItemConverter return $emailAddressIdList; } + + /** + * @return array + */ + protected function getUserGroupEmailFoldersIds(): array + { + $selectBuilder = $this->selectBuilderFactory + ->create() + ->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; + } } From 6b07a2a939f57ad7a551834e032bd100bd864d7f Mon Sep 17 00:00:00 2001 From: Osama Bashir Date: Fri, 15 Aug 2025 14:37:30 +0300 Subject: [PATCH 2/3] fix phpstan No value type specified in iterable type --- .../Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php index fe7a8abb80..d3972fc660 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php @@ -260,7 +260,7 @@ class InFolder implements ItemConverter } /** - * @return array + * @return array */ protected function getUserGroupEmailFoldersIds(): array { From 9c21530cf7a8d61ae394b0a3a50ee413119dd302 Mon Sep 17 00:00:00 2001 From: Osama Bashir Date: Fri, 15 Aug 2025 16:09:31 +0300 Subject: [PATCH 3/3] change visibility of getUserGroupEmailFoldersIds method and add user context to query --- .../Classes/Select/Email/Where/ItemConverters/InFolder.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php b/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php index d3972fc660..b086d43f01 100644 --- a/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php +++ b/application/Espo/Classes/Select/Email/Where/ItemConverters/InFolder.php @@ -262,10 +262,11 @@ class InFolder implements ItemConverter /** * @return array */ - protected function getUserGroupEmailFoldersIds(): array + private function getUserGroupEmailFoldersIds(): array { $selectBuilder = $this->selectBuilderFactory ->create() + ->forUser($this->user) ->from(GroupEmailFolder::ENTITY_TYPE) ->withAccessControlFilter();