public function save(Livre $livre) { if ($livre->isValid()) { $livre->isNew() ? $this->add($livre) : $this->modify($livre); } else { throw new \RuntimeException('Le livre doit être valide pour être enregistré'); } }
public function modify(Livre $livre) { $photo = $livre->couverture(); //cas sans photo if (empty($photo)) { $requete = $this->dao->prepare('UPDATE LIVRE SET LIV_NOM = :nom, LIV_ANNEE = :annee, LIV_POCHE = :poche, LIV_NUM = :ebook, GEN_ID = :genreId, AUT_ID = :auteurId WHERE LIV_ID = :id'); $requete->bindValue(':nom', ucwords(htmlspecialchars($livre->nom()))); $requete->bindValue(':annee', htmlspecialchars($livre->annee())); $requete->bindValue(':poche', (int) $livre->poche()); $requete->bindValue(':ebook', (int) $livre->ebook()); $requete->bindValue(':genreId', (int) $livre->genreId()); $requete->bindValue(':auteurId', (int) $livre->auteurId()); $requete->bindValue(':id', (int) $livre->id()); $requete->execute(); } else { //On récupère le nom du fichier pour le supprimer après $requete_delete = $this->dao->prepare('SELECT LIV_COUVERTURE AS photo FROM LIVRE WHERE LIV_ID = :id'); $requete_delete->bindValue(':id', (int) $livre->id(), \PDO::PARAM_INT); $requete_delete->execute(); if ($old_image = $requete_delete->fetch(\PDO::FETCH_ASSOC)) { if (file_exists('../Web/' . $old_image['photo']) && $old_image['photo'] != '') { unlink('../Web/' . $old_image['photo']); } } //MAJ $requete = $this->dao->prepare('UPDATE LIVRE SET LIV_NOM = :nom, LIV_ANNEE = :annee, LIV_POCHE = :poche, LIV_NUM = :ebook, LIV_COUVERTURE = :couverture, GEN_ID = :genreId, AUT_ID = :auteurId WHERE LIV_ID = :id'); $date = md5(uniqid(rand(), true)); $urlPhoto = '../Web/images/upload/' . $date; $urlPhotoBdd = '/images/upload/' . $date; //On envoie le fichier sur le serveur if (in_array($_FILES['couverture']['type'], array('image/jpeg', 'image/pjpeg', 'image/jpg'))) { $urlPhoto .= '.jpg'; $urlPhotoBdd .= '.jpg'; move_uploaded_file($livre->couverture(), $urlPhoto); $source = imagecreatefromjpeg($urlPhoto); } else { if ($_FILES['couverture']['type'] == 'image/png') { $urlPhoto .= '.png'; $urlPhotoBdd .= '.png'; move_uploaded_file($livre->couverture(), $urlPhoto); $source = imagecreatefrompng($urlPhoto); } } //On définit la hauteur et la largeur de la source $largeur_source = imagesx($source); $hauteur_source = imagesy($source); //portrait if ($largeur_source >= $hauteur_source) { $largeur_destination = 640; $hauteur_destination = $hauteur_source * $largeur_destination / $largeur_source; // On crée la miniature vide $destination = imagecreatetruecolor($largeur_destination, $hauteur_destination); // On crée la miniature imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source); // On enregistre la miniature if (in_array($_FILES['couverture']['type'], array('image/jpeg', 'image/pjpeg', 'image/jpg'))) { imagejpeg($destination, $urlPhoto); } else { if ($_FILES['couverture']['type'] == 'image/png') { imagepng($destination, $urlPhoto); } } } else { $hauteur_destination = 640; $largeur_destination = $hauteur_destination * $largeur_source / $hauteur_source; // On crée la miniature vide $destination = imagecreatetruecolor($largeur_destination, $hauteur_destination); // On crée la miniature imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source); // On enregistre la miniature if (in_array($_FILES['couverture']['type'], array('image/jpeg', 'image/pjpeg', 'image/jpg'))) { imagejpeg($destination, $urlPhoto); } else { if ($_FILES['couverture']['type'] == 'image/png') { imagepng($destination, $urlPhoto); } } } $requete->bindValue(':id', (int) $livre->id()); $requete->bindValue(':nom', ucwords(htmlspecialchars($livre->nom()))); $requete->bindValue(':annee', htmlspecialchars($livre->annee())); $requete->bindValue(':poche', (int) $livre->poche()); $requete->bindValue(':ebook', (int) $livre->ebook()); $requete->bindValue(':genreId', (int) $livre->genreId()); $requete->bindValue(':auteurId', (int) $livre->auteurId()); $requete->bindValue(':couverture', $urlPhotoBdd); $requete->execute(); } }