From 80de6834a11734c6d3e047635b63ec93f2f68345 Mon Sep 17 00:00:00 2001 From: polo Date: Mon, 11 May 2026 01:20:16 +0200 Subject: =?UTF-8?q?restauration=20compl=C3=A8te=20de=20la=20BDD=20(sauf=20?= =?UTF-8?q?table=20user)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/router.php | 62 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 11 deletions(-) (limited to 'src/service/router.php') diff --git a/src/service/router.php b/src/service/router.php index 98f8fd6..8ddaf7f 100644 --- a/src/service/router.php +++ b/src/service/router.php @@ -2,7 +2,7 @@ // src/service/router.php // /* fonctionnement: -=> 1er test, méthode http: GET, POST ou autre chose +=> 1er test, méthode http GET? POST? => 2ème test, type de contenu (méthode POST uniquement): "application/x-www-form-urlencoded" = formulaire "application/json" = requête AJAX avec fetch() @@ -46,7 +46,7 @@ if($request->getMethod() === 'GET'){ if(IS_ADMIN === true){ if($request->query->has('action') && $request->query->get('action') === 'get_mysqldump'){ - MaintenanceController::getLastDump($entityManager); + MaintenanceController::getLastDump(); die; } } @@ -88,7 +88,6 @@ elseif($request->getMethod() === 'POST'){ } } - if(IS_ADMIN === true) { /* -- requêtes AJAX -- */ @@ -244,8 +243,8 @@ elseif($request->getMethod() === 'POST'){ } } - // upload avec FormData - elseif(strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false) + /* -- upload avec FormData OU formulaire HTML AVEC fichier -- */ + elseif(str_starts_with($request->headers->get('Content-Type'), 'multipart/form-data')) // = $_SERVER['CONTENT_TYPE'] { // dans tinymce avec le plugin (bouton "insérer une image" de l'éditeur ou glisser-déposer) if($request->query->has('action') && $request->query->get('action') === 'upload_image_tinymce'){ @@ -258,17 +257,38 @@ elseif($request->getMethod() === 'POST'){ elseif($request->query->has('head_foot_image')){ HeadFootController::uploadAsset($entityManager, $request->query->get('head_foot_image')); } + + /* -- page Maintenance -- */ + elseif($request->query->has('action') && $request->query->get('action') === 'restore_database' + && $request->request->has('hidden') && $request->get('hidden') === '' + && $request->files->has('uploaded_sql')) + { + $url = new URL; + if($request->query->has('from')){ + $url->addParams(['page' => $request->query->get('from')]); + } + + try{ + MaintenanceController::downloadSQL($entityManager, $request->files->get('uploaded_sql')); + $url->addParams(['database_restauration' => 'successful']); + } + catch(Exception $e){ + $url->addParams(['database_restauration' => $e->getMessage()]); + } + + header('Location: ' . $url); + die; + } } // requêtes XMLHttpRequest elseif(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { - //echo "requête XMLHttpRequest reçue par le serveur"; echo json_encode(['success' => false]); // noyer le poisson en laissant penser que le site gère les requêtes XHR die; } - /* -- envoi formulaire HTML -- */ + /* -- formulaire HTML SANS fichier -- */ elseif($_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded') { if($request->query->has('action') && $request->query->get('action') === 'delete_article' && isset($_GET['id'])){ @@ -294,7 +314,6 @@ elseif($request->getMethod() === 'POST'){ /* -- mode Modification d'une page -- */ - // modification du chemins en snake_case elseif(isset($_POST['page_menu_path']) && $_POST['page_menu_path'] !== null && isset($_POST['page_id']) && $_POST['page_id'] !== null @@ -318,7 +337,6 @@ elseif($request->getMethod() === 'POST'){ /* -- page Menu et chemins -- */ - // création d'une entrée de menu avec une URL elseif(isset($_POST["label_input"]) && isset($_POST["url_input"]) && isset($_POST["location"])){ MenuAndPathsController::newUrlMenuEntry($entityManager); @@ -339,12 +357,35 @@ elseif($request->getMethod() === 'POST'){ UserController::updatePassword($entityManager); } + /* -- page Maintenance -- */ + elseif($request->query->has('action') && $request->query->get('action') === 'restore_database' + && $request->request->has('hidden') && $request->get('hidden') === '' + && $request->request->has('selected_sql')) + { + $url = new URL; + if($request->query->has('from')){ + $url->addParams(['page' => $request->query->get('from')]); + } + + try{ + MaintenanceController::handleBackupSelection($entityManager, $request->request->get('selected_sql')); + $url->addParams(['database_restauration' => 'successful']); + } + catch(Exception $e){ + $url->addParams(['database_restauration' => $e->getMessage()]); + } + + header('Location: ' . $url); + die; + } + // redirection page d'accueil else{ header("Location: " . new URL(['error' => 'paramètres inconnus'])); die; } } + // POST admin ne matchant pas else{ echo json_encode(['success' => false]); @@ -393,5 +434,4 @@ else{ http_response_code(500); echo "erreur côté serveur"; } -} -//die; // inutile \ No newline at end of file +} \ No newline at end of file -- cgit v1.2.3