• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/counter.php
  • Класс: BitrixTasksInternalsCounter
  • Вызов: Counter::getTaskCounters
public function getTaskCounters(int $taskId): ?array
{
	if (!is_null($this->taskCounters))
	{
		return array_key_exists($taskId, $this->taskCounters) ? $this->taskCounters[$taskId] : null;
	}

	$counters = [];

	$state = $this->getState();
	foreach ($state as $row)
	{
		$id = $row['TASK_ID'];
		if (!$taskId)
		{
			continue;
		}

		$type = $row['TYPE'];
		$value = (int)$row['VALUE'];

		if (!array_key_exists($id, $counters))
		{
			$counters[$id] = [
				CounterDictionary::COUNTER_MY_NEW_COMMENTS => 0,
				CounterDictionary::COUNTER_MY_EXPIRED => 0,
				CounterDictionary::COUNTER_MY_MUTED_EXPIRED => 0,
				CounterDictionary::COUNTER_MY_MUTED_NEW_COMMENTS => 0,
				CounterDictionary::COUNTER_GROUP_EXPIRED => 0,
				CounterDictionary::COUNTER_GROUP_COMMENTS => 0,
			];
		}

		if (in_array($type, CounterDictionary::MAP_COMMENTS))
		{
			$counters[$id][CounterDictionary::COUNTER_MY_NEW_COMMENTS] = $value;
		}

		if (in_array($type, CounterDictionary::MAP_MUTED_COMMENTS))
		{
			$counters[$id][CounterDictionary::COUNTER_MY_MUTED_NEW_COMMENTS] = $value;
		}

		if (in_array($type, CounterDictionary::MAP_EXPIRED))
		{
			$counters[$id][CounterDictionary::COUNTER_MY_EXPIRED] = $value;
		}

		if (in_array($type, CounterDictionary::MAP_MUTED_EXPIRED))
		{
			$counters[$id][CounterDictionary::COUNTER_MY_MUTED_EXPIRED] = $value;
		}

		if (in_array($type, [
			CounterDictionary::COUNTER_GROUP_COMMENTS,
			CounterDictionary::COUNTER_GROUP_EXPIRED
		]))
		{
			$counters[$id][$type] = $value;
		}
	}

	foreach ($counters as $id => $values)
	{
		$projectExpired = $values[CounterDictionary::COUNTER_GROUP_EXPIRED] - $values[CounterDictionary::COUNTER_MY_EXPIRED];
		$counters[$id][CounterDictionary::COUNTER_GROUP_EXPIRED] = ($projectExpired > 0) ? $projectExpired : 0;

		$projectComments = $values[CounterDictionary::COUNTER_GROUP_COMMENTS] - $values[CounterDictionary::COUNTER_MY_NEW_COMMENTS];
		$counters[$id][CounterDictionary::COUNTER_GROUP_COMMENTS] = ($projectComments > 0) ? $projectComments : 0;
	}

	$this->taskCounters = $counters;

	return array_key_exists($taskId, $this->taskCounters) ? $this->taskCounters[$taskId] : null;
}