src/Controller/Front/Scholar/Lesson/ShowController.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front\Scholar\Lesson;
  3. use App\Entity\Achievement\AchievedLesson;
  4. use App\Entity\Achievement\AchievementTimeLogLesson;
  5. use App\Entity\Scholar\Lesson\Lesson;
  6. use App\Entity\Scholar\Module\Module;
  7. use App\Entity\Scholar\Training\Training;
  8. use App\Service\Achievement\AchievementManager;
  9. use App\Service\ChannelUserData\CursusService;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class ShowController extends AbstractController
  17. {
  18.     public function __construct(
  19.         private AchievementManager     $achievementManager,
  20.         private EntityManagerInterface $entityManager,
  21.         private CursusService          $cursusService,
  22.     ) { }
  23.     #[Route(path'/training/{trainingId}/module/{moduleId}/lesson/{lessonId}'name'front_channel_lesson_show'methods: ['GET'])]
  24.     #[ParamConverter('training'options: ['id' => 'trainingId'])]
  25.     #[ParamConverter('module'options: ['id' => 'moduleId'])]
  26.     #[ParamConverter('lesson'options: ['id' => 'lessonId'])]
  27.     public function __invoke(Request $requestTraining $trainingModule $moduleLesson $lesson): Response
  28.     {
  29.         if (!$this->isGranted('FRONT_ACCESS', [
  30.             'training' => $training,
  31.             'module' => $module,
  32.             'lesson' => $lesson,
  33.         ])) {
  34.             throw $this->createAccessDeniedException();
  35.         }
  36.         $exercices $lesson->getExercises();
  37.         /** @var AchievedLesson $achievedLesson */
  38.         $achievedLesson $this->achievementManager->getOrCreate($this->getUser(), $lesson);
  39.         if ($achievedLesson) {
  40.             if (!$this->entityManager->contains($lesson)) {
  41.                 $lesson $this->entityManager->find(Lesson::class, $lesson->getId());
  42.             }
  43.             if (!$this->entityManager->contains($module)) {
  44.                 $module $this->entityManager->find(Module::class, $module->getId());
  45.             }
  46.             if (!$this->entityManager->contains($training)) {
  47.                 $training $this->entityManager->find(Training::class, $training->getId());
  48.             }
  49.             $achievementTimeLog = new AchievementTimeLogLesson();
  50.             $achievementTimeLog->setAchievedLesson($achievedLesson)
  51.                 ->setIpAddress($request->getClientIp())
  52.                 ->setLesson($lesson)
  53.                 ->setModule($module)
  54.                 ->setTraining($training)
  55.                 ->setStartAt(new \DateTime());
  56.             $this->entityManager->persist($achievementTimeLog);
  57.             $this->entityManager->flush();
  58.         }
  59.         return $this->render('Front/Scholar/Lesson/show.html.twig', [
  60.             'training' => $training,
  61.             'module' => $module,
  62.             'lesson' => $lesson,
  63.             'exercises' => $exercices,
  64.             'channel' => $training->getOwnerChannel(),
  65.             'cursus' => $this->cursusService->getCursusByTraining($training$this->getUser()),
  66.         ]);
  67.     }
  68. }