• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/counter/event/garbagecollector.php
  • Класс: BitrixTasksInternalsCounterEventGarbageCollector
  • Вызов: GarbageCollector::readProjectComments
private function readProjectComments(int $userId)
{
	$sqlHelper = Application::getConnection()->getSqlHelper();
	$viewedTime = $this->viewedTime;
	$viewedTime = $sqlHelper->convertToDbDateTime($viewedTime);

	$sql = "
		SELECT 
		    ts.TASK_ID,
		    t.FORUM_TOPIC_ID
		FROM b_tasks_scorer ts
		LEFT JOIN b_tasks_viewed tv
			ON tv.TASK_ID = ts.TASK_ID
			AND tv.USER_ID = ts.USER_ID
		LEFT JOIN b_tasks t
			ON t.ID = ts.TASK_ID
		WHERE
			ts.USER_ID = ".$userId."
			AND ts.TYPE = '".CounterDictionary::COUNTER_GROUP_COMMENTS."'
			AND
			(
				tv.VIEWED_DATE < ".$viewedTime."
				or tv.VIEWED_DATE is null
			)
		ORDER BY ts.TASK_ID
		LIMIT ". self::STEP_LIMIT ."
	";

	$res = Application::getConnection()->query($sql);
	$rows = $res->fetchAll();

	if (empty($rows))
	{
		return;
	}

	$taskIds = array_column($rows, 'TASK_ID');
	$topicIds = array_column($rows, 'FORUM_TOPIC_ID');

	$this->readTasks($userId, $taskIds);
	$this->readTopics($userId, $topicIds);

	(new CounterController($userId))->recount(CounterDictionary::COUNTER_GROUP_COMMENTS, $taskIds);
}