• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/component/workgrouplist/counter.php
  • Класс: BitrixSocialnetworkComponentWorkgroupListCounter
  • Вызов: Counter::getCounterData
static function getCounterData(array $params = []): array
{
	static $tasksCounterCache = [];

	$result = [];

	$mode = ($params['mode'] ?? WorkgroupList::MODE_COMMON);

	$groupIdList = $params['groupIdList'] ?? [];
	if (empty($groupIdList))
	{
		return $result;
	}

	$scrumIdList = $params['scrumIdList'] ?? [];

	$currentUserId = static::getCurrentUserId();
	if ($currentUserId <= 0)
	{
		return $result;
	}

	$tasksModuleInstalled = Loader::includeModule('tasks');

	if (in_array($mode, WorkgroupList::getTasksModeList(), true))
	{
		$projectCounter = (
			$mode === WorkgroupList::MODE_TASKS_SCRUM
				? new ScrumCounter($currentUserId)
				: new ProjectCounter($currentUserId)
			);

		foreach ($groupIdList as $groupId)
		{
			$counterData = $projectCounter->getRowCounter($groupId);

			$result[$groupId] = [
				'all' => [
					'VALUE' => $counterData['VALUE'],
					'COLOR' => $counterData['COLOR'],
				],
			];
		}
	}
	else
	{
		$counters = CUserCounter::getValues($currentUserId);
		if (!isset($tasksCounterCache[$currentUserId]))
		{
			$tasksCounterCache[$currentUserId] = TasksCounter::getInstance($currentUserId);
		}

		$tasksCounter = $tasksCounterCache[$currentUserId];

		foreach ($groupIdList as $groupId)
		{
			$counterKey = CUserCounter::LIVEFEED_CODE . 'SG' . $groupId;

			$result[$groupId] = [
				'livefeed' => [
					'VALUE' => (int)($counters[$counterKey] ?? 0),
				],
			];

			if ($tasksModuleInstalled)
			{
				$result[$groupId]['tasks_expired'] = [
					'VALUE' => (
						in_array($groupId, $scrumIdList, true)
							? 0
							: $tasksCounter->get(TasksCounterCounterDictionary::COUNTER_EXPIRED, $groupId)
					)
				];

				$result[$groupId]['tasks_new_comments'] = [
					'VALUE' => $tasksCounter->get(TasksCounterCounterDictionary::COUNTER_NEW_COMMENTS, $groupId),
				];
			}
		}
	}

	return $result;
}