Project

General

Profile

Actions

Anomalie #29195

open

Erreur conversion au versement transactionnel

Added by Cyril VAZQUEZ 6 months ago. Updated 4 months ago.

Status:
Résolu
Priority:
2-Sérieux
Assignee:
-
Target version:
Start date:
05/27/2024
Due date:
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.


Files

Actions #2

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.

Actions #3

Updated by Cyril VAZQUEZ 6 months ago

  • Description updated (diff)
Actions #4

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

Actions #5

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

Actions #6

Updated by Cyril VAZQUEZ 6 months ago

  • Status changed from A traiter to En cours
  • Tags RM 3.0.X added
Actions #7

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.

Actions #8

Updated by Jérôme BOUCHER 4 months ago

  • Status changed from En cours to Résolu
  • Assignee deleted (Jérôme BOUCHER)
Actions

Also available in: Atom PDF