src/Controller/Front/Scholar/Training/ShowController.php line 66

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the nellapp package.
  4.  *
  5.  * (c) Benjamin Georgeault <https://www.drosalys-web.fr/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace App\Controller\Front\Scholar\Training;
  11. use App\Entity\Account\Advice;
  12. use App\Entity\Account\User;
  13. use App\Entity\Scholar\Training\Training;
  14. use Nellapp\Bundle\SDKBundle\Permission\Enum\ChannelUserTrainingPermissionEnum;
  15. use App\Form\Account\AdviceType;
  16. use App\Repository\Account\AdviceRepository;
  17. use App\Repository\ChannelUserData\AbstractCursusRepository;
  18. use App\Service\Advice\AdviceManager;
  19. use App\Service\Scholar\ModuleService;
  20. use App\Service\Scholar\StatusService;
  21. use App\Service\Scholar\TrainingService;
  22. use App\Service\Scholar\UserProgression\UserProgressionService;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Nellapp\Bundle\SDKBundle\Permission\ChannelUserPermissionService;
  25. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  26. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use Symfony\Component\HttpFoundation\Response;
  29. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  30. use Symfony\Component\Routing\Annotation\Route;
  31. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  32. class ShowController extends AbstractController
  33. {
  34.     public function __construct(
  35.         private EntityManagerInterface        $em,
  36.         private AdviceRepository              $adviceRepository,
  37.         private AdviceManager                 $adviceManager,
  38.         private StatusService                 $statusService,
  39.         private AbstractCursusRepository      $cursusRepository,
  40.         private TrainingService               $trainingService,
  41.         private ModuleService                 $moduleService,
  42.         private UserProgressionService        $userProgressionService,
  43.         private ChannelUserPermissionService $channelUserPermissionService,
  44.     )
  45.     {
  46.     }
  47.     #[Route(
  48.         path'/training/{id}',
  49.         name'front_channel_training_show',
  50.     )]
  51.     #[ParamConverter('training'options: ['id' => 'id'])]
  52.     public function __invoke(Request $requestTraining $training): Response
  53.     {
  54.         if ($this->statusService->isDraft($training)) {
  55.             throw new NotFoundHttpException();
  56.         }
  57.         $vars $this->variables($request$training);
  58.         return $this->render('Front/Scholar/Training/show.html.twig'$vars);
  59.     }
  60.     /**
  61.      * @param Request $request
  62.      * @param Training $sub
  63.      * @return array
  64.      */
  65.     protected function variables(Request $requestTraining $sub): array
  66.     {
  67.         $vars = [];
  68.         $advice null;
  69.         $cursus null;
  70.         $trainingProgression null;
  71.         /** @var ?User $user */
  72.         $user $this->getUser();
  73.         $form null;
  74.         if (null !== $user) {
  75.             $advice $this->adviceRepository->findOneByUserAndTraining($user$sub);
  76.             if ($advice === null) {
  77.                 $advice = new Advice();
  78.             }
  79.             $form $this->createForm(AdviceType::class, $advice);
  80.             $form->handleRequest($request);
  81.             if ($form->isSubmitted() && $form->isValid()) {
  82.                 $advice->setUser($user);
  83.                 $advice->setTraining($sub);
  84.                 $this->em->persist($advice);
  85.                 $this->em->flush();
  86.             }
  87.             $cursusList $this->cursusRepository->findActiveCursusByTrainingAndUser($sub$user);
  88.             $cursus count($cursusList) >= $cursusList[array_key_first($cursusList)] : null;
  89.             $trainingProgression $this->userProgressionService->getUserProgressionByTrainingAndUser($sub$user);
  90.             $modules $trainingProgression->getModules();
  91.         } else {
  92.             $modules $this->trainingService->getActiveModules($sub);
  93.             $modulesWithLessons = [];
  94.             foreach ($modules as $module) {
  95.                 $moduleLessons = [];
  96.                 $activeLessons $this->moduleService->getActiveLessons($module);
  97.                 foreach ($activeLessons as $lesson) {
  98.                     $moduleLessons[$lesson->getId()] = [
  99.                         'id' => $lesson->getId(),
  100.                         'name' => $lesson->getName(),
  101.                         'isPublic' => $lesson->isPublic(),
  102.                         'hasFrontAccess' => $this->isGranted('FRONT_ACCESS', [
  103.                             'training' => $sub,
  104.                             'module' => $module,
  105.                             'lesson' => $lesson,
  106.                         ]),
  107.                     ];
  108.                 }
  109.                 $modulesWithLessons[$module->getId()] = [
  110.                     'lessons' => $moduleLessons,
  111.                     'id' => $module->getId(),
  112.                     'name' => $module->getName(),
  113.                 ];
  114.             }
  115.             $modules $modulesWithLessons;
  116.         }
  117.         $allAdvice $this->adviceManager->getTrainingAdvices($sub$user);
  118.         $trainingDescriptionEntities $sub->getTrainingDescriptions();
  119.         //TOCHECK
  120.         $teacherEntities $this->channelUserPermissionService->getAllUserForGivenPermissions($subChannelUserTrainingPermissionEnum::CHANNEL_USER_PERM_TRAINING_MANAGE_COMMENT);
  121.         $firstModules array_slice($modules05);
  122.         $lastModules array_slice($modules5);
  123.         $vars['user'] = $user;
  124.         $vars['form'] = $form?->createView();
  125.         $vars['training_advices'] = $allAdvice;
  126.         $vars['training_descriptions'] = $trainingDescriptionEntities;
  127.         $vars['teacher_entities'] = $teacherEntities;
  128.         $vars['advice_user'] = $advice;
  129.         $vars['cursus'] = $cursus;
  130.         $vars['sub'] = $sub;
  131.         $vars['channel'] = $sub->getOwnerChannel();
  132.         $vars['trainingProgression'] = $trainingProgression;
  133.         $vars['firstModules'] = $firstModules;
  134.         $vars['lastModules'] = $lastModules;
  135.         return $vars;
  136.     }
  137. }