Merge pull request #3451 from traien/patch-4
keep user-addressed emails visible when routed to a Group Folder
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user