aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2026-06-03 21:42:46 +0200
committerpolo <ordipolo@gmx.fr>2026-06-03 21:42:46 +0200
commit34c4d0d0c37c7f640a1a6373bba30ebe1129d6c4 (patch)
tree5852421a6282dc95d2413dee34694691a53bd25a /src
parenta3f64de3eaaf1d9acbc82f7dfdf34a239411c0ba (diff)
downloadcms-34c4d0d0c37c7f640a1a6373bba30ebe1129d6c4.tar.gz
cms-34c4d0d0c37c7f640a1a6373bba30ebe1129d6c4.tar.bz2
cms-34c4d0d0c37c7f640a1a6373bba30ebe1129d6c4.zip
téléchargement des fichiers media, un tout petit peu de responsive design
Diffstat (limited to 'src')
-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
5 files changed, 80 insertions, 2 deletions
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>