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; }
} 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') { CIMContactList::DeleteRecent(substr($_POST['USER_ID'], 4), 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 = ""; $CIMChat = new CIMChat(); $chatId = $CIMChat->Add('', $_POST['USERS']); 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 = ""; $CIMChat = new CIMChat(); $result = $CIMChat->AddUser($_POST['CHAT_ID'], $_POST['USERS']); if (!$result) { if ($e = $GLOBALS["APPLICATION"]->GetException()) { $errorMessage = $e->GetString();
)); } else if ($_POST['IM_CHAT_ADD'] == 'Y') { $_POST['USERS'] = CUtil::JsObjectToPhp($_POST['USERS']); $errorMessage = ""; $chatId = 0; if (!is_array($_POST['USERS'])) { $errorMessage = 'Unknown error'; } else { $CIMChat = new CIMChat(); $chatId = $CIMChat->Add(Array('USERS' => $_POST['USERS'])); 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']);
public function GetDialogInfo($phone, $chatTitle = '', $getPhoto = true) { $phoneNormalize = CVoxImplantPhone::Normalize($phone); if (!$phoneNormalize) { $phoneNormalize = preg_replace("/[^0-9\\#\\*]/i", "", $phone); } $phone = $phoneNormalize; $hrPhoto = array(); $openChat = true; $result = VI\PhoneTable::getList(array('select' => array('USER_ID', 'PHONE_MNEMONIC'), 'filter' => array('=PHONE_NUMBER' => $phone))); $userId = false; while ($row = $result->fetch()) { if (!$userId && $row['PHONE_MNEMONIC'] != 'WORK_PHONE') { $userId = $row['USER_ID']; $openChat = false; } else { if (!$userId && $row['PHONE_MNEMONIC'] == 'WORK_PHONE') { $openChat = true; } } } if ($userId == $this->userId) { $openChat = true; } $dialogId = 0; if (CModule::IncludeModule('im')) { if (CVoxImplantConfig::GetChatAction() == CVoxImplantConfig::INTERFACE_CHAT_NONE) { } else { if ($openChat) { $entityId = $phone; if (CVoxImplantConfig::GetChatAction() == CVoxImplantConfig::INTERFACE_CHAT_APPEND) { $entityId = 'UNIFY_CALL_CHAT'; $chatTitle = GetMessage('VI_CALL_CHAT_UNIFY'); } $result = IM\ChatTable::getList(array('select' => array('ID', 'AVATAR'), 'filter' => array('=ENTITY_TYPE' => 'CALL', '=ENTITY_ID' => $entityId, '=AUTHOR_ID' => $this->userId))); if ($row = $result->fetch()) { $dialogId = 'chat' . $row['ID']; $avatarId = $row['AVATAR']; } else { $CIMChat = new CIMChat($this->userId); $chatId = $CIMChat->Add(array('TITLE' => $chatTitle != '' ? $chatTitle : $phone, 'USERS' => false, 'CALL_NUMBER' => $entityId == 'UNIFY_CALL_CHAT' ? '' : $entityId, 'ENTITY_TYPE' => 'CALL', 'ENTITY_ID' => $entityId)); if ($chatId) { $dialogId = 'chat' . $chatId; $avatarId = $CIMChat->lastAvatarId; } } if ($getPhoto && intval($avatarId) > 0) { $arPhotoHrTmp = CFile::ResizeImageGet($avatarId, array('width' => 200, 'height' => 200), BX_RESIZE_IMAGE_EXACT, false, false, true); $hrPhoto[$dialogId] = empty($arPhotoHrTmp['src']) ? '/bitrix/js/im/images/hidef-avatar-v2.png' : $arPhotoHrTmp['src']; } } else { if ($userId) { if ($getPhoto) { $userData = CIMContactList::GetUserData(array('ID' => $userId, 'DEPARTMENT' => 'N', 'HR_PHOTO' => 'Y')); $hrPhoto = $userData['hrphoto']; } $dialogId = $userId; } } } } if (!$dialogId) { $this->error = new CVoxImplantError(__METHOD__, 'ERROR_NEW_CHAT', GetMessage('VI_ERROR_NEW_CHAT')); return false; } //foreach(GetModuleEvents("voximplant", "OnGetDialogInfo", true) as $arEvent) // ExecuteModuleEventEx($arEvent, array('USER_ID' => $this->userId, 'DIALOG_ID' => $dialogId)); return array('DIALOG_ID' => $dialogId, 'HR_PHOTO' => $hrPhoto); }
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['USERS'] != '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 {
} 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 (!is_array($_POST['USERS'])) { $errorMessage = 'Unknown error'; } else { $CIMChat = new CIMChat(); $chatId = $CIMChat->Add(array('USERS' => $_POST['USERS'], '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 = ""; $CIMChat = new CIMChat(); $result = $CIMChat->AddUser($_POST['CHAT_ID'], $_POST['USERS'], array('SEARCH_MARK' => $_POST['SEARCH_MARK'])); if (!$result) { if ($e = $GLOBALS["APPLICATION"]->GetException()) {