- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/volume/cleaner.php
- Класс: BitrixDiskVolumeCleaner
- Вызов: Cleaner::deleteFileUnnecessaryVersion
public function deleteFileUnnecessaryVersion(DiskFile $file, array $additionalFilter = []): bool
{
$subTaskDone = true;
$filter = [
'=OBJECT_ID' => $file->getId(),
];
if (count($additionalFilter) > 0)
{
$filter = array_merge($filter, $additionalFilter);
}
$versionList = DiskVersion::getList([
'filter' => $filter,
'select' => ['ID']
]);
foreach ($versionList as $row)
{
$versionId = $row['ID'];
/** @var DiskVersion $version */
$version = DiskVersion::getById($versionId);
if(!$version instanceof DiskVersion)
{
//$this->collectError(new Error('Version '.$versionId.' was not found'));
continue;
}
// is a head
if ($version->getFileId() == $file->getFileId())
{
//$this->collectError(new Error('Version '.$versionId.' is a head'));
continue;
}
// attached_object
$attachedList = DiskAttachedObject::getList([
'filter' => [
'=OBJECT_ID' => $file->getId(),
'=VERSION_ID' => $version->getId(),
],
'select' => ['ID'],
'limit' => 1,
]);
if($attachedList->getSelectedRowsCount() > 0)
{
$this->collectError(new Error('Version '.$versionId.' has attachments'));
continue;
}
// external_link
$externalLinkList = DiskExternalLink::getList([
'filter' => [
'=OBJECT_ID' => $file->getId(),
'=VERSION_ID' => $version->getId(),
'!TYPE' => DiskExternalLink::TYPE_AUTO,
],
'select' => ['ID'],
'limit' => 1,
]);
if($externalLinkList->getSelectedRowsCount() > 0)
{
$this->collectError(new Error('Version '.$versionId.' has external links'));
continue;
}
$task = $this->instanceTask();
$logData = $task->collectLogData($version);
try
{
// drop
if (!$version->delete($task->getOwnerId()))
{
$this->collectError($version->getErrors());
}
else
{
$task->log($logData, __FUNCTION__);
$task->increaseDroppedVersionCount();
}
}
catch (MainSystemException $exception)
{
$this->collectError(new Error($exception->getMessage(), $exception->getCode()));
}
if (!$this->checkTimeEnd())
{
$subTaskDone = false;
break;
}
}
return $subTaskDone;
}