Your IP : 216.73.217.79


Current Path : /var/www/v3.cesa.co.za/src/ContentBundle/Controller/
Upload File :
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]);
    }
}