From 732af50492d65b6bf8ae0de97c59cc6e2aae2469 Mon Sep 17 00:00:00 2001 From: Adrien Roches Date: Mon, 17 Jun 2024 13:04:33 +0200 Subject: [PATCH 1/2] [UPDATE] Add default header / footer through configuration + allow BackedEnums --- .../Pdf/AbstractChromiumPdfBuilder.php | 6 +++-- src/Builder/Pdf/AbstractPdfBuilder.php | 12 ++++++--- src/Builder/Pdf/LibreOfficePdfBuilder.php | 2 +- .../AbstractChromiumScreenshotBuilder.php | 2 +- .../Screenshot/AbstractScreenshotBuilder.php | 12 ++++++--- src/DependencyInjection/Configuration.php | 26 +++++++++++++++++++ tests/Builder/Pdf/AbstractPdfBuilderTest.php | 6 +++++ .../AbstractScreenshotBuilderTest.php | 6 +++++ tests/{Enum => Enumeration}/PaperSizeTest.php | 2 +- tests/{Enum => Enumeration}/UnitTest.php | 2 +- 10 files changed, 64 insertions(+), 12 deletions(-) rename tests/{Enum => Enumeration}/PaperSizeTest.php (93%) rename tests/{Enum => Enumeration}/UnitTest.php (94%) diff --git a/src/Builder/Pdf/AbstractChromiumPdfBuilder.php b/src/Builder/Pdf/AbstractChromiumPdfBuilder.php index 5d0989f..83fcaee 100644 --- a/src/Builder/Pdf/AbstractChromiumPdfBuilder.php +++ b/src/Builder/Pdf/AbstractChromiumPdfBuilder.php @@ -317,7 +317,7 @@ public function waitForExpression(string $expression): static */ public function emulatedMediaType(EmulatedMediaType $mediaType): static { - $this->formFields['emulatedMediaType'] = $mediaType->value; + $this->formFields['emulatedMediaType'] = $mediaType; return $this; } @@ -445,7 +445,7 @@ public function pdfFormat(PdfFormat|null $format = null): static return $this; } - $this->formFields['pdfa'] = $format->value; + $this->formFields['pdfa'] = $format; return $this; } @@ -526,6 +526,8 @@ protected function withRenderedPart(Part $pdfPart, string $template, array $cont protected function addConfiguration(string $configurationName, mixed $value): void { match ($configurationName) { + 'header' => $this->header(...$value), + 'footer' => $this->footer(...$value), 'single_page' => $this->singlePage($value), 'pdf_format' => $this->pdfFormat(PdfFormat::from($value)), 'pdf_universal_access' => $this->pdfUniversalAccess($value), diff --git a/src/Builder/Pdf/AbstractPdfBuilder.php b/src/Builder/Pdf/AbstractPdfBuilder.php index 724f4a3..ca706dc 100644 --- a/src/Builder/Pdf/AbstractPdfBuilder.php +++ b/src/Builder/Pdf/AbstractPdfBuilder.php @@ -26,7 +26,7 @@ abstract class AbstractPdfBuilder implements PdfBuilderInterface private string $headerDisposition = HeaderUtils::DISPOSITION_INLINE; /** - * @var array|non-empty-string|int|float|bool|DataPart>)> + * @var array|non-empty-string|int|float|bool|\BackedEnum|DataPart>)> */ private array $normalizers; @@ -157,11 +157,11 @@ protected function addNormalizer(string $key, \Closure $normalizer): void } /** - * @param array|string|int|float|bool|DataPart $value + * @param array|string|int|float|bool|\BackedEnum|DataPart $value * * @return list> */ - private function addToMultipart(string $key, array|string|int|float|bool|DataPart $value, \Closure|null $preCallback = null): array + private function addToMultipart(string $key, array|string|int|float|bool|\BackedEnum|DataPart $value, \Closure|null $preCallback = null): array { if (null !== $preCallback) { $result = []; @@ -195,6 +195,12 @@ private function addToMultipart(string $key, array|string|int|float|bool|DataPar ]]; } + if ($value instanceof \BackedEnum) { + return [[ + $key => (string) $value->value, + ]]; + } + if (\is_array($value)) { $result = []; foreach ($value as $nestedValue) { diff --git a/src/Builder/Pdf/LibreOfficePdfBuilder.php b/src/Builder/Pdf/LibreOfficePdfBuilder.php index c158b95..ec15a80 100644 --- a/src/Builder/Pdf/LibreOfficePdfBuilder.php +++ b/src/Builder/Pdf/LibreOfficePdfBuilder.php @@ -86,7 +86,7 @@ public function singlePageSheets(bool $bool = true): self */ public function pdfFormat(PdfFormat $format): self { - $this->formFields['pdfa'] = $format->value; + $this->formFields['pdfa'] = $format; return $this; } diff --git a/src/Builder/Screenshot/AbstractChromiumScreenshotBuilder.php b/src/Builder/Screenshot/AbstractChromiumScreenshotBuilder.php index d21f6e7..bbe52a0 100644 --- a/src/Builder/Screenshot/AbstractChromiumScreenshotBuilder.php +++ b/src/Builder/Screenshot/AbstractChromiumScreenshotBuilder.php @@ -79,7 +79,7 @@ public function clip(bool $bool = true): static */ public function format(ScreenshotFormat $format): static { - $this->formFields['format'] = $format->value; + $this->formFields['format'] = $format; return $this; } diff --git a/src/Builder/Screenshot/AbstractScreenshotBuilder.php b/src/Builder/Screenshot/AbstractScreenshotBuilder.php index 316be36..b5ace6b 100644 --- a/src/Builder/Screenshot/AbstractScreenshotBuilder.php +++ b/src/Builder/Screenshot/AbstractScreenshotBuilder.php @@ -26,7 +26,7 @@ abstract class AbstractScreenshotBuilder implements ScreenshotBuilderInterface private string $headerDisposition = HeaderUtils::DISPOSITION_INLINE; /** - * @var array|non-empty-string|int|float|bool|DataPart>)> + * @var array|non-empty-string|int|float|bool|\BackedEnum|DataPart>)> */ private array $normalizers; @@ -145,11 +145,11 @@ protected function addNormalizer(string $key, \Closure $normalizer): void } /** - * @param array|string|int|float|bool|DataPart $value + * @param array|string|int|float|bool|\BackedEnum|DataPart $value * * @return list> */ - private function addToMultipart(string $key, array|string|int|float|bool|DataPart $value, \Closure|null $preCallback = null): array + private function addToMultipart(string $key, array|string|int|float|bool|\BackedEnum|DataPart $value, \Closure|null $preCallback = null): array { if (null !== $preCallback) { $result = []; @@ -183,6 +183,12 @@ private function addToMultipart(string $key, array|string|int|float|bool|DataPar ]]; } + if ($value instanceof \BackedEnum) { + return [[ + $key => (string) $value->value, + ]]; + } + if (\is_array($value)) { $result = []; foreach ($value as $nestedValue) { diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index fc9baa6..26f9d34 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -151,6 +151,32 @@ private function addChromiumPdfOptionsNode(ArrayNodeDefinition $parent): void { $parent ->children() + ->arrayNode('header') + ->info('Add default header to the builder.') + ->children() + ->scalarNode('template') + ->info('Default header twig template to apply.') + ->defaultNull() + ->end() + ->scalarNode('context') + ->info('Default context for header twig template.') + ->defaultValue([]) + ->end() + ->end() + ->end() + ->arrayNode('footer') + ->info('Add default footer to the builder.') + ->children() + ->scalarNode('template') + ->info('Default footer twig template to apply.') + ->defaultNull() + ->end() + ->scalarNode('context') + ->info('Default context for footer twig template.') + ->defaultValue([]) + ->end() + ->end() + ->end() ->booleanNode('single_page') ->info('Define whether to print the entire content in one single page. - default false. https://gotenberg.dev/docs/routes#page-properties-chromium') ->defaultNull() diff --git a/tests/Builder/Pdf/AbstractPdfBuilderTest.php b/tests/Builder/Pdf/AbstractPdfBuilderTest.php index 27cc406..86d3c92 100644 --- a/tests/Builder/Pdf/AbstractPdfBuilderTest.php +++ b/tests/Builder/Pdf/AbstractPdfBuilderTest.php @@ -12,6 +12,7 @@ use Sensiolabs\GotenbergBundle\Client\GotenbergClient; use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface; use Sensiolabs\GotenbergBundle\Client\GotenbergResponse; +use Sensiolabs\GotenbergBundle\Enumeration\PdfFormat; use Sensiolabs\GotenbergBundle\Formatter\AssetBaseDirFormatter; use Sensiolabs\GotenbergBundle\Tests\Builder\AbstractBuilderTestCase; use Symfony\Component\HttpClient\MockHttpClient; @@ -81,6 +82,11 @@ public static function formFieldsNormalizerProvider(): \Generator ['metadata' => ['Author' => 'SensioLabs']], 'metadata', '{"Author":"SensioLabs"}', ]; + + yield 'using BackedEnum' => [ + ['backed_enum' => PdfFormat::Pdf3b], + 'backed_enum', 'PDF/A-3b', + ]; } #[DataProvider('formFieldsNormalizerProvider')] diff --git a/tests/Builder/Screenshot/AbstractScreenshotBuilderTest.php b/tests/Builder/Screenshot/AbstractScreenshotBuilderTest.php index 5a831da..be30ed0 100644 --- a/tests/Builder/Screenshot/AbstractScreenshotBuilderTest.php +++ b/tests/Builder/Screenshot/AbstractScreenshotBuilderTest.php @@ -12,6 +12,7 @@ use Sensiolabs\GotenbergBundle\Client\GotenbergClient; use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface; use Sensiolabs\GotenbergBundle\Client\GotenbergResponse; +use Sensiolabs\GotenbergBundle\Enumeration\PdfFormat; use Sensiolabs\GotenbergBundle\Formatter\AssetBaseDirFormatter; use Sensiolabs\GotenbergBundle\Tests\Builder\AbstractBuilderTestCase; use Symfony\Component\HttpClient\MockHttpClient; @@ -66,6 +67,11 @@ public static function formFieldsNormalizerProvider(): \Generator ['cookies' => ['MyCookie' => ['name' => 'MyCookieName', 'value' => 'Chocolate', 'domain' => 'sensiolabs.com']]], 'cookies', '[{"name":"MyCookieName","value":"Chocolate","domain":"sensiolabs.com"}]', ]; + + yield 'using BackedEnum' => [ + ['backed_enum' => PdfFormat::Pdf3b], + 'backed_enum', 'PDF/A-3b', + ]; } #[DataProvider('formFieldsNormalizerProvider')] diff --git a/tests/Enum/PaperSizeTest.php b/tests/Enumeration/PaperSizeTest.php similarity index 93% rename from tests/Enum/PaperSizeTest.php rename to tests/Enumeration/PaperSizeTest.php index 04efb75..4912a11 100644 --- a/tests/Enum/PaperSizeTest.php +++ b/tests/Enumeration/PaperSizeTest.php @@ -1,6 +1,6 @@ Date: Mon, 17 Jun 2024 13:07:44 +0200 Subject: [PATCH 2/2] [UPDATE] Allow Stringable --- src/Builder/Pdf/AbstractPdfBuilder.php | 12 +++++++++--- src/Builder/Screenshot/AbstractScreenshotBuilder.php | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Builder/Pdf/AbstractPdfBuilder.php b/src/Builder/Pdf/AbstractPdfBuilder.php index ca706dc..899385b 100644 --- a/src/Builder/Pdf/AbstractPdfBuilder.php +++ b/src/Builder/Pdf/AbstractPdfBuilder.php @@ -26,7 +26,7 @@ abstract class AbstractPdfBuilder implements PdfBuilderInterface private string $headerDisposition = HeaderUtils::DISPOSITION_INLINE; /** - * @var array|non-empty-string|int|float|bool|\BackedEnum|DataPart>)> + * @var array|non-empty-string|\Stringable|int|float|bool|\BackedEnum|DataPart>)> */ private array $normalizers; @@ -157,11 +157,11 @@ protected function addNormalizer(string $key, \Closure $normalizer): void } /** - * @param array|string|int|float|bool|\BackedEnum|DataPart $value + * @param array|string|\Stringable|int|float|bool|\BackedEnum|DataPart $value * * @return list> */ - private function addToMultipart(string $key, array|string|int|float|bool|\BackedEnum|DataPart $value, \Closure|null $preCallback = null): array + private function addToMultipart(string $key, array|string|\Stringable|int|float|bool|\BackedEnum|DataPart $value, \Closure|null $preCallback = null): array { if (null !== $preCallback) { $result = []; @@ -201,6 +201,12 @@ private function addToMultipart(string $key, array|string|int|float|bool|\Backed ]]; } + if ($value instanceof \Stringable) { + return [[ + $key => (string) $value, + ]]; + } + if (\is_array($value)) { $result = []; foreach ($value as $nestedValue) { diff --git a/src/Builder/Screenshot/AbstractScreenshotBuilder.php b/src/Builder/Screenshot/AbstractScreenshotBuilder.php index b5ace6b..7b44497 100644 --- a/src/Builder/Screenshot/AbstractScreenshotBuilder.php +++ b/src/Builder/Screenshot/AbstractScreenshotBuilder.php @@ -26,7 +26,7 @@ abstract class AbstractScreenshotBuilder implements ScreenshotBuilderInterface private string $headerDisposition = HeaderUtils::DISPOSITION_INLINE; /** - * @var array|non-empty-string|int|float|bool|\BackedEnum|DataPart>)> + * @var array|non-empty-string|\Stringable|int|float|bool|\BackedEnum|DataPart>)> */ private array $normalizers; @@ -145,11 +145,11 @@ protected function addNormalizer(string $key, \Closure $normalizer): void } /** - * @param array|string|int|float|bool|\BackedEnum|DataPart $value + * @param array|string|\Stringable|int|float|bool|\BackedEnum|DataPart $value * * @return list> */ - private function addToMultipart(string $key, array|string|int|float|bool|\BackedEnum|DataPart $value, \Closure|null $preCallback = null): array + private function addToMultipart(string $key, array|string|\Stringable|int|float|bool|\BackedEnum|DataPart $value, \Closure|null $preCallback = null): array { if (null !== $preCallback) { $result = []; @@ -189,6 +189,12 @@ private function addToMultipart(string $key, array|string|int|float|bool|\Backed ]]; } + if ($value instanceof \Stringable) { + return [[ + $key => (string) $value, + ]]; + } + if (\is_array($value)) { $result = []; foreach ($value as $nestedValue) {