Projet

Général

Profil

Anomalie #29195

Erreur conversion au versement transactionnel

Ajouté par Cyril VAZQUEZ il y a 24 jours. Mis à jour il y a 13 jours.

Statut:
En cours
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.

Historique

#2 Mis à jour par Cyril VAZQUEZ il y a 24 jours

  • 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.

#3 Mis à jour par Cyril VAZQUEZ il y a 24 jours

  • Description mis à jour (diff)

#4 Mis à jour par Cyril VAZQUEZ il y a 24 jours

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

#5 Mis à jour par Cyril VAZQUEZ il y a 23 jours

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

#6 Mis à jour par Cyril VAZQUEZ il y a 23 jours

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

#7 Mis à jour par Cyril VAZQUEZ il y a 13 jours

  • 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.

Formats disponibles : Atom PDF