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
|
|
|
use GlpiPlugin\Urbackup\Profile;
|
|
|
|
|
use GlpiPlugin\Urbackup\Server;
|
2026-05-20 11:46:28 +02:00
|
|
|
use GlpiPlugin\Urbackup\ServerAsset;
|
2026-05-20 09:20:27 +02:00
|
|
|
|
|
|
|
|
if (!defined('GLPI_ROOT')) {
|
|
|
|
|
define('GLPI_ROOT', dirname(__DIR__, 4));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
include_once GLPI_ROOT . "/inc/includes.php";
|
|
|
|
|
|
|
|
|
|
if (!Profile::canCurrentUser(UPDATE)) {
|
|
|
|
|
Html::displayRightError();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$server = new Server();
|
|
|
|
|
|
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
2026-05-20 11:46:28 +02:00
|
|
|
if (isset($_POST['link_asset'])) {
|
|
|
|
|
$itemtype = (string) ($_POST['itemtype'] ?? '');
|
|
|
|
|
$items_id = (int) ($_POST['items_id'] ?? 0);
|
|
|
|
|
$server_id = (int) ($_POST['id'] ?? 0);
|
|
|
|
|
|
|
|
|
|
if ($itemtype !== '' && $items_id > 0 && $server_id > 0) {
|
|
|
|
|
ServerAsset::connectAssetToServer($itemtype, $items_id, $server_id);
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-20 12:00:39 +02:00
|
|
|
Html::redirect(PLUGIN_URBACKUP_WEB_DIR . '/front/server.form.php?id=' . $server_id);
|
2026-05-20 11:46:28 +02:00
|
|
|
}
|
|
|
|
|
|
2026-05-20 09:20:27 +02:00
|
|
|
$id = $_POST['id'] ?? 0;
|
|
|
|
|
|
|
|
|
|
if ($id > 0) {
|
|
|
|
|
$server->check($id, UPDATE);
|
|
|
|
|
$server->update($_POST);
|
|
|
|
|
} else {
|
|
|
|
|
$server->check(-1, CREATE);
|
|
|
|
|
$server->add($_POST);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Html::redirect(PLUGIN_URBACKUP_WEB_DIR . "/front/server.php");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$ID = $_GET['id'] ?? null;
|
|
|
|
|
|
|
|
|
|
Html::header(
|
|
|
|
|
$ID ? __('Edit UrBackup server', 'urbackup') : __('Add UrBackup server', 'urbackup'),
|
|
|
|
|
'',
|
2026-05-21 09:26:03 +02:00
|
|
|
'admin',
|
2026-05-20 09:20:27 +02:00
|
|
|
'GlpiPlugin\Urbackup\Server'
|
|
|
|
|
);
|
|
|
|
|
|
2026-05-20 14:08:23 +02:00
|
|
|
if ($ID > 0) {
|
2026-05-21 09:26:03 +02:00
|
|
|
global $DB;
|
|
|
|
|
|
2026-05-20 14:08:23 +02:00
|
|
|
$server->getFromDB($ID);
|
2026-05-21 09:26:03 +02:00
|
|
|
|
|
|
|
|
$serverIterator = $DB->request([
|
|
|
|
|
'FROM' => Server::getTable(),
|
|
|
|
|
'ORDER' => 'name',
|
|
|
|
|
]);
|
|
|
|
|
$serverIds = [];
|
|
|
|
|
foreach ($serverIterator as $row) {
|
|
|
|
|
$serverIds[(int) $row['id']] = (string) $row['name'];
|
|
|
|
|
}
|
|
|
|
|
$serverIdKeys = array_keys($serverIds);
|
|
|
|
|
$currentIndex = array_search((int) $ID, $serverIdKeys, true);
|
|
|
|
|
$totalServers = count($serverIds);
|
|
|
|
|
$prevId = ($currentIndex !== false && $currentIndex > 0) ? $serverIdKeys[$currentIndex - 1] : null;
|
|
|
|
|
$nextId = ($currentIndex !== false && $currentIndex < $totalServers - 1) ? $serverIdKeys[$currentIndex + 1] : null;
|
|
|
|
|
|
|
|
|
|
$baseUrl = PLUGIN_URBACKUP_WEB_DIR . '/front/server.form.php';
|
2026-05-20 14:08:23 +02:00
|
|
|
?>
|
2026-05-21 09:26:03 +02:00
|
|
|
<div class="d-flex justify-content-between align-items-center mb-2">
|
|
|
|
|
<div class="d-flex align-items-center">
|
|
|
|
|
<a href="<?php echo htmlspecialchars(PLUGIN_URBACKUP_WEB_DIR . '/front/server.php'); ?>" class="btn btn-sm btn-icon btn-ghost-secondary me-2"
|
|
|
|
|
data-bs-toggle="tooltip" data-bs-placement="bottom" title="<?php echo htmlspecialchars(__('List')); ?>">
|
|
|
|
|
<i class="ti ti-list-search fs-2"></i>
|
|
|
|
|
</a>
|
|
|
|
|
<?php if ($prevId !== null): ?>
|
|
|
|
|
<a href="<?php echo htmlspecialchars($baseUrl . '?id=' . $prevId); ?>"
|
|
|
|
|
class="btn btn-sm btn-icon btn-ghost-secondary me-2"
|
|
|
|
|
data-bs-toggle="tooltip" data-bs-placement="bottom" title="<?php echo htmlspecialchars(__('Previous')); ?>">
|
|
|
|
|
<i class="fs-2 ti ti-chevron-left"></i>
|
|
|
|
|
</a>
|
|
|
|
|
<?php else: ?>
|
|
|
|
|
<span class="btn btn-sm btn-icon btn-ghost-secondary me-2 bs-invisible">
|
|
|
|
|
<i class="fs-2 ti ti-chevron-left"></i>
|
|
|
|
|
</span>
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
<span class="fw-bold mx-2"><?php echo htmlspecialchars(($currentIndex !== false ? $currentIndex + 1 : 1) . ' / ' . $totalServers); ?></span>
|
|
|
|
|
<?php if ($nextId !== null): ?>
|
|
|
|
|
<a href="<?php echo htmlspecialchars($baseUrl . '?id=' . $nextId); ?>"
|
|
|
|
|
class="btn btn-sm btn-icon btn-ghost-secondary ms-2"
|
|
|
|
|
data-bs-toggle="tooltip" data-bs-placement="bottom" title="<?php echo htmlspecialchars(__('Next')); ?>">
|
|
|
|
|
<i class="fs-2 ti ti-chevron-right"></i>
|
|
|
|
|
</a>
|
|
|
|
|
<?php else: ?>
|
|
|
|
|
<span class="btn btn-sm btn-icon btn-ghost-secondary ms-2 bs-invisible">
|
|
|
|
|
<i class="fs-2 ti ti-chevron-right"></i>
|
|
|
|
|
</span>
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-05-20 14:08:23 +02:00
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-2">
|
|
|
|
|
<ul class="nav nav-pills flex-column">
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link active" data-bs-toggle="tab" href="#tab-server">
|
|
|
|
|
<?php echo htmlspecialchars(__('Server')); ?>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" data-bs-toggle="tab" href="#tab-linked">
|
|
|
|
|
<?php echo htmlspecialchars(__('Linked clients', 'urbackup')); ?>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" data-bs-toggle="tab" href="#tab-unlinked">
|
|
|
|
|
<?php echo htmlspecialchars(__('Unlinked clients', 'urbackup')); ?>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li class="nav-item">
|
|
|
|
|
<a class="nav-link" data-bs-toggle="tab" href="#tab-missing">
|
|
|
|
|
<?php echo htmlspecialchars(__('Missing clients', 'urbackup')); ?>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="col-10">
|
|
|
|
|
<div class="tab-content">
|
|
|
|
|
<div class="tab-pane active" id="tab-server">
|
|
|
|
|
<?php $server->showForm($ID); ?>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane" id="tab-linked">
|
|
|
|
|
<?php Server::showLinkedClientsTab($server); ?>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane" id="tab-unlinked">
|
|
|
|
|
<?php Server::showUnlinkedClientsTab($server); ?>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tab-pane" id="tab-missing">
|
|
|
|
|
<?php Server::showMissingClientsTab($server); ?>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<?php
|
|
|
|
|
} else {
|
|
|
|
|
$server->showForm($ID);
|
2026-05-20 09:20:27 +02:00
|
|
|
}
|
|
|
|
|
|
2026-05-21 09:26:03 +02:00
|
|
|
?>
|
|
|
|
|
<script>
|
|
|
|
|
$(function () {
|
|
|
|
|
var hash = window.location.hash;
|
|
|
|
|
if (hash) {
|
|
|
|
|
$('[data-bs-toggle="tab"][href="' + hash + '"]').tab('show');
|
|
|
|
|
}
|
|
|
|
|
$('[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
|
|
|
|
|
window.location.hash = $(this).attr('href');
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
<?php
|
2026-05-20 14:08:23 +02:00
|
|
|
Html::footer();
|