From a9ab7b4b3eb1d9477d44b798e48423f6c84ffb53 Mon Sep 17 00:00:00 2001 From: Dumazeau Date: Fri, 16 Feb 2024 11:28:19 +0100 Subject: [PATCH] Introduce ForcedTemplateSlug logic --- src/Domain/Internal/InternalPdfManager.php | 4 ++-- .../Model/PdfForcedTemplateSlugModelInterface.php | 12 ++++++++++++ src/Domain/Pdf/AbstractPdf.php | 5 +++++ src/Domain/PdfManager.php | 9 +++++++-- 4 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 src/Domain/Model/PdfForcedTemplateSlugModelInterface.php diff --git a/src/Domain/Internal/InternalPdfManager.php b/src/Domain/Internal/InternalPdfManager.php index d4dbec7..e7f5ae1 100644 --- a/src/Domain/Internal/InternalPdfManager.php +++ b/src/Domain/Internal/InternalPdfManager.php @@ -16,10 +16,10 @@ final class InternalPdfManager #[Required] public PdfTemplateFetcher $pdfTemplateFetcher; - public function getCurrentPdfService(string $slug): ?AbstractPdf + public function getCurrentPdfService(string $slug, ?string $forcedTemplateSlug = null): ?AbstractPdf { $services = $this->getAllPdfServicesFor($slug); - $template = ($this->pdfTemplateFetcher)($slug); + $template = $forcedTemplateSlug ?? ($this->pdfTemplateFetcher)($slug); foreach ($services as $service) { if ($service->supportTemplate($template)) { diff --git a/src/Domain/Model/PdfForcedTemplateSlugModelInterface.php b/src/Domain/Model/PdfForcedTemplateSlugModelInterface.php new file mode 100644 index 0000000..65112cf --- /dev/null +++ b/src/Domain/Model/PdfForcedTemplateSlugModelInterface.php @@ -0,0 +1,12 @@ +data instanceof PdfForcedTemplateSlugModelInterface && $this->data->getForcedTemplateSlug() !== null) { + $this->data->getForcedTemplateSlug(); + } + return ($this->pdfTemplateFetcher)($this->getPdfSlug()); } } diff --git a/src/Domain/PdfManager.php b/src/Domain/PdfManager.php index e3ac11c..7cc10ca 100644 --- a/src/Domain/PdfManager.php +++ b/src/Domain/PdfManager.php @@ -6,6 +6,7 @@ use RichId\PdfTemplateBundle\Domain\Exception\PdfNotFoundException; use RichId\PdfTemplateBundle\Domain\Internal\InternalPdfManager; +use RichId\PdfTemplateBundle\Domain\Model\PdfForcedTemplateSlugModelInterface; use RichId\PdfTemplateBundle\Domain\Model\PdfModelInterface; use Symfony\Contracts\Service\Attribute\Required; @@ -14,9 +15,13 @@ final class PdfManager #[Required] public InternalPdfManager $internalPdfanager; - public function generatePdf(string $slug, ?PdfModelInterface $data = null): string + public function generatePdf(string $slug, ?PdfModelInterface $data = null, ?string $forcedTemplateSlug = null): string { - $service = $this->internalPdfanager->getCurrentPdfService($slug); + if ($data instanceof PdfForcedTemplateSlugModelInterface) { + $data->setForcedTemplateSlug($forcedTemplateSlug); + } + + $service = $this->internalPdfanager->getCurrentPdfService($slug, $forcedTemplateSlug); if ($service === null) { throw new PdfNotFoundException($slug);