- Модуль: translate
- Путь к файлу: ~/bitrix/modules/translate/lib/index/aggregate.php
- Класс: BitrixTranslateIndexAggregate
- Вызов: Aggregate::buildAggregateQuery
static function buildAggregateQuery(array $params): MainORMQueryQuery
{
if (empty($params['GROUP_BY']))
{
throw new MainArgumentException('Parameter GROUP_BY has not defined');
}
$query = self::buildQuery($params);
$query->addSelect($params['GROUP_BY']);
$query->addGroup($params['GROUP_BY']);
if (empty($params['CURRENT_LANG']))
{
throw new MainArgumentException('Parameter CURRENT_LANG has not defined');
}
$currentLanguage = $params['CURRENT_LANG'];
if (empty($params['LANGUAGES']))
{
$languages = TranslateConfig::getEnabledLanguages();
}
else
{
$languages = $params['LANGUAGES'];
}
usort($languages, function ($langId) use ($currentLanguage) {
return $langId === $currentLanguage ? 0 : 1;
});
$languageUpperKeys = array_combine($languages, array_map('mb_strtoupper', $languages));
foreach ($languageUpperKeys as $langId => $alias)
{
// phrase count
$query->addSelect(new MainORMFieldsExpressionField("{$alias}_CNT", "SUM({$alias}_CNT)"));
// file count
$query->addSelect(new MainORMFieldsExpressionField("{$alias}_FILE_CNT", "SUM({$alias}_FILE_CNT)"));
// file excess
$query->addSelect(new MainORMFieldsExpressionField("{$alias}_FILE_EXCESS", "SUM({$alias}_FILE_EXCESS)"));
// phrase excess
$query->addSelect(new MainORMFieldsExpressionField("{$alias}_EXCESS", "SUM({$alias}_EXCESS)"));
if ($langId != $currentLanguage)
{
// file deficiency
$query->addSelect(new MainORMFieldsExpressionField("{$alias}_FILE_DEFICIENCY", "SUM({$alias}_FILE_DEFICIENCY)"));
// phrase deficiency
$query->addSelect(new MainORMFieldsExpressionField("{$alias}_DEFICIENCY", "SUM({$alias}_DEFICIENCY)"));
}
}
return $query;
}