diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/controller/MaintenanceController.php | 18 | ||||
| -rw-r--r-- | src/service/Installation.php | 2 | ||||
| -rw-r--r-- | src/service/UserDataService.php | 46 | ||||
| -rw-r--r-- | src/service/router.php | 4 | ||||
| -rw-r--r-- | src/view/templates/maintenance.php | 12 |
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 | |||
| 4 | declare(strict_types=1); | ||
| 5 | |||
| 6 | class 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> |
