aboutsummaryrefslogtreecommitdiff
path: root/src/controller/MaintenanceController.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/controller/MaintenanceController.php')
-rw-r--r--src/controller/MaintenanceController.php102
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
6use Doctrine\ORM\EntityManager; 6use Doctrine\ORM\EntityManager;
7use App\Entity\log; 7use App\Entity\log;
8use Symfony\Component\HttpFoundation\File\UploadedFile; 8use Symfony\Component\HttpFoundation\Request;
9use Symfony\Component\HttpFoundation\BinaryFileResponse;
10use Symfony\Component\HttpFoundation\ResponseHeaderBag;
11use Symfony\Component\HttpFoundation\RedirectResponse;
9 12
10class MaintenanceController 13class 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