src/Controller/Project/ManageController.php line 133

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Project;
  3. use App\Entity\Project;
  4. use App\Entity\Workroom;
  5. use App\Entity\WorkroomArena;
  6. use App\Form\Project\ProjectPrivateUpdateType;
  7. use App\Form\Project\ProjectRequestPublishedType;
  8. use App\Form\Project\WorkroomType;
  9. use App\Form\Workroom\ArenaInvitationsType;
  10. use App\Form\Workroom\ArenaType;
  11. use App\Form\Workroom\SectionArenaType;
  12. use App\Form\Workroom\SectionRenameType;
  13. use App\Form\Workroom\SectionType;
  14. use App\Form\Workroom\WorkroomInvitationsType;
  15. use App\Form\Workroom\WorkroomRenameType;
  16. use App\Form\Workroom\WorkroomRevisionType;
  17. use App\Security\Voter\UserProjectVoter;
  18. use App\Service\Account\SattAccountService;
  19. use App\Service\Common\SattFormService;
  20. use App\Service\Project\SattProjectService;
  21. use App\Service\Workroom\SattWorkroomService;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
  26. use Symfony\Component\HttpFoundation\Session\Session;
  27. use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use Symfony\Component\HttpFoundation\RequestStack;
  30. /**
  31.  * Class ManageController.
  32.  */
  33. class ManageController extends AbstractController
  34. {
  35.     private SattFormService $sattForm;
  36.     private EntityManagerInterface $entityManager;
  37.     private SattProjectService $sattProjectService;
  38.     private SattWorkroomService $sattWorkroomService;
  39.     private SattAccountService $sattAccountService;
  40.     private RequestStack $requestStack;
  41.     /**
  42.      * AccountController constructor.
  43.      */
  44.     public function __construct(
  45.         SattFormService $sattForm,
  46.         EntityManagerInterface $entityManager,
  47.         SattProjectService $sattProjectService,
  48.         SattWorkroomService $sattWorkroomService,
  49.         SattAccountService $sattAccountService,
  50.         RequestStack $requestStack
  51.     ) {
  52.         $this->sattForm $sattForm;
  53.         $this->entityManager $entityManager;
  54.         $this->sattProjectService $sattProjectService;
  55.         $this->sattWorkroomService $sattWorkroomService;
  56.         $this->sattAccountService $sattAccountService;
  57.         $this->requestStack $requestStack;
  58.     }
  59.     #[Route(path'/project/informations/{id}'name'project_info')]
  60.     public function projectInformations(Project $project): Response
  61.     {
  62.         $this->denyAccessUnlessGranted(UserProjectVoter::PROJECT_MANAGE_VIEW_CDP_AND_WL$project);
  63.         $form $this->createForm(ProjectPrivateUpdateType::class, $project);
  64.         return $this->render(
  65.             'project/index.html.twig',
  66.             [
  67.                 'project' => $project,
  68.                 'user' => $this->getUser(),
  69.                 'projectPrivateUpdateForm' => $form->createView(),
  70.             ]
  71.         );
  72.     }
  73.     #[Route(path'/project/members/{id}'name'project_members')]
  74.     public function projectMembers(Project $project): Response
  75.     {
  76.         $this->denyAccessUnlessGranted(UserProjectVoter::PROJECT_MANAGE_VIEW_CDP_AND_WL$project);
  77.         $session $this->requestStack->getSession();
  78.         $session->set('project_id'$project->getId());
  79.         $user $this->getUser();
  80.         // Get all users email Labomega
  81.         $emails $this->sattAccountService->getEmailsLabomega($user->getEmail());
  82.         return $this->render('project/members.html.twig',
  83.             [
  84.                 'project' => $project,
  85.                 'user' => $user,
  86.                 'emailsLabo' => $emails,
  87.                 'workroomInvitationsForm' => $this->createForm(WorkroomInvitationsType::class)->createView(),
  88.                 'arenaInvitationsForm' => $this->createForm(ArenaInvitationsType::class)->createView(),
  89.             ]
  90.         );
  91.     }
  92.     #[Route(path'/project/workrooms/{id}'name'project_workrooms'options: ['expose' => true])]
  93.     public function workrooms(Project $project): Response
  94.     {
  95.         $this->denyAccessUnlessGranted(UserProjectVoter::PROJECT_MANAGE_VIEW_CDP$project);
  96.         // Get all workrooms of the current project
  97.         $workroomsProject $this->sattWorkroomService->getAllWorkroomsOfProject($project);
  98.         $user $this->getUser();
  99.         // Get all users email Labomega
  100.         $emails $this->sattAccountService->getEmailsLabomega($user->getEmail());
  101.         $arenaForm $this->createForm(ArenaType::class);
  102.         return $this->render('project/workrooms.html.twig',
  103.             [
  104.                 'project' => $project,
  105.                 'workrooms' => $workroomsProject,
  106.                 'user' => $user,
  107.                 'emailsLabo' => $emails,
  108.                 'workroomForm' => $this->createForm(WorkroomType::class)->createView(),
  109.                 'arenaForm' => $arenaForm->createView(),
  110.             ]
  111.         );
  112.     }
  113.     #[Route(path'/project/workroom/{id}'name'project_workroom')]
  114.     public function workroom(Workroom $workroom): Response
  115.     {
  116.         $this->denyAccessUnlessGranted(UserProjectVoter::PROJECT_MANAGE_VIEW_CDP$workroom->getProject());
  117.         $session $this->requestStack->getSession();
  118.         $session->set('workroom_id', (int) $workroom->getId());
  119.         return $this->render('project/workroom.html.twig',
  120.             [
  121.                 'project' => $workroom->getProject(),
  122.                 'workroomCurrent' => $workroom,
  123.                 'user' => $this->getUser(),
  124.                 'sectionForm' => $this->createForm(SectionType::class)->createView(),
  125.                 'sectionRenameForm' => $this->createForm(SectionRenameType::class)->createView(),
  126.                 'workroomRevisionForm' => $this->createForm(WorkroomRevisionType::class)->createView(),
  127.                 'workroomRenameForm' => $this->createForm(WorkroomRenameType::class)->createView(),
  128.                 'workroomArenaForm' => $this->createForm(ArenaType::class)->createView(),
  129.             ]
  130.         );
  131.     }
  132.     #[Route(path'/project/arena/{id}'name'project_arena')]
  133.     public function arena(WorkroomArena $workroomArena): Response
  134.     {
  135.         $this->denyAccessUnlessGranted(UserProjectVoter::PROJECT_MANAGE_VIEW_CDP$workroomArena->getWorkroom()->getProject());
  136.         $session $this->requestStack->getSession();
  137.         $session->set('workroom_arena_id', (int) $workroomArena->getId());
  138.         $workroom $workroomArena->getWorkroom();
  139.         return $this->render('project/arena.html.twig',
  140.             [
  141.                 'project' => $workroom->getProject(),
  142.                 'workroomArenaCurrent' => $workroomArena,
  143.                 'workroomCurrent' => $workroom,
  144.                 'user' => $this->getUser(),
  145.                 'sectionForm' => $this->createForm(SectionArenaType::class)->createView(),
  146.                 'sectionRenameForm' => $this->createForm(SectionRenameType::class)->createView(),
  147.             ]
  148.         );
  149.     }
  150.     #[Route(path'/project/revisions/{id}'name'project_revisions')]
  151.     public function projectRevisions(Project $project): Response
  152.     {
  153.         $this->denyAccessUnlessGranted(UserProjectVoter::PROJECT_MANAGE_VIEW_CDP$project);
  154.         return $this->render('project/revisions.html.twig',
  155.             [
  156.                 'project' => $project,
  157.                 'user' => $this->getUser(),
  158.                 'revisionRenameForm' => $this->createForm(WorkroomRevisionType::class)->createView(),
  159.             ]
  160.         );
  161.     }
  162.     #[Route(path'/project/actions/{id}'name'project_actions')]
  163.     public function projectActions(Project $project): Response
  164.     {
  165.         $this->denyAccessUnlessGranted(UserProjectVoter::PROJECT_MANAGE_VIEW_CDP$project);
  166.         $session $this->requestStack->getSession();
  167.         $session->set('project_id'$project->getId());
  168.         return $this->render('project/actions.html.twig',
  169.             [
  170.                 'project' => $project,
  171.                 'user' => $this->getUser(),
  172.                 'projectRequestPublishedForm' => $this->createForm(ProjectRequestPublishedType::class)->createView(),
  173.             ]
  174.         );
  175.     }
  176. }