• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_chat.php
  • Класс: CIMChat
  • Вызов: CIMChat::GetOpenChatData
static function GetOpenChatData($arParams = Array())
{
	global $DB;

	$arParams['PHOTO_SIZE'] = isset($arParams['PHOTO_SIZE'])? intval($arParams['PHOTO_SIZE']): 100;

	$existsSql = "SELECT R3.ID FROM b_im_relation R3 WHERE R3.CHAT_ID = C.ID";
	if ($DB->type == "MYSQL")
	{
		$existsSql .= ' LIMIT 1';
	}
	$strSql = "
		SELECT
			C.ID CHAT_ID,
			C.TITLE CHAT_TITLE,
			C.CALL_TYPE CHAT_CALL_TYPE,
			C.AUTHOR_ID CHAT_OWNER_ID,
			C.CALL_NUMBER CHAT_CALL_NUMBER,
			C.EXTRANET CHAT_EXTRANET,
			C.COLOR CHAT_COLOR,
			C.TYPE CHAT_TYPE,
			C.AVATAR,
			C.ENTITY_TYPE,
			C.ENTITY_DATA_1,
			C.ENTITY_DATA_2,
			C.ENTITY_DATA_3,
			".$DB->DatetimeToTimestampFunction('C.DATE_CREATE')." CHAT_DATE_CREATE,
			C.ENTITY_ID,
			R2.NOTIFY_BLOCK RELATION_NOTIFY_BLOCK,
			R2.USER_ID RELATION_USER_ID,
			R2.USER_ID RELATION_MANAGER,
			R2.CALL_STATUS,
			R2.ID RID
		FROM b_im_chat C
		LEFT JOIN b_im_relation R2 ON R2.CHAT_ID = C.ID AND R2.USER_ID = ".intval($arParams['USER_ID'])."
		WHERE C.TYPE = '".IM_MESSAGE_OPEN."' AND EXISTS(".$existsSql.")
	";

	$arChat = Array();
	$arUserInChat = Array();
	$arUserCallStatus = Array();
	$arUserChatBlockStatus = Array();
	$arManagerList = Array();

	$generalChatId = CIMChat::GetGeneralChatId();

	$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); while ($arRes = $dbRes->GetNext(true, false)) { if (intval($arRes['RID']) <= 0 && IMUser::getInstance($arParams['USER_ID'])->isExtranet()) { continue; } $arRes['CHAT_TYPE'] = trim($arRes['CHAT_TYPE']); if (!isset($arChat[$arRes["CHAT_ID"]])) { $avatar = '/bitrix/js/im/images/blank.gif'; if (intval($arRes["AVATAR"]) > 0) { $avatar = self::GetAvatarImage($arRes["AVATAR"], $arParams['PHOTO_SIZE']); } $chatType = BitrixImChat::getType($arRes); if ($generalChatId == $arRes['CHAT_ID']) { $arRes["ENTITY_TYPE"] = 'GENERAL'; } $arChat[$arRes["CHAT_ID"]] = Array( 'id' => $arRes["CHAT_ID"], 'name' => BitrixImText::decodeEmoji($arRes["CHAT_TITLE"]), 'owner' => $arRes["CHAT_OWNER_ID"], 'color' => $arRes["CHAT_COLOR"] == ""? IMColor::getColorByNumber($arRes['CHAT_ID']): IMColor::getColor($arRes['CHAT_COLOR']), 'extranet' => $arRes["CHAT_EXTRANET"] == ""? "": ($arRes["CHAT_EXTRANET"] == "Y"? true: false), 'avatar' => $avatar, 'call' => trim($arRes["CHAT_CALL_TYPE"]), 'call_number' => trim($arRes["CHAT_CALL_NUMBER"]), 'entity_type' => trim($arRes["ENTITY_TYPE"]), 'entity_data_1' => trim($arRes["ENTITY_DATA_1"]), 'entity_data_2' => trim($arRes["ENTITY_DATA_2"]), 'entity_data_3' => trim($arRes["ENTITY_DATA_3"]), 'mute_list' => array(), 'manager_list' => array(), 'date_create' => $arRes["CHAT_DATE_CREATE"]? BitrixMainTypeDateTime::createFromTimestamp($arRes["CHAT_DATE_CREATE"]): false, 'entity_id' => trim($arRes["ENTITY_ID"]), 'type' => $chatType, 'message_type' => $arRes["CHAT_TYPE"], ); } $arUserChatBlockStatus[$arRes["CHAT_ID"]][$arRes["RELATION_USER_ID"]] = $arRes['RELATION_NOTIFY_BLOCK'] == 'Y'; $arUserInChat[$arRes["CHAT_ID"]][] = $arRes["RELATION_USER_ID"]; $arUserCallStatus[$arRes["CHAT_ID"]][$arRes["RELATION_USER_ID"]] = trim($arRes["CALL_STATUS"] ?? ''); $arChat[$arRes["CHAT_ID"]]['mute_list'] = $arUserChatBlockStatus[$arRes["CHAT_ID"]]; if ($arRes["RELATION_MANAGER"] == 'Y') { $arManagerList[$arRes["CHAT_ID"]][] = (int)$arRes["RELATION_USER_ID"]; } $arChat[$arRes["CHAT_ID"]]['manager_list'] = $arManagerList[$arRes["CHAT_ID"]] ?? null; } $result = array( 'chat' => $arChat, 'userInChat' => $arUserInChat, 'userCallStatus' => $arUserCallStatus, 'userChatBlockStatus' => $arUserChatBlockStatus ); return $result; }