0){ $strRq .= " AND project_user_id = :author"; } if ($intCategory > 0){ $strRq .= " AND project_category = :category"; } if ($boolOlderThan6Months === true) { $strRq .= " AND project_creation_date <= DATE_SUB(NOW(), INTERVAL 6 MONTH)"; } if ($intPeriod == 0){ if ($strDate != ''){ $strRq .= " AND project_creation_date = :date_exacte"; } } else { if ($strStartDate != '' && $strEndDate != ''){ $strRq .= " AND project_creation_date BETWEEN :date_debut AND :date_fin"; } else { if ($strStartDate != ''){ $strRq .= " AND project_creation_date >= :date_debut"; } else if ($strEndDate != ''){ $strRq .= " AND project_creation_date <= :date_fin"; } } } $strRq .= " ORDER BY project_creation_date DESC"; if ($intLimit > 0){ $strRq .= " LIMIT :limit"; } $rqPrep = $this->_db->prepare($strRq); if ($strKeywords != '') { $rqPrep->bindValue(':keywords', '%' . $strKeywords . '%', PDO::PARAM_STR); } if ($intAuthor > 0){ $rqPrep->bindValue(':author', $intAuthor, PDO::PARAM_INT); } if ($intCategory > 0){ $rqPrep->bindValue(':category', $intCategory, PDO::PARAM_INT); } if ($intPeriod == 0){ if ($strDate != ''){ $rqPrep->bindValue(':date_exacte', $strDate, PDO::PARAM_STR); } } else { if ($strStartDate != '' && $strEndDate != ''){ $rqPrep->bindValue(':date_debut', $strStartDate, PDO::PARAM_STR); $rqPrep->bindValue(':date_fin', $strEndDate, PDO::PARAM_STR); } else { if ($strStartDate != ''){ $rqPrep->bindValue(':date_debut', $strStartDate, PDO::PARAM_STR); } else if ($strEndDate != ''){ $rqPrep->bindValue(':date_fin', $strEndDate, PDO::PARAM_STR); } } } if ($intLimit > 0){ $rqPrep->bindValue(':limit', $intLimit, PDO::PARAM_INT); } $rqPrep->execute(); return $rqPrep->fetchAll(); } /** * Fonction d'insertion d'un nouveau projet dans la bdd * @param object $objProject l'objet projet * @return bool Est-ce que la requête s'est bien passée */ public function insert(object $objProject):bool{ $strRq = "INSERT INTO project (project_title, project_description, project_thumbnail, project_content, project_status, project_creation_date, project_user_id, project_category) VALUES (:title, :description, :thumbnail, :content, :status, DATE(NOW()), :project_user_id, :project_category)"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(":title", $objProject->getTitle(), PDO::PARAM_STR); $rqPrep->bindValue(":description", $objProject->getDescription(), PDO::PARAM_STR); $rqPrep->bindValue(":thumbnail", $objProject->getThumbnail(), PDO::PARAM_STR); $rqPrep->bindValue(":content", $objProject->getContent(), PDO::PARAM_STR); $rqPrep->bindValue(":status", $objProject->getStatus(), PDO::PARAM_STR); $rqPrep->bindValue(":project_user_id", $objProject->getUser_id(), PDO::PARAM_STR); $rqPrep->bindValue(":project_category", $objProject->getCategory(), PDO::PARAM_STR); // On met une variable boolOk pour récupérer l'id du projet $boolOk = $rqPrep->execute(); // Si boolOk est remplis if ($boolOk) { // On récupère l'ID auto-incrémenté et on l'injecte dans l'objet $objProject->setId($this->_db->lastInsertId()); } return $boolOk; } /** * Fonction de recherche d'un seul projet * @param int $intId * @return array */ public function findOne(int $intId) :array{ $strRq = "SELECT project.*, users.user_pseudo AS 'project_creatorname', users.user_image, category.category_name FROM project INNER JOIN users ON users.user_id = project.project_user_id LEFT JOIN category ON category.category_id = project.project_category WHERE project.project_id = :id"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(":id", $intId, PDO::PARAM_INT); $rqPrep->execute(); return $rqPrep->fetch(); } /** * Fonction de changement de status (accepter) d'un projet en BDD * @author Guillaume * @param int $id l'id du projet * @return bool Est-ce que la requête s'est bien passée */ public function accept(int $id){ $strRq = "UPDATE project SET project_status= 'publié' WHERE project_id =".$id; return $this->_db->query($strRq); } /** * Fonction de changement de status (refusé) d'un projet en BDD * @author Guillaume * @param int $id l'id du projet * @return bool Est-ce que la requête s'est bien passée */ public function refuse(int $id){ $strRq = "UPDATE project SET project_status= 'refusé' WHERE project_id =".$id; return $this->_db->query($strRq); } /** * Fonction de suppression d'un projet en BDD * @author Guillaume * @param int $id l'id du projet * @return bool Est-ce que la requête s'est bien passée */ public function delete(int $id){ $strRq = "DELETE FROM project WHERE project_id =".$id; return $this->_db->query($strRq); } /** * Fonction de mise à jour d'un projet en BDD * @author Guillaume * @param object $objProject L'objet utilisateur * @return bool Est-ce que la requête s'est bien passée */ public function updateProject(object $objProject):bool{ $strRq = "UPDATE project SET project_title = :title, project_description = :description, project_content = :content, project_thumbnail = :thumbnail WHERE project_id = :id"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(":title", $objProject->getTitle(), PDO::PARAM_STR); $rqPrep->bindValue(":description", $objProject->getDescription(), PDO::PARAM_STR); $rqPrep->bindValue(":content", $objProject->getContent(), PDO::PARAM_STR); $rqPrep->bindValue(":thumbnail", $objProject->getThumbnail(), PDO::PARAM_STR); $rqPrep->bindValue(":id", $objProject->getId(), PDO::PARAM_INT); return $rqPrep->execute(); } /** * Fonction de récupération d'image d'un projet en BDD * @author Guillaume * @param int $objProject L'Id du projet choisit * @return array Un tableau avec les informations de la bdd */ public function getImagesByProjectId(int $projectId): array { $strRq = "SELECT image_id, image_name, image_alt, image_status FROM image WHERE image_project = :id"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(":id", $projectId, PDO::PARAM_INT); $rqPrep->execute(); return $rqPrep->fetchAll(PDO::FETCH_ASSOC); } /** * Fonction de récupération d'image d'un projet en BDD * @author Guillaume * @param int $id L'Id de l'image choisit * @return array Un tableau avec les informations de la bdd */ public function deleteImage(int $id): bool { $strRq = "DELETE FROM image WHERE image_id = :id"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(':id', $id, PDO::PARAM_INT); return $rqPrep->execute(); } /** * Fonction de modifications de status de l'image d'un projet en BDD * @author Guillaume * @param int $id L'Id de l'image choisit, string $status le status choisit * @return array Un tableau avec les informations de la bdd */ public function updateImageStatus(int $id, string $status): bool { $strRq = "UPDATE image SET image_status = :status WHERE image_id = :id"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(':status', $status, PDO::PARAM_STR); $rqPrep->bindValue(':id', $id, PDO::PARAM_INT); return $rqPrep->execute(); } /** * Fonction de récupération d'image d'un projet en BDD * @author Guillaume * @param int $id L'Id de l'image choisit * @return array Un tableau avec les informations de la bdd */ public function findImage(int $id): array|bool { $strRq = "SELECT * FROM image WHERE image_id = :id"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(':id', $id, PDO::PARAM_INT); $rqPrep->execute(); return $rqPrep->fetch(PDO::FETCH_ASSOC); } /** * Ajoute une image liée à un projet dans la table 'image' * @author Guillaume * @param string $fileName Nom du fichier image * @param int $projectId ID du projet parent * @param string $alt Texte alternatif * @return bool */ public function addImageInProject(string $fileName, int $projectId, string $alt = "Image projet"): bool { $strRq = "INSERT INTO image ( image_name, image_alt, image_status, image_project ) VALUES (:name, :alt, :status, :project)"; $rqPrep = $this->_db->prepare($strRq); $rqPrep->bindValue(":name", $fileName, PDO::PARAM_STR); $rqPrep->bindValue(":alt", $alt, PDO::PARAM_STR); // On met le statut par défaut en "en_attente" pour la modération $rqPrep->bindValue(":status", "en_attente", PDO::PARAM_STR); $rqPrep->bindValue(":project", $projectId, PDO::PARAM_INT); return $rqPrep->execute(); } }