Пример #1
0
 public function ReceiveMessage($senderJId, array $arMessage, CXMPPClient $senderClient)
 {
     if (!$senderClient->IsAuthenticated()) {
         return false;
     }
     if (strlen($senderJId) <= 0) {
         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 (strlen($recipientJId) <= 0) {
         return CXMPPUtility::GetErrorArray($senderJId, "message", "modify", "bad-request", "", $mid, "", $senderClient->GetClientDomain());
     }
     $body = "";
     if (array_key_exists("body", $arMessage["message"])) {
         $body = $arMessage["message"]["body"]["#"];
     }
     if (strlen($body) <= 0) {
         return true;
     }
     //$body = CXMPPReceiveMessage::htmlspecialcharsback($body);
     //$body = html_entity_decode($body);
     $body = html_entity_decode($body, ENT_COMPAT, SITE_CHARSET);
     $body = str_replace("&apos;", "'", $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);
     }
     return true;
 }
Пример #2
0
 public function ReceiveMessage($senderJId, array $arMessage, CXMPPClient $senderClient)
 {
     if (!$senderClient->IsAuthenticated()) {
         return false;
     }
     if (strlen($senderJId) <= 0) {
         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 (strlen($to) <= 0) {
         $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;
 }