src/Infrastructure/Controller/Website/Istanza/PrivacyController.php line 20

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Infrastructure\Controller\Website\Istanza;
  4. use App\Application\Security\IstanzaCheckerInterface;
  5. use App\Infrastructure\Controller\Website\BaseWebsiteControllerInterface;
  6. use App\Infrastructure\Factory\Pratica\PraticaInformativaFactoryInterface;
  7. use App\Infrastructure\Provider\ConfigurazioneProviderInterface;
  8. use App\Infrastructure\Repository\Pratica\PraticaRepositoryInterface;
  9. use RuntimeException;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\DependencyInjection\Attribute\Autowire;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. final class PrivacyController extends AbstractController implements BaseWebsiteControllerInterface
  17. {
  18.     public function __construct(
  19.         private readonly PraticaRepositoryInterface         $praticaRepository,
  20.         #[Autowire(service'App\Infrastructure\Provider\ConfigurazioneGeneraleProvider')]
  21.         private readonly ConfigurazioneProviderInterface    $configurazioneProvider,
  22.         private readonly IstanzaCheckerInterface            $istanzaChecker,
  23.         private readonly PraticaInformativaFactoryInterface $praticaInformativaFactory,
  24.     ) {
  25.     }
  26.     /**
  27.      * STEP 1 - ACCETTAZIONE PRIVACY
  28.      */
  29.     #[Route('/istanza/{slug}/{id}/privacy'name'app_website_istanza_new_privacy'methods: ['GET''POST'])]
  30.     public function __invoke(Request $requestint $id): Response
  31.     {
  32.         $pratica $this->praticaRepository->getById($id);
  33.         if (!$pratica) {
  34.             throw new NotFoundHttpException();
  35.         }
  36.         if (!$this->istanzaChecker->canContinueActiveIstanza($pratica)) {
  37.             throw new RuntimeException('Istanza non più attiva, non è possibile continuare');
  38.         }
  39.         if (!$this->istanzaChecker->canContinueIstanzaEntryStep($pratica)) {
  40.             throw new RuntimeException('Pratica già inviata, non si può modificare');
  41.         }
  42.         $istanza $pratica->getIstanza() ?? throw new RuntimeException('Istanza non trovata');
  43.         if ($request->isMethod('POST')) {
  44.             // @TODO: creare validazione backend
  45.             // Al momento ipotizziamo che l'utente abbia scaricato il PDF se obbligatorio (no check su input form per ora)
  46.             $istanzaInformativeList $istanza->getInformativeList();
  47.             foreach ($istanzaInformativeList as $istanzaInformativa) {
  48.                 $informativa $istanzaInformativa->getInformativa();
  49.                 $rawData = [
  50.                     'informativa' => $informativa?->__toArray(),
  51.                     'informativa_istanza' => $istanzaInformativa->__toArray()
  52.                 ];
  53.                 $praticaInformativa $this->praticaInformativaFactory->create();
  54.                 $praticaInformativa->setRawData($rawData);
  55.                 $praticaInformativa->setPratica($pratica);
  56.                 $pratica->addInformativeList($praticaInformativa);
  57.             }
  58.             $pratica->setPrivacyPolicy(true);
  59.             $this->praticaRepository->save($pratica);
  60.             return $this->redirectToRoute(
  61.                 'app_website_istanza_new_dati_generali',
  62.                 [
  63.                     'slug' => $istanza->getSlug(),
  64.                     'id' => $pratica->getId(),
  65.                 ]
  66.             );
  67.         }
  68.         $informazioniComune $this->configurazioneProvider->getAllConfig('informazioni_comune');
  69.         $descrizionePrivacy $this->configurazioneProvider->getConfig('istanza__privacy');
  70.         $linkPrivacy $this->configurazioneProvider->getConfig('istanza__privacy_link');
  71.         return $this->render(
  72.             self::TEMPLATE_ENGINE_PREFIX '/istanza/tabs/privacy.html.twig',
  73.             [
  74.                 'slug' => $istanza->getSlug(),
  75.                 'id' => $pratica->getId(),
  76.                 'istanza' => $istanza,
  77.                 'informazioni_comune' => $informazioniComune,
  78.                 'descrizione_privacy' => $descrizionePrivacy['config'],
  79.                 'link_privacy' => $linkPrivacy['config'],
  80.             ]
  81.         );
  82.     }
  83. }