- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/integration/forum/task/usertopic.php
- Класс: BitrixTasksIntegrationForumTaskUserTopic
- Вызов: UserTopic::onReadAll
static function onReadAll($currentUserId, $userJoin = '', $groupCondition = ''): void
{
if (!static::includeModule())
{
return;
}
$connection = Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$forumId = Comment::getForumId();
$lastVisit = $sqlHelper->convertToDbDateTime(new DateTime());
$sql = "
SELECT
T.FORUM_TOPIC_ID
FROM b_tasks T
INNER JOIN b_tasks_scorer TS
ON TS.TASK_ID = T.ID
AND TS.USER_ID = {$currentUserId}
{$userJoin}
WHERE
TS.USER_ID = {$currentUserId}
{$groupCondition}
AND TS.TYPE IN (
'".CounterDictionary::COUNTER_MY_NEW_COMMENTS."',
'".CounterDictionary::COUNTER_MY_MUTED_NEW_COMMENTS."',
'".CounterDictionary::COUNTER_ACCOMPLICES_NEW_COMMENTS."',
'".CounterDictionary::COUNTER_ACCOMPLICES_MUTED_NEW_COMMENTS."',
'".CounterDictionary::COUNTER_AUDITOR_NEW_COMMENTS."',
'".CounterDictionary::COUNTER_AUDITOR_MUTED_NEW_COMMENTS."',
'".CounterDictionary::COUNTER_ORIGINATOR_NEW_COMMENTS."',
'".CounterDictionary::COUNTER_ORIGINATOR_MUTED_NEW_COMMENTS."',
'".CounterDictionary::COUNTER_GROUP_COMMENTS."'
)
";
$res = $connection->query($sql);
$inserts = [];
while ($row = $res->fetch())
{
$inserts[] = '(' . (int)$row['FORUM_TOPIC_ID'] . ', ' . $currentUserId . ', ' . $forumId . ', ' . $lastVisit . ')';
}
$chunks = array_chunk($inserts, self::STEP_LIMIT);
unset($inserts);
foreach ($chunks as $chunk)
{
$sql = "
INSERT INTO b_forum_user_topic (TOPIC_ID, USER_ID, FORUM_ID, LAST_VISIT)
VALUES " . implode(',', $chunk) . "
ON DUPLICATE KEY UPDATE LAST_VISIT = {$lastVisit}
";
$connection->query($sql);
}
}