src/Controller/Web/Project/BaseProjectController.php line 82

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller\Web\Project;
  4. use Exception;
  5. use App\Controller\Web\AbstractAppController;
  6. use App\Entity\Project;
  7. use App\Form\Project\ProjectForm;
  8. use App\Handler\MessageTrait;
  9. use App\Repository\ItemDocumentReportRepository;
  10. use App\Service\Project\ProjectListService;
  11. use App\Service\Project\ProjectService;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. #[IsGranted('ROLE_USER')]
  17. final class BaseProjectController extends AbstractAppController
  18. {
  19.     #[Route('/projekt/pregled''project-index')]
  20.     public function index(Request $requestProjectListService $projectListService): Response
  21.     {
  22.         $projects $projectListService->getAllForCurrentUser();
  23.         if ($this->searchFormValid($request)) {
  24.             $projects $projectListService->getAllForCurrentUserOnSearch(
  25.                 (string) $this->getSearchDataInput($request)
  26.             );
  27.         }
  28.         return $this->render('dashboard/programs/project/index.html.twig', [
  29.             'projects' => $this->paginate($projects$request),
  30.             'searchForm' => $this->createSearchView($request)
  31.         ]);
  32.     }
  33.     #[IsGranted('PROJECT_MANAGER')]
  34.     #[Route('/projekt/novi''project-create')]
  35.     public function create(Request $requestProjectService $projectService): Response
  36.     {
  37.         $project $projectService->getProjectDataPersister()->create();
  38.         $form $this->createForm(
  39.             ProjectForm::class,
  40.             $project,
  41.             [
  42.                 'validation_groups' => ['action'],
  43.                 'create' => true
  44.             ]
  45.         );
  46.         $form->handleRequest($request);
  47.         if ($form->isSubmitted() && $form->isValid()) {
  48.             $projectService->save($form->getData(), true);
  49.             $this->sendSavedMessage();
  50.             if ($this->isStayButtonClicked($request)) {
  51.                 return $this->redirectToRoute('project-update', [
  52.                     'id' => $project->getId(),
  53.                     'tab' => $projectService->takeTabName($request->getRequestUri())
  54.                     ]
  55.                 );
  56.             }
  57.             return $this->redirectToRoute('project-index');
  58.         }
  59.         return $this->render('dashboard/programs/project/action.html.twig', [
  60.             'form' => $form->createView(),
  61.             'update' => false,
  62.             'project' => null,
  63.             'tab' => $projectService->takeTabName($request->getRequestUri())
  64.         ]);
  65.     }
  66.     #[IsGranted('PROJECT_MANAGER')]
  67.     #[IsGranted('project_owner_voter''project')]
  68.     #[Route('/projekt/promjena/{id}''project-update')]
  69.     public function update(
  70.         Request $request,
  71.         Project $project,
  72.         ProjectService $projectService
  73.     ): Response
  74.     {
  75.         $form $this->createForm(
  76.             ProjectForm::class,
  77.             $project,
  78.             [
  79.                 'validation_groups' => ['action'],
  80.                 'create' => false
  81.             ]
  82.         );
  83.         $form->handleRequest($request);
  84.         if ($form->isSubmitted() && $form->isValid()) {
  85.             try {
  86.             $projectService->save($form->getData());
  87.             } catch (Exception) {
  88.                 $this->sendCustomMessage(self::$error'programs.project.error');
  89.                 return $this->redirectToRoute('project-update', [
  90.                         'id' => $project->getId()
  91.                     ]
  92.                 );
  93.             }
  94.             $this->sendSavedMessage();
  95.             if ($this->isStayButtonClicked($request)) {
  96.                 return $this->redirectToRoute('project-update', [
  97.                     'id' => $project->getId(),
  98.                     'tab' => $projectService->takeTabName($request->getRequestUri())
  99.                     ]
  100.                 );
  101.             }
  102.             return $this->redirectToRoute('project-index');
  103.         } 
  104.         return $this->render('dashboard/programs/project/action.html.twig', [
  105.             'form' => $form->createView(),
  106.             'update' => true,
  107.             'id' => $project->getId(),
  108.             'project' => $project,
  109.             'tab' => $projectService->takeTabName($request->getRequestUri())
  110.         ]);
  111.     }
  112.     #[IsGranted('PROJECT_MANAGER')]
  113.     #[IsGranted('project_owner_voter''project')]
  114.     #[Route('/projekt/izvjestaj/{id}''project-report')]
  115.     public function report(Project $projectItemDocumentReportRepository $itemDocumentReportRepository): Response
  116.     {
  117.         return $this->render('dashboard/programs/project/report.html.twig', [
  118.             'reports' => $project->getReports(),
  119.             'project' => $project->getName(),
  120.             'itemDocumentReportRepository' => $itemDocumentReportRepository
  121.         ]);
  122.     }
  123.     #[IsGranted('PROJECT_MANAGER')]
  124.     #[IsGranted('project_owner_voter''project')]
  125.     #[Route('/projekt/deaktivacija/{id}''project-deactivate')]
  126.     public function deactivate(Project $projectProjectService $projectService): Response
  127.     {
  128.         $projectService->deactivate($project);
  129.         $this->sendDeletedMessage();
  130.         return $this->redirectToRoute('project-index');
  131.     }
  132. }