• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/volume/module/webdav.php
  • Класс: BitrixDiskVolumeModuleWebdav
  • Вызов: Webdav::measure
public function measure(array $collectData = []): self
{
	if (!$this->isMeasureAvailable())
	{
		$this->addError(new BitrixMainError('', self::ERROR_MEASURE_UNAVAILABLE));
		return $this;
	}

	$connection = BitrixMainApplication::getConnection();
	$indicatorType = $connection->getSqlHelper()->forSql(static::className());
	$indicatorIblockType = $connection->getSqlHelper()->forSql(VolumeModuleIblock::className());
	$ownerId = (string)$this->getOwner();

	$includeIblockIds = [];

	$webdavIblockList = $this->getIblockList();
	if (count($webdavIblockList) > 0)
	{
		foreach ($webdavIblockList as $iblock)
		{
			$includeIblockIds[] = $iblock['ID'];
		}
	}

	$agr = new VolumeModuleIblock();
	$agr
		->setOwner($this->getOwner())
		->addFilter('@IBLOCK_ID', $includeIblockIds)
		->purify()
		->measure();


	$querySql = "
		SELECT 
			'{$indicatorType}' as INDICATOR_TYPE,
			{$ownerId} as OWNER_ID,
			". $connection->getSqlHelper()->getCurrentDateTimeFunction(). " as CREATE_TIME,
			SUM(FILE_SIZE),
			SUM(FILE_COUNT)
		FROM 
			b_disk_volume
		WHERE 
			INDICATOR_TYPE = '{$indicatorIblockType}'
			AND IBLOCK_ID IN(". implode(',', $includeIblockIds) .")
	";

	$columnList = VolumeQueryHelper::prepareInsert(
		[
			'INDICATOR_TYPE',
			'OWNER_ID',
			'CREATE_TIME',
			'FILE_SIZE',
			'FILE_COUNT',
		],
		$this->getSelect()
	);

	$tableName = VolumeTable::getTableName();

	$connection->queryExecute("INSERT INTO {$tableName} ({$columnList}) {$querySql}");

	return $this;
}