• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/internals/cleaner.php
  • Класс: BitrixDiskInternalsCleaner
  • Вызов: Cleaner::restoreMissingRootFolder
static function restoreMissingRootFolder()
{
	$connection = Application::getConnection();
	$driver = Driver::getInstance();
	$workLoad = false;

	$result = $connection->query("
		SELECT storage.ID, storage.ROOT_OBJECT_ID, storage.NAME, storage.ENTITY_TYPE, storage.ENTITY_ID, storage.SITE_ID 
		FROM b_disk_storage storage left join b_disk_object folder on storage.ROOT_OBJECT_ID = folder.ID 
		WHERE folder.ID is NULL
		LIMIT 10
	");
	while ($row = $result->fetch())
	{
		$workLoad = true;

		$storage = BitrixDiskStorage::getById($row['ID']);
		if ($storage instanceof BitrixDiskStorage)
		{
			$storage->delete(BitrixDiskSystemUser::SYSTEM_USER_ID);
		}
		else
		{
			$connection->queryExecute('DELETE FROM b_disk_storage WHERE ID = '.(int)$row['ID']);
		}

		if ($row['ENTITY_TYPE'] === BitrixDiskProxyTypeUser::class)
		{
			$storage = $driver->addUserStorage($row['ENTITY_ID']);
		}
		elseif ($row['ENTITY_TYPE'] === BitrixDiskProxyTypeGroup::class)
		{
			$storage = $driver->addGroupStorage($row['ENTITY_ID']);
		}
		elseif ($row['ENTITY_TYPE'] === BitrixDiskProxyTypeCommon::class)
		{
			$storage = $driver->addCommonStorage(array(
				'NAME' => $row['NAME'],
				'ENTITY_ID' => $row['ENTITY_ID'],
				'SITE_ID' => $row['SITE_ID'],
				'ENTITY_MISC_DATA' => $row['ENTITY_MISC_DATA'],
			), array());

			$data = unserialize($row['ENTITY_MISC_DATA'], ['allowed_classes' => false]);
			if(is_array($data) && !empty($data['BASE_URL']))
			{
				$storage->changeBaseUrl($data['BASE_URL']);
			}
		}
	}

	if (!$workLoad)
	{
		return '';
	}

	return self::class . '::restoreMissingRootFolder();';
}