Current Path : /var/www/html/clients/e-nkama.ru/e-nkama_bitrix/bitrix/components/bitrix/im.messenger/ |
Current File : /var/www/html/clients/e-nkama.ru/e-nkama_bitrix/bitrix/components/bitrix/im.messenger/im.ajax.php |
<? if (!defined('IM_AJAX_INIT')) { define("IM_AJAX_INIT", true); define("PUBLIC_AJAX_MODE", true); define("NO_KEEP_STATISTIC", "Y"); define("NO_AGENT_STATISTIC","Y"); define("NOT_CHECK_PERMISSIONS", true); if (!isset($_POST['IM_UPDATE_STATE']) || !isset($_POST['IM_UPDATE_STATE_LIGHT'])) { define("DisableEventsCheck", true); define("NO_AGENT_CHECK", true); } require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); } header('Content-Type: application/x-javascript; charset='.LANG_CHARSET); IncludeModuleLangFile(__FILE__); // NOTICE // Before execute next code, execute file /module/im/ajax_hit.php // for skip onProlog events if (!CModule::IncludeModule("im")) { echo CUtil::PhpToJsObject(Array('ERROR' => GetMessage('IM_MODULE_NOT_INSTALLED'))); CMain::FinalActions(); die(); } if(!$USER->IsAuthorized()) { $USER->LoginByCookies(); } if (intval($USER->GetID()) <= 0) { // TODO need change AUTHORIZE ERROR callbacks //header("HTTP/1.0 401 Not Authorized"); //header("Content-Type: application/x-javascript"); //header("BX-Authorize: ".bitrix_sessid()); echo CUtil::PhpToJsObject(Array( 'ERROR' => 'AUTHORIZE_ERROR', 'BITRIX_SESSID' => bitrix_sessid() )); CMain::FinalActions(); die(); } if (check_bitrix_sessid()) { if (isset($_REQUEST["mobile_action"]) && $_POST['FOCUS'] == 'Y' && CModule::IncludeModule('mobile')) { Bitrix\Mobile\User::setOnline(); } if ($_POST['IM_AVATAR_UPDATE'] == 'Y') { $userId = $USER->GetId(); if (CIMChat::GetGeneralChatId() != intval($_POST['CHAT_ID'])) { $CFileUploader = new CFileUploader(array( "allowUpload" => "I", "events" => array("onFileIsUploaded" => array("CIMDisk", "UploadAvatar")) )); if (!$CFileUploader->checkPost()) { echo CUtil::PhpToJsObject(Array( 'ERROR' => 'UPLOAD_ERROR' )); } } else { echo CUtil::PhpToJsObject(Array( 'ERROR' => 'UPLOAD_ERROR' )); } } else if ($_POST['IM_FILE_UPLOAD'] == 'Y') { CUtil::decodeURIComponent($_POST); $CFileUploader = new CFileUploader(array( "allowUpload" => "A", "events" => array( "onFileIsUploaded" => array("CIMDisk", "UploadFile") ) )); if (!$CFileUploader->checkPost()) { echo CUtil::PhpToJsObject(Array( 'ERROR' => 'UPLOAD_ERROR' )); } } else if ($_POST['IM_FILE_REGISTER'] == 'Y') { $errorMessage = ''; CUtil::decodeURIComponent($_POST); $_POST['FILES'] = CUtil::JsObjectToPhp($_POST['FILES']); $result = CIMDisk::UploadFileRegister($_POST['CHAT_ID'], $_POST['FILES']); if (!$result) { $errorMessage = 'ERROR'; } echo CUtil::PhpToJsObject(Array( 'FILE_ID' => $result['FILE_ID'], 'CHAT_ID' => $_POST['CHAT_ID'], 'RECIPIENT_ID' => $_POST['RECIPIENT_ID'], 'MESSAGE_ID' => $result['MESSAGE_ID'], 'MESSAGE_TMP_ID' => $_POST['MESSAGE_TMP_ID'], 'ERROR' => $errorMessage )); } else if ($_POST['IM_FILE_UNREGISTER'] == 'Y') { $_POST['FILES'] = CUtil::JsObjectToPhp($_POST['FILES']); $_POST['MESSAGES'] = CUtil::JsObjectToPhp($_POST['MESSAGES']); $result = CIMDisk::UploadFileUnRegister($_POST['CHAT_ID'], $_POST['FILES'], $_POST['MESSAGES']); echo CUtil::PhpToJsObject(Array( 'ERROR' => !$result? 'ERROR': '' )); } else if ($_POST['IM_FILE_DELETE'] == 'Y') { $result = CIMDisk::DeleteFile($_POST['CHAT_ID'], $_POST['FILE_ID']); echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $_POST['CHAT_ID'], 'FILE_ID' => $_POST['FILE_ID'], 'ERROR' => !$result? 'ERROR': '' )); } else if ($_POST['IM_FILE_SAVE_TO_DISK'] == 'Y') { $result = CIMDisk::SaveToLocalDisk($_POST['FILE_ID']); echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $_POST['CHAT_ID'], 'FILE_ID' => $_POST['FILE_ID'], 'NEW_FILE_ID' => $result? $result->getId(): 0, 'ERROR' => !$result? 'ERROR': '' )); } else if ($_POST['IM_FILE_UPLOAD_FROM_DISK'] == 'Y') { $errorMessage = ''; $_POST['FILES'] = CUtil::JsObjectToPhp($_POST['FILES']); $result = CIMDisk::UploadFileFromDisk($_POST['CHAT_ID'], $_POST['FILES']); if (!$result) { $errorMessage = 'ERROR'; } echo CUtil::PhpToJsObject(Array( 'FILES' => $result['FILES'], 'CHAT_ID' => $_POST['CHAT_ID'], 'RECIPIENT_ID' => $_POST['RECIPIENT_ID'], 'MESSAGE_ID' => $result['MESSAGE_ID'], 'MESSAGE_TMP_ID' => $_POST['MESSAGE_TMP_ID'], 'ERROR' => $errorMessage )); } else if ($_POST['IM_HISTORY_FILES_LOAD'] == 'Y') { $chatId = intval($_POST['CHAT_ID']); $historyPage = intval($_POST['PAGE_ID']); $historyPage = $historyPage>0? $historyPage: 1; $arFiles = CIMDisk::GetHistoryFiles($chatId, $historyPage); echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $chatId, 'FILES' => $arFiles, 'ERROR' => '' )); } else if ($_POST['IM_HISTORY_FILES_SEARCH'] == 'Y') { CUtil::decodeURIComponent($_POST); $chatId = intval($_POST['CHAT_ID']); $arFiles = CIMDisk::GetHistoryFilesByName($chatId, $_POST['SEARCH']); echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $chatId, 'FILES' => $arFiles, 'ERROR' => '' )); } elseif ($_POST['IM_UPDATE_STATE'] == 'Y') { if (isset($_POST['DESKTOP']) && $_POST['DESKTOP'] == 'Y') CIMMessenger::SetDesktopStatusOnline(); CIMContactList::SetOnline(); $arResult["REVISION"] = IM_REVISION; $arResult["MOBILE_REVISION"] = IM_MOBILE_REVISION; $arResult["DISK_REVISION"] = COption::GetOptionString("disk", "disk_revision_api", -1); $arResult['SERVER_TIME'] = time(); if (isset($_POST['FN'])) { $_POST['FN'] = CUtil::JsObjectToPhp($_POST['FN']); if (is_array($_POST['FN'])) { foreach ($_POST['FN'] as $key => $value) $_SESSION['IM_FLASHED_NOTIFY'][$key] = $key; } } if (isset($_POST['FM'])) { $_POST['FM'] = CUtil::JsObjectToPhp($_POST['FM']); if (is_array($_POST['FM'])) { foreach ($_POST['FM'] as $userId => $data) foreach ($data as $key => $value) $_SESSION['IM_FLASHED_MESSAGE'][$key] = $key; } } $bOpenMessenger = isset($_POST['OPEN_MESSENGER']) && intval($_POST['OPEN_MESSENGER']) == 1? true: false; // Online $arOnline = CIMStatus::GetList(); // Counters $arResult["COUNTERS"] = CUserCounter::GetValues($USER->GetID(), $_POST['SITE_ID']); if (CIMMail::IsExternalMailAvailable()) { $arResult["MAIL_COUNTER"] = intval($arResult["COUNTERS"]["mail_unseen"]); } else if (CModule::IncludeModule("dav")) { // Exchange $ar = CDavExchangeMail::GetTicker($GLOBALS["USER"]); if ($ar !== null) $arResult["MAIL_COUNTER"] = intval($ar["numberOfUnreadMessages"]); } $arSend = Array( 'REVISION' => $arResult["REVISION"], 'MOBILE_REVISION' => $arResult["MOBILE_REVISION"], 'DISK_REVISION' => $arResult["DISK_REVISION"], 'USER_ID' => $USER->GetId(), 'ONLINE' => !empty($arOnline)? $arOnline['users']: array(), 'COUNTERS' => $arResult["COUNTERS"], 'MAIL_COUNTER' => $arResult["MAIL_COUNTER"], 'SERVER_TIME' => time(), 'ERROR' => "" ); if (CModule::IncludeModule('pull')) { $arPullConfig = CPullChannel::GetConfig($USER->GetId(), ($_POST['CACHE'] == 'Y'), false, ($_POST['MOBILE'] == 'Y')); if (is_array($arPullConfig)) { $arSend['PULL_CONFIG'] = $arPullConfig; } } if ($bOpenMessenger && $_POST['TAB'] != 0) CIMMessenger::SetCurrentTab($_POST['TAB']); $CIMMessage = new CIMMessage(); $arMessage = $CIMMessage->GetUnreadMessage(Array( 'USE_TIME_ZONE' => 'N', 'ORDER' => 'ASC' )); if ($arMessage['result']) { CIMMessage::GetFlashMessage($arMessage['unreadMessage']); $arSend['MESSAGE'] = $arMessage['message']; $arSend['UNREAD_MESSAGE'] = CIMMessenger::CheckXmppStatusOnline()? array(): $arMessage['unreadMessage']; $arSend['USERS_MESSAGE'] = $arMessage['usersMessage']; $arSend['FILES'] = $arMessage['files']; $arSend['USERS'] = $arMessage['users']; $arSend['USER_IN_GROUP'] = $arMessage['userInGroup']; $arSend['WO_USER_IN_GROUP'] = $arMessage['woUserInGroup']; $arSend['ERROR'] = ''; } $CIMChat = new CIMChat(); $arMessage = $CIMChat->GetUnreadMessage(Array( 'USE_TIME_ZONE' => 'N', 'ORDER' => 'ASC' )); if ($arMessage['result']) { CIMMessage::GetFlashMessage($arMessage['unreadMessage']); foreach ($arMessage['message'] as $id => $ar) { $ar['recipientId'] = 'chat'.$ar['recipientId']; $arSend['MESSAGE'][$id] = $ar; } foreach ($arMessage['usersMessage'] as $chatId => $ar) $arSend['USERS_MESSAGE']['chat'.$chatId] = $ar; if (!CIMMessenger::CheckXmppStatusOnline()) { foreach ($arMessage['unreadMessage'] as $chatId => $ar) $arSend['UNREAD_MESSAGE']['chat'.$chatId] = $ar; } foreach ($arMessage['files'] as $key => $value) $arSend['FILES'][$key] = $value; foreach ($arMessage['users'] as $key => $value) $arSend['USERS'][$key] = $value; foreach ($arMessage['userInGroup'] as $key => $value) $arSend['USER_IN_GROUP'][$key] = $value; foreach ($arMessage['woUserInGroup'] as $key => $value) $arSend['WO_USER_IN_GROUP'][$key] = $value; $arSend['CHAT'] = $arMessage['chat']; $arSend['USER_BLOCK_CHAT'] = $arMessage['userChatBlockStatus']; $arSend['USER_IN_CHAT'] = $arMessage['userInChat']; $arSend['ERROR'] = ''; } // Notify $CIMNotify = new CIMNotify(); $arNotify = $CIMNotify->GetUnreadNotify(Array('USE_TIME_ZONE' => 'N')); if ($arNotify['result']) { $arSend['NOTIFY'] = $arNotify['notify']; $arSend['UNREAD_NOTIFY'] = $arNotify['unreadNotify']; $arSend['FLASH_NOTIFY'] = CIMNotify::GetFlashNotify($arNotify['unreadNotify']); $arSend['ERROR'] = ''; } $arSend['XMPP_STATUS'] = CIMMessenger::CheckXmppStatusOnline()? 'Y':'N'; $arSend['DESKTOP_STATUS'] = CIMMessenger::CheckDesktopStatusOnline()? 'Y':'N'; echo CUtil::PhpToJsObject($arSend); } else if ($_POST['IM_UPDATE_STATE_LIGHT'] == 'Y') { $errorMessage = ""; if ($_POST['ONLINE'] == 'Y') { CIMContactList::SetOnline(); } $arResult["REVISION"] = IM_REVISION; $arResult["MOBILE_REVISION"] = IM_MOBILE_REVISION; $arResult["DISK_REVISION"] = COption::GetOptionString("disk", "disk_revision_api", -1); $arResult['SERVER_TIME'] = time(); if (isset($_POST['NOTIFY'])) { $CIMNotify = new CIMNotify(); $arNotify = $CIMNotify->GetUnreadNotify(Array('SPEED_CHECK' => 'N', 'USE_TIME_ZONE' => 'N')); $arResult['COUNTER_NOTIFICATIONS'] = count($arNotify['notify']); $arResult['NOTIFY_LAST_ID'] = $arNotify['maxNotify']; } if (isset($_POST['MESSAGE'])) { $CIMMessage = new CIMMessage(); $arMessage = $CIMMessage->GetUnreadMessage(Array( 'SPEED_CHECK' => 'N', 'LOAD_DEPARTMENT' => 'N', 'ORDER' => 'ASC', 'FILE_LOAD' => 'N', 'GROUP_BY_CHAT' => 'Y', )); $arResult['COUNTER_MESSAGES'] = count($arMessage['message']); $arUnread = Array(); foreach ($arMessage['message'] as $data) { $arUnread[$data['senderId']]['MESSAGE'] = $data; $arUnread[$data['senderId']]['USER'] = $arMessage['users'][$data['senderId']]; } $CIMChat = new CIMChat(); $arMessage = $CIMChat->GetUnreadMessage(Array( 'SPEED_CHECK' => 'N', 'LOAD_DEPARTMENT' => 'N', 'ORDER' => 'ASC', 'GROUP_BY_CHAT' => 'Y', 'FILE_LOAD' => 'N', 'USER_LOAD' => 'N', )); $arResult['COUNTER_MESSAGES'] += count($arMessage['message']); foreach ($arMessage['message'] as $data) { $arUnread['chat'.$data['recipientId']]['MESSAGE'] = $data; $arUnread['chat'.$data['recipientId']]['CHAT'] = $arMessage['chat'][$data['recipientId']]; } uasort($arUnread, create_function('$a, $b', 'if($a["MESSAGE"]["date"] < $b["MESSAGE"]["date"] ) return 1; elseif($a["MESSAGE"]["date"] > $b["MESSAGE"]["date"] ) return -1; else return 0;')); $arResult['COUNTER_UNREAD_MESSAGES'] = $arUnread; } $arOnline = CIMStatus::GetList(); $arResult['ONLINE'] = !empty($arOnline)? $arOnline['users']: Array(); if (CModule::IncludeModule('pull')) { $arChannel = CPullChannel::Get($USER->GetId()); if (is_array($arChannel)) { $nginxStatus = CPullOptions::GetNginxStatus(); $webSocketStatus = CPullOptions::GetWebSocketStatus(); $arChannels = Array($arChannel['CHANNEL_ID']); if ($nginxStatus) { $arChannelShared = CPullChannel::GetShared(); $arChannels[] = $arChannelShared['CHANNEL_ID']; if ($arChannel['CHANNEL_DT'] > $arChannelShared['CHANNEL_DT']) $arChannel['CHANNEL_DT'] = $arChannelShared['CHANNEL_DT']; } if ($_POST['MOBILE'] == 'Y') $pullPath = ($nginxStatus? (CMain::IsHTTPS()? CPullOptions::GetListenSecureUrl($arChannels, true): CPullOptions::GetListenUrl($arChannels, true)): '/bitrix/components/bitrix/pull.request/ajax.php?UPDATE_STATE'); else $pullPath = ($nginxStatus? (CMain::IsHTTPS()? CPullOptions::GetListenSecureUrl($arChannels): CPullOptions::GetListenUrl($arChannels)): '/bitrix/components/bitrix/pull.request/ajax.php?UPDATE_STATE'); $arResult['PULL_CONFIG'] = Array( 'CHANNEL_ID' => implode('/', $arChannels), 'CHANNEL_DT' => $arChannel['CHANNEL_DT'], 'PATH' => $pullPath, 'PATH_WS' => ($nginxStatus && $webSocketStatus? (CMain::IsHTTPS()? CPullOptions::GetWebSocketSecureUrl($arChannels): CPullOptions::GetWebSocketUrl($arChannels)): ''), 'METHOD' => ($nginxStatus? 'LONG': 'PULL'), 'ERROR' => '', ); } } // Counters $arLastDate = array(); $arResult["COUNTERS"] = CUserCounter::GetValues($USER->GetID(), $_POST['SITE_ID'], $arLastDate); $arResult["COUNTERS_ZERO_DATE"] = (isset($arLastDate[$USER->GetID()]) && isset($arLastDate[$USER->GetID()][$_POST['SITE_ID']]) ? $arLastDate[$USER->GetID()][$_POST['SITE_ID']] : array()); $arResult["ERROR"] = $errorMessage; echo CUtil::PhpToJsObject($arResult); } else if ($_POST['IM_NOTIFY_LOAD'] == 'Y') { $CIMNotify = new CIMNotify(); $arNotify = $CIMNotify->GetUnreadNotify(Array('SPEED_CHECK' => 'N', 'USE_TIME_ZONE' => 'N')); if ($arNotify['result']) { $arSend['NOTIFY'] = $arNotify['notify']; $arSend['UNREAD_NOTIFY'] = $arNotify['unreadNotify']; $arSend['FLASH_NOTIFY'] = CIMNotify::GetFlashNotify($arNotify['unreadNotify']); $arSend['ERROR'] = ''; if ($arNotify['maxNotify'] > 0 && (!isset($_POST['IM_AUTO_READ']) || $_POST['IM_AUTO_READ'] == 'Y')) $CIMNotify->MarkNotifyRead($arNotify['maxNotify'], true); } echo CUtil::PhpToJsObject($arSend); } else if ($_POST['IM_NOTIFY_HISTORY_LOAD_MORE'] == 'Y') { $errorMessage = ""; $CIMNotify = new CIMNotify(); $arNotify = $CIMNotify->GetNotifyList(Array('PAGE' => $_POST['PAGE'], 'USE_TIME_ZONE' => 'N')); echo CUtil::PhpToJsObject(Array( 'NOTIFY' => $arNotify, 'ERROR' => $errorMessage )); } else if ($_POST['IM_SEND_MESSAGE'] == 'Y') { CUtil::decodeURIComponent($_POST); $tmpID = $_POST['ID']; $insertID = 0; $errorMessage = ""; if ($_POST['CHAT'] == 'Y' && substr($_POST['RECIPIENT_ID'], 0, 4) == 'chat') { $userId = $USER->GetId(); $chatId = intval(substr($_POST['RECIPIENT_ID'], 4)); if (CIMChat::GetGeneralChatId() == $chatId && !CIMChat::CanSendMessageToGeneralChat($userId)) { $errorMessage = GetMessage('IM_ERROR_GROUP_CANCELED'); } else { $ar = Array( "FROM_USER_ID" => $userId, "TO_CHAT_ID" => $chatId, "MESSAGE" => $_POST['MESSAGE'], ); $insertID = CIMChat::AddMessage($ar); } } else if (substr($_POST['RECIPIENT_ID'], 0, 4) != 'chat') { $ar = Array( "FROM_USER_ID" => intval($USER->GetID()), "TO_USER_ID" => intval($_POST['RECIPIENT_ID']), "MESSAGE" => $_POST['MESSAGE'], ); $insertID = CIMMessage::Add($ar); } else { $errorMessage = GetMessage('IM_ACCESS_ERROR'); } if (!$insertID && !$errorMessage) { if ($e = $GLOBALS["APPLICATION"]->GetException()) $errorMessage = $e->GetString(); if (StrLen($errorMessage) == 0) $errorMessage = GetMessage('IM_UNKNOWN_ERROR'); } $params = CIMMessageParam::Get(Array($insertID)); $arMessages = CIMMessageLink::prepareShow(Array(), $params); $CCTP = new CTextParser(); $CCTP->MaxStringLen = 200; $CCTP->allow = array("HTML" => "N", "ANCHOR" => (isset($_POST['MOBILE'])?"N": "Y"), "BIU" => "Y", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "Y", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N"); $userTzOffset = isset($_POST['USER_TZ_OFFSET'])? intval($_POST['USER_TZ_OFFSET']): CTimeZone::GetOffset(); $arResult = Array( 'TMP_ID' => $tmpID, 'ID' => $insertID, 'SEND_DATE' => time()+$userTzOffset, 'SEND_MESSAGE' => $CCTP->convertText(htmlspecialcharsbx($ar['MESSAGE'])), 'SEND_MESSAGE_PARAMS' => $arMessages[$insertID]['params'], 'SENDER_ID' => intval($USER->GetID()), 'RECIPIENT_ID' => $_POST['CHAT'] == 'Y'? htmlspecialcharsbx($_POST['RECIPIENT_ID']): intval($_POST['RECIPIENT_ID']), 'ERROR' => $errorMessage ); if (isset($_POST['MOBILE'])) { $arFormat = Array( "today" => "today, ".GetMessage('IM_MESSAGE_FORMAT_TIME'), "" => GetMessage('IM_MESSAGE_FORMAT_DATE') ); $arResult['SEND_DATE_FORMAT'] = FormatDate($arFormat, time()+$userTzOffset); } echo CUtil::PhpToJsObject($arResult); CIMContactList::SetOnline(); CIMMessenger::SetCurrentTab($_POST['TAB']); } else if ($_POST['IM_EDIT_MESSAGE'] == 'Y') { CUtil::decodeURIComponent($_POST); if(!CIMMessenger::Update($_POST['ID'], $_POST['MESSAGE'])) { $arResult = Array( 'ERROR' => 'CANT_EDIT_MESSAGE' ); } else { $CCTP = new CTextParser(); $CCTP->MaxStringLen = 200; $CCTP->allow = array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "Y", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N"); $userTzOffset = isset($_POST['USER_TZ_OFFSET'])? intval($_POST['USER_TZ_OFFSET']): CTimeZone::GetOffset(); $arResult = Array( 'ID' => $insertID, 'MESSAGE' => $CCTP->convertText(htmlspecialcharsbx($_POST['MESSAGE'])), 'DATE' => time()+$userTzOffset, 'ERROR' => '' ); } echo CUtil::PhpToJsObject($arResult); } else if ($_POST['IM_DELETE_MESSAGE'] == 'Y') { $errorMessage = ''; if(!CIMMessenger::Delete($_POST['ID'])) { $errorMessage = 'CANT_EDIT_MESSAGE'; } $arResult = Array( 'ERROR' => $errorMessage ); echo CUtil::PhpToJsObject($arResult); } else if ($_POST['IM_LIKE_MESSAGE'] == 'Y') { $errorMessage = ''; $result = CIMMessenger::Like($_POST['ID'], $_POST['ACTION']); if ($result === false) $errorMessage = 'WITHOUT_CHANGES'; $arResult = Array( 'LIKE' => $result, 'ERROR' => $errorMessage ); echo CUtil::PhpToJsObject($arResult); } else if ($_POST['IM_READ_MESSAGE'] == 'Y') { $errorMessage = ""; if (substr($_POST['USER_ID'], 0, 4) == 'chat') { $CIMChat = new CIMChat(); $CIMChat->SetReadMessage(intval(substr($_POST['USER_ID'],4)), (isset($_POST['LAST_ID']) && intval($_POST['LAST_ID'])>0 ? $_POST['LAST_ID']: null)); } else { $CIMMessage = new CIMMessage(); $CIMMessage->SetReadMessage($_POST['USER_ID'], (isset($_POST['LAST_ID']) && intval($_POST['LAST_ID'])>0 ? $_POST['LAST_ID']: null)); } CIMMessenger::SetCurrentTab($_POST['TAB']); CIMContactList::SetOnline(); echo CUtil::PhpToJsObject(Array( 'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']), 'ERROR' => $errorMessage )); } else if ($_POST['IM_LOAD_LAST_MESSAGE'] == 'Y') { $error = ''; $arMessage = Array(); if ($_POST['CHAT'] == 'Y') { $chatId = intval(substr($_POST['USER_ID'], 4)); $CIMChat = new CIMChat(); $arMessage = $CIMChat->GetLastMessage($chatId, false, ($_POST['USER_LOAD'] == 'Y'? true: false), false); if (!$arMessage || $_POST['USER_LOAD'] == 'Y' && empty($arMessage['chat']) || isset($arMessage['chat'][$chatId]) && !in_array($arMessage['chat'][$chatId]['messageType'], Array(IM_MESSAGE_OPEN, IM_MESSAGE_CHAT))) { $arMessage = Array(); $error = 'ACCESS_DENIED'; } else if (isset($arMessage['message'])) { foreach ($arMessage['message'] as $id => $ar) $arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId']; $arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId]; unset($arMessage['usersMessage'][$chatId]); if (isset($_POST['READ']) && $_POST['READ'] == 'Y') $CIMChat->SetReadMessage($chatId); } } else { $networkUserId = 0; if (substr($_POST['USER_ID'], 0, 7) == 'network') { $userId = \CIMContactList::PrepareUserId($_POST['USER_ID'], $_POST['SEARCH_MARK']); if ($userId > 0) { $networkUserId = $_POST['USER_ID']; $_POST['USER_ID'] = $userId; } } $chatId = 0; if (CIMContactList::AllowToSend(Array('TO_USER_ID' => $_POST['USER_ID']))) { $CIMMessage = new CIMMessage(); $arMessage = $CIMMessage->GetLastMessage(intval($_POST['USER_ID']), false, ($_POST['USER_LOAD'] == 'Y'? true: false), false); if (isset($_POST['READ']) && $_POST['READ'] == 'Y') $CIMMessage->SetReadMessage(intval($_POST['USER_ID'])); if ($_POST['USER_LOAD'] == 'Y' && count($arMessage['users']) <= 1) { $arMessage = Array(); $error = 'ACCESS_DENIED'; } else { $chatId = $arMessage['chatId']; if ($chatId <= 0) { $chatId = CIMMessage::GetChatId($USER->GetId(), $_POST['USER_ID']); } } } else { $arMessage = Array(); $error = 'ACCESS_DENIED'; } } if ($error == '') CIMMessenger::SetCurrentTab($_POST['TAB']); echo CUtil::PhpToJsObject(Array( 'REVISION' => IM_REVISION, 'MOBILE_REVISION' => IM_MOBILE_REVISION, 'CHAT_ID' => $chatId, 'USER_ID' => $_POST['CHAT'] == 'Y'? htmlspecialcharsbx($_POST['USER_ID']): intval($_POST['USER_ID']), 'MESSAGE' => isset($arMessage['message'])? $arMessage['message']: Array(), 'USERS_MESSAGE' => isset($arMessage['usersMessage'])? $arMessage['usersMessage']: Array(), 'USERS' => isset($arMessage['users'])? $arMessage['users']: Array(), 'USER_IN_GROUP' => isset($arMessage['userInGroup'])? $arMessage['userInGroup']: Array(), 'WO_USER_IN_GROUP' => isset($arMessage['woUserInGroup'])? $arMessage['woUserInGroup']: Array(), 'CHAT' => isset($arMessage['chat'])? $arMessage['chat']: Array(), 'USER_BLOCK_CHAT' => isset($arMessage['userChatBlockStatus'])? $arMessage['userChatBlockStatus']: Array(), 'USER_IN_CHAT' => isset($arMessage['userInChat'])? $arMessage['userInChat']: Array(), 'USER_LOAD' => $_POST['USER_LOAD'] == 'Y'? 'Y': 'N', 'READED_LIST' => isset($arMessage['readedList'])? $arMessage['readedList']: Array(), 'PHONES' => isset($arMessage['phones'])? $arMessage['phones']: Array(), 'FILES' => isset($arMessage['files'])? $arMessage['files']: Array(), 'NETWORK_ID' => $networkUserId? $networkUserId: '', 'ERROR' => $error )); } else if ($_POST['IM_USER_DATA_LOAD'] == 'Y') { $error = ''; $arMessage = Array(); $chatId = 0; if (CIMContactList::AllowToSend(Array('TO_USER_ID' => $_POST['USER_ID']))) { $ar = CIMContactList::GetUserData(array( 'ID' => Array($_POST['USER_ID'], $USER->GetID()), 'DEPARTMENT' => 'Y', 'USE_CACHE' => 'N', 'PHONES' => IsModuleInstalled('voximplant')? 'Y': 'N' ) ); $arMessage['users'] = $ar['users']; $arMessage['userInGroup'] = $ar['userInGroup']; $arMessage['woUserInGroup'] = $ar['woUserInGroup']; $arMessage['phones'] = $ar['phones']; $chatId = CIMMessage::GetChatId($USER->GetId(), $_POST['USER_ID']); } else { $error = 'ACCESS_DENIED'; } if ($error == '') CIMMessenger::SetCurrentTab($_POST['TAB']); echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $chatId, 'USER_ID' => intval($_POST['USER_ID']), 'USERS' => isset($arMessage['users'])? $arMessage['users']: Array(), 'USER_IN_GROUP' => isset($arMessage['userInGroup'])? $arMessage['userInGroup']: Array(), 'WO_USER_IN_GROUP' => isset($arMessage['woUserInGroup'])? $arMessage['woUserInGroup']: Array(), 'PHONES' => isset($arMessage['phones'])? $arMessage['phones']: Array(), 'ERROR' => $error )); } else if ($_POST['IM_HISTORY_LOAD'] == 'Y') { $arMessage = Array(); $chatId = 0; if (substr($_POST['USER_ID'], 0, 4) == 'chat') { $chatId = intval(substr($_POST['USER_ID'], 4)); $CIMChat = new CIMChat(); $arMessage = $CIMChat->GetLastMessage($chatId, false, ($_POST['USER_LOAD'] == 'Y'? true: false), false, false); if ($arMessage && isset($arMessage['message'])) { foreach ($arMessage['message'] as $id => $ar) $arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId']; $arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId]; unset($arMessage['usersMessage'][$chatId]); } $dialogId = 'chat'.$chatId; } else { $dialogId = intval($_POST['USER_ID']); if (CIMContactList::AllowToSend(Array('TO_USER_ID' => $dialogId))) { $CIMMessage = new CIMMessage(); $arMessage = $CIMMessage->GetLastMessage($dialogId, false, ($_POST['USER_LOAD'] == 'Y'? true: false), false, false); $chatId = $arMessage['chatId']; if ($chatId <= 0) { $chatId = CIMMessage::GetChatId($USER->GetId(), $dialogId); } } } echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $chatId, 'USER_ID' => $dialogId, 'MESSAGE' => isset($arMessage['message'])? $arMessage['message']: Array(), 'USERS_MESSAGE' => isset($arMessage['message'])? $arMessage['usersMessage']: Array(), 'USERS' => isset($arMessage['users'])? $arMessage['users']: Array(), 'USER_IN_GROUP' => isset($arMessage['userInGroup'])? $arMessage['userInGroup']: Array(), 'WO_USER_IN_GROUP' => isset($arMessage['woUserInGroup'])? $arMessage['woUserInGroup']: Array(), 'CHAT' => isset($arMessage['chat'])? $arMessage['chat']: Array(), 'USER_BLOCK_CHAT' => isset($arMessage['userChatBlockStatus'])? $arMessage['userChatBlockStatus']: Array(), 'USER_IN_CHAT' => isset($arMessage['userInChat'])? $arMessage['userInChat']: Array(), 'FILES' => isset($arMessage['files'])? $arMessage['files']: Array(), 'ERROR' => '' )); } else if ($_POST['IM_HISTORY_LOAD_MORE'] == 'Y') { $arMessage = Array(); if (substr($_POST['USER_ID'], 0, 4) == 'chat') { $allowToSend = Array('TO_CHAT_ID' => substr($_POST['USER_ID'], 4)); } else { $allowToSend = Array('TO_USER_ID' => $_POST['USER_ID']); } if (CIMContactList::AllowToSend($allowToSend)) { $CIMHistory = new CIMHistory(false, Array()); if (substr($_POST['USER_ID'], 0, 4) == 'chat') { $chatId = substr($_POST['USER_ID'],4); $arMessage = $CIMHistory->GetMoreChatMessage(intval($_POST['PAGE_ID']), $chatId, false); if (!empty($arMessage['message'])) { foreach ($arMessage['message'] as $id => $ar) $arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId']; $arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId]; unset($arMessage['usersMessage'][$chatId]); } } else { $arMessage = $CIMHistory->GetMoreMessage(intval($_POST['PAGE_ID']), intval($_POST['USER_ID']), false, false); } } echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => isset($arMessage['chatId'])? $arMessage['chatId']: 0, 'MESSAGE' => isset($arMessage['message'])? $arMessage['message']: Array(), 'USERS_MESSAGE' => isset($arMessage['usersMessage'])? $arMessage['usersMessage']: Array(), 'FILES' => isset($arMessage['files'])? $arMessage['files']: Array(), 'ERROR' => '' )); } else if ($_POST['IM_HISTORY_REMOVE_ALL'] == 'Y') { $errorMessage = ""; $CIMHistory = new CIMHistory(); if (substr($_POST['USER_ID'], 0, 4) == 'chat') $CIMHistory->HideAllChatMessage(substr($_POST['USER_ID'],4)); else $CIMHistory->RemoveAllMessage($_POST['USER_ID']); echo CUtil::PhpToJsObject(Array( 'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']), 'ERROR' => $errorMessage )); } else if ($_POST['IM_HISTORY_REMOVE_MESSAGE'] == 'Y') { $errorMessage = ""; $CIMHistory = new CIMHistory(); $CIMHistory->RemoveMessage($_POST['MESSAGE_ID']); echo CUtil::PhpToJsObject(Array( 'MESSAGE_ID' => intval($_POST['MESSAGE_ID']), 'ERROR' => $errorMessage )); } else if ($_POST['IM_HISTORY_SEARCH'] == 'Y') { CUtil::decodeURIComponent($_POST); $CIMHistory = new CIMHistory(); if (substr($_POST['USER_ID'], 0, 4) == 'chat') { $chatId = substr($_POST['USER_ID'],4); $arMessage = $CIMHistory->SearchChatMessage($_POST['SEARCH'], $chatId, false); if (!empty($arMessage['message'])) { foreach ($arMessage['message'] as $id => $ar) $arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId']; $arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId]; unset($arMessage['usersMessage'][$chatId]); } } else { $arMessage = $CIMHistory->SearchMessage($_POST['SEARCH'], intval($_POST['USER_ID']), false, false); } echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $arMessage['chatId'], 'MESSAGE' => $arMessage['message'], 'FILES' => $arMessage['files'], 'USERS_MESSAGE' => $arMessage['usersMessage'], 'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']), 'ERROR' => '' )); } else if ($_POST['IM_HISTORY_DATE_SEARCH'] == 'Y') { $CIMHistory = new CIMHistory(); if (substr($_POST['USER_ID'], 0, 4) == 'chat') { $chatId = substr($_POST['USER_ID'],4); $arMessage = $CIMHistory->SearchDateChatMessage($_POST['DATE'], $chatId, false); if (!empty($arMessage['message'])) { foreach ($arMessage['message'] as $id => $ar) $arMessage['message'][$id]['recipientId'] = 'chat'.$ar['recipientId']; $arMessage['usersMessage']['chat'.$chatId] = $arMessage['usersMessage'][$chatId]; unset($arMessage['usersMessage'][$chatId]); } } else { $arMessage = $CIMHistory->SearchDateMessage($_POST['DATE'], intval($_POST['USER_ID']), false, false); } echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $arMessage['chatId'], 'MESSAGE' => $arMessage['message'], 'FILES' => $arMessage['files'], 'USERS_MESSAGE' => $arMessage['usersMessage'], 'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']), 'ERROR' => '' )); } else if ($_POST['IM_CONTACT_LIST_SEARCH'] == 'Y') { $enabled = false; if (!IsModuleInstalled('intranet') && !IsModuleInstalled('b24network')) { $enabled = true; } else if (!Bitrix\Im\User::getInstance()->isExtranet() && CModule::IncludeModule('socialservices')) { $network = new \Bitrix\Socialservices\Network(); $enabled = $network->isEnabled(); if ($enabled) { $query = CBitrix24NetTransport::init(); if(!$query) { $enabled = false; } } } if ($enabled) { CUtil::decodeURIComponent($_POST); $CIMContactList = new CIMContactList(); $arContactList = $CIMContactList->SearchUsers($_POST['SEARCH']); echo CUtil::PhpToJsObject(Array( 'USERS' => $arContactList['users'], 'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']), 'ERROR' => '' )); } else { echo CUtil::PhpToJsObject(Array('ERROR' => 'DISABLED_FUNCTION')); } } else if ($_POST['IM_CONTACT_LIST'] == 'Y') { if (isset($_POST['DESKTOP']) && $_POST['DESKTOP'] == 'Y') CIMMessenger::SetDesktopStatusOnline(); $CIMContactList = new CIMContactList(); $arContactList = $CIMContactList->GetList(); echo CUtil::PhpToJsObject(Array( 'USER_ID' => $USER->GetId(), 'USERS' => $arContactList['users'], 'GROUPS' => $arContactList['groups'], 'CHATS' => $arContactList['chats'], 'USER_IN_GROUP' => $arContactList['userInGroup'], 'WO_GROUPS' => $arContactList['woGroups'], 'WO_USER_IN_GROUP' => $arContactList['woUserInGroup'], 'ERROR' => '' )); } else if ($_POST['IM_RECENT_LIST'] == 'Y') { $ar = CIMContactList::GetRecentList(Array( 'USE_TIME_ZONE' => 'N', 'USE_SMILES' => 'N' )); $arRecent = Array(); $arUsers = Array(); $arChat = Array(); foreach ($ar as $userId => $value) { if ($value['TYPE'] == IM_MESSAGE_CHAT || $value['TYPE'] == IM_MESSAGE_OPEN) { $arChat[$value['CHAT']['id']] = $value['CHAT']; $value['MESSAGE']['userId'] = $userId; $value['MESSAGE']['recipientId'] = $userId; } else { $value['MESSAGE']['userId'] = $userId; $value['MESSAGE']['recipientId'] = $userId; $arUsers[$value['USER']['id']] = $value['USER']; } $arRecent[] = $value['MESSAGE']; } $arSmile = CIMMessenger::PrepareSmiles(); $arResult['SMILE'] = $arSmile['SMILE']; $arResult['SMILE_SET'] = $arSmile['SMILE_SET']; $arResult['NOTIFY_BLOCKED'] = CIMSettings::GetSimpleNotifyBlocked(); echo CUtil::PhpToJsObject(Array( 'USER_ID' => $USER->GetId(), 'RECENT' => $arRecent, 'USERS' => $arUsers, 'CHAT' => $arChat, 'NOTIFY_BLOCKED' => $arResult['NOTIFY_BLOCKED'], 'SMILE' => !empty($arSmile['SMILE'])? $arSmile['SMILE']: false, 'SMILE_SET' => !empty($arSmile['SMILE_SET'])? $arSmile['SMILE_SET']: false, 'ERROR' => '' )); } else if ($_POST['IM_NOTIFY_VIEWED'] == 'Y') { $errorMessage = ""; $CIMNotify = new CIMNotify(); $CIMNotify->MarkNotifyRead($_POST['MAX_ID'], true); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_NOTIFY_VIEW'] == 'Y') { $errorMessage = ""; $CIMNotify = new CIMNotify(); $CIMNotify->MarkNotifyRead($_POST['ID']); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_NOTIFY_CONFIRM'] == 'Y') { $errorMessage = ""; $CIMNotify = new CIMNotify(); $result = $CIMNotify->Confirm($_POST['NOTIFY_ID'], $_POST['NOTIFY_VALUE']); echo CUtil::PhpToJsObject(Array( 'NOTIFY_ID' => intval($_POST['NOTIFY_ID']), 'NOTIFY_VALUE' => $_POST['NOTIFY_VALUE'], 'MESSAGES' => $result, 'ERROR' => $errorMessage )); } else if ($_POST['IM_NOTIFY_ANSWER'] == 'Y') { CUtil::decodeURIComponent($_POST); $errorMessage = ""; $CIMNotify = new CIMNotify(); $result = $CIMNotify->Answer($_POST['NOTIFY_ID'], $_POST['NOTIFY_ANSWER']); echo CUtil::PhpToJsObject(Array( 'MESSAGES' => $result, 'ERROR' => $errorMessage )); } else if ($_POST['IM_NOTIFY_BLOCK_TYPE'] == 'Y') { $errorMessage = ""; $arSettings = Array( 'site|'.$_POST['BLOCK_TYPE'] => $_POST['BLOCK_RESULT'] == 'Y'? false: true, 'xmpp|'.$_POST['BLOCK_TYPE'] => $_POST['BLOCK_RESULT'] == 'Y'? false: true, 'email|'.$_POST['BLOCK_TYPE'] => $_POST['BLOCK_RESULT'] == 'Y'? false: true, ); CIMSettings::SetSetting(CIMSettings::NOTIFY, $arSettings); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_NOTIFY_REMOVE'] == 'Y') { $errorMessage = ""; $CIMNotify = new CIMNotify(); $CIMNotify->DeleteWithCheck($_POST['NOTIFY_ID']); echo CUtil::PhpToJsObject(Array( 'NOTIFY_ID' => intval($_POST['NOTIFY_ID']), 'ERROR' => $errorMessage )); } else if ($_POST['IM_NOTIFY_GROUP_REMOVE'] == 'Y') { $errorMessage = ""; $CIMNotify = new CIMNotify(); if ($arNotify = $CIMNotify->GetNotify($_POST['NOTIFY_ID'])) CIMNotify::DeleteByTag($arNotify['NOTIFY_TAG']); echo CUtil::PhpToJsObject(Array( 'NOTIFY_ID' => intval($_POST['NOTIFY_ID']), 'ERROR' => $errorMessage )); } else if ($_POST['IM_RECENT_HIDE'] == 'Y') { if (substr($_POST['USER_ID'], 0, 4) == 'chat') { $userId = $USER->GetId(); $chatId = substr($_POST['USER_ID'], 4); $relation = CIMChat::GetRelationById($chatId); if (!isset($relation[$userId]) && CModule::IncludeModule('pull')) { CPullWatch::Delete($userId, 'IM_PUBLIC_'.$chatId); } CIMContactList::DeleteRecent($chatId, true); } else { CIMContactList::DeleteRecent($_POST['USER_ID']); } echo CUtil::PhpToJsObject(Array( 'USER_ID' => htmlspecialcharsbx($_POST['USER_ID']), 'ERROR' => '' )); } else if ($_POST['IM_CHAT_ADD'] == 'Y') { $_POST['USERS'] = CUtil::JsObjectToPhp($_POST['USERS']); $errorMessage = ""; $chatId = 0; if ($_POST['TYPE'] != 'open' && !is_array($_POST['USERS'])) { $errorMessage = GetMessage('IM_UNKNOWN_ERROR'); } else { CUtil::decodeURIComponent($_POST); $CIMChat = new CIMChat(); $chatId = $CIMChat->Add(Array( 'TYPE' => $_POST['TYPE'] == 'open'? IM_MESSAGE_OPEN: IM_MESSAGE_CHAT, 'USERS' => $_POST['USERS'], 'TITLE' => $_POST['TITLE'], 'MESSAGE' => $_POST['MESSAGE'], 'SEARCH_MARK' => $_POST['SEARCH_MARK'] )); if (!$chatId) { if ($e = $GLOBALS["APPLICATION"]->GetException()) $errorMessage = $e->GetString(); } } echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => intval($chatId), 'ERROR' => $errorMessage )); } else if ($_POST['IM_CHAT_EXTEND'] == 'Y') { $_POST['USERS'] = CUtil::JsObjectToPhp($_POST['USERS']); $errorMessage = ""; $userId = $USER->GetId(); if (CIMChat::GetGeneralChatId() == intval($_POST['CHAT_ID'])) { $errorMessage = GetMessage('IM_ACCESS_ERROR'); } else { $CIMChat = new CIMChat(); $result = $CIMChat->AddUser($_POST['CHAT_ID'], $_POST['USERS'], Array('SEARCH_MARK' => $_POST['SEARCH_MARK'])); if (!$result) { if ($e = $GLOBALS["APPLICATION"]->GetException()) $errorMessage = $e->GetString(); } } echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_CHAT_JOIN'] == 'Y') { $CIMChat = new CIMChat(); $result = $CIMChat->Join($_POST['CHAT_ID']); } else if ($_POST['IM_CHAT_LEAVE'] == 'Y') { $userId = $USER->GetId(); if (CIMChat::GetGeneralChatId() == intval($_POST['CHAT_ID'])) { $result = false; } else { $CIMChat = new CIMChat(); $result = $CIMChat->DeleteUser($_POST['CHAT_ID'], intval($_POST['USER_ID']) > 0? intval($_POST['USER_ID']): $USER->GetID()); } echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => intval($_POST['CHAT_ID']), 'USER_ID' => intval($_POST['USER_ID']), 'ERROR' => $result? '': 'ACCESS_ERROR' )); } else if ($_POST['IM_CHAT_MUTE'] == 'Y') { $CIMChat = new CIMChat(); $result = $CIMChat->MuteNotify($_POST['CHAT_ID'], $_POST['MUTE'] == 'Y'); echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => intval($_POST['CHAT_ID']), 'ERROR' => $result? '': 'ACCESS_ERROR' )); } else if ($_POST['IM_CHAT_RENAME'] == 'Y') { $userId = $USER->GetId(); if (CIMChat::GetGeneralChatId() != intval($_POST['CHAT_ID'])) { CUtil::decodeURIComponent($_POST); $CIMChat = new CIMChat(); $CIMChat->Rename($_POST['CHAT_ID'], $_POST['CHAT_TITLE']); } echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => intval($_POST['CHAT_ID']), 'CHAT_TITLE' => $_POST['CHAT_TITLE'], 'ERROR' => '' )); } else if ($_POST['IM_CHAT_DATA_LOAD'] == 'Y') { CUtil::decodeURIComponent($_POST); $chatId = $_POST['CHAT_ID']; $arChat = CIMChat::GetChatData(array( 'ID' => $chatId, 'USE_CACHE' => 'Y', 'USER_ID' => $USER->GetId() )); $arUser = CIMContactList::GetUserData(Array( 'ID' => $arChat['userInChat'][$chatId] )); if (!in_array($USER->GetId(), $arChat['userInChat'][$chatId])) { if ($arChat['chat'][$chatId]['messageType'] == IM_MESSAGE_OPEN && CModule::IncludeModule("pull")) { CPullWatch::Add($USER->GetId(), 'IM_PUBLIC_'.$chatId, true); } } echo CUtil::PhpToJsObject(Array( 'CHAT' => $arChat['chat'], 'CHAT_ID' => $_POST['CHAT_ID'], 'USER_IN_CHAT' => $arChat['userInChat'], 'USER_BLOCK_CHAT' => $arChat['userChatBlockStatus'], 'USERS' => isset($arUser['users'])? $arUser['users']: Array(), 'USER_IN_GROUP' => isset($arUser['userInGroup'])? $arUser['userInGroup']: Array(), 'WO_USER_IN_GROUP' => isset($arUser['woUserInGroup'])? $arUser['woUserInGroup']: Array(), 'ERROR' => '' )); } else if ($_POST['IM_GET_EXTERNAL_DATA'] == 'Y') { $error = ''; $arResult = Array( 'TS' => $_POST['TS'], 'TYPE' => $_POST['TYPE'], 'ERROR' => '' ); $arMessage = Array(); if ($_POST['TYPE'] == 'user') { $arResult['USER_ID'] = intval($_POST['USER_ID']); if (CIMContactList::AllowToSend(Array('TO_USER_ID' => $_POST['USER_ID']))) { $ar = CIMContactList::GetUserData(array( 'ID' => Array($_POST['USER_ID']), 'DEPARTMENT' => 'Y', 'USE_CACHE' => 'N', 'PHONES' => IsModuleInstalled('voximplant')? 'Y': 'N' )); $arResult['USERS'] = isset($ar['users'])? $ar['users']: Array(); $arResult['USER_IN_GROUP'] = isset($ar['userInGroup'])? $ar['userInGroup']: Array(); $arResult['WO_USER_IN_GROUP'] = isset($ar['woUserInGroup'])? $ar['woUserInGroup']: Array(); $arResult['PHONES'] = isset($ar['phones'])? $ar['phones']: Array(); } else { $arResult['ERROR'] = 'ACCESS_DENIED'; } } else if ($_POST['TYPE'] == 'chat') { $chatId = intval($_POST['CHAT_ID']); $arChat = CIMChat::GetChatData(array( 'ID' => $chatId, 'USE_CACHE' => 'Y', 'USER_ID' => $USER->GetId() )); if ($arChat['chat'][$chatId]) { $arResult['CHAT_ID'] = $chatId; $arResult['CHAT'] = $arChat['chat']; $arResult['USER_IN_CHAT'] = $arChat['userInChat']; $arResult['USER_BLOCK_CHAT'] = $arChat['userChatBlockStatus']; } else { $arResult['ERROR'] = 'ACCESS_DENIED'; } } else if ($_POST['TYPE'] == 'phoneCallHistory') { if (CModule::IncludeModule('voximplant')) { $arResult['HISTORY_ID'] = intval($_POST['HISTORY_ID']); $history = CVoxImplantHistory::GetForPopup($arResult['HISTORY_ID']); if ($history && $history['PORTAL_USER_ID'] == $USER->GetId()) { if (strlen($history['CALL_RECORD_HREF']) > 0) { ob_start(); $APPLICATION->IncludeComponent( "bitrix:player", "", Array( "PLAYER_TYPE" => "flv", "CHECK_FILE" => "N", "USE_PLAYLIST" => "N", "PATH" => $history["CALL_RECORD_HREF"], "WIDTH" => 233, "HEIGHT" => 24, "PREVIEW" => false, "LOGO" => false, "FULLSCREEN" => "N", "SKIN_PATH" => "/bitrix/components/bitrix/player/mediaplayer/skins", "SKIN" => "", "CONTROLBAR" => "bottom", "WMODE" => "transparent", "WMODE_WMV" => "windowless", "HIDE_MENU" => "N", "SHOW_CONTROLS" => "N", "SHOW_STOP" => "Y", "SHOW_DIGITS" => "Y", "CONTROLS_BGCOLOR" => "FFFFFF", "CONTROLS_COLOR" => "000000", "CONTROLS_OVER_COLOR" => "000000", "SCREEN_COLOR" => "000000", //"FILE_DURATION" => "30", "AUTOSTART" => "N", "REPEAT" => "N", "VOLUME" => "90", "DISPLAY_CLICK" => "play", "MUTE" => "N", "HIGH_QUALITY" => "N", "ADVANCED_MODE_SETTINGS" => "Y", "BUFFER_LENGTH" => "10", "DOWNLOAD_LINK" => false, "DOWNLOAD_LINK_TARGET" => "_self", "ALLOW_SWF" => "N", "ADDITIONAL_PARAMS" => array( 'LOGO' => false, 'NUM' => false, 'HEIGHT_CORRECT' => false, ), "PLAYER_ID" => "bitrix_vi_record_".$arResult['HISTORY_ID'] ), false, Array("HIDE_ICONS" => "Y") ); $history['CALL_RECORD_HTML'] = ob_get_contents(); ob_end_clean(); unset($history['CALL_RECORD_HREF']); } foreach ($history as $key => $value) { $arResult[$key] = $value; } } else { $arResult['ERROR'] = 'ACCESS_DENIED'; } } else { $arResult['ERROR'] = 'ACCESS_DENIED'; } } echo CUtil::PhpToJsObject($arResult); } else if ($_POST['IM_CALL'] == 'Y') { $chatId = intval($_POST['CHAT_ID']); $userId = intval($USER->GetId()); $errorMessage = ""; if ($_POST['COMMAND'] == 'invite') { if ($_POST['CHAT'] != 'Y') $chatId = CIMMessage::GetChatId($userId, intval($_POST['CHAT_ID'])); $arCallData = CIMCall::Invite(Array( 'CHAT_ID' => $chatId, 'USER_ID' => $userId, 'RECIPIENT_ID' => $_POST['CHAT'] != 'Y'? intval($_POST['CHAT_ID']): 0, 'VIDEO' => $_POST['VIDEO'], 'MOBILE' => $_POST['MOBILE'], )); if (!$arCallData) { if ($e = $GLOBALS["APPLICATION"]->GetException()) $errorMessage = $e->GetString(); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else { echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $arCallData['CHAT_ID'], 'USERS' => $arCallData['USER_DATA']['USERS'], 'USERS_CONNECT' => isset($arCallData['USERS_CONNECT'])? $arCallData['USERS_CONNECT']: array(), 'HR_PHOTO' => $arCallData['USER_DATA']['HR_PHOTO'], 'CALL_VIDEO' => $arCallData['STATUS_TYPE'] == IM_CALL_VIDEO, 'CALL_TO_GROUP' => $arCallData['CALL_TO_GROUP'], 'CALL_ENABLED' => $arCallData['STATUS_TYPE'] != IM_CALL_NONE, 'ERROR' => $errorMessage )); } } else if ($_POST['COMMAND'] == 'wait') { CIMCall::Wait(Array( 'CHAT_ID' => $chatId, 'USER_ID' => $userId, )); } else if ($_POST['COMMAND'] == 'reconnect') { CIMCall::Command($chatId, $_POST['RECIPIENT_ID'], 'reconnect', Array()); } else if ($_POST['COMMAND'] == 'answer') { CIMCall::Answer(Array( 'CHAT_ID' => $chatId, 'USER_ID' => $userId, 'CALL_TO_GROUP' => $_POST['CALL_TO_GROUP'] == 'Y', 'MOBILE' => $_POST['MOBILE'], )); } else if ($_POST['COMMAND'] == 'start') { CIMCall::Start(Array( 'CHAT_ID' => $chatId, 'USER_ID' => $userId, 'RECIPIENT_ID' => intval($_POST['RECIPIENT_ID']), 'CALL_TO_GROUP' => $_POST['CALL_TO_GROUP'] == 'Y', )); } else if (in_array($_POST['COMMAND'], Array(IM_CALL_END_DECLINE, IM_CALL_END_TIMEOUT, IM_CALL_END_BUSY, IM_CALL_END_OFFLINE, IM_CALL_END_ACCESS))) { $arParams = Array( 'CHAT_ID' => $chatId, 'USER_ID' => $userId, 'RECIPIENT_ID' => intval($_POST['RECIPIENT_ID']), 'REASON' => $_POST['COMMAND'], ); $_POST['PARAMS'] = CUtil::JsObjectToPhp($_POST['PARAMS']); if (isset($_POST['VIDEO'])) $arParams['VIDEO'] = $_POST['VIDEO']; if (isset($_POST['PARAMS']['ACTIVE'])) $arParams['ACTIVE'] = $_POST['PARAMS']['ACTIVE']; if (isset($_POST['PARAMS']['INITIATOR'])) $arParams['INITIATOR'] = $_POST['PARAMS']['INITIATOR']; CIMCall::End($arParams); } else if ($_POST['COMMAND'] == 'signaling') { CIMCall::Command($chatId, $_POST['RECIPIENT_ID'], 'signaling', Array('peer' => $_POST['PEER'])); } else if ($_POST['COMMAND'] == 'invite_user') { $arCallData = CIMCall::AddUser(Array( 'CHAT_ID' => $chatId, 'USER_ID' => $userId, 'USERS' => CUtil::JsObjectToPhp($_POST['USERS']), )); if ($e = $GLOBALS["APPLICATION"]->GetException()) $errorMessage = $e->GetString(); if (strlen($errorMessage) <= 0) { echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $arCallData['CHAT_ID'], 'USERS' => $arCallData['USER_DATA']['USERS'], 'HR_PHOTO' => $arCallData['USER_DATA']['HR_PHOTO'], 'ERROR' => $errorMessage )); } else { echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $arCallData['CHAT_ID'], 'ERROR' => $e->GetString() )); } } else { CIMCall::Signaling(Array( 'CHAT_ID' => $chatId, 'USER_ID' => $userId, 'COMMAND' => $_POST['COMMAND'], )); } if ($_POST['COMMAND'] != 'invite' && $_POST['COMMAND'] != 'invite_user') { echo CUtil::PhpToJsObject(Array( 'CHAT_ID' => $chatId, 'ERROR' => $errorMessage )); } } else if ($_POST['IM_SHARING'] == 'Y' && intval($_POST['USER_ID']) > 0) { if (!CModule::IncludeModule("pull")) return false; if ($_POST['COMMAND'] == 'signaling') { CPullStack::AddByUser(intval($_POST['USER_ID']), Array( 'module_id' => 'im', 'command' => 'screenSharing', 'params' => Array( 'senderId' => $USER->GetID(), 'command' => 'signaling', 'peer' => $_POST['PEER'], ), )); } else { CPullStack::AddByUser(intval($_POST['USER_ID']), Array( 'module_id' => 'im', 'command' => 'screenSharing', 'params' => Array( 'senderId' => $USER->GetID(), 'command' => $_POST['COMMAND'] ), )); } } else if ($_POST['IM_PHONE'] == 'Y' && CModule::IncludeModule('voximplant')) { require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/voximplant/ajax_hit.php"); } else if ($_POST['IM_IDLE'] == 'Y') { $errorMessage = ""; CIMStatus::SetIdle($USER->GetId(), $_POST['IDLE'] == 'Y', $_POST['MANUAL'] == 'Y'? 1: 10); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_START_WRITING'] == 'Y') { $errorMessage = ""; CIMMessenger::StartWriting($_POST['DIALOG_ID']); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_DESKTOP_LOGOUT'] == 'Y') { $errorMessage = ""; CIMMessenger::SetDesktopStatusOffline(); CIMContactList::SetOffline(); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_SET_COLOR'] == 'Y') { $errorMessage = ""; $_POST['CHAT_ID'] = intval($_POST['CHAT_ID']); if ($_POST['CHAT_ID'] > 0) { $userId = $USER->GetId(); if (CIMChat::GetGeneralChatId() == intval($_POST['CHAT_ID']) && !CIMChat::CanSendMessageToGeneralChat($userId)) { $errorMessage = GetMessage('IM_ACCESS_ERROR'); } else { $chat = new CIMChat(); $chat->SetColor($_POST['CHAT_ID'], $_POST['COLOR']); } } else { CIMStatus::SetColor($USER->GetId(), $_POST['COLOR']); } echo CUtil::PhpToJsObject(Array( 'COLOR' => $_POST['COLOR'], 'CHAT_ID' => $_POST['CHAT_ID'], 'ERROR' => $errorMessage )); } else if ($_POST['IM_GET_MOBILE_CHAT_AVATAR'] == 'Y') { $avatar = ""; $errorMessage = ""; if ($_POST['CHAT_ID'] > 0) { $chat = new CIMChat(); $arChat = CIMChat::GetChatData(array( 'ID' => $_POST['CHAT_ID'], 'USE_CACHE' => 'N', 'PHOTO_SIZE' => '500', 'USER_ID' => intval($USER->GetId()) )); $arResult['CHAT'] = $arChat['chat'][$_POST['CHAT_ID']]; if ($arResult['CHAT']) { $avatar = $arResult['CHAT']['avatar'] == '/bitrix/js/im/images/blank.gif'? '': $arResult['CHAT']['avatar']; } } echo CUtil::PhpToJsObject(Array( 'AVATAR' => $avatar, 'ERROR' => $errorMessage )); } else if ($_POST['IM_SETTING_SAVE'] == 'Y') { $errorMessage = ""; $arSettings = CUtil::JsObjectToPhp($_POST['SETTINGS']); CIMSettings::SetSetting(CIMSettings::SETTINGS, $arSettings); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_SETTINGS_SAVE'] == 'Y') { $errorMessage = ""; $arSettings = CUtil::JsObjectToPhp($_POST['SETTINGS']); $arOldSettings = CUserOptions::GetOption('IM', CIMSettings::SETTINGS, Array()); if ($arOldSettings['notifyScheme'] == 'expert' && $arSettings['notifyScheme'] == 'simple') { $arNotifyValues = CIMSettings::GetSimpleNotifyBlocked(); $arSettings['notify'] = Array(); foreach ($arNotifyValues as $settingName => $value) { $arSettings['notify'][CIMSettings::CLIENT_SITE.'|'.$settingName] = false; $arSettings['notify'][CIMSettings::CLIENT_XMPP.'|'.$settingName] = false; $arSettings['notify'][CIMSettings::CLIENT_MAIL.'|'.$settingName] = false; } } if (array_key_exists('notify', $arSettings)) { CIMSettings::Set(CIMSettings::NOTIFY, $arSettings['notify']); unset($arSettings['notify']); } CIMSettings::Set(CIMSettings::SETTINGS, $arSettings); echo CUtil::PhpToJsObject(Array( 'ERROR' => $errorMessage )); } else if ($_POST['IM_SETTINGS_NOTIFY_LOAD'] == 'Y') { $errorMessage = ""; $arSettings = CIMSettings::Get(); $arNotifyNames = CIMSettings::GetNotifyNames(); echo CUtil::PhpToJsObject(Array( 'NAMES' => $arNotifyNames, 'VALUES' => $arSettings['notify'], 'ERROR' => $errorMessage )); } else if ($_POST['IM_SETTINGS_SIMPLE_NOTIFY_LOAD'] == 'Y') { $errorMessage = ""; $arNotifyNames = CIMSettings::GetNotifyNames(); $arNotifyValues = CIMSettings::GetSimpleNotifyBlocked(true); echo CUtil::PhpToJsObject(Array( 'NAMES' => $arNotifyNames, 'VALUES' => $arNotifyValues, 'ERROR' => $errorMessage )); } else { echo CUtil::PhpToJsObject(Array('ERROR' => GetMessage('IM_UNKNOWN_ERROR'))); } } else { echo CUtil::PhpToJsObject(Array( 'ERROR' => 'SESSION_ERROR', 'BITRIX_SESSID' => bitrix_sessid(), )); } CMain::FinalActions(); die();