setIteratorIndex(0); $miniature->setCompression($compression); $miniature->setCompressionQuality($compressionQuality); $miniature->setImageFormat($format); $miniature->thumbnailImage($hauteur, $largeur); return $miniature->getImagesBlob(); } catch (Exception $e) { $this->addToLog( __METHOD__ . "() : Erreur lors de la miniaturisation. " . "Detail: " . get_class($e) . " " . $e->getMessage() ); } } /** * Méthode de traitement de fichier : miniaturiser le fichier stocké dans "uid" et "nom_fichier". * Le chemin vers la vignette sera stocké dans "uid_thumbnail" * * Fonction à appeler dans : * - triggerajouterapres() * - triggermodifierapres() */ function traitement_fichier_miniaturise(): void { /** @var om_dbform|miniature_document $this Ce trait s'applique sur une classe enfant de om_dbform */ $infoFichier = $this->f->storage->get($this->getVal('uid')); if (! $this->is_miniaturisable($infoFichier) && empty($this->getVal('uid_thumbnail'))) { // Si le fichier n'est pas miniaturisable et qu'on a pas de miniature enregistrée, on a rien à faire return; } if ($this->is_miniaturisable($infoFichier)) { $im = $this->get_miniature_fichier( $this->f->storage->getPath($this->getVal('uid')), 128, 128, "png" ); if (empty($im)) { $this->addToMessage(__("Info: échec de la création de la miniature du document.")); return; } // Si la création de la miniature a réussi, elle est enregistré dans la BD $metadata = array( "filename" => $this->valF['nom_fichier'] . ".min.png", "size" => strlen($im), "mimetype" => "image/png", "date_creation" => date("Y-m-d"), ); // Si le champ existe déjà, c'est qu'une miniature existe déjà : on la modifie if (! empty($this->getVal('uid_thumbnail'))) { $uid_thumbnail = $this->f->storage->update($this->getVal("uid_thumbnail"), $im, $metadata, "from_content"); } else { $uid_thumbnail = $this->f->storage->create($im, $metadata, "from_content", static::class . ".uid_thumbnail"); } if ($uid_thumbnail === OP_FAILURE) { $this->addToMessage(__("Erreur lors de la creation de la miniature du fichier.")); return; } } else { // La miniature existait pour le fichier, mais on ne peut plus en générer : on la supprime $res_delete = $this->f->storage->delete($this->getVal('uid_thumbnail')); if ($res_delete === false) { // Gestion erreur verrou $msg = sprintf(__("Le fichier sur le champ %s uid_thumbnail est verrouillé."), $this->table); $this->addToLog(__METHOD__ . "(): " . $msg . __("id") . " = " . $this->getVal($this->clePrimaire) . " - " . __("uid fichier") . " = " . $this->getVal('uid_thumbnail'), DEBUG_MODE); $this->addToMessage($msg . ' ' . __("Veuillez revalider le formulaire")); return; } if ($res_delete == OP_FAILURE) { // Gestion erreur filestorage $msg = sprintf(__("Erreur lors de la suppression du fichier sur le champ \"%s uid\" "), $this->table); $this->addToLog(__METHOD__ . "(): " . $msg . __("id") . " = " . $this->getVal($this->clePrimaire) . " - " . __("uid fichier") . " = " . $this->getVal('uid_thumbnail'), DEBUG_MODE); $this->addToMessage($msg); return; } $uid_thumbnail = null; } $res = $this->f->db->autoExecute( DB_PREFIXE . $this->table, array("uid_thumbnail" => $uid_thumbnail,), DB_AUTOQUERY_UPDATE, $this->clePrimaire . "=" . $this->valF[$this->clePrimaire] ); $this->f->addToLog(__METHOD__ . "() : db->autoExecute(" . $res . ")", VERBOSE_MODE); if ($this->f->isDatabaseError($res, true) === true) { $msg_error = sprintf(__("Erreur lors de la sauvegarde de la miniature du fichier")); $this->f->addToLog(__METHOD__ . "(): " . $msg_error, DEBUG_MODE); $this->addToMessage($msg_error); return; } } /** * Fonction à appeler dans : * - triggersupprimer */ function supprimer_fichier_miniaturise_si_existe(): void { /** @var om_dbform|miniature_document $this Ce trait s'applique sur une classe enfant de om_dbform */ if (empty($this->getVal('uid_thumbnail'))) { return; } // Si on a un uid pour la miniature et qu'on supprime la miniature // alors on la supprime également dans le filestorage $res_delete = $this->f->storage->delete($this->getVal('uid_thumbnail')); if ($res_delete === false) { // Gestion erreur verrou $msg = sprintf(__("Le fichier sur le champ %s uid_thumbnail est verrouillé."), $this->table); $this->addToLog(__METHOD__ . "(): " . $msg . __("id") . " = " . $this->getVal($this->clePrimaire) . " - " . __("uid fichier") . " = " . $this->getVal('uid_thumbnail'), DEBUG_MODE); $this->addToMessage($msg . ' ' . __("Veuillez revalider le formulaire")); return; } if ($res_delete == OP_FAILURE) { // Gestion erreur filestorage $msg = sprintf(__("Erreur lors de la suppression du fichier sur le champ \"%s uid\" "), $this->table); $this->addToLog(__METHOD__ . "(): " . $msg . __("id") . " = " . $this->getVal($this->clePrimaire) . " - " . __("uid fichier") . " = " . $this->getVal('uid_thumbnail'), DEBUG_MODE); $this->addToMessage($msg); return; } } /** * Récupère et affiche au format base64 le contenu de la miniature, si elle existe * * Fonction à appeler dans une action de la classe * * @deprecated Dans la mesure du possible, directement remplacer par un lien direct vers le module=form&snippet=file */ function view_miniature_data(): void { /** @var om_dbform|miniature_document $this Ce trait s'applique sur une classe enfant de om_dbform */ $this->checkAccessibility(); $this->f->disableLog(); $lien = '../app/index.php?module=form&snippet=file&obj='.$this->table.'&champ='.'uid_thumbnail'.'&id='.$this->getVal($this->clePrimaire); header("Location: ".$lien); } }