• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/classes/general/taskservice.php
  • Класс: CBPTaskService
  • Вызов: CBPTaskService::getCounters
static function getCounters($userId)
{
	global $DB;

	$counters = array('*' => 0);
	$cache = BitrixMainApplication::getInstance()->getManagedCache();
	$cacheTag = self::COUNTERS_CACHE_TAG_PREFIX.$userId;
	if ($cache->read(3600*24*7, $cacheTag))
	{
		$counters = (array) $cache->get($cacheTag);
	}
	else
	{
		$query =
			"SELECT WI.MODULE_ID AS MODULE_ID, WI.ENTITY AS ENTITY, COUNT('x') AS CNT ".
			'FROM b_bp_task T '.
			'	INNER JOIN b_bp_task_user TU ON (T.ID = TU.TASK_ID) '.
			'	INNER JOIN b_bp_workflow_instance WI ON (T.WORKFLOW_ID = WI.ID) '.
			'WHERE TU.STATUS = '.(int)CBPTaskUserStatus::Waiting.' '.
			'	AND TU.USER_ID = '.(int)$userId.' '.
			'GROUP BY MODULE_ID, ENTITY';

		$iterator = $DB->Query($query, true);
		if ($iterator)
		{
			while ($row = $iterator->fetch())
			{
				$cnt = (int)$row['CNT'];
				$counters[$row['MODULE_ID']][$row['ENTITY']] = $cnt;
				if (!isset($counters[$row['MODULE_ID']]['*']))
					$counters[$row['MODULE_ID']]['*'] = 0;
				$counters[$row['MODULE_ID']]['*'] += $cnt;
				$counters['*'] += $cnt;
			}
			$cache->set($cacheTag, $counters);
		}
	}
	return $counters;
}