예제 #1
0
파일: user.php 프로젝트: Satariall/izurit
 /**
  * @return array|null
  */
 private function getParams()
 {
     if (is_null($this->userData)) {
         $userData = \CIMContactList::GetUserData(array('ID' => self::getId(), 'PHONES' => 'Y'));
         if (isset($userData['users'][self::getId()])) {
             $this->userData['user'] = $userData['users'][self::getId()];
         }
     }
     return $this->userData;
 }
예제 #2
0
 public function DeleteUser($chatId, $userId, $checkPermission = true)
 {
     global $DB;
     $chatId = intval($chatId);
     $userId = intval($userId);
     if ($chatId <= 0 || $userId <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_USER_OR_CHAT"), "EMPTY_USER_OR_CHAT");
         return false;
     }
     $strSql = "\n\t\t\tSELECT R.CHAT_ID, C.TITLE CHAT_TITLE, C.AUTHOR_ID CHAT_AUTHOR_ID, C.EXTRANET CHAT_EXTRANET, C.TYPE CHAT_TYPE\n\t\t\tFROM b_im_relation R LEFT JOIN b_im_chat C ON R.CHAT_ID = C.ID\n\t\t\tWHERE R.USER_ID = " . $userId . " AND R.MESSAGE_TYPE IN ('" . IM_MESSAGE_OPEN . "','" . IM_MESSAGE_CHAT . "') AND R.CHAT_ID = " . $chatId;
     $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if ($arRes = $dbRes->Fetch()) {
         $extranetFlag = $arRes["CHAT_EXTRANET"] == "" ? "" : ($arRes["CHAT_EXTRANET"] == "Y" ? true : false);
         $chatTitle = $arRes['CHAT_TITLE'];
         $chatType = $arRes['CHAT_TYPE'];
         $chatAuthorId = intval($arRes['CHAT_AUTHOR_ID']);
         if ($chatAuthorId == $userId) {
             $strSql = "\n\t\t\t\t\tSELECT R.USER_ID\n\t\t\t\t\tFROM b_im_relation R\n\t\t\t\t\tWHERE R.CHAT_ID = " . $chatId . " AND R.USER_ID <> " . $chatAuthorId;
             $strSql = $DB->TopSql($strSql, 1);
             $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             if ($arRes = $dbRes->Fetch()) {
                 $strSql = "UPDATE b_im_chat SET AUTHOR_ID = " . $arRes['USER_ID'] . " WHERE ID = " . $chatId;
                 $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             }
         }
         $bSelf = true;
         $arUsers = array($userId);
         if (is_object($GLOBALS["USER"]) && $GLOBALS["USER"]->GetId() != $userId) {
             if ($checkPermission && $chatAuthorId != $GLOBALS["USER"]->GetId()) {
                 $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_KICK"), "IM_ERROR_KICK");
                 return false;
             }
             $bSelf = false;
             $arUsers[] = $GLOBALS["USER"]->GetId();
         }
         $arOldRelation = CIMChat::GetRelationById($chatId);
         $arUsers = CIMContactList::GetUserData(array('ID' => array_keys($arOldRelation), 'DEPARTMENT' => 'N', 'USE_CACHE' => 'N'));
         $arUsers = $arUsers['users'];
         if ($bSelf) {
             $message = GetMessage("IM_CHAT_LEAVE_" . $arUsers[$userId]['gender'], array('#USER_NAME#' => htmlspecialcharsback($arUsers[$userId]['name'])));
         } else {
             $message = GetMessage("IM_CHAT_KICK_" . $arUsers[$GLOBALS["USER"]->GetId()]['gender'], array('#USER_1_NAME#' => htmlspecialcharsback($arUsers[$GLOBALS["USER"]->GetId()]['name']), '#USER_2_NAME#' => htmlspecialcharsback($arUsers[$userId]['name'])));
         }
         $CIMChat = new CIMChat($userId);
         $CIMChat->SetReadMessage($chatId);
         CIMContactList::CleanChatCache($userId);
         $publicPullWatch = false;
         if ($chatType == IM_MESSAGE_OPEN && CModule::IncludeModule("pull")) {
             $publicPullWatch = true;
         }
         $relationList = IM\RelationTable::getList(array("select" => array("ID", "USER_ID"), "filter" => array("=CHAT_ID" => $chatId, "=USER_ID" => $userId)));
         while ($relation = $relationList->fetch()) {
             if ($publicPullWatch && !$arUsers[$relation["USER_ID"]]['extranet']) {
                 CPullWatch::Add($relation["USER_ID"], 'IM_PUBLIC_' . $chatId, true);
             }
             Im\RelationTable::delete($relation["ID"]);
             CIMContactList::DeleteRecent($chatId, true, $relation["USER_ID"]);
             if ($extranetFlag !== false) {
                 $isExtranet = false;
                 foreach ($arUsers as $userData) {
                     if ($userData['id'] == $userId) {
                         continue;
                     }
                     if ($userData['extranet']) {
                         $isExtranet = true;
                         break;
                     }
                 }
                 if (!$isExtranet || $extranetFlag === "") {
                     IM\ChatTable::update($chatId, array('EXTRANET' => $isExtranet ? "Y" : "N"));
                 }
                 $extranetFlag = $isExtranet;
             }
         }
         CIMDisk::ChangeFolderMembers($chatId, $userId, false);
         self::AddMessage(array("TO_CHAT_ID" => $chatId, "MESSAGE" => $message, "FROM_USER_ID" => $this->user_id, "SYSTEM" => 'Y'));
         foreach ($arOldRelation as $rel) {
             CPullStack::AddByUser($rel['USER_ID'], array('module_id' => 'im', 'command' => 'chatUserLeave', 'params' => array('chatId' => $chatId, 'chatTitle' => $chatTitle, 'userId' => $userId, 'message' => $bSelf ? '' : htmlspecialcharsbx($message))));
         }
         return true;
     }
     $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_USER_NOT_FOUND"), "USER_NOT_FOUND");
     return false;
 }
