- Модуль: xmpp
- Путь к файлу: ~/bitrix/modules/xmpp/classes/factory_classes/presence.php
- Класс: CXMPPReceivePresence
- Вызов: CXMPPReceivePresence::ReceiveMessage
public function ReceiveMessage($senderJId, array $arMessage, CXMPPClient $senderClient)
{
if (!$senderClient->IsAuthenticated())
return false;
if ($senderJId == '')
return false;
if (!array_key_exists("presence", $arMessage) || !array_key_exists(".", $arMessage["presence"]))
return false;
$type = "available";
if (array_key_exists("type", $arMessage["presence"]["."]))
$type = $arMessage["presence"]["."]["type"];
if ($type == "error")
return false;
// available (empty) - Signals that the sender is online and available for communication.
// unavailable - Signals that the sender is no longer available for communication.
// subscribe - The sender wishes to subscribe to the recipient's presence.
// subscribed - The sender has allowed the recipient to receive their presence.
// unsubscribe - The sender is unsubscribing from another entity's presence.
// unsubscribed - The subscription request has been denied or a previously-granted subscription has been cancelled.
// probe - A request for an entity's current presence; SHOULD be generated only by a server on behalf of a user.
// error - An error has occurred regarding processing or delivery of a previously-sent presence stanza.
if (!in_array($type, array("available", "unavailable", "subscribe", "subscribed", "unsubscribe", "unsubscribed", "probe")))
return CXMPPUtility::GetErrorArray($senderJId, "presence", "modify", "bad-request", "", "", "", $senderClient->GetClientDomain());
$to = "";
if (array_key_exists("to", $arMessage["presence"]["."]))
$to = $arMessage["presence"]["."]["to"];
$server = CXMPPServer::GetServer();
if ($to == '')
$server->SendAll($arMessage, $senderClient->GetClientDomain());
else
$server->Send($to, $arMessage, $senderClient->GetClientDomain());
if (!in_array($type, array("available")))
return true;
$userJId = $senderJId;
$show = "online";
if (array_key_exists("show", $arMessage["presence"]))
$show = $arMessage["presence"]["show"]["#"];
$status = "";
if (array_key_exists("status", $arMessage["presence"]))
$status = $arMessage["presence"]["status"]["#"];
$priority = 0;
if (array_key_exists("priority", $arMessage["presence"]))
$priority = intval($arMessage["presence"]["priority"]["#"]);
$arUser = CXMPPUtility::GetUserByJId($userJId);
if (!$arUser)
return CXMPPUtility::GetErrorArray($senderJId, "presence", "auth", "forbidden", "", "", "", $senderClient->GetClientDomain());
CUser::SetLastActivityDate($arUser["ID"]);
CXMPPFactory::SendUnreadMessages($senderJId, $senderClient->GetClientDomain());
$senderClient->ChangeWorkPresence("Status", $show);
return true;
}