![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/FormBundle/Controller/ |
<?php namespace Mautic\FormBundle\Controller; use Doctrine\Persistence\ManagerRegistry; use Mautic\CoreBundle\Controller\AjaxController as CommonAjaxController; use Mautic\CoreBundle\Factory\MauticFactory; use Mautic\CoreBundle\Factory\ModelFactory; use Mautic\CoreBundle\Helper\CoreParametersHelper; use Mautic\CoreBundle\Helper\InputHelper; use Mautic\CoreBundle\Helper\UserHelper; use Mautic\CoreBundle\Security\Permissions\CorePermissions; use Mautic\CoreBundle\Service\FlashBag; use Mautic\CoreBundle\Translation\Translator; use Mautic\FormBundle\Collector\AlreadyMappedFieldCollectorInterface; use Mautic\FormBundle\Collector\FieldCollectorInterface; use Mautic\FormBundle\Crate\FieldCrate; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; class AjaxController extends CommonAjaxController { public function __construct( private FieldCollectorInterface $fieldCollector, private AlreadyMappedFieldCollectorInterface $mappedFieldCollector, ManagerRegistry $doctrine, MauticFactory $factory, ModelFactory $modelFactory, UserHelper $userHelper, CoreParametersHelper $coreParametersHelper, EventDispatcherInterface $dispatcher, Translator $translator, FlashBag $flashBag, RequestStack $requestStack, CorePermissions $security ) { parent::__construct($doctrine, $factory, $modelFactory, $userHelper, $coreParametersHelper, $dispatcher, $translator, $flashBag, $requestStack, $security); } /** * @param string $name */ public function reorderFieldsAction(Request $request, $bundle, $name = 'fields'): JsonResponse { if ('form' === $name) { $name = 'fields'; } $dataArray = ['success' => 0]; $sessionId = InputHelper::clean($request->request->get('formId')); $sessionName = 'mautic.form.'.$sessionId.'.'.$name.'.modified'; $session = $request->getSession(); $orderName = ('fields' == $name) ? 'mauticform' : 'mauticform_action'; $order = InputHelper::clean($request->request->get($orderName)); $components = $session->get($sessionName); if (!empty($order) && !empty($components)) { $components = array_replace(array_flip($order), $components); $session->set($sessionName, $components); $dataArray['success'] = 1; } return $this->sendJsonResponse($dataArray); } public function getFieldsForObjectAction(Request $request): JsonResponse { $formId = $request->get('formId'); $mappedObject = $request->get('mappedObject'); $mappedField = $request->get('mappedField'); $mappedFields = $this->mappedFieldCollector->getFields($formId, $mappedObject); $fields = $this->fieldCollector->getFields($mappedObject); $fields = $fields->removeFieldsWithKeys($mappedFields, $mappedField); return $this->sendJsonResponse( [ 'fields' => array_map( fn (FieldCrate $field): array => [ 'label' => $field->getName(), 'value' => $field->getKey(), 'isListType' => $field->isListType(), ], $fields->getArrayCopy() ), ] ); } public function reorderActionsAction(Request $request): JsonResponse { return $this->reorderFieldsAction($request, 'actions'); } public function updateFormFieldsAction(Request $request): JsonResponse { $formId = (int) $request->request->get('formId'); $dataArray = ['success' => 0]; $model = $this->getModel('form'); $entity = $model->getEntity($formId); $formFields = empty($entity) ? [] : $entity->getFields(); $fields = []; foreach ($formFields as $field) { if ('button' != $field->getType()) { $properties = $field->getProperties(); $options = []; if (!empty($properties['list']['list'])) { // If the field is a SELECT field then the data gets stored in [list][list] $optionList = $properties['list']['list']; } elseif (!empty($properties['optionlist']['list'])) { // If the field is a radio or a checkbox then it will be stored in [optionlist][list] $optionList = $properties['optionlist']['list']; } if (!empty($optionList)) { foreach ($optionList as $listItem) { if (is_array($listItem) && isset($listItem['value']) && isset($listItem['label'])) { // The select box needs values to be [value] => label format so make sure we have that style then put it in $options[$listItem['value']] = $listItem['label']; } elseif (!is_array($listItem)) { // Keeping for BC $options[] = $listItem; } } } $fields[] = [ 'id' => $field->getId(), 'label' => $field->getLabel(), 'alias' => $field->getAlias(), 'type' => $field->getType(), 'options' => $options, ]; // Be sure to not pollute the symbol table. unset($optionList); } } $dataArray['fields'] = $fields; $dataArray['success'] = 1; return $this->sendJsonResponse($dataArray); } /** * Ajax submit for forms. */ public function submitAction(Request $request): JsonResponse { $response = $this->forwardWithPost('Mautic\FormBundle\Controller\PublicController::submitAction', $request->request->all(), [], ['ajax' => true]); $responseData = json_decode($response->getContent(), true); $success = (!in_array($response->getStatusCode(), [404, 500]) && empty($responseData['errorMessage']) && empty($responseData['validationErrors'])); $message = ''; $type = ''; if (isset($responseData['successMessage'])) { $message = $responseData['successMessage']; $type = 'notice'; } elseif (isset($responseData['errorMessage'])) { $message = $responseData['errorMessage']; $type = 'error'; } $data = array_merge($responseData, ['message' => $message, 'type' => $type, 'success' => $success]); return $this->sendJsonResponse($data); } }