aboutsummaryrefslogtreecommitdiff
path: root/src/controller/MaintenanceController.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2026-10-23 00:47:32 +0200
committerpolo <ordipolo@gmx.fr>2026-10-23 00:47:32 +0200
commitf27cca08ff786ceff1870147f6d6bad14d71117f (patch)
treed36597a72025313d6faf4ed228755fa267ebe2f6 /src/controller/MaintenanceController.php
parentc7309f900ef05bd5cb313110ec159b761af394ec (diff)
downloadcms-f27cca08ff786ceff1870147f6d6bad14d71117f.tar.gz
cms-f27cca08ff786ceff1870147f6d6bad14d71117f.tar.bz2
cms-f27cca08ff786ceff1870147f6d6bad14d71117f.zip
dossiers avec majuscule, namespace pour toutes les classes, autoload psr-4, UserDataService::createZip déplacé dans Backup
Diffstat (limited to 'src/controller/MaintenanceController.php')
-rw-r--r--src/controller/MaintenanceController.php147
1 files changed, 0 insertions, 147 deletions
diff --git a/src/controller/MaintenanceController.php b/src/controller/MaintenanceController.php
deleted file mode 100644
index 5b67fa8..0000000
--- a/src/controller/MaintenanceController.php
+++ /dev/null
@@ -1,147 +0,0 @@
1<?php
2// src/controller/MaintenanceController.php
3
4declare(strict_types=1);
5
6use Doctrine\ORM\EntityManager;
7use App\Entity\log;
8use Symfony\Component\HttpFoundation\Request;
9use Symfony\Component\HttpFoundation\JsonResponse;
10use Symfony\Component\HttpFoundation\BinaryFileResponse;
11use Symfony\Component\HttpFoundation\ResponseHeaderBag;
12use Symfony\Component\HttpFoundation\RedirectResponse;
13
14class MaintenanceController
15{
16 static public function getLogs(EntityManager $entityManager): JsonResponse
17 {
18 $data = $entityManager->getRepository(Log::class)->findAll();
19 if(empty($data)){
20 return new JsonResponse(['success' => false]);
21 }
22 else{
23 $view = '<h4>Table ' . TABLE_PREFIX . 'log de la base de données</h4>
24 <table>
25 <thead>
26 <tr>
27 <th>date et heure (Greenwich)</th>
28 <th>connexion réussie</th>
29 </tr>
30 </thead>
31 <tbody>';
32 foreach($data as $entry){
33 $view .= '<tr>
34 <td>' . $entry->getFormatedDate() . '</td>
35 <td>' . ($entry->getSuccess() ? 'oui' : 'non') . '</td>
36 </tr>';
37 }
38 $view .= '</tbody></table>';
39 return new JsonResponse(['success' => true, 'view' => $view]);
40 }
41 }
42 static public function eraseLogs(EntityManager $entityManager): JsonResponse
43 {
44 try{
45 $table = $entityManager->getClassMetadata(Log::class)->getTableName();
46 $entityManager->getConnection()->executeStatement("TRUNCATE TABLE {$table}"); // SQL donné à DBAL
47 return new JsonResponse(['success' => true]);
48 }
49 catch(Exception $e){
50 return new JsonResponse(['success' => false, 'error' => $e->getMessage()]);
51 }
52 }
53
54 static public function getLastDump(EntityManager $entityManager): BinaryFileResponse|RedirectResponse
55 {
56 try{
57 $backup_list = Backup::getBackupList();
58 $nb = count($backup_list);
59
60 if($nb <= 0){ // se produit à la première connexion en mode admin pour une raison algorithimque
61 Backup::mySQLdump($entityManager, 'auto');
62 $backup_list = Backup::getBackupList();
63 $nb = count($backup_list);
64 if($nb <= 0){ // improbable, les dossiers devraient déjà avoir été créés
65 throw new RuntimeException("Le serveur a rencontré une erreur: aucun backup n'est disponible et ce n'est pas normal.");
66 }
67 }
68
69 $file_path = Backup::$backup_dir . '/' . $backup_list[$nb - 1];
70 $response = new BinaryFileResponse($file_path);
71 $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT); // ne pas essayer de l'afficher dans le navigateur
72 }
73 catch(RuntimeException $e){
74 $_SESSION['flash_message'] = $e->getMessage();
75 $response = new RedirectResponse((string) new URL(['page' => 'maintenance']));
76 }
77 return $response;
78 }
79 static public function getAllMedia(): BinaryFileResponse|RedirectResponse
80 {
81 try{
82 $file_path = '../var/' . UserDataService::createZip('all_media.zip', ['user_data/assets', 'user_data/images', 'user_data/media']);
83 $response = new BinaryFileResponse($file_path);
84 $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT); // ne pas essayer de l'afficher dans le navigateur
85 }
86 catch(RuntimeException $e){
87 $_SESSION['flash_message'] = $e->getMessage();
88 $response = new RedirectResponse((string) new URL(['page' => 'maintenance']));
89 }
90 return $response;
91 }
92
93 // parce qu'il faut un contrôleur
94 static public function handleBackupSelection(EntityManager $entityManager, Request $request): RedirectResponse
95 {
96 $selected_file = $request->request->get('selected_sql');
97 $url = new URL;
98 if($request->query->has('from')){
99 $url->addParams(['page' => $request->query->get('from')]);
100 }
101
102 try{
103 if(pathinfo($selected_file)['extension'] !== 'sql'){ // pas censé se produire en fait
104 throw new Exception("charger un fichier au format SQL");
105 }
106 Backup::restoreDatabase($entityManager, $selected_file, ['user']);
107
108 $_SESSION['flash_message'] = "La base de données a été restaurée avec succès !!";
109 }
110 catch(Exception $e){
111 $_SESSION['flash_message'] = "Une erreur s'est produite: " . $e->getMessage();
112 }
113
114 return new RedirectResponse((string)$url);
115 }
116
117 static public function downloadSQL(EntityManager $entityManager, Request $request): RedirectResponse
118 {
119 $uploaded_file = $request->files->get('uploaded_sql');
120 $date = new DateTime;
121 $server_place = Config::$database . '_' . $date->format('Y-m-d') . '_uploaded.sql';
122 $url = new URL;
123 if($request->query->has('from')){
124 $url->addParams(['page' => $request->query->get('from')]);
125 }
126
127 try{
128 if(pathinfo($uploaded_file->getClientOriginalName())['extension'] !== 'sql'){
129 throw new Exception("Charger un fichier au format SQL");
130 }
131 //echo $uploaded_file->getSize(); // à garder de côté au cas où
132
133 // enregistrer le fichier
134 $uploaded_file->move(Backup::$backup_dir, $server_place);
135
136 // s'en servir
137 Backup::restoreDatabase($entityManager, $server_place, ['user']);
138
139 $_SESSION['flash_message'] = "La base de données a été restaurée avec succès !!";
140 }
141 catch(Exception $e){
142 $_SESSION['flash_message'] = "Une erreur s'est produite: " . $e->getMessage();
143 }
144
145 return new RedirectResponse((string)$url);
146 }
147} \ No newline at end of file