src/Controller/Web/Project/BaseProjectController.php line 82
<?phpdeclare(strict_types=1);namespace App\Controller\Web\Project;use Exception;use App\Controller\Web\AbstractAppController;use App\Entity\Project;use App\Form\Project\ProjectForm;use App\Handler\MessageTrait;use App\Repository\ItemDocumentReportRepository;use App\Service\Project\ProjectListService;use App\Service\Project\ProjectService;use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;#[IsGranted('ROLE_USER')]final class BaseProjectController extends AbstractAppController{#[Route('/projekt/pregled', 'project-index')]public function index(Request $request, ProjectListService $projectListService): Response{$projects = $projectListService->getAllForCurrentUser();if ($this->searchFormValid($request)) {$projects = $projectListService->getAllForCurrentUserOnSearch((string) $this->getSearchDataInput($request));}return $this->render('dashboard/programs/project/index.html.twig', ['projects' => $this->paginate($projects, $request),'searchForm' => $this->createSearchView($request)]);}#[IsGranted('PROJECT_MANAGER')]#[Route('/projekt/novi', 'project-create')]public function create(Request $request, ProjectService $projectService): Response{$project = $projectService->getProjectDataPersister()->create();$form = $this->createForm(ProjectForm::class,$project,['validation_groups' => ['action'],'create' => true]);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$projectService->save($form->getData(), true);$this->sendSavedMessage();if ($this->isStayButtonClicked($request)) {return $this->redirectToRoute('project-update', ['id' => $project->getId(),'tab' => $projectService->takeTabName($request->getRequestUri())]);}return $this->redirectToRoute('project-index');}return $this->render('dashboard/programs/project/action.html.twig', ['form' => $form->createView(),'update' => false,'project' => null,'tab' => $projectService->takeTabName($request->getRequestUri())]);}#[IsGranted('PROJECT_MANAGER')]#[IsGranted('project_owner_voter', 'project')]#[Route('/projekt/promjena/{id}', 'project-update')]public function update(Request $request,Project $project,ProjectService $projectService): Response{$form = $this->createForm(ProjectForm::class,$project,['validation_groups' => ['action'],'create' => false]);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {try {$projectService->save($form->getData());} catch (Exception) {$this->sendCustomMessage(self::$error, 'programs.project.error');return $this->redirectToRoute('project-update', ['id' => $project->getId()]);}$this->sendSavedMessage();if ($this->isStayButtonClicked($request)) {return $this->redirectToRoute('project-update', ['id' => $project->getId(),'tab' => $projectService->takeTabName($request->getRequestUri())]);}return $this->redirectToRoute('project-index');}return $this->render('dashboard/programs/project/action.html.twig', ['form' => $form->createView(),'update' => true,'id' => $project->getId(),'project' => $project,'tab' => $projectService->takeTabName($request->getRequestUri())]);}#[IsGranted('PROJECT_MANAGER')]#[IsGranted('project_owner_voter', 'project')]#[Route('/projekt/izvjestaj/{id}', 'project-report')]public function report(Project $project, ItemDocumentReportRepository $itemDocumentReportRepository): Response{return $this->render('dashboard/programs/project/report.html.twig', ['reports' => $project->getReports(),'project' => $project->getName(),'itemDocumentReportRepository' => $itemDocumentReportRepository]);}#[IsGranted('PROJECT_MANAGER')]#[IsGranted('project_owner_voter', 'project')]#[Route('/projekt/deaktivacija/{id}', 'project-deactivate')]public function deactivate(Project $project, ProjectService $projectService): Response{$projectService->deactivate($project);$this->sendDeletedMessage();return $this->redirectToRoute('project-index');}}