- Модуль: 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;
}