Skip to content
Snippets Groups Projects
Commit 3af35d2f authored by Arnaud Pauget's avatar Arnaud Pauget
Browse files

Merge branch 'fix/seda2_transferSource' into 'master'

Changement du type d'exception levé pour éviter le blocage du workflow dans...

See merge request !1
parents 2ddbd68e 829bf50e
Branches master
No related tags found
1 merge request!1Changement du type d'exception levé pour éviter le blocage du workflow dans...
......@@ -32,7 +32,6 @@ class MaarchREST extends SAEConnecteur {
$tmpFile = new TmpFile();
$bordereau_file = $tmpFile->create();
file_put_contents($bordereau_file, $bordereauSEDA);
try {
$this->callSedaMessage($bordereau_file, $archivePath);
} catch (Exception $e){
......@@ -55,11 +54,88 @@ class MaarchREST extends SAEConnecteur {
public function callSedaMessage($seda_message_path, $attachments_path){
$curlWrapper = $this->curlWrapperFactory->getInstance();
$bodyPackage = $this->createObjectPackage($seda_message_path, $attachments_path);
$bodyPackage = $this->createPackageSource($seda_message_path, $attachments_path);
$curlWrapper->setJsonPostData($bodyPackage);
return $this->getWS('/medona/archiveTransfer', "application/json", $curlWrapper);
return $this->getWS('/medona/archiveTransfer/source', "application/json", $curlWrapper);
}
public function createPackageSource($seda_message_path, $attachments_path) {
$tmpFolder = dirname($attachments_path);
mkdir($tmpFolder."/tmpFiles");
try {
$phar = new PharData($attachments_path);
$phar->extractTo($tmpFolder."/tmpFiles", null, true);
} catch (Exception $e) {
return ($e);
}
copy($seda_message_path, $tmpFolder."/tmpFiles/bordereau.xml");
$directoryToZip = $tmpFolder."/tmpFiles"; // Path to the directory to be zipped
$zipFilePath = $tmpFolder."/archive.zip"; // Path where the ZIP file will be saved
if (!$this->zipDirectory($directoryToZip, $zipFilePath)) {
echo "Error creating ZIP archive.";
}
$sourcePackage = [];
$package = base64_encode(file_get_contents($zipFilePath));
$sourcePackage['package'] = new stdClass();
$sourcePackage['package']->data = $package;
$sourcePackage['package']->encoding = "base64";
$sourcePackage['params'] = [];
$sourcePackage['params']['manifest'] = "bordereau.xml";
$sourcePackage['connector'] = "seda2zip";
unset($zipFilePath);
return $sourcePackage;
}
public function zipDirectory($sourcePath, $zipPath) {
$zip = new ZipArchive();
if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
// Normalize the source path to ensure proper directory traversal
$sourcePath = realpath($sourcePath);
if ($sourcePath === false) {
// Could not determine the real path, possibly because the source directory does not exist
return false;
}
// Create recursive directory iterator
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($sourcePath, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($files as $file) {
$fileRealPath = $file->getRealPath();
if ($fileRealPath === false) {
// Continue upon realpath errors, but this could indicate a deeper problem
continue;
}
// Preserve folder structure in the ZIP archive
$relativePath = substr($fileRealPath, strlen($sourcePath) + 1);
if ($file->isDir()) {
// Add empty directory into the archive
$zip->addEmptyDir($relativePath);
} else {
// Add file into the archive
$zip->addFile($fileRealPath, $relativePath);
}
}
// Close the ZIP archive
$zip->close();
return true; // Success
} else {
return false; // Failure
}
}
public function createObjectPackage($seda_message_path, $attachments_path) {
......@@ -79,21 +155,45 @@ class MaarchREST extends SAEConnecteur {
$bodyPackage['format'] = "seda";
$bodyPackage['attachments'] = [];
foreach(scandir($tmpFolder."/tmpFiles") as $filename) {
if ($filename != ".." && $filename != ".") {
$attachment = new stdClass();
$attachment->filename = $filename;
$attachment->data = base64_encode(file_get_contents($tmpFolder."/tmpFiles/".$filename));
unlink($tmpFolder."/tmpFiles/".$filename);
array_push($bodyPackage['attachments'], $attachment);
}
}
// foreach(scandir($tmpFolder."/tmpFiles") as $filename) {
// if ($filename != ".." && $filename != ".") {
// $attachment = new stdClass();
// $attachment->filename = $filename;
// $attachment->data = base64_encode(file_get_contents($tmpFolder."/tmpFiles/".$filename));
// unlink($tmpFolder."/tmpFiles/".$filename);
// array_push($bodyPackage['attachments'], $attachment);
// }
// }
// Chemin de base où les fichiers et dossiers sont stockés
$baseDirectory = $tmpFolder . "/tmpFiles";
$this->addFilesFromDirectory($baseDirectory, $bodyPackage);
rmdir($tmpFolder."/tmpFiles");
return $bodyPackage;
}
public function addFilesFromDirectory($directory, &$bodyPackage, $root="") {
foreach (scandir($directory) as $filename) {
if ($filename != ".." && $filename != ".") {
$filePath = $directory . "/" . $filename;
if (is_dir($filePath)) {
// Si c'est un dossier, appel récursif pour traiter les fichiers dans ce dossier
$this->addFilesFromDirectory($filePath, $bodyPackage, $root . $filename . "/");
} else {
// Traiter le fichier
$attachment = new stdClass();
$attachment->filename = $root . $filename;
$attachment->data = base64_encode(file_get_contents($filePath));
unlink($filePath); // Supprimer le fichier après traitement
array_push($bodyPackage['attachments'], $attachment);
}
}
}
}
public function getErrorString($number){
return "Erreur non identifié";
}
......@@ -104,7 +204,7 @@ class MaarchREST extends SAEConnecteur {
* @throws Exception
*/
public function getAcuseReception($id_transfert) {
return $this->getAck($id_transfert, $this->originatingAgency);
return $this->getAck($id_transfert, "test");
}
/**
......@@ -258,6 +358,7 @@ class MaarchREST extends SAEConnecteur {
$curlWrapper->dontVerifySSLCACert();
$result = $curlWrapper->get($this->url.$url);
if (! $result){
throw new Exception($curlWrapper->getLastError());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment