diff options
| author | polo <ordipolo@gmx.fr> | 2025-09-01 18:52:17 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2025-09-01 18:52:17 +0200 |
| commit | f477314613beb26b0ce4c61ec0b1900df1de1cb1 (patch) | |
| tree | d41ace78a572a11887e7cfa2611c3f02fb04e51c | |
| parent | e642cd51d7e8599537f8514bef8d5d16096dddf8 (diff) | |
| download | cms-f477314613beb26b0ce4c61ec0b1900df1de1cb1.tar.gz cms-f477314613beb26b0ce4c61ec0b1900df1de1cb1.tar.bz2 cms-f477314613beb26b0ce4c61ec0b1900df1de1cb1.zip | |
renommage des présentations,modif présentation des blocs et largeur min (donc nb de colonnes) en mode grid, corrections de bugs et erreurs 404, le param page_modif n'est plus une action, légère symfonyfication du routeur
| -rw-r--r-- | public/css/body.css | 28 | ||||
| -rw-r--r-- | public/css/modif_page.css | 46 | ||||
| -rw-r--r-- | public/js/modif_page.js | 75 | ||||
| -rw-r--r-- | src/controller/ArticleController.php | 5 | ||||
| -rw-r--r-- | src/controller/Director.php | 11 | ||||
| -rw-r--r-- | src/controller/PageManagementController.php | 65 | ||||
| -rw-r--r-- | src/controller/ViewController.php | 24 | ||||
| -rw-r--r-- | src/installation.php | 8 | ||||
| -rw-r--r-- | src/model/Blocks.php | 4 | ||||
| -rw-r--r-- | src/model/entities/Node.php | 9 | ||||
| -rw-r--r-- | src/model/entities/NodeData.php | 40 | ||||
| -rw-r--r-- | src/model/entities/Presentation.php | 22 | ||||
| -rw-r--r-- | src/router.php | 32 | ||||
| -rw-r--r-- | src/view/FooterBuilder.php | 29 | ||||
| -rw-r--r-- | src/view/MainBuilder.php | 63 | ||||
| -rw-r--r-- | src/view/NewBuilder.php | 13 | ||||
| -rw-r--r-- | src/view/NewsBlockBuilder.php | 11 | ||||
| -rw-r--r-- | src/view/PostBlockBuilder.php | 11 | ||||
| -rw-r--r-- | src/view/templates/modify_page.php (renamed from src/view/templates/main.php) | 6 | ||||
| -rw-r--r-- | src/view/templates/news_block.php | 2 | ||||
| -rw-r--r-- | src/view/templates/post_block.php | 2 |
21 files changed, 364 insertions, 142 deletions
diff --git a/public/css/body.css b/public/css/body.css index 17bdad5..af178a8 100644 --- a/public/css/body.css +++ b/public/css/body.css | |||
| @@ -49,6 +49,10 @@ main | |||
| 49 | background-color: #E3F3FF; | 49 | background-color: #E3F3FF; |
| 50 | padding: 15px 0; | 50 | padding: 15px 0; |
| 51 | } | 51 | } |
| 52 | .hidden | ||
| 53 | { | ||
| 54 | display: none; | ||
| 55 | } | ||
| 52 | section > h3 | 56 | section > h3 |
| 53 | { | 57 | { |
| 54 | padding: 15px; | 58 | padding: 15px; |
| @@ -62,28 +66,10 @@ section > h3 | |||
| 62 | padding: 15px; | 66 | padding: 15px; |
| 63 | } | 67 | } |
| 64 | 68 | ||
| 65 | .grid_columns | 69 | .grid > .section_child |
| 66 | { | 70 | { |
| 67 | display: grid; | 71 | display: grid; /* et c'est tout */ |
| 68 | grid-template-columns: repeat(3, 1fr); | 72 | /*grid-template-columns: repeat(auto-fit, minmax(' . $min_width . 'px, 1fr)); */ /* dans PostBlockBuilder et NewsBlockBuilder */ |
| 69 | } | ||
| 70 | @media screen and (max-width: 800px) | ||
| 71 | { | ||
| 72 | .grid_columns | ||
| 73 | { | ||
| 74 | grid-template-columns: repeat(2, 1fr); | ||
| 75 | } | ||
| 76 | } | ||
| 77 | @media screen and (max-width: 600px) | ||
| 78 | { | ||
| 79 | article | ||
| 80 | { | ||
| 81 | /*margin: 5px;*/ | ||
| 82 | } | ||
| 83 | .grid_columns | ||
| 84 | { | ||
| 85 | display: block; | ||
| 86 | } | ||
| 87 | } | 73 | } |
| 88 | .galery_photos | 74 | .galery_photos |
| 89 | { | 75 | { |
diff --git a/public/css/modif_page.css b/public/css/modif_page.css index d6fc23e..9048f05 100644 --- a/public/css/modif_page.css +++ b/public/css/modif_page.css | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | padding: 10px; | 5 | padding: 10px; |
| 6 | margin: 10px 15px; | 6 | margin: 10px 15px; |
| 7 | } | 7 | } |
| 8 | .page_modification form select, .page_modification form input[type=submit] | 8 | .page_modification select, .page_modification input[type=submit] |
| 9 | { | 9 | { |
| 10 | color: #ff1d04; | 10 | color: #ff1d04; |
| 11 | font-size: medium; | 11 | font-size: medium; |
| @@ -17,7 +17,7 @@ | |||
| 17 | { | 17 | { |
| 18 | cursor: pointer; | 18 | cursor: pointer; |
| 19 | }*/ | 19 | }*/ |
| 20 | .page_modification form input[type=submit]:hover | 20 | .page_modification input[type=submit]:hover |
| 21 | { | 21 | { |
| 22 | background-color: yellow; | 22 | background-color: yellow; |
| 23 | border-radius: 4px; | 23 | border-radius: 4px; |
| @@ -29,10 +29,10 @@ | |||
| 29 | flex-wrap: wrap; | 29 | flex-wrap: wrap; |
| 30 | justify-content: space-evenly; | 30 | justify-content: space-evenly; |
| 31 | } | 31 | } |
| 32 | .edit_page_zone, .edit_bloc_zone, .delete_page_zone | 32 | .edit_page_zone, .edit_block_zone, .delete_page_zone |
| 33 | { | 33 | { |
| 34 | background-color: #f0f0f0f0; | 34 | background-color: #f0f0f0f0; |
| 35 | margin: 5px; | 35 | margin: 8px 5px; |
| 36 | padding: 10px; | 36 | padding: 10px; |
| 37 | } | 37 | } |
| 38 | #edit_description | 38 | #edit_description |
| @@ -47,32 +47,54 @@ | |||
| 47 | { | 47 | { |
| 48 | vertical-align: top; | 48 | vertical-align: top; |
| 49 | } | 49 | } |
| 50 | .edit_bloc_zone | 50 | .edit_block_zone |
| 51 | { | 51 | { |
| 52 | display: flex; | 52 | display: flex; |
| 53 | justify-content: space-evenly; | 53 | justify-content: space-evenly; |
| 54 | flex-wrap: wrap; | 54 | flex-wrap: wrap; |
| 55 | } | 55 | } |
| 56 | .edit_page_zone p, .edit_bloc_zone p, .edit_page_zone form | 56 | .edit_page_zone p, .edit_block_zone p, .edit_page_zone form |
| 57 | { | 57 | { |
| 58 | margin: 5px; | 58 | margin: 5px; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | .new_bloc #bloc_title | 61 | .new_block #bloc_title |
| 62 | { | 62 | { |
| 63 | width: 70%; | 63 | width: 70%; |
| 64 | max-width: 300px; | 64 | max-width: 300px; |
| 65 | } | 65 | } |
| 66 | .modify_bloc > div | 66 | |
| 67 | .modify_block img | ||
| 68 | { | ||
| 69 | vertical-align: middle; | ||
| 70 | } | ||
| 71 | .delete_page_zone | ||
| 72 | { | ||
| 73 | text-align: center; | ||
| 74 | } | ||
| 75 | .modify_one_block | ||
| 76 | { | ||
| 77 | background-color: white; | ||
| 78 | margin: 8px 0; | ||
| 79 | padding: 5px; | ||
| 80 | } | ||
| 81 | .modify_one_block > * | ||
| 82 | { | ||
| 83 | /*text-wrap: nowrap;*/ | ||
| 84 | } | ||
| 85 | .modify_one_block > div | ||
| 67 | { | 86 | { |
| 68 | display: flex; | 87 | display: flex; |
| 69 | align-items: baseline; | 88 | align-items: baseline; |
| 70 | } | 89 | } |
| 71 | .modify_bloc img | 90 | .block_options > * |
| 72 | { | 91 | { |
| 73 | vertical-align: middle; | 92 | /*display: flex; |
| 93 | flex-wrap: wrap;*/ | ||
| 94 | text-wrap: nowrap; | ||
| 74 | } | 95 | } |
| 75 | .delete_page_zone | 96 | .grid_options |
| 76 | { | 97 | { |
| 77 | text-align: center; | 98 | /*text-wrap: nowrap;*/ /* saut de la div grid_options */ |
| 99 | flex-wrap: wrap; /* éléments à l'intérieur de grid_options lorsque lui-même dépasse la largeur dispo (téléphone) */ | ||
| 78 | } \ No newline at end of file | 100 | } \ No newline at end of file |
diff --git a/public/js/modif_page.js b/public/js/modif_page.js index b307f69..615f34a 100644 --- a/public/js/modif_page.js +++ b/public/js/modif_page.js | |||
| @@ -19,9 +19,7 @@ function changePageTitle(page_id){ | |||
| 19 | 19 | ||
| 20 | fetch('index.php?page_edit=page_title', { | 20 | fetch('index.php?page_edit=page_title', { |
| 21 | method: 'POST', | 21 | method: 'POST', |
| 22 | headers: { | 22 | headers: { 'Content-Type': 'application/json' }, |
| 23 | 'Content-Type': 'application/json' | ||
| 24 | }, | ||
| 25 | body: JSON.stringify({title: page_name.value, page_id: page_id}) | 23 | body: JSON.stringify({title: page_name.value, page_id: page_id}) |
| 26 | }) | 24 | }) |
| 27 | .then(response => response.json()) | 25 | .then(response => response.json()) |
| @@ -49,9 +47,7 @@ function changePageTitle(page_id){ | |||
| 49 | 47 | ||
| 50 | fetch('index.php?page_edit=page_menu_path', { | 48 | fetch('index.php?page_edit=page_menu_path', { |
| 51 | method: 'POST', | 49 | method: 'POST', |
| 52 | headers: { | 50 | headers: { 'Content-Type': 'application/json' }, |
| 53 | 'Content-Type': 'application/json' | ||
| 54 | }, | ||
| 55 | body: JSON.stringify({page_menu_path: page_name_path.value, page_id: page_id}) | 51 | body: JSON.stringify({page_menu_path: page_name_path.value, page_id: page_id}) |
| 56 | }) | 52 | }) |
| 57 | .then(response => response.json()) | 53 | .then(response => response.json()) |
| @@ -88,9 +84,7 @@ function changeDescription(node_data_id){ | |||
| 88 | 84 | ||
| 89 | fetch('index.php?page_edit=page_description', { | 85 | fetch('index.php?page_edit=page_description', { |
| 90 | method: 'POST', | 86 | method: 'POST', |
| 91 | headers: { | 87 | headers: { 'Content-Type': 'application/json' }, |
| 92 | 'Content-Type': 'application/json' | ||
| 93 | }, | ||
| 94 | body: JSON.stringify({description: textarea.value, node_data_id: node_data_id}) | 88 | body: JSON.stringify({description: textarea.value, node_data_id: node_data_id}) |
| 95 | }) | 89 | }) |
| 96 | .then(response => response.json()) | 90 | .then(response => response.json()) |
| @@ -117,9 +111,7 @@ function renamePageBloc(bloc_id){ | |||
| 117 | 111 | ||
| 118 | fetch('index.php?bloc_edit=rename_page_bloc', { | 112 | fetch('index.php?bloc_edit=rename_page_bloc', { |
| 119 | method: 'POST', | 113 | method: 'POST', |
| 120 | headers: { | 114 | headers: { 'Content-Type': 'application/json' }, |
| 121 | 'Content-Type': 'application/json' | ||
| 122 | }, | ||
| 123 | body: JSON.stringify({bloc_title: input.value, bloc_id: bloc_id}) | 115 | body: JSON.stringify({bloc_title: input.value, bloc_id: bloc_id}) |
| 124 | }) | 116 | }) |
| 125 | .then(response => response.json()) | 117 | .then(response => response.json()) |
| @@ -159,9 +151,7 @@ function switchBlocsPositions(bloc_id, direction, current_page) { | |||
| 159 | 151 | ||
| 160 | fetch('index.php?page=' + current_page + '&bloc_edit=switch_blocs_positions', { | 152 | fetch('index.php?page=' + current_page + '&bloc_edit=switch_blocs_positions', { |
| 161 | method: 'POST', | 153 | method: 'POST', |
| 162 | headers: { | 154 | headers: { 'Content-Type': 'application/json' }, |
| 163 | 'Content-Type': 'application/json' | ||
| 164 | }, | ||
| 165 | body: JSON.stringify({ id1: bloc_id, id2: parseInt(other_bloc.id) }) | 155 | body: JSON.stringify({ id1: bloc_id, id2: parseInt(other_bloc.id) }) |
| 166 | }) | 156 | }) |
| 167 | .then(response => response.json()) | 157 | .then(response => response.json()) |
| @@ -187,4 +177,59 @@ function switchBlocsPositions(bloc_id, direction, current_page) { | |||
| 187 | .catch(error => { | 177 | .catch(error => { |
| 188 | console.error('Erreur:', error); | 178 | console.error('Erreur:', error); |
| 189 | }); | 179 | }); |
| 180 | } | ||
| 181 | |||
| 182 | function changePresentation(bloc_id){ | ||
| 183 | const presentation = document.getElementById('presentation_select_' + bloc_id).value; | ||
| 184 | |||
| 185 | fetch('index.php?bloc_edit=change_presentation', { | ||
| 186 | method: 'POST', | ||
| 187 | headers: { 'Content-Type': 'application/json' }, | ||
| 188 | body: JSON.stringify({ id: bloc_id, presentation: presentation }) | ||
| 189 | }) | ||
| 190 | .then(response => response.json()) | ||
| 191 | .then(data => { | ||
| 192 | if(data.success){ | ||
| 193 | document.getElementById(bloc_id).className = presentation; | ||
| 194 | document.getElementById('cols_min_width_edit_' + bloc_id).className = presentation === 'grid' ? '' : 'hidden'; | ||
| 195 | console.log('changement de présentation'); | ||
| 196 | } | ||
| 197 | else{ | ||
| 198 | console.log('Erreur au changement de présentation côté serveur'); | ||
| 199 | } | ||
| 200 | }) | ||
| 201 | .catch(error => { | ||
| 202 | console.error('Erreur:', error); | ||
| 203 | }); | ||
| 204 | } | ||
| 205 | |||
| 206 | function changeColsMinWidth(bloc_id){ | ||
| 207 | const cols_min_width_input = document.getElementById('cols_min_width_select_' + bloc_id); | ||
| 208 | |||
| 209 | if(cols_min_width_input.value < 150){ | ||
| 210 | cols_min_width_input.value = 150; | ||
| 211 | } | ||
| 212 | else if(cols_min_width_input.value > 500){ | ||
| 213 | cols_min_width_input.value = 500; | ||
| 214 | } | ||
| 215 | |||
| 216 | fetch('index.php?bloc_edit=change_cols_min_width', { | ||
| 217 | method: 'POST', | ||
| 218 | headers: { 'Content-Type': 'application/json' }, | ||
| 219 | body: JSON.stringify({ id: bloc_id, cols_min_width: cols_min_width_input.value }) | ||
| 220 | }) | ||
| 221 | .then(response => response.json()) | ||
| 222 | .then(data => { | ||
| 223 | if(data.success){ | ||
| 224 | document.getElementById(bloc_id).className = 'grid'; | ||
| 225 | document.getElementById(bloc_id).querySelector(".section_child").style.gridTemplateColumns = 'repeat(auto-fit, minmax(' + data.cols_min_width + 'px, 1fr))'; | ||
| 226 | console.log('changement de la largeur minimum en mode grille'); | ||
| 227 | } | ||
| 228 | else{ | ||
| 229 | console.log('Erreur au changement du nb de colonnes en mode grille côté serveur'); | ||
| 230 | } | ||
| 231 | }) | ||
| 232 | .catch(error => { | ||
| 233 | console.error('Erreur:', error); | ||
| 234 | }); | ||
| 190 | } \ No newline at end of file | 235 | } \ No newline at end of file |
diff --git a/src/controller/ArticleController.php b/src/controller/ArticleController.php index 71bfdc3..b8af290 100644 --- a/src/controller/ArticleController.php +++ b/src/controller/ArticleController.php | |||
| @@ -32,7 +32,10 @@ class ArticleController | |||
| 32 | if($id[0] === 'n') | 32 | if($id[0] === 'n') |
| 33 | { | 33 | { |
| 34 | $section_id = (int)substr($id, 1); // id du bloc <section> | 34 | $section_id = (int)substr($id, 1); // id du bloc <section> |
| 35 | $director->findNodeById($section_id); | 35 | if(!$director->findNodeById($section_id)){ |
| 36 | echo json_encode(['success' => false, 'error' => 'article_not_saved']); | ||
| 37 | die; | ||
| 38 | } | ||
| 36 | $director->makeSectionNode(); | 39 | $director->makeSectionNode(); |
| 37 | $node = $director->getNode(); // = <section> | 40 | $node = $director->getNode(); // = <section> |
| 38 | 41 | ||
diff --git a/src/controller/Director.php b/src/controller/Director.php index b154432..6ee0993 100644 --- a/src/controller/Director.php +++ b/src/controller/Director.php | |||
| @@ -13,7 +13,7 @@ class Director | |||
| 13 | static public Menu $menu_data; // pour NavBuilder | 13 | static public Menu $menu_data; // pour NavBuilder |
| 14 | static public ?Path $page_path = null; // pour $current dans NavBuilder et pour BreadcrumbBuilder | 14 | static public ?Path $page_path = null; // pour $current dans NavBuilder et pour BreadcrumbBuilder |
| 15 | private Page $page; | 15 | private Page $page; |
| 16 | private Node $node; | 16 | private ?Node $node; |
| 17 | private Node $article; | 17 | private Node $article; |
| 18 | 18 | ||
| 19 | public function __construct(EntityManager $entityManager, bool $get_menu = false) | 19 | public function __construct(EntityManager $entityManager, bool $get_menu = false) |
| @@ -82,8 +82,10 @@ class Director | |||
| 82 | $node->getParent()->addChild($node); | 82 | $node->getParent()->addChild($node); |
| 83 | 83 | ||
| 84 | // spécifique page article | 84 | // spécifique page article |
| 85 | if($node->getName() === 'new' && $this->page->getEndOfPath() == 'article'){ | 85 | if($this->page->getEndOfPath() == 'article'){ |
| 86 | $new = $node; | 86 | if($node->getName() === 'new'){ |
| 87 | $new = $node; | ||
| 88 | } | ||
| 87 | } | 89 | } |
| 88 | } | 90 | } |
| 89 | } | 91 | } |
| @@ -93,9 +95,10 @@ class Director | |||
| 93 | } | 95 | } |
| 94 | 96 | ||
| 95 | // le basique | 97 | // le basique |
| 96 | public function findNodeById(int $id): void | 98 | public function findNodeById(int $id): bool |
| 97 | { | 99 | { |
| 98 | $this->node = $this->entityManager->find('App\Entity\Node', $id); | 100 | $this->node = $this->entityManager->find('App\Entity\Node', $id); |
| 101 | return $this->node === null ? false : true; | ||
| 99 | } | 102 | } |
| 100 | 103 | ||
| 101 | // récupération d'un article pour modification | 104 | // récupération d'un article pour modification |
diff --git a/src/controller/PageManagementController.php b/src/controller/PageManagementController.php index 50ce193..4528810 100644 --- a/src/controller/PageManagementController.php +++ b/src/controller/PageManagementController.php | |||
| @@ -39,7 +39,7 @@ class PageManagementController | |||
| 39 | } | 39 | } |
| 40 | } | 40 | } |
| 41 | $entityManager->flush(); | 41 | $entityManager->flush(); |
| 42 | header("Location: " . new URL(['page' => $page->getPagePath(), 'action' => 'modif_page'])); | 42 | header("Location: " . new URL(['page' => $page->getPagePath(), 'mode' => 'page_modif'])); |
| 43 | die; | 43 | die; |
| 44 | } | 44 | } |
| 45 | 45 | ||
| @@ -104,7 +104,7 @@ class PageManagementController | |||
| 104 | $entityManager->flush(); | 104 | $entityManager->flush(); |
| 105 | 105 | ||
| 106 | // page créée, direction la page en mode modification pour ajouter des blocs | 106 | // page créée, direction la page en mode modification pour ajouter des blocs |
| 107 | header("Location: " . new URL(['page' => $page->getPagePath(), 'action' => 'modif_page'])); | 107 | header("Location: " . new URL(['page' => $page->getPagePath(), 'mode' => 'page_modif'])); |
| 108 | die; | 108 | die; |
| 109 | } | 109 | } |
| 110 | 110 | ||
| @@ -146,10 +146,10 @@ class PageManagementController | |||
| 146 | if($_POST["bloc_select"] === 'calendar' || $_POST["bloc_select"] === 'form'){ | 146 | if($_POST["bloc_select"] === 'calendar' || $_POST["bloc_select"] === 'form'){ |
| 147 | $dql = 'SELECT n FROM App\Entity\Node n WHERE n.page = :page AND n.name_node = :name'; // noeud 'head' de la page | 147 | $dql = 'SELECT n FROM App\Entity\Node n WHERE n.page = :page AND n.name_node = :name'; // noeud 'head' de la page |
| 148 | $bulk_data = $entityManager | 148 | $bulk_data = $entityManager |
| 149 | ->createQuery($dql) | 149 | ->createQuery($dql) |
| 150 | ->setParameter('page', $page) | 150 | ->setParameter('page', $page) |
| 151 | ->setParameter('name', 'head') | 151 | ->setParameter('name', 'head') |
| 152 | ->getResult(); | 152 | ->getResult(); |
| 153 | 153 | ||
| 154 | if(count($bulk_data) != 1){ // 1 head par page | 154 | if(count($bulk_data) != 1){ // 1 head par page |
| 155 | header("Location: " . new URL(['page' => $_GET['page'], 'error' => 'head_node_not_found'])); | 155 | header("Location: " . new URL(['page' => $_GET['page'], 'error' => 'head_node_not_found'])); |
| @@ -175,16 +175,20 @@ class PageManagementController | |||
| 175 | 175 | ||
| 176 | // valeurs par défaut | 176 | // valeurs par défaut |
| 177 | if($_POST["bloc_select"] === 'post_block'){ | 177 | if($_POST["bloc_select"] === 'post_block'){ |
| 178 | $data->setPresentation($entityManager->find('App\Entity\Presentation', 1)); // pas génial l'utilisation de l'index dans la table | 178 | $data->setPresentation(Presentation::findPresentation($entityManager, 'fullwidth')); // pas génial l'utilisation de l'index dans la table |
| 179 | } | 179 | } |
| 180 | elseif($_POST["bloc_select"] === 'news_block'){ | 180 | elseif($_POST["bloc_select"] === 'news_block'){ |
| 181 | $data->setPresentation($entityManager->find('App\Entity\Presentation', 2)); | 181 | $data->setPresentation(Presentation::findPresentation($entityManager, 'grid')); |
| 182 | } | ||
| 183 | elseif($_POST["bloc_select"] === 'galery'){ | ||
| 184 | $data->setPresentation(Presentation::findPresentation($entityManager, 'mosaic')); // mieux que carousel pour commencer | ||
| 182 | } | 185 | } |
| 186 | // else = null par défaut | ||
| 183 | 187 | ||
| 184 | $entityManager->persist($block); | 188 | $entityManager->persist($block); |
| 185 | $entityManager->persist($data); | 189 | $entityManager->persist($data); |
| 186 | $entityManager->flush(); | 190 | $entityManager->flush(); |
| 187 | header("Location: " . new URL(['page' => $_GET['page'], 'action' => 'modif_page'])); | 191 | header("Location: " . new URL(['page' => $_GET['page'], 'mode' => 'page_modif'])); |
| 188 | die; | 192 | die; |
| 189 | } | 193 | } |
| 190 | 194 | ||
| @@ -208,7 +212,8 @@ class PageManagementController | |||
| 208 | $entityManager->remove($bloc); // suppression en BDD | 212 | $entityManager->remove($bloc); // suppression en BDD |
| 209 | $entityManager->flush(); | 213 | $entityManager->flush(); |
| 210 | } | 214 | } |
| 211 | header("Location: " . new URL(['page' => $_GET['page'], 'action' => 'modif_page'])); | 215 | |
| 216 | header("Location: " . new URL(['page' => $_GET['page'], 'mode' => 'page_modif'])); | ||
| 212 | die; | 217 | die; |
| 213 | } | 218 | } |
| 214 | 219 | ||
| @@ -235,7 +240,7 @@ class PageManagementController | |||
| 235 | static public function SwitchBlocsPositions(EntityManager $entityManager, array $json): void | 240 | static public function SwitchBlocsPositions(EntityManager $entityManager, array $json): void |
| 236 | { | 241 | { |
| 237 | if(isset($json['id1']) && is_int($json['id1']) && isset($json['id2']) && is_int($json['id2']) && isset($_GET['page'])){ | 242 | if(isset($json['id1']) && is_int($json['id1']) && isset($json['id2']) && is_int($json['id2']) && isset($_GET['page'])){ |
| 238 | $director = new Director($entityManager, true); | 243 | $director = new Director($entityManager, true); // true pour $director->findItsChildren(); |
| 239 | $director->findUniqueNodeByName('main'); | 244 | $director->findUniqueNodeByName('main'); |
| 240 | $director->findItsChildren(); | 245 | $director->findItsChildren(); |
| 241 | $main = $director->getNode(); | 246 | $main = $director->getNode(); |
| @@ -269,4 +274,42 @@ class PageManagementController | |||
| 269 | } | 274 | } |
| 270 | die; | 275 | die; |
| 271 | } | 276 | } |
| 277 | |||
| 278 | static public function changePresentation(EntityManager $entityManager, array $json): void | ||
| 279 | { | ||
| 280 | if(isset($json['id']) && isset($json['presentation'])){ | ||
| 281 | $director = new Director($entityManager, false); | ||
| 282 | $director->findNodeById($json['id']); | ||
| 283 | |||
| 284 | $presentation = Presentation::findPresentation($entityManager, $json['presentation']); | ||
| 285 | if($presentation !== null){ | ||
| 286 | $director->getNode()->getNodeData()->setPresentation($presentation); | ||
| 287 | |||
| 288 | $entityManager->flush(); | ||
| 289 | echo json_encode(['success' => true, 'presentation' => $json['presentation'], 'cols_min_width' => $director->getNode()->getNodeData()->getColsMinWidth()]); | ||
| 290 | } | ||
| 291 | else{ | ||
| 292 | echo json_encode(['success' => false]); | ||
| 293 | } | ||
| 294 | } | ||
| 295 | else{ | ||
| 296 | echo json_encode(['success' => false]); | ||
| 297 | } | ||
| 298 | die; | ||
| 299 | } | ||
| 300 | static public function changeColsMinWidth(EntityManager $entityManager, array $json): void | ||
| 301 | { | ||
| 302 | if(isset($json['id']) && isset($json['cols_min_width'])){ | ||
| 303 | $director = new Director($entityManager, false); | ||
| 304 | $director->findNodeById($json['id']); | ||
| 305 | $director->getNode()->getNodeData()->setColsMinWidth((int)$json['cols_min_width']); // attention conversion? | ||
| 306 | |||
| 307 | $entityManager->flush(); | ||
| 308 | echo json_encode(['success' => true, 'cols_min_width' => $json['cols_min_width']]); | ||
| 309 | } | ||
| 310 | else{ | ||
| 311 | echo json_encode(['success' => false]); | ||
| 312 | } | ||
| 313 | die; | ||
| 314 | } | ||
| 272 | } \ No newline at end of file | 315 | } \ No newline at end of file |
diff --git a/src/controller/ViewController.php b/src/controller/ViewController.php index 0830a5b..668fa25 100644 --- a/src/controller/ViewController.php +++ b/src/controller/ViewController.php | |||
| @@ -5,16 +5,17 @@ | |||
| 5 | 5 | ||
| 6 | declare(strict_types=1); | 6 | declare(strict_types=1); |
| 7 | 7 | ||
| 8 | use App\Entity\Article; | ||
| 8 | use App\Entity\Node; | 9 | use App\Entity\Node; |
| 9 | use Doctrine\ORM\EntityManager; | 10 | use Doctrine\ORM\EntityManager; |
| 10 | use Symfony\Component\HttpFoundation\Request; | 11 | use Symfony\Component\HttpFoundation\Request; |
| 11 | use Symfony\Component\HttpFoundation\Response; | 12 | use Symfony\Component\HttpFoundation\Response; |
| 12 | 13 | ||
| 13 | class ViewController extends AbstractBuilder | 14 | class ViewController extends AbstractBuilder // ViewController est aussi le premier Builder |
| 14 | { | 15 | { |
| 15 | static public Node $root_node; | 16 | static public Node $root_node; |
| 16 | 17 | ||
| 17 | public function __construct(){} | 18 | public function __construct(){} // surcharge celui de AbstractBuilder |
| 18 | 19 | ||
| 19 | public function buildView(EntityManager $entityManager, Request $request): Response | 20 | public function buildView(EntityManager $entityManager, Request $request): Response |
| 20 | { | 21 | { |
| @@ -25,13 +26,28 @@ class ViewController extends AbstractBuilder | |||
| 25 | 26 | ||
| 26 | // mode modification d'une page activé | 27 | // mode modification d'une page activé |
| 27 | if($_SESSION['admin'] && $request->query->has('page') | 28 | if($_SESSION['admin'] && $request->query->has('page') |
| 28 | && $request->query->has('action') && $request->query->get('action') === 'modif_page' | 29 | && $request->query->has('mode') && $request->query->get('mode') === 'page_modif' |
| 29 | && $request->query->get('page') !== 'connexion' && $request->query->get('page') !== 'article' && $request->query->get('page') !== 'nouvelle_page' && $request->query->get('page') !== 'menu_chemins'){ | 30 | && $request->query->get('page') !== 'connexion' && $request->query->get('page') !== 'article' && $request->query->get('page') !== 'nouvelle_page' && $request->query->get('page') !== 'menu_chemins'){ |
| 30 | // les contrôles de la 2è ligne devraient utiliser un tableau | 31 | // les contrôles de la 2è ligne devraient utiliser un tableau |
| 31 | MainBuilder::$modif_mode = true; | 32 | MainBuilder::$modif_mode = true; |
| 32 | } | 33 | } |
| 33 | 34 | ||
| 34 | // construction de la page | 35 | // page article: mode création et erreurs d'id |
| 36 | if($_SESSION['admin'] && $request->query->has('page') && $request->query->get('page') === 'article'){ | ||
| 37 | if(!$request->query->has('id')){ | ||
| 38 | return new Response($this->html, 302); | ||
| 39 | } | ||
| 40 | else{ | ||
| 41 | if($request->query->get('id')[0] === 'n'){ // mode création d'article (vérification de l'id du bloc dans ArticleController) | ||
| 42 | NewBuilder::$new_article_mode = true; | ||
| 43 | } | ||
| 44 | elseif(self::$root_node->getNodeByName('main')->getAdoptedChild() === null){ // id inconnu | ||
| 45 | return new Response($this->html, 302); | ||
| 46 | } | ||
| 47 | } | ||
| 48 | } | ||
| 49 | |||
| 50 | //début de la construction de la page | ||
| 35 | $this->useChildrenBuilder(self::$root_node); | 51 | $this->useChildrenBuilder(self::$root_node); |
| 36 | 52 | ||
| 37 | return new Response($this->html, 200); | 53 | return new Response($this->html, 200); |
diff --git a/src/installation.php b/src/installation.php index dd3aa35..b251c43 100644 --- a/src/installation.php +++ b/src/installation.php | |||
| @@ -118,8 +118,10 @@ function makeStartPage(EntityManager $entityManager){ | |||
| 118 | $bloc_new_page = new Node('new_page', NULL, [], 1, $main, $new_page, NULL); | 118 | $bloc_new_page = new Node('new_page', NULL, [], 1, $main, $new_page, NULL); |
| 119 | 119 | ||
| 120 | /* -- table presentation -- */ | 120 | /* -- table presentation -- */ |
| 121 | $list = new Presentation('list'); | 121 | $fullwidth = new Presentation('fullwidth'); |
| 122 | $grid = new Presentation('grid'); | 122 | $grid = new Presentation('grid'); |
| 123 | $mosaic = new Presentation('mosaic'); | ||
| 124 | $carousel = new Presentation('carousel'); | ||
| 123 | 125 | ||
| 124 | /* -- table image -- */ | 126 | /* -- table image -- */ |
| 125 | // paramètres: file_name, file_path, file_path_mini, mime_type, alt | 127 | // paramètres: file_name, file_path, file_path_mini, mime_type, alt |
| @@ -169,8 +171,10 @@ function makeStartPage(EntityManager $entityManager){ | |||
| 169 | $entityManager->persist($bloc_new_page); | 171 | $entityManager->persist($bloc_new_page); |
| 170 | 172 | ||
| 171 | /* -- table presentation -- */ | 173 | /* -- table presentation -- */ |
| 172 | $entityManager->persist($list); | 174 | $entityManager->persist($fullwidth); |
| 173 | $entityManager->persist($grid); | 175 | $entityManager->persist($grid); |
| 176 | $entityManager->persist($mosaic); | ||
| 177 | $entityManager->persist($carousel); | ||
| 174 | 178 | ||
| 175 | /* -- table image -- */ | 179 | /* -- table image -- */ |
| 176 | $entityManager->persist($favicon); | 180 | $entityManager->persist($favicon); |
diff --git a/src/model/Blocks.php b/src/model/Blocks.php index f6475cd..a6fab45 100644 --- a/src/model/Blocks.php +++ b/src/model/Blocks.php | |||
| @@ -3,10 +3,10 @@ | |||
| 3 | 3 | ||
| 4 | class Blocks{ | 4 | class Blocks{ |
| 5 | /*private array $types = ['blog', 'grid', 'calendar', 'galery', 'form'];*/ | 5 | /*private array $types = ['blog', 'grid', 'calendar', 'galery', 'form'];*/ |
| 6 | static private array $types = ['post_block', 'news_block', 'calendar', 'galery', 'form']; | 6 | static private array $types = ['post_block', 'news_block', 'galery', 'calendar', 'form']; |
| 7 | 7 | ||
| 8 | /*private array $names = ['Blog', 'Grille', 'Calendrier', 'Galerie', 'Formulaire'];*/ | 8 | /*private array $names = ['Blog', 'Grille', 'Calendrier', 'Galerie', 'Formulaire'];*/ |
| 9 | static private array $names = ['Articles libres', 'Actualités', 'Calendrier', 'Galerie', 'Formulaire']; | 9 | static private array $names = ['Articles libres', 'Actualités', 'Galerie', 'Calendrier', 'Formulaire']; |
| 10 | 10 | ||
| 11 | static public function getNameList(): array | 11 | static public function getNameList(): array |
| 12 | { | 12 | { |
diff --git a/src/model/entities/Node.php b/src/model/entities/Node.php index 93363d3..7cf395c 100644 --- a/src/model/entities/Node.php +++ b/src/model/entities/Node.php | |||
| @@ -161,6 +161,15 @@ class Node | |||
| 161 | { | 161 | { |
| 162 | return $this->children; | 162 | return $this->children; |
| 163 | } | 163 | } |
| 164 | public function getNodeByName(string $name): ?Node | ||
| 165 | { | ||
| 166 | foreach($this->children as $child){ | ||
| 167 | if($child->getName() === $name){ | ||
| 168 | return $child; | ||
| 169 | } | ||
| 170 | } | ||
| 171 | return null; | ||
| 172 | } | ||
| 164 | public function addChild(self $child): void | 173 | public function addChild(self $child): void |
| 165 | { | 174 | { |
| 166 | $this->children[] = $child; | 175 | $this->children[] = $child; |
diff --git a/src/model/entities/NodeData.php b/src/model/entities/NodeData.php index c835727..3688e4a 100644 --- a/src/model/entities/NodeData.php +++ b/src/model/entities/NodeData.php | |||
| @@ -24,12 +24,15 @@ class NodeData | |||
| 24 | #[ORM\JoinColumn(name: "node_id", referencedColumnName: "id_node", onDelete: "CASCADE")] | 24 | #[ORM\JoinColumn(name: "node_id", referencedColumnName: "id_node", onDelete: "CASCADE")] |
| 25 | private Node $node; | 25 | private Node $node; |
| 26 | 26 | ||
| 27 | #[ORM\Column(type: "json")] | ||
| 28 | private array $data; | ||
| 29 | |||
| 27 | #[ORM\ManyToOne(targetEntity: Presentation::class)] | 30 | #[ORM\ManyToOne(targetEntity: Presentation::class)] |
| 28 | #[ORM\JoinColumn(name: "presentation_id", referencedColumnName: "id_presentation", nullable: true)] | 31 | #[ORM\JoinColumn(name: "presentation_id", referencedColumnName: "id_presentation", nullable: true)] |
| 29 | private Presentation $presentation; | 32 | private ?Presentation $presentation; |
| 30 | 33 | ||
| 31 | #[ORM\Column(type: "json")] | 34 | #[ORM\Column(type: "integer", length: 255, nullable: true)] |
| 32 | private array $data; | 35 | private ?int $grid_cols_min_width = null; // pour le mode grille |
| 33 | 36 | ||
| 34 | // liaison avec table intermédiaire | 37 | // liaison avec table intermédiaire |
| 35 | #[ORM\ManyToMany(targetEntity: Image::class, inversedBy: "node_data")] | 38 | #[ORM\ManyToMany(targetEntity: Image::class, inversedBy: "node_data")] |
| @@ -40,25 +43,20 @@ class NodeData | |||
| 40 | )] | 43 | )] |
| 41 | private Collection $images; | 44 | private Collection $images; |
| 42 | 45 | ||
| 43 | public function __construct(array $data, Node $node, Collection $images = new ArrayCollection) | 46 | public function __construct(array $data, Node $node, Collection $images = new ArrayCollection, Presentation $presentation = null) |
| 44 | { | 47 | { |
| 45 | $this->data = $data; | 48 | $this->data = $data; |
| 46 | $this->node = $node; | 49 | $this->node = $node; |
| 47 | $this->images = $images; | 50 | $this->images = $images; |
| 51 | if(!empty($presentation) && $presentation->getName() === 'grid'){ | ||
| 52 | $this->grid_cols_min_width = 250; | ||
| 53 | } | ||
| 48 | } | 54 | } |
| 49 | 55 | ||
| 50 | public function getId(): int | 56 | public function getId(): int |
| 51 | { | 57 | { |
| 52 | return $this->id_node_data; | 58 | return $this->id_node_data; |
| 53 | } | 59 | } |
| 54 | public function getPresentation(): Presentation | ||
| 55 | { | ||
| 56 | return $this->presentation; | ||
| 57 | } | ||
| 58 | public function setPresentation(Presentation $presentation): void | ||
| 59 | { | ||
| 60 | $this->presentation = $presentation; | ||
| 61 | } | ||
| 62 | public function getData(): array | 60 | public function getData(): array |
| 63 | { | 61 | { |
| 64 | return $this->data; | 62 | return $this->data; |
| @@ -77,6 +75,24 @@ class NodeData | |||
| 77 | unset($this->data[$key]); | 75 | unset($this->data[$key]); |
| 78 | } | 76 | } |
| 79 | } | 77 | } |
| 78 | public function getPresentation(): ?Presentation | ||
| 79 | { | ||
| 80 | return $this->presentation; | ||
| 81 | } | ||
| 82 | public function setPresentation(Presentation $presentation): void | ||
| 83 | { | ||
| 84 | $this->presentation = $presentation; | ||
| 85 | } | ||
| 86 | public function getColsMinWidth(): int | ||
| 87 | { | ||
| 88 | $default = 320; // pixels | ||
| 89 | return $this->grid_cols_min_width === null ? $default : $this->grid_cols_min_width; | ||
| 90 | } | ||
| 91 | public function setColsMinWidth(int $columns): void | ||
| 92 | { | ||
| 93 | $this->grid_cols_min_width = $columns; | ||
| 94 | } | ||
| 95 | |||
| 80 | /*public function setNode(Node $node): void | 96 | /*public function setNode(Node $node): void |
| 81 | { | 97 | { |
| 82 | $this->node = $node; | 98 | $this->node = $node; |
diff --git a/src/model/entities/Presentation.php b/src/model/entities/Presentation.php index 73b6a6a..6ada565 100644 --- a/src/model/entities/Presentation.php +++ b/src/model/entities/Presentation.php | |||
| @@ -5,27 +5,43 @@ declare(strict_types=1); | |||
| 5 | 5 | ||
| 6 | namespace App\Entity; | 6 | namespace App\Entity; |
| 7 | 7 | ||
| 8 | use Doctrine\ORM\EntityManager; | ||
| 8 | use Doctrine\ORM\Mapping as ORM; | 9 | use Doctrine\ORM\Mapping as ORM; |
| 9 | 10 | ||
| 10 | #[ORM\Entity] | 11 | #[ORM\Entity] |
| 11 | #[ORM\Table(name: TABLE_PREFIX . "presentation")] | 12 | #[ORM\Table(name: TABLE_PREFIX . "presentation")] |
| 12 | class Presentation | 13 | class Presentation |
| 13 | { | 14 | { |
| 15 | static public array $option_list = ['fullwidth' => 'Pleine largeur', 'grid' => 'Grille', 'mosaic' => 'Mosaïque', 'carousel' => 'Carrousel']; | ||
| 16 | |||
| 14 | #[ORM\Id] | 17 | #[ORM\Id] |
| 15 | #[ORM\GeneratedValue] | 18 | #[ORM\GeneratedValue] |
| 16 | #[ORM\Column(type: "integer")] | 19 | #[ORM\Column(type: "integer")] |
| 17 | private int $id_presentation; | 20 | private int $id_presentation; |
| 18 | 21 | ||
| 19 | #[ORM\Column(type: "string", length: 255)] | 22 | #[ORM\Column(type: "string", length: 255)] |
| 20 | private string $name_presentation; | 23 | private string $name; |
| 21 | 24 | ||
| 22 | public function __construct(string $name) | 25 | public function __construct(string $name) |
| 23 | { | 26 | { |
| 24 | $this->name_presentation = $name; | 27 | $this->name = array_keys(self::$option_list)[0]; // = fullwidth, sécurité option inconnue |
| 28 | foreach(self::$option_list as $key => $value){ | ||
| 29 | if($name === $key){ | ||
| 30 | $this->name = $name; | ||
| 31 | } | ||
| 32 | } | ||
| 25 | } | 33 | } |
| 26 | 34 | ||
| 27 | public function getName(): string | 35 | public function getName(): string |
| 28 | { | 36 | { |
| 29 | return $this->name_presentation; | 37 | return $this->name; |
| 38 | } | ||
| 39 | |||
| 40 | static public function findPresentation(EntityManager $entityManager, string $name): ?self | ||
| 41 | { | ||
| 42 | return $entityManager | ||
| 43 | ->createQuery('SELECT p FROM App\Entity\Presentation p WHERE p.name = :name') | ||
| 44 | ->setParameter('name', $name) | ||
| 45 | ->getOneOrNullResult(); | ||
| 30 | } | 46 | } |
| 31 | } \ No newline at end of file | 47 | } \ No newline at end of file |
diff --git a/src/router.php b/src/router.php index 92dccb6..326a637 100644 --- a/src/router.php +++ b/src/router.php | |||
| @@ -21,8 +21,7 @@ if($_SERVER['REQUEST_METHOD'] === 'GET'){ | |||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | // bouton déconnexion | 23 | // bouton déconnexion |
| 24 | if($request->query->has('action') && $request->query->get('action') === 'deconnection') | 24 | if($request->query->has('action') && $request->query->get('action') === 'deconnection'){ |
| 25 | { | ||
| 26 | UserController::disconnect($entityManager); | 25 | UserController::disconnect($entityManager); |
| 27 | } | 26 | } |
| 28 | 27 | ||
| @@ -40,6 +39,7 @@ if($_SERVER['REQUEST_METHOD'] === 'GET'){ | |||
| 40 | 39 | ||
| 41 | // construction d'une page | 40 | // construction d'une page |
| 42 | $response = (new ViewController)->buildView($entityManager, $request); // utilise Director | 41 | $response = (new ViewController)->buildView($entityManager, $request); // utilise Director |
| 42 | // parenthèses nécéssaires autour de l'instanciation pour PHP < 8.4 | ||
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | 45 | ||
| @@ -47,8 +47,7 @@ elseif($_SERVER['REQUEST_METHOD'] === 'POST'){ | |||
| 47 | /* -- contrôleurs appellables par tout le monde -- */ | 47 | /* -- contrôleurs appellables par tout le monde -- */ |
| 48 | 48 | ||
| 49 | // table "user" vide | 49 | // table "user" vide |
| 50 | if(!UserController::existUsers($entityManager)) | 50 | if(!UserController::existUsers($entityManager)){ |
| 51 | { | ||
| 52 | UserController::createUser($entityManager); | 51 | UserController::createUser($entityManager); |
| 53 | } | 52 | } |
| 54 | 53 | ||
| @@ -179,14 +178,18 @@ elseif($_SERVER['REQUEST_METHOD'] === 'POST'){ | |||
| 179 | // partie "blocs" | 178 | // partie "blocs" |
| 180 | elseif($request->query->has('bloc_edit')) | 179 | elseif($request->query->has('bloc_edit')) |
| 181 | { | 180 | { |
| 182 | // renommage d'un bloc | ||
| 183 | if($request->query->get('bloc_edit') === 'rename_page_bloc'){ | 181 | if($request->query->get('bloc_edit') === 'rename_page_bloc'){ |
| 184 | PageManagementController::renameBloc($entityManager, $json); | 182 | PageManagementController::renameBloc($entityManager, $json); |
| 185 | } | 183 | } |
| 186 | // inversion des positions de deux blocs | ||
| 187 | elseif($request->query->get('bloc_edit') === 'switch_blocs_positions'){ | 184 | elseif($request->query->get('bloc_edit') === 'switch_blocs_positions'){ |
| 188 | PageManagementController::SwitchBlocsPositions($entityManager, $json); | 185 | PageManagementController::SwitchBlocsPositions($entityManager, $json); |
| 189 | } | 186 | } |
| 187 | elseif($request->query->get('bloc_edit') === 'change_presentation'){ | ||
| 188 | PageManagementController::changePresentation($entityManager, $json); | ||
| 189 | } | ||
| 190 | elseif($request->query->get('bloc_edit') === 'change_cols_min_width'){ | ||
| 191 | PageManagementController::changeColsMinWidth($entityManager, $json); | ||
| 192 | } | ||
| 190 | } | 193 | } |
| 191 | } | 194 | } |
| 192 | 195 | ||
| @@ -206,7 +209,7 @@ elseif($_SERVER['REQUEST_METHOD'] === 'POST'){ | |||
| 206 | /* -- envoi formulaire HTML -- */ | 209 | /* -- envoi formulaire HTML -- */ |
| 207 | elseif($_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded') | 210 | elseif($_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded') |
| 208 | { | 211 | { |
| 209 | if($_GET['action'] === 'delete_article' && isset($_GET['id'])){ | 212 | if($request->query->has('action') && $request->query->get('action') === 'delete_article' && isset($_GET['id'])){ |
| 210 | $response = ArticleController::deleteArticle($entityManager, $_GET); // version formulaire | 213 | $response = ArticleController::deleteArticle($entityManager, $_GET); // version formulaire |
| 211 | } | 214 | } |
| 212 | 215 | ||
| @@ -303,13 +306,13 @@ else{ | |||
| 303 | 306 | ||
| 304 | /* -- utilisation de la réponse -- */ | 307 | /* -- utilisation de la réponse -- */ |
| 305 | if(isset($response)){ | 308 | if(isset($response)){ |
| 306 | if($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded') | 309 | if($request->isMethod('GET') && $response->getStatusCode() == 302){ // 302 redirection temporaire |
| 307 | { | 310 | // ne gère pour l'instant que les mauvais id de la page article |
| 311 | header('Location: ' . new URL(['page' => !empty($_GET['from']) ? $_GET['from'] : 'accueil'])); | ||
| 312 | } | ||
| 313 | elseif($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded'){ | ||
| 308 | $response_data = json_decode(($response)->getContent(), true); | 314 | $response_data = json_decode(($response)->getContent(), true); |
| 309 | $url = new URL; | 315 | $url = new URL(['page' => !empty($_GET['from']) ? $_GET['from'] : 'accueil']); |
| 310 | if(isset($_GET['from'])){ | ||
| 311 | $url->addParams(['page' => $_GET['from']]); | ||
| 312 | } | ||
| 313 | $url->addParams(['success' => $response_data['success'], 'message' => $response_data['message']]); | 316 | $url->addParams(['success' => $response_data['success'], 'message' => $response_data['message']]); |
| 314 | header('Location: ' . $url); | 317 | header('Location: ' . $url); |
| 315 | } | 318 | } |
| @@ -318,8 +321,7 @@ if(isset($response)){ | |||
| 318 | } | 321 | } |
| 319 | } | 322 | } |
| 320 | else{ | 323 | else{ |
| 321 | if($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded') | 324 | if($_SERVER['REQUEST_METHOD'] === 'POST' && $_SERVER['CONTENT_TYPE'] === 'application/x-www-form-urlencoded'){ |
| 322 | { | ||
| 323 | header("Location: " . new URL(['error' => 'erreur côté serveur'])); | 325 | header("Location: " . new URL(['error' => 'erreur côté serveur'])); |
| 324 | } | 326 | } |
| 325 | else{ | 327 | else{ |
diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php index eda5be1..cf88476 100644 --- a/src/view/FooterBuilder.php +++ b/src/view/FooterBuilder.php | |||
| @@ -24,21 +24,16 @@ class FooterBuilder extends AbstractBuilder | |||
| 24 | 24 | ||
| 25 | // zone admin | 25 | // zone admin |
| 26 | $empty_admin_zone = ''; | 26 | $empty_admin_zone = ''; |
| 27 | //$zone_admin = ''; | ||
| 28 | if($_SESSION['admin']) | 27 | if($_SESSION['admin']) |
| 29 | { | 28 | { |
| 30 | $empty_admin_zone = 'empty_admin_zone'; | 29 | $empty_admin_zone = 'empty_admin_zone'; |
| 31 | $link_edit_page = CURRENT_PAGE === 'article' ? new URL(['page' => 'accueil']) : new URL(['page' => CURRENT_PAGE]); | ||
| 32 | if(MainBuilder::$modif_mode){ | 30 | if(MainBuilder::$modif_mode){ |
| 33 | $mode = 'modification de page'; | 31 | $mode = 'modification de page'; |
| 34 | $div_admin = 'logged_in modif_mode'; | 32 | $div_admin = 'logged_in modif_mode'; |
| 35 | $link_edit_label = 'Sortir du mode modification'; | ||
| 36 | } | 33 | } |
| 37 | else{ | 34 | else{ |
| 38 | $mode = 'administrateur'; | 35 | $mode = 'administrateur'; |
| 39 | $div_admin = 'logged_in'; | 36 | $div_admin = 'logged_in'; |
| 40 | $link_edit_page->addParams(['action' => 'modif_page']); | ||
| 41 | $link_edit_label = 'Modifier la page'; | ||
| 42 | } | 37 | } |
| 43 | $link_new_page = new URL(['page' => 'nouvelle_page']); | 38 | $link_new_page = new URL(['page' => 'nouvelle_page']); |
| 44 | $link_change_paths = new URL(['page' => 'menu_chemins']); | 39 | $link_change_paths = new URL(['page' => 'menu_chemins']); |
| @@ -51,9 +46,9 @@ class FooterBuilder extends AbstractBuilder | |||
| 51 | 46 | ||
| 52 | $zone_admin = '<div class="admin_buttons_zone"> | 47 | $zone_admin = '<div class="admin_buttons_zone"> |
| 53 | <p>Vous êtes en mode ' . $mode . ".</p>\n" . | 48 | <p>Vous êtes en mode ' . $mode . ".</p>\n" . |
| 54 | '<div><a href="' . $link_new_page . '"><button>Nouvelle page</button></a></div>' . "\n" . | 49 | '<div><a href="' . $link_new_page . '"><button>Nouvelle page</button></a></div>' . "\n"; |
| 55 | '<div><a href="' . $link_edit_page . '"><button>' . $link_edit_label . '</button></a></div>' . "\n" . | 50 | $zone_admin .= $this->makePageModifModeButton(); |
| 56 | '<div><a href="' . $link_change_paths . '"><button>Menu et chemins</button></a></div>' . "\n" . | 51 | $zone_admin .= '<div><a href="' . $link_change_paths . '"><button>Menu et chemins</button></a></div>' . "\n" . |
| 57 | '<div><a href="' . $link_change_password . '"><button>Mon compte</button></a></div>' . "\n" . | 52 | '<div><a href="' . $link_change_password . '"><button>Mon compte</button></a></div>' . "\n" . |
| 58 | '<div><a href="' . $link_logout . '"><button>Déconnexion</button></a></div>' . "\n" . | 53 | '<div><a href="' . $link_logout . '"><button>Déconnexion</button></a></div>' . "\n" . |
| 59 | '</div>' . "\n"; | 54 | '</div>' . "\n"; |
| @@ -73,4 +68,22 @@ class FooterBuilder extends AbstractBuilder | |||
| 73 | $this->html = ob_get_clean(); | 68 | $this->html = ob_get_clean(); |
| 74 | } | 69 | } |
| 75 | } | 70 | } |
| 71 | |||
| 72 | private function makePageModifModeButton(): string | ||
| 73 | { | ||
| 74 | $link_edit_page = new URL(['page' => CURRENT_PAGE]); | ||
| 75 | if(CURRENT_PAGE !== 'article'){ | ||
| 76 | if(MainBuilder::$modif_mode){ | ||
| 77 | $link_edit_label = 'Sortir du mode modification'; | ||
| 78 | } | ||
| 79 | else{ | ||
| 80 | $link_edit_page->addParams(['mode' => 'page_modif']); | ||
| 81 | $link_edit_label = 'Modifier la page'; | ||
| 82 | } | ||
| 83 | return '<div><a href="' . $link_edit_page . '"><button>' . $link_edit_label . '</button></a></div>' . "\n"; | ||
| 84 | } | ||
| 85 | else{ | ||
| 86 | return ''; | ||
| 87 | } | ||
| 88 | } | ||
| 76 | } \ No newline at end of file | 89 | } \ No newline at end of file |
diff --git a/src/view/MainBuilder.php b/src/view/MainBuilder.php index d7a0dfa..fc80cd1 100644 --- a/src/view/MainBuilder.php +++ b/src/view/MainBuilder.php | |||
| @@ -5,10 +5,11 @@ declare(strict_types=1); | |||
| 5 | 5 | ||
| 6 | use App\Entity\Article; | 6 | use App\Entity\Article; |
| 7 | use App\Entity\Node; | 7 | use App\Entity\Node; |
| 8 | use App\Entity\Presentation; | ||
| 8 | 9 | ||
| 9 | class MainBuilder extends AbstractBuilder | 10 | class MainBuilder extends AbstractBuilder |
| 10 | { | 11 | { |
| 11 | static bool $modif_mode = false; | 12 | static public bool $modif_mode = false; |
| 12 | 13 | ||
| 13 | public function __construct(Node $node) | 14 | public function __construct(Node $node) |
| 14 | { | 15 | { |
| @@ -52,7 +53,8 @@ class MainBuilder extends AbstractBuilder | |||
| 52 | // mode modification de page uniquement | 53 | // mode modification de page uniquement |
| 53 | private function viewEditBlocks($node): void | 54 | private function viewEditBlocks($node): void |
| 54 | { | 55 | { |
| 55 | $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; // mode modification uniquement | 56 | //$viewFile = self::VIEWS_PATH . $node->getName() . '.php'; // mode modification uniquement |
| 57 | $viewFile = self::VIEWS_PATH . 'modify_page.php'; // mode modification uniquement | ||
| 56 | $blocks = Blocks::getTypeNamePairs(); | 58 | $blocks = Blocks::getTypeNamePairs(); |
| 57 | 59 | ||
| 58 | $options = ''; | 60 | $options = ''; |
| @@ -71,25 +73,62 @@ class MainBuilder extends AbstractBuilder | |||
| 71 | 73 | ||
| 72 | $bloc_edit = ''; | 74 | $bloc_edit = ''; |
| 73 | foreach($node->getChildren() as $child_node){ | 75 | foreach($node->getChildren() as $child_node){ |
| 76 | // mettre tout ça dans une vue modify_block.php | ||
| 77 | // => pourrait être déplacé au niveau des articles | ||
| 78 | |||
| 74 | // renommage d'un bloc | 79 | // renommage d'un bloc |
| 75 | $bloc_edit .= '<div id="bloc_edit_' . $child_node->getId() . '"> | 80 | $bloc_edit .= '<div class="modify_one_block" id="bloc_edit_' . $child_node->getId() . '"> |
| 76 | <p><label for="bloc_rename_' . $child_node->getId() . '"><b>' . Blocks::getNameFromType($child_node->getName()) . '</b></label> | 81 | <div class="block_options"> |
| 77 | <input type="text" id="bloc_rename_' . $child_node->getId() . '" name="bloc_rename_title" value="' . $child_node->getNodeData()->getdata()['title'] . '" required> | 82 | <label for="bloc_rename_' . $child_node->getId() . '">Type <b>' . Blocks::getNameFromType($child_node->getName()) . '</b></label> |
| 78 | <button onclick="renamePageBloc(' . $child_node->getId() . ')">Renommer</button>'. "\n"; | 83 | <p> |
| 84 | <input type="text" id="bloc_rename_' . $child_node->getId() . '" name="bloc_rename_title" value="' . $child_node->getNodeData()->getdata()['title'] . '" required> | ||
| 85 | <button onclick="renamePageBloc(' . $child_node->getId() . ')">Renommer</button> | ||
| 86 | </p>'. "\n"; | ||
| 79 | // déplacement d'un bloc | 87 | // déplacement d'un bloc |
| 80 | $bloc_edit .= '<img class="action_icon" onclick="switchBlocsPositions(' . $child_node->getId() . ', \'up\', \'' . CURRENT_PAGE . '\')" src="assets/arrow-up.svg"> | 88 | $bloc_edit .= '<div style="display: flex; flex-wrap: wrap;"> |
| 81 | <img class="action_icon" onclick="switchBlocsPositions(' . $child_node->getId() . ', \'down\', \'' . CURRENT_PAGE . '\')" src="assets/arrow-down.svg">' . "\n"; | 89 | <p> |
| 90 | <img class="action_icon" onclick="switchBlocsPositions(' . $child_node->getId() . ', \'up\', \'' . CURRENT_PAGE . '\')" src="assets/arrow-up.svg"> | ||
| 91 | <img class="action_icon" onclick="switchBlocsPositions(' . $child_node->getId() . ', \'down\', \'' . CURRENT_PAGE . '\')" src="assets/arrow-down.svg"> | ||
| 92 | </p>' . "\n"; | ||
| 82 | // suppression d'un bloc | 93 | // suppression d'un bloc |
| 83 | $bloc_edit .= '<form method="post" action="' . new URL(['page' => CURRENT_PAGE]) . '"> | 94 | $bloc_edit .= '<form method="post" action="' . new URL(['page' => CURRENT_PAGE]) . '"> |
| 84 | <input type="hidden" name="delete_bloc_id" value="' . $child_node->getId() . '"> | 95 | <input type="hidden" name="delete_bloc_id" value="' . $child_node->getId() . '"> |
| 85 | <input type="hidden" name="delete_bloc_hidden"> | 96 | <input type="hidden" name="delete_bloc_hidden"> |
| 86 | <input type="submit" value="Supprimer" onclick="return confirm(\'Voulez-vous vraiment supprimer ce bloc?\');"></p> | 97 | <input type="submit" value="Supprimer" onclick="return confirm(\'Voulez-vous vraiment supprimer ce bloc?\');"> |
| 87 | </form> | 98 | </form> |
| 99 | </div> | ||
| 88 | </div>'. "\n"; | 100 | </div>'. "\n"; |
| 101 | if($child_node->getNodeData()->getPresentation() !== null){ | ||
| 102 | // select mode de présentation | ||
| 103 | $bloc_edit .= '<div class="grid_options"><p> | ||
| 104 | <label for="presentation_select_' . $child_node->getId() . '">Présentation</label> | ||
| 105 | <select id="presentation_select_' . $child_node->getId() . '" onchange="changePresentation(' . $child_node->getId() . ')">'; | ||
| 106 | $bloc_edit .= $this->makePresentationOptions($child_node->getNodeData()->getPresentation()->getName()); | ||
| 107 | $bloc_edit .= '</select>'; | ||
| 108 | // select largeur minimale colonnes mode grid | ||
| 109 | $bloc_edit .= '<div id="cols_min_width_edit_' . $child_node->getId() . '" class="' . ($child_node->getNodeData()->getPresentation()->getName() === 'grid' ? '' : 'hidden') . '"> | ||
| 110 | <label for="cols_min_width_select_' . $child_node->getId() . '">Largeur minimum </label>'; | ||
| 111 | $bloc_edit .= '<input type="number" id="cols_min_width_select_' . $child_node->getId() . '" onchange="changeColsMinWidth(' . $child_node->getId() . ')" min="150" max="400" value="' . $child_node->getNodeData()->getColsMinWidth() . '">'; | ||
| 112 | /*$bloc_edit .= '<select id="cols_min_width_select_' . $child_node->getId() . '" onchange="changeColsMinWidth(' . $child_node->getId() . ')">' | ||
| 113 | . $this->makeColsMinWidthOptions($child_node->getNodeData()->getColsMinWidth()) | ||
| 114 | . '</select>';*/ | ||
| 115 | $bloc_edit .= ' pixels</div> | ||
| 116 | </div>'; | ||
| 117 | } | ||
| 118 | $bloc_edit .= "</div>\n"; | ||
| 89 | } | 119 | } |
| 90 | 120 | ||
| 91 | ob_start(); | 121 | ob_start(); |
| 92 | require $viewFile; | 122 | require $viewFile; |
| 93 | $this->html .= ob_get_clean(); | 123 | $this->html .= ob_get_clean(); |
| 94 | } | 124 | } |
| 125 | |||
| 126 | private function makePresentationOptions(string $presentation): string | ||
| 127 | { | ||
| 128 | $options = ''; | ||
| 129 | foreach(Presentation::$option_list as $key => $value){ | ||
| 130 | $options .= '<option value="' . $key . '" ' . ($presentation === $key ? 'selected' : '') . '>' . $value . '</option>'; | ||
| 131 | } | ||
| 132 | return $options; | ||
| 133 | } | ||
| 95 | } \ No newline at end of file | 134 | } \ No newline at end of file |
diff --git a/src/view/NewBuilder.php b/src/view/NewBuilder.php index 2d30d32..2d66238 100644 --- a/src/view/NewBuilder.php +++ b/src/view/NewBuilder.php | |||
| @@ -7,6 +7,8 @@ use App\Entity\Node; | |||
| 7 | 7 | ||
| 8 | class NewBuilder extends AbstractBuilder | 8 | class NewBuilder extends AbstractBuilder |
| 9 | { | 9 | { |
| 10 | static public bool $new_article_mode = false; | ||
| 11 | |||
| 10 | public function __construct(Node $node, ) | 12 | public function __construct(Node $node, ) |
| 11 | { | 13 | { |
| 12 | $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; | 14 | $viewFile = self::VIEWS_PATH . $node->getName() . '.php'; |
| @@ -39,7 +41,6 @@ class NewBuilder extends AbstractBuilder | |||
| 39 | $content = $node->getArticle()->getContent(); | 41 | $content = $node->getArticle()->getContent(); |
| 40 | $from_to_button = '<p><a class="link_to_article" href="' . new URL(isset($_GET['from']) ? ['page' => $_GET['from']] : []) . '"><button>Page<br>précédente</button></a></p>'; | 42 | $from_to_button = '<p><a class="link_to_article" href="' . new URL(isset($_GET['from']) ? ['page' => $_GET['from']] : []) . '"><button>Page<br>précédente</button></a></p>'; |
| 41 | } | 43 | } |
| 42 | // page d'accueil (avec des news) | ||
| 43 | else{ | 44 | else{ |
| 44 | $from_to_button = '<p><a class="link_to_article" href="' . new URL(['page' => 'article', 'id' => $id, 'from' => CURRENT_PAGE]) . '"><button><img class="action_icon" src="assets/book-open.svg">Lire la suite</button></a></p>'; | 45 | $from_to_button = '<p><a class="link_to_article" href="' . new URL(['page' => 'article', 'id' => $id, 'from' => CURRENT_PAGE]) . '"><button><img class="action_icon" src="assets/book-open.svg">Lire la suite</button></a></p>'; |
| 45 | } | 46 | } |
| @@ -101,7 +102,7 @@ class NewBuilder extends AbstractBuilder | |||
| 101 | $date_buttons = '<div class="button_zone">' . $modify_date . $close_editor_date . $submit_date . '</div>'; | 102 | $date_buttons = '<div class="button_zone">' . $modify_date . $close_editor_date . $submit_date . '</div>'; |
| 102 | 103 | ||
| 103 | // mode nouvel article | 104 | // mode nouvel article |
| 104 | if($_GET['id'][0] != 'i'){ | 105 | if(self::$new_article_mode){ |
| 105 | $delete_article = ''; | 106 | $delete_article = ''; |
| 106 | // valider la création d'un nouvel article | 107 | // valider la création d'un nouvel article |
| 107 | $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"'; | 108 | $submit_js = 'onclick="submitArticle(\'' . $_GET['id'] . '\', \'' . Director::$page_path->getLast()->getEndOfPath() . '\')"'; |
| @@ -109,8 +110,7 @@ class NewBuilder extends AbstractBuilder | |||
| 109 | } | 110 | } |
| 110 | // mode article existant | 111 | // mode article existant |
| 111 | else{ | 112 | else{ |
| 112 | // supprimer article existant | 113 | $url = new URL(['action' => 'delete_article', 'id' => $_GET['id'], 'from' => $_GET['from'] ?? '']); |
| 113 | $url = new URL(['action' => 'delete_article', 'id' => $_GET['id'], 'from' => $_GET['from']]); | ||
| 114 | $delete_article = '<form id="delete-' . $id . '" method="post" onsubmit="return confirm(\'Voulez-vous vraiment supprimer cet article ?\');" action="' . $url . '"> | 114 | $delete_article = '<form id="delete-' . $id . '" method="post" onsubmit="return confirm(\'Voulez-vous vraiment supprimer cet article ?\');" action="' . $url . '"> |
| 115 | <p><button type="submit"> | 115 | <p><button type="submit"> |
| 116 | <img class="action_icon" src="assets/delete-bin.svg"> | 116 | <img class="action_icon" src="assets/delete-bin.svg"> |
| @@ -122,7 +122,7 @@ class NewBuilder extends AbstractBuilder | |||
| 122 | 122 | ||
| 123 | $admin_buttons = $delete_article . $from_to_button . $submit_article; | 123 | $admin_buttons = $delete_article . $from_to_button . $submit_article; |
| 124 | } | 124 | } |
| 125 | // page d'accueil | 125 | // autre page |
| 126 | else{ | 126 | else{ |
| 127 | $modify_article = '<p id="edit-' . $id . '"></p>' . "\n"; | 127 | $modify_article = '<p id="edit-' . $id . '"></p>' . "\n"; |
| 128 | 128 | ||
| @@ -143,6 +143,9 @@ class NewBuilder extends AbstractBuilder | |||
| 143 | $admin_buttons = $from_to_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article; | 143 | $admin_buttons = $from_to_button . $modify_article . $up_button . $down_button . $delete_article . $close_editor . $submit_article; |
| 144 | } | 144 | } |
| 145 | } | 145 | } |
| 146 | else{ | ||
| 147 | $admin_buttons = $from_to_button; | ||
| 148 | } | ||
| 146 | 149 | ||
| 147 | ob_start(); | 150 | ob_start(); |
| 148 | require($viewFile); | 151 | require($viewFile); |
diff --git a/src/view/NewsBlockBuilder.php b/src/view/NewsBlockBuilder.php index 6b54196..861949a 100644 --- a/src/view/NewsBlockBuilder.php +++ b/src/view/NewsBlockBuilder.php | |||
| @@ -21,11 +21,12 @@ class NewsBlockBuilder extends AbstractBuilder | |||
| 21 | extract($node->getNodeData()->getData()); | 21 | extract($node->getNodeData()->getData()); |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | $presentation = $node->getNodeData()->getPresentation()->getName(); // affichage list ou grid | 24 | // stratégie d'affichage du contenu (utilisation de méthodes ou de classe List, GridPresentation, etc) |
| 25 | 25 | $section_class = $node->getNodeData()->getPresentation()->getName(); // = list, grid , mosaic ou carousel | |
| 26 | // exécution de la stratégie (utilisation de méthodes ou de classe List, Grid, CarouselPresentation) | 26 | if($section_class === 'grid'){ |
| 27 | $section_class = $presentation; | 27 | $min_width = (string)$node->getNodeData()->getColsMinWidth(); |
| 28 | $section_child_class = $presentation === 'grid' ? 'grid_columns' : ''; | 28 | $cols_min_width = 'grid-template-columns: repeat(auto-fit, minmax(' . $min_width . 'px, 1fr));'; |
| 29 | } | ||
| 29 | 30 | ||
| 30 | // ajouter un article | 31 | // ajouter un article |
| 31 | $new_article = ''; | 32 | $new_article = ''; |
diff --git a/src/view/PostBlockBuilder.php b/src/view/PostBlockBuilder.php index 6ec91f7..8ad0498 100644 --- a/src/view/PostBlockBuilder.php +++ b/src/view/PostBlockBuilder.php | |||
| @@ -21,11 +21,12 @@ class PostBlockBuilder extends AbstractBuilder | |||
| 21 | extract($node->getNodeData()->getData()); | 21 | extract($node->getNodeData()->getData()); |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | $presentation = $node->getNodeData()->getPresentation()->getName(); // affichage list ou grid | 24 | // stratégie d'affichage du contenu (utilisation de méthodes ou de classe List, GridPresentation, etc) |
| 25 | 25 | $section_class = $node->getNodeData()->getPresentation()->getName(); // = list, grid , mosaic ou carousel | |
| 26 | // exécution de la stratégie (utilisation de méthodes ou de classe List, Grid, CarouselPresentation) | 26 | if($section_class === 'grid'){ |
| 27 | $section_class = $presentation; | 27 | $min_width = (string)$node->getNodeData()->getColsMinWidth(); |
| 28 | $section_child_class = $presentation === 'grid' ? 'grid_columns' : ''; | 28 | $cols_min_width = 'grid-template-columns: repeat(auto-fit, minmax(' . $min_width . 'px, 1fr));'; |
| 29 | } | ||
| 29 | 30 | ||
| 30 | // ajouter un article | 31 | // ajouter un article |
| 31 | $new_article = ''; | 32 | $new_article = ''; |
diff --git a/src/view/templates/main.php b/src/view/templates/modify_page.php index 48ada5f..5ab1a95 100644 --- a/src/view/templates/main.php +++ b/src/view/templates/modify_page.php | |||
| @@ -31,8 +31,8 @@ | |||
| 31 | <input type="submit" value="Supprimer" onclick="return confirm('Voulez-vous vraiment supprimer cette page?');"> | 31 | <input type="submit" value="Supprimer" onclick="return confirm('Voulez-vous vraiment supprimer cette page?');"> |
| 32 | </form> | 32 | </form> |
| 33 | </div> | 33 | </div> |
| 34 | <div class="edit_bloc_zone"> | 34 | <div class="edit_block_zone"> |
| 35 | <div class="new_bloc"> | 35 | <div class="new_block"> |
| 36 | <p>Ajouter un bloc de page</p> | 36 | <p>Ajouter un bloc de page</p> |
| 37 | <form method="post" action="<?= new URL(['page' => CURRENT_PAGE]) ?>"> | 37 | <form method="post" action="<?= new URL(['page' => CURRENT_PAGE]) ?>"> |
| 38 | <p><label for="bloc_title">Titre</label> | 38 | <p><label for="bloc_title">Titre</label> |
| @@ -45,7 +45,7 @@ | |||
| 45 | <input type="submit" value="Valider"></p> | 45 | <input type="submit" value="Valider"></p> |
| 46 | </form> | 46 | </form> |
| 47 | </div> | 47 | </div> |
| 48 | <div class="modify_bloc"> | 48 | <div class="modify_block"> |
| 49 | <p>Modifier un bloc</p> | 49 | <p>Modifier un bloc</p> |
| 50 | <?= $bloc_edit ?> | 50 | <?= $bloc_edit ?> |
| 51 | </div> | 51 | </div> |
diff --git a/src/view/templates/news_block.php b/src/view/templates/news_block.php index d88d780..9d01513 100644 --- a/src/view/templates/news_block.php +++ b/src/view/templates/news_block.php | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | <script> | 5 | <script> |
| 6 | var clone<?= $this->id_node ?> = document.currentScript.previousElementSibling.cloneNode(true); | 6 | var clone<?= $this->id_node ?> = document.currentScript.previousElementSibling.cloneNode(true); |
| 7 | </script> | 7 | </script> |
| 8 | <div class="<?= $section_child_class ?>"> | 8 | <div class="section_child" style="<?= $cols_min_width ?>"> |
| 9 | <?= $content ?> | 9 | <?= $content ?> |
| 10 | </div> | 10 | </div> |
| 11 | </section> \ No newline at end of file | 11 | </section> \ No newline at end of file |
diff --git a/src/view/templates/post_block.php b/src/view/templates/post_block.php index d88d780..9d01513 100644 --- a/src/view/templates/post_block.php +++ b/src/view/templates/post_block.php | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | <script> | 5 | <script> |
| 6 | var clone<?= $this->id_node ?> = document.currentScript.previousElementSibling.cloneNode(true); | 6 | var clone<?= $this->id_node ?> = document.currentScript.previousElementSibling.cloneNode(true); |
| 7 | </script> | 7 | </script> |
| 8 | <div class="<?= $section_child_class ?>"> | 8 | <div class="section_child" style="<?= $cols_min_width ?>"> |
| 9 | <?= $content ?> | 9 | <?= $content ?> |
| 10 | </div> | 10 | </div> |
| 11 | </section> \ No newline at end of file | 11 | </section> \ No newline at end of file |