예제 #3
0
	public static function GetFormatMessage($arParams)
	{
		$arParams['ID'] = intval($arParams['ID']);
		$arParams['TO_USER_ID'] = isset($arParams['TO_CHAT_ID'])? intval($arParams['TO_CHAT_ID']): intval($arParams['TO_USER_ID']);
		$arParams['FROM_USER_ID'] = intval($arParams['FROM_USER_ID']);
		$arParams['MESSAGE'] = trim($arParams['MESSAGE']);
		$arParams['DATE_CREATE'] = intval($arParams['DATE_CREATE']);
		$arParams['PARAMS'] = empty($arParams['PARAMS'])? Array(): $arParams['PARAMS'];

		$arUsers = CIMContactList::GetUserData(Array('ID' => isset($arParams['TO_CHAT_ID'])? $arParams['FROM_USER_ID']: Array($arParams['TO_USER_ID'], $arParams['FROM_USER_ID'])));
		$arChat = Array();
		if (isset($arParams['TO_CHAT_ID']))
		{
			$arChat = CIMChat::GetChatData(array(
				'ID' => $arParams['TO_USER_ID'],
				'USE_CACHE' => 'N'
			));
		}

		$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");

		$text = $CCTP->convertText(htmlspecialcharsbx($arParams['MESSAGE']));
		$text_mobile = strip_tags(preg_replace("/<img.*?data-code=\"([^\"]*)\".*?>/i", "$1", $CCTP->convertText(htmlspecialcharsbx(preg_replace("/\[s\].*?\[\/s\]/i", "", $arParams['MESSAGE'])))) , '<br>');

		return Array(
			'CHAT_ID' => $arParams['CHAT_ID'],
			'CHAT' => isset($arChat['chat'])? $arChat['chat']: Array(),
			'USER_IN_CHAT' => isset($arChat['userInChat'])? $arChat['userInChat']: Array(),
			'USER_BLOCK_CHAT' => $arChat['userChatBlockStatus'],
			'USERS' => $arUsers['users'],
			'MESSAGE' => Array(
				'id' => $arParams['ID'],
				'chatId' => $arParams['CHAT_ID'],
				'senderId' => $arParams['FROM_USER_ID'],
				'recipientId' => isset($arParams['TO_CHAT_ID'])? 'chat'.$arParams['TO_USER_ID']: $arParams['TO_USER_ID'],
				'system' => $arParams['SYSTEM'] == 'Y'? 'Y': 'N',
				'date' => $arParams['DATE_CREATE'],
				'text' => $text,
				'text_mobile' => $text_mobile,
				'params' => $arParams['PARAMS']
			),
			'FILES' => isset($arParams['FILES'])? $arParams['FILES']: Array(),
		);
	}
예제 #4
0
	public static function GetFormatNotify($arFields)
	{
		$CCTP = new CTextParser();

		if (isset($arFields['HIDE_LINK']) && $arFields['HIDE_LINK'] == 'Y')
			$CCTP->allow["ANCHOR"] = "N";

		$CCTP->link_target = "_self";
		$arNotify = Array(
			'id' => $arFields['ID'],
			'type' => $arFields['NOTIFY_TYPE'],
			'date' => $arFields['DATE_CREATE'],
			'silent' => $arFields['NOTIFY_SILENT']? 'Y': 'N',
			'text' => str_replace('#BR#', '<br>', $CCTP->convertText($arFields['MESSAGE'])),
			'tag' => strlen($arFields['NOTIFY_TAG'])>0? md5($arFields['NOTIFY_TAG']): '',
			'original_tag' => $arFields['NOTIFY_TAG'],
			'settingName' => $arFields['NOTIFY_MODULE'].'|'.$arFields['NOTIFY_EVENT']
		);
		if (!isset($arFields["FROM_USER_DATA"]))
		{
			$arUsers = CIMContactList::GetUserData(Array('ID' => $arFields['FROM_USER_ID'], 'DEPARTMENT' => 'N', 'USE_CACHE' => 'Y', 'CACHE_TTL' => 86400));
			$arFields["FROM_USER_DATA"] = $arUsers['users'];
		}
		$arNotify['userId'] = $arFields["FROM_USER_ID"];
		$arNotify['userName'] = $arFields["FROM_USER_DATA"][$arFields["FROM_USER_ID"]]['name'];
		$arNotify['userAvatar'] = $arFields["FROM_USER_DATA"][$arFields["FROM_USER_ID"]]['avatar'];
		$arNotify['userLink'] = $arFields["FROM_USER_DATA"][$arFields["FROM_USER_ID"]]['profile'];

		if ($arFields['NOTIFY_TYPE'] == IM_NOTIFY_CONFIRM)
		{
			$arNotify['buttons'] = unserialize($arFields['NOTIFY_BUTTONS']);
		}
		else
		{
			$arNotify['title'] = htmlspecialcharsbx($arFields['NOTIFY_TITLE']);
		}

		return $arNotify;
	}
