- Модуль: 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();';
}