From f9a9bf1ae4fac9317fd71f0bcb207544b000e6f1 Mon Sep 17 00:00:00 2001 From: polo Date: Thu, 23 Oct 2025 14:15:01 +0200 Subject: =?UTF-8?q?t=C3=A9l=C3=A9chargement=20d'assets=20dans=20head,=20he?= =?UTF-8?q?ader=20et=20footer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/favicon48x48.png | Bin 3067 -> 0 bytes public/assets/fond-piscine.jpg | Bin 24757 -> 0 bytes public/assets/logo-120x75.jpg | Bin 12240 -> 0 bytes public/assets/logo-150x94.jpg | Bin 13506 -> 0 bytes public/assets/logo-nb-et-ffn.png | Bin 61236 -> 0 bytes public/assets/logo2.jpg | Bin 36899 -> 0 bytes public/css/body.css | 5 +-- public/css/foot.css | 15 ++------ public/css/head.css | 17 +++++--- public/js/InputFile.js | 51 ++++++++++++++++++++++++ public/js/InputText.js | 15 ++++---- public/user_data/assets/favicon48x48.png | Bin 0 -> 3067 bytes public/user_data/assets/fond-piscine.jpg | Bin 0 -> 24757 bytes public/user_data/assets/logo-120x75.jpg | Bin 0 -> 12240 bytes public/user_data/assets/logo-150x94.jpg | Bin 0 -> 13506 bytes public/user_data/assets/logo-nb-et-ffn.png | Bin 0 -> 61236 bytes public/user_data/assets/logo2.jpg | Bin 0 -> 36899 bytes src/controller/HeadFootController.php | 60 ++++++++++++++++++++++++++--- src/controller/ImageUploadController.php | 22 +++++------ src/model/entities/Article.php | 5 +-- src/model/entities/Asset.php | 3 ++ src/model/entities/NodeData.php | 21 +++++++--- src/router.php | 15 +++++--- src/view/AbstractBuilder.php | 2 +- src/view/FooterBuilder.php | 23 ++++++----- src/view/HeadBuilder.php | 4 +- src/view/HeaderBuilder.php | 42 ++++++++++++-------- src/view/templates/footer.php | 17 ++++++-- src/view/templates/header.php | 34 +++++++++++----- 29 files changed, 252 insertions(+), 99 deletions(-) delete mode 100644 public/assets/favicon48x48.png delete mode 100644 public/assets/fond-piscine.jpg delete mode 100644 public/assets/logo-120x75.jpg delete mode 100644 public/assets/logo-150x94.jpg delete mode 100644 public/assets/logo-nb-et-ffn.png delete mode 100644 public/assets/logo2.jpg create mode 100644 public/js/InputFile.js create mode 100644 public/user_data/assets/favicon48x48.png create mode 100644 public/user_data/assets/fond-piscine.jpg create mode 100644 public/user_data/assets/logo-120x75.jpg create mode 100644 public/user_data/assets/logo-150x94.jpg create mode 100644 public/user_data/assets/logo-nb-et-ffn.png create mode 100644 public/user_data/assets/logo2.jpg diff --git a/public/assets/favicon48x48.png b/public/assets/favicon48x48.png deleted file mode 100644 index 9825db1..0000000 Binary files a/public/assets/favicon48x48.png and /dev/null differ diff --git a/public/assets/fond-piscine.jpg b/public/assets/fond-piscine.jpg deleted file mode 100644 index 239d95d..0000000 Binary files a/public/assets/fond-piscine.jpg and /dev/null differ diff --git a/public/assets/logo-120x75.jpg b/public/assets/logo-120x75.jpg deleted file mode 100644 index b58a7a6..0000000 Binary files a/public/assets/logo-120x75.jpg and /dev/null differ diff --git a/public/assets/logo-150x94.jpg b/public/assets/logo-150x94.jpg deleted file mode 100644 index 67ec6cc..0000000 Binary files a/public/assets/logo-150x94.jpg and /dev/null differ diff --git a/public/assets/logo-nb-et-ffn.png b/public/assets/logo-nb-et-ffn.png deleted file mode 100644 index f51ac9c..0000000 Binary files a/public/assets/logo-nb-et-ffn.png and /dev/null differ diff --git a/public/assets/logo2.jpg b/public/assets/logo2.jpg deleted file mode 100644 index 39c03bd..0000000 Binary files a/public/assets/logo2.jpg and /dev/null differ diff --git a/public/css/body.css b/public/css/body.css index 8ad3a52..cadf955 100644 --- a/public/css/body.css +++ b/public/css/body.css @@ -43,7 +43,7 @@ main margin: auto; /*max-width: 1200px;*/ background-color: #E3F3FF; - padding: 15px 0; + padding: 15px; } .hidden { @@ -51,8 +51,7 @@ main } section { - margin: 10px 0; - padding: 15px; + margin-top: 20px; } section > h3 { diff --git a/public/css/foot.css b/public/css/foot.css index 8d0a94d..8a0d08d 100644 --- a/public/css/foot.css +++ b/public/css/foot.css @@ -14,11 +14,12 @@ footer > div max-width: 1200px; display: flex; justify-content: space-around; + flex-wrap: wrap; } -.contact +footer .data > div { - margin: 16px 0; /* alignement avec la

