30 $userId = (int)$currentUser->getId();
44 ->setSelect([
'ID',
'NAME',
'EMAIL',
'USER_ID',
'OPTIONS'])
45 ->where(
'IS_CONFIRMED')
46 ->where(Query::filter()
49 ->where(
'IS_PUBLIC',
true)
51 ->where(
'PARENT_MODULE_ID',
'main')
55 $emailsWithSmtpSenders = [];
56 $availableSmtpSenders = [];
57 $emailsWithoutSmtpSenders = [];
58 foreach ($sendersList as $sender)
60 $sender[
'USER_ID'] = (int)$sender[
'USER_ID'];
61 if (in_array($sender[
'EMAIL'], $emailsWithoutSmtpSenders,
true))
67 !in_array($sender[
'EMAIL'], $availableSmtpSenders,
true)
68 && !in_array($sender[
'EMAIL'], $emailsWithSmtpSenders,
true)
72 if (Sender::hasUserAvailableSmtpSenderByEmail($sender[
'EMAIL'],
$userId))
74 $availableSmtpSenders[] = $sender[
'EMAIL'];
78 $emailsWithoutSmtpSenders[] = $sender[
'EMAIL'];
86 && self::getUserFormattedName($sender[
'USER_ID']) === $sender[
'NAME']
89 $sender[
'NAME'] = $userFormattedName ?? $sender[
'NAME'];
93 $sender[
'NAME'] = trim($sender[
'NAME']) ?: $userFormattedName;
96 $sender[
'EMAIL'] = mb_strtolower($sender[
'EMAIL']);
99 'id' => (int)$sender[
'ID'],
100 'name' => $sender[
'NAME'],
101 'email' => $sender[
'EMAIL'],
102 'can_delete' => $sender[
'USER_ID'] ===
$userId || $isAdmin,
103 'type' => !empty($sender[
'OPTIONS'][
'smtp']) ? self::SENDER_TYPE : self::ALIAS_TYPE,
104 'showEditHint' =>
false,
109 !in_array($sender[
'EMAIL'], $emailsWithSmtpSenders,
true)
110 && !empty($sender[
'OPTIONS'][
'smtp'])
113 $emailsWithSmtpSenders[] = $sender[
'EMAIL'];
117 $senders = array_merge(
118 self::getUserAvailableMailboxSenders(
119 getMailboxesWithoutSmtp:
true,
127 $uniqueSenderNames = [];
128 foreach ($senders as
$key => $sender)
130 $senders[
$key][
'formated'] =
"{$sender['name']} <{$sender['email']}>";
131 if (in_array($senders[
$key][
'formated'], $uniqueSenderNames,
true))
136 $uniqueSenderNames[] = $senders[
$key][
'formated'];
137 $uniqueSenders[] = $senders[
$key];
140 return $uniqueSenders;
163 ->where(
'IS_CONFIRMED')
165 ->where(Query::filter()
168 ->where(
'IS_PUBLIC',
true)
174 $senderListQuery->where(
'PARENT_MODULE_ID',
'main');
178 $senderList = $senderListQuery->fetchAll();
180 foreach ($senderList as $sender)
182 $ownerId = (int)$sender[
'USER_ID'];
183 if (!empty($sender[
'OPTIONS'][
'smtp'][
'server']))
185 $type = self::SENDER_TYPE;
189 $type = self::ALIAS_TYPE;
192 if (empty($sender[
'NAME']))
197 if (!isset($userData[$ownerId]))
202 $canEdit = $ownerId ===
$userId || $isAdmin;
203 $isOwner = $ownerId ===
$userId;
207 && self::getUserFormattedName((
int)$sender[
'USER_ID']) === $sender[
'NAME']
210 $sender[
'NAME'] = $userFormattedName ?? $sender[
'NAME'];
214 'id' => (int)$sender[
'ID'],
215 'name' => $sender[
'NAME'],
217 'email' => $sender[
'EMAIL'],
218 'userId' => $ownerId,
219 'canEdit' => $canEdit,
220 'isOwner' => $isOwner,
221 'avatar' => $userData[$ownerId][
'userAvatar'] ??
null,
222 'userUrl' => $userData[$ownerId][
'userUrl'] ??
null,
226 return array_merge($senders, $mailboxSenders);
234 ?
bool $getMailboxesWithoutSmtp =
false,
235 ?
array $excludedEmails = [],
256 empty($mailbox[
'EMAIL'])
258 || in_array($mailbox[
'EMAIL'], $excludedEmails,
true)
264 $mailbox[
'USER_ID'] = (int)$mailbox[
'USER_ID'];
265 $canEdit = $mailbox[
'USER_ID'] ===
$userId || $isAdmin;
266 $isOwner = $mailbox[
'USER_ID'] ===
$userId;
269 if (self::isSmtpAvailable())
273 ->where(
'IS_CONFIRMED',
true)
274 ->where(
'PARENT_MODULE_ID',
'mail')
275 ->where(
'PARENT_ID', $mailbox[
'ID'])
281 if (!$sender && !$getMailboxesWithoutSmtp)
287 $senderName = trim($mailbox[
'USERNAME'] ??
'');
290 $sender[
'USER_ID'] = (int)$sender[
'USER_ID'];
291 if (empty($sender[
'NAME']) && empty($mailbox[
'USERNAME']))
296 if (!empty($mailbox[
'USERNAME']))
298 if ($sender[
'NAME'] !== $mailbox[
'USERNAME'])
304 if (empty($senderName) && $sender[
'NAME'])
306 $senderName = $sender[
'NAME'];
307 MailboxTable::update($mailbox[
'ID'], [
'USERNAME' => $senderName]);
310 if (!isset($userData[$sender[
'USER_ID']]))
315 $canEdit = $sender[
'USER_ID'] ===
$userId || $isAdmin;
316 $isOwner = $sender[
'USER_ID'] ===
$userId;
322 $userId !== (
int)$mailbox[
'USER_ID']
323 && self::getUserFormattedName((
int)$mailbox[
'USER_ID']) === $senderName
327 $senderName = $currentUserFormattedName ?? $senderName;
330 if (!empty($sender[
'USER_ID']))
332 $avatar = $userData[$sender[
'USER_ID']][
'userAvatar'] ??
null;
333 $userUrl = $userData[$sender[
'USER_ID']][
'userUrl'] ??
null;
337 'id' => $sender[
'ID'] ?? $mailbox[
'ID'],
338 'mailboxId' => $sender[
'PARENT_ID'] ?? $mailbox[
'ID'],
339 'name' => !empty($senderName) ? $senderName : $userFormattedName,
340 'type' => $sender ? self::MAILBOX_SENDER_TYPE : self::MAILBOX_TYPE,
341 'email' => $mailbox[
'EMAIL'],
342 'userId' => $sender[
'USER_ID'] ?? $mailbox[
'USER_ID'],
343 'canEdit' => $canEdit,
344 'isOwner' => $isOwner,
345 'editHref' => $canEdit ? self::getMailboxConfigPath($sender[
'PARENT_ID'] ?? $mailbox[
'ID']) :
null,
346 'avatar' => $avatar ??
null,
347 'userUrl' => $userUrl ??
null,
348 'showEditHint' => empty($sender),