| Current Path : /var/www/v3.cesa.co.za/src/ContentBundle/Controller/ |
| Current File : /var/www/v3.cesa.co.za/src/ContentBundle/Controller/DefaultController.php |
<?php
namespace App\ContentBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\ExpressionLanguage\Expression;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use App\CoreBundle\Services\ServiceGetterManager;
use App\ContentBundle\Form\Type\FormReferType;
class DefaultController extends AbstractController
{
#[Route('/form/list.html', name: 'content_form_list')]
#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_FORM_ADMIN")'))]
public function list(Request $request, ServiceGetterManager $sg): Response
{
$formQuery = $sg->get('form_manager.manager')->getSiteListQuery();
$paginator = $sg->get('knp_paginator');
$forms = $paginator->paginate($formQuery, $request->get('page', 1), 50);
return $this->render('@ContentBundle/Form/list.html.twig', [
'forms' => $forms,
'now' => new \DateTime()
]);
}
#[Route('/form/{formId}/report.html', name: 'content_form_report')]
#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_FORM_ADMIN")'))]
public function report(Request $request, ServiceGetterManager $sg, $formId): Response
{
$form = $sg->get('form_manager.manager')->find($formId);
$formCompletedReport = $sg->get('form_completed.manager')->getFormReportData($formId);
return $this->render('@ContentBundle/Form/report.html.twig', ['formCompletedReport' => $formCompletedReport]);
}
#[Route('/form/{formId}/report/export.xlsx', name: 'content_form_report_export', methods: ['GET'])]
#[IsGranted(new Expression('is_granted("ROLE_ADMIN") or is_granted("ROLE_FORM_ADMIN")'))]
public function reportExport(Request $request, ServiceGetterManager $sg, $formId): Response
{
$form = $sg->get('form_manager.manager')->find($formId);
if (!is_object($form)) {
throw new NotFoundHttpException('Form not found');
}
try {
$binary = $sg->get('form_completed.manager')->generateFormReportExcel($formId);
} catch (\InvalidArgumentException $ex) {
throw new NotFoundHttpException($ex->getMessage(), $ex);
}
$safeTitle = preg_replace('/[^a-zA-Z0-9_-]+/', '-', (string) $form->getTitle());
$safeTitle = trim($safeTitle, '-');
if ($safeTitle === '') {
$safeTitle = 'form-report';
}
$filename = 'form-report-' . $safeTitle . '.xlsx';
return new Response(
$binary,
Response::HTTP_OK,
array(
'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'Content-Disposition' => 'attachment; filename="' . $filename . '"',
)
);
}
#[Route('/form/{formId}.html', name: 'content_form_view')]
public function view(Request $request, ServiceGetterManager $sg, $formId): Response
{
$form = $sg->get('form_manager.manager')->renderForm($formId);
return $this->render(
'@ContentBundle/Default/view.html.twig',
[
'form' => $form,
'formCompletedId' => $sg->get('form_completed.manager')->getObject($form['formObject'])->getId(),
'formObject' => $form['formObject']
]
);
}
#[Route('/form/refer/{formId}.html', name: 'content_refer')]
public function refer(Request $request, ServiceGetterManager $sg, $formId): Response
{
$form = $sg->get('form_manager.manager')->find($formId);
$formRefer = $this->createForm(FormReferType::class);
if ($request->isMethod('POST')) {
$formRefer->handleRequest($request);
if ($formRefer->isSubmitted() && $formRefer->isValid()) {
$formData = $formRefer->getData();
$idNumber = $formData['id_number'];
$student = $sg->get('cce_student.manager')->findOneBy(['id_number' => $idNumber]);
if (!is_object($student) || strlen($idNumber) <= 0) {
$this->addFlash('danger', 'An error occurred: Could not find your ID number.');
return $this->redirect($this->generateUrl('content_refer', ['formId' => $form->getId()]));
}
$data = [
'formData' => $formData,
'studentId' => $student->getId(),
];
$sg->get('key_value.manager')->setKeyValue(
'form_extended_' . $form->getId() . '_' . $student->getId() . '_',
$data,
true
);
$this->addFlash('success', 'Thank you. Referral details saved.');
return $this->redirect($this->generateUrl('content_form_view', ['formId' => $form->getId()]));
}
}
return $this->render('@ContentBundle/Default/refer.html.twig', ['formRefer' => $formRefer->createView(), 'form' => $form]);
}
}