static function prepareUserMailboxes($userId = null)
{
global $USER;
static $mailboxes = array();
if (!($userId > 0))
{
if (is_object($USER) && $USER->isAuthorized())
{
$userId = $USER->getId();
}
}
if (!($userId > 0))
{
return array();
}
if (array_key_exists($userId, $mailboxes))
{
return $mailboxes[$userId];
}
$mailboxes[$userId] = array();
if (is_object($USER) && $USER->isAuthorized() && $USER->getId() == $userId)
{
$userData = array(
'ID' => $USER->getId(),
'TITLE' => $USER->getParam("TITLE"),
'NAME' => $USER->getFirstName(),
'SECOND_NAME' => $USER->getSecondName(),
'LAST_NAME' => $USER->getLastName(),
'LOGIN' => $USER->getLogin(),
'EMAIL' => $USER->getEmail(),
);
$isAdmin = in_array(1, $USER->getUserGroupArray());
}
else
{
$userData = MainUserTable::getList(array(
'select' => array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'LOGIN', 'EMAIL'),
'filter' => array('=ID' => $userId),
))->fetch();
$isAdmin = in_array(1, CUser::getUserGroup($userId));
}
$userNameFormated = CUser::formatName(CSite::getNameFormat(), $userData, true, false);
if (CModule::includeModule('mail'))
{
foreach (BitrixMailMailboxTable::getUserMailboxes($userId) as $mailbox)
{
if (!empty($mailbox['EMAIL']))
{
$mailboxName = trim($mailbox['USERNAME']) ?: trim($mailbox['OPTIONS']['name']) ?: $userNameFormated;
$key = hash('crc32b', mb_strtolower($mailboxName).$mailbox['EMAIL']);
$mailboxes[$userId][$key] = array(
'name' => $mailboxName,
'email' => $mailbox['EMAIL'],
'showEditHint' => true,
);
}
}
}
// @TODO: query
$crmAddress = new Address(MainConfigOption::get('crm', 'mail', ''));
if ($crmAddress->validate())
{
$key = hash('crc32b', mb_strtolower($userNameFormated).$crmAddress->getEmail());
$mailboxes[$userId][$key] = [
'name' => $crmAddress->getName() ?: $userNameFormated,
'email' => $crmAddress->getEmail(),
];
}
$res = SenderTable::getList(array(
'filter' => array(
'IS_CONFIRMED' => true,
array(
'LOGIC' => 'OR',
'=USER_ID' => $userId,
'IS_PUBLIC' => true,
),
),
'order' => array(
'ID' => 'ASC',
),
));
while ($item = $res->fetch())
{
$item['NAME'] = trim($item['NAME']) ?: $userNameFormated;
$item['EMAIL'] = mb_strtolower($item['EMAIL']);
$key = hash('crc32b', mb_strtolower($item['NAME']).$item['EMAIL']);
if (!isset($mailboxes[$userId][$key]))
{
$mailboxes[$userId][$key] = [
'id' => $item['ID'],
'name' => $item['NAME'],
'email' => $item['EMAIL'],
'can_delete' => $userId == $item['USER_ID'] || $item['IS_PUBLIC'] && $isAdmin,
];
}
else if (!isset($mailboxes[$userId][$key]['id']))
{
$mailboxes[$userId][$key]['id'] = $item['ID'];
$mailboxes[$userId][$key]['can_delete'] = $userId == $item['USER_ID'] || $item['IS_PUBLIC'] && $isAdmin;
}
}
foreach ($mailboxes[$userId] as $key => $item)
{
$mailboxes[$userId][$key]['formated'] = sprintf(
$item['name'] ? '%s <%s>' : '%s%s',
$item['name'], $item['email']
);
$mailboxes[$userId][$key]['userId'] = $userId;
}
$mailboxes[$userId] = array_values($mailboxes[$userId]);
return $mailboxes[$userId];
}