2026-05-20 09:20:27 +02:00
|
|
|
<?php
|
|
|
|
|
|
2026-05-21 10:54:04 +02:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
2026-05-20 09:20:27 +02:00
|
|
|
/**
|
|
|
|
|
* -------------------------------------------------------------------------
|
|
|
|
|
* UrBackup plugin for GLPI
|
|
|
|
|
* -------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
use GlpiPlugin\Urbackup\Profile;
|
|
|
|
|
|
|
|
|
|
if (!defined('GLPI_ROOT')) {
|
2026-05-21 11:08:15 +02:00
|
|
|
die(__('Sorry. You cannot access this file directly.', 'urbackup'));
|
2026-05-20 09:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
2026-08-07 14:27:33 +02:00
|
|
|
require_once __DIR__ . '/install.php';
|
|
|
|
|
|
2026-09-02 13:14:19 +02:00
|
|
|
/**
|
|
|
|
|
* Remove the UrBackup capacity reference from Asset Definitions.
|
|
|
|
|
*
|
|
|
|
|
* When the plugin is uninstalled, the `UrBackupCapacity` class no longer exists,
|
|
|
|
|
* but its reference may remain stored in the `capacities` JSON column of
|
|
|
|
|
* `glpi_assetdefinitions`. GLPI core safely ignores such orphaned capacities,
|
|
|
|
|
* but we clean them up so the database does not keep stale references.
|
|
|
|
|
*
|
|
|
|
|
* @param Migration $migration Migration instance
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
function plugin_urbackup_uninstall_cleanup_capacities(Migration $migration, \DBmysql $db): void
|
|
|
|
|
{
|
|
|
|
|
$capacity_class = \GlpiPlugin\Urbackup\Capacity\UrBackupCapacity::class;
|
|
|
|
|
$table = 'glpi_assetdefinitions';
|
|
|
|
|
|
|
|
|
|
if (!$db->tableExists($table)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($db->request(['FROM' => $table, 'WHERE' => ['capacities' => ['<>' => '[]']]]) as $row) {
|
|
|
|
|
$decoded = json_decode((string) $row['capacities'], true);
|
|
|
|
|
if (!is_array($decoded)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$filtered = array_values(array_filter($decoded, static function ($spec) use ($capacity_class): bool {
|
|
|
|
|
return is_array($spec) && (string) ($spec['name'] ?? '') !== $capacity_class;
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
if (count($filtered) === count($decoded)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$db->update($table, [
|
|
|
|
|
'capacities' => json_encode($filtered),
|
|
|
|
|
], ['id' => (int) $row['id']]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$migration->displayMessage(__('UrBackup capacity removed from asset definitions', 'urbackup'));
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-20 09:20:27 +02:00
|
|
|
/**
|
|
|
|
|
* Uninstall plugin.
|
|
|
|
|
*
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
function plugin_urbackup_uninstall_process(): bool
|
|
|
|
|
{
|
|
|
|
|
$migration = new Migration(PLUGIN_URBACKUP_VERSION);
|
|
|
|
|
|
|
|
|
|
$migration->displayMessage(__('UrBackup plugin uninstallation', 'urbackup'));
|
|
|
|
|
|
|
|
|
|
Profile::uninstallRights();
|
|
|
|
|
|
2026-09-02 13:14:19 +02:00
|
|
|
global $DB;
|
|
|
|
|
plugin_urbackup_uninstall_cleanup_capacities($migration, $DB);
|
|
|
|
|
|
2026-05-20 09:20:27 +02:00
|
|
|
plugin_urbackup_migration_drop_table($migration, 'glpi_plugin_urbackup_profiles');
|
|
|
|
|
plugin_urbackup_migration_drop_table($migration, 'glpi_plugin_urbackup_serverassets');
|
|
|
|
|
plugin_urbackup_migration_drop_table($migration, 'glpi_plugin_urbackup_servers');
|
|
|
|
|
plugin_urbackup_migration_drop_table($migration, 'glpi_plugin_urbackup_assettypes');
|
|
|
|
|
plugin_urbackup_migration_drop_table($migration, 'glpi_plugin_urbackup_configs');
|
|
|
|
|
|
|
|
|
|
$migration->executeMigration();
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|