Configurable PDF exports (#5641)

This commit is contained in:
Kevin Papst
2025-09-23 18:32:31 +02:00
committed by GitHub
parent 5d3e46cce2
commit 6d78c6ba36
107 changed files with 2428 additions and 1575 deletions

View File

@@ -10,33 +10,33 @@
namespace App\Export\Renderer;
use App\Export\Base\CsvRenderer;
use App\Export\Base\SpreadsheetRenderer;
use App\Export\ColumnConverter;
use App\Export\DefaultTemplate;
use App\Export\TemplateInterface;
use Psr\EventDispatcher\EventDispatcherInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Contracts\Translation\TranslatorInterface;
final class CsvRendererFactory
{
public function __construct(
private readonly EventDispatcherInterface $dispatcher,
private readonly Security $voter,
private readonly ColumnConverter $converter,
private readonly EventDispatcherInterface $eventDispatcher,
private readonly TranslatorInterface $translator,
private readonly ?LoggerInterface $logger = null,
) {
}
public function create(TemplateInterface $template): CsvRenderer
{
$renderer = new SpreadsheetRenderer($this->dispatcher, $this->voter, $this->logger);
$renderer->setTemplate($template);
$renderer = new CsvRenderer($renderer, $this->translator);
$renderer->setId($template->getId());
$renderer->setTitle($template->getTitle());
$renderer->setLocale($template->getLocale());
$renderer = new CsvRenderer($this->converter, $this->translator, $template);
$renderer->setInternal(true);
return $renderer;
}
public function createDefault(): CsvRenderer
{
$template = new DefaultTemplate($this->eventDispatcher, 'csv');
return new CsvRenderer($this->converter, $this->translator, $template);
}
}

View File

@@ -27,10 +27,14 @@ final class HtmlRendererFactory
public function create(string $id, string $template): HtmlRenderer
{
$renderer = new HtmlRenderer($this->twig, $this->dispatcher, $this->projectStatisticService, $this->activityStatisticService);
$renderer->setId($id);
$renderer->setTemplate($template);
return $renderer;
return new HtmlRenderer(
$this->twig,
$this->dispatcher,
$this->projectStatisticService,
$this->activityStatisticService,
$id,
'print',
$template
);
}
}

View File

@@ -10,8 +10,12 @@
namespace App\Export\Renderer;
use App\Export\Base\PDFRenderer;
use App\Export\Base\PdfTemplateRenderer;
use App\Export\ColumnConverter;
use App\Export\Template;
use App\Pdf\HtmlToPdfConverter;
use App\Project\ProjectStatisticService;
use Symfony\Component\Translation\LocaleSwitcher;
use Twig\Environment;
final class PdfRendererFactory
@@ -19,17 +23,33 @@ final class PdfRendererFactory
public function __construct(
private readonly Environment $twig,
private readonly HtmlToPdfConverter $converter,
private readonly ProjectStatisticService $projectStatisticService
private readonly ProjectStatisticService $projectStatisticService,
private readonly LocaleSwitcher $localeSwitcher,
private readonly ColumnConverter $columnConverter
) {
}
public function create(string $id, string $template): PDFRenderer
public function create(string $id, string $template, ?string $title = null): PDFRenderer
{
$renderer = new PDFRenderer($this->twig, $this->converter, $this->projectStatisticService);
$renderer->setId($id);
$renderer->setTitle($id);
$renderer->setTemplate($template);
return new PDFRenderer(
$this->twig,
$this->converter,
$this->projectStatisticService,
$id,
$title ?? $id,
$template,
);
}
return $renderer;
public function createFromTemplate(Template $template): PdfTemplateRenderer
{
return new PdfTemplateRenderer(
$this->twig,
$this->converter,
$this->projectStatisticService,
$this->columnConverter,
$this->localeSwitcher,
$template
);
}
}

View File

@@ -9,33 +9,33 @@
namespace App\Export\Renderer;
use App\Export\Base\SpreadsheetRenderer;
use App\Export\Base\XlsxRenderer;
use App\Export\ColumnConverter;
use App\Export\DefaultTemplate;
use App\Export\TemplateInterface;
use Psr\EventDispatcher\EventDispatcherInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Contracts\Translation\TranslatorInterface;
final class XlsxRendererFactory
{
public function __construct(
private readonly EventDispatcherInterface $dispatcher,
private readonly Security $voter,
private readonly ColumnConverter $converter,
private readonly EventDispatcherInterface $eventDispatcher,
private readonly TranslatorInterface $translator,
private readonly ?LoggerInterface $logger = null,
) {
}
public function createDefault(): XlsxRenderer
{
$template = new DefaultTemplate($this->eventDispatcher, 'xlsx');
return new XlsxRenderer($this->converter, $this->translator, $template);
}
public function create(TemplateInterface $template): XlsxRenderer
{
$renderer = new SpreadsheetRenderer($this->dispatcher, $this->voter, $this->logger);
$renderer->setTemplate($template);
$renderer = new XlsxRenderer($renderer, $this->translator);
$renderer->setId($template->getId());
$renderer->setTitle($template->getTitle());
$renderer->setLocale($template->getLocale());
$renderer = new XlsxRenderer($this->converter, $this->translator, $template);
$renderer->setInternal(true);
return $renderer;
}