예제 #5
0
	public static function AddUser($arParams)
	{
		$arConfig['CHAT_ID'] = intval($arParams['CHAT_ID']);
		if ($arConfig['CHAT_ID'] <= 0)
			return false;

		$arConfig['USERS'] = Array();
		if (is_array($arParams['USERS']))
		{
			foreach ($arParams['USERS'] as $value)
				$arConfig['USERS'][] = intval($value);
		}
		else
		{
			$arConfig['USERS'][] = intval($arParams['USERS']);
		}
		if (empty($arConfig['USERS']))
			return false;

		global $DB;

		$arChat = CIMChat::GetChatData(Array('ID' => $arConfig['CHAT_ID']));
		if (empty($arChat['chat']))
			return false;

		$arConfig['CALL_TYPE'] = intval($arChat['chat'][$arConfig['CHAT_ID']]['call']);
		$arConfig['LAST_CHAT_ID'] = $arConfig['CHAT_ID'];
		if ($arChat['chat'][$arConfig['CHAT_ID']]['type'] == IM_MESSAGE_PRIVATE)
		{
			$strSql = "UPDATE b_im_chat SET CALL_TYPE = ".IM_CALL_NONE." WHERE ID = ".$arConfig['CHAT_ID'];
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

			$strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_NONE." WHERE CHAT_ID = ".$arConfig['CHAT_ID'];
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

			$arUserToConnect = Array();
			$arUser = Array();

			foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
			{
				$arUser[] = $userId;
				$arUserToConnect[$userId] = $callStatus;
			}

			$arUser = array_merge($arUser, $arConfig['USERS']);

			$CIMChat = new CIMChat();
			$chatId = $CIMChat->Add('', $arUser);
			if (!$chatId)
				return false;

			$arConfig['CHAT_ID'] = $chatId;

			$strSql = "UPDATE b_im_chat SET CALL_TYPE = ".$arConfig['CALL_TYPE']." WHERE ID = ".$arConfig['CHAT_ID'];
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

			$strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_WAIT." WHERE CHAT_ID = ".$arConfig['CHAT_ID'];
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

			foreach ($arUserToConnect as $userId => $callStatus)
			{
				$strSql = "UPDATE b_im_relation SET CALL_STATUS = ".$callStatus." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID = ".$userId;
				$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
			}
		}
		else if ($arChat['chat'][$arConfig['CHAT_ID']]['type'] == IM_MESSAGE_GROUP)
		{
			$CIMChat = new CIMChat();
			$result = $CIMChat->AddUser($arConfig['CHAT_ID'], $arConfig['USERS']);
			if (!$result)
				return false;

			$strSql = "UPDATE b_im_relation SET CALL_STATUS = ".IM_CALL_STATUS_WAIT." WHERE CHAT_ID = ".$arConfig['CHAT_ID']." AND USER_ID IN (".implode(',', $arConfig['USERS']).")";
			$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);

			$arUserToConnect = Array();
			$arUser = Array();
			foreach ($arChat['userCallStatus'][$arConfig['CHAT_ID']] as $userId => $callStatus)
			{
				$arUser[] = $userId;
				$arUserToConnect[$userId] = $callStatus;
			}
			foreach ($arConfig['USERS'] as $userId)
			{
				$arUserToConnect[$userId] = IM_CALL_STATUS_WAIT;
			}
		}

		$arUserData = CIMContactList::GetUserData(Array('ID' => $arUser, 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));
		$arConfig['USER_DATA']['USERS'] = $arUserData['users'];
		$arConfig['USER_DATA']['HR_PHOTO'] = $arUserData['hrphoto'];

		$arSend = Array();
		$arSend['users'] = $arUserData['users'];
		$arSend['hrphoto'] = $arUserData['hrphoto'];
		$arSend['lastChatId'] = $arConfig['LAST_CHAT_ID'];
		foreach ($arUserToConnect as $userId => $callStatus)
			self::Command($arConfig['CHAT_ID'], $userId, 'invite_user', $arSend);

		$arSend['video'] = $arConfig['CALL_TYPE'] == IM_CALL_VIDEO? true: false;
		$arSend['callToGroup'] = true;
		foreach ($arConfig['USERS'] as $userId)
			self::Command($arConfig['CHAT_ID'], $userId, 'join', $arSend);

		return $arConfig;
	}
예제 #6
0
파일: im_chat.php 프로젝트: vim84/b-markt
 public function AddUser($chatId, $userId)
 {
     global $DB;
     $chatId = intval($chatId);
     if ($chatId <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_CHAT_ID"), "EMPTY_CHAT_ID");
         return false;
     }
     $arUserId = array();
     if (is_array($userId)) {
         foreach ($userId as $value) {
             $arUserId[] = intval($value);
         }
     } else {
         $arUserId[] = intval($userId);
     }
     if (count($arUserId) <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_USER_ID"), "EMPTY_USER_ID");
         return false;
     }
     if (!IsModuleInstalled('intranet') && CModule::IncludeModule('socialnetwork') && CSocNetUser::IsFriendsAllowed()) {
         global $USER;
         $arFriendUsers = array();
         $dbFriends = CSocNetUserRelations::GetList(array(), array("USER_ID" => $USER->GetID(), "RELATION" => SONET_RELATIONS_FRIEND), false, false, array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "DATE_CREATE", "DATE_UPDATE", "INITIATED_BY"));
         while ($arFriends = $dbFriends->Fetch()) {
             $friendId = $USER->GetID() == $arFriends["FIRST_USER_ID"] ? $arFriends["SECOND_USER_ID"] : $arFriends["FIRST_USER_ID"];
             $arFriendUsers[$friendId] = $friendId;
         }
         foreach ($arUserId as $id => $userId) {
             if ($userId == $USER->GetID()) {
                 continue;
             }
             if (!isset($arFriendUsers[$userId]) && CIMSettings::GetPrivacy(CIMSettings::PRIVACY_CHAT, $userId) == CIMSettings::PRIVACY_RESULT_CONTACT) {
                 unset($arUserId[$id]);
             }
         }
         if (count($arUserId) <= 0) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_USER_ID_BY_PRIVACY"), "EMPTY_USER_ID_BY_PRIVACY");
             return false;
         }
     }
     $strSql = "\n\t\t\tSELECT R.CHAT_ID, C.TITLE CHAT_TITLE, C.AUTHOR_ID CHAT_AUTHOR_ID\n\t\t\tFROM b_im_relation R LEFT JOIN b_im_chat C ON R.CHAT_ID = C.ID\n\t\t\tWHERE R.USER_ID = " . $this->user_id . " AND R.MESSAGE_TYPE = '" . IM_MESSAGE_GROUP . "' AND R.CHAT_ID = " . $chatId;
     $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if ($arRes = $dbRes->Fetch()) {
         $chatTitle = $arRes['CHAT_TITLE'];
         $chatAuthorId = intval($arRes['CHAT_AUTHOR_ID']);
         $arRelation = self::GetRelationById($chatId);
         $arExistUser = array();
         foreach ($arRelation as $relation) {
             $arExistUser[] = $relation['USER_ID'];
         }
         if (count($arRelation) + count($arUserId) > 100) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_MAX_USER", array('#COUNT#' => 100)), "MAX_USER");
             return false;
         }
         $arUserId = array_diff($arUserId, $arExistUser);
         if (empty($arUserId)) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_NOTHING_TO_ADD"), "NOTHING_TO_ADD");
             return false;
         }
         $arUserSelect = $arUserId;
         $arUserSelect[] = $this->user_id;
         $arUsers = CIMContactList::GetUserData(array('ID' => array_values($arUserSelect), 'DEPARTMENT' => 'N', 'USE_CACHE' => 'N'));
         $arUsers = $arUsers['users'];
         $maxId = 0;
         $strSql = "SELECT MAX(ID) ID FROM b_im_message WHERE CHAT_ID = " . $chatId . " GROUP BY CHAT_ID";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arRes = $dbRes->Fetch()) {
             $maxId = $arRes['ID'];
         }
         $fileMaxId = CIMDisk::GetMaxFileId($chatId);
         $arUsersName = array();
         foreach ($arUserId as $userId) {
             $arUsersName[] = htmlspecialcharsback($arUsers[$userId]['name']);
             CIMContactList::SetRecent($chatId, $maxId, true, $userId);
             $strSql = "INSERT INTO b_im_relation (CHAT_ID, MESSAGE_TYPE, USER_ID, START_ID, LAST_ID, LAST_SEND_ID, LAST_FILE_ID) VALUES (" . $chatId . ",'" . IM_MESSAGE_GROUP . "'," . $userId . "," . ($maxId + 1) . "," . $maxId . "," . $maxId . ", " . $fileMaxId . ")";
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             CIMContactList::CleanChatCache($userId);
         }
         CIMDisk::ChangeFolderMembers($chatId, $arUserId);
         $message = GetMessage("IM_CHAT_JOIN_" . $arUsers[$this->user_id]['gender'], array('#USER_1_NAME#' => htmlspecialcharsback($arUsers[$this->user_id]['name']), '#USER_2_NAME#' => implode(', ', $arUsersName)));
         if (CModule::IncludeModule("pull")) {
             foreach ($arRelation as $ar) {
                 CPullStack::AddByUser($ar['USER_ID'], array('module_id' => 'im', 'command' => 'chatUserAdd', 'params' => array('chatId' => $chatId, 'chatTitle' => $chatTitle, 'chatOwner' => $chatAuthorId, 'users' => $arUsers, 'newUsers' => $arUserId)));
             }
         }
         self::AddMessage(array("TO_CHAT_ID" => $chatId, "MESSAGE" => $message, "FROM_USER_ID" => $this->user_id, "SYSTEM" => 'Y'));
         return true;
     }
     $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_AUTHORIZE_ERROR"), "AUTHORIZE_ERROR");
     return false;
 }
