<?php declare(strict_types=1);
namespace App\Controller\ContentReport;
use App\Controller\CRUD\EditController;
use App\Entity\ContentReport;
use App\Form\Type\EmptyType;
use Sindrive\EmailSenderBundle\Service\EmailSender;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\ParameterBag;
use Symfony\Component\HttpFoundation\Request;
/**
* @extends EditController<ContentReport>
*/
class VerifyController extends EditController
{
private EmailSender $emailSender;
public function __construct(EmailSender $emailSender)
{
$this->emailSender = $emailSender;
parent::__construct(
ContentReport::class,
EmptyType::class,
'none',
'content_report'
);
}
public function provideEntity(ParameterBag $parameters): object
{
if (null === $hash = $parameters->get('hash')) {
throw $this->createNotFoundException('Hash is not set.');
}
if (null === $entity = $this->getRepository()->findOneBy(['hash' => $hash, 'verified' => false])) {
throw $this->createNotFoundException('No content report found.');
}
return $entity;
}
/**
* @phpstan-param ContentReport $entity
* @return array<mixed>
*/
protected function getRedirectUrlParameters(Request $request, FormInterface $form, $entity): array
{
return [];
}
/**
* @phpstan-param ContentReport $entity
*/
protected function isValid(Request $request, FormInterface $form, &$entity): bool
{
if ($entity->getHash() !== $request->attributes->get('hash')) {
throw $this->createNotFoundException('Wrong hash provided.');
}
return true;
}
/**
* @phpstan-param ContentReport $entity
*/
protected function beforeUpdate(Request $request, FormInterface $form, $entity): void
{
$entity->setVerified(true);
}
/**
* @phpstan-param ContentReport $entity
*/
protected function afterUpdate(Request $request, FormInterface $form, $entity): void
{
$this->emailSender->sendType(new \App\Email\ContentReport($entity));
}
/**
* @phpstan-param ContentReport $entity
*/
protected function showSavedMessage($entity): void
{
$this->formSavedMessage->setEnabled(true);
$this->formSavedMessage->showMessage($entity, $this->translator->trans('verification.success_message', [], 'content_report'));
}
}