/** * @return Form */ public function create() { if (!in_array($this->params->get('TYPE'), array('IBLOCK', 'HLBLOCK', 'CUSTOM'))) { $this->params->set('TYPE', 'CUSTOM'); } switch ($this->params->get('TYPE')) { case 'IBLOCK': $builder = 'Citfact\\Form\\Builder\\IBlockBuilder'; $storage = 'Citfact\\Form\\Storage\\IBlockStorage'; $validator = 'Citfact\\Form\\Validator\\IBlockValidator'; break; case 'HLBLOCK': $builder = 'Citfact\\Form\\Builder\\UserFieldBuilder'; $storage = 'Citfact\\Form\\Storage\\HighLoadBlockStorage'; $validator = 'Citfact\\Form\\Validator\\UserFieldValidator'; break; case 'CUSTOM': $builder = $this->params->get('BUILDER') ?: Config\Option::get('citfact.form', 'BUILDER'); $storage = $this->params->get('STORAGE') ?: Config\Option::get('citfact.form', 'STORAGE'); $validator = $this->params->get('VALIDATOR') ?: Config\Option::get('citfact.form', 'VALIDATOR'); break; } $mailer = new Mailer($this->params, new \CEventType(), new \CEvent()); $form = new Form($this->params, new $builder(), new $validator(), new $storage()); $form->setMailer($mailer); return $form; }
// Builder saves data to reduce the number of requests if ($this->startResultCache()) { $arResult['BUILDER_DATA'] = $form->createBuilderData()->getBuilderData(); $this->endResultCache(); } $form->setBuilderData($arResult['BUILDER_DATA']); $form->handleRequest($app->getContext()->getRequest()); if ($form->isValid()) { $form->save(); // If the data is successfully preserved produce redirect if ($params->get('AJAX') != 'Y') { $redirectPath = $params->get('REDIRECT_PATH') ?: getenv('REQUEST_URI'); LocalRedirect($redirectPath); } } $result->set('BUILDER', $form->getBuilderData()); $result->set('VIEW', $form->getViewData()); $result->set('SUCCESS', $form->isValid()); $result->set('ERRORS', $form->getErrors(false)); $result->set('CSRF', $form->getCsrfToken()); $result->set('CAPTCHA', $form->getCaptchaToken()); $result->set('FORM_NAME', $form->getFormName()); $result->set('IS_AJAX', getenv('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'); if ($result->get('IS_AJAX') && $form->isSubmitted()) { $GLOBALS['APPLICATION']->restartBuffer(); header('Content-Type: application/json'); ob_start(); $arResult = $result->toArray(); $this->includeComponentTemplate(); $bufferTemplate = ob_get_contents(); ob_clean();