autour du logo */ + margin: 20px 10px; } .contact a { @@ -73,7 +74,7 @@ footer > div margin: 0 3px; }*/ -.footer_logo img +#footer_logo_img { max-width: 288px; min-width: 150px; @@ -85,14 +86,6 @@ footer > div width: 70px; } } -@media screen and (max-width: 800px) -{ - footer > div - { - flex-direction: column; - align-items: center; - } -} .breadcrumb a { diff --git a/public/css/head.css b/public/css/head.css index b173077..4206044 100644 --- a/public/css/head.css +++ b/public/css/head.css @@ -17,7 +17,12 @@ header display: none; } -.header-content +.background_button +{ + max-height: 24px; +} + +.header_content { padding: 20px 0; display: grid; @@ -27,12 +32,12 @@ header /*.header_left_col {}*/ @media screen and (max-width: 1000px){ - .header-content{ + .header_content{ padding: 18px 0; } } @media screen and (max-width: 450px){ - .header-content + .header_content { /*grid-template-columns: 1fr 2fr 1fr;*/ display: block; @@ -69,16 +74,16 @@ header img { vertical-align: bottom; /* supprime espace sous l'image */ max-width: 150px; - max-height: 75px; + max-height: 100px; } header a { color: unset; /* ne plus hériter */ text-decoration: none; } -#edit_favicon_zone +.editing_zone > div { - margin-bottom: 10px; + /*display: inline;*/ /* à l'ancienne */ } /*.header_right_col {}*/ diff --git a/public/js/InputFile.js b/public/js/InputFile.js new file mode 100644 index 0000000..f5e450c --- /dev/null +++ b/public/js/InputFile.js @@ -0,0 +1,51 @@ +// étendre une classe parente avec InputFile? +class InputFile{ + constructor(name){ + this.name = name; + this.parent = document.getElementById(name); + } + open(){ + this.parent.querySelector('#' + this.name + '_img').classList.add('hidden'); + this.parent.querySelector('#' + this.name + '_input').classList.remove('hidden'); + this.parent.querySelector('#' + this.name + '_open').classList.add('hidden'); + this.parent.querySelector('#' + this.name + '_submit').classList.remove('hidden'); + this.parent.querySelector('#' + this.name + '_cancel').classList.remove('hidden'); + } + close(){ + this.parent.querySelector('#' + this.name + '_img').classList.remove('hidden'); + this.parent.querySelector('#' + this.name + '_input').classList.add('hidden'); + this.parent.querySelector('#' + this.name + '_open').classList.remove('hidden'); + this.parent.querySelector('#' + this.name + '_submit').classList.add('hidden'); + this.parent.querySelector('#' + this.name + '_cancel').classList.add('hidden'); + } + submit(){ + const file = this.parent.querySelector('#' + this.name + '_input').files[0]; + if(!file){ + console.error("Erreur: aucun fichier sélectionné."); + return; + } + const form_data = new FormData(); + form_data.append('file', file); + + fetch('index.php?head_foot_image=' + this.name, { + method: 'POST', // apparemment il faudrait utiliser PUT + body: form_data + }) + .then(response => response.json()) + .then(data => { + if(data.success){ + this.parent.querySelector('#' + this.name + '_img').src = data.location; + this.close(this.name); + } + else{ + console.error("Erreur: le serveur n'a pas enregistré l'image'."); + } + }) + .catch(error => { + console.error('Erreur:', error); + }); + } + cancel(){ + this.close(this.name); + } +} \ No newline at end of file diff --git a/public/js/InputText.js b/public/js/InputText.js index ba7e8e4..33dcf8d 100644 --- a/public/js/InputText.js +++ b/public/js/InputText.js @@ -1,27 +1,28 @@ // s'en servir dans menu et chemin +// étendre un classe parente avec InputText? class InputText{ constructor(name){ this.name = name; this.parent = document.getElementById(name); } - openTextInput(){ + open(){ this.parent.querySelector('#' + this.name + '_span').classList.add('hidden'); this.parent.querySelector('#' + this.name + '_input').classList.remove('hidden'); this.parent.querySelector('#' + this.name + '_open').classList.add('hidden'); this.parent.querySelector('#' + this.name + '_submit').classList.remove('hidden'); this.parent.querySelector('#' + this.name + '_cancel').classList.remove('hidden'); } - closeTextInput(){ + close(){ this.parent.querySelector('#' + this.name + '_span').classList.remove('hidden'); this.parent.querySelector('#' + this.name + '_input').classList.add('hidden'); this.parent.querySelector('#' + this.name + '_open').classList.remove('hidden'); this.parent.querySelector('#' + this.name + '_submit').classList.add('hidden'); this.parent.querySelector('#' + this.name + '_cancel').classList.add('hidden'); } - submitTextInput(){ + submit(){ const new_text = this.parent.querySelector('#' + this.name + '_input').value; - fetch('index.php?entire_site_edit=' + this.name, { + fetch('index.php?head_foot_text=' + this.name, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({new_text: new_text}) @@ -30,7 +31,7 @@ class InputText{ .then(data => { if(data.success){ this.parent.querySelector('#' + this.name + '_span').innerHTML = new_text; - this.closeTextInput(this.name); + this.close(this.name); } else{ console.error("Erreur: le serveur n'a pas enregistré le nouveau texte."); @@ -40,8 +41,8 @@ class InputText{ console.error('Erreur:', error); }); } - cancelTextInput(){ + cancel(){ this.parent.querySelector('#' + this.name + '_input').value = this.parent.querySelector('#' + this.name + '_span').innerHTML; - this.closeTextInput(this.name); + this.close(this.name); } } \ No newline at end of file diff --git a/public/user_data/assets/favicon48x48.png b/public/user_data/assets/favicon48x48.png new file mode 100644 index 0000000..9825db1 Binary files /dev/null and b/public/user_data/assets/favicon48x48.png differ diff --git a/public/user_data/assets/fond-piscine.jpg b/public/user_data/assets/fond-piscine.jpg new file mode 100644 index 0000000..239d95d Binary files /dev/null and b/public/user_data/assets/fond-piscine.jpg differ diff --git a/public/user_data/assets/logo-120x75.jpg b/public/user_data/assets/logo-120x75.jpg new file mode 100644 index 0000000..b58a7a6 Binary files /dev/null and b/public/user_data/assets/logo-120x75.jpg differ diff --git a/public/user_data/assets/logo-150x94.jpg b/public/user_data/assets/logo-150x94.jpg new file mode 100644 index 0000000..67ec6cc Binary files /dev/null and b/public/user_data/assets/logo-150x94.jpg differ diff --git a/public/user_data/assets/logo-nb-et-ffn.png b/public/user_data/assets/logo-nb-et-ffn.png new file mode 100644 index 0000000..f51ac9c Binary files /dev/null and b/public/user_data/assets/logo-nb-et-ffn.png differ diff --git a/public/user_data/assets/logo2.jpg b/public/user_data/assets/logo2.jpg new file mode 100644 index 0000000..39c03bd Binary files /dev/null and b/public/user_data/assets/logo2.jpg differ diff --git a/src/controller/HeadFootController.php b/src/controller/HeadFootController.php index 8d59d10..0429aac 100644 --- a/src/controller/HeadFootController.php +++ b/src/controller/HeadFootController.php @@ -5,23 +5,24 @@ declare(strict_types=1); //use App\Entity\Node; //use App\Entity\NodeData; -//use App\Entity\Image; -//use Doctrine\Common\Collections\ArrayCollection; +use App\Entity\Asset; +use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\EntityManager; class HeadFootController { - static public function setTextData(EntityManager $entityManager, array $request_params, array $json): void + static public function setTextData(EntityManager $entityManager, string $request_params, array $json): void { - if(count($request_params) !== 2){ + $params_array = explode('_', $request_params); // header_title, header_description, footer_name, footer_address, footer_email + if(count($params_array) !== 2){ echo json_encode(['success' => false]); die; } $model = new Model($entityManager); - if($model->findWhateverNode('name_node', $request_params[0])){ + if($model->findWhateverNode('name_node', $params_array[0])){ $node_data = $model->getNode()->getNodeData(); - $node_data->updateData($request_params[1], $json['new_text']); // $request_params[1] n'est pas contrôlé + $node_data->updateData($params_array[1], $json['new_text']); // $params_array[1] n'est pas contrôlé $entityManager->flush(); echo json_encode(['success' => true]); } @@ -30,4 +31,51 @@ class HeadFootController } die; } + static public function uploadAsset(EntityManager $entityManager, string $request_params): void + { + if(empty($_FILES)){ + http_response_code(400); + echo json_encode(['success' => false]); + } + else{ + $file = $_FILES['file']; + + if(!is_dir(Asset::USER_PATH)){ + mkdir(Asset::USER_PATH, 0700, true); + } + + $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'tiff', 'tif', 'ico', 'bmp']; // pas de SVG + $name = Security::secureFileName(pathinfo($file['name'], PATHINFO_FILENAME)); + $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + if(!in_array($extension, $allowed_extensions) || $extension === 'jpg'){ + $extension = 'jpeg'; + } + $file_path = uniqid($name . '_') . '.' . $extension; + + if(ImageUploadController::imagickCleanImage(file_get_contents($file['tmp_name']), Asset::USER_PATH . $file_path, $extension)){ // recréer l’image pour la nettoyer + $params_array = explode('_', $request_params); // favicon, header_logo, header_background, footer_logo + + $model = new Model($entityManager); + if($model->findWhateverNode('name_node', $params_array[0])){ + $node_data = $model->getNode()->getNodeData(); + $image = new Asset($name, $file_path, mime_content_type($file['tmp_name']), $request_params); + $node_data->addAsset($image); + + $entityManager->persist($image); + $entityManager->flush(); + echo json_encode(['success' => true, 'location' => Asset::USER_PATH . $file_path]); + } + else{ + echo json_encode(['success' => false, 'message' => 'Erreur noeud non trouvé.']); + } + } + else{ + http_response_code(500); + echo json_encode(['success' => false, 'message' => 'Erreur image non valide.']); + } + } + die; + } + + //static public function uploadImage(EntityManager $entityManager, array $request_params): void } \ No newline at end of file diff --git a/src/controller/ImageUploadController.php b/src/controller/ImageUploadController.php index 29b8059..5e80ba5 100644 --- a/src/controller/ImageUploadController.php +++ b/src/controller/ImageUploadController.php @@ -61,14 +61,14 @@ class ImageUploadController { if(isset($_FILES['file'])){ $file = $_FILES['file']; - $dest = 'images/'; - $dest_mini = 'images-mini/'; + $dest = 'user_data/images/'; + $dest_mini = 'user_data/images-mini/'; // Vérifier si les répertoires existent, sinon les créer - if(!is_dir($dest)) { + if(!is_dir($dest)){ mkdir($dest, 0700, true); } - if(!is_dir($dest_mini)) { + if(!is_dir($dest_mini)){ mkdir($dest_mini, 0700, true); } @@ -78,7 +78,7 @@ class ImageUploadController if(!in_array($extension, $allowed_extensions) || $extension === 'jpg'){ $extension = 'jpeg'; } - $file_path = $dest . $name . '_' . uniqid() . '.' . $extension; + $file_path = uniqid($dest . $name . '_') . '.' . $extension; // créer une miniature de l'image // @@ -105,7 +105,7 @@ class ImageUploadController if(isset($json['image_url'])){ $image_data = self::curlDownloadImage($json['image_url']); // téléchargement de l’image par le serveur avec cURL au lieu de file_get_contents - $dest = 'images/'; + $dest = 'user_data/images/'; if(!is_dir($dest)) { // Vérifier si le répertoire existe, sinon le créer mkdir($dest, 0777, true); @@ -124,7 +124,7 @@ class ImageUploadController if(!in_array($extension, $allowed_extensions) || $extension === 'jpg'){ $extension = 'jpeg'; } - $local_path = $dest . $name . '_' . uniqid() . '.' . $extension; + $local_path = uniqid($dest . $name . '_') . '.' . $extension; if(self::imagickCleanImage($image_data, $local_path, $extension)){ // recréer l’image pour la nettoyer echo json_encode(['location' => $local_path]); // nouvelle adresse @@ -144,10 +144,10 @@ class ImageUploadController static public function uploadImageBase64(): void { $json = json_decode(file_get_contents('php://input'), true); - $dest = 'images/'; + $dest = 'user_data/images/'; - if(!is_dir('images')){ - mkdir('images', 0777, true); + if(!is_dir($dest)){ + mkdir($dest, 0777, true); } // détection de data:image/ et de ;base64, et capture du format dans $type @@ -170,7 +170,7 @@ class ImageUploadController die; } - $local_path = $dest . 'pasted_image_' . uniqid() . '.' . $extension; + $local_path = uniqid($dest . 'pasted_image_') . '.' . $extension; if(self::imagickCleanImage($image_data, $local_path)){ echo json_encode(['location' => $local_path]); diff --git a/src/model/entities/Article.php b/src/model/entities/Article.php index 5412497..b9cb4bb 100644 --- a/src/model/entities/Article.php +++ b/src/model/entities/Article.php @@ -33,11 +33,10 @@ class Article #[ORM\Column(type: "text")] private string $content; // de l'éditeur html - // liaison avec table intermédiaire - #[ORM\ManyToMany(targetEntity: Image::class, inversedBy: "article")] + #[ORM\ManyToMany(targetEntity: Image::class, inversedBy: "article")] // cascade: ['remove'] = très dangereux! #[ORM\JoinTable( name: TABLE_PREFIX . "article_image", - joinColumns: [new ORM\JoinColumn(name: "article_id", referencedColumnName: "id_article", onDelete: "CASCADE")], + joinColumns: [new ORM\JoinColumn(name: "article_id", referencedColumnName: "id_article", onDelete: "CASCADE")], // onDelete: "CASCADE": très utile inverseJoinColumns: [new ORM\JoinColumn(name: "image_id", referencedColumnName: "id_image", onDelete: "CASCADE")] )] private Collection $images; diff --git a/src/model/entities/Asset.php b/src/model/entities/Asset.php index e1071b4..e359e21 100644 --- a/src/model/entities/Asset.php +++ b/src/model/entities/Asset.php @@ -11,6 +11,9 @@ use Doctrine\ORM\Mapping as ORM; #[ORM\Table(name: TABLE_PREFIX . "asset")] class Asset { + const PATH = 'assets/'; + const USER_PATH = 'user_data/assets/'; + #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: "integer")] diff --git a/src/model/entities/NodeData.php b/src/model/entities/NodeData.php index 5938eca..9db866e 100644 --- a/src/model/entities/NodeData.php +++ b/src/model/entities/NodeData.php @@ -39,11 +39,10 @@ class NodeData #[ORM\Column(type: "integer", nullable: true)] private ?int $pagination_limit = null; // pour les post_block et news_block - // liaison avec table intermédiaire - #[ORM\ManyToMany(targetEntity: Asset::class, inversedBy: "node_data")] + #[ORM\ManyToMany(targetEntity: Asset::class, inversedBy: "node_data")] // cascade: ['remove'] = très dangereux! #[ORM\JoinTable( - name: TABLE_PREFIX . "node_asset", - joinColumns: [new ORM\JoinColumn(name: "node_data_id", referencedColumnName: "id_node_data", onDelete: "CASCADE")], + name: TABLE_PREFIX . "nodedata_asset", + joinColumns: [new ORM\JoinColumn(name: "node_data_id", referencedColumnName: "id_node_data", onDelete: "CASCADE")], // onDelete: "CASCADE": très utile inverseJoinColumns: [new ORM\JoinColumn(name: "asset_id", referencedColumnName: "id_asset", onDelete: "CASCADE")] )] private Collection $assets; @@ -137,8 +136,18 @@ class NodeData { return $this->assets; } - public function setAssets(Collection $assets): void + public function addAsset(Asset $asset): void { - $this->assets = $assets; + if(!$this->assets->contains($asset)){ + $this->assets->add($asset); + //$asset->addNodeData($this); // autre sens + } + } + public function removeAsset(Asset $asset): void + { + $this->assets->removeElement($asset); + /*if($this->assets->removeElement($asset)){ // autre sens + $asset->removeNodeData($this); + }*/ } } diff --git a/src/router.php b/src/router.php index 1127c81..cfb1dec 100644 --- a/src/router.php +++ b/src/router.php @@ -142,9 +142,8 @@ 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); + elseif($request->query->has('head_foot_text')){ + HeadFootController::setTextData($entityManager, $request->query->get('head_foot_text'), $json); } /* -- page Menu et chemins -- */ @@ -211,10 +210,16 @@ elseif($request->getMethod() === 'POST'){ } // upload d'image dans tinymce avec le plugin (bouton "insérer une image" de l'éditeur) - elseif(strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false && $request->query->has('action') && $request->query->get('action') === 'upload_image_tinymce') + elseif(strpos($_SERVER['CONTENT_TYPE'], 'multipart/form-data') !== false) { - ImageUploadController::imageUploadTinyMce(); + if($request->query->has('action') && $request->query->get('action') === 'upload_image_tinymce'){ + ImageUploadController::imageUploadTinyMce(); + } + elseif($request->query->has('head_foot_image')){ + HeadFootController::uploadAsset($entityManager, $request->query->get('head_foot_image')); + } } + // requêtes XMLHttpRequest elseif(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { diff --git a/src/view/AbstractBuilder.php b/src/view/AbstractBuilder.php index 34d1462..3d315b1 100644 --- a/src/view/AbstractBuilder.php +++ b/src/view/AbstractBuilder.php @@ -7,7 +7,7 @@ use App\Entity\Node; abstract class AbstractBuilder { - public const VIEWS_PATH = '../src/view/templates/'; + const VIEWS_PATH = '../src/view/templates/'; protected string $html = ''; protected int $id_node; diff --git a/src/view/FooterBuilder.php b/src/view/FooterBuilder.php index dc0d31d..35df010 100644 --- a/src/view/FooterBuilder.php +++ b/src/view/FooterBuilder.php @@ -26,15 +26,19 @@ class FooterBuilder extends AbstractBuilder if($_SESSION['admin']) { // données du footer - $buttons_footer_name = ' - - '; - $buttons_footer_address = ' - - '; - $buttons_footer_email = ' - - '; + $buttons_footer_name = ' + + '; + $buttons_footer_address = ' + + '; + $buttons_footer_email = ' + + '; + + $buttons_footer_logo = ' + + '; // zone admin $empty_admin_zone = 'empty_admin_zone'; @@ -76,6 +80,7 @@ class FooterBuilder extends AbstractBuilder $buttons_footer_name = ''; $buttons_footer_address = ''; $buttons_footer_email = ''; + $buttons_footer_logo = ''; } ob_start(); diff --git a/src/view/HeadBuilder.php b/src/view/HeadBuilder.php index 978d9ed..b3d78aa 100644 --- a/src/view/HeadBuilder.php +++ b/src/view/HeadBuilder.php @@ -3,6 +3,7 @@ declare(strict_types=1); +use App\Entity\Asset; use App\Entity\Node; class HeadBuilder extends AbstractBuilder @@ -36,6 +37,7 @@ class HeadBuilder extends AbstractBuilder if($_SESSION['admin']){ // édition éléments sur toutes les pages (header, footer et favicon) $js .= '' . "\n"; + $js .= '' . "\n"; // tinymce, nécéssite un script de copie dans composer.json $css .= '' . "\n"; @@ -57,7 +59,7 @@ class HeadBuilder extends AbstractBuilder }*/ // en dur temporairement - $favicon = 'assets/favicon48x48.png'; + $favicon = Asset::USER_PATH . 'favicon48x48.png'; $alt = 'favicon'; ob_start(); diff --git a/src/view/HeaderBuilder.php b/src/view/HeaderBuilder.php index 5492340..3b45a11 100644 --- a/src/view/HeaderBuilder.php +++ b/src/view/HeaderBuilder.php @@ -3,6 +3,7 @@ declare(strict_types=1); +use App\Entity\Asset; use App\Entity\Node; class HeaderBuilder extends AbstractBuilder @@ -79,26 +80,35 @@ class HeaderBuilder extends AbstractBuilder // 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 = ' - - '; + $editing_zone_margin = '5px'; + $favicon = Asset::USER_PATH . 'favicon48x48.png'; // double le code dans HeadBuilder + $buttons_favicon = ' + + '; + $background = Asset::USER_PATH . 'fond-piscine.jpg'; + $buttons_background = ' + + '; + + $buttons_header_logo = ' + + '; + + $buttons_header_title = ' + + '; + $buttons_header_description = ' + + '; + //$buttons_social_networks = ''; $buttons_social_networks = ''; } else{ - $edit_favicon_hidden = 'hidden'; - $button_favicon = ''; - $button_header_logo = ''; + $editing_zone_margin = '0'; + $buttons_favicon = ''; + $buttons_background = ''; + $buttons_header_logo = ''; $buttons_header_title = ''; $buttons_header_description = ''; $buttons_social_networks = ''; diff --git a/src/view/templates/footer.php b/src/view/templates/footer.php index 33647a6..2bb5a9e 100644 --- a/src/view/templates/footer.php +++ b/src/view/templates/footer.php @@ -4,25 +4,34 @@

- + + + +
diff --git a/src/view/templates/header.php b/src/view/templates/header.php index 7977ef3..b63aa84 100644 --- a/src/view/templates/header.php +++ b/src/view/templates/header.php @@ -5,15 +5,22 @@ - -
+
+
+ + +
+
+ + +
+
+
-
- -
-
- - +

-

- @@ -41,4 +46,13 @@

+ + + \ No newline at end of file -- cgit v1.2.3