aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-10-01 10:24:31 +0200
committerpolo <ordipolo@gmx.fr>2025-10-01 10:24:31 +0200
commita28479d0fcb41955fe5381371261e9109f339d89 (patch)
tree28469d316bab84ae4f693d01256cc1792ac54b14
parent9bf2b97a9b5d9ea1f627545733d993c1731533ce (diff)
downloadcms-a28479d0fcb41955fe5381371261e9109f339d89.zip
visibilité bouton Modifier la page, sécurité si &mode=page_modif est utilisé de manière non attendue
-rw-r--r--public/index.php8
-rw-r--r--src/controller/ViewController.php17
-rw-r--r--src/model/entities/Node.php2
-rw-r--r--src/view/AbstractBuilder.php2
-rw-r--r--src/view/FooterBuilder.php3
5 files changed, 18 insertions, 14 deletions
diff --git a/public/index.php b/public/index.php
index 6149f7a..9caee0a 100644
--- a/public/index.php
+++ b/public/index.php
@@ -12,9 +12,8 @@ B -
12 1/ passer à des chemins modernes "ciblant des ressources" genre /chemin/de/la/page 12 1/ passer à des chemins modernes "ciblant des ressources" genre /chemin/de/la/page
13 le mode modification de page doit thérioquement être appelé comme ça: /chemin/de/la/page/modif_page 13 le mode modification de page doit thérioquement être appelé comme ça: /chemin/de/la/page/modif_page
14 apparemment, le from=nom_page pour les formulaires ne se fait pas... 14 apparemment, le from=nom_page pour les formulaires ne se fait pas...
15 2/ utiliser le routeur de symfony: nécéssite que tous les contrôleurs soient des classes avec un namespace */ 15 2/ utiliser le routeur de symfony: nécéssite que tous les contrôleurs soient des classes avec un namespace
16 16 3/ http-foundation possède aussi une classe Session. intéressant! */
17// http-foundation possède aussi une classe Session. intéressant!
18 17
19declare(strict_types=1); 18declare(strict_types=1);
20 19
@@ -53,7 +52,8 @@ ini_set('session.cookie_httponly', 'On');
53ini_set('session.use_strict_mode', 'On'); 52ini_set('session.use_strict_mode', 'On');
54ini_set('session.cookie_secure', 'On'); 53ini_set('session.cookie_secure', 'On');
55session_start(); 54session_start();
56$_SESSION['admin'] = !isset($_SESSION['admin']) ? false : $_SESSION['admin']; // intialisation sur faux 55
56$_SESSION['admin'] = $_SESSION['admin'] ?? false;
57if($_SESSION['admin'] === false || empty($_SESSION['user'])){ // OUT !! 57if($_SESSION['admin'] === false || empty($_SESSION['user'])){ // OUT !!
58 $_SESSION['user'] = ''; 58 $_SESSION['user'] = '';
59 $_SESSION['admin'] = false; 59 $_SESSION['admin'] = false;
diff --git a/src/controller/ViewController.php b/src/controller/ViewController.php
index f66baff..9117f0f 100644
--- a/src/controller/ViewController.php
+++ b/src/controller/ViewController.php
@@ -5,7 +5,6 @@
5 5
6declare(strict_types=1); 6declare(strict_types=1);
7 7
8use App\Entity\Article;
9use App\Entity\Node; 8use App\Entity\Node;
10use Doctrine\ORM\EntityManager; 9use Doctrine\ORM\EntityManager;
11use Symfony\Component\HttpFoundation\Request; 10use Symfony\Component\HttpFoundation\Request;
@@ -19,21 +18,24 @@ class ViewController extends AbstractBuilder // ViewController est aussi le prem
19 18
20 public function buildView(EntityManager $entityManager, Request $request): Response 19 public function buildView(EntityManager $entityManager, Request $request): Response
21 { 20 {
22 // accès au modèle 21 /* 1/ accès au modèle */
23 $director = new Director($entityManager, true); 22 $director = new Director($entityManager, true);
24 $director->makeRootNode(htmlspecialchars($request->query->get('id') ?? '')); 23 $director->makeRootNode(htmlspecialchars($request->query->get('id') ?? ''));
25 self::$root_node = $director->getNode(); 24 self::$root_node = $director->getNode();
26 25
26
27 /* 2/ traitement de quelques paramètres */
28
27 // mode modification d'une page activé 29 // mode modification d'une page activé
28 if($_SESSION['admin'] && $request->query->has('page') 30 if($_SESSION['admin']
29 && $request->query->has('mode') && $request->query->get('mode') === 'page_modif' 31 && $request->query->has('mode') && $request->query->get('mode') === 'page_modif'
30 && $request->query->get('page') !== 'connexion' && $request->query->get('page') !== 'article' && $request->query->get('page') !== 'nouvelle_page' && $request->query->get('page') !== 'menu_chemins'){ 32 && !in_array(CURRENT_PAGE, ['article', 'nouvelle_page', 'menu_chemins', 'user_edit', 'connection']))
31 // les contrôles de la 2è ligne devraient utiliser un tableau 33 {
32 MainBuilder::$modif_mode = true; 34 MainBuilder::$modif_mode = true;
33 } 35 }
34 36
35 // page article: mode création et erreurs d'id 37 // page article: mode création et erreurs d'id
36 if($request->query->has('page') && $request->query->get('page') === 'article'){ 38 if(CURRENT_PAGE === 'article'){
37 if($_SESSION['admin']){ 39 if($_SESSION['admin']){
38 if(!$request->query->has('id')){ 40 if(!$request->query->has('id')){
39 return new Response($this->html, 302); 41 return new Response($this->html, 302);
@@ -54,7 +56,8 @@ class ViewController extends AbstractBuilder // ViewController est aussi le prem
54 } 56 }
55 } 57 }
56 58
57 //début de la construction de la page 59
60 /* 3/ construction de la page avec builders et vues */
58 $this->useChildrenBuilder(self::$root_node); 61 $this->useChildrenBuilder(self::$root_node);
59 62
60 return new Response($this->html, 200); 63 return new Response($this->html, 200);
diff --git a/src/model/entities/Node.php b/src/model/entities/Node.php
index 08961e0..f7af6de 100644
--- a/src/model/entities/Node.php
+++ b/src/model/entities/Node.php
@@ -32,7 +32,7 @@ class Node
32 private int $position; 32 private int $position;
33 33
34 #[ORM\ManyToOne(targetEntity: self::class)] 34 #[ORM\ManyToOne(targetEntity: self::class)]
35 //#[ORM\ManyToOne(targetEntity: self::class, fetch: 'EAGER')] // à TESTER 35 //#[ORM\ManyToOne(targetEntity: self::class, fetch: 'EAGER')] // fetch: 'eager' désactive le mode fainéant de doctrine
36 #[ORM\JoinColumn(name: "parent_id", referencedColumnName: "id_node", onDelete: "SET NULL", nullable: true)] 36 #[ORM\JoinColumn(name: "parent_id", referencedColumnName: "id_node", onDelete: "SET NULL", nullable: true)]
37 private ?self $parent = null; 37 private ?self $parent = null;
38 38
diff --git a/src/view/AbstractBuilder.php b/src/view/AbstractBuilder.php
index 7b53010..dd83a42 100644
--- a/src/view/AbstractBuilder.php
+++ b/src/view/AbstractBuilder.php
@@ -7,7 +7,7 @@ use App\Entity\Node;
7 7
8abstract class AbstractBuilder 8abstract class AbstractBuilder
9{ 9{
10 protected const VIEWS_PATH = '../src/view/templates/'; 10 protected const string VIEWS_PATH = '../src/view/templates/';
11 protected string $html = ''; 11 protected string $html = '';
12 protected int $id_node; 12 protected int $id_node;
13 13
diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php
index cf88476..f20dd2e 100644
--- a/src/view/FooterBuilder.php
+++ b/src/view/FooterBuilder.php
@@ -72,7 +72,8 @@ class FooterBuilder extends AbstractBuilder
72 private function makePageModifModeButton(): string 72 private function makePageModifModeButton(): string
73 { 73 {
74 $link_edit_page = new URL(['page' => CURRENT_PAGE]); 74 $link_edit_page = new URL(['page' => CURRENT_PAGE]);
75 if(CURRENT_PAGE !== 'article'){ 75 if(!in_array(CURRENT_PAGE, ['article', 'nouvelle_page', 'menu_chemins'])) // ajouter 'user_edit' et 'connection' le jour où ces pages auront un footer
76 {
76 if(MainBuilder::$modif_mode){ 77 if(MainBuilder::$modif_mode){
77 $link_edit_label = 'Sortir du mode modification'; 78 $link_edit_label = 'Sortir du mode modification';
78 } 79 }