static function MailNotifyAgent()
{
global $DB;
$defSiteID = CSite::GetDefSite();
$arMark = array();
$arGroupNotify = array();
$arGroupNotifyUser = array();
$arUnsendNotify = CIMNotify::GetUnsendNotify();
$maxId = 0;
foreach($arUnsendNotify as $id => $arNotify)
{
$maxId = ((int)$id > $maxId) ? (int)$id : $maxId;
if (!isset($arMark[$arNotify["CHAT_ID"]]) || $arMark[$arNotify["CHAT_ID"]] < $arNotify["ID"])
$arMark[$arNotify["CHAT_ID"]] = $arNotify["ID"];
if ($arNotify['TO_EXTERNAL_AUTH_ID'] == BitrixImBot::EXTERNAL_AUTH_ID || $arNotify['TO_EXTERNAL_AUTH_ID'] == "network")
{
unset($arUnsendNotify[$id]);
continue;
}
if ($arNotify['TO_USER_ACTIVE'] != 'Y')
{
unset($arUnsendNotify[$id]);
continue;
}
if (isset($arNotify["NOTIFY_MODULE"]) && isset($arNotify["NOTIFY_EVENT"])
&& !CIMSettings::GetNotifyAccess($arNotify["TO_USER_ID"], $arNotify["NOTIFY_MODULE"], $arNotify["NOTIFY_EVENT"], CIMSettings::CLIENT_MAIL))
{
unset($arUnsendNotify[$id]);
continue;
}
if ($arNotify["MESSAGE_OUT"] == IM_MAIL_SKIP)
{
unset($arUnsendNotify[$id]);
continue;
}
if (!$arNotify["TO_USER_LID"] || $arNotify["TO_USER_LID"] == '')
{
$arNotify["TO_USER_LID"] = $defSiteID;
if (!$arNotify["TO_USER_LID"] || $arNotify["TO_USER_LID"] == '')
{
unset($arUnsendNotify[$id]);
continue;
}
}
if ($arNotify["MESSAGE_OUT"] == '')
$arNotify["MESSAGE_OUT"] = $arNotify["MESSAGE"];
if (!(isset($arNotify["EMAIL_TEMPLATE"]) && $arNotify["EMAIL_TEMPLATE"] <> ''))
$arNotify["EMAIL_TEMPLATE"] = "IM_NEW_NOTIFY";
$arNotify["USER"] = BitrixImUser::formatFullNameFromDatabase(array(
"NAME" => $arNotify["TO_USER_NAME"],
"LAST_NAME" => $arNotify["TO_USER_LAST_NAME"],
"SECOND_NAME" => $arNotify["TO_USER_SECOND_NAME"],
"LOGIN" => $arNotify["TO_USER_LOGIN"],
"EXTERNAL_AUTH_ID" => $arNotify["TO_EXTERNAL_AUTH_ID"]
));
if ($arNotify["FROM_USER_ID"] == 0)
{
$arNotify["FROM_USER"] = GetMessage('IM_MAIL_USER_SYSTEM');
}
else
{
$arNotify["FROM_USER"] = BitrixImUser::formatFullNameFromDatabase(array(
"NAME" => $arNotify["FROM_USER_NAME"],
"LAST_NAME" => $arNotify["FROM_USER_LAST_NAME"],
"SECOND_NAME" => $arNotify["FROM_USER_SECOND_NAME"],
"LOGIN" => $arNotify["FROM_USER_LOGIN"],
"EXTERNAL_AUTH_ID" => $arNotify["FROM_EXTERNAL_AUTH_ID"]
));
}
$arNotify['NOTIFY_TAG_MD5'] = md5($arNotify["TO_USER_ID"].'|'.$arNotify['NOTIFY_TAG']);
$arUnsendNotify[$id] = $arNotify;
if ($arNotify["EMAIL_TEMPLATE"] == "IM_NEW_NOTIFY" && $arNotify['NOTIFY_TAG'] != '')
{
if (isset($arGroupNotify[$arNotify['NOTIFY_TAG_MD5']]))
{
$arGroupNotifyUser[$arNotify['NOTIFY_TAG_MD5']][$arNotify["FROM_USER_ID"]] = $arNotify["FROM_USER"];
unset($arUnsendNotify[$id]);
}
else
{
$arGroupNotifyUser[$arNotify['NOTIFY_TAG_MD5']][$arNotify["FROM_USER_ID"]] = $arNotify["FROM_USER"];
$arGroupNotify[$arNotify['NOTIFY_TAG_MD5']] = true;
}
}
}
if ($maxId > 0)
{
BitrixMainConfigOption::set('im', 'last_send_mail_notification', $maxId);
}
$CTP = new CTextParser;
foreach($arUnsendNotify as $id => $arNotify)
{
$message = $CTP->convert4mail(str_replace("#BR#", "n", strip_tags($arNotify["MESSAGE_OUT"])));
$messageShort = str_replace(array("
","
","
", "#BR#"), Array(" ", " ", " ", " "), nl2br($CTP->convert4mail(strip_tags($arNotify["MESSAGE_OUT"]))));
$message = BitrixImText::removeBbCodes($message);
$messageShort = $CTP->html_cut(BitrixImText::removeBbCodes($messageShort), 50);
$title = trim($arNotify["NOTIFY_TITLE"] ?? '');
if ($title !== '')
{
$title = BitrixImText::removeBbCodes($title);
}
$arFields = array(
"MESSAGE_ID" => $arNotify["ID"],
"USER" => $arNotify["USER"],
"USER_ID" => $arNotify["TO_USER_ID"],
"USER_LOGIN" => $arNotify["TO_USER_LOGIN"],
"USER_NAME" => $arNotify["TO_USER_NAME"],
"USER_LAST_NAME" => $arNotify["TO_USER_LAST_NAME"],
"USER_SECOND_NAME" => $arNotify["TO_USER_SECOND_NAME"],
"DATE_CREATE" => FormatDate("FULL", $arNotify["DATE_CREATE"]),
"FROM_USER_ID" => $arNotify["FROM_USER_ID"],
"FROM_USER_LOGIN" => $arNotify["FROM_USER_LOGIN"],
"FROM_USER" => $arNotify["FROM_USER"],
"SENDER_ID" => $arNotify["FROM_USER_ID"], // legacy
"SENDER_LOGIN" => $arNotify["FROM_USER_LOGIN"], // legacy
"SENDER_NAME" => $arNotify["FROM_USER_NAME"], // legacy
"SENDER_LAST_NAME" => $arNotify["FROM_USER_LAST_NAME"], // legacy
"SENDER_SECOND_NAME" => $arNotify["FROM_USER_SECOND_NAME"], // legacy
"EMAIL_TO" => $arNotify["TO_USER_EMAIL"],
"TITLE" => $title,
"MESSAGE" => $message,
"MESSAGE_50" => $messageShort,
);
if ($arFields['TITLE'] <> '')
$arFields["MESSAGE_50"] = $arFields['TITLE'];
else
$arFields["TITLE"] = $arFields['MESSAGE_50'];
if (isset($arGroupNotifyUser[$arNotify['NOTIFY_TAG_MD5']]) && count($arGroupNotifyUser[$arNotify['NOTIFY_TAG_MD5']]) > 1)
{
$arNotify["EMAIL_TEMPLATE"] = "IM_NEW_NOTIFY_GROUP";
$arFields['FROM_USERS'] = implode(', ', $arGroupNotifyUser[$arNotify['NOTIFY_TAG_MD5']]);
unset($arFields['FROM_USER']);
}
$event = new CEvent;
$event->Send($arNotify["EMAIL_TEMPLATE"], $arNotify["TO_USER_LID"], $arFields, "N");
}
return "CIMMail::MailNotifyAgent();";
}