- Модуль: 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;
}