Anomalie #29195
openErreur conversion au versement transactionnel
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.
Files
Updated by Cyril VAZQUEZ 6 months ago
- Subject changed from Erreur conversion pdf/ sur versement depuis Pastell to 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.
Updated by Cyril VAZQUEZ 6 months ago
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
Updated by Cyril VAZQUEZ 6 months ago
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
Updated by Cyril VAZQUEZ 6 months ago
- Status changed from A traiter to En cours
- Tags RM 3.0.X added
Updated by Cyril VAZQUEZ 6 months ago
- Assignee changed from Cyril VAZQUEZ to 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.
Updated by Jérôme BOUCHER 4 months ago
- Status changed from En cours to Résolu
- Assignee deleted (
Jérôme BOUCHER)