Files
urbackup/front/asset.form.php
T

218 lines
7.4 KiB
PHP
Raw Normal View History

2026-05-20 09:20:27 +02:00
<?php
/**
* -------------------------------------------------------------------------
* UrBackup plugin for GLPI
* -------------------------------------------------------------------------
*/
use GlpiPlugin\Urbackup\AssetTab;
use GlpiPlugin\Urbackup\Config;
use GlpiPlugin\Urbackup\Profile;
use GlpiPlugin\Urbackup\ServerAsset;
if (!defined('GLPI_ROOT')) {
define('GLPI_ROOT', dirname(__DIR__, 4));
}
include_once GLPI_ROOT . '/inc/includes.php';
if (!Profile::canCurrentUser(READ)) {
Html::displayRightError();
}
$itemtype = (string) ($_POST['itemtype'] ?? $_GET['itemtype'] ?? '');
$items_id = (int) ($_POST['items_id'] ?? $_GET['items_id'] ?? 0);
if ($itemtype === '' || $items_id <= 0) {
Html::displayValidationError(__('Invalid parameters'));
}
if (!in_array($itemtype, Config::getEnabledItemtypes(), true)) {
Html::displayValidationError(__('Item type not enabled for UrBackup'));
}
$item = getItemForItemtype($itemtype);
if (!$item || !$item->getFromDB($items_id)) {
Html::displayNotFoundError();
}
if (isset($_POST['connect'])) {
if (!Profile::canCurrentUser(UPDATE) && !Profile::canCurrentUser(CREATE)) {
Html::displayRightError();
}
$server_id = (int) ($_POST['plugin_urbackup_servers_id'] ?? 0);
if ($server_id <= 0) {
Html::displayValidationError(__('No server selected'));
}
$link = ServerAsset::getLinkForAsset($itemtype, $items_id);
if ($link !== null) {
Html::displayValidationError(__('Asset is already linked to a server'));
}
$result = ServerAsset::createForAsset($itemtype, $items_id, $server_id);
if ($result) {
$item->getFromDB($items_id);
Html::redirect($item->getLinkURL());
} else {
Html::displayValidationError(__('Failed to link asset to server'));
}
}
if (isset($_POST['disconnect'])) {
if (!Profile::canCurrentUser(UPDATE) && !Profile::canCurrentUser(DELETE)) {
Html::displayRightError();
}
global $DB;
$link = ServerAsset::getLinkForAsset($itemtype, $items_id, false);
if ($link === null) {
Html::displayValidationError(__('Asset is not linked to any server'));
}
$result = $DB->delete('glpi_plugin_urbackup_serverassets', ['id' => (int) $link['id']]);
if ($result) {
$item->getFromDB($items_id);
Html::redirect($item->getLinkURL());
} else {
Html::displayValidationError(__('Failed to disconnect asset from server'));
}
}
if (isset($_POST['start_file_backup'])) {
if (!Profile::canCurrentUser(UPDATE)) {
Html::displayRightError();
}
AssetTab::startBackup($item, 'file');
Html::redirect($item->getFormURL());
}
if (isset($_POST['start_image_backup'])) {
if (!Profile::canCurrentUser(UPDATE)) {
Html::displayRightError();
}
AssetTab::startBackup($item, 'image');
Html::redirect($item->getFormURL());
}
if (isset($_POST['execute'])) {
$action = $_POST['urbackup_action'] ?? '';
switch ($action) {
case 'incremental_file_backup':
if (Profile::canCurrentUser(UPDATE)) {
AssetTab::startBackup($item, 'file');
}
break;
case 'full_file_backup':
if (Profile::canCurrentUser(UPDATE)) {
$link = ServerAsset::getLinkForAsset($itemtype, $items_id, false);
if ($link !== null) {
$server = new \GlpiPlugin\Urbackup\Server();
$server->getFromDB((int) $link['plugin_urbackup_servers_id']);
$client_name = ServerAsset::getAssetName($itemtype, $items_id);
try {
$api = new \GlpiPlugin\Urbackup\UrbackupApiClient($server);
$api->startFullFileBackup($client_name);
} catch (\Throwable $e) {
// ignore
}
}
}
break;
case 'incremental_image_backup':
if (Profile::canCurrentUser(UPDATE)) {
AssetTab::startBackup($item, 'image');
}
break;
case 'full_image_backup':
if (Profile::canCurrentUser(UPDATE)) {
$link = ServerAsset::getLinkForAsset($itemtype, $items_id, false);
if ($link !== null) {
$server = new \GlpiPlugin\Urbackup\Server();
$server->getFromDB((int) $link['plugin_urbackup_servers_id']);
$client_name = ServerAsset::getAssetName($itemtype, $items_id);
try {
$api = new \GlpiPlugin\Urbackup\UrbackupApiClient($server);
$api->startFullImageBackup($client_name);
} catch (\Throwable $e) {
// ignore
}
}
}
break;
2026-05-20 11:16:14 +02:00
case 'create_client':
if (Profile::canCurrentUser(CREATE)) {
$link = ServerAsset::getLinkForAsset($itemtype, $items_id, false);
if ($link !== null) {
$server = new \GlpiPlugin\Urbackup\Server();
$server->getFromDB((int) $link['plugin_urbackup_servers_id']);
$client_name = ServerAsset::getAssetName($itemtype, $items_id);
try {
$api = new \GlpiPlugin\Urbackup\UrbackupApiClient($server);
$api->addClient($client_name);
} catch (\Throwable $e) {
// ignore
}
}
}
break;
case 'delete_client':
if (Profile::canCurrentUser(PURGE)) {
$link = ServerAsset::getLinkForAsset($itemtype, $items_id, false);
if ($link !== null) {
$server = new \GlpiPlugin\Urbackup\Server();
$server->getFromDB((int) $link['plugin_urbackup_servers_id']);
$client_name = ServerAsset::getAssetName($itemtype, $items_id);
try {
$api = new \GlpiPlugin\Urbackup\UrbackupApiClient($server);
$api->removeClient($client_name);
} catch (\Throwable $e) {
// ignore
}
}
}
break;
2026-05-20 09:20:27 +02:00
case 'set_internet_mode':
if (Profile::canCurrentUser(UPDATE)) {
$enabled = (int) ($_POST['internet_mode'] ?? 0) === 1;
if (!AssetTab::saveInternetMode($item, $enabled)) {
Session::addMessageAfterRedirect(
__('Failed to save internet mode', 'urbackup'),
false,
\ERROR
);
}
}
break;
case 'set_default_dirs':
if (Profile::canCurrentUser(UPDATE)) {
$dirs = (string) ($_POST['default_dirs'] ?? '');
if (!AssetTab::saveDefaultDirs($item, $dirs)) {
Session::addMessageAfterRedirect(
__('Failed to save default directories', 'urbackup'),
false,
\ERROR
);
}
}
break;
}
$item->getFromDB($items_id);
Html::redirect($item->getLinkURL());
}
$item->getFromDB($items_id);
Html::redirect($item->getLinkURL());