<?php
namespace App\Controller\Survey;
use App\Entity\Survey\SurveyResult;
use App\Form\Survey\Filter\SurveyResultFilterFormType;
use App\Form\Survey\List\SurveyResultListFormType;
use App\Form\Survey\SurveyResultFormType;
use App\Services\UniversalList\FilterService;
use App\Services\PhpSpreadsheet\PhpSpreadsheetService;
use App\Services\Survey\SurveyResultService;
use App\Services\UniversalList\ListService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SurveyResultController extends AbstractController
{
private $entityClass = SurveyResult::class;
public function __construct(
public SurveyResultService $surveyResultService,
public PhpSpreadsheetService $phpSpreadsheetService,
public FilterService $filterService,
public ListService $listService
) {}
#[Route('/surveyResult/', name: 'SURVEY_RESULT_LIST', methods: ['GET'])]
#[IsGranted('ROLE_ADMIN')]
public function surveyResultList(Request $request): Response
{
return $this->render(
'universal/list.html.twig',
array_merge(
$this->listService->generate(
$request,
$this->entityClass,
SurveyResultListFormType::class,
SurveyResultFilterFormType::class,
[
'uniqueCreatedAtCollection' => $this->surveyResultService->getUniqueCreatedAt(),
]
),
[
'pageTitle' => 'surveyResult.list.title',
'deleteConfirmText' => 'surveyResult.list.button.delete.confirm',
'routeNameCreate' => $this->entityClass::ROUTE_NAME_CREATE,
'additionalFunctionality' => [
'export' => true
]
]
)
);
}
#[Route('/surveyResult/{id}/', name: 'SURVEY_RESULT_DETAIL', methods: ['GET'])]
#[IsGranted('ROLE_ADMIN')]
public function surveyResultDetail(SurveyResult $surveyResult): Response
{
$surveyResultForm = $this->createForm(
SurveyResultFormType::class,
$surveyResult,
[
'formStatus' => 'view'
]
);
return $this->render('surveyResult/detail.html.twig', [
'surveyResultForm' => $surveyResultForm->createView()
]);
}
#[Route('/surveyResult/{id}/delete/', name: 'SURVEY_RESULT_DELETE', methods: ['DELETE'])]
#[IsGranted('ROLE_ADMIN')]
public function surveyResultDelete(int $id): JsonResponse
{
return $this->json($this->surveyResultService->delete($id));
}
#[Route('/surveyResult/export/{format}/', name: 'SURVEY_RESULTS_EXPORT', methods: ['GET'])]
#[IsGranted('ROLE_ADMIN')]
public function surveyResultsExport($format, Request $request): Response
{
$surveyResultCollections = $this->filterService->generateData(
$request,
SurveyResult::class
);
return $this->phpSpreadsheetService->getExportFile($format, $surveyResultCollections['dataCollections']);
}
}