- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_chat.php
- Класс: CIMChat
- Вызов: CIMChat::SetColor
public function SetColor($chatId, $color)
{
global $DB;
$chatId = intval($chatId);
$color = ToUpper($color);
if ($chatId <= 0 || !IMColor::isSafeColor($color))
return false;
$strSql = "
SELECT R.CHAT_ID, C.COLOR CHAT_COLOR, C.AUTHOR_ID CHAT_AUTHOR_ID, C.TYPE CHAT_TYPE, C.ENTITY_TYPE CHAT_ENTITY_TYPE, C.ENTITY_ID CHAT_ENTITY_ID
FROM b_im_relation R LEFT JOIN b_im_chat C ON R.CHAT_ID = C.ID
WHERE R.USER_ID = ".$this->user_id." AND R.MESSAGE_TYPE IN ('".IM_MESSAGE_OPEN."','".IM_MESSAGE_CHAT."','".IM_MESSAGE_OPEN_LINE."') AND R.CHAT_ID = ".$chatId;
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
if ($arRes = $dbRes->Fetch())
{
$arRes['CHAT_TYPE'] = trim($arRes['CHAT_TYPE']);
if ($arRes['CHAT_COLOR'] == $color)
return false;
IMModelChatTable::update($chatId, array('COLOR' => $color));
CIMChat::AddSystemMessage(Array(
'CHAT_ID' => $chatId,
'USER_ID' => $this->user_id,
'MESSAGE_CODE' => 'IM_CHAT_CHANGE_COLOR_',
'MESSAGE_REPLACE' => Array('#CHAT_COLOR#' => IMColor::getName($color))
));
$ar = CIMChat::GetRelationById($chatId, false, true, false);
if ($arRes['CHAT_ENTITY_TYPE'] == 'LINES')
{
foreach ($ar as $rel)
{
if ($rel["EXTERNAL_AUTH_ID"] == 'imconnector')
{
unset($ar[$rel["USER_ID"]]);
}
}
}
if ($arRes['CHAT_TYPE'] == IM_MESSAGE_OPEN)
{
CIMContactList::CleanAllChatCache();
}
else
{
foreach ($ar as $rel)
{
CIMContactList::CleanChatCache($rel['USER_ID']);
}
}
if (CModule::IncludeModule("pull"))
{
$arPushMessage = Array(
'module_id' => 'im',
'command' => 'chatChangeColor',
'expiry' => 3600,
'params' => Array(
'chatId' => $chatId,
'color' => IMColor::getColor($color),
),
'extra' => BitrixImCommon::getPullExtra()
);
BitrixPullEvent::add(array_keys($ar), $arPushMessage);
if ($arRes['CHAT_TYPE'] == IM_MESSAGE_OPEN || $arRes['CHAT_TYPE'] == IM_MESSAGE_OPEN_LINE)
{
CPullWatch::AddToStack('IM_PUBLIC_'.$chatId, $arPushMessage);
}
}
return true;
}
return false;
}