- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/recent.php
- Класс: BitrixImRecent
- Вызов: Recent::unread
static function unread($dialogId, $unread, $userId = null, ?int $markedId = null)
{
$userId = BitrixImCommon::getUserId($userId);
if (!$userId)
{
return false;
}
$unread = $unread === true? 'Y': 'N';
$id = $dialogId;
if (mb_substr($dialogId, 0, 4) === 'chat')
{
$itemTypes = BitrixImChat::getTypes();
$id = mb_substr($dialogId, 4);
}
else
{
$itemTypes = IM_MESSAGE_PRIVATE;
}
$element = BitrixImModelRecentTable::getList([
'select' => ['USER_ID', 'ITEM_TYPE', 'ITEM_ID', 'UNREAD', 'MUTED' => 'RELATION.NOTIFY_BLOCK', 'ITEM_CID', 'MARKED_ID'],
'filter' => [
'=USER_ID' => $userId,
'=ITEM_TYPE' => $itemTypes,
'=ITEM_ID' => $id
]
])->fetch();
if (!$element)
{
return false;
}
if ($element['UNREAD'] === $unread && !isset($markedId))
{
return true;
}
$updatedFields = [
'UNREAD' => $unread,
'DATE_UPDATE' => new BitrixMainTypeDateTime(),
];
if ($unread === 'N')
{
$markedId = 0;
}
if (isset($markedId))
{
$updatedFields['MARKED_ID'] = $markedId;
}
BitrixImModelRecentTable::update(
[
'USER_ID' => $element['USER_ID'],
'ITEM_TYPE' => $element['ITEM_TYPE'],
'ITEM_ID' => $element['ITEM_ID'],
],
$updatedFields
);
self::clearCache($element['USER_ID']);
//BitrixImCounter::clearCache($element['USER_ID']);
CounterService::clearCache((int)$element['USER_ID']);
$pullInclude = BitrixMainLoader::includeModule("pull");
if ($pullInclude)
{
$chatId = (int)$element['ITEM_CID'];
$readService = new ReadService($userId);
$counter = $readService->getCounterService()->getByChat($chatId);
//$readService->sendPush($chatId, [$userId], $counter, $time);
BitrixPullEvent::add(
$userId,
[
'module_id' => 'im',
'command' => 'chatUnread',
'expiry' => 3600,
'params' => [
'chatId' => $chatId,
'dialogId' => $dialogId,
'active' => $unread === 'Y',
'muted' => $element['MUTED'] === 'Y',
'counter' => $counter,
'markedId' => $markedId ?? $element['MARKED_ID'],
'lines' => $element['ITEM_TYPE'] === IM_MESSAGE_OPEN_LINE,
],
'extra' => BitrixImCommon::getPullExtra()
]
);
}
return true;
}