static function MailMessageAgent()
{
global $DB;
$defSiteID = CSite::GetDefSite();
$arMark = array();
$arUnsendMessage = CIMMessage::GetUnsendMessage();
$arToUser = Array();
$arFromUser = Array();
$arDialog = Array();
$parser = new CTextParser();
$maxId = 0;
foreach($arUnsendMessage as $id => $arMessage)
{
$maxId = ((int)$id > $maxId) ? (int)$id : $maxId;
if (!isset($arMark[$arMessage["TO_USER_ID"]][$arMessage["CHAT_ID"]]) || $arMark[$arMessage["TO_USER_ID"]][$arMessage["CHAT_ID"]] < $arMessage["ID"])
$arMark[$arMessage["TO_USER_ID"]][$arMessage["CHAT_ID"]] = $arMessage["ID"];
if ($arMessage['TO_EXTERNAL_AUTH_ID'] == BitrixImBot::EXTERNAL_AUTH_ID || $arMessage['TO_EXTERNAL_AUTH_ID'] == "network")
{
unset($arUnsendMessage[$id]);
continue;
}
if ($arMessage['TO_USER_ACTIVE'] != 'Y')
{
unset($arUnsendMessage[$id]);
continue;
}
if (!CIMSettings::GetNotifyAccess($arMessage["TO_USER_ID"], 'im', 'message', CIMSettings::CLIENT_MAIL))
{
unset($arUnsendMessage[$id]);
continue;
}
if ($arMessage["MESSAGE_OUT"] == IM_MAIL_SKIP)
{
unset($arUnsendMessage[$id]);
continue;
}
if ($arMessage["MESSAGE_OUT"] == '')
$arMessage["MESSAGE_OUT"] = $arMessage["MESSAGE"];
if (!isset($arToUser[$arMessage["TO_USER_ID"]]))
{
$siteID = $arMessage["TO_USER_LID"];
if ($siteID == false || $siteID == '')
{
$siteID = $defSiteID;
if ($siteID == false || $siteID == '')
continue;
}
$arNotify["USER"] = BitrixImUser::formatFullNameFromDatabase(array(
"NAME" => $arMessage["TO_USER_NAME"],
"LAST_NAME" => $arMessage["TO_USER_LAST_NAME"],
"SECOND_NAME" => $arMessage["TO_USER_SECOND_NAME"] ?? null,
"LOGIN" => $arMessage["TO_USER_LOGIN"],
"EXTERNAL_AUTH_ID" => $arMessage["TO_EXTERNAL_AUTH_ID"],
));
$arToUser[$arMessage["TO_USER_ID"]] = Array(
"USER" => $arMessage['USER'] ?? null,
"USER_ID" => $arMessage["TO_USER_ID"],
"USER_LOGIN" => $arMessage["TO_USER_LOGIN"],
"USER_NAME" => $arMessage["TO_USER_NAME"],
"USER_LAST_NAME" => $arMessage["TO_USER_LAST_NAME"],
"USER_SECOND_NAME" => $arMessage["TO_USER_SECOND_NAME"] ?? null,
"TO_USER_LID" => $siteID,
"EMAIL_TO" => $arMessage["TO_USER_EMAIL"],
);
}
if (!isset($arFromUser[$arMessage["FROM_USER_ID"]]))
{
if ($arMessage["FROM_USER_ID"] == 0)
{
$arMessage["FROM_USER"] = GetMessage('IM_MAIL_USER_SYSTEM');
}
else
{
$arMessage["FROM_USER"] = BitrixImUser::formatFullNameFromDatabase(array(
"NAME" => $arMessage["FROM_USER_NAME"],
"LAST_NAME" => $arMessage["FROM_USER_LAST_NAME"],
"SECOND_NAME" => $arMessage["FROM_USER_SECOND_NAME"] ?? null,
"LOGIN" => $arMessage["FROM_USER_LOGIN"],
"EXTERNAL_AUTH_ID" => $arMessage["FROM_EXTERNAL_AUTH_ID"],
));
}
$arFromUser[$arMessage["FROM_USER_ID"]] = Array(
"FROM_USER" => $arMessage["FROM_USER"],
"FROM_USER_ID" => $arMessage["FROM_USER_ID"],
"FROM_USER_LOGIN" => $arMessage["FROM_USER_LOGIN"],
"FROM_USER_NAME" => $arMessage["FROM_USER_NAME"],
"FROM_USER_LAST_NAME" => $arMessage["FROM_USER_LAST_NAME"],
"FROM_USER_SECOND_NAME" => $arMessage["FROM_USER_SECOND_NAME"] ?? null,
);
}
$message = $parser->convert4mail(str_replace("#BR#", "n", strip_tags($arMessage["MESSAGE_OUT"])));
$message = BitrixImText::removeBbCodes($message);
$arDialog[$arMessage["TO_USER_ID"]][$arMessage["FROM_USER_ID"]][] = Array(
'DATE_CREATE' => FormatDate("FULL", $arMessage["DATE_CREATE"]),
'MESSAGE' => $message
);
}
if ($maxId > 0)
{
BitrixMainConfigOption::set('im', 'last_send_mail_message', $maxId);
}
foreach ($arToUser as $toID=> $arToInfo)
{
$message = "";
$messagesFromUsers = array();
$bHeader = false;
$arNames = Array();
$arFromId = Array();
$bFirstMessage = true;
foreach ($arDialog[$toID] as $fromID => $arMessages)
{
$fromIdUserMessages = "";
if ($bFirstMessage)
$bFirstMessage = false;
else
$message .= "n";
if (count($arDialog[$toID])>1)
{
$message .= GetMessage('IM_MAIL_TEMPLATE_NEW_MESSAGE_HEADER', Array('#FROM_USER#' => $arFromUser[$fromID]['FROM_USER']))."n";
$bHeader = true;
}
$arNames[] = $arFromUser[$fromID]['FROM_USER'];
$arFromId[] = $arFromUser[$fromID]['FROM_USER_ID'];
foreach ($arMessages as $arMessage)
{
$message .= GetMessage('IM_MAIL_TEMPLATE_NEW_MESSAGE_TEXT', Array('#DATE_CREATE#' => $arMessage['DATE_CREATE'], '#MESSAGE#' => $arMessage['MESSAGE']))."n";
$fromIdUserMessages .= nl2br(GetMessage('IM_MAIL_TEMPLATE_NEW_MESSAGE_TEXT', Array('#DATE_CREATE#' => $arMessage['DATE_CREATE'], '#MESSAGE#' => $arMessage['MESSAGE']))."n");
}
$messagesFromUsers[$fromID] = $fromIdUserMessages;
}
if ($bHeader)
$message .= "n".GetMessage('IM_MAIL_TEMPLATE_NEW_MESSAGE_FOOTER');
$fromUserId = $arToInfo["FROM_USER_ID"] ?? null;
$arFields = array(
"USER" => $arToInfo["USER_ID"],
"USER_ID" => count($arNames) > 1? $arToInfo["USER_ID"]: $fromUserId,
"USER_LOGIN" => $arToInfo["USER_LOGIN"],
"USER_NAME" => $arToInfo["USER_NAME"],
"USER_LAST_NAME" => $arToInfo["USER_LAST_NAME"],
"USER_SECOND_NAME" => $arToInfo["USER_SECOND_NAME"],
"EMAIL_TO" => $arToInfo["EMAIL_TO"],
"TITLE" => $arToInfo["TITLE"] ?? null,
"MESSAGES" => $message,
"MESSAGES_FROM_USERS" => serialize($messagesFromUsers),
"DATE_CREATE" => null,
);
$arFields['FROM_USER_ID'] = implode(', ', $arFromId);
if (count($arNames) > 1)
{
$mailTemplate = "IM_NEW_MESSAGE_GROUP";
$arFields['FROM_USERS'] = implode(', ', $arNames);
}
else
{
$mailTemplate = "IM_NEW_MESSAGE";
$arFields['FROM_USER'] = implode(', ', $arNames);
}
$event = new CEvent;
$event->Send($mailTemplate, $arToInfo['TO_USER_LID'], $arFields, "N");
}
return "CIMMail::MailMessageAgent();";
}