src/Controller/Front/Exercise/ShowController.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front\Exercise;
  3. use App\Entity\Account\User;
  4. use App\Entity\Exercise\Exercise;
  5. use App\Entity\Scholar\Lesson\Lesson;
  6. use App\Entity\Scholar\Module\Module;
  7. use App\Entity\Scholar\Training\Training;
  8. use App\Repository\Exercise\User\ExerciseResultRepository;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class ShowController extends AbstractController
  16. {
  17.     public function __construct(
  18.         private ExerciseResultRepository $exerciseResultRepository,
  19.     )
  20.     {
  21.     }
  22.     #[Route(path'/training/{trainingId}/module/{moduleId}/lesson/{lessonId}/exercise/{exerciseId}'name'front_channel_exercise_show'methods: ['GET'])]
  23.     #[ParamConverter('training'options: ['id' => 'trainingId'])]
  24.     #[ParamConverter('module'options: ['id' => 'moduleId'])]
  25.     #[ParamConverter('lesson'options: ['id' => 'lessonId'])]
  26.     #[ParamConverter('exercise'options: ['id' => 'exerciseId'])]
  27.     public function __invoke(Request $requestTraining $trainingModule $moduleLesson $lessonExercise $exercise): Response
  28.     {
  29.         if (!$this->isGranted('FRONT_ACCESS', [
  30.             'training' => $training,
  31.             'module' => $module,
  32.             'lesson' => $lesson,
  33.         ])) {
  34.             throw $this->createAccessDeniedException();
  35.         }
  36.         /** @var ?User $user */
  37.         $user $this->getUser();
  38.         $bestExerciseResult $user === null null $this->exerciseResultRepository->findBestExerciseResultForUserAndExercise($user$exercise);
  39.         if (
  40.             $exercise->getLesson() !== $lesson
  41.         ) {
  42.             throw new NotFoundHttpException();
  43.         }
  44.         return $this->render('Front/Exercise/show.html.twig', [
  45.             'training' => $training,
  46.             'module' => $module,
  47.             'lesson' => $lesson,
  48.             'current_exercise' => $exercise,
  49.             'bestExerciseResult' => $bestExerciseResult,
  50.             'channel' => $training->getOwnerChannel(),
  51.         ]);
  52.     }
  53. }