From e6c64912c3ae0f53cbfa2c6df76c4c9448ad888a Mon Sep 17 00:00:00 2001 From: GuillaumeH-Cci Date: Fri, 20 Feb 2026 11:14:45 +0100 Subject: [PATCH] Prblm --- controllers/project_controller.php | 279 ++++++++++++------ ...23bf5795a2721f507c3fc6_0.file_home.tpl.php | 69 ----- ...2de6dcd14dc34a20b16_0.file_preview.tpl.php | 66 ----- entities/image_entity.php | 8 +- entities/project_entity.php | 10 +- models/project_model.php | 3 +- views/addedit_project.tpl | 9 +- views/project.tpl | 93 ------ 8 files changed, 203 insertions(+), 334 deletions(-) delete mode 100644 controllers/templates_c/299f75d7692a19207f23bf5795a2721f507c3fc6_0.file_home.tpl.php delete mode 100644 controllers/templates_c/c724044e55872f26030b02de6dcd14dc34a20b16_0.file_preview.tpl.php delete mode 100644 views/project.tpl diff --git a/controllers/project_controller.php b/controllers/project_controller.php index 95267e4..3c060df 100644 --- a/controllers/project_controller.php +++ b/controllers/project_controller.php @@ -25,7 +25,7 @@ public function home(){ - $intCategory = 0; + $intCategory = 0; if (!empty($_GET['filter_cat'])) { $intCategory = (int) $_GET['filter_cat']; } @@ -93,87 +93,196 @@ /** * Fonction d'affichage de la page projet + * @author Christel adapter par Guillaume */ - public function project (){ - - $objCategoryModel = new CategoryModel; - $arrCategory = $objCategoryModel->findAllCategory(); - - $objProjectModel = new ProjectModel; - $arrProject = $objProjectModel->findAll(4); - $arrProjectToDisplay = array(); - foreach($arrProject as $arrDetProject){ - $objProject = new Project; - $objProject->hydrate($arrDetProject); - $arrProjectToDisplay[] = $objProject; - } - - $objImageModel = new ImageModel; - $arrImage = $objImageModel->findAllImage(4); - $arrImageToDisplay = array(); - foreach($arrImage as $arrDetImage){ - $objImage = new Image; - $objImage->hydrate($arrDetImage); - $arrImageToDisplay[] = $objImage; - } - //Variable data - $_SESSION['title'] = $_POST['titleProject']??""; - $_SESSION['description'] = $_POST['descProject']??""; - $_SESSION['content'] = $_POST['textProject']??""; - $_SESSION['category']= $_POST['category']??0; - $_SESSION['thumbnail'] = $_FILES['imageThumbnail']['name']??""; - $_SESSION['images'] = $_FILES['imageProject']['name']??""; - $_SESSION['status'] = 'en_attente'; - $_SESSION['user_id'] = $_SESSION['user']['user_id']??null; - - - $objProject = new Project(); - - /** - * Créer par Besnik le GOAT et Guillaume - * - * @return bool pour savoir si le fichier existe, - * puis déplace vers le fichier uploads avec les images projet des utilisateurs - * Communication avec la BDD - */ - if (($_SESSION['thumbnail'] != null)){ - $strDest = ""; - if ((count($_FILES) > 0) && ($_FILES['imageProject']['error'] != 4)){ - $strDest = 'uploads/projects/' . $_FILES['imageProject']['name']; - move_uploaded_file($_FILES['imageProject']['tmp_name'], $strDest); - } - } - - /** En cas d'appuis sur le bouton d'envoie ou celui de remettre a plus tard - * 1. Changement de status - * 2. Hydratation avec les informations récupéré de l'utilisateur - * 3. Envoie des données à la BDD - */ - if (isset($_POST['sendProject'])) { - $objProject->hydrate($_SESSION); - $objProject->setThumbnail($strDest); - $objProjectModel->insert($objProject); - // header("Location:index.php"); - // exit; - var_dump($_SESSION); - var_dump($objProject); + public function addedit_project() { + if (!isset($_SESSION['user'])){ // Pas d'utilisateur connecté + header("Location:index.php?ctrl=error&action=error_403"); + exit; } - - // } else if (isset($_POST['toContinue'])) { - // $objProject->hydrate($_SESSION); - // $objProject->setThumbnail($strDest); - //$objProjectModel->insert($objProject); - // header("Location: index.php"); - // exit; - // } - - $this->_arrData['arrCategory'] = $arrCategory; - $this->_arrData['arrProjectToDiplay'] = $arrProjectToDisplay; - $this->_arrData['arrImageToDiplay'] = $arrImageToDisplay; - $this->_display("project"); // _display('addedit_project'); // find($_GET['id']); + $objProject->hydrate($arrProject); // BDD + } + + + + // Tester le formulaire + $arrError = []; + if (count($_POST) > 0) { + + $objProject->hydrate($_POST); // Formulaire + if ($objProject->getTitle() == ""){ + $arrError['title'] = "Le titre est obligatoire"; + } + + if ($objProject->getDescription() == ""){ + $arrError['description'] = "La description est obligatoire"; + } + + if ($objProject->getContent() == ""){ + $arrError['content'] = "Le contenu est obligatoire"; + } + + // Vérification de l'image + $arrTypeAllowed = array('image/jpeg', 'image/png', 'image/webp'); + if ($_FILES['imageThumbnail']['error'] != 4){ + if (!in_array($_FILES['imageThumbnail']['type'], $arrTypeAllowed)){ + $arrError['imageThumbnail'] = "Le type de fichier n'est pas autorisé"; + }else{ + // Vérification des codes d'erreur + switch ($_FILES['imageThumbnail']['error']){ + case 0 : + // Renommage de l'image + $strImageName = uniqid().".webp"; + + /* uniquement si on veut garder l'extension du fichier originel */ + /*switch ($_FILES['img']['type']){ + case 'image/jpeg' : + $strImageName .= '.jpg'; + break; + case 'image/png' : + $strImageName .= '.png'; + break; + }*/ + + // Récupère le nom de l'image avant changement + $strOldImg = $objProject->getThumbnail(); + // Mise à jour du nom de l'image dans l'objet + $objProject->setThumbnail($strImageName); + break; + case 1 : + $arrError['imageThumbnail'] = "Le fichier est trop volumineux"; + break; + case 2 : + $arrError['imageThumbnail'] = "Le fichier est trop volumineux"; + break; + case 3 : + $arrError['imageThumbnail'] = "Le fichier a été partiellement téléchargé"; + break; + case 6 : + $arrError['imageThumbnail'] = "Le répertoire temporaire est manquant"; + break; + default : + $arrError['imageThumbnail'] = "Erreur sur l'image"; + break; + } + } + + }else{ + // Est-ce que le fichier existe ? + if (is_null($objProject->getThumbnail())){ + $arrError['imageThumbnail'] = "L'image est obligatoire"; + } + } + + // Si le formulaire est rempli correctement + if (count($arrError) == 0){ + if (is_null($objProject->getId())){ + // => Ajout dans la base de données + $boolOk = $objProjectModel->insert($objProject); + }else{ + $boolOk = $objProjectModel->updateProject($objProject); + } + if ($boolOk === true){ + if (isset($strImageName)){ + // Création du chemin de destination + $strDest = $_ENV['IMG_PATH'].$strImageName; + // Récupération de la source de l'image + $strSource = $_FILES['imageThumbnail']['tmp_name']; + // Récupération des dimensions de l'image source + list($intWidth, $intHeight) = getimagesize($strSource); + // Dimensions de destination + $intDestWidth = 200; + $intDestHeight = 250; + + // Calcul du ratio de destination + $fltDestRatio = $intDestWidth / $intDestHeight; + // Calcul du ratio de la source + $fltSourceRatio = $intWidth / $intHeight; + + // Détermination de la zone à cropper + if ($fltSourceRatio > $fltDestRatio) { + // L'image source est plus large → on crop en largeur + $intCropHeight = $intHeight; + $intCropWidth = round($intHeight * $fltDestRatio); + $intCropX = ($intWidth - $intCropWidth) / 2; // Centrage horizontal + $intCropY = 0; + } else { + // L'image source est plus haute → on crop en hauteur + $intCropWidth = $intWidth; + $intCropHeight = round($intWidth / $fltDestRatio); + $intCropX = 0; + $intCropY = ($intHeight - $intCropHeight) / 2; // Centrage vertical + } + + // Création d'une image 'vide' + $objDest = imagecreatetruecolor($intDestWidth, $intDestHeight); + + // Création d'un objet image à partir de la source (attention au type de fichier) + switch ($_FILES['imageThumbnail']['type']){ + case 'image/jpeg' : + $objSource = imagecreatefromjpeg($strSource); + break; + case 'image/png' : + $objSource = imagecreatefrompng($strSource); + break; + case 'image/webp' : + $objSource = imagecreatefromwebp($strSource); + break; + } + + // Mise à jour de l'image 'vide' avec les informations de dimension + //imagecopyresized($objDest, $objSource, 0, 0, 0, 0, 200, 250, $intWidth, $intHeight); + imagecopyresampled($objDest, $objSource, + 0, 0, $intCropX, $intCropY, + $intDestWidth, $intDestHeight, $intCropWidth, $intCropHeight); + + // Si la copie de l'image a bien été effectuée à la destination voulue + $boolOk = imagewebp($objDest, $strDest); + } + if ($boolOk === true){ + //if (move_uploaded_file($_FILES['img']['tmp_name'], $strDest)){ + // suppression de l'ancienne image + $strOldFile = $_ENV['IMG_PATH'].$strOldImg; + if (file_exists($strOldFile)){ + unlink($strOldFile); + } + + if (is_null($objProject->getId())){ + $_SESSION['success'] = "Le projet a bien été créé"; + }else{ + $_SESSION['success'] = "Le projet a bien été modifié"; + } + header("Location:index.php"); + exit; + }else{ + $arrError['imageThumbnail'] = "Erreur dans le traitement de l'image"; + } + }else{ + $arrError[] = "Erreur lors de l'ajout"; + } + } + } + + var_dump($_SESSION); + var_dump($objProject); + var_dump($arrError); + + + // Données pour la vue + $this->_arrData['arrCategory'] = $objCategoryModel->findAllCategory(); + $this->_arrData['objProject'] = $objProject; // On passe l'objet à la vue pour pré-remplir les champs + $this->_arrData['arrError'] = $arrError; + + $this->_display('addedit_project'); + } public function display() { @@ -326,16 +435,4 @@ header("Location: index.php?ctrl=project&action=addedit_project&id=".$intId); exit; } - - public function addedit_project() { - - $objCategoryModel = new CategoryModel; - $arrCategory = $objCategoryModel->findAllCategory(); - - $_SESSION['category']= $_POST['category']??0; - - $this->_arrData['arrCategory'] = $arrCategory; - - $this->_display('addedit_project'); - } } \ No newline at end of file diff --git a/controllers/templates_c/299f75d7692a19207f23bf5795a2721f507c3fc6_0.file_home.tpl.php b/controllers/templates_c/299f75d7692a19207f23bf5795a2721f507c3fc6_0.file_home.tpl.php deleted file mode 100644 index 208dcfd..0000000 --- a/controllers/templates_c/299f75d7692a19207f23bf5795a2721f507c3fc6_0.file_home.tpl.php +++ /dev/null @@ -1,69 +0,0 @@ -getCompiled()->isFresh($_smarty_tpl, array ( - 'version' => '5.7.0', - 'unifunc' => 'content_6985a47abcda40_19846426', - 'has_nocache_code' => false, - 'file_dependency' => - array ( - '299f75d7692a19207f23bf5795a2721f507c3fc6' => - array ( - 0 => 'views/home.tpl', - 1 => 1770365364, - 2 => 'file', - ), - ), - 'includes' => - array ( - 'file:views/_partial/preview.tpl' => 1, - ), -))) { -function content_6985a47abcda40_19846426 (\Smarty\Template $_smarty_tpl) { -$_smarty_current_dir = 'C:\\wamp64\\www\\projetphp\\views'; -$_smarty_tpl->getInheritance()->init($_smarty_tpl, false); -?> - -getInheritance()->instanceBlock($_smarty_tpl, 'Block_3150142016985a47abb6c29_00747518', "content"); -?> - - - -
-

Folliow

-

Là où les talents rencontrent leur avenir

-

Une plateforme de portfolio adapté à vos besoins et aux besoins des entreprises. - Créer un portfolio réellement pertinent aux exigences du marché et rentrez - directement en contact avec les entreprises.

-
- -
-

Les 4 derniers articles

-
- - getSmarty()->getRuntime('Foreach')->init($_smarty_tpl, $_smarty_tpl->getValue('arrProjectToDisplay'), 'objProject'); -$foreach0DoElse = true; -foreach ($_from ?? [] as $_smarty_tpl->getVariable('objProject')->value) { -$foreach0DoElse = false; -?> - renderSubTemplate("file:views/_partial/preview.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, $_smarty_tpl->cache_lifetime, array(), (int) 0, $_smarty_current_dir); -?> - getSmarty()->getRuntime('Foreach')->restore($_smarty_tpl, 1);?> -
-getCompiled()->isFresh($_smarty_tpl, array ( - 'version' => '5.7.0', - 'unifunc' => 'content_6985a47ad585d5_25749521', - 'has_nocache_code' => false, - 'file_dependency' => - array ( - 'c724044e55872f26030b02de6dcd14dc34a20b16' => - array ( - 0 => 'views/_partial/preview.tpl', - 1 => 1770365554, - 2 => 'file', - ), - ), - 'includes' => - array ( - ), -))) { -function content_6985a47ad585d5_25749521 (\Smarty\Template $_smarty_tpl) { -$_smarty_current_dir = 'C:\\wamp64\\www\\projetphp\\views\\_partial'; -?>
-
- -
- -
- -
- -
-
_db->prepare($strRq); $rqPrep->bindValue(":title", $objProject->getTitle(), PDO::PARAM_STR); diff --git a/views/addedit_project.tpl b/views/addedit_project.tpl index 80fd455..6a75307 100644 --- a/views/addedit_project.tpl +++ b/views/addedit_project.tpl @@ -3,21 +3,21 @@ {block name="content"}
{if isset($smarty.session.user)} -
+
- +
- +
- +
@@ -46,7 +46,6 @@
- {* *}
{else} diff --git a/views/project.tpl b/views/project.tpl deleted file mode 100644 index 9663eb5..0000000 --- a/views/project.tpl +++ /dev/null @@ -1,93 +0,0 @@ -{extends file="views/layout.tpl"} - -{block name="content"} - -
-
-

Alimenter votre projet

-
- - {if isset($smarty.post.toContinue)} - - {/if} -
- - {* Affichage d'un formulaire en cas d'appuie sur le bouton "+" *} - {if isset($smarty.post.showForm) || isset($smarty.post.showFormContinue)} - {if isset($smarty.session.user)} -
-
- - -
-
- - -
-
- - -
-
-
- Type de recherche par catégories -
- - -
-
-
-
-

Image thumbnail

- -
-
-

Image du projet

- -
-
- - -
-
- {else} -
-

Vous devez vous connecter pour accéder à cette fonctionnalité

-
- {/if} - {/if} - -
-
-

Description

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

-
-
-

Photos behind the scene

-
- -
-
-
-

Other projects

-
- {foreach $arrProjectToDisplay as $objProject} - {include file="../app/views/partials/preview.tpl"} - {/foreach} -
-
-
-
- -{/block} \ No newline at end of file