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