<?php
namespace App\Controller\GroupTicket;
use App\Controller\Abstracts\AbstractController;
use App\Entity\Admin;
use App\Entity\GroupTicket\TransportCompany;
use App\Entity\Security\UserRole;
use App\Entity\Tu;
use App\Form\GroupTicket\TransportCompanyType;
use App\Repository\GroupTicket\TransportCompanyRepository;
use App\Security\PermissionConfigProvider;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[Route('/transport/company', defaults:['subject' => 'group_tu']), IsGranted('function', subject: 'subject')]
class TransportCompanyController extends AbstractController
{
#[Route('/', name: 'app_transport_company_index', methods: ['GET'])]
public function index(TransportCompanyRepository $transportCompanyRepository): Response
{
$users = [];
$user = $this->getUser();
$publicConnections = $user->getGroupTicketPublicConnection();
if($user instanceof Admin && $publicConnections->isEmpty() === false){
$users = $transportCompanyRepository->findByTypeAndTu('transport', $publicConnections);
}
return $this->render('group_tickets/transport_company/index.html.twig', [
'transport_companies' => $users,
]);
}
/**
* @throws \Exception
*/
#[Route('/new', name: 'app_transport_company_new', methods: ['GET', 'POST'])]
public function new(Request $request, EntityManagerInterface $entityManager, PermissionConfigProvider $permissionConfigProvider): Response
{
$currentUser = $this->getUser();
$transportCompany = new TransportCompany();
$form = $this->createForm(TransportCompanyType::class, $transportCompany, [
'action' => $this->generateUrl('app_transport_company_new'),
'method' => 'POST',
'attr'=> [
'novalidate' => true
]
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$transportCompany->setPassword($permissionConfigProvider->generateHashedPassword($transportCompany));
$transportCompany->setIsVerified(true);
// set same verbund as cur user.
$currentVerbunds = $currentUser->getGroupTicketPublicConnection();
foreach ($currentVerbunds as $currentVerbund){
$transportCompany->addGroupTicketPublicConnection($currentVerbund);
}
/** @var UserRole $role */
foreach($currentUser->getUserRoles() as $role){
$subRoles = $role->getGroupTicketSubRoles();
foreach ($subRoles as $subRole){
$transportCompany->addUserRole($subRole);
}
}
$entityManager->persist($transportCompany);
$entityManager->flush();
$this->addFlash(
'success',
$this->translator->trans('common.added')
);
return new JsonResponse(['reload' => true], Response::HTTP_CREATED);
}
return $this->renderForm('group_tickets/transport_company/new.html.twig', [
'transport_company' => $transportCompany,
'form' => $form,
]);
}
#[Route('/{id}/edit', name: 'app_transport_company_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, TransportCompany $transportCompany, EntityManagerInterface $entityManager): Response
{
$form = $this->createForm(TransportCompanyType::class, $transportCompany, [
'action' => $this->generateUrl('app_transport_company_edit', ['id' => $transportCompany->getId()]),
'method' => 'POST',
'attr'=> [
'novalidate' => true
],
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->flush();
$this->addFlash(
'success',
$this->translator->trans('common.updated')
);
return new JsonResponse(['reload' => true], Response::HTTP_CREATED);
}
return $this->renderForm('group_tickets/transport_company/edit.html.twig', [
'transport_company' => $transportCompany,
'form' => $form,
]);
}
#[Route('/delete/{id}', name: 'app_transport_company_delete', methods: ['GET','POST'])]
public function delete(Request $request, TransportCompany $transportCompany, EntityManagerInterface $entityManager): Response
{
if ($this->isCsrfTokenValid('delete'.$transportCompany->getId(), $request->request->get('_token'))) {
$entityManager->remove($transportCompany);
$entityManager->flush();
$this->addFlash(
'success',
$this->translator->trans('common.deleted')
);
return new JsonResponse(['reload' => true], Response::HTTP_CREATED);
}
return $this->renderForm('group_tickets/transport_company/delete.html.twig', [
'transport_company' => $transportCompany,
]);
}
}