• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_messenger.php
  • Класс: CIMMessenger
  • Вызов: CIMMessenger::SendMention
static function SendMention($params)
{
	$params['CHAT_ID'] = intval($params['CHAT_ID']);
	if (!isset($params['MESSAGE']) || $params['CHAT_ID'] <= 0)
	{
		return false;
	}

	$userName = BitrixImUser::getInstance($params['FROM_USER_ID'])->getFullName(false);
	$userGender = BitrixImUser::getInstance($params['FROM_USER_ID'])->getGender();

	if (!$userName)
	{
		return false;
	}

	$orm = BitrixImModelChatTable::getById($params['CHAT_ID']);
	$chat = $orm->fetch();
	if (!$chat)
	{
		return false;
	}

	$params['CHAT_TITLE'] = $chat['TITLE'] ?? '';
	$params['CHAT_TYPE'] = trim($chat['TYPE'] ?? '');
	$params['CHAT_COLOR'] = trim($chat['COLOR'] ?? '');
	$params['CHAT_ENTITY_TYPE'] = trim($chat['CHAT_ENTITY_TYPE'] ?? '');
	$params['CHAT_AVATAR'] = intval($chat['AVATAR']);

	if (!in_array($params['CHAT_TYPE'], Array(IM_MESSAGE_OPEN, IM_MESSAGE_CHAT, IM_MESSAGE_OPEN_LINE)))
	{
		return false;
	}

	if (!isset($params['CHAT_RELATION']))
	{
		$params['CHAT_RELATION'] = CIMChat::GetRelationById($params['CHAT_ID'], false, true, false);
	}

	$mentionUsers = $params['MENTION_USERS'] ?? self::getMentionUsers($params['MESSAGE'] ?? '');
	$forUsers = self::prepareUsersForMention($mentionUsers, $params);

	$chatTitle = mb_substr(htmlspecialcharsback($params['CHAT_TITLE']), 0, 32);
	$notifyMail = GetMessage('IM_MESSAGE_MENTION_'.($userGender=='F'?'F':'M'), Array('#TITLE#' => $chatTitle));
	$notifyText = GetMessage('IM_MESSAGE_MENTION_'.($userGender=='F'?'F':'M'), Array('#TITLE#' => '[CHAT='.$params['CHAT_ID'].']'.$chatTitle.'[/CHAT]'));
	$pushText = GetMessage('IM_MESSAGE_MENTION_PUSH_2_'.($userGender=='F'?'F':'M'), Array('#USER#' => $userName, '#TITLE#' => $chatTitle)).': '.self::PrepareParamsForPush(Array('MESSAGE' => $params['MESSAGE'], 'FILES' => $params['FILES']));

	if ($pushText <> '')
	{
		foreach ($forUsers as $userId)
		{
			if ($params['FROM_USER_ID'] == $userId)
				continue;

			$arMessageFields = array(
				"TO_USER_ID" => $userId,
				"FROM_USER_ID" => $params['FROM_USER_ID'],
				"NOTIFY_TYPE" => IM_NOTIFY_FROM,
				"NOTIFY_MODULE" => "im",
				"NOTIFY_EVENT" => "mention",
				"NOTIFY_TAG" => 'IM|MENTION|'.$params['CHAT_ID'],
				"NOTIFY_SUB_TAG" => 'IM_MESS_'.$params['CHAT_ID'].'_'.$userId,
				"NOTIFY_MESSAGE" => $notifyText,
				"NOTIFY_MESSAGE_OUT" => $notifyMail,
			);
			CIMNotify::Add($arMessageFields);

			BitrixPullPush::add($userId, self::PreparePushForMentionInChat(Array(
				'CHAT_ID' => $params['CHAT_ID'],
				'CHAT_TITLE' => $params['CHAT_TITLE'],
				'CHAT_TYPE' => $params['CHAT_TYPE'],
				'CHAT_AVATAR' => $params['CHAT_AVATAR'],
				'CHAT_ENTITY_TYPE' => $params['CHAT_ENTITY_TYPE'],
				'FROM_USER_ID' => $params['FROM_USER_ID'],
				'MESSAGE' => $pushText,
			)));
		}
	}

	return true;
}