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();
     }
 }