131 lines
5.2 KiB
PHP
131 lines
5.2 KiB
PHP
<?php
|
||
if (($_GET['page'] ?? '') !== 'maintenance') return;
|
||
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||
|
||
$roles = (array)($_SESSION['role'] ?? []);
|
||
if (!in_array('admin', $roles, true)) {
|
||
echo '<div class="container my-4"><div class="alert alert-danger">'.htmlspecialchars(($translations['non_autorise'] ?? 'Accès refusé.'), ENT_QUOTES, 'UTF-8').'</div></div>';
|
||
return;
|
||
}
|
||
|
||
$e = static fn($s) => htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8');
|
||
$siteRoot = realpath(__DIR__ . '/../../');
|
||
|
||
$statDir = function($path){
|
||
$n=0; $s=0;
|
||
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS));
|
||
foreach($it as $f){
|
||
if($f->isFile()){ $n++; $s += $f->getSize(); }
|
||
}
|
||
return [$n,$s];
|
||
};
|
||
|
||
$uploads = $siteRoot.'/messages/uploads';
|
||
$backups = $siteRoot.'/backups/db';
|
||
$logsDir = $siteRoot.'/logs';
|
||
@is_dir($backups) || @mkdir($backups,0755,true);
|
||
|
||
$uploadsStat = is_dir($uploads) ? $statDir($uploads) : [0,0];
|
||
$backupsList = array_map('basename', glob($backups.'/db_*.sql*') ?: []);
|
||
usort($backupsList, fn($a,$b)=>strcmp($b,$a));
|
||
$lastBackup = $backupsList[0] ?? ($translations['maint_none'] ?? '(aucun)');
|
||
?>
|
||
|
||
<div class="shadow p-4 rounded bg-light">
|
||
<div class="container my-4">
|
||
<h3 class="mb-3"><?= $e($translations['maintenance'] ?? 'Centre de maintenance') ?></h3>
|
||
|
||
<div class="row g-3">
|
||
|
||
<div class="col-md-6">
|
||
<div class="card h-100">
|
||
<div class="card-body">
|
||
<h5 class="card-title"><?= $e($translations['backup_db'] ?? 'Sauvegardes DB') ?></h5>
|
||
<p class="mb-1">
|
||
<strong><?= $e($translations['maint_last_backup'] ?? 'Dernier backup:') ?></strong>
|
||
<?= $e($lastBackup) ?>
|
||
</p>
|
||
<p class="text-muted small">
|
||
<?= $e($translations['maint_folder'] ?? 'Dossier:') ?>
|
||
<code><?= $e($backups) ?></code>
|
||
</p>
|
||
<a class="btn btn-dark" href="?page=backup_db">
|
||
<?= $e($translations['maint_manage_backups'] ?? 'Gérer les sauvegardes') ?>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<div class="card h-100">
|
||
<div class="card-body">
|
||
<h5 class="card-title"><?= $e($translations['maint_uploads_messaging'] ?? 'Uploads messagerie') ?></h5>
|
||
<p class="mb-1">
|
||
<strong><?= $e($translations['maint_files'] ?? 'Fichiers:') ?></strong>
|
||
<?= (int)$uploadsStat[0] ?>
|
||
— <strong><?= $e($translations['maint_size'] ?? 'Taille:') ?></strong>
|
||
<?= number_format($uploadsStat[1]/1024/1024, 2) ?> MB
|
||
</p>
|
||
<p class="text-muted small">
|
||
<?= $e($translations['maint_folder'] ?? 'Dossier:') ?>
|
||
<code><?= $e($uploads) ?></code>
|
||
</p>
|
||
<a class="btn btn-outline-dark" href="?page=purger_mess_upload">
|
||
<?= $e($translations['purger_mess_upload'] ?? 'Purger orphelins') ?>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<div class="card h-100">
|
||
<div class="card-body">
|
||
<h5 class="card-title"><?= $e($translations['purger_messages'] ?? 'Conversations supprimées') ?></h5>
|
||
<p class="text-muted small"><?= $e($translations['maint_purge_conversations_help'] ?? 'Supprimer définitivement les conversations retirées des deux côtés.') ?></p>
|
||
<a class="btn btn-outline-dark" href="?page=purge_conversations">
|
||
<?= $e($translations['maint_open'] ?? 'Ouvrir') ?>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<div class="card h-100">
|
||
<div class="card-body">
|
||
<h5 class="card-title"><?= $e($translations['afficher_logs'] ?? 'Journaux & erreurs') ?></h5>
|
||
<p class="text-muted small"><?= $e($translations['maint_logs_help'] ?? 'Consulter, télécharger, vider, appliquer la rotation.') ?></p>
|
||
<a class="btn btn-outline-dark" href="?page=logs">
|
||
<?= $e($translations['maint_view_logs'] ?? 'Voir les logs') ?>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<div class="card h-100">
|
||
<div class="card-body">
|
||
<h5 class="card-title"><?= $e($translations['cleanup_rdv'] ?? 'Nettoyage RDV') ?></h5>
|
||
<p class="text-muted small"><?= $e($translations['maint_cleanup_rdv_help'] ?? 'Lister & purger les rendez-vous non désirés.') ?></p>
|
||
<a class="btn btn-outline-dark" href="?page=cleanup_rdv">
|
||
<?= $e($translations['maint_open'] ?? 'Ouvrir') ?>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<div class="card h-100">
|
||
<div class="card-body">
|
||
<h5 class="card-title"><?= $e($translations['audit'] ?? 'Journal d’audit') ?></h5>
|
||
<p class="text-muted small"><?= $e($translations['maint_audit_help'] ?? 'Historique des actions administrateur.') ?></p>
|
||
<a class="btn btn-outline-dark" href="?page=audit">
|
||
<?= $e($translations['maint_consult'] ?? 'Consulter') ?>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|