• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/mailbox.php
  • Класс: BitrixMailMailboxTable
  • Вызов: MailboxTable::getTheSharedMailboxes
static function getTheSharedMailboxes($userId = null): array
{
	global $USER;

	if (!($userId > 0 || (is_object($USER) && $USER->isAuthorized())))
	{
		return [];
	}

	if (!($userId > 0))
	{
		$userId = $USER->getId();
	}

	static $mailboxes = [];
	static $userMailboxes = [];

	if (!array_key_exists($userId, $userMailboxes))
	{
		$userMailboxes[$userId] = [];

		(new CAccess)->updateCodes(['USER_ID' => $userId]);

		$res = static::getList([
			'runtime' => [
				new EntityReferenceField(
					'ACCESS',
					'BitrixMailInternalsMailboxAccessTable',
					[
						'=this.ID' => 'ref.MAILBOX_ID',
					],
					[
						'join_type' => 'LEFT',
					]
				),
				new EntityReferenceField(
					'USER_ACCESS',
					'BitrixMainUserAccess',
					[
						'this.ACCESS.ACCESS_CODE' => 'ref.ACCESS_CODE',
					],
					[
						'join_type' => 'LEFT',
					]
				),
			],
			'filter' => [
				[
					'LOGIC' => 'AND',
					'!=USER_ID' => $userId,
					'=USER_ACCESS.USER_ID' => $userId,
				],
				'=ACTIVE' => 'Y',
				'=SERVER_TYPE' => 'imap',
			],
			'order' => [
				'ID' => 'DESC',
			],
		]);

		while ($mailbox = $res->fetch())
		{
			static::normalizeEmail($mailbox);

			$mailboxes[$mailbox['ID']] = $mailbox;
			$userMailboxes[$userId][] = $mailbox['ID'];
		}
	}

	$result = [];

	foreach ($userMailboxes[$userId] as $mailboxId)
	{
		$result[$mailboxId] = $mailboxes[$mailboxId];
	}

	return $result;
}