f->storage->storage->temporary_storage->get($uid); /* * DEBUT - Trouillotage du fichier */ $msg_trouillotage = __("Erreur lors du trouillotage du fichier."); //Récupération du contenu du fichier temporaire if ($fichier_temporaire === null || $fichier_temporaire === OP_FAILURE) { $this->addToMessage($msg_trouillotage." ".__("Le fichier est introuvable.")); return false; } $fichier_content = base64_encode($fichier_temporaire["file_content"]); //Si on a pu récupérer le contenu, on le trouillote if ($fichier_content === false){ $this->addToMessage($msg_trouillotage." ".__("Le contenu du fichier n'a pas pu etre recupere.")); return false; } //Debut - STAMP $data = array( "base64" => $fichier_content, "stamp_value" => $stamp ); if (file_exists("../dyn/services.inc.php")) { require "../dyn/services.inc.php"; } // Vérification de la configuration du service de trouillotage if (isset($STAMP_WS_URL_) === false) { $this->addToMessage($msg_trouillotage." ".__("Le service de trouillotage numérique n'est pas configuré.")); return false; } require_once PATH_OPENMAIRIE."om_rest_client.class.php"; $inst_om_rest_client = new om_rest_client( $STAMP_WS_URL_ ); $response = $inst_om_rest_client->execute( "POST", "application/json", json_encode($data) ); $fichier_trouillote = false; if ($inst_om_rest_client->getResponseCode() === 200) { $fichier_trouillote = base64_decode($response["base64"]); } if ($fichier_trouillote === false) { $this->addToMessage($msg_trouillotage." ".__("Le contenu trouillote du fichier n'a pas pu etre recupere.")); return false; } //Fin - STAMP //Constitution des metadata du fichier temporaire trouilloté $metadata = $fichier_temporaire['metadata']; $metadata["size"] = strlen($fichier_trouillote); //Creation d'un fichier temporaire trouilloté à partir du contenu $tmp_fichier_trouillote = $this->f->storage->create_temporary($fichier_trouillote, $metadata, "from_content"); if ($tmp_fichier_trouillote === OP_FAILURE) { $this->addToMessage($msg_trouillotage." ".__("Erreur lors de la creation du fichier trouillote temporaire.")); return false; } return $tmp_fichier_trouillote; } /** * Méthode de traitement de fichier uploadé : récupération du fichier * temporaire, pour l'ajout avec trouillotage si l'option est activée. * * @return string/boolean retourne true ou un message d'erreur */ function traitementFichierUploadAjoutModification() { /** @var om_dbform|trouillotage_document $this Ce trait s'applique sur une classe enfant de om_dbform */ if ($this->f->is_option_trouillotage_numerique_enabled() !== true){ return parent::traitementFichierUploadAjoutModification(); } // Récupération du mode de l'action $crud = $this->get_action_crud(); $type_list = array(); // Récupération du tableau abstract_type si il existe sinon on utilise // les type de champs définis dans le formulaire if (isset($this->abstract_type)) { $type_list = $this->abstract_type; } elseif (isset($this->form->type)) { $type_list = $this->form->type; } // Pour chaque champs configurés avec les widgets upload, upload2 ou filestatic // ou chaque champs de type abstrait file défini dans le tableau abstract_type foreach ($type_list as $champ => $type) { // if ($type == "upload" || $type == "upload2" || $type == "filestatic" || (isset($this->abstract_type) && $type == "file")) { // Message d'erreur $msg = ""; // Cas d'un ajout de fichier // Condition : si la valeur existante en base est vide ou que // nous sommes en mode 'AJOUT' ET qu'une valeur est postée pour // le champ fichier if (($this->getVal($champ) == "" || ($crud === 'create' || ($crud === null && $this->getParameter('maj') == 0))) && isset($this->valF[$champ]) && $this->valF[$champ] != "") { // Si la valeur du champ contient le marqueur 'temporary' $temporary_test = explode("|", $this->valF[$champ]); // if (isset($temporary_test[0]) && $temporary_test[0] == "tmp") { // if (!isset($temporary_test[1])) { // $msg = __("Erreur lors de la creation du fichier sur le champ"). " \"".$this->table.".".$champ."\". "; $this->addToLog(__METHOD__."(): ".$msg, DEBUG_MODE); $this->addToMessage($msg.__("Veuillez contacter votre administrateur.")); return $msg.__("Veuillez contacter votre administrateur."); } //Constitution du tampon $date_depot = DateTimeImmutable::createFromFormat("Y-m-d", $this->valF["date_creation"])->format('Y-m-d'); $stamp = sprintf("%s %s", $this->getDossier(), $date_depot); //Trouillotage $fichier_trouillote = $this->traitementFichierTrouillotage($temporary_test[1],$stamp); if(isset($fichier_trouillote) !== true || $fichier_trouillote === false){ // return $msg.__("Le contenu trouillote du fichier n'a pas pu etre recupere."); } // Récupération des métadonnées calculées après validation $metadata = $this->getMetadata($champ); //Création du fichier définitif à partir du fichier temporaire trouilloté $this->valF[$champ] = $this->f->storage->create($fichier_trouillote, $metadata, "from_temporary", $this->table.".".$champ); // Si le fichier est vérouillé if ($this->valF[$champ] === false) { // $msg = __("Le fichier sur le champ")." ".$this->table.".".$champ." ". __("est verouille. "); $this->addToLog(__METHOD__."(): ".$msg, DEBUG_MODE); $this->addToMessage($msg.__("Veuillez revalider le formulaire.")); return $msg.__("Veuillez revalider le formulaire."); } // Gestion du retour d'erreur if ($this->valF[$champ] == OP_FAILURE) { // $msg = __("Erreur lors de la creation du fichier sur le champ"). " \"".$this->table.".".$champ."\". "; $this->addToLog(__METHOD__."(): ".$msg, DEBUG_MODE); $this->addToMessage($msg.__("Veuillez contacter votre administrateur.")); return $msg.__("Veuillez contacter votre administrateur."); } } } // Cas d'une modification de fichier // Condition : si nous ne sommes pas en mode 'AJOUT' ET si la // valeur existante en base n'est pas vide ET qu'une valeur est // postée pour le champ fichier ET que la valeur postée est // différente de la valeur présente en base if ((($crud !== null && $crud !== 'create') || ($crud === null && $this->getParameter('maj') != 0)) && $this->getVal($champ) != "" && isset($this->valF[$champ]) && $this->valF[$champ] != "" && $this->getVal($champ) != $this->valF[$champ]) { // Si la valeur du champ contient le marqueur 'temporary' $temporary_test = explode("|", $this->valF[$champ]); // if (isset($temporary_test[0]) && $temporary_test[0] == "tmp") { // if (!isset($temporary_test[1])) { // $msg = __("Erreur lors de la mise a jour du fichier sur le champ"). " \"".$this->table.".".$champ."\". "; $this->addToLog(__METHOD__."(): ".$msg.__("id")." = ".$this->valF[$this->clePrimaire]." - ".__("uid fichier")." = ".$this->getVal($champ), DEBUG_MODE); $this->addToMessage($msg.__("Veuillez contacter votre administrateur.")); return $msg.__("Veuillez contacter votre administrateur."); } //Constitution du tampon $date_depot = DateTimeImmutable::createFromFormat("Y-m-d", $this->valF["date_creation"])->format('Y-m-d'); $stamp = sprintf("%s %s", $this->getDossier(), $date_depot); //Trouillotage $fichier_trouillote = $this->traitementFichierTrouillotage($temporary_test[1],$stamp); if(isset($fichier_trouillote) !== true || $fichier_trouillote === false){ // return $msg.__("Le contenu trouillote du fichier n'a pas pu etre recupere."); } // Sauvegarde de l'ancien fichier $this->tmpFile[$champ] = $this->f->storage->get($this->getVal($champ)); // Récupération des métadonnées calculées après validation $metadata = $this->getMetadata($champ); // $this->valF[$champ] = $this->f->storage->update($this->getVal($champ),$fichier_trouillote, $metadata, "from_temporary"); // Si le fichier est vérouillé if ($this->valF[$champ] === false) { // $msg = __("Le fichier sur le champ")." ".$this->table.".".$champ." ". __("est verouille. "); $this->addToLog(__METHOD__."(): ".$msg.__("id")." = ".$this->valF[$this->clePrimaire]." - ".__("uid fichier")." = ".$this->getVal($champ), DEBUG_MODE); $this->addToMessage($msg.__("Veuillez revalider le formulaire.")); return $msg.__("Veuillez revalider le formulaire"); } // Gestion du retour d'erreur if ($this->valF[$champ] == OP_FAILURE) { // $msg = __("Erreur lors de la mise a jour du fichier sur le champ"). " \"".$this->table.".".$champ."\". "; $this->addToLog(__METHOD__."(): ".$msg.__("id")." = ".$this->valF[$this->clePrimaire]." - ".__("uid fichier")." = ".$this->getVal($champ), DEBUG_MODE); $this->addToMessage($msg.__("Veuillez contacter votre administrateur.")); return $msg.__("Veuillez contacter votre administrateur."); } } } } } return true; } }