예제 #7
0
 public static function ChangeFolderMembers($chatId, $userId, $append = true)
 {
     $folderModel = self::GetFolderModel($chatId);
     if (!$folderModel) {
         return false;
     }
     $result = IM\ChatTable::getById($chatId);
     if (!($chat = $result->fetch())) {
         return false;
     }
     if (!is_array($userId)) {
         $userIds = array($userId);
     } else {
         $userIds = $userId;
     }
     $driver = \Bitrix\Disk\Driver::getInstance();
     $rightsManager = $driver->getRightsManager();
     if ($append) {
         $fullAccessTaskId = $rightsManager->getTaskIdByName($rightsManager::TASK_FULL);
         $accessCodes = array();
         if ($chat['TYPE'] == IM_MESSAGE_OPEN) {
             $users = CIMContactList::GetUserData(array('ID' => array_values($userIds), 'DEPARTMENT' => 'N', 'SHOW_ONLINE' => 'N'));
             foreach ($users['users'] as $userData) {
                 if ($userData['extranet']) {
                     $accessCodes[] = array('ACCESS_CODE' => 'U' . $userData['id'], 'TASK_ID' => $fullAccessTaskId);
                 }
             }
         } else {
             foreach ($userIds as $userId) {
                 $userId = intval($userId);
                 if ($userId <= 0) {
                     continue;
                 }
                 $accessCodes[] = array('ACCESS_CODE' => 'U' . $userId, 'TASK_ID' => $fullAccessTaskId);
             }
         }
         if (count($accessCodes) <= 0) {
             return false;
         }
         $result = $rightsManager->append($folderModel, $accessCodes);
     } else {
         $accessCodes = array();
         if ($chat['TYPE'] == IM_MESSAGE_OPEN) {
             $users = CIMContactList::GetUserData(array('ID' => array_values($userIds), 'DEPARTMENT' => 'N', 'SHOW_ONLINE' => 'N'));
             foreach ($users['users'] as $userData) {
                 if ($userData['extranet']) {
                     $accessCodes[] = 'U' . $userData['id'];
                 }
             }
         } else {
             foreach ($userIds as $userId) {
                 $userId = intval($userId);
                 if ($userId <= 0) {
                     continue;
                 }
                 $accessCodes[] = 'U' . $userId;
             }
         }
         $result = $rightsManager->revokeByAccessCodes($folderModel, $accessCodes);
     }
     return $result;
 }
