| Current Path : /var/www/v3.cesa.co.za/src/ContentBundle/Controller/ |
| Current File : /var/www/v3.cesa.co.za/src/ContentBundle/Controller/FormItemController.php |
<?php
namespace App\ContentBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use App\ContentBundle\Form\Type\FormCompletedType;
use App\CoreBundle\Services\ServiceGetterManager;
class FormItemController extends AbstractController
{
#[Route('/form-item/{formId}/list.html', name: 'content_form_item_list_json')]
public function listAction(Request $request, ServiceGetterManager $sg, $formId = '0')
{
$formItemManager = $sg->get('form_item.manager');
$formItemsJson = $request->get('formItemsJson');
$returnJson = $request->get('returnJson');
$formItemsArray = array('formItems' => array());
$form = $sg->get('form_manager.manager')->find($formId);
$formId = '0';
$formCompleted = null;
if (is_object($form)) {
$formId = $form->getId();
$formCompleted = $sg->get('form_completed.manager')->getObject($form);
}
if (is_object($form) && strlen($formItemsJson) <= 0) {
$formItemObjects = $formItemManager->findByForm($form);
foreach ($formItemObjects as $formItemObject) {
$formItemsArray['formItems'][] = $formItemObject->getAsArray($form);
}
} else {
$formItemsArray = json_decode($formItemsJson, true);
}
if (!isset($formItemsArray['formItems'])) {
$formItemsArray['formItems'] = array();
}
$itemCount = 0;
foreach ($formItemsArray['formItems'] as $itemCnt => $formItem) {
if (strlen($formItemsArray['formItems'][$itemCnt]['id']) <= 0) {
$formItemsArray['formItems'][$itemCnt]['id'] = $itemCount;
}
if ($formItemsArray['formItems'][$itemCnt]['form_item_type'] == 'link') {
$formItem = $formItemManager->find($formItemsArray['formItems'][$itemCnt]['id']);
if (is_object($formItem)) {
if (!is_object($form)) {
$form = new Form();
}
$formItemsArray['formItems'][$itemCnt] = $formItem->getAsArray($form);
} else {
$formItemsArray['formItems'][$itemCnt]['id'] = $itemCount;
}
}
if (!isset($formItemsArray['formItems'][$itemCnt]['widget_name'])) {
$formItemsArray['formItems'][$itemCnt]['widget_name'] = $sg->get('form_item_type.manager')->getWidgetNameByType($formItemsArray['formItems'][$itemCnt]['form_item_type']);
$formItemsArray['formItems'][$itemCnt]['widget_id'] = $formId . '-' . $formItemsArray['formItems'][$itemCnt]['id'];
}
$formItemsArray['formItems'][$itemCnt]['form_builder'] = true;
$itemCount++;
}
$formCompletedForm = $this->createForm('iga_contentbundle_formcompletedtype', $formCompleted, array('form_items' => $formItemsArray['formItems']));
if (strlen($formItemsJson) <= 0) {
$formItemsJson = json_encode($formItemsArray);
}
if ($returnJson) {
$response = new Response(json_encode($formItemsJson));
$response->headers->set('X-robots-tag', 'noindex');
$response->headers->set('Content-Type', 'application/json');
return $response;
} else {
return $this->render(
'ContentBundle:FormItem:list.render.html.twig',
array(
'formItems' => $formItemsArray,
'formCompletedForm' => $formCompletedForm->createView(),
'formId' => $formId,
)
);
}
}
#[Route('/form/{formCompletedId}/complete.html', name: 'content_form_complete', defaults: ['formCompletedId' => 0])]
public function completedFormAction(Request $request, ServiceGetterManager $sg, $formCompletedId)
{
$formCompletedManager = $sg->get('form_completed.manager');
$formCompleted = $formCompletedManager->find($formCompletedId);
if (is_object($formCompleted)) {
$html = $formCompletedManager->getCompletedFormHtml($formCompleted);
} else {
$html = 'Invalid form';
}
$response = new Response($html);
$response->headers->set('Content-Type', 'text/html');
return $response;
}
#[Route('/form/{formCompletedId}/complete/edit.html', name: 'content_form_complete_edit')]
public function completedFormEditAction(Request $request, ServiceGetterManager $sg, $formCompletedId)
{
try {
$formCompletedManager = $sg->get('form_completed.manager');
$formCompleted = $formCompletedManager->find($formCompletedId);
$formSubmitted = 0;
$form = $sg->get('form_manager.manager')->find($formCompleted->getForm()->getId());
if ($formCompleted->getCreatedBy() != '') {
$userList = $sg->get('user_list.manager')->find($formCompleted->getCreatedBy());
}
if (!is_object($form)) {
echo 'Invalid form';
exit;
}
$formItemObjects = $sg->get('form_item.manager')->findByForm($form);
$formItems = array();
foreach ($formItemObjects as $formItemObject) {
$formItems[] = $formItemObject->getAsArray($form);
}
$formCompletedForm = $this->createForm(FormCompletedType::class, $formCompleted, array('form_items' => $formItems, 'form_edit_user' => $userList));
$errorMessage = '';
if ($request->getMethod() == 'POST') {
$formSubmitted = 1;
$formCompletedValues = $request->get('form_completed');
// echo 'values: ' . count($formCompletedValues);
// exit;
$formCompletedForm->handleRequest($request);
$errors = array();
if ($formCompletedForm->isValid() && count($errors) <= 0) {
$formCompletedValues['form'] = $form;
$result = $sg->get('form_completed.manager')->saveFromRequest($formCompletedValues, $formCompleted);
if (strlen($result) <= 0) {
if ($form->isSurvey()) {
$idNumber = $request->get('survey_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' => [],
'studentId' => $student->getId(),
];
$sg->get('key_value.manager')->setKeyValue(
'survey_data_' . $form->getId() . '_' . $student->getId() . '_',
$data,
true
);
}
$this->addFlash('success', 'Form details saved.');
if ($form->isAddReferral()) {
return $this->redirect($this->generateUrl('content_refer', ['formId' => $form->getId()]));
}
} else {
$this->addFlash('danger', 'An error occurred: ' . $result);
}
} else {
// echo $formCompletedForm->getErrors(true);
// exit;
$this->addFlash('danger', 'Your information has not been saved. Please check your form for incomplete fields and save.');
}
}
$formRendered = array(
'formBody' => $sg->getTwig()->render(
'@ContentBundle/Form/form.html.twig',
array(
'form' => $formCompletedForm->createView(),
'formItems' => $formItems,
'formObject' => $form,
'formCompletedId' => $formCompletedId,
'formSubmitted' => $formSubmitted,
)
),
'formTitle' => $form->getTitle(),
'id' => $form->getId(),
'formObject' => $form,
);;
return $this->render(
'@ContentBundle/Default/view.html.twig',
array(
'form' => $formRendered,
'formCompletedId' => $formCompletedId,
'formSubmitted' => $formSubmitted,
)
);
} catch (\Exception $ex) {
// $logger = $sg->get('error_log.manager');
// $logger->error('Error on form data: ' . $ex->getMessage());
echo $ex->getMessage() . ' - ' . $ex->getTraceAsString();
}
}
public function exportCompletedFormsAction(Request $request, ServiceGetterManager $sg, $formId)
{
try {
$formCompletedManager = $sg->get('form_completed.manager');
$formManager = $sg->get('form_manager.manager');
$form = $formManager->find($formId);
if (!is_object($form)) {
throw new \Exception('Invalid form');
}
$userExportCsv = $formCompletedManager->generateEventExcel($form);
$response = new Response($userExportCsv);
$response->headers->set('Content-Type', 'application/vnd.ms-excel');
$response->headers->set('Content-Disposition', 'attachment; filename="form-data-export ' . $form->getTitle() . ' ' . date('Y-m-d') . '.xlsx"');
return $response;
} catch (\Exception $ex) {
if ($ex->getCode() != 403) {
$logger = $sg->get('error_log.manager');
$logger->error('Error on form data export: ' . $ex->getMessage());
if ($ex->getCode() != 4003)
return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage())));
else
return $this->redirect($this->generateUrl('iga_core_403', array('message' => $ex->getMessage())));
} else {
throw new AccessDeniedException();
}
}
}
public function formCompleteAction(Request $request, $formId)
{
try {
$formItemManager = $sg->get('form_item.manager');
$userListId = $request->get('user_token');
$contentId = $request->get('contentId');
if (strlen($userListId) > 0) {
//Auto login for user from URL
$securityContext = $sg->get('security.token_storage');
$userList = $sg->get('user_list.manager')->find($userListId);
if (!is_object($userList)) {
throw new \Exception('Invalid user specified');
}
$token = new UsernamePasswordToken($userList->getUsername(), $userList->getPassword(), 'secured_area', $userList->getRoles());
$token->setUser($userList);
$securityContext->setToken($token);
$event = new InteractiveLoginEvent($request, $token);
$sg->get("event_dispatcher")->dispatch("security.interactive_login", $event);
$sg->get('user_list.manager')->decideContactType($request);
} else {
$userList = $this->getUser();
}
$form = $sg->get('form_manager.manager')->find($formId);
$formCompleted = null;
if (is_object($form)) {
$formId = $form->getId();
$formCompleted = $sg->get('form_completed.manager')->getObject($form, $userList);
} else {
throw new \Exception('Invalid form!');
}
$formItemObjects = $formItemManager->findByForm($form);
$formItemsArray = array('formItems' => array());
foreach ($formItemObjects as $formItemObject) {
$formItemsArray['formItems'][] = $formItemObject->getAsArray($form);
}
$itemCount = 0;
foreach ($formItemsArray['formItems'] as $itemCnt => $formItem) {
if (!isset($formItemsArray['formItems'][$itemCnt]['widget_name'])) {
$formItemsArray['formItems'][$itemCnt]['widget_name'] = $sg->get('form_item_type.manager')->getWidgetNameByType(
$formItemsArray['formItems'][$itemCnt]['form_item_type']
);
$formItemsArray['formItems'][$itemCnt]['widget_id'] = $formId . '-' . $formItemsArray['formItems'][$itemCnt]['id'];
}
$formItemsArray['formItems'][$itemCnt]['form_builder'] = true;
$itemCount++;
}
//, 'form_values' => $formCompletedValues
$formCompletedForm = $this->createForm(
FormCompletedType::class,
$formCompleted,
array('form_items' => $formItemsArray['formItems'])
);
$pageTitleString = $form->getTitle();
$descriptionString = 'Complete online form';
$keyWordString = 'online form';
$errorMessage = '';
if ($request->getMethod() == 'POST') {
$formCompletedForm->handleRequest($request);
$formCompletedValues = $request->get('form_completed');
$formCompletedValues['form'] = $form;
$errors = array();
if ($formCompletedForm->isValid()) {
foreach ($formItemObjects as $formItemObject) {
if ($formItemObject->getIsRequired() && $formCompletedForm->has($form->getId() . '-' . $formItemObject->getId())) {
if (!isset($formCompletedValues[$form->getId() . '-' . $formItemObject->getId()])) {
$formCompletedForm->get($form->getId() . '-' . $formItemObject->getId())->addError(new FormError('Please complete this field'));
$errors[] = '1';
} elseif (
!is_array($formCompletedValues[$form->getId() . '-' . $formItemObject->getId()]) &&
strlen(trim($formCompletedValues[$form->getId() . '-' . $formItemObject->getId()])) <= 0
) {
$formCompletedForm->get($form->getId() . '-' . $formItemObject->getId())->addError(new FormError('Please complete this field'));
$errors[] = '1';
} elseif (trim($formCompletedValues[$form->getId() . '-' . $formItemObject->getId()]) == '0') {
$formCompletedForm->get($form->getId() . '-' . $formItemObject->getId())->addError(new FormError('Please complete this field'));
$errors[] = '1';
}
}
}
} else {
$errorMessage = $formCompletedForm->getErrors(true);
}
if ($formCompletedForm->isValid() && count($errors) <= 0) {
$result = $sg->get('form_completed.manager')->saveFromRequest(
$formCompletedValues,
$formCompleted,
$contentId,
array('valid' => $formCompletedForm->isValid())
);
if (strlen($result) <= 0) {
if (strlen($contentId) > 0) {
$this->addFlash(
'success',
'Thank you very much. Our staff have received your data via e-mail.'
);
return $this->redirect(
$this->generateUrl('iga_content_page', array('contentId' => $contentId))
);
}
// $this->addFlash('success', $languagePhrasesManager->translate('RSVP details saved. Thank you very much!'));
return $this->render(
'ContentBundle:FormItem:form.complete.thanks.html.twig',
array(
'pageTitleString' => $pageTitleString,
'descriptionString' => $descriptionString,
'keyWordString' => $keyWordString,
'userLanguage' => $userLanguage,
)
);
} else {
$this->addFlash('error', 'An error occurred' . ': ' . $result);
}
} else {
$this->addFlash(
'error',
'Your form information has not been saved. Please check your form for incomplete fields and save.'
);
}
}
return $this->render(
'ContentBundle:FormItem:form.complete.html.twig',
array(
'pageTitleString' => $pageTitleString,
'descriptionString' => $descriptionString,
'keyWordString' => $keyWordString,
'formItems' => $formItemsArray,
'formCompletedForm' => $formCompletedForm->createView(),
'formId' => $formId,
'form' => $form,
'errorMessage' => $errorMessage,
//'messageRespondant' => $messageRespondant,
'messageRespondant' => null,
'contentId' => $contentId,
)
);
} catch (\Exception $ex) {
if ($ex->getCode() != 403) {
$logger = $sg->get('error_log.manager');
$logger->error('Error on complete form action: ' . $ex->getMessage() . "\r\n" . $ex->getTraceAsString());
if ($ex->getCode() != 4003)
return $this->redirect($this->generateUrl('iga_core_500', array('message' => $ex->getMessage())));
else
return $this->redirect($this->generateUrl('iga_core_403', array('message' => $ex->getMessage())));
} else {
throw new AccessDeniedException();
}
}
}
}