src/Controller/GroupTicket/TransportCompanyController.php line 91

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GroupTicket;
  3. use App\Controller\Abstracts\AbstractController;
  4. use App\Entity\Admin;
  5. use App\Entity\GroupTicket\TransportCompany;
  6. use App\Entity\Security\UserRole;
  7. use App\Entity\Tu;
  8. use App\Form\GroupTicket\TransportCompanyType;
  9. use App\Repository\GroupTicket\TransportCompanyRepository;
  10. use App\Security\PermissionConfigProvider;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. #[Route('/transport/company', defaults:['subject' => 'group_tu']), IsGranted('function', subject: 'subject')]
  18. class TransportCompanyController extends AbstractController
  19. {
  20. #[Route('/', name: 'app_transport_company_index', methods: ['GET'])]
  21. public function index(TransportCompanyRepository $transportCompanyRepository): Response
  22. {
  23. $users = [];
  24. $user = $this->getUser();
  25. $publicConnections = $user->getGroupTicketPublicConnection();
  26. if($user instanceof Admin && $publicConnections->isEmpty() === false){
  27. $users = $transportCompanyRepository->findByTypeAndTu('transport', $publicConnections);
  28. }
  29. return $this->render('group_tickets/transport_company/index.html.twig', [
  30. 'transport_companies' => $users,
  31. ]);
  32. }
  33. /**
  34. * @throws \Exception
  35. */
  36. #[Route('/new', name: 'app_transport_company_new', methods: ['GET', 'POST'])]
  37. public function new(Request $request, EntityManagerInterface $entityManager, PermissionConfigProvider $permissionConfigProvider): Response
  38. {
  39. $currentUser = $this->getUser();
  40. $transportCompany = new TransportCompany();
  41. $form = $this->createForm(TransportCompanyType::class, $transportCompany, [
  42. 'action' => $this->generateUrl('app_transport_company_new'),
  43. 'method' => 'POST',
  44. 'attr'=> [
  45. 'novalidate' => true
  46. ]
  47. ]);
  48. $form->handleRequest($request);
  49. if ($form->isSubmitted() && $form->isValid()) {
  50. $transportCompany->setPassword($permissionConfigProvider->generateHashedPassword($transportCompany));
  51. $transportCompany->setIsVerified(true);
  52. // set same verbund as cur user.
  53. $currentVerbunds = $currentUser->getGroupTicketPublicConnection();
  54. foreach ($currentVerbunds as $currentVerbund){
  55. $transportCompany->addGroupTicketPublicConnection($currentVerbund);
  56. }
  57. /** @var UserRole $role */
  58. foreach($currentUser->getUserRoles() as $role){
  59. $subRoles = $role->getGroupTicketSubRoles();
  60. foreach ($subRoles as $subRole){
  61. $transportCompany->addUserRole($subRole);
  62. }
  63. }
  64. $entityManager->persist($transportCompany);
  65. $entityManager->flush();
  66. $this->addFlash(
  67. 'success',
  68. $this->translator->trans('common.added')
  69. );
  70. return new JsonResponse(['reload' => true], Response::HTTP_CREATED);
  71. }
  72. return $this->renderForm('group_tickets/transport_company/new.html.twig', [
  73. 'transport_company' => $transportCompany,
  74. 'form' => $form,
  75. ]);
  76. }
  77. #[Route('/{id}/edit', name: 'app_transport_company_edit', methods: ['GET', 'POST'])]
  78. public function edit(Request $request, TransportCompany $transportCompany, EntityManagerInterface $entityManager): Response
  79. {
  80. $form = $this->createForm(TransportCompanyType::class, $transportCompany, [
  81. 'action' => $this->generateUrl('app_transport_company_edit', ['id' => $transportCompany->getId()]),
  82. 'method' => 'POST',
  83. 'attr'=> [
  84. 'novalidate' => true
  85. ],
  86. ]);
  87. $form->handleRequest($request);
  88. if ($form->isSubmitted() && $form->isValid()) {
  89. $entityManager->flush();
  90. $this->addFlash(
  91. 'success',
  92. $this->translator->trans('common.updated')
  93. );
  94. return new JsonResponse(['reload' => true], Response::HTTP_CREATED);
  95. }
  96. return $this->renderForm('group_tickets/transport_company/edit.html.twig', [
  97. 'transport_company' => $transportCompany,
  98. 'form' => $form,
  99. ]);
  100. }
  101. #[Route('/delete/{id}', name: 'app_transport_company_delete', methods: ['GET','POST'])]
  102. public function delete(Request $request, TransportCompany $transportCompany, EntityManagerInterface $entityManager): Response
  103. {
  104. if ($this->isCsrfTokenValid('delete'.$transportCompany->getId(), $request->request->get('_token'))) {
  105. $entityManager->remove($transportCompany);
  106. $entityManager->flush();
  107. $this->addFlash(
  108. 'success',
  109. $this->translator->trans('common.deleted')
  110. );
  111. return new JsonResponse(['reload' => true], Response::HTTP_CREATED);
  112. }
  113. return $this->renderForm('group_tickets/transport_company/delete.html.twig', [
  114. 'transport_company' => $transportCompany,
  115. ]);
  116. }
  117. }