Skip to content

Commit

Permalink
Add screenshot features
Browse files Browse the repository at this point in the history
------
Co-authored-by: Adrien Roches <[email protected]>
Co-authored-by: Hubert Lenoir <[email protected]>
  • Loading branch information
StevenRenaux committed May 24, 2024
1 parent df93c4a commit 886c49c
Show file tree
Hide file tree
Showing 45 changed files with 1,577 additions and 361 deletions.
2 changes: 1 addition & 1 deletion .phpstorm.meta.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace PHPSTORM_META {
expectedArguments(
\Sensiolabs\GotenbergBundle\Builder\AbstractPdfBuilder::fileName(),
\Sensiolabs\GotenbergBundle\Builder\AbstractBuilder::fileName(),
1,
\Symfony\Component\HttpFoundation\HeaderUtils::DISPOSITION_INLINE,
\Symfony\Component\HttpFoundation\HeaderUtils::DISPOSITION_ATTACHMENT,
Expand Down
52 changes: 52 additions & 0 deletions config/builder_pdf.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

use Sensiolabs\GotenbergBundle\Builder\Pdf\HtmlPdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\Pdf\LibreOfficePdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\Pdf\MarkdownPdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\Pdf\UrlPdfBuilder;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;

return static function (ContainerConfigurator $container): void {
$services = $container->services();

$services->set('.sensiolabs_gotenberg.pdf_builder.html', HtmlPdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.pdf_builder')
;

$services->set('.sensiolabs_gotenberg.pdf_builder.url', UrlPdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
service('router')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.pdf_builder')
;

$services->set('.sensiolabs_gotenberg.pdf_builder.markdown', MarkdownPdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.pdf_builder')
;

$services->set('.sensiolabs_gotenberg.pdf_builder.office', LibreOfficePdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
])
->tag('sensiolabs_gotenberg.pdf_builder')
;
};
42 changes: 42 additions & 0 deletions config/builder_screenshot.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

use Sensiolabs\GotenbergBundle\Builder\Screenshot\HtmlScreenshotBuilder;
use Sensiolabs\GotenbergBundle\Builder\Screenshot\MarkdownScreenshotBuilder;
use Sensiolabs\GotenbergBundle\Builder\Screenshot\UrlScreenshotBuilder;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;

return static function (ContainerConfigurator $container): void {
$services = $container->services();

$services->set('.sensiolabs_gotenberg.screenshot_builder.html', HtmlScreenshotBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.screenshot_builder')
;

$services->set('.sensiolabs_gotenberg.screenshot_builder.url', UrlScreenshotBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
service('router')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.screenshot_builder')
;

$services->set('.sensiolabs_gotenberg.screenshot_builder.markdown', MarkdownScreenshotBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.screenshot_builder')
;
};
10 changes: 5 additions & 5 deletions config/debug.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php

use Sensiolabs\GotenbergBundle\DataCollector\GotenbergDataCollector;
use Sensiolabs\GotenbergBundle\Debug\TraceableGotenberg;
use Sensiolabs\GotenbergBundle\Debug\TraceableGotenbergPdf;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\DependencyInjection\Reference;
use function Symfony\Component\DependencyInjection\Loader\Configurator\abstract_arg;
Expand All @@ -11,17 +11,17 @@
return static function (ContainerConfigurator $container): void {
$services = $container->services();

$services->set('sensiolabs_gotenberg.traceable', TraceableGotenberg::class)
->decorate('sensiolabs_gotenberg')
$services->set('sensiolabs_gotenberg.traceable', TraceableGotenbergPdf::class)
->decorate('sensiolabs_gotenberg.pdf')
->args([
new Reference('.inner'),
])
;

$services->set('sensiolabs_gotenberg.data_collector', GotenbergDataCollector::class)
->args([
service('sensiolabs_gotenberg'),
tagged_locator('sensiolabs_gotenberg.builder'),
service('sensiolabs_gotenberg.pdf'),
tagged_locator('sensiolabs_gotenberg.pdf_builder'),
abstract_arg('All default options will be set through the configuration.'),
])
->tag('data_collector', ['template' => '@SensiolabsGotenberg/Collector/sensiolabs_gotenberg.html.twig', 'id' => 'sensiolabs_gotenberg'])
Expand Down
56 changes: 17 additions & 39 deletions config/services.php
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
<?php

use Sensiolabs\GotenbergBundle\Builder\HtmlPdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\LibreOfficePdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\MarkdownPdfBuilder;
use Sensiolabs\GotenbergBundle\Builder\UrlPdfBuilder;
use Sensiolabs\GotenbergBundle\Client\GotenbergClient;
use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface;
use Sensiolabs\GotenbergBundle\Formatter\AssetBaseDirFormatter;
use Sensiolabs\GotenbergBundle\Pdf\Gotenberg;
use Sensiolabs\GotenbergBundle\Pdf\GotenbergInterface;
use Sensiolabs\GotenbergBundle\Gotenberg;
use Sensiolabs\GotenbergBundle\GotenbergInterface;
use Sensiolabs\GotenbergBundle\GotenbergPdf;
use Sensiolabs\GotenbergBundle\GotenbergPdfInterface;
use Sensiolabs\GotenbergBundle\GotenbergScreenshot;
use Sensiolabs\GotenbergBundle\GotenbergScreenshotInterface;
use Sensiolabs\GotenbergBundle\Twig\GotenbergAssetExtension;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\Filesystem\Filesystem;
use function Symfony\Component\DependencyInjection\Loader\Configurator\abstract_arg;
use function Symfony\Component\DependencyInjection\Loader\Configurator\param;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service_locator;
use function Symfony\Component\DependencyInjection\Loader\Configurator\tagged_locator;

return static function (ContainerConfigurator $container): void {
Expand All @@ -40,49 +41,26 @@
->tag('twig.extension')
;

$services->set('.sensiolabs_gotenberg.builder.html', HtmlPdfBuilder::class)
->share(false)
$services->set('sensiolabs_gotenberg.pdf', GotenbergPdf::class)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
tagged_locator('sensiolabs_gotenberg.pdf_builder'),
])
->tag('sensiolabs_gotenberg.builder')
->alias(GotenbergPdfInterface::class, 'sensiolabs_gotenberg.pdf')
;

$services->set('.sensiolabs_gotenberg.builder.url', UrlPdfBuilder::class)
->share(false)
$services->set('sensiolabs_gotenberg.screenshot', GotenbergScreenshot::class)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
service('router')->nullOnInvalid(),
tagged_locator('sensiolabs_gotenberg.screenshot_builder'),
])
->tag('sensiolabs_gotenberg.builder')
;

$services->set('.sensiolabs_gotenberg.builder.markdown', MarkdownPdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
service('twig')->nullOnInvalid(),
])
->tag('sensiolabs_gotenberg.builder')
;

$services->set('.sensiolabs_gotenberg.builder.office', LibreOfficePdfBuilder::class)
->share(false)
->args([
service('sensiolabs_gotenberg.client'),
service('sensiolabs_gotenberg.asset.base_dir_formatter'),
])
->tag('sensiolabs_gotenberg.builder')
->alias(GotenbergScreenshotInterface::class, 'sensiolabs_gotenberg.screenshot')
;

$services->set('sensiolabs_gotenberg', Gotenberg::class)
->args([
tagged_locator('sensiolabs_gotenberg.builder'),
service_locator([
GotenbergPdfInterface::class => service('sensiolabs_gotenberg.pdf'),
GotenbergScreenshotInterface::class => service('sensiolabs_gotenberg.screenshot'),
]),
])
->alias(GotenbergInterface::class, 'sensiolabs_gotenberg')
;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface;
use Sensiolabs\GotenbergBundle\Enum\PaperSizeInterface;
use Sensiolabs\GotenbergBundle\Enum\PdfPart;
use Sensiolabs\GotenbergBundle\Exception\InvalidBuilderConfiguration;
use Sensiolabs\GotenbergBundle\Exception\PdfPartRenderingException;
use Sensiolabs\GotenbergBundle\Formatter\AssetBaseDirFormatter;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\File as DataPartFile;
use Twig\Environment;
Expand Down Expand Up @@ -399,7 +398,7 @@ public function failOnHttpStatusCodes(array $statusCodes): static
}

/**
* Forces Gotenberg to return a 409 Conflict response if there are
* Forces GotenbergPdf to return a 409 Conflict response if there are
* exceptions in the Chromium console. (default false).
*
* @see https://gotenberg.dev/docs/routes#console-exceptions
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface;
use Sensiolabs\GotenbergBundle\Client\PdfResponse;
use Sensiolabs\GotenbergBundle\Client\GotenbergResponse;
use Sensiolabs\GotenbergBundle\Enum\PdfPart;
use Sensiolabs\GotenbergBundle\Exception\JsonEncodingException;
use Sensiolabs\GotenbergBundle\Formatter\AssetBaseDirFormatter;
Expand Down Expand Up @@ -71,7 +71,7 @@ private function encodeData(string $key, mixed $value): array
}

/**
* The Gotenberg API endpoint path.
* The GotenbergPdf API endpoint path.
*/
abstract protected function getEndpoint(): string;

Expand All @@ -91,7 +91,7 @@ public function fileName(string $fileName, string $headerDisposition = HeaderUti
return $this;
}

public function generate(): PdfResponse
public function generate(): GotenbergResponse
{
$pdfResponse = $this->gotenbergClient->call($this->getEndpoint(), $this->getMultipartFormData());

Expand Down Expand Up @@ -190,7 +190,7 @@ protected function assertFileExtension(string $path, array $validExtensions): vo
$extension = $file->getExtension();

if (!\in_array($extension, $validExtensions, true)) {
throw new \InvalidArgumentException(sprintf('The file extension "%s" is not available in Gotenberg.', $extension));
throw new \InvalidArgumentException(sprintf('The file extension "%s" is not available in GotenbergPdf.', $extension));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Enum\PdfPart;
use Sensiolabs\GotenbergBundle\Exception\MissingRequiredFieldException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Exception\InvalidBuilderConfiguration;
use Sensiolabs\GotenbergBundle\Exception\MissingRequiredFieldException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Enum\PdfPart;
use Sensiolabs\GotenbergBundle\Exception\MissingRequiredFieldException;
Expand Down
13 changes: 13 additions & 0 deletions src/Builder/Pdf/PdfBuilderInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Client\GotenbergResponse;

interface PdfBuilderInterface
{
/**
* Generates the PDF and returns the response.
*/
public function generate(): GotenbergResponse;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace Sensiolabs\GotenbergBundle\Builder;
namespace Sensiolabs\GotenbergBundle\Builder\Pdf;

use Sensiolabs\GotenbergBundle\Client\GotenbergClientInterface;
use Sensiolabs\GotenbergBundle\Exception\MissingRequiredFieldException;
Expand Down
13 changes: 0 additions & 13 deletions src/Builder/PdfBuilderInterface.php

This file was deleted.

Loading

0 comments on commit 886c49c

Please sign in to comment.