<?php
namespace App\EventSubscriber;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Entity\TranscriptOfRecords;
use App\Pdf\Pdf;
use JetBrains\PhpStorm\ArrayShape;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class TranscriptOfRecordsWriteSubscriber implements EventSubscriberInterface
{
private Pdf $pdf;
public function __construct(
Pdf $pdf
) {
$this->pdf = $pdf;
}
#[ArrayShape([KernelEvents::VIEW => 'array'])]
public static function getSubscribedEvents(): array
{
return [
KernelEvents::VIEW => [
'generateToRPdf', EventPriorities::PRE_WRITE,
],
];
}
public function generateToRPdf(ViewEvent $viewEvent): void
{
$entity = $viewEvent->getControllerResult();
$method = $viewEvent->getRequest()->getMethod();
if (
!$entity instanceof TranscriptOfRecords
|| !in_array(
$method,
[
Request::METHOD_POST,
Request::METHOD_PATCH,
Request::METHOD_PUT,
]
)
) {
return;
}
$pdfName = 'Transcript of Records - '.$entity->getMobility()->getId().'.pdf';
$pdfPathSubDirectory = 'transcript_of_records';
// Generate PDF according to ToR's data
$relativePathWithName = $this->pdf->generateFromHtml(
$pdfName,
$pdfPathSubDirectory,
'pdf/transcript_of_records_pdf.html.twig',
[
'transcriptOfRecords' => $entity,
]
);
// Save PDF url to ToR if changed
$entity->setPdf($relativePathWithName);
// Generate Credits Recognition PDF
$pdfNameCreditsRecognition = 'Credits transfer sheet - '.$entity->getMobility()->getId().'.pdf';
$pdfPathSubDirectoryCreditsRecognition = 'credits_recognition';
$relativePathWithNameCreditsRecognition = $this->pdf->generateFromHtml(
$pdfNameCreditsRecognition,
$pdfPathSubDirectoryCreditsRecognition,
'pdf/credits_recognition_pdf.html.twig',
[
'transcriptOfRecords' => $entity,
]
);
// Save PDF url to ToR if changed
$entity->getMobility()->setCreditsRecognitionPdf($relativePathWithNameCreditsRecognition);
}
}