public static function MailMessageAgent() { global $DB; $defSiteID = CSite::GetDefSite(); $arMark = array(); $arUnsendMessage = CIMMessage::GetUnsendMessage(); $arToUser = array(); $arFromUser = array(); $arDialog = array(); foreach ($arUnsendMessage as $id => $arMessage) { 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 (strlen($arMessage["MESSAGE_OUT"]) <= 0) { $arMessage["MESSAGE_OUT"] = $arMessage["MESSAGE"]; } if (!isset($arToUser[$arMessage["TO_USER_ID"]])) { $siteID = $arMessage["TO_USER_LID"]; if ($siteID == false || StrLen($siteID) <= 0) { $siteID = $defSiteID; if ($siteID == false || StrLen($siteID) <= 0) { continue; } } $arMessage["USER"] = htmlspecialcharsback(CUser::FormatName(CSite::GetNameFormat(false), array("NAME" => $arMessage["TO_USER_NAME"], "LAST_NAME" => $arMessage["TO_USER_LAST_NAME"], "SECOND_NAME" => $arMessage["TO_USER_SECOND_NAME"], "LOGIN" => $arMessage["TO_USER_LOGIN"]), true)); $arToUser[$arMessage["TO_USER_ID"]] = array("USER" => $arMessage["USER"], "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"], "TO_USER_LID" => $siteID, "EMAIL_TO" => $arMessage["TO_USER_EMAIL"]); } if (!isset($arFromUser[$arMessage["FROM_USER_ID"]])) { $arMessage["FROM_USER"] = htmlspecialcharsback(CUser::FormatName(CSite::GetNameFormat(false), array("NAME" => $arMessage["FROM_USER_NAME"], "LAST_NAME" => $arMessage["FROM_USER_LAST_NAME"], "SECOND_NAME" => $arMessage["FROM_USER_SECOND_NAME"], "LOGIN" => $arMessage["FROM_USER_LOGIN"]), true)); $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"]); } $arDialog[$arMessage["TO_USER_ID"]][$arMessage["FROM_USER_ID"]][] = array('DATE_CREATE' => $arMessage["DATE_CREATE"], 'MESSAGE' => CTextParser::convert4mail(str_replace("#BR#", "\n", strip_tags($arMessage["MESSAGE_OUT"])))); } foreach ($arMark as $userId => $ar) { foreach ($ar as $chatId => $lastSendId) { CIMMessage::SetLastSendId($chatId, $userId, $lastSendId); } } foreach ($arToUser as $toID => $arToInfo) { $message = ""; $bHeader = false; $arNames = array(); $bFirstMessage = true; foreach ($arDialog[$toID] as $fromID => $arMessages) { 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']; foreach ($arMessages as $arMessage) { $message .= "\n" . GetMessage('IM_MAIL_TEMPLATE_NEW_MESSAGE_TEXT', array('#DATE_CREATE#' => $arMessage['DATE_CREATE'], '#MESSAGE#' => $arMessage['MESSAGE'])) . "\n"; } } if ($bHeader) { $message .= "\n" . GetMessage('IM_MAIL_TEMPLATE_NEW_MESSAGE_FOOTER'); } $arFields = array("USER" => $arToInfo["USER_ID"], "USER_ID" => $arToInfo["USER_ID"], "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"], "MESSAGES" => $message); 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();"; }