• Модуль: 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);
	}
}