• Модуль: xmpp
  • Путь к файлу: ~/bitrix/modules/xmpp/classes/factory_classes/message.php
  • Класс: CXMPPReceiveMessage
  • Вызов: CXMPPReceiveMessage::ReceiveMessage
public function ReceiveMessage($senderJId, array $arMessage, CXMPPClient $senderClient)
	{
		if (!$senderClient->IsAuthenticated())
			return false;
		if ($senderJId == '')
			return false;

		if (!array_key_exists("message", $arMessage) || !array_key_exists(".", $arMessage["message"]))
			return false;

		$type = "normal";
		if (array_key_exists("type", $arMessage["message"]["."]))
			$type = $arMessage["message"]["."]["type"];
		if ($type == "error")
			return false;

		$mid = "";
		if (array_key_exists("id", $arMessage["message"]["."]))
			$mid = $arMessage["message"]["."]["id"];

		if (!in_array($type, array("chat", "groupchat", "headline", "normal")))
			return CXMPPUtility::GetErrorArray($senderJId, "message", "modify", "bad-request", "", $mid, "", $senderClient->GetClientDomain());

		$recipientJId = "";
		if (array_key_exists("to", $arMessage["message"]["."]))
			$recipientJId = $arMessage["message"]["."]["to"];
		if ($recipientJId == '')
			return CXMPPUtility::GetErrorArray($senderJId, "message", "modify", "bad-request", "", $mid, "", $senderClient->GetClientDomain());

		$body = "";
		if (array_key_exists("body", $arMessage["message"]))
			$body = $arMessage["message"]["body"]["#"];
		if ($body == '')
			return true;
		//$body = CXMPPReceiveMessage::htmlspecialcharsback($body);
		//$body = html_entity_decode($body);
		$body = html_entity_decode($body, ENT_COMPAT, SITE_CHARSET);
		$body = str_replace("'", "'", $body);

		$arSender = CXMPPUtility::GetUserByJId($senderJId);
		if (!$arSender)
			return CXMPPUtility::GetErrorArray($senderJId, "message", "auth", "forbidden", $recipientJId, $mid, "", $senderClient->GetClientDomain());

		$arRecipient = CXMPPUtility::GetUserByJId($recipientJId);
		if (!$arRecipient)
			return CXMPPUtility::GetErrorArray($senderJId, "message", "cancel", "item-not-found", $recipientJId, $mid, "", $senderClient->GetClientDomain());

		if (!CSocNetUserPerms::CanPerformOperation($arSender["ID"], $arRecipient["ID"], "message", false))
			return CXMPPUtility::GetErrorArray($senderJId, "message", "auth", "forbidden", $recipientJId, $mid, "", $senderClient->GetClientDomain());
		
		if (IsModuleInstalled("im") && CModule::IncludeModule("im"))
		{
			$arMessageFields = array(
				"FROM_USER_ID" => $arSender["ID"],
				"TO_USER_ID" => $arRecipient["ID"],
				"MESSAGE" => $body
			);
			CIMMessage::Add($arMessageFields);
		}
		else
		{
			$arMessageFields = array(
				"=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(),
				"MESSAGE_TYPE" => SONET_MESSAGE_PRIVATE,
				"FROM_USER_ID" => $arSender["ID"],
				"TO_USER_ID" => $arRecipient["ID"],
				"MESSAGE" => $body,
			);
			CSocNetMessages::Add($arMessageFields);
		}

		if (CModule::IncludeModule("pull"))
		{
			BitrixPullEvent::send();
		}

		return true;
	}