aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--public/css/foot.css2
-rw-r--r--public/css/maintenance.css8
-rw-r--r--public/js/maintenance.js18
-rw-r--r--src/controller/MaintenanceController.php18
-rw-r--r--src/service/Installation.php2
-rw-r--r--src/service/UserDataService.php46
-rw-r--r--src/service/router.php4
-rw-r--r--src/view/templates/maintenance.php12
8 files changed, 100 insertions, 10 deletions
diff --git a/public/css/foot.css b/public/css/foot.css
index ed65666..8ffb6d7 100644
--- a/public/css/foot.css
+++ b/public/css/foot.css
@@ -177,7 +177,7 @@ footer .data > div
177 position: fixed; 177 position: fixed;
178 z-index: 1; 178 z-index: 1;
179 left: 50%; 179 left: 50%;
180 bottom: 30px; 180 bottom: 40px;
181 transform: translateX(-50%); 181 transform: translateX(-50%);
182 /*opacity: 0;*/ 182 /*opacity: 0;*/
183 transition: opacity 0.5s, visibility 0.5s; 183 transition: opacity 0.5s, visibility 0.5s;
diff --git a/public/css/maintenance.css b/public/css/maintenance.css
index 9b6f525..4a0dbb0 100644
--- a/public/css/maintenance.css
+++ b/public/css/maintenance.css
@@ -27,4 +27,12 @@
27 border-radius: 4px; 27 border-radius: 4px;
28 background-color: white; 28 background-color: white;
29 border: lightgrey 2px outset; 29 border: lightgrey 2px outset;
30}
31
32@media screen and (max-width: 480px)
33{
34 .maintenance select
35 {
36 font-size: 86%;
37 }
30} \ No newline at end of file 38} \ No newline at end of file
diff --git a/public/js/maintenance.js b/public/js/maintenance.js
index 078c223..a742cf6 100644
--- a/public/js/maintenance.js
+++ b/public/js/maintenance.js
@@ -42,19 +42,14 @@ function cleanLogs(){
42 fetcher.send({}); 42 fetcher.send({});
43} 43}
44 44
45// notification après restauration 45// notification de succès ou erreur après restauration
46document.addEventListener('DOMContentLoaded', function(){ 46document.addEventListener('DOMContentLoaded', function(){
47 // 1/ message généré avant la redirection
47 const params = new URLSearchParams(window.location.search); 48 const params = new URLSearchParams(window.location.search);
48 // ça pourrait être bien de récupérer le message d'erreur de l'exception d'une autre manière (message dans la variable globale window? c'est faisable??)
49
50 if(typeof window.error_message !== "undefined"){
51 toastNotify(window.error_message);
52 }
53 49
54 if(params.has('read_backups_dir')){ 50 if(params.has('read_backups_dir')){
55 toastNotify("Une erreur s'est produite:<br>" + params.get('read_backups_dir')); 51 toastNotify("Une erreur s'est produite:<br>" + params.get('read_backups_dir'));
56 } 52 }
57
58 if(params.has('database_restauration')){ 53 if(params.has('database_restauration')){
59 if(params.get('database_restauration') === 'successful'){ 54 if(params.get('database_restauration') === 'successful'){
60 toastNotify("La base de données a été restaurée avec succès !!"); 55 toastNotify("La base de données a été restaurée avec succès !!");
@@ -63,4 +58,13 @@ document.addEventListener('DOMContentLoaded', function(){
63 toastNotify("Une erreur s'est produite:<br>" + params.get('database_restauration')); 58 toastNotify("Une erreur s'est produite:<br>" + params.get('database_restauration'));
64 } 59 }
65 } 60 }
61 if(params.has('get_all_media')){
62 toastNotify(params.get('get_all_media'));
63 }
64
65
66 // 2/ message généré après la redirection, au moment de l'ouverture de la page
67 if(typeof window.error_message !== "undefined"){
68 toastNotify(window.error_message);
69 }
66}); 70});
diff --git a/src/controller/MaintenanceController.php b/src/controller/MaintenanceController.php
index 3b58fe6..eb1db04 100644
--- a/src/controller/MaintenanceController.php
+++ b/src/controller/MaintenanceController.php
@@ -16,7 +16,7 @@ class MaintenanceController
16 echo json_encode(['success' => false]); 16 echo json_encode(['success' => false]);
17 } 17 }
18 else{ 18 else{
19 $view = '<h4>Table ' . TABLE_PREFIX . 'log de la BDD</h4> 19 $view = '<h4>Table ' . TABLE_PREFIX . 'log de la base de données</h4>
20 <table> 20 <table>
21 <thead> 21 <thead>
22 <tr> 22 <tr>
@@ -65,6 +65,22 @@ class MaintenanceController
65 } 65 }
66 die; 66 die;
67 } 67 }
68 static public function getAllMedia(): void
69 {
70 try{
71 $file_path = '../var/' . UserDataService::createZip('all_media.zip', ['user_data/assets', 'user_data/images', 'user_data/media']);
72 header('Content-Type: application/zip');
73 header('Content-Disposition: attachment; filename="' . basename($file_path) . '"'); // pour provoquer un téléchargement et non pour afficher
74 header('Content-Length: ' . filesize($file_path)); // peut servir côté client (barre de progression...)
75 readfile($file_path);
76 die;
77 }
78 // exeptions lancées dans Backup::mySQLdump
79 catch(RuntimeException $e){ // pas d'info $e pour le client7
80 header('Location: ' . new URL(['page' => 'maintenance', 'get_all_media' => $e->getMessage()]));
81 }
82 die;
83 }
68 84
69 // parce qu'il faut un contrôleur 85 // parce qu'il faut un contrôleur
70 static public function handleBackupSelection(EntityManager $entityManager, string $selected_file): void 86 static public function handleBackupSelection(EntityManager $entityManager, string $selected_file): void
diff --git a/src/service/Installation.php b/src/service/Installation.php
index 100001d..f7de2cf 100644
--- a/src/service/Installation.php
+++ b/src/service/Installation.php
@@ -8,7 +8,7 @@ class Installation
8 static public function phpDependancies(): void 8 static public function phpDependancies(): void
9 { 9 {
10 $flag = false; 10 $flag = false;
11 $extensions = ['pdo_mysql', 'mbstring', 'ctype', 'json', 'tokenizer', 'imagick']; // les 5 premières sont pour doctrine 11 $extensions = ['pdo_mysql', 'mbstring', 'ctype', 'json', 'tokenizer', 'imagick', 'zip']; // les 5 premières sont pour doctrine
12 // ajouter plus tard zlib pour la compression des backups 12 // ajouter plus tard zlib pour la compression des backups
13 foreach($extensions as $extension){ 13 foreach($extensions as $extension){
14 if(!extension_loaded($extension)){ 14 if(!extension_loaded($extension)){
diff --git a/src/service/UserDataService.php b/src/service/UserDataService.php
new file mode 100644
index 0000000..5fa60d5
--- /dev/null
+++ b/src/service/UserDataService.php
@@ -0,0 +1,46 @@
1<?php
2// src/service/UserDataService.php
3
4declare(strict_types=1);
5
6class UserDataService
7{
8 static private string $var = '../var';
9
10 static public function createZip(string $zip_name, array $source_directories, array $pattern_to_target_in_user_data = []): string
11 {
12 $file_path = self::$var . '/' . $zip_name;
13 $Zip = new ZipArchive();
14
15 if($Zip->open($file_path, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== TRUE){ // ou ZipArchive::FL_OVERWRITE, à comparer à ZipArchive::OVERWRITE
16 throw new RuntimeException("Création ou ouverture du fichier demandé impossible à cause d'une erreur de permissions sur le serveur.");
17 }
18
19 // recherche récursive dans les dossiers dans $source_directories, c'est comme le paramètre "-r" dans la console
20 $counter = 0;
21 foreach($source_directories as $path){
22 $directory = new RecursiveDirectoryIterator($path);
23 $iterator = new RecursiveIteratorIterator($directory);
24
25 foreach($iterator as $info){
26 if($info->getFilename() != "." && $info->getFilename() != ".."){ // chemins inutiles . et ..
27 $Zip->addGlob($info->getPathname(), 0, array(''));
28 $counter++;
29 }
30 }
31 }
32 // recherche à la racine avec des pattern de noms de fichiers (optionnel)
33 foreach($pattern_to_target_in_user_data as $one_pattern){
34 $Zip->addGlob($one_pattern, 0, array(''));
35 }
36
37 $Zip->close();
38 if($counter > 0){
39 //chmod($file_path, 0666);
40 return $zip_name;
41 }
42 else{
43 throw new RuntimeException("Téléchargement des fichiers impossible, aucun fichier n'a été trouvé sur le serveur.");
44 }
45 }
46} \ No newline at end of file
diff --git a/src/service/router.php b/src/service/router.php
index 8ddaf7f..556651f 100644
--- a/src/service/router.php
+++ b/src/service/router.php
@@ -49,6 +49,10 @@ if($request->getMethod() === 'GET'){
49 MaintenanceController::getLastDump(); 49 MaintenanceController::getLastDump();
50 die; 50 die;
51 } 51 }
52 if($request->query->has('action') && $request->query->get('action') === 'get_all_media'){
53 MaintenanceController::getAllMedia();
54 die;
55 }
52 } 56 }
53 57
54 // construction d'une page 58 // construction d'une page
diff --git a/src/view/templates/maintenance.php b/src/view/templates/maintenance.php
index bc9caf0..403ed97 100644
--- a/src/view/templates/maintenance.php
+++ b/src/view/templates/maintenance.php
@@ -43,6 +43,18 @@
43 <input type="submit" value="Valider" onclick="return confirm('Voulez-vous vraiment restaurer la base de données? Toutes les données seront supprimées et remplacées par les nouvelles.')"> 43 <input type="submit" value="Valider" onclick="return confirm('Voulez-vous vraiment restaurer la base de données? Toutes les données seront supprimées et remplacées par les nouvelles.')">
44 </form> 44 </form>
45 </div> 45 </div>
46 <div class="basic_div">
47 <p>
48 <a href="<?= new URL(['from' => 'maintenance', 'action' => 'get_all_media']) ?>">
49 <button id="get_all_media">Récupérer l'ensemble des fichiers mutimedia</button>
50 </a><br>
51 <i>Toutes vos photos et vos documents dans un "zip"</i>
52 </p>
53 <p>
54 <button onclick="openExplorer()" style="color: grey">Explorateur de fichiers</button><br>
55 <i>Gérer les fichiers multimedia, fonction actuellement indisponible</i>
56 </p>
57 </div>
46 58
47 <div class="basic_div"> 59 <div class="basic_div">
48 <a href="http://nageurs.localhost/index.php"><button>Retour au site</button></a> 60 <a href="http://nageurs.localhost/index.php"><button>Retour au site</button></a>