This commit is contained in:
GuillaumeH-Cci 2026-02-20 11:14:45 +01:00
parent 747bc76de2
commit e6c64912c3
8 changed files with 203 additions and 334 deletions

View file

@ -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"); // <A changer pour récupérer l'ancien formulaire
// $this->_display('addedit_project'); // <A changer pour récupérer le nouveau formulaire
}
$objProject = new Project;
$objProjectModel = new ProjectModel;
$objCategoryModel = new CategoryModel;
// dans la cas de modif
if (isset($_GET['id'])){
$arrProject = $objProjectModel->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');
}
}