- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/chat.php
- Класс: BitrixImChat
- Вызов: Chat::mute
static function mute($chatId, $action, $userId = null)
{
$userId = BitrixImCommon::getUserId($userId);
if (!$userId)
{
return false;
}
$chatId = intval($chatId);
if (!$chatId)
{
return false;
}
$action = $action === true? 'Y': 'N';
(new CounterService())->withContextUser($userId)->updateIsMuted($chatId, $action);
$relation = self::getRelation($chatId, Array(
'SELECT' => Array('ID', 'MESSAGE_TYPE', 'NOTIFY_BLOCK', 'COUNTER'),
'FILTER' => Array(
'USER_ID' => $userId
),
));
if (!$relation)
{
return false;
}
if ($relation[$userId]['NOTIFY_BLOCK'] == $action)
{
return true;
}
BitrixImModelRelationTable::update($relation[$userId]['ID'], array('NOTIFY_BLOCK' => $action));
Recent::clearCache($userId);
//Counter::clearCache($userId);
if (BitrixMainLoader::includeModule('pull'))
{
$element = BitrixImModelRecentTable::getList([
'select' => ['USER_ID', 'ITEM_TYPE', 'ITEM_ID', 'UNREAD'],
'filter' => [
'=USER_ID' => $userId,
'=ITEM_TYPE' => $relation[$userId]['MESSAGE_TYPE'],
'=ITEM_ID' => $chatId
]
])->fetch();
$counter = $relation[$userId]['COUNTER'];
BitrixPullEvent::add($userId, Array(
'module_id' => 'im',
'command' => 'chatMuteNotify',
'params' => Array(
'chatId' => $chatId,
'dialogId' => 'chat'.$chatId,
'muted' => $action == 'Y',
'mute' => $action == 'Y', // TODO remove this later
'counter' => $counter,
'lines' => $element['ITEM_TYPE'] === self::TYPE_OPEN_LINE,
'unread' => ($element['UNREAD'] ?? 'N') === 'Y',
),
'extra' => BitrixImCommon::getPullExtra()
));
}
$chat = BitrixImChat::getById($chatId);
foreach(BitrixMainEventManager::getInstance()->findEventHandlers("im", "OnAfterChatMuteNotify") as $event)
{
ExecuteModuleEventEx($event, [[
'CHAT_ID' => $chatId,
'USER_ID' => $userId,
'MUTE' => $action == 'Y',
'CHAT' => $chat,
]]);
}
return true;
}