Stable
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
<?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;
|
||||
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());
|
||||
Reference in New Issue
Block a user