diff --git a/src/app/resource/controllers/FolderPrintController.php b/src/app/resource/controllers/FolderPrintController.php index 5a44b2b0f4305c7de55c88ea59cc6e30b34654bc..5f471160e831204d05f6285d3dab1e280dd05be2 100755 --- a/src/app/resource/controllers/FolderPrintController.php +++ b/src/app/resource/controllers/FolderPrintController.php @@ -35,6 +35,7 @@ use Slim\Http\Request; use Slim\Http\Response; use SrcCore\models\CoreConfigModel; use SrcCore\models\ValidatorModel; +use SrcCore\models\TextFormatModel; use SrcCore\controllers\LogsController; use Status\models\StatusModel; use User\models\UserModel; @@ -121,13 +122,16 @@ class FolderPrintController if (!empty($resource['document'])) { $document = ResModel::getById([ - 'select' => ['res_id', 'docserver_id', 'path', 'filename', 'fingerprint', 'category_id', 'alt_identifier'], + 'select' => ['res_id', 'docserver_id', 'path', 'filename', 'fingerprint', 'category_id', 'alt_identifier', 'subject'], 'resId' => $resource['resId'] ]); if (empty($document)) { return $response->withStatus(400)->withJson(['errors' => 'Document does not exist']); } + $resource['altIdentifier'] = $document['alt_identifier']; + $resource['subject'] = $document['subject']; + if (empty($document['filename'])) { LogsController::add([ 'isTech' => true, @@ -556,11 +560,15 @@ class FolderPrintController } if (!empty($documentPaths)) { - $filePathOnTmp = $tmpDir . 'maarch_res' . $resource['resId'] . '.pdf'; + $filePathOnTmp = trim($tmpDir . TextFormatModel::formatFilename([ + 'filename' => $resource['altIdentifier'] . '_' . $resource['subject'], + 'maxLength' => 100 + ])) . '.pdf'; + $filePathOnTmp = str_replace('//', '/', $filePathOnTmp); if (file_exists($filePathOnTmp)) { unlink($filePathOnTmp); } - $command = "pdfunite " . implode(" ", $documentPaths) . ' ' . $filePathOnTmp; + $command = "pdfunite '" . implode("' '", $documentPaths) . "' '" . $filePathOnTmp . "'"; exec($command . ' 2>&1', $output, $return); @@ -582,14 +590,19 @@ class FolderPrintController $response = $response->withAddedHeader('Content-Disposition', "inline; filename=maarch.pdf"); return $response->withHeader('Content-Type', $mimeType); } else { - $filePathOnTmp = str_replace('//', '/', $tmpDir . 'folderPrint.zip'); + $filePathOnTmp = str_replace('//', '/', $tmpDir) . 'folderPrint.zip'; if (file_exists($filePathOnTmp)) { unlink($filePathOnTmp); } - // zip -j: store files as their basenames ignoring tmpDir (see man zip) - $command = 'zip -j ' . $filePathOnTmp . ' ' . implode(' ', $folderPrintPaths); - exec($command . ' 2>&1', $output, $return); + $zip = new \ZipArchive; + if ($zip->open($filePathOnTmp, \ZipArchive::CREATE) !== TRUE) { + return $response->withStatus(500)->withJson(['errors' => 'Merged ZIP file not created']); + } + foreach ($folderPrintPaths as $folderPrintPath) { + $zip->addFile($folderPrintPath, basename($folderPrintPath)); + } + $zip->close(); if (!file_exists($filePathOnTmp)) { return $response->withStatus(500)->withJson(['errors' => 'Merged ZIP file not created']);