• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/internals/cleaner.php
  • Класс: BitrixDiskInternalsCleaner
  • Вызов: Cleaner::deleteTrashCanFilesByTtl
static function deleteTrashCanFilesByTtl($type = self::DELETE_TYPE_PORTION, $limit = 10): void
{
	$ttl = Configuration::getTrashCanTtl();
	if ($ttl === -1)
	{
		return;
	}

	$portion = $limit;
	if ($type === self::DELETE_TYPE_TIME)
	{
		$portion = 100;
	}

	$connection = Application::getConnection();
	$ttlTime = $connection->getSqlHelper()->convertToDbDateTime(
		DateTime::createFromTimestamp(time() - $ttl * 86400)
	);
	$deletedTypeNone = ObjectTable::DELETED_TYPE_NONE;
	$fileType = ObjectTable::TYPE_FILE;

	$result = $connection->query( "
		SELECT obj.ID
		FROM b_disk_object obj
		INNER JOIN b_disk_deleted_log_v2 log ON log.OBJECT_ID = obj.ID
		WHERE
		    obj.STORAGE_ID = log.STORAGE_ID AND
		    log.CREATE_TIME < {$ttlTime} AND
		    obj.DELETED_TYPE > {$deletedTypeNone} AND 
		    obj.TYPE = {$fileType}
		LIMIT {$portion}
	");

	$objectIds = [];
	foreach ($result as $row)
	{
		$objectIds[] = $row['ID'];
	}

	if (!$objectIds)
	{
		return;
	}

	$objects = BaseObject::getModelList([
		'filter' => [
			'@ID' => $objectIds,
		]
	]);

	$startTime = time();
	foreach ($objects as $object)
	{
		if ($type === self::DELETE_TYPE_TIME && (time() - $startTime > $limit))
		{
			break;
		}

		if ($object instanceof File)
		{
			$object->delete(SystemUser::SYSTEM_USER_ID);
		}
	}
}