From c9aff025aa7e01badaad8467af6165b400cdaac4 Mon Sep 17 00:00:00 2001 From: polo Date: Wed, 22 Oct 2025 15:28:02 +0200 Subject: =?UTF-8?q?possibilit=C3=A9=20d'=C3=A9diter=20le=20texte=20dans=20?= =?UTF-8?q?header=20et=20footer,=20class=20JS=20InputText,=20Model::findWh?= =?UTF-8?q?ateverNode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/HeadFootController.php | 33 +++++++++++++++++++++++++++++++++ src/model/Model.php | 18 ++++++++++++++++++ src/router.php | 7 ++++++- src/view/FooterBuilder.php | 15 +++++++++++++++ src/view/HeadBuilder.php | 5 ++++- src/view/HeaderBuilder.php | 27 +++++++++++++++++++++++++++ src/view/templates/footer.php | 27 ++++++++++++++++++++++----- src/view/templates/header.php | 27 ++++++++++++++++++++++----- 8 files changed, 147 insertions(+), 12 deletions(-) create mode 100644 src/controller/HeadFootController.php (limited to 'src') diff --git a/src/controller/HeadFootController.php b/src/controller/HeadFootController.php new file mode 100644 index 0000000..c7a9cec --- /dev/null +++ b/src/controller/HeadFootController.php @@ -0,0 +1,33 @@ + false]); + die; + } + + $model = new Model($entityManager); + if($model->findWhateverNode('name_node', $request_params[0])){ + $node_data = $model->getNode()->getNodeData(); + $node_data->updateData($request_params[1], htmlspecialchars($json['new_text'])); // $request_params[1] n'est pas contrôlé + $entityManager->flush(); + echo json_encode(['success' => true]); + } + else{ + echo json_encode(['success' => false]); + } + die; + } +} \ No newline at end of file diff --git a/src/model/Model.php b/src/model/Model.php index ea8ef71..16061e7 100644 --- a/src/model/Model.php +++ b/src/model/Model.php @@ -185,6 +185,24 @@ class Model $this->node = $this->entityManager->find('App\Entity\Node', $id); return $this->node === null ? false : true; } + public function findWhateverNode(string $field, string $value): bool + { + $queryBuilder = $this->entityManager->createQueryBuilder(); + $queryBuilder + ->select('n') + ->from('App\Entity\Node', 'n') + ->where("n.$field = :value") // avec le querybuilder, ce truc sale reste sécurisé + ->setParameter('value', $value); + $result = $queryBuilder->getQuery()->getOneOrNullResult(); + + if($result === null){ + return false; + } + else{ + $this->node = $result; + return true; + } + } // récupération d'un article pour modification public function makeArticleNode(string $id = '', bool $get_section = false): bool diff --git a/src/router.php b/src/router.php index 7459a0d..1127c81 100644 --- a/src/router.php +++ b/src/router.php @@ -141,11 +141,16 @@ elseif($request->getMethod() === 'POST'){ } } + /* -- site entier (header, footer, favicon) -- */ + elseif($request->query->has('entire_site_edit')){ + $request_params = explode('_', $request->query->get('entire_site_edit')); // header_title, header_description, footer_text, etc + HeadFootController::setTextData($entityManager, $request_params, $json); + } /* -- page Menu et chemins -- */ elseif(isset($_GET['menu_edit'])) { - // ne suit pas la règle, faire ça dans un contrôleur + // ne suit pas la règle, faire ça dans un contrôleur? Model::$menu_data = new Menu($entityManager); // récupération des données // flèche gauche <=: position = position du parent + 1, parent = grand-parent, recalculer les positions diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php index 0a3f55c..c1e0f7a 100644 --- a/src/view/FooterBuilder.php +++ b/src/view/FooterBuilder.php @@ -26,6 +26,17 @@ class FooterBuilder extends AbstractBuilder $empty_admin_zone = ''; if($_SESSION['admin']) { + $buttons_footer_name = ' + + '; + $buttons_footer_address = ' + + '; + $buttons_footer_email = ' + + '; + + // zone admin $empty_admin_zone = 'empty_admin_zone'; if(MainBuilder::$modif_mode){ $mode = 'modification de page'; @@ -61,6 +72,10 @@ class FooterBuilder extends AbstractBuilder $url->addParams(['id' => $_GET['id']]); } $zone_admin = ''; + + $buttons_footer_name = ''; + $buttons_footer_address = ''; + $buttons_footer_email = ''; } ob_start(); diff --git a/src/view/HeadBuilder.php b/src/view/HeadBuilder.php index b1dfacb..978d9ed 100644 --- a/src/view/HeadBuilder.php +++ b/src/view/HeadBuilder.php @@ -33,8 +33,11 @@ class HeadBuilder extends AbstractBuilder $js .= '' . "\n"; } - // tinymce, nécéssite un script de copie dans composer.json if($_SESSION['admin']){ + // édition éléments sur toutes les pages (header, footer et favicon) + $js .= '' . "\n"; + + // tinymce, nécéssite un script de copie dans composer.json $css .= '' . "\n"; $js .= '' . "\n"; // pour js/tinymce/tinymce.min.js $js .= '' . "\n"; diff --git a/src/view/HeaderBuilder.php b/src/view/HeaderBuilder.php index dc4aec4..5492340 100644 --- a/src/view/HeaderBuilder.php +++ b/src/view/HeaderBuilder.php @@ -77,6 +77,33 @@ class HeaderBuilder extends AbstractBuilder ' . $one_key . '_alt'; } + // boutons mode admin + if($_SESSION['admin']){ + $edit_favicon_hidden = 'hidden'; + $button_favicon = ''; + $button_header_logo = ''; + //$edit_favicon_hidden = ''; + //$favicon = 'assets/favicon48x48.png'; // double le code dans HeadBuilder + //$button_favicon = ''; + //$button_header_logo = ''; + $buttons_header_title = ' + + '; + $buttons_header_description = ' + + '; + //$buttons_social_networks = ''; + $buttons_social_networks = ''; + } + else{ + $edit_favicon_hidden = 'hidden'; + $button_favicon = ''; + $button_header_logo = ''; + $buttons_header_title = ''; + $buttons_header_description = ''; + $buttons_social_networks = ''; + } + ob_start(); require $viewFile; $this->html .= ob_get_clean(); diff --git a/src/view/templates/footer.php b/src/view/templates/footer.php index 1b63edf..dbace6a 100644 --- a/src/view/templates/footer.php +++ b/src/view/templates/footer.php @@ -1,11 +1,28 @@