<?php
use Bitrix\Main\Context;
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
$arAnswer['status'] = false;
$request = Context::getCurrent()->getRequest();
if (!CModule::IncludeModule("form"))
die();
$server = Context::getCurrent()->getServer();
$arRequest['recaptcha'] = $request->getPost("g-recaptcha-response");
$arRequest['addr'] = $server->getServerAddr();
$errors = array();
$arValues = array();
$webFormID = $request->getPost("WEB_FORM_ID");
if (CForm::GetDataByID($webFormID, $form, $questions, $answers)) {
foreach ($answers as $key => $answer) {
$answerKey = 'form_'.$answer[0]['FIELD_TYPE'].'_'.$answer[0]['ID'];
$arValues[$answerKey] = $request->getPost($answerKey);
if ( ($questions[$key]['REQUIRED'] == 'Y') && (strlen(trim($arValues[$answerKey])) == 0) )
$errors[] = 'Заполните поле "'.$questions[$key]['TITLE'].'"';
}
}
foreach ($_FILES as $key => $arFile) {
$arValues[$key] = $arFile;
}
if (!$request->getPost('policy'))
$errors[] = 'Необходимо согласиться с условиями «Пользовательского соглашения»';
if (!takeCaptcha($arRequest['recaptcha'], $arRequest['addr']))
$errors[] = 'Пройдите проверку на робота';
if (count($errors) > 0) {
$arAnswer['errors'] = '<p>'.implode('<br />', $errors).'</p>';
} else {
if ($RESULT_ID = CFormResult::Add($webFormID, $arValues)) {
if (CFormResult::Mail($RESULT_ID)) {
$arAnswer['status'] = true;
$arAnswer['success'] = '<p>Ваша заявка отправлена!</p>';
} else {
$arAnswer['errors'] = '<p>Ошибка при отправке сообщения! Обратитесь к администратору сайта</p>';
}
} else {
$arAnswer['errors'] = '<p>Ошибка при создании сообщения! Обратитесь к администратору сайта</p>';
}
}
echo json_encode($arAnswer);
function takeCaptcha($hash, $addr) {
$request = new \Bitrix\Main\Web\HttpClient();
$post = $request->post("https://www.google.com/recaptcha/api/siteverify", Array(
"secret" => "6Ldm4zQUAAAAAKA9ow4p-GaKaaFE439elzCrVAdW",
"response" => $hash,
"remoteip" => $addr
));
$post = json_decode($post);
if ($post->success == 'true') {
return true;
}
return false;
}