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

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 AuthorizationCheckerInterface $authorizationChecker,
  37.         private AdviceRepository              $adviceRepository,
  38.         private AdviceManager                 $adviceManager,
  39.         private StatusService                 $statusService,
  40.         private AbstractCursusRepository      $cursusRepository,
  41.         private TrainingService               $trainingService,
  42.         private ModuleService                 $moduleService,
  43.         private UserProgressionService        $userProgressionService,
  44.         private ChannelUserPermissionService $channelUserPermissionService,
  45.     )
  46.     {
  47.     }
  48.     #[Route(
  49.         path'/training/{id}',
  50.         name'front_channel_training_show',
  51.     )]
  52.     #[ParamConverter('training'options: ['id' => 'id'])]
  53.     public function __invoke(Request $requestTraining $training): Response
  54.     {
  55.         if ($this->statusService->isDraft($training)) {
  56.             throw new NotFoundHttpException();
  57.         }
  58.         $vars $this->variables($request$training);
  59.         return $this->render('Front/Scholar/Training/show.html.twig'$vars);
  60.     }
  61.     /**
  62.      * @param Request $request
  63.      * @param Training $sub
  64.      * @return array
  65.      */
  66.     protected function variables(Request $request$sub): array
  67.     {
  68.         $vars = [];
  69.         $advice null;
  70.         $cursus null;
  71.         $trainingProgression null;
  72.         /** @var ?User $user */
  73.         $user $this->getUser();
  74.         $form null;
  75.         if (null !== $user) {
  76.             $advice $this->adviceRepository->findOneByUserAndTraining($user$sub);
  77.             if ($advice === null) {
  78.                 $advice = new Advice();
  79.             }
  80.             $form $this->createForm(AdviceType::class, $advice);
  81.             $form->handleRequest($request);
  82.             if ($form->isSubmitted() && $form->isValid()) {
  83.                 $advice->setUser($user);
  84.                 $advice->setTraining($sub);
  85.                 $this->em->persist($advice);
  86.                 $this->em->flush();
  87.             }
  88.             $cursusList $this->cursusRepository->findActiveCursusByTrainingAndUser($sub$user);
  89.             $cursus count($cursusList) >= $cursusList[array_key_first($cursusList)] : null;
  90.             $trainingProgression $this->userProgressionService->getUserProgressionByTrainingAndUser($sub$user);
  91.             $modules $trainingProgression->getModules();
  92.         } else {
  93.             $modules $this->trainingService->getActiveModules($sub);
  94.             $modulesWithLessons = [];
  95.             foreach ($modules as $module) {
  96.                 $moduleLessons = [];
  97.                 $activeLessons $this->moduleService->getActiveLessons($module);
  98.                 foreach ($activeLessons as $lesson) {
  99.                     $moduleLessons[$lesson->getId()] = [
  100.                         'id' => $lesson->getId(),
  101.                         'name' => $lesson->getName(),
  102.                         'isPublic' => $lesson->isPublic(),
  103.                         'hasFrontAccess' => $this->authorizationChecker->isGranted('FRONT_ACCESS', [
  104.                             'training' => $sub,
  105.                             'module' => $module,
  106.                             'lesson' => $lesson,
  107.                         ]),
  108.                     ];
  109.                 }
  110.                 $modulesWithLessons[$module->getId()] = [
  111.                     'lessons' => $moduleLessons,
  112.                     'id' => $module->getId(),
  113.                     'name' => $module->getName(),
  114.                 ];
  115.             }
  116.             $modules $modulesWithLessons;
  117.         }
  118.         $allAdvice $this->adviceManager->getTrainingAdvices($sub$user);
  119.         $trainingDescriptionEntities $sub->getTrainingDescriptions();
  120.         //TOCHECK
  121.         $teacherEntities $this->channelUserPermissionService->getAllUserForGivenPermissions($subChannelUserTrainingPermissionEnum::CHANNEL_USER_PERM_TRAINING_MANAGE_COMMENT);
  122.         $firstModules array_slice($modules05);
  123.         $lastModules array_slice($modules5);
  124.         $vars['user'] = $user;
  125.         $vars['form'] = $form?->createView();
  126.         $vars['training_advices'] = $allAdvice;
  127.         $vars['training_descriptions'] = $trainingDescriptionEntities;
  128.         $vars['teacher_entities'] = $teacherEntities;
  129.         $vars['advice_user'] = $advice;
  130.         $vars['cursus'] = $cursus;
  131.         $vars['sub'] = $sub;
  132.         $vars['channel'] = $sub->getOwnerChannel();
  133.         $vars['trainingProgression'] = $trainingProgression;
  134.         $vars['firstModules'] = $firstModules;
  135.         $vars['lastModules'] = $lastModules;
  136.         return $vars;
  137.     }
  138. }