- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/volume/module/module.php
- Класс: BitrixDiskVolumeModuleindicator
- Вызов: indicator::prepareUserFieldQuery
protected function prepareUserFieldQuery($entityClass, array $userField, array $relation = null)
{
$connection = Application::getConnection();
/** @var MainORMDataDataManager $entityClass */
$ufName = $entityClass::getUfId();
$ufType = $userField['USER_TYPE_ID'];
$relationSql = '';
$relationSelectSql = '';
$relationGroupBySql = '';
$relationGroupSelectSql = '';
if (is_array($relation))
{
$relationSelect = [];
$relationGroupBy = [];
$relationGroupSelect = [];
foreach ($relation['select'] as $alias => $field)
{
$relationSelect[] = "REL.$field as $alias";
$relationGroupBy[] = "flsrc.$alias";
$relationGroupSelect[] = "flsrc.$alias";
}
$relationSelectSql = ', '. implode(', ', $relationSelect);
$relationGroupBySql = 'GROUP BY '. implode(', ', $relationGroupBy);
$relationGroupSelectSql = ', '. implode(', ', $relationGroupSelect);
$relationSql = ' INNER JOIN '. $relation['table']. ' REL on REL.'. $relation['relation'] .' = ufsrc.VALUE_ID ';
}
$querySql = '';
if ($userField['MULTIPLE'] == 'Y')
{
$ufId = $userField['ID'];
$utmEntityTableName = 'b_utm_'.mb_strtolower($ufName);
if ($connection->isTableExists($utmEntityTableName))
{
switch ($ufType)
{
case DiskUfFileUserType::USER_TYPE_ID:
{
$querySql = "
SELECT
SUM(FILE_SIZE) as FILE_SIZE,
COUNT(*) as FILE_COUNT,
SUM(FILE_SIZE) as DISK_SIZE,
COUNT(*) as DISK_COUNT,
COUNT(*) as VERSION_COUNT
{$relationGroupSelectSql}
FROM
(
SELECT DISTINCT
f.ID,
f.FILE_SIZE
{$relationSelectSql}
FROM
{$utmEntityTableName} ufsrc
{$relationSql}
INNER JOIN b_disk_attached_object attached
ON attached.ID = ufsrc.VALUE_INT
AND ufsrc.FIELD_ID = '{$ufId}'
INNER JOIN b_disk_object files
ON files.ID = attached.OBJECT_ID
AND files.ID = files.REAL_OBJECT_ID
AND files.TYPE = '".ObjectTable::TYPE_FILE."'
INNER JOIN b_file f
ON f.ID = files.FILE_ID
) flsrc
{$relationGroupBySql}
ORDER BY NULL
";
break;
}
case DiskUfVersionUserType::USER_TYPE_ID:
{
$querySql = "
SELECT
SUM(FILE_SIZE) as FILE_SIZE,
COUNT(*) as FILE_COUNT,
SUM(FILE_SIZE) as DISK_SIZE,
COUNT(*) as DISK_COUNT,
COUNT(*) as VERSION_COUNT
{$relationGroupSelectSql}
FROM
(
SELECT DISTINCT
f.ID,
f.FILE_SIZE
{$relationSelectSql}
FROM
{$utmEntityTableName} ufsrc
{$relationSql}
INNER JOIN b_disk_attached_object attached
ON attached.ID = ufsrc.VALUE_INT
AND ufsrc.FIELD_ID = '{$ufId}'
INNER JOIN b_disk_version versions
ON versions.ID = attached.VERSION_ID
INNER JOIN b_disk_object files
ON files.ID = versions.OBJECT_ID
AND files.ID = attached.OBJECT_ID
AND files.ID = files.REAL_OBJECT_ID
AND files.TYPE = '".ObjectTable::TYPE_FILE."'
INNER JOIN b_file f
ON f.ID = versions.FILE_ID
) flsrc
{$relationGroupBySql}
ORDER BY NULL
";
break;
}
case CUserTypeFile::USER_TYPE_ID:
{
$querySql = "
SELECT
SUM(FILE_SIZE) as FILE_SIZE,
COUNT(*) as FILE_COUNT,
0 as DISK_SIZE,
0 as DISK_COUNT,
0 as VERSION_COUNT
{$relationGroupSelectSql}
FROM
(
SELECT DISTINCT
f.ID,
f.FILE_SIZE
{$relationSelectSql}
FROM
{$utmEntityTableName} ufsrc
{$relationSql}
INNER JOIN b_file f
ON f.ID = ufsrc.VALUE_INT
AND ufsrc.FIELD_ID = '{$ufId}'
) flsrc
{$relationGroupBySql}
ORDER BY NULL
";
break;
}
}
}
}
else
{
$ufEntityTableFieldName = $userField['FIELD_NAME'];
$utsEntityTableName = 'b_uts_'.mb_strtolower($ufName);
if ($connection->isTableExists($utsEntityTableName))
{
switch ($ufType)
{
case DiskUfFileUserType::USER_TYPE_ID:
{
$querySql = "
SELECT
SUM(FILE_SIZE) as FILE_SIZE,
COUNT(*) as FILE_COUNT,
SUM(FILE_SIZE) as DISK_SIZE,
COUNT(*) as DISK_COUNT,
COUNT(*) as VERSION_COUNT
{$relationGroupSelectSql}
FROM
(
SELECT DISTINCT
f.ID,
f.FILE_SIZE
{$relationSelectSql}
FROM
{$utsEntityTableName} ufsrc
{$relationSql}
INNER JOIN b_disk_attached_object attached
ON attached.ID = cast(ufsrc.{$ufEntityTableFieldName} as UNSIGNED)
and ufsrc.{$ufEntityTableFieldName} REGEXP '^[0-9]+$'
INNER JOIN b_disk_object files
ON files.ID = attached.OBJECT_ID
AND files.ID = files.REAL_OBJECT_ID
AND files.TYPE = '".ObjectTable::TYPE_FILE."'
INNER JOIN b_file f
ON f.ID = files.FILE_ID
) flsrc
{$relationGroupBySql}
ORDER BY NULL
";
break;
}
case DiskUfVersionUserType::USER_TYPE_ID:
{
$querySql = "
SELECT
SUM(FILE_SIZE) as FILE_SIZE,
COUNT(*) as FILE_COUNT,
SUM(FILE_SIZE) as DISK_SIZE,
COUNT(*) as DISK_COUNT,
COUNT(*) as VERSION_COUNT
{$relationGroupSelectSql}
FROM
(
SELECT DISTINCT
f.ID,
f.FILE_SIZE
{$relationSelectSql}
FROM
{$utsEntityTableName} ufsrc
{$relationSql}
INNER JOIN b_disk_attached_object attached
ON attached.ID = cast(ufsrc.{$ufEntityTableFieldName} as UNSIGNED)
and ufsrc.{$ufEntityTableFieldName} REGEXP '^[0-9]+$'
INNER JOIN b_disk_version versions
ON versions.ID = attached.VERSION_ID
INNER JOIN b_disk_object files
ON files.ID = versions.OBJECT_ID
AND files.ID = attached.OBJECT_ID
AND files.ID = files.REAL_OBJECT_ID
AND files.TYPE = '".ObjectTable::TYPE_FILE."'
INNER JOIN b_file f
ON f.ID = versions.FILE_ID
) flsrc
{$relationGroupBySql}
ORDER BY NULL
";
break;
}
case CUserTypeFile::USER_TYPE_ID:
{
$querySql = "
SELECT
SUM(FILE_SIZE) as FILE_SIZE,
COUNT(*) as FILE_COUNT,
0 as DISK_SIZE,
0 as DISK_COUNT,
0 as VERSION_COUNT
{$relationGroupSelectSql}
FROM
(
SELECT DISTINCT
f.ID,
f.FILE_SIZE
{$relationSelectSql}
FROM
{$utsEntityTableName} ufsrc
{$relationSql}
INNER JOIN b_file f
ON f.ID = cast(ufsrc.{$ufEntityTableFieldName} as UNSIGNED)
and ufsrc.{$ufEntityTableFieldName} REGEXP '^[0-9]+$'
) flsrc
{$relationGroupBySql}
ORDER BY NULL
";
break;
}
}
}
}
return $querySql;
}