/shared/platform-tools/api/backup_trigger.php // dirname(__DIR__, 3) === $repo_root = dirname(__DIR__, 3); require_once $repo_root . '/config/db.php'; require_once $repo_root . '/config/functions.php'; require_once $repo_root . '/config/functions_backup.php'; require_once __DIR__ . '/../functions_csrf.php'; require_once __DIR__ . '/../functions_settings.php'; // platform_admin_url() require_sysadmin(); if ($_SERVER['REQUEST_METHOD'] !== 'POST') { header('Location: ' . platform_admin_url('backups.php')); exit; } if (!platform_csrf_ok()) { $_SESSION['backup_flash'] = [ 'type' => 'danger', 'message' => 'Pedido rejeitado (token CSRF ausente ou inválido). Recarrega a página e repete.', ]; header('Location: ' . platform_admin_url('backups.php')); exit; } $type = $_POST['type'] ?? ''; if (!in_array($type, ['files', 'db'], true)) { $_SESSION['backup_flash'] = [ 'type' => 'danger', 'message' => 'Tipo de backup inválido.', ]; header('Location: ' . platform_admin_url('backups.php')); exit; } $count_before = count(backup_list()); $ok = backup_trigger($type); $_SESSION['backup_flash'] = $ok ? [ 'type' => 'success', 'message' => 'Backup iniciado. A lista atualiza automaticamente quando o ficheiro aparecer.', // Lets the backups page poll until a new file shows up. 'await_count' => $count_before, ] : [ 'type' => 'danger', 'message' => 'Falha ao iniciar o backup. Verifique os logs do servidor.', ]; header('Location: ' . platform_admin_url('backups.php')); exit;