• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/publicaction.php
  • Класс: BitrixLandingPublicAction
  • Вызов: PublicAction::getRestStat
static function getRestStat(bool $humanFormat = false, bool $onlyActive = true, array $additionalFilter = []): array
{
	$blockCnt = [];
	$fullStat = [
		self::REST_USAGE_TYPE_BLOCK => [],
		self::REST_USAGE_TYPE_PAGE => []
	];
	$activeValues = $onlyActive ? 'Y' : ['Y', 'N'];
	$filter = [
		'CODE' => 'repo_%',
		'=DELETED' => 'N',
		'=PUBLIC' => $activeValues,
		'=LANDING.ACTIVE' => $activeValues,
		'=LANDING.SITE.ACTIVE' => $activeValues
	];

	if (isset($additionalFilter['SITE_ID']))
	{
		$filter['LANDING.SITE_ID'] = $additionalFilter['SITE_ID'];
	}

	Rights::setOff();

	// gets all partners active block, placed on pages
	$res = InternalsBlockTable::getList([
		'select' => [
			'CODE', 'CNT'
		],
		'filter' => $filter,
		'group' => [
			'CODE'
		],
		'runtime' => [
			new BitrixMainEntityExpressionField('CNT', 'COUNT(*)')
		]
	]);
	while ($row = $res->fetch())
	{
		$blockCnt[mb_substr($row['CODE'], 5)] = $row['CNT'];
	}

	// gets apps for this blocks
	$res = Repo::getList([
		'select' => [
			'ID', 'APP_CODE'
		],
		'filter' => [
			'ID' => array_keys($blockCnt)
		]
 		]);
	while ($row = $res->fetch())
	{
		if (!$row['APP_CODE'])
		{
			continue;
		}
		if (!isset($fullStat[self::REST_USAGE_TYPE_BLOCK][$row['APP_CODE']]))
		{
			$fullStat[self::REST_USAGE_TYPE_BLOCK][$row['APP_CODE']] = 0;
		}
		$fullStat[self::REST_USAGE_TYPE_BLOCK][$row['APP_CODE']] += $blockCnt[$row['ID']];
	}
	unset($blockCnt);

	// gets additional partners active block with not empty INITIATOR_APP_CODE, placed on pages
	$filter['!CODE'] = $filter['CODE'];
	unset($filter['CODE']);
	$filter['!=INITIATOR_APP_CODE'] = null;
	$res = InternalsBlockTable::getList([
		'select' => [
			'INITIATOR_APP_CODE', 'CNT'
		],
		'filter' => $filter,
		'group' => [
			'INITIATOR_APP_CODE'
		],
		'runtime' => [
			new BitrixMainEntityExpressionField('CNT', 'COUNT(*)')
		]
	]);
	while ($row = $res->fetch())
	{
		$appCode = $row['INITIATOR_APP_CODE'];
		if (!isset($fullStat[self::REST_USAGE_TYPE_BLOCK][$appCode]))
		{
			$fullStat[self::REST_USAGE_TYPE_BLOCK][$appCode] = 0;
		}
		$fullStat[self::REST_USAGE_TYPE_BLOCK][$appCode] += $row['CNT'];
	}

	// gets all partners active pages
	$filter = [
		'=DELETED' => 'N',
		'=ACTIVE' => $activeValues,
		'=SITE.ACTIVE' => $activeValues,
		'!=INITIATOR_APP_CODE' => null
	];
	if (isset($additionalFilter['SITE_ID']))
	{
		$filter['SITE_ID'] = $additionalFilter['SITE_ID'];
	}
	$res = Landing::getList([
		'select' => [
			'INITIATOR_APP_CODE', 'CNT'
		],
		'filter' => $filter,
		'group' => [
			'INITIATOR_APP_CODE'
		],
		'runtime' => [
			new BitrixMainEntityExpressionField('CNT', 'COUNT(*)')
		]
	]);
	while ($row = $res->fetch())
	{
		$appCode = $row['INITIATOR_APP_CODE'];
		if (!isset($fullStat[self::REST_USAGE_TYPE_PAGE][$appCode]))
		{
			$fullStat[self::REST_USAGE_TYPE_PAGE][$appCode] = 0;
		}
		$fullStat[self::REST_USAGE_TYPE_PAGE][$appCode] += $row['CNT'];
	}

	// get client id for apps
	if (!$humanFormat && BitrixMainLoader::includeModule('rest'))
	{
		$appsCode = array_merge(
			array_keys($fullStat[self::REST_USAGE_TYPE_BLOCK]),
			array_keys($fullStat[self::REST_USAGE_TYPE_PAGE])
		);
		$fullStatNew = [
			self::REST_USAGE_TYPE_BLOCK => [],
			self::REST_USAGE_TYPE_PAGE => []
		];
		if ($appsCode)
		{
			$appsCode = array_unique($appsCode);
			$res = AppTable::getList([
				'select' => [
					'CLIENT_ID', 'CODE'
				],
				'filter' => [
					'=CODE' => $appsCode
				]
			]);
			while ($row = $res->fetch())
			{
				foreach ($fullStat as $code => $stat)
				{
					if (isset($stat[$row['CODE']]))
					{
						$fullStatNew[$code][$row['CLIENT_ID']] = $stat[$row['CODE']];
					}
				}
			}
		}

		return $fullStatNew;
	}

	Rights::setOn();

	return $fullStat;
}