src/EventListener/Questionary/TestFailedListener.php line 36

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventListener\Questionary;
  4. use App\Entity\QuestionaryAttempt;
  5. use App\Event\Questionary\TestFailedEvent;
  6. use App\Repository\QuestionaryRepository;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. class TestFailedListener
  12. {
  13.     private QuestionaryRepository $questionaryRepository;
  14.     private EntityManagerInterface $em;
  15.     private SessionInterface $session;
  16.     private RequestStack $requestStack;
  17.     private TranslatorInterface $translator;
  18.     public function __construct(QuestionaryRepository $questionaryRepository,
  19.                                 EntityManagerInterface $em,
  20.                                 SessionInterface $session,
  21.                                 RequestStack $requestStack,
  22.                                 TranslatorInterface $translator
  23.     ) {
  24.         $this->questionaryRepository $questionaryRepository;
  25.         $this->em $em;
  26.         $this->session $session;
  27.         $this->requestStack $requestStack;
  28.         $this->translator $translator;
  29.     }
  30.     public function onTestFailed(TestFailedEvent $event): void
  31.     {
  32.         $attempt $event->getTestAttempt();
  33.         if(null === $attempt) {
  34.             return;
  35.         }
  36.         $questionary $this->questionaryRepository->findLastActiveByEvent(TestFailedEvent::class);
  37.         if ($questionary === null) {
  38.             return;
  39.         }
  40.         $questionaryAttempt = new QuestionaryAttempt();
  41.         $questionaryAttempt->setStudent($event->getTestAttempt()->getStudent());
  42.         $questionaryAttempt->setIsDone(false);
  43.         $questionaryAttempt->setQuestionary($questionary);
  44.         $questionaryAttempt->setTitle($event->getTestAttempt()->getTest()->getTitle());
  45.         $this->em->persist($questionaryAttempt);
  46.         $this->em->flush();
  47.         $request $this->requestStack->getCurrentRequest();
  48.         if ($request->hasSession()) {
  49.             $this->session->getFlashBag()->add(
  50.                 'notice',
  51.                 $this->translator->trans('event.questionary_activated', [], 'admin_questionary')
  52.             );
  53.         }
  54.     }
  55. }