aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2025-10-14 17:24:28 +0200
committerpolo <ordipolo@gmx.fr>2025-10-14 17:24:28 +0200
commit50a54e1a9682652d3dcea4fae117d7f456f77e19 (patch)
treeaf72b44f8e833bb47f563f6e6806deb8c9c2364a
parent596ce6f78e37c901d9b4ed464918b0294ba8dd2a (diff)
downloadcms-50a54e1a9682652d3dcea4fae117d7f456f77e19.zip
nouvelle entité Asset, assets séparés de Image
-rw-r--r--src/model/entities/Asset.php88
-rw-r--r--src/model/entities/Image.php3
-rw-r--r--src/model/entities/NodeData.php20
-rw-r--r--src/view/HeadBuilder.php8
-rw-r--r--src/view/HeaderBuilder.php25
5 files changed, 119 insertions, 25 deletions
diff --git a/src/model/entities/Asset.php b/src/model/entities/Asset.php
new file mode 100644
index 0000000..df8c98b
--- /dev/null
+++ b/src/model/entities/Asset.php
@@ -0,0 +1,88 @@
1<?php
2// src/model/entities/Asset.php
3
4declare(strict_types=1);
5
6namespace App\Entity;
7
8use Doctrine\ORM\Mapping as ORM;
9
10#[ORM\Entity]
11#[ORM\Table(name: TABLE_PREFIX . "asset")]
12class Asset
13{
14 #[ORM\Id]
15 #[ORM\GeneratedValue]
16 #[ORM\Column(type: "integer")]
17 private int $id_asset;
18
19 #[ORM\Column(type: "string", length: 255, unique: true)] // nom d'image UNIQUE
20 private string $file_name;
21
22 // choisir un répertoire du genre /var/www/html/uploads/ de préférence hors de /src
23 #[ORM\Column(type: "string", length: 255, unique: true, nullable: true)]
24 private ?string $file_path;
25
26 #[ORM\Column(type: "string", length: 255, unique: true, nullable: true)]
27 private ?string $file_path_mini;
28
29 #[ORM\Column(type: "string", length: 255, nullable: true)]
30 private string $mime_type; // image/jpeg, image/png, etc
31
32 #[ORM\Column(type: "string", length: 255, nullable: true)]
33 private string $alt; // texte alternatif
34
35 // autre champs optionnels: file_size, date (default current timestamp)
36
37 /* étapes au téléchargement:
38 => Validation du type de fichier : On vérifie que le fichier est bien une image en utilisant le type MIME. On peut aussi vérifier la taille du fichier.
39 => Création d'un répertoire structuré : On génère un chemin dynamique basé sur la date (uploads/2024/12/24/) pour organiser les images.
40 => Génération d'un nom de fichier unique : On utilise uniqid() pour générer un nom unique et éviter les conflits de nom.
41 => Déplacement du fichier sur le serveur : Le fichier est déplacé depuis son emplacement temporaire vers le répertoire uploads/.
42 => Enregistrement dans la base de données : On enregistre les informations de l'image dans la base de données. */
43
44 #[ORM\ManyToMany(targetEntity: NodeData::class, mappedBy: "assets")]
45 private $node_data;
46
47 public function __construct(string $name, ?string $path, ?string $path_mini, string $mime_type, string $alt)
48 {
49 $this->file_name = $name;
50 $this->file_path = $path;
51 $this->file_path_mini = $path_mini;
52 $this->mime_type = $mime_type;
53 $this->alt = $alt;
54 }
55
56 public function getFileName(): string
57 {
58 return $this->file_name;
59 }
60 public function getFilePath(): string
61 {
62 return $this->file_path;
63 }
64 public function getFilePathMini(): string
65 {
66 return $this->file_path_mini;
67 }
68 public function getAlt(): string
69 {
70 return $this->alt;
71 }
72
73
74 // pour ViewBuilderController?
75 /*public function displayImage($imageId): void
76 {
77 //$imageId = 1; // Exemple d'ID d'image
78 $stmt = $pdo->prepare("SELECT file_path FROM images WHERE id = ?");
79 $stmt->execute([$imageId]);
80 $image = $stmt->fetch();
81
82 if ($image) {
83 echo "<img src='" . $image['file_path'] . "' alt='Image'>";
84 } else {
85 echo "Image non trouvée.";
86 }
87 }*/
88}
diff --git a/src/model/entities/Image.php b/src/model/entities/Image.php
index 302a27f..e867a5f 100644
--- a/src/model/entities/Image.php
+++ b/src/model/entities/Image.php
@@ -41,9 +41,6 @@ class Image
41 => Déplacement du fichier sur le serveur : Le fichier est déplacé depuis son emplacement temporaire vers le répertoire uploads/. 41 => Déplacement du fichier sur le serveur : Le fichier est déplacé depuis son emplacement temporaire vers le répertoire uploads/.
42 => Enregistrement dans la base de données : On enregistre les informations de l'image dans la base de données. */ 42 => Enregistrement dans la base de données : On enregistre les informations de l'image dans la base de données. */
43 43
44 #[ORM\ManyToMany(targetEntity: NodeData::class, mappedBy: "images")]
45 private $node_data;
46
47 #[ORM\ManyToMany(targetEntity: Article::class, mappedBy: "images")] 44 #[ORM\ManyToMany(targetEntity: Article::class, mappedBy: "images")]
48 private $article; 45 private $article;
49 46
diff --git a/src/model/entities/NodeData.php b/src/model/entities/NodeData.php
index d8281c0..5938eca 100644
--- a/src/model/entities/NodeData.php
+++ b/src/model/entities/NodeData.php
@@ -40,21 +40,21 @@ class NodeData
40 private ?int $pagination_limit = null; // pour les post_block et news_block 40 private ?int $pagination_limit = null; // pour les post_block et news_block
41 41
42 // liaison avec table intermédiaire 42 // liaison avec table intermédiaire
43 #[ORM\ManyToMany(targetEntity: Image::class, inversedBy: "node_data")] 43 #[ORM\ManyToMany(targetEntity: Asset::class, inversedBy: "node_data")]
44 #[ORM\JoinTable( 44 #[ORM\JoinTable(
45 name: TABLE_PREFIX . "node_image", 45 name: TABLE_PREFIX . "node_asset",
46 joinColumns: [new ORM\JoinColumn(name: "node_data_id", referencedColumnName: "id_node_data", onDelete: "CASCADE")], 46 joinColumns: [new ORM\JoinColumn(name: "node_data_id", referencedColumnName: "id_node_data", onDelete: "CASCADE")],
47 inverseJoinColumns: [new ORM\JoinColumn(name: "image_id", referencedColumnName: "id_image", onDelete: "CASCADE")] 47 inverseJoinColumns: [new ORM\JoinColumn(name: "asset_id", referencedColumnName: "id_asset", onDelete: "CASCADE")]
48 )] 48 )]
49 private Collection $images; 49 private Collection $assets;
50 50
51 private int $nb_pages = 1; 51 private int $nb_pages = 1;
52 52
53 public function __construct(array $data, Node $node, Collection $images = new ArrayCollection, ?string $presentation = null, ?bool $chrono_order = null) 53 public function __construct(array $data, Node $node, Collection $assets = new ArrayCollection, ?string $presentation = null, ?bool $chrono_order = null)
54 { 54 {
55 $this->data = $data; 55 $this->data = $data;
56 $this->node = $node; 56 $this->node = $node;
57 $this->images = $images; 57 $this->assets = $assets;
58 if(!empty($presentation) && $presentation === 'grid'){ 58 if(!empty($presentation) && $presentation === 'grid'){
59 $this->grid_cols_min_width = 250; 59 $this->grid_cols_min_width = 250;
60 } 60 }
@@ -133,12 +133,12 @@ class NodeData
133 { 133 {
134 $this->node = $node; 134 $this->node = $node;
135 }*/ 135 }*/
136 public function getImages(): Collection 136 public function getAssets(): Collection
137 { 137 {
138 return $this->images; 138 return $this->assets;
139 } 139 }
140 public function setImages(Collection $images): void 140 public function setAssets(Collection $assets): void
141 { 141 {
142 $this->images = $images; 142 $this->assets = $assets;
143 } 143 }
144} 144}
diff --git a/src/view/HeadBuilder.php b/src/view/HeadBuilder.php
index ad6e4ba..f7c437b 100644
--- a/src/view/HeadBuilder.php
+++ b/src/view/HeadBuilder.php
@@ -51,14 +51,18 @@ class HeadBuilder extends AbstractBuilder
51 $description = Model::$page_path->getLast()->getDescription(); 51 $description = Model::$page_path->getLast()->getDescription();
52 52
53 // favicon 53 // favicon
54 foreach($node->getNodeData()->getImages() as $image) 54 /*foreach($node->getNodeData()->getImages() as $image)
55 { 55 {
56 if(str_contains($image->getFileName(), 'favicon')) 56 if(str_contains($image->getFileName(), 'favicon'))
57 { 57 {
58 $favicon = rtrim($image->getFilePathMini(), '/'); 58 $favicon = rtrim($image->getFilePathMini(), '/');
59 $alt = $image->getAlt(); 59 $alt = $image->getAlt();
60 } 60 }
61 } 61 }*/
62
63 // en dur temporairement
64 $favicon = 'assets/favicon48x48.png';
65 $alt = 'favicon';
62 66
63 ob_start(); 67 ob_start();
64 require $viewFile; 68 require $viewFile;
diff --git a/src/view/HeaderBuilder.php b/src/view/HeaderBuilder.php
index 87dc2f2..470074f 100644
--- a/src/view/HeaderBuilder.php
+++ b/src/view/HeaderBuilder.php
@@ -51,7 +51,7 @@ class HeaderBuilder extends AbstractBuilder
51 $keys = array_keys($social); 51 $keys = array_keys($social);
52 $social_networks = ''; 52 $social_networks = '';
53 $head_logo = ''; 53 $head_logo = '';
54 foreach($node->getNodeData()->getImages() as $image) 54 /*foreach($node->getNodeData()->getImages() as $image)
55 { 55 {
56 for($i = 0; $i < count($keys); $i++) 56 for($i = 0; $i < count($keys); $i++)
57 { 57 {
@@ -62,18 +62,23 @@ class HeaderBuilder extends AbstractBuilder
62 break; 62 break;
63 } 63 }
64 // logo en-tête 64 // logo en-tête
65 /*if(str_contains($image->getFileName(), 'header_logo')){ 65 //if(str_contains($image->getFileName(), 'header_logo')){
66 $header_logo = rtrim($image->getFilePathMini(), '/'); 66 //$header_logo = rtrim($image->getFilePathMini(), '/');
67 break; 67 //break;
68 }*/ 68 //}
69 // image de fond 69 // image de fond
70 /*if(str_contains($image->getFileName(), 'header_background')){ 70 //if(str_contains($image->getFileName(), 'header_background')){
71 $header_background = rtrim($image->getFilePath(), '/'); 71 //$header_background = rtrim($image->getFilePath(), '/');
72 break; 72 //break;
73 }*/ 73 //}
74 } 74 }
75 }*/
76 // chemin du ficher dans node_data, à déplacer dans asset
77 foreach($keys as $one_key){
78 $social_networks .= '<a href="' . $social[$one_key] . '" target="_blank" rel="noopener noreferrer">
79 <img src="assets/' . $one_key . '.svg" alt="' . $one_key . '_alt"></a>';
75 } 80 }
76 81
77 ob_start(); 82 ob_start();
78 require $viewFile; 83 require $viewFile;
79 $this->html .= ob_get_clean(); 84 $this->html .= ob_get_clean();