Projet

Général

Profil

Actions

Anomalie #29195

ouvert

Erreur conversion au versement transactionnel

Ajouté par Cyril VAZQUEZ il y a 6 mois. Mis à jour il y a 3 mois.

Statut:
Résolu
Priorité:
2-Sérieux
Assigné à:
-
Version cible:
Début:
27/05/2024
Echéance:
Tags RM:
2.9.X, 3.0.X

Description

La conversion ne fonctionne pas lors d'un versement depuis Pastell avec l'API Maarch : le pdf/a apparaît bien dans les documents, mais s'affichent des pages blanches.

Tests menés :

  • nouveau versement dans MaarchRM de documents de la même source -> conversion ok, pdf/a lisible
  • nouveau versement depuis Pastell -> pdf page blanche

La conversion pose donc problème avec l'API Maarch depuis Pastell.


Fichiers

Mis à jour par Cyril VAZQUEZ il y a 6 mois

  • Sujet changé de Erreur conversion pdf/ sur versement depuis Pastell à Erreur conversion au versement transactionnel

Analyse :

La méthode digitalResource::convert reçoit l'objet digitalResource à convertir.
Elle copie le flux (stream/handler) vers un répertoire temporaire pour réaliser la conversion.

Il y a un test pour utiliser le nom de fichier s'il existe.

$tempdir = str_replace("/", DIRECTORY_SEPARATOR, \laabs\tempdir());

if (isset($digitalResource->fileName)) {
    $srcfile = $tempdir . DIRECTORY_SEPARATOR . $digitalResource->fileName;
} else {
    $srcfile = $tempdir . DIRECTORY_SEPARATOR . $digitalResource->resId;
}

$tgtfp = fopen($srcfile, 'w');
stream_copy_to_stream($handler, $tgtfp);

Le problème vient du fait que si le bordereau SEDA ou autre message formel utilise des noms de fichier comportant des chemins répertoire, ce nom est repris tel-quel dans l'attribut filename.

2 options :

  • Modifier le traitement SEDA/Medona pour ne conserver que le nom de fichier et pas le chemin répertoire au moment d'attribuer la valeur digitalResource::$filename`
  • Modifier la procédure de conversion pour ne conserver que le nom de fichier et pas le chemin répertoire au moment de créer le fichier temporaire

Les deux peuvent être réalisées.

Mis à jour par Cyril VAZQUEZ il y a 6 mois

  • Description mis à jour (diff)

Mis à jour par Cyril VAZQUEZ il y a 6 mois

Le traitement SEDA 2 qui génère l'objet DigitalResource prend bien uniquement en compte la valeur de FileInfo/Filename:

if (isset($binaryDataObject->fileInfo->filename)) {
    $resource->fileName = $binaryDataObject->fileInfo->filename;
    $resource->fileExtension = pathinfo($resource->fileName, \PATHINFO_EXTENSION);
}

Il est probable que les données produites par Pastell soient invalides car elles contiennent un filename avec séparateur.

Contournement = ne conserver que le nom de fichier et pas le chemin avec la fonction pathinfo($binaryDataObject->fileInfo->filename, \PATHINFO_BASENAME); attention ne pas utiliser PATHINFO_FILENAME qui ne conserve pas l'extension

Mis à jour par Cyril VAZQUEZ il y a 6 mois

Branche maarchRM fix/29195_filename_containing_directory_separators créée depuis Support/2.9.X
Modification de la méthode de conversion pour utiliser basename sur digitalResource::$filename pour le nom de fichier temporaire

Branche AP fix/29195_filename_containing_directory_separators créée depuis Support/2.9.X
Modification des procédures SEDA et SEDA2 pour utiliser basename sur Attachement::$filename et FileInfo::$filename pour alimenter digitalResource::$filename

A tester

A reporter sur develop pour V3

Mis à jour par Cyril VAZQUEZ il y a 6 mois

  • Statut changé de A traiter à En cours
  • Tags RM 3.0.X ajouté

Mis à jour par Cyril VAZQUEZ il y a 5 mois

  • Assigné à changé de Cyril VAZQUEZ à Jérôme BOUCHER

Peux-tu planifier la validation du correctif sur les branches à fusionner 2.9.X et ensuite reporter les corrections sur develop pour la V3 ?

Il faut mettre un Filename avec '/' dans les bordereaux SEDA avec conversion au dépôt. Je peux essayer de tester demain.

Mis à jour par Jérôme BOUCHER il y a 3 mois

  • Statut changé de En cours à Résolu
  • Assigné à Jérôme BOUCHER supprimé
Actions

Formats disponibles : Atom PDF