public function Rename($chatId, $title, $checkPermission = true, $sendMessage = true)
{
global $DB;
$chatId = intval($chatId);
$title = mb_substr(trim($title), 0, 255);
if ($chatId <= 0 || $title == '')
return false;
if ($checkPermission)
{
$strSql = "
SELECT R.CHAT_ID, C.TITLE CHAT_TITLE, C.AUTHOR_ID CHAT_AUTHOR_ID, C.TYPE CHAT_TYPE, C.ENTITY_TYPE CHAT_ENTITY_TYPE, C.ENTITY_ID CHAT_ENTITY_ID, R.MANAGER IS_MANAGER
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;
}
else
{
$strSql = "
SELECT C.ID CHAT_ID, C.TITLE CHAT_TITLE, C.AUTHOR_ID CHAT_AUTHOR_ID, C.TYPE CHAT_TYPE, C.ENTITY_TYPE CHAT_ENTITY_TYPE, C.ENTITY_ID CHAT_ENTITY_ID, 'Y' IS_MANAGER
FROM b_im_chat C
WHERE C.ID = ".$chatId." AND C.TYPE IN ('".IM_MESSAGE_OPEN."','".IM_MESSAGE_CHAT."','".IM_MESSAGE_OPEN_LINE."')";
}
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
if ($arRes = $dbRes->Fetch())
{
$arRes['CHAT_TITLE'] = BitrixImText::decodeEmoji($arRes['CHAT_TITLE']);
if ($arRes['CHAT_TITLE'] == $title)
return false;
if ($arRes['CHAT_ENTITY_TYPE'] === 'ANNOUNCEMENT' && $arRes['IS_MANAGER'] !== 'Y')
{
return false;
}
$arRes['CHAT_TYPE'] = trim($arRes['CHAT_TYPE']);
IMModelChatTable::update($chatId, array('TITLE' => $title));
if ($sendMessage)
{
if ($checkPermission)
{
CIMChat::AddSystemMessage(Array(
'CHAT_ID' => $chatId,
'USER_ID' => $this->user_id,
'MESSAGE_CODE' => 'IM_CHAT_CHANGE_TITLE_',
'MESSAGE_REPLACE' => Array('#CHAT_TITLE#' => $title)
));
}
else
{
self::AddMessage(Array(
"TO_CHAT_ID" => $chatId,
"MESSAGE" => GetMessage("IM_CHAT_CHANGE_TITLE", Array('#CHAT_TITLE#' => $title)),
"SYSTEM" => 'Y',
"SKIP_USER_CHECK" => 'Y',
));
}
}
$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"))
{
$pushMessage = Array(
'module_id' => 'im',
'command' => 'chatRename',
'params' => Array(
'chatId' => $chatId,
'name' => $title,
),
'extra' => BitrixImCommon::getPullExtra()
);
BitrixPullEvent::add(array_keys($ar), $pushMessage);
if ($arRes['CHAT_TYPE'] == IM_MESSAGE_OPEN || $arRes['CHAT_TYPE'] == IM_MESSAGE_OPEN_LINE)
{
CPullWatch::AddToStack('IM_PUBLIC_'.$chatId, $pushMessage);
}
}
foreach(GetModuleEvents("im", "OnChatRename", true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, array($chatId, $title, $arRes['CHAT_ENTITY_TYPE'], $arRes['CHAT_ENTITY_ID'], $this->user_id));
}
return true;
}
return false;
}