2namespace Bitrix\Mail\Helper\Mailbox;
4use Bitrix\Mail\Internals\MailboxAccessTable;
5use Bitrix\Mail\MailboxTable;
6use Bitrix\Main\Entity\Query\Filter\Expression\Column;
7use Bitrix\Main\Entity\ReferenceField;
8use Bitrix\Main\ORM\Fields\ExpressionField;
9use Bitrix\Main\ORM\Query\Query;
15 $count = static::getBaseQueryForSharedMailboxes()
16 ->addSelect(Query::expr()->countDistinct(
'MAILBOX_ID'),
'CNT')
24 $mailboxesIds = static::getBaseQueryForSharedMailboxes()
25 ->addSelect(
'MAILBOX_ID')
26 ->addGroup(
'MAILBOX_ID')
29 return array_map(
'intval', array_column($mailboxesIds,
'MAILBOX_ID'));
34 $userCodes = MailboxAccessTable::query()
35 ->addSelect(
'ACCESS_CODE')
36 ->where(
'MAILBOX_ID', $mailboxId)
37 ->whereLike(
'ACCESS_CODE',
'U%')
41 foreach ($userCodes as $userAccessCode)
44 if (preg_match(
'#U[0-9]+#', $userAccessCode[
'ACCESS_CODE']) === 1)
46 $results[] = mb_substr($userAccessCode[
'ACCESS_CODE'], 1);
57 private static function getBaseQueryForSharedMailboxes()
59 $helper = MailboxAccessTable::getEntity()->getConnection()->getSqlHelper();
60 return MailboxAccessTable::query()
61 ->registerRuntimeField(
'',
new ReferenceField(
'ref', MailboxTable::class, [
'=this.MAILBOX_ID' =>
'ref.ID'], [
'join_type' =>
'INNER']))
64 $helper->getConcatFunction(
"'U'",
'%s'),
65 'ref.USER_ID'),
'!=',
new Column(
'ACCESS_CODE'))
66 ->where(
'ref.ACTIVE',
'Y')
static getSharedMailboxesCount()
static getUserIdsWithAccessToMailbox($mailboxId)
static getSharedMailboxesIds()