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

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 $request, Training $training, Module $module, Lesson $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. }