예제 #8
0
		$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'] == 'phoneCallHistory')
		{
			if (CModule::IncludeModule('voximplant'))
예제 #9
0
 public function GetAuthorizeInfo($updateInfo = false)
 {
     $ViAccount = new CVoxImplantAccount();
     if ($updateInfo) {
         $ViAccount->UpdateAccountInfo();
     }
     $ViUser = new CVoxImplantUser();
     $userInfo = $ViUser->GetUserInfo($this->userId);
     if (!$userInfo) {
         $this->error = new CVoxImplantError(__METHOD__, $ViUser->GetError()->code, GetMessage('VI_GET_USER_INFO', array('#CODE#' => $ViUser->GetError()->code)));
         return false;
     }
     $userData = CIMContactList::GetUserData(array('ID' => $this->userId, 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));
     return array('SERVER' => str_replace('voximplant.com', 'bitrixphone.com', $userInfo['call_server']), 'LOGIN' => $userInfo['user_login'], 'HASH' => defined('BX_MOBILE') ? $userInfo['user_password'] : md5(time() . randString()), 'CALLERID' => $userInfo['user_backphone'], 'HR_PHOTO' => $userData['hrphoto']);
 }
예제 #10
0
}
if (isset($_REQUEST['AJAX_CALL']) && $_REQUEST['AJAX_CALL'] == 'Y') {
    return;
}
if (intval($USER->GetID()) <= 0) {
    return;
}
if (!CModule::IncludeModule('im')) {
    return;
}
$chatId = intval($_GET['chat_id']);
if ($chatId <= 0) {
    return;
}
$arChat = CIMChat::GetChatData(array('ID' => $chatId, 'USE_CACHE' => 'N'));
$arResult['CHAT_ID'] = $chatId;
$arResult['CHAT'] = $arChat['chat'];
$arResult['USERS'] = array();
if (!empty($arChat['userInChat'][$chatId])) {
    $ar = CIMContactList::GetUserData(array('ID' => $arChat['userInChat'][$chatId], 'DEPARTMENT' => 'N', 'USE_CACHE' => 'Y'));
    $arResult['USERS'] = $ar['users'];
}
if (!$arResult['USERS'][$USER->GetId()]) {
    return;
}
$GLOBALS["APPLICATION"]->SetPageProperty("Viewport", "user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=290");
$GLOBALS["APPLICATION"]->SetPageProperty("BodyClass", "chat-profile-page");
if (!(isset($arParams['TEMPLATE_HIDE']) && $arParams['TEMPLATE_HIDE'] == 'Y')) {
    $this->IncludeComponentTemplate();
}
return $arResult;
예제 #11
0
        foreach ($arChatMessage['chat'] as $key => $value) {
            $arResult['CHAT']['chat'][$key] = $value;
        }
    } else {
        foreach ($arChatMessage['chat'] as $key => $value) {
            $value['fake'] = true;
            $arResult['CHAT']['chat'][$key] = $value;
        }
    }
    foreach ($arChatMessage['userInChat'] as $key => $value) {
        $arResult['CHAT']['userInChat'][$key] = $value;
    }
    foreach ($arChatMessage['userChatBlockStatus'] as $key => $value) {
        $arResult['CHAT']['userChatBlockStatus'][$key] = $value;
    }
}
if (!isset($arResult['CONTACT_LIST']['users'][$USER->GetID()])) {
    $arUsers = CIMContactList::GetUserData(array('ID' => $USER->GetID(), 'DEPARTMENT' => 'N', 'USE_CACHE' => 'Y', 'SHOW_ONLINE' => 'N'));
    $arResult['CONTACT_LIST']['users'][$USER->GetID()] = $arUsers['users'][$USER->GetID()];
}
$jsInit = array('im_mobile', 'uploader');
CJSCore::Init($jsInit);
$arResult["ACTION"] = 'DIALOG';
$arResult["CURRENT_TAB"] = isset($_GET['id']) ? $_GET['id'] : 0;
$arResult["PATH_TO_USER_PROFILE"] = SITE_DIR . 'mobile/users/?user_id=' . $USER->GetID() . '&FROM_DIALOG=Y';
$arResult["PATH_TO_USER_PROFILE_TEMPLATE"] = SITE_DIR . 'mobile/users/?user_id=#user_id#&FROM_DIALOG=Y';
$arResult['WEBRTC_MOBILE_SUPPORT'] = \Bitrix\MobileApp\Mobile::getInstance()->isWebRtcSupported();
if (!(isset($arParams['TEMPLATE_HIDE']) && $arParams['TEMPLATE_HIDE'] == 'Y')) {
    $this->IncludeComponentTemplate();
}
return $arResult;
예제 #12
0
 public static function GetFormatMessage($arParams)
 {
     $arParams['ID'] = intval($arParams['ID']);
     $arParams['TO_USER_ID'] = isset($arParams['TO_CHAT_ID']) ? intval($arParams['TO_CHAT_ID']) : intval($arParams['TO_USER_ID']);
     $arParams['FROM_USER_ID'] = intval($arParams['FROM_USER_ID']);
     $arParams['MESSAGE'] = trim($arParams['MESSAGE']);
     $arParams['DATE_CREATE'] = intval($arParams['DATE_CREATE']);
     $arUsers = CIMContactList::GetUserData(array('ID' => isset($arParams['TO_CHAT_ID']) ? $arParams['FROM_USER_ID'] : array($arParams['TO_USER_ID'], $arParams['FROM_USER_ID'])));
     $arChat = array();
     if (isset($arParams['TO_CHAT_ID'])) {
         $arChat = CIMChat::GetChatData(array('ID' => $arParams['TO_USER_ID'], 'USE_CACHE' => 'N'));
     }
     $CCTP = new CTextParser();
     $CCTP->MaxStringLen = 200;
     $CCTP->allow = array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "N", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "N", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N");
     $CCTPM = new CTextParser();
     $CCTPM->MaxStringLen = 200;
     $CCTPM->allow = array("HTML" => "N", "ANCHOR" => "N", "BIU" => "N", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => "N", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N");
     return array('CHAT' => isset($arChat['chat']) ? $arChat['chat'] : array(), 'USER_IN_CHAT' => isset($arChat['userInChat']) ? $arChat['userInChat'] : array(), 'USERS' => $arUsers['users'], 'MESSAGE' => array('id' => $arParams['ID'], 'senderId' => $arParams['FROM_USER_ID'], 'recipientId' => isset($arParams['TO_CHAT_ID']) ? 'chat' . $arParams['TO_USER_ID'] : $arParams['TO_USER_ID'], 'date' => $arParams['DATE_CREATE'], 'text' => $CCTP->convertText(htmlspecialcharsbx($arParams['MESSAGE'])), 'text_mobile' => $CCTPM->convertText(htmlspecialcharsbx($arParams['MESSAGE']))));
 }
예제 #13
0
 public function AddUser($chatId, $userId)
 {
     global $DB;
     $chatId = intval($chatId);
     if ($chatId <= 0) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_CHAT_ID"), "EMPTY_CHAT_ID");
         return false;
     }
     $arUserId = array();
     if (is_array($userId)) {
         foreach ($userId as $value) {
             $arUserId[] = intval($value);
         }
     } else {
         $arUserId[] = intval($userId);
     }
     if (empty($arUserId)) {
         $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_EMPTY_USER_ID"), "EMPTY_USER_ID");
         return false;
     }
     $strSql = "\n\t\t\tSELECT R.CHAT_ID, C.TITLE CHAT_TITLE, C.AUTHOR_ID CHAT_AUTHOR_ID\n\t\t\tFROM b_im_relation R LEFT JOIN b_im_chat C ON R.CHAT_ID = C.ID\n\t\t\tWHERE R.USER_ID = " . $this->user_id . " AND R.MESSAGE_TYPE = '" . IM_MESSAGE_GROUP . "' AND R.CHAT_ID = " . $chatId;
     $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if ($arRes = $dbRes->Fetch()) {
         $chatTitle = $arRes['CHAT_TITLE'];
         $chatAuthorId = intval($arRes['CHAT_AUTHOR_ID']);
         $arRelation = self::GetRelationById($chatId);
         $arExistUser = array();
         foreach ($arRelation as $relation) {
             $arExistUser[] = $relation['USER_ID'];
         }
         if (count($arRelation) + count($arUserId) > 50) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_MAX_USER", array('#COUNT#' => 50)), "MAX_USER");
             return false;
         }
         $arUserId = array_diff($arUserId, $arExistUser);
         if (empty($arUserId)) {
             $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_NOTHING_TO_ADD"), "NOTHING_TO_ADD");
             return false;
         }
         $arUserSelect = $arUserId;
         $arUserSelect[] = $this->user_id;
         $arUsers = CIMContactList::GetUserData(array('ID' => array_values($arUserSelect), 'DEPARTMENT' => 'N', 'USE_CACHE' => 'N'));
         $arUsers = $arUsers['users'];
         $maxId = 0;
         $strSql = "SELECT MAX(ID) ID FROM b_im_message WHERE CHAT_ID = " . $chatId . " GROUP BY CHAT_ID";
         $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if ($arRes = $dbRes->Fetch()) {
             $maxId = $arRes['ID'];
         }
         $arUsersName = array();
         foreach ($arUserId as $userId) {
             $arUsersName[] = htmlspecialcharsback($arUsers[$userId]['name']);
             CIMContactList::SetRecent($chatId, $maxId, true, $userId);
             $strSql = "INSERT INTO b_im_relation (CHAT_ID, MESSAGE_TYPE, USER_ID, START_ID, LAST_ID, LAST_SEND_ID) VALUES (" . $chatId . ",'" . IM_MESSAGE_GROUP . "'," . $userId . "," . ($maxId + 1) . "," . $maxId . "," . $maxId . ")";
             $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
         $message = GetMessage("IM_CHAT_JOIN_" . $arUsers[$this->user_id]['gender'], array('#USER_1_NAME#' => $arUsers[$this->user_id]['name'], '#USER_2_NAME#' => implode(', ', $arUsersName)));
         if (CModule::IncludeModule("pull")) {
             foreach ($arRelation as $ar) {
                 CPullStack::AddByUser($ar['USER_ID'], array('module_id' => 'im', 'command' => 'chatUserAdd', 'params' => array('chatId' => $chatId, 'chatTitle' => $chatTitle, 'chatOwner' => $chatAuthorId, 'users' => $arUsers, 'newUsers' => $arUserId)));
             }
         }
         self::AddMessage(array("TO_CHAT_ID" => $chatId, "MESSAGE" => $message, "SYSTEM" => 'Y'));
         return true;
     }
     $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_ERROR_AUTHORIZE_ERROR"), "AUTHORIZE_ERROR");
     return false;
 }
