diff options
| author | polo <ordipolo@gmx.fr> | 2026-06-06 00:32:43 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2026-06-06 00:32:43 +0200 |
| commit | 3988f3eb48bafb36b370eecc75a87e804f57c09d (patch) | |
| tree | 8c0afd691eaa3f6985681f0793d898e56a7a57c8 /src/controller/MaintenanceController.php | |
| parent | 2c6070444b6cf79908653e776d6e4464cd6a5ac9 (diff) | |
| download | cms-3988f3eb48bafb36b370eecc75a87e804f57c09d.tar.gz cms-3988f3eb48bafb36b370eecc75a87e804f57c09d.tar.bz2 cms-3988f3eb48bafb36b370eecc75a87e804f57c09d.zip | |
classe Router, flash errors récupérées dans ViewDirector, exceptions buggées, utilisation de Response à certains endroits
Diffstat (limited to 'src/controller/MaintenanceController.php')
| -rw-r--r-- | src/controller/MaintenanceController.php | 102 |
1 files changed, 65 insertions, 37 deletions
diff --git a/src/controller/MaintenanceController.php b/src/controller/MaintenanceController.php index 47e51ac..98f2e60 100644 --- a/src/controller/MaintenanceController.php +++ b/src/controller/MaintenanceController.php | |||
| @@ -5,7 +5,10 @@ declare(strict_types=1); | |||
| 5 | 5 | ||
| 6 | use Doctrine\ORM\EntityManager; | 6 | use Doctrine\ORM\EntityManager; |
| 7 | use App\Entity\log; | 7 | use App\Entity\log; |
| 8 | use Symfony\Component\HttpFoundation\File\UploadedFile; | 8 | use Symfony\Component\HttpFoundation\Request; |
| 9 | use Symfony\Component\HttpFoundation\BinaryFileResponse; | ||
| 10 | use Symfony\Component\HttpFoundation\ResponseHeaderBag; | ||
| 11 | use Symfony\Component\HttpFoundation\RedirectResponse; | ||
| 9 | 12 | ||
| 10 | class MaintenanceController | 13 | class MaintenanceController |
| 11 | { | 14 | { |
| @@ -51,76 +54,101 @@ class MaintenanceController | |||
| 51 | 54 | ||
| 52 | static public function getLastDump(EntityManager $entityManager): void | 55 | static public function getLastDump(EntityManager $entityManager): void |
| 53 | { | 56 | { |
| 54 | $backup_list = Backup::getBackupList(); | 57 | try{ |
| 55 | $nb = count($backup_list); | ||
| 56 | |||
| 57 | if($nb <= 0){ // se produit à la première connexion en mode admin pour une raison algorithimque | ||
| 58 | Backup::mySQLdump($entityManager, 'auto'); | ||
| 59 | $backup_list = Backup::getBackupList(); | 58 | $backup_list = Backup::getBackupList(); |
| 60 | $nb = count($backup_list); | 59 | $nb = count($backup_list); |
| 61 | if($nb <= 0){ // improbable, les dossiers devraient déjà avoir été créés | 60 | |
| 62 | throw new RuntimeException("Le serveur a rencontré une erreur: aucun backup n'est disponible et ce n'est pas normal."); | 61 | if($nb <= 0){ // se produit à la première connexion en mode admin pour une raison algorithimque |
| 62 | Backup::mySQLdump($entityManager, 'auto'); | ||
| 63 | $backup_list = Backup::getBackupList(); | ||
| 64 | $nb = count($backup_list); | ||
| 65 | if($nb <= 0){ // improbable, les dossiers devraient déjà avoir été créés | ||
| 66 | throw new RuntimeException("Le serveur a rencontré une erreur: aucun backup n'est disponible et ce n'est pas normal."); | ||
| 67 | } | ||
| 63 | } | 68 | } |
| 64 | } | ||
| 65 | 69 | ||
| 66 | try{ | ||
| 67 | $file_path = Backup::$backup_dir . '/' . $backup_list[$nb - 1]; | 70 | $file_path = Backup::$backup_dir . '/' . $backup_list[$nb - 1]; |
| 68 | header('Content-Type: application/octet-stream'); // signifie fichier quelconque, du binaire quoi! | 71 | $response = new BinaryFileResponse($file_path); |
| 69 | header('Content-Disposition: attachment; filename="' . basename($file_path) . '"'); // pour provoquer un téléchargement et non pour afficher | 72 | $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT); // ne pas essayer de l'afficher dans le navigateur |
| 70 | header('Content-Length: ' . filesize($file_path)); // peut servir côté client (barre de progression...) | ||
| 71 | readfile($file_path); | ||
| 72 | die; | ||
| 73 | } | 73 | } |
| 74 | // exeptions lancées dans Backup::mySQLdump | 74 | catch(RuntimeException $e){ |
| 75 | catch(RuntimeException $e){ // pas d'info $e pour le client7 | 75 | $_SESSION['flash_message'] = $e->getMessage(); |
| 76 | header('Location: ' . new URL(['page' => 'maintenance', 'get_last_dump' => $e->getMessage()])); | 76 | $response = new RedirectResponse((string) new URL(['page' => 'maintenance'])); |
| 77 | } | 77 | } |
| 78 | $response->send(); | ||
| 78 | die; | 79 | die; |
| 79 | } | 80 | } |
| 80 | static public function getAllMedia(): void | 81 | static public function getAllMedia(): void |
| 81 | { | 82 | { |
| 82 | try{ | 83 | try{ |
| 83 | $file_path = '../var/' . UserDataService::createZip('all_media.zip', ['user_data/assets', 'user_data/images', 'user_data/media']); | 84 | $file_path = '../var/' . UserDataService::createZip('all_media.zip', ['user_data/assets', 'user_data/images', 'user_data/media']); |
| 84 | header('Content-Type: application/zip'); | 85 | $response = new BinaryFileResponse($file_path); |
| 85 | header('Content-Disposition: attachment; filename="' . basename($file_path) . '"'); // pour provoquer un téléchargement et non pour afficher | 86 | $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT); // ne pas essayer de l'afficher dans le navigateur |
| 86 | header('Content-Length: ' . filesize($file_path)); // peut servir côté client (barre de progression...) | ||
| 87 | readfile($file_path); | ||
| 88 | die; | ||
| 89 | } | 87 | } |
| 90 | // exeptions lancées dans Backup::mySQLdump | 88 | catch(RuntimeException $e){ |
| 91 | catch(RuntimeException $e){ // pas d'info $e pour le client7 | 89 | $_SESSION['flash_message'] = $e->getMessage(); |
| 92 | header('Location: ' . new URL(['page' => 'maintenance', 'get_all_media' => $e->getMessage()])); | 90 | $response = new RedirectResponse((string) new URL(['page' => 'maintenance'])); |
| 93 | } | 91 | } |
| 92 | $response->send(); | ||
| 94 | die; | 93 | die; |
| 95 | } | 94 | } |
| 96 | 95 | ||
| 97 | // parce qu'il faut un contrôleur | 96 | // parce qu'il faut un contrôleur |
| 98 | static public function handleBackupSelection(EntityManager $entityManager, string $selected_file): void | 97 | static public function handleBackupSelection(EntityManager $entityManager, Request $request): void |
| 99 | { | 98 | { |
| 100 | if(pathinfo($selected_file)['extension'] !== 'sql'){ // pas censé se produire en fait | 99 | $selected_file = $request->request->get('selected_sql'); |
| 101 | throw new Exception("charger un fichier au format SQL"); | 100 | $url = new URL; |
| 101 | if($request->query->has('from')){ | ||
| 102 | $url->addParams(['page' => $request->query->get('from')]); | ||
| 102 | } | 103 | } |
| 103 | 104 | ||
| 104 | Backup::restoreDatabase($entityManager, $selected_file); | 105 | try{ |
| 106 | if(pathinfo($selected_file)['extension'] !== 'sql'){ // pas censé se produire en fait | ||
| 107 | throw new Exception("charger un fichier au format SQL"); | ||
| 108 | } | ||
| 109 | Backup::restoreDatabase($entityManager, $selected_file); | ||
| 110 | |||
| 111 | $_SESSION['flash_message'] = "La base de données a été restaurée avec succès !!"; | ||
| 112 | } | ||
| 113 | catch(Exception $e){ | ||
| 114 | $_SESSION['flash_message'] = "Une erreur s'est produite: " . $e->getMessage(); | ||
| 115 | } | ||
| 116 | |||
| 117 | $response = new RedirectResponse((string)$url); | ||
| 118 | $response->send(); | ||
| 119 | die; | ||
| 105 | } | 120 | } |
| 106 | 121 | ||
| 107 | static public function downloadSQL(EntityManager $entityManager, UploadedFile $uploaded_file): void | 122 | static public function downloadSQL(EntityManager $entityManager, Request $request): void |
| 108 | { | 123 | { |
| 109 | if(pathinfo($uploaded_file->getClientOriginalName())['extension'] !== 'sql'){ | 124 | $uploaded_file = $request->files->get('uploaded_sql'); |
| 110 | throw new Exception("Charger un fichier au format SQL"); | ||
| 111 | } | ||
| 112 | //echo $uploaded_file->getSize(); // à garder de côté au cas où | ||
| 113 | |||
| 114 | $date = new DateTime; | 125 | $date = new DateTime; |
| 115 | $server_place = Config::$database . '_' . $date->format('Y-m-d') . '_uploaded.sql'; | 126 | $server_place = Config::$database . '_' . $date->format('Y-m-d') . '_uploaded.sql'; |
| 127 | $url = new URL; | ||
| 128 | if($request->query->has('from')){ | ||
| 129 | $url->addParams(['page' => $request->query->get('from')]); | ||
| 130 | } | ||
| 116 | 131 | ||
| 117 | try{ | 132 | try{ |
| 133 | if(pathinfo($uploaded_file->getClientOriginalName())['extension'] !== 'sql'){ | ||
| 134 | throw new Exception("Charger un fichier au format SQL"); | ||
| 135 | } | ||
| 136 | //echo $uploaded_file->getSize(); // à garder de côté au cas où | ||
| 137 | |||
| 118 | // enregistrer le fichier | 138 | // enregistrer le fichier |
| 119 | $uploaded_file->move(Backup::$backup_dir, $server_place); | 139 | $uploaded_file->move(Backup::$backup_dir, $server_place); |
| 120 | 140 | ||
| 121 | // s'en servir | 141 | // s'en servir |
| 122 | Backup::restoreDatabase($entityManager, $server_place); | 142 | Backup::restoreDatabase($entityManager, $server_place); |
| 143 | |||
| 144 | $_SESSION['flash_message'] = "La base de données a été restaurée avec succès !!"; | ||
| 123 | } | 145 | } |
| 124 | finally{} | 146 | catch(Exception $e){ |
| 147 | $_SESSION['flash_message'] = "Une erreur s'est produite: " . $e->getMessage(); | ||
| 148 | } | ||
| 149 | |||
| 150 | $response = new RedirectResponse((string)$url); | ||
| 151 | $response->send(); | ||
| 152 | die; | ||
| 125 | } | 153 | } |
| 126 | } \ No newline at end of file | 154 | } \ No newline at end of file |
