From 18839e26ed2817571760589c7453d30dcd3fa902 Mon Sep 17 00:00:00 2001 From: Noah Lancien Date: Mon, 10 Mar 2025 12:06:51 +0100 Subject: [PATCH] fix: recipe printsheet is now downloaded --- app/Http/Controllers/Fo/RecipesController.php | 23 +++++++++++++-- app/Http/Middleware/SecureHeaders.php | 2 +- package-lock.json | 7 ----- package.json | 1 - resources/ts/fo/base/common.ts | 29 ------------------- .../views/fo/pages/recipes/recipe.blade.php | 5 ++-- 6 files changed, 25 insertions(+), 42 deletions(-) diff --git a/app/Http/Controllers/Fo/RecipesController.php b/app/Http/Controllers/Fo/RecipesController.php index fc806aa..815939c 100644 --- a/app/Http/Controllers/Fo/RecipesController.php +++ b/app/Http/Controllers/Fo/RecipesController.php @@ -105,8 +105,27 @@ class RecipesController extends Controller 'date' => \now()->format('Y-m-d') ]); - return $this->generateRecipePdf($publishedRecipe, $title) - ->stream("docrecipe.pdf"); + /** + * ! Réponse mano car en fait \Mccarlosen\LaravelMpdf\LaravelMpdf + * ! ne retourne pas vraiemnt une http response, mais provoque une 500 + * ! apres avoir header et echo dans le corps de la réponse php (Nasty trick) + * + * (From LeGauloisPro) + */ + return \response( + $this->generateRecipePdf($publishedRecipe, $title)->download($filename), + 200, + [ + 'Content-Type' => 'application/pdf', + 'Content-disposition' => "inline; filename=\"{$filename}\"", + 'Cache-Control' => 'public, must-revalidate, max-age=0', + 'Pragma' => 'public', + // * For glory + 'X-Generator' => 'mPDF', + 'Expires' => 'Sat, 26 Jul 1997 05:00:00 GMT', + 'Last-Modified' => gmdate('D, d M Y H:i:s') . ' GMT', + ] + ); } /** diff --git a/app/Http/Middleware/SecureHeaders.php b/app/Http/Middleware/SecureHeaders.php index 9bac901..c029078 100644 --- a/app/Http/Middleware/SecureHeaders.php +++ b/app/Http/Middleware/SecureHeaders.php @@ -55,7 +55,7 @@ class SecureHeaders 'https://yl.s-web.fr', 'https://api-adresse.data.gouv.fr' ]) . ';', - "img-src * data: blob:;", + "img-src 'self' data: blob:;", // ! Blob required for printjs 'frame-src ' . implode(' ', [ 'https://www.google.com/recaptcha/', diff --git a/package-lock.json b/package-lock.json index 34eafcb..3b19d8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,6 @@ "leaflet": "^1.9.4", "postcss-discard-comments": "^5.1.2", "prettier": "latest", - "print-js": "^1.6.0", "resolve-url-loader": "^5.0.0", "sass": "latest", "slugify": "^1.6.6", @@ -5654,12 +5653,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/print-js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz", - "integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==", - "dev": true - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", diff --git a/package.json b/package.json index 7e63036..21fed3a 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,6 @@ "leaflet": "^1.9.4", "postcss-discard-comments": "^5.1.2", "prettier": "latest", - "print-js": "^1.6.0", "resolve-url-loader": "^5.0.0", "sass": "latest", "slugify": "^1.6.6", diff --git a/resources/ts/fo/base/common.ts b/resources/ts/fo/base/common.ts index 2dcfa71..16f8c6c 100644 --- a/resources/ts/fo/base/common.ts +++ b/resources/ts/fo/base/common.ts @@ -1,33 +1,4 @@ -import printJS from "print-js"; - window.addEventListener("DOMContentLoaded", () => { - const eltsButtonPrintRecipe = document.getElementsByClassName( - "btn-printing" - ) as HTMLCollectionOf; - - // @ts-ignore - window.printJS = printJS; - - for (const eltButtonPrintRecipe of eltsButtonPrintRecipe) { - eltButtonPrintRecipe.addEventListener("click", function () { - const pathname = window.location.pathname; - const pathnameAsArray = pathname.split("/"); - const itemName = pathnameAsArray[pathnameAsArray.length - 1]; - setTimeout(() => { - // ! Seule solution: imprimer un pdf spécifique pour avoir le rendu souhaité. - // @ts-ignore - printJS({ - printable: - "recette/" + itemName + - "/print-recipe", - type: "pdf", - showModal: true, - modalMessage: "Récupération du document..." - }); - }); - }); - } - // * FANCYBOX ACTIVATION window.Fancybox.bind("[data-fancybox]", { // Custom options diff --git a/resources/views/fo/pages/recipes/recipe.blade.php b/resources/views/fo/pages/recipes/recipe.blade.php index 55de015..e955605 100644 --- a/resources/views/fo/pages/recipes/recipe.blade.php +++ b/resources/views/fo/pages/recipes/recipe.blade.php @@ -136,8 +136,9 @@ {!! clean($recipeModel->preparation) !!}
- {{ __('Imprimer') }} + {{ __('Imprimer') }}