From 50a54e1a9682652d3dcea4fae117d7f456f77e19 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 14 Oct 2025 17:24:28 +0200 Subject: =?UTF-8?q?nouvelle=20entit=C3=A9=20Asset,=20assets=20s=C3=A9par?= =?UTF-8?q?=C3=A9s=20de=20Image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model/entities/Asset.php | 88 +++++++++++++++++++++++++++++++++++++++++ src/model/entities/Image.php | 3 -- src/model/entities/NodeData.php | 20 +++++----- src/view/HeadBuilder.php | 8 +++- src/view/HeaderBuilder.php | 25 +++++++----- 5 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 src/model/entities/Asset.php 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 @@ + 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. + => 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. + => 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. + => Déplacement du fichier sur le serveur : Le fichier est déplacé depuis son emplacement temporaire vers le répertoire uploads/. + => Enregistrement dans la base de données : On enregistre les informations de l'image dans la base de données. */ + + #[ORM\ManyToMany(targetEntity: NodeData::class, mappedBy: "assets")] + private $node_data; + + public function __construct(string $name, ?string $path, ?string $path_mini, string $mime_type, string $alt) + { + $this->file_name = $name; + $this->file_path = $path; + $this->file_path_mini = $path_mini; + $this->mime_type = $mime_type; + $this->alt = $alt; + } + + public function getFileName(): string + { + return $this->file_name; + } + public function getFilePath(): string + { + return $this->file_path; + } + public function getFilePathMini(): string + { + return $this->file_path_mini; + } + public function getAlt(): string + { + return $this->alt; + } + + + // pour ViewBuilderController? + /*public function displayImage($imageId): void + { + //$imageId = 1; // Exemple d'ID d'image + $stmt = $pdo->prepare("SELECT file_path FROM images WHERE id = ?"); + $stmt->execute([$imageId]); + $image = $stmt->fetch(); + + if ($image) { + echo "Image"; + } else { + echo "Image non trouvée."; + } + }*/ +} 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 => Déplacement du fichier sur le serveur : Le fichier est déplacé depuis son emplacement temporaire vers le répertoire uploads/. => Enregistrement dans la base de données : On enregistre les informations de l'image dans la base de données. */ - #[ORM\ManyToMany(targetEntity: NodeData::class, mappedBy: "images")] - private $node_data; - #[ORM\ManyToMany(targetEntity: Article::class, mappedBy: "images")] private $article; 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 private ?int $pagination_limit = null; // pour les post_block et news_block // liaison avec table intermédiaire - #[ORM\ManyToMany(targetEntity: Image::class, inversedBy: "node_data")] + #[ORM\ManyToMany(targetEntity: Asset::class, inversedBy: "node_data")] #[ORM\JoinTable( - name: TABLE_PREFIX . "node_image", + name: TABLE_PREFIX . "node_asset", joinColumns: [new ORM\JoinColumn(name: "node_data_id", referencedColumnName: "id_node_data", onDelete: "CASCADE")], - inverseJoinColumns: [new ORM\JoinColumn(name: "image_id", referencedColumnName: "id_image", onDelete: "CASCADE")] + inverseJoinColumns: [new ORM\JoinColumn(name: "asset_id", referencedColumnName: "id_asset", onDelete: "CASCADE")] )] - private Collection $images; + private Collection $assets; private int $nb_pages = 1; - public function __construct(array $data, Node $node, Collection $images = new ArrayCollection, ?string $presentation = null, ?bool $chrono_order = null) + public function __construct(array $data, Node $node, Collection $assets = new ArrayCollection, ?string $presentation = null, ?bool $chrono_order = null) { $this->data = $data; $this->node = $node; - $this->images = $images; + $this->assets = $assets; if(!empty($presentation) && $presentation === 'grid'){ $this->grid_cols_min_width = 250; } @@ -133,12 +133,12 @@ class NodeData { $this->node = $node; }*/ - public function getImages(): Collection + public function getAssets(): Collection { - return $this->images; + return $this->assets; } - public function setImages(Collection $images): void + public function setAssets(Collection $assets): void { - $this->images = $images; + $this->assets = $assets; } } 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 $description = Model::$page_path->getLast()->getDescription(); // favicon - foreach($node->getNodeData()->getImages() as $image) + /*foreach($node->getNodeData()->getImages() as $image) { if(str_contains($image->getFileName(), 'favicon')) { $favicon = rtrim($image->getFilePathMini(), '/'); $alt = $image->getAlt(); } - } + }*/ + + // en dur temporairement + $favicon = 'assets/favicon48x48.png'; + $alt = 'favicon'; ob_start(); 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 $keys = array_keys($social); $social_networks = ''; $head_logo = ''; - foreach($node->getNodeData()->getImages() as $image) + /*foreach($node->getNodeData()->getImages() as $image) { for($i = 0; $i < count($keys); $i++) { @@ -62,18 +62,23 @@ class HeaderBuilder extends AbstractBuilder break; } // logo en-tête - /*if(str_contains($image->getFileName(), 'header_logo')){ - $header_logo = rtrim($image->getFilePathMini(), '/'); - break; - }*/ + //if(str_contains($image->getFileName(), 'header_logo')){ + //$header_logo = rtrim($image->getFilePathMini(), '/'); + //break; + //} // image de fond - /*if(str_contains($image->getFileName(), 'header_background')){ - $header_background = rtrim($image->getFilePath(), '/'); - break; - }*/ + //if(str_contains($image->getFileName(), 'header_background')){ + //$header_background = rtrim($image->getFilePath(), '/'); + //break; + //} } + }*/ + // chemin du ficher dans node_data, à déplacer dans asset + foreach($keys as $one_key){ + $social_networks .= ' + ' . $one_key . '_alt'; } - + ob_start(); require $viewFile; $this->html .= ob_get_clean(); -- cgit v1.2.3