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

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 Doctrine\ORM\EntityManagerInterface;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class ShowController extends AbstractController
  16. {
  17.     public function __construct(
  18.         private AchievementManager     $achievementManager,
  19.         private EntityManagerInterface $entityManager,
  20.     )
  21.     {
  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.             $achievementTimeLog = new AchievementTimeLogLesson();
  41.             $achievementTimeLog->setAchievedLesson($achievedLesson)
  42.                 ->setLesson($lesson)
  43.                 ->setModule($module)
  44.                 ->setTraining($training)
  45.                 ->setStartAt(new \DateTime());
  46.             $this->entityManager->persist($achievementTimeLog);
  47.             $this->entityManager->flush();
  48.         }
  49.         return $this->render('Front/Scholar/Lesson/show.html.twig', [
  50.             'training' => $training,
  51.             'module' => $module,
  52.             'lesson' => $lesson,
  53.             'exercises' => $exercices,
  54.             'channel' => $training->getOwnerChannel(),
  55.         ]);
  56.     }
  57. }