Merge pull request #3451 from traien/patch-4

keep user-addressed emails visible when routed to a Group Folder
This commit is contained in:
Yurii Kuznietsov
2025-08-16 11:46:37 +03:00
committed by GitHub
@@ -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<string>
*/
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;
}
}