findAll(0,'',0,0,'','','',$intCategory,$boolOld); $arrProjectToDisplay = array(); foreach($arrProject as $arrDetProject){ $objProject = new Project; $objProject->hydrate($arrDetProject); $arrProjectToDisplay[] = $objProject; } $this->_arrData['arrProjectToDisplay'] = $arrProjectToDisplay; $this->_display("home"); } /** * Fonction d'affichage de la barre de recherche */ public function search(){ //Récupérer les informations du formulaire $strKeywords = $_POST['keywords']??''; $intAuthor = $_POST['author']??0; $intPeriod = $_POST['period']??0; $strDate = $_POST['date']??''; $strStartDate = $_POST['startdate']??''; $strEndDate = $_POST['enddate']??''; $intCategory = $_POST['category']??0; // Récupération des projets $objProjectModel = new ProjectModel; $arrProject = $objProjectModel->findAll(intAuthor:$intAuthor, intPeriod:$intPeriod, strDate:$strDate, strKeywords:$strKeywords, strStartDate:$strStartDate, strEndDate:$strEndDate, intCategory:$intCategory); $arrProjectToDisplay = array(); foreach($arrProject as $arrDetProject){ $objProject = new Project; $objProject->hydrate($arrDetProject); $arrProjectToDisplay[] = $objProject; } // Récupération des utilisateurs $objUserModel = new UserModel; $arrUser = $objUserModel->findAllUsers(); // Récupération des catégories $objCategoryModel = new CategoryModel; $arrCategory = $objCategoryModel->findAllCategory(); $this->_arrData['arrProjectToDisplay'] = $arrProjectToDisplay; $this->_arrData['arrCategory'] = $arrCategory; $this->_arrData['arrProject'] = $arrProject; $this->_arrData['arrUser'] = $arrUser; $this->_display("search"); } /** * Fonction d'affichage de la page projet * @author Christel adapter par Guillaume */ public function addedit_project() { if (!isset($_SESSION['user'])){ // Pas d'utilisateur connecté header("Location:index.php?ctrl=error&action=error_403"); exit; } $objProject = new Project; $objProjectModel = new ProjectModel; $objCategoryModel = new CategoryModel; // dans la cas de modif if (isset($_GET['id'])){ $arrProject = $objProjectModel->findOne($_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['thumbnail']['error'] != 4){ if (!in_array($_FILES['thumbnail']['type'], $arrTypeAllowed)){ $arrError['thumbnail'] = "Le type de fichier n'est pas autorisé"; }else{ // Vérification des codes d'erreur switch ($_FILES['thumbnail']['error']){ case 0 : // Renommage de l'image $strImageName = uniqid().".webp"; // 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 : case 2 : $arrError['thumbnail'] = "Le fichier est trop volumineux"; break; case 3 : $arrError['thumbnail'] = "Le fichier a été partiellement téléchargé"; break; case 6 : $arrError['thumbnail'] = "Le répertoire temporaire est manquant"; break; default : $arrError['thumbnail'] = "Erreur sur l'image"; break; } } }else{ // Est-ce que le fichier existe ? if (is_null($objProject->getThumbnail())){ $arrError['thumbnail'] = "L'image est obligatoire"; } } // SI pas d'erreur : on traite l'image depuis la bdd if (count($arrError) == 0){ $boolImageOk = true; // Redimensionnement de l'image if (isset($strImageName)){ $strDest = $_ENV['IMG_PROJECT_PATH'].$strImageName; $strSource = $_FILES['thumbnail']['tmp_name']; list($intWidth, $intHeight) = getimagesize($strSource); $intDestWidth = 200; $intDestHeight = 250; $fltDestRatio = $intDestWidth / $intDestHeight; $fltSourceRatio = $intWidth / $intHeight; if ($fltSourceRatio > $fltDestRatio) { $intCropHeight = $intHeight; $intCropWidth = (int)round($intHeight * $fltDestRatio); $intCropX = (int)(($intWidth - $intCropWidth) / 2); $intCropY = 0; } else { $intCropWidth = $intWidth; $intCropHeight = (int)round($intWidth / $fltDestRatio); $intCropX = 0; $intCropY = (int)(($intHeight - $intCropHeight) / 2); } // Condition en fonction de l'extension de l'image $objDest = imagecreatetruecolor($intDestWidth, $intDestHeight); switch ($_FILES['thumbnail']['type']) { case 'image/jpeg' : $objSource = imagecreatefromjpeg($strSource); break; case 'image/png' : $objSource = imagecreatefrompng($strSource); break; case 'image/webp' : $objSource = imagecreatefromwebp($strSource); break; } imagecopyresampled($objDest, $objSource, 0, 0, $intCropX, $intCropY, $intDestWidth, $intDestHeight, $intCropWidth, $intCropHeight); // Sauvegarde du fichier $boolImageOk = imagewebp($objDest, $strDest); imagedestroy($objDest); imagedestroy($objSource); } // SI image ok, on balance tout dans la bdd if ($boolImageOk){ if (!isset($_GET['id'])){ $objProject->setUser_id($_SESSION['user']['user_id']); $boolOk = $objProjectModel->insert($objProject); } else { $boolOk = $objProjectModel->updateProject($objProject); } if ($boolOk){ // Suppression de l'ancienne image if(isset($strOldImg) && !empty($strOldImg) && isset($strImageName)){ $strOldFile = $_ENV['IMG_PROJECT_PATH'].$strOldImg; if (file_exists($strOldFile)) unlink($strOldFile); } $_SESSION['success'] = (!isset($_GET['id'])) ? "Le projet a bien été créé" : "Le projet a bien été modifié"; header("Location:index.php"); exit; } else { $arrError[] = "Erreur lors de l'enregistrement en base de données"; } } else { $arrError['thumbnail'] = "Erreur dans le traitement de l'image"; } } } // Données pour la vue $this->_arrData['arrCategory'] = $objCategoryModel->findAllCategory(); $this->_arrData['objProject'] = $objProject; $this->_arrData['arrError'] = $arrError; $this->_display('addedit_project'); } public function display() { $intId = $_GET['id'] ?? null; if ($intId) { $objProjectModel = new ProjectModel(); $arrProject = $objProjectModel->findOne((int)$intId); if ($arrProject) { $objProject = new Project(); $objProject->hydrate($arrProject); $this->_arrData["objProject"] = $objProject; $this->_display("project_display"); } else { header("Location: index.php?ctrl=project&action=home"); exit; } } else { header("Location: index.php?ctrl=project&action=home"); exit; } } public function shareProject(){ if (count($_POST) > 0) { $projectId = (int)($_POST['project_id'] ?? 0); $toEmail = trim($_POST['to_email'] ?? ''); $objProjectModel = new ProjectModel(); $arrProject = $objProjectModel->findOne($projectId); if (!$arrProject) { header("Location: index.php?ctrl=project&action=home"); exit; } $objProject = new Project(); $objProject->hydrate($arrProject); $objMail = new PHPMailer(); $objMail->IsSMTP(); $objMail->Mailer = "smtp"; $objMail->CharSet = PHPMailer::CHARSET_UTF8; $objMail->SMTPDebug = 0; $objMail->SMTPAuth = true; $objMail->SMTPSecure = "tls"; $objMail->Port = 587; $objMail->Host = 'smtp-relay.brevo.com'; $objMail->Username = 'a2a67e001@smtp-brevo.com'; $objMail->Password = 'xsmtpsib-f2af87e12d3db6f1b99802a92c1acda32d45fc32a8446eeed7e49ec91c4ec7ef-AX8Y7YkRWYSmKHwS'; // Désactive la vérification du certificat SSL // Cela permet d'éviter les erreurs liées au certificat, mais réduit la sécurité de la connexion. $objMail->SMTPOptions = [ 'ssl' => [ 'verify_peer' => false, ], ]; $objMail->IsHTML(true); $objMail->setFrom('projet.folliow@hotmail.com', 'Folliow'); $objMail->addAddress($toEmail); $objMail->Subject = "Projet : " . $objProject->getTitle(); $url = "https://php.boulayoune.com/index.php?ctrl=project&action=display&id=" . $projectId; $this->_arrData['projectTitle'] = $objProject->getTitle(); $this->_arrData['projectDescription'] = $objProject->getDescription(); $this->_arrData['projectUrl'] = $url; $objMail->Body = $this->_display("mail_message", false); if ($objMail->Send()) { header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=ok"); } else { header("Location: index.php?ctrl=project&action=display&id=".$projectId."&mail=fail"); } exit; } header("Location: index.php?ctrl=project&action=home"); exit; } public function accept(){ //Récupéré l'id dans l'url $intId = $_GET['id']; //Je créer un nouveau model pour exec la commande SQL $objProjectModel = new ProjectModel; $objProjectModel->accept($intId); //Redirection vers la page header("Location: index.php"); exit; } public function refuse(){ //Récupéré l'id dans l'url $intId = $_GET['id']; //Je créer un nouveau model pour exec la commande SQL $objProjectModel = new ProjectModel; $objProjectModel->refuse($intId); //Redirection vers la page header("Location: index.php"); exit; } public function delete(){ //Récupéré l'id dans l'url $intId = $_GET['id']; //Je créer un nouveau model pour exec la commande SQL $objProjectModel = new ProjectModel; $objProjectModel->delete($intId); //Redirection vers la page header("Location: index.php"); exit; } /** * Page mentions légales */ public function mentions(){ // Afficher $this->_display("mentions"); } /** * Page à propos */ public function about(){ // Afficher $this->_display("about"); } }