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;
}