From ac78568e1c1a91564eb6bd35c03d9a8a781bc53d Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 19 May 2026 00:19:23 +0200 Subject: =?UTF-8?q?lanc=C3=A9s=20et=20captures=20d'exceptions=20page=20mai?= =?UTF-8?q?ntenance,=20page=20menu=20et=20chemins:=20interdiction=20pour?= =?UTF-8?q?=20une=20page=20d'avoir=20pour=20parent=20une=20adresse=20d'un?= =?UTF-8?q?=20site,=20regression=20contructeur=20de=20MenuBuilder,=20MAJ?= =?UTF-8?q?=20de=20paquets=20dans=20composer.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/MaintenanceController.php | 6 ++---- src/controller/MenuAndPathsController.php | 8 +++++++- src/controller/UserController.php | 8 +++++++- src/service/Backup.php | 16 +++++++++++----- src/view/MaintenanceBuilder.php | 9 ++++++++- src/view/MenuBuilder.php | 6 +++--- src/view/templates/menu.php | 2 +- 7 files changed, 39 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/controller/MaintenanceController.php b/src/controller/MaintenanceController.php index f3352d8..3b58fe6 100644 --- a/src/controller/MaintenanceController.php +++ b/src/controller/MaintenanceController.php @@ -5,7 +5,6 @@ declare(strict_types=1); use Doctrine\ORM\EntityManager; use App\Entity\log; -use Symfony\Component\Process\Exception\ProcessFailedException; use Symfony\Component\HttpFoundation\File\UploadedFile; class MaintenanceController @@ -61,9 +60,8 @@ class MaintenanceController die; } // exeptions lancées dans Backup::mySQLdump - catch(ProcessFailedException $e){ // pas d'info $e pour le client - header('Location: ' . new URL(['page' => 'maintenance', 'error' => '500'])); - die; + catch(RuntimeException $e){ // pas d'info $e pour le client7 + header('Location: ' . new URL(['page' => 'maintenance', 'get_last_dump' => $e->getMessage()])); } die; } diff --git a/src/controller/MenuAndPathsController.php b/src/controller/MenuAndPathsController.php index 4d37f3d..799f14b 100644 --- a/src/controller/MenuAndPathsController.php +++ b/src/controller/MenuAndPathsController.php @@ -141,7 +141,7 @@ class MenuAndPathsController $page = Model::$menu->findPageById((int)$id); $parent = $page->getParent(); // peut être null - if($parent == null){ + if($parent === null){ $parent = Model::$menu; } @@ -150,6 +150,12 @@ class MenuAndPathsController if($page->getPosition() > 1){ foreach($parent->getChildren() as $child){ if($child->getPosition() === $page->getPosition() - 1){ + // refus si $parent est une adresse, ça va casser le lien, exemple: index.php?page=chemin/http://un_site_web.fr/vers/ici + if(str_starts_with($child->getEndOfPath(), 'http')){ + echo json_encode(['success' => false, 'error' => 'new_parent_is_a_link']); + die; + } + $page->setParent($child); break; } diff --git a/src/controller/UserController.php b/src/controller/UserController.php index 9746a47..f911d2d 100644 --- a/src/controller/UserController.php +++ b/src/controller/UserController.php @@ -92,7 +92,13 @@ class UserController $_SESSION['user']['role'] = $user->getRole(); EmailService::cleanEmails($entityManager); - Backup::mySQLdump($entityManager, 'auto'); // créer un nouveau backup + + try{ + Backup::mySQLdump($entityManager, 'auto'); // créer un nouveau backup + } + catch(RuntimeException $e){ + echo ''; + } $url = new URL(isset($_GET['from']) ? ['page' => $_GET['from']] : []); isset($_GET['id']) ? $url->addParams(['id' => $_GET['id']]) : ''; diff --git a/src/service/Backup.php b/src/service/Backup.php index 8a3030f..c886617 100644 --- a/src/service/Backup.php +++ b/src/service/Backup.php @@ -74,12 +74,17 @@ class Backup static public function getBackupList(): array { + $files = scandir(Backup::$backup_dir); // affiche un warning si échoue (à cacher en prod) + if(!$files){ + throw new RuntimeException("Le serveur a rencontré une erreur:
Accès aux backups impossible faute de permissions."); + } + $backup_array = []; - foreach(scandir(Backup::$backup_dir) as $file){ - if($file[0] === '.'){ - continue; - } - $backup_array[] = $file; + foreach($files as $file){ + if($file[0] === '.'){ + continue; + } + $backup_array[] = $file; } return $backup_array; } @@ -185,6 +190,7 @@ class Backup password=" . Config::$password . "\n host=" . Config::$db_host . "\n"); + //$file_name = self::gzipExtract($file_name); // '.gz' ajouté à la fin $command = new Process([ $engine, // mariadb ou mysql diff --git a/src/view/MaintenanceBuilder.php b/src/view/MaintenanceBuilder.php index d9c52b1..c5f53ab 100644 --- a/src/view/MaintenanceBuilder.php +++ b/src/view/MaintenanceBuilder.php @@ -11,7 +11,14 @@ class MaintenanceBuilder extends AbstractBuilder $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; // noter qu'un backup vient d'être créé depuis ViewDirector - $backup_array = Backup::getBackupList(); + try{ + $backup_array = Backup::getBackupList(); + } + // exeptions lancées dans Backup::mySQLdump + catch(RuntimeException $e){ // pas d'info $e pour le client + $backup_array = []; + echo ''; + } $backup_options = ''; for($i = count($backup_array) - 1; $i >= 0; $i--){ $backup_options .= ''; diff --git a/src/view/MenuBuilder.php b/src/view/MenuBuilder.php index 85335df..0395dfa 100644 --- a/src/view/MenuBuilder.php +++ b/src/view/MenuBuilder.php @@ -13,10 +13,10 @@ class MenuBuilder extends AbstractBuilder //private int $margin_left_multiplier = 29; private string $options = ''; - public function __construct(Node $node, bool $template = true) + public function __construct(?Node $node, bool $template = true) { - // dans une ancienne version $node pouvait être null mais je ne sais plus pourquoi - $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; + // $node peut $etre null parce qu'on ne construit pas de page dans MenuAndPathsController, on ne lit pas la table "node", etc + $viewFile = $node === null ? self::VIEWS_PATH . 'menu.php' : self::VIEWS_PATH . $node->getName() . '.php'; if(file_exists($viewFile)) { diff --git a/src/view/templates/menu.php b/src/view/templates/menu.php index 1159455..ccfb518 100644 --- a/src/view/templates/menu.php +++ b/src/view/templates/menu.php @@ -31,7 +31,7 @@

devenir une branche de l'élément précédent

déplacer la branche parmi celles de même niveau

afficher/cacher

-

modifier un lien

+

enregistrer une modification

supprimer un lien

-- cgit v1.2.3