• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_mail.php
  • Класс: CIMMail
  • Вызов: CIMMail::MailNotifyAgent
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();"; }