예제 #14
0
 public static function Init($params)
 {
     $result['STATUS'] = 'OK';
     $result['PORTAL_CALL'] = 'N';
     if (strlen($params['PHONE_NUMBER']) > 0 && strlen($params['PHONE_NUMBER']) <= 4) {
         $res = CVoxImplantUser::GetList(array('select' => array('ID', 'IS_ONLINE_CUSTOM', 'UF_VI_PHONE', 'ACTIVE'), 'filter' => array('=UF_PHONE_INNER' => intval($params['PHONE_NUMBER']), '=ACTIVE' => 'Y')));
         if ($userData = $res->fetch()) {
             $result['PORTAL_CALL'] = 'Y';
             $result['USER_ID'] = $userData['ID'];
             $result['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP;
             if (CModule::IncludeModule('pull')) {
                 $orm = \Bitrix\Pull\PushTable::getList(array('select' => array('ID'), 'filter' => array('=USER_ID' => $userData['ID'])));
                 $userData['USER_HAVE_MOBILE'] = $orm->fetch() ? 'Y' : 'N';
             } else {
                 $userData['USER_HAVE_MOBILE'] = 'N';
             }
             if ($userData['ID'] == $params['USER_ID']) {
                 $result['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP;
             } else {
                 if ($userData['IS_ONLINE_CUSTOM'] == 'Y' || $userData['UF_VI_PHONE'] == 'Y' || $userData['USER_HAVE_MOBILE'] == 'Y') {
                     $result['COMMAND'] = CVoxImplantIncoming::RULE_WAIT;
                     $result['TYPE_CONNECT'] = CVoxImplantIncoming::TYPE_CONNECT_DIRECT;
                     $result['USER_HAVE_PHONE'] = $userData['UF_VI_PHONE'] == 'Y' ? 'Y' : 'N';
                     $result['USER_HAVE_MOBILE'] = $userData['USER_HAVE_MOBILE'];
                     $result['USER_SHORT_NAME'] = '';
                 }
             }
         }
     }
     $callAdd = true;
     if ($params['CALL_ID_TMP']) {
         $res = VI\CallTable::getList(array('filter' => array('=CALL_ID' => $params['CALL_ID_TMP'])));
         if ($call = $res->fetch()) {
             $res = VI\CallTable::update($call['ID'], array('CONFIG_ID' => $params['CONFIG_ID'], 'CALL_ID' => $params['CALL_ID'], 'CRM' => $params['CRM'], 'USER_ID' => $params['USER_ID'], 'CALLER_ID' => $params['PHONE_NUMBER'], 'STATUS' => VI\CallTable::STATUS_CONNECTING, 'ACCESS_URL' => $params['ACCESS_URL'], 'PORTAL_USER_ID' => $result['PORTAL_CALL'] == 'Y' ? $result['USER_ID'] : 0));
             if ($res) {
                 $callAdd = false;
             }
         }
     }
     if ($callAdd) {
         VI\CallTable::add(array('CONFIG_ID' => $params['CONFIG_ID'], 'CALL_ID' => $params['CALL_ID'], 'CRM' => $params['CRM'], 'USER_ID' => $params['USER_ID'], 'CALLER_ID' => $params['PHONE_NUMBER'], 'STATUS' => VI\CallTable::STATUS_CONNECTING, 'ACCESS_URL' => $params['ACCESS_URL'], 'PORTAL_USER_ID' => $result['PORTAL_CALL'] == 'Y' ? $result['USER_ID'] : 0, 'DATE_CREATE' => new FieldType\DateTime()));
     }
     $config = self::GetConfigByUserId($params['USER_ID']);
     if ($params['CRM'] == 'Y' && $result['PORTAL_CALL'] == 'N') {
         if ($config['CRM_CREATE'] == CVoxImplantConfig::CRM_CREATE_LEAD) {
             $crmData = CVoxImplantCrmHelper::GetDataForPopup($params['CALL_ID'], $params['PHONE_NUMBER']);
             if ($crmData['FOUND'] == 'N') {
                 CVoxImplantCrmHelper::AddLead(array('USER_ID' => $params['USER_ID'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'SEARCH_ID' => $config['SEARCH_ID'], 'CRM_SOURCE' => $config['CRM_SOURCE'], 'INCOMING' => false));
             }
         }
         CVoxImplantCrmHelper::AddCall(array('CALL_ID' => $params['CALL_ID'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'INCOMING' => CVoxImplantMain::CALL_OUTGOING, 'USER_ID' => $params['USER_ID'], 'DATE_CREATE' => new FieldType\DateTime()));
         $crmData = CVoxImplantCrmHelper::GetDataForPopup($params['CALL_ID'], $params['PHONE_NUMBER'], $params['USER_ID']);
     } else {
         $crmData = array();
     }
     CVoxImplantHistory::WriteToLog(array('COMMAND' => 'outgoing', 'USER_ID' => $params['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'CALL_ID_TMP' => $params['CALL_ID_TMP'], 'CALL_DEVICE' => $params['CALL_DEVICE'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'EXTERNAL' => $params['CALL_ID_TMP'] ? true : false, 'PORTAL_CALL' => $result['PORTAL_CALL'], 'PORTAL_CALL_USER_ID' => $params['USER_ID'], 'CRM' => $crmData));
     $portalUser = array();
     if ($result['PORTAL_CALL'] == 'Y') {
         if (CModule::IncludeModule('im')) {
             $portalUser = CIMContactList::GetUserData(array('ID' => array($params['USER_ID'], $result['USER_ID']), 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));
         } else {
             $portalUser = array();
         }
     }
     self::SendPullEvent(array('COMMAND' => 'outgoing', 'USER_ID' => $params['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'CALL_ID_TMP' => $params['CALL_ID_TMP'], 'CALL_DEVICE' => $params['CALL_DEVICE'], 'PHONE_NUMBER' => $params['PHONE_NUMBER'], 'EXTERNAL' => $params['CALL_ID_TMP'] ? true : false, 'PORTAL_CALL' => $result['PORTAL_CALL'], 'PORTAL_CALL_USER_ID' => $result['USER_ID'], 'PORTAL_CALL_DATA' => $portalUser, 'CONFIG' => array('RECORDING' => $config['RECORDING'], 'CRM_CREATE' => $config['CRM_CREATE']), 'CRM' => $crmData));
     if ($result['PORTAL_CALL'] == 'Y' && $result['USER_ID'] > 0) {
         CVoxImplantIncoming::SendPullEvent(array('COMMAND' => 'invite', 'USER_ID' => $result['USER_ID'], 'CALL_ID' => $params['CALL_ID'], 'CALLER_ID' => $params['USER_DIRECT_CODE'], 'PHONE_NAME' => $params['CALLER_ID'], 'PORTAL_CALL' => 'Y', 'PORTAL_CALL_USER_ID' => $params['USER_ID'], 'PORTAL_CALL_DATA' => $portalUser, 'CONFIG' => array('RECORDING' => $config['RECORDING'], 'CRM_CREATE' => $config['CRM_CREATE'])));
     }
     return $result;
 }
예제 #15
0
파일: im.ajax.php 프로젝트: ASDAFF/bitrix-5
			'ERROR' => ''
		));
	}

	else if ($_POST['IM_CALL'] == 'Y')
	{
		$errorMessage = "";

		if ($_POST['COMMAND'] == 'invite' || $_POST['COMMAND'] == 'busy')
			CIMMessenger::CallCommand($_POST['RECIPIENT_ID'], $_POST['COMMAND'], Array('video' => ($_POST['VIDEO'] == 'Y')));
		else if ($_POST['COMMAND'] == 'signaling')
			CIMMessenger::CallCommand($_POST['RECIPIENT_ID'], $_POST['COMMAND'], Array('peer' => $_POST['PEER']));
		else
			CIMMessenger::CallCommand($_POST['RECIPIENT_ID'], $_POST['COMMAND'], CUtil::JsObjectToPhp($_POST['PARAMS']));

		$arUserData = CIMContactList::GetUserData(Array('ID' => array($USER->GetID(), $_POST['RECIPIENT_ID']), 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));

		echo CUtil::PhpToJsObject(Array(
			'USERS' => $arUserData['users'],
			'HR_PHOTO' => $arUserData['hrphoto'],
			'ERROR' => $errorMessage
		));
	}
	else if ($_POST['IM_START_WRITING'] == 'Y')
	{
		$errorMessage = "";
		CIMMessenger::StartWriting($_POST['RECIPIENT_ID']);

		echo CUtil::PhpToJsObject(Array(
			'ERROR' => $errorMessage
		));
예제 #16
0
	public static function CallCommand($recipientId, $command, $params = Array())
	{
		global $USER;

		if ($USER->GetID() <= 0 || intval($recipientId) <= 0)
			return false;

		if (!CModule::IncludeModule("pull"))
			return false;

		$arParams = Array(
			'command' => $command,
			'senderId' => $USER->GetID()
		);

		if ($command == 'signaling')
		{
			$arParams['peer'] = $params['peer'];
		}
		else if ($command == 'invite')
		{
			$arParams['video'] = isset($params['video']) && $params['video'] == 'Y'? true: false;

			$arUserData = CIMContactList::GetUserData(Array('ID' => array($USER->GetID(), $recipientId), 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y'));
			$arParams['users'] = $arUserData['users'];
			$arParams['hrphoto'] = $arUserData['hrphoto'];
		}
		else if ($command == 'busy')
		{
			$arParams['video'] = isset($params['video']) && $params['video'] == 'Y'? true: false;

			$arSelect = Array("ID", "LAST_NAME", "NAME", "LOGIN", "SECOND_NAME", "PERSONAL_GENDER");
			$dbUsers = CUser::GetList(($sort_by = false), ($dummy=''), array('ID' => $USER->GetID()), array('FIELDS' => $arSelect));
			$arUsers = Array();
			if ($arUser = $dbUsers->Fetch())
			{
				$arUsers['NAME'] = CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false);
				$arUsers['GENDER'] = $arUser["PERSONAL_GENDER"] == 'F'? 'F': 'M';

				CIMMessage::Add(Array(
					"FROM_USER_ID" => intval($recipientId),
					"TO_USER_ID" => $USER->GetID(),
					"MESSAGE" => GetMessage("IM_CALL_CHAT_BUSY_".$arUsers['GENDER'], Array('#USER_NAME#' => $arUsers['NAME'])),
					"PUSH" => 'N',
					"SYSTEM" => 'Y',
				));
			}
		}
		else if ($command == 'waitTimeout')
		{
			$arSelect = Array("ID", "LAST_NAME", "NAME", "LOGIN", "SECOND_NAME", "PERSONAL_GENDER");
			$dbUsers = CUser::GetList(($sort_by = false), ($dummy=''), array('ID' => $recipientId), array('FIELDS' => $arSelect));
			$arUsers = Array();
			if ($arUser = $dbUsers->Fetch())
			{
				$arUsers['NAME'] = CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false);

				CIMMessage::Add(Array(
					"FROM_USER_ID" => $USER->GetID(),
					"TO_USER_ID" => intval($recipientId),
					"MESSAGE" => GetMessage("IM_CALL_CHAT_WAIT", Array('#USER_NAME#' => $arUsers['NAME'])),
					"PUSH" => 'N',
					"SYSTEM" => 'Y',
				));
			}
		}
		else if ($command == 'start')
		{
			CIMMessage::Add(Array(
				"FROM_USER_ID" => $USER->GetID(),
				"TO_USER_ID" =>  intval($recipientId),
				"MESSAGE" => GetMessage("IM_CALL_CHAT_START"),
				"SYSTEM" => 'Y',
				"PUSH" => 'N',
				"READED" => 'Y',
			));
		}
		else if ($command == 'errorAccess')
		{
			$arSelect = Array("ID", "LAST_NAME", "NAME", "LOGIN", "SECOND_NAME", "PERSONAL_GENDER");
			$dbUsers = CUser::GetList(($sort_by = false), ($dummy=''), array('ID' => $USER->GetID()), array('FIELDS' => $arSelect));
			$arUsers = Array();
			if ($arUser = $dbUsers->Fetch())
			{
				$arUsers['NAME'] = CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false);

				CIMMessage::Add(Array(
					"FROM_USER_ID" => $USER->GetID(),
					"TO_USER_ID" => intval($recipientId),
					"MESSAGE" => GetMessage("IM_CALL_CHAT_ERROR", Array('#USER_NAME#' => $arUsers['NAME'])),
					"SYSTEM" => 'Y',
					"PUSH" => 'N',
					"READED" => 'Y',
				));
			}
		}
		else if ($command == 'errorOffline')
		{
			$arSelect = Array("ID", "LAST_NAME", "NAME", "LOGIN", "SECOND_NAME", "PERSONAL_GENDER");
			$dbUsers = CUser::GetList(($sort_by = false), ($dummy=''), array('ID' => intval($recipientId)), array('FIELDS' => $arSelect));
			$arUsers = Array();
			if ($arUser = $dbUsers->Fetch())
			{
				$arUsers['NAME'] = CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false);

				CIMMessage::Add(Array(
					"FROM_USER_ID" => $USER->GetID(),
					"TO_USER_ID" =>  intval($recipientId),
					"MESSAGE" => GetMessage("IM_CALL_CHAT_OFFLINE", Array('#USER_NAME#' => $arUsers['NAME'])),
					"SYSTEM" => 'Y',
				));
			}
		}
		else if ($command == 'decline')
		{
			if ($params['CONNECTED'] == 'Y')
			{
				CIMMessage::Add(Array(
					"FROM_USER_ID" => $USER->GetID(),
					"TO_USER_ID" =>  intval($recipientId),
					"MESSAGE" => GetMessage("IM_CALL_CHAT_END"),
					"PUSH" => 'N',
					"SYSTEM" => 'Y',
					"READED" => 'Y',
				));
			}
			else
			{
				$arSelect = Array("ID", "LAST_NAME", "NAME", "LOGIN", "SECOND_NAME", "PERSONAL_GENDER");
				$dbUsers = CUser::GetList(($sort_by = false), ($dummy=''), array('ID' => $USER->GetID()), array('FIELDS' => $arSelect));
				$arUsers = Array();
				if ($arUser = $dbUsers->Fetch())
				{
					$arUsers['NAME'] = CUser::FormatName(CSite::GetNameFormat(false), $arUser, true, false);
					$arUsers['GENDER'] = $arUser["PERSONAL_GENDER"] == 'F'? 'F': 'M';

					CIMMessage::Add(Array(
						"FROM_USER_ID" => $USER->GetID(),
						"TO_USER_ID" =>  intval($recipientId),
						"MESSAGE" => GetMessage("IM_CALL_CHAT_DECLINE_".$arUsers['GENDER'], Array('#USER_NAME#' => $arUsers['NAME'])),
						"PUSH" => 'N',
						"SYSTEM" => 'Y',
						"READED" => $params['ACTIVE'] == 'Y'? 'Y': $params['INITIATOR'] == 'Y'? 'N': 'Y',
					));
				}
			}
		}
		else if ($command == 'busy_self')
		{
			CIMMessage::Add(Array(
				"FROM_USER_ID" => $USER->GetID(),
				"TO_USER_ID" =>  intval($recipientId),
				"MESSAGE" => GetMessage("IM_CALL_CHAT_END"),
				"PUSH" => 'N',
				"SYSTEM" => 'Y',
				"READED" => 'Y',
			));
		}
		else if ($command == 'wait' || $command == 'accept' || $command == 'ready' || $command == 'decline_self' || $command == 'accept_self' )
		{
		}
		else
			return false;


		CPullStack::AddByUser(intval($recipientId), Array(
			'module_id' => 'im',
			'command' => 'call',
			'params' => $arParams,
		));

		if ($command == 'accept' || $command == 'decline')
		{
			$arParams['command'] = $command.'_self';
			CPullStack::AddByUser($USER->GetID(), Array(
				'module_id' => 'im',
				'command' => 'call',
				'params' => $arParams,
			));
		}

		return true;
	}