Files
urbackup/install/uninstall.php
T

88 lines
2.7 KiB
PHP
Raw Normal View History

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;
}