diff --git a/api/index.php b/api/index.php index f2fd852..ec32580 100644 --- a/api/index.php +++ b/api/index.php @@ -90,6 +90,30 @@ function checkRequestIsLocal() return false; } +function checkRecaptchaRequest($token, $ipAddress) +{ + $c = curl_init(); + curl_setopt($c, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify"); + curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 30); + curl_setopt($c, CURLOPT_TIMEOUT, 30); + curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($c, CURLOPT_POST, 1); + curl_setopt($c, CURLOPT_POSTFIELDS, [ + "secret" => RECAPTCHA_SECRET_KEY, + "response" => $token, + "remoteip" => $ipAddress, + ]); + + $response = curl_exec($c) or die(curl_error($c)); + curl_close($c); + + $response_decoded = json_decode($response, true); + + return $response_decoded['success']; +} + if($_SERVER['REMOTE_USER'] && strpos($_SERVER['REMOTE_USER'], "Bearer") > -1) { $token = str_replace("Bearer ", "", $_SERVER['REMOTE_USER']); @@ -567,201 +591,209 @@ switch($PARAM_1) { $ipAddress = GeoIp\Manager::getRealIp(); $result = GeoIp\Manager::getDataResult($ipAddress, "ru"); - - $_REQUEST['FORM_FIELD_REGION'] = $result->getGeoData()->regionName.", ".$result->getGeoData()->cityName; - - $error = ""; $arr = Array(); - $form_errors = Array(); - $arParams['request'] = $_REQUEST; - $attach = false; - $form_code = trim($_REQUEST['form']); - - $form = CForm::GetBySID($form_code); - $form = $form->Fetch(); - - $formQuestions = Array(); - $formAnswers = Array(); - - $sort = "s_sort"; - $order = "asc"; - $filtered = false; - $resFormQuestions = CFormField::GetList($form['ID'], "N", $$sort, $$order, Array(), $$filtered); - while($arFormQuestion = $resFormQuestions->Fetch()) + if(checkRecaptchaRequest($_REQUEST['recaptcha_token'], $ipAddress)) { - $rsAnswers = CFormAnswer::GetList($arFormQuestion['ID'], $$sort, $$order, Array(), $$filtered); - $arAnswer = $rsAnswers->Fetch(); + $_REQUEST['FORM_FIELD_REGION'] = $result->getGeoData()->regionName.", ".$result->getGeoData()->cityName; - $arFormQuestion['ANSWER'] = $arAnswer; - $formQuestions[] = $arFormQuestion; - } + $error = ""; + $form_errors = Array(); + $arParams['request'] = $_REQUEST; + $attach = false; - $c = 1; - foreach($formQuestions AS $fq) - { - if($fq['REQUIRED'] == "Y") + $form_code = trim($_REQUEST['form']); + + $form = CForm::GetBySID($form_code); + $form = $form->Fetch(); + + $formQuestions = Array(); + $formAnswers = Array(); + + $sort = "s_sort"; + $order = "asc"; + $filtered = false; + $resFormQuestions = CFormField::GetList($form['ID'], "N", $$sort, $$order, Array(), $$filtered); + while($arFormQuestion = $resFormQuestions->Fetch()) { - if($_REQUEST[$fq['SID']] == "" && $fq['ANSWER']['FIELD_TYPE'] != "file") + $rsAnswers = CFormAnswer::GetList($arFormQuestion['ID'], $$sort, $$order, Array(), $$filtered); + $arAnswer = $rsAnswers->Fetch(); + + $arFormQuestion['ANSWER'] = $arAnswer; + $formQuestions[] = $arFormQuestion; + } + + $c = 1; + foreach($formQuestions AS $fq) + { + if($fq['REQUIRED'] == "Y") { - array_push($form_errors, $fq['SID']); - } - if($fq['ANSWER']['FIELD_TYPE'] == "email") - { - if(!filter_var($_REQUEST[$fq['SID']], FILTER_VALIDATE_EMAIL)) + if($_REQUEST[$fq['SID']] == "" && $fq['ANSWER']['FIELD_TYPE'] != "file") { array_push($form_errors, $fq['SID']); } - } - } - - if($fq['ANSWER']['FIELD_TYPE'] == "file") - { - if(is_array($_FILES[$fq['SID']])) - { - if(CFormValidator::Execute( - array("PARAMS" => Array("EXT" => "doc,docx,rtf,pdf,txt,jpg,jpeg,png,gif,bmp"),"NAME" => "file_type"), - array(), - array(), - array($_FILES[$fq['SID']]) - )) + if($fq['ANSWER']['FIELD_TYPE'] == "email") { - $formAnswers["form_".$fq['ANSWER']['FIELD_TYPE']."_".$fq['ANSWER']['ID']] = $_FILES[$fq['SID']]; - $attach = true; + if(!filter_var($_REQUEST[$fq['SID']], FILTER_VALIDATE_EMAIL)) + { + array_push($form_errors, $fq['SID']); + } + } + } + + if($fq['ANSWER']['FIELD_TYPE'] == "file") + { + if(is_array($_FILES[$fq['SID']])) + { + if(CFormValidator::Execute( + array("PARAMS" => Array("EXT" => "doc,docx,rtf,pdf,txt,jpg,jpeg,png,gif,bmp"),"NAME" => "file_type"), + array(), + array(), + array($_FILES[$fq['SID']]) + )) + { + $formAnswers["form_".$fq['ANSWER']['FIELD_TYPE']."_".$fq['ANSWER']['ID']] = $_FILES[$fq['SID']]; + $attach = true; + } + else + { + array_push($form_errors, $fq['SID']); + } } else { - array_push($form_errors, $fq['SID']); - } - } - else - { - if($fq['REQUIRED'] == "Y") - { - array_push($form_errors, $fq['SID']); - } - } - } - else - { - if(strpos($fq['TITLE'], "utm_") > -1) - { - $formAnswers["form_".$fq['ANSWER']['FIELD_TYPE']."_".$fq['ANSWER']['ID']] = $_COOKIE[strtolower($fq['TITLE'])]; - } - else - { - $formAnswers["form_".$fq['ANSWER']['FIELD_TYPE']."_".$fq['ANSWER']['ID']] = $_REQUEST[$fq['SID']]; - } - } - - $arr['q'][] = $fq; - - $c++; - } - - if(!empty($_SESSION[$_REQUEST['form']."_CAPTCHA"])) - { - if($_SESSION[$_REQUEST['form'].'_CAPTCHA'] != $_REQUEST[$_REQUEST['form'].'_CAPTCHA']) - { - array_push($form_errors, $_REQUEST['form'].'_CAPTCHA'); - } - } - - $arr['FILES'] = $_FILES; - - if(count($form_errors) == 0) - { - if($RESULT_ID = CFormResult::Add($form['ID'], $formAnswers)) - { - $arr['status'] = "complete"; - - if($attach || array_key_exists("FORM_FILLING", $_REQUEST)) - { - if($attach) - { - $arAnswer = CFormResult::GetDataByID($RESULT_ID, Array(), $arResult, $arAnswer2); - - $fields = Array(); - $attached_files = Array(); - foreach($arAnswer AS $k => $v) + if($fq['REQUIRED'] == "Y") { - $fields[$k] = $v[0]['USER_TEXT']; - if($v[0]['USER_FILE_ID'] != NULL) - { - array_push($attached_files, $v[0]['USER_FILE_ID']); - } + array_push($form_errors, $fq['SID']); } + } + } + else + { + if(strpos($fq['TITLE'], "utm_") > -1) + { + $formAnswers["form_".$fq['ANSWER']['FIELD_TYPE']."_".$fq['ANSWER']['ID']] = $_COOKIE[strtolower($fq['TITLE'])]; + } + else + { + $formAnswers["form_".$fq['ANSWER']['FIELD_TYPE']."_".$fq['ANSWER']['ID']] = $_REQUEST[$fq['SID']]; + } + } - $post_event_name = "FORM_FILLING_".$_REQUEST['form']; + $arr['q'][] = $fq; - CEvent::Send($post_event_name, "s1", $fields, "N", "", $attached_files); + $c++; + } + + if(!empty($_SESSION[$_REQUEST['form']."_CAPTCHA"])) + { + if($_SESSION[$_REQUEST['form'].'_CAPTCHA'] != $_REQUEST[$_REQUEST['form'].'_CAPTCHA']) + { + array_push($form_errors, $_REQUEST['form'].'_CAPTCHA'); + } + } + + $arr['FILES'] = $_FILES; + + if(count($form_errors) == 0) + { + if($RESULT_ID = CFormResult::Add($form['ID'], $formAnswers)) + { + $arr['status'] = "complete"; + + if($attach || array_key_exists("FORM_FILLING", $_REQUEST)) + { + if($attach) + { + $arAnswer = CFormResult::GetDataByID($RESULT_ID, Array(), $arResult, $arAnswer2); + + $fields = Array(); + $attached_files = Array(); + foreach($arAnswer AS $k => $v) + { + $fields[$k] = $v[0]['USER_TEXT']; + if($v[0]['USER_FILE_ID'] != NULL) + { + array_push($attached_files, $v[0]['USER_FILE_ID']); + } + } + + $post_event_name = "FORM_FILLING_".$_REQUEST['form']; + + CEvent::Send($post_event_name, "s1", $fields, "N", "", $attached_files); + } + else + { + CFormResult::Mail($RESULT_ID); + } } else { CFormResult::Mail($RESULT_ID); } + + if($form_code === "FORM_LEASING_REQUESTS") + { + $url = API_HOST."/site/RequestFromSite"; + + $payload = json_encode([ + "region" => $_REQUEST['FORM_FIELD_REGION'], + "name" => $REQ['FORM_FIELD_FIO'], + "phone" => $REQ['FORM_FIELD_PHONE'], + "email" => $REQ['FORM_FIELD_EMAIL'], + "org_title" => $REQ['FORM_FIELD_COMPANY'], + "brand" => $REQ['FORM_FIELD_BRAND'], + "model" => $REQ['FORM_FIELD_MODEL'], + "modification" => $REQ['FORM_FIELD_MODIFICATION'], + "price" => (int) $REQ['FORM_FIELD_PRICE'], + "prepaid" => (int) $REQ['FORM_FIELD_PREPAID'], + "term" => (int) $REQ['FORM_FIELD_TERM'], + "redemption" => (int) $REQ['FORM_FIELD_REDEMPTION'], + "utm_source" => $_COOKIE['utm_source'], + "utm_medium" => $_COOKIE['utm_medium'], + "utm_campaign" => $_COOKIE['utm_campaign'], + "utm_term" => $_COOKIE['utm_term'], + "utm_content" => $_COOKIE['utm_content'], + "page_url" => $REQ['FORM_FIELD_PAGE_URL'], + "page_name" => $REQ['FORM_FIELD_PAGE_NAME'], + ]); + + $c = curl_init(); + curl_setopt($c, CURLOPT_URL, API_HOST."/site/RequestFromSite"); + curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 30); + curl_setopt($c, CURLOPT_TIMEOUT, 30); + curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($c, CURLOPT_POST, 1); + curl_setopt($c, CURLOPT_POSTFIELDS, $payload); + curl_setopt($c, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); + + $response = curl_exec($c); + curl_close($c); + } } else { - CFormResult::Mail($RESULT_ID); - } - - //HERE - if($form_code === "FORM_LEASING_REQUESTS") - { - $url = API_HOST."/site/RequestFromSite"; - - $payload = json_encode([ - "region" => $_REQUEST['FORM_FIELD_REGION'], - "name" => $REQ['FORM_FIELD_FIO'], - "phone" => $REQ['FORM_FIELD_PHONE'], - "email" => $REQ['FORM_FIELD_EMAIL'], - "org_title" => $REQ['FORM_FIELD_COMPANY'], - "brand" => $REQ['FORM_FIELD_BRAND'], - "model" => $REQ['FORM_FIELD_MODEL'], - "modification" => $REQ['FORM_FIELD_MODIFICATION'], - "price" => (int) $REQ['FORM_FIELD_PRICE'], - "prepaid" => (int) $REQ['FORM_FIELD_PREPAID'], - "term" => (int) $REQ['FORM_FIELD_TERM'], - "redemption" => (int) $REQ['FORM_FIELD_REDEMPTION'], - "utm_source" => $_COOKIE['utm_source'], - "utm_medium" => $_COOKIE['utm_medium'], - "utm_campaign" => $_COOKIE['utm_campaign'], - "utm_term" => $_COOKIE['utm_term'], - "utm_content" => $_COOKIE['utm_content'], - "page_url" => $REQ['FORM_FIELD_PAGE_URL'], - "page_name" => $REQ['FORM_FIELD_PAGE_NAME'], - ]); - - $c = curl_init(); - curl_setopt($c, CURLOPT_URL, API_HOST."/site/RequestFromSite"); - curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 30); - curl_setopt($c, CURLOPT_TIMEOUT, 30); - curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); - curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); - curl_setopt($c, CURLOPT_POST, 1); - curl_setopt($c, CURLOPT_POSTFIELDS, $payload); - curl_setopt($c, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); - - $response = curl_exec($c); - curl_close($c); + $arr['status'] = "error"; + global $strError; + $arr['message'] = $strError; } } else { $arr['status'] = "error"; - global $strError; - $arr['message'] = $strError; + $arr['errors'] = $form_errors; } + + $arr['request'] = $_REQUEST; + $arr['answers'] = $formAnswers; } else { $arr['status'] = "error"; - $arr['errors'] = $form_errors; + $arr['message'] = "recaptcha_error"; } - $arr['request'] = $_REQUEST; - $arr['answers'] = $formAnswers; print json_encode($arr); die(); diff --git a/local/components/evolution/form.leasing/templates/.default/script.js b/local/components/evolution/form.leasing/templates/.default/script.js index d1964c2..85591ad 100644 --- a/local/components/evolution/form.leasing/templates/.default/script.js +++ b/local/components/evolution/form.leasing/templates/.default/script.js @@ -56,32 +56,46 @@ function form_leasing_request_submit() formData.append("FORM_FIELD_TERM", $("#FORM_FIELD_TERM").val() ? $("#FORM_FIELD_TERM").val() : ""); formData.append("FORM_FIELD_REDEMPTION", $("#FORM_FIELD_REDEMPTION").val() ? $("#FORM_FIELD_REDEMPTION").val() : ""); - $.ajax( + grecaptcha.ready(function() { - url: "/api/forms/", type: 'POST', success: function(response) + grecaptcha.execute($("meta[name=recaptcha_site_key]").attr("content"), { action: 'submit' }).then(function(token) { - if(response.status == "complete") - { - $("#form_leasing_process").css("display","none"); - $("#form_leasing_success").css("display","flex"); + formData.append("recaptcha_token", token); - $("#send_button_text").css("display", "block"); - $("#send_button_spinner").css("display", "none"); - - leasing_form_submitting = false; - } - else if(response.status == "error") - { - for(var i in response.errors) + $.ajax({ + url: "/api/forms/", type: 'POST', success: function(response) { - $("#form_leasing_request").find("*[name="+response.errors[i]+"]").addClass("error"); + console.log("response", response); + if(response.status === "complete") + { + $("#form_leasing_process").css("display","none"); + $("#form_leasing_success").css("display","flex"); - leasing_form_submitting = false; - } - } - }, data: formData, - dataType: "json", - cache: false, contentType: false, processData: false + $("#send_button_text").css("display", "block"); + $("#send_button_spinner").css("display", "none"); + + leasing_form_submitting = false; + } + else if(response.status === "error") + { + for(var i in response.errors) + { + $("#form_leasing_request").find("*[name="+response.errors[i]+"]").addClass("error"); + } + + $("#form_leasing_process").css("display","none"); + $("#form_leasing_fail").css("display","flex").parent().css("backgroundColor", "#2C2D2E"); + + $("#send_button_text").css("display", "block"); + $("#send_button_spinner").css("display", "none"); + + leasing_form_submitting = false; + } + }, data: formData, + dataType: "json", + cache: false, contentType: false, processData: false + }); + }); }); } } diff --git a/local/components/evolution/form.leasing/templates/.default/template.php b/local/components/evolution/form.leasing/templates/.default/template.php index 518c0bd..4031251 100644 --- a/local/components/evolution/form.leasing/templates/.default/template.php +++ b/local/components/evolution/form.leasing/templates/.default/template.php @@ -84,6 +84,9 @@ $this->setFrameMode(true); + diff --git a/local/components/evolution/form.vacancy/templates/.default/script.js b/local/components/evolution/form.vacancy/templates/.default/script.js index 27d58a6..20bcd54 100644 --- a/local/components/evolution/form.vacancy/templates/.default/script.js +++ b/local/components/evolution/form.vacancy/templates/.default/script.js @@ -59,32 +59,45 @@ function form_vacancy_submit() formData.append("FORM_FIELD_PAGE_NAME", document.title); formData.append("FORM_FIELD_PAGE_URL", window.location.href); - $.ajax( + grecaptcha.ready(function() { - url: "/api/forms/", type: 'POST', success: function(response) + grecaptcha.execute($("meta[name=recaptcha_site_key]").attr("content"), { action: 'submit' }).then(function(token) { - if(response.status == "complete") + formData.append("recaptcha_token", token); + $.ajax( { - $("#form_vacancy_process").css("display","none"); - $("#form_vacancy_success").css("display","flex"); - - $("#send_button_text").css("display", "block"); - $("#send_button_spinner").css("display", "none"); - - vacancy_form_submitting = false; - } - else if(response.status == "error") - { - for(var i in response.errors) + url: "/api/forms/", type: 'POST', success: function(response) { - $("#form_vacancy").find("*[name="+response.errors[i]+"]").addClass("error"); + if(response.status == "complete") + { + $("#form_vacancy_process").css("display","none"); + $("#form_vacancy_success").css("display","flex"); - vacancy_form_submitting = false; - } - } - }, data: formData, - dataType: "json", - cache: false, contentType: false, processData: false + $("#send_button_text").css("display", "block"); + $("#send_button_spinner").css("display", "none"); + + vacancy_form_submitting = false; + } + else if(response.status == "error") + { + for(var i in response.errors) + { + $("#form_vacancy").find("*[name="+response.errors[i]+"]").addClass("error"); + } + + $("#form_vacancy_process").css("display","none"); + $("#form_vacancy_fail").css("display","flex").parent().css("backgroundColor", "#2C2D2E"); + + $("#send_button_text").css("display", "block"); + $("#send_button_spinner").css("display", "none"); + + vacancy_form_submitting = false; + } + }, data: formData, + dataType: "json", + cache: false, contentType: false, processData: false + }); + }); }); } } diff --git a/local/components/evolution/form.vacancy/templates/.default/template.php b/local/components/evolution/form.vacancy/templates/.default/template.php index ac5a7fd..6f1fae1 100644 --- a/local/components/evolution/form.vacancy/templates/.default/template.php +++ b/local/components/evolution/form.vacancy/templates/.default/template.php @@ -101,6 +101,9 @@ $this->setFrameMode(true); + diff --git a/local/templates/evolution/footer.php b/local/templates/evolution/footer.php index c76e9b7..dc89300 100644 --- a/local/templates/evolution/footer.php +++ b/local/templates/evolution/footer.php @@ -76,9 +76,9 @@

Мы используем cookies для улучшения использования сайта.

- + diff --git a/local/templates/evolution/header.php b/local/templates/evolution/header.php index ae41341..81f9818 100644 --- a/local/templates/evolution/header.php +++ b/local/templates/evolution/header.php @@ -49,6 +49,7 @@ IncludeTemplateLangFile(__FILE__); +