- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/volume/event.php
- Класс: Bitrix\Crm\Volume\Event
- Вызов: Event::getEventFileMeasureQuery
public function getEventFileMeasureQuery($indicator = '')
{
if (!class_exists('\\Bitrix\\Crm\\Volume\\EventFileReferenceTable'))
{
$connection = Main\Application::getConnection();
$helper = $connection->getSqlHelper();
$eventTable = $helper->quote(Crm\EventTable::getTableName());
for ($i = 2, $auxiliaries = ['1 as n']; $i <= 50; $i++)
{
$auxiliaries[] = $i;
}
$auxiliarySql = implode(' union select ', $auxiliaries);
// analise b_crm_event with non empty field FILES
$querySql = "(
select
src.ID AS EVENT_ID,
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(src.fids, ' ', NS.n), ' ', -1) AS UNSIGNED) as FILE_ID
from (
select {$auxiliarySql}
) NS
inner join
(
select
@xml := replace(replace(replace(replace(e.FILES,'a:',''),';}',''),':{i:',''),';i:','') as xml,
CAST(ExtractValue(@xml, '/a/len') AS UNSIGNED) as len,
ExtractValue(@xml, '/a/i[position() mod 2 = 0]') as fids,
e.ID
from
{$eventTable} e
where
e.FILES IS NOT NULL
) src
ON NS.n <= src.len
)";
Main\ORM\Entity::compileEntity(
'EventFileReference',
array(
'EVENT_ID' => array('data_type' => 'integer'),
'FILE_ID' => array('data_type' => 'integer'),
new ORM\Fields\Relations\Reference(
'FILE',
Main\FileTable::class,
array('=this.FILE_ID' => 'ref.ID'),
array('join_type' => 'INNER')
),
),
array('table_name' => $querySql, 'namespace' => __NAMESPACE__)
);
}
/** @var Main\ORM\Query\Query $query */
$query = $this->prepareQuery($indicator);
$this->prepareFilter($query);
$fileRef = new ORM\Fields\Relations\Reference(
'FILEREF',
Crm\Volume\EventFileReferenceTable::class,
ORM\Query\Join::on('this.ID', 'ref.EVENT_ID'),
array('join_type' => 'INNER')
);
$query->registerRuntimeField($fileRef);
$file = new ORM\Fields\Relations\Reference(
'FILE',
Main\FileTable::class,
ORM\Query\Join::on('this.FILEREF.FILE_ID', 'ref.ID'),
array('join_type' => 'INNER')
);
$query->registerRuntimeField($file);
$fileSize = new ORM\Fields\ExpressionField('FILE_SIZE', 'SUM(IFNULL(%s, 0))', 'FILEREF.FILE.FILE_SIZE');
$fileCount = new ORM\Fields\ExpressionField('FILE_COUNT', 'COUNT(%s)', 'FILEREF.FILE.ID');
$query
->registerRuntimeField($fileSize)
->addSelect('FILE_SIZE')
->registerRuntimeField($fileCount)
->addSelect('FILE_COUNT');
return $query;
}