add capchta frm subsripts
This commit is contained in:
@@ -1,13 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
$ihash = add_hash_frm();?>
|
||||||
<div class="mob-subscript">
|
<div class="mob-subscript">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="right_title"><?=vij_lang('email_title', LANG_VERSION)?></div>
|
<div class="right_title"><?=vij_lang('email_title', LANG_VERSION)?></div>
|
||||||
<div id="subscript-mail">
|
<div id="subscript-mail">
|
||||||
<form class="form-right" action="https://vetandlife.ru/subscript" method="post">
|
<form class="form-right" id="form-right" action="https://vetandlife.ru/subscript" method="post">
|
||||||
<input сlass="frm_mail" type="email" required="" name="email" placeholder="<?=vij_lang('your_mail', LANG_VERSION)?>">
|
<input сlass="frm_mail" type="email" required name="email" placeholder="<?=vij_lang('your_mail', LANG_VERSION);?>">
|
||||||
<input type="hidden" name="sender" value="info@vetandlife.ru">
|
<?php wp_nonce_field('subscription_form_nonce', 'subscription_nonce'); ?>
|
||||||
<button class="frm_submit"><?=vij_lang('email_btn', LANG_VERSION)?></button>
|
<input type="text" class="mytext" name="mytext" placeholder="Дополнительный текст">
|
||||||
|
<input type="hidden" name="re_code" value="<?=$ihash['hash']?>">
|
||||||
|
<div class="re_text">Для подписки нажмите на большее число</div>
|
||||||
|
<button class="re_button" type="submit" name="re_num" value="<?=$ihash['num1'] ?>"><?= $ihash['num1'] ?></button>
|
||||||
|
<button class="re_button" type="submit" name="re_num" value="<?= $ihash['num2'] ?>"><?= $ihash['num2'] ?></button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ if (! defined( 'ABSPATH' )) {
|
|||||||
define('YA_TOKEN', 'y0_AgAAAAA5ZMbXAAjnxwAAAADXZGKqufBi9E2_TnG4n9l_K0OjYOAukmk');
|
define('YA_TOKEN', 'y0_AgAAAAA5ZMbXAAjnxwAAAADXZGKqufBi9E2_TnG4n9l_K0OjYOAukmk');
|
||||||
define('YA_COUNTER', '56480275');
|
define('YA_COUNTER', '56480275');
|
||||||
|
|
||||||
|
define('FRM_KEY', 'daer-yui-hjku4566-sdef-1234');
|
||||||
|
|
||||||
// Полностью отключить XML-RPC
|
// Полностью отключить XML-RPC
|
||||||
add_filter( 'xmlrpc_enabled', '__return_false' );
|
add_filter( 'xmlrpc_enabled', '__return_false' );
|
||||||
|
|
||||||
@@ -1068,6 +1070,32 @@ function convert_images_to_amp($content) {
|
|||||||
add_filter('the_content', 'convert_images_to_amp');
|
add_filter('the_content', 'convert_images_to_amp');
|
||||||
|
|
||||||
|
|
||||||
|
function add_hash_frm(){
|
||||||
|
|
||||||
|
static $result = null;
|
||||||
|
|
||||||
|
if (is_array($result))
|
||||||
|
return $result;
|
||||||
|
|
||||||
|
// Генерируем два случайных числа
|
||||||
|
$num1 = rand(1, 50);
|
||||||
|
$num2 = rand(10, 99);
|
||||||
|
|
||||||
|
// Гарантируем, что числа не равны
|
||||||
|
while ($num1 == $num2) {
|
||||||
|
$num2 = rand(10, 99);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Хешируем ответ
|
||||||
|
$hash = hash_hmac('sha256', $num2, FRM_KEY);
|
||||||
|
|
||||||
|
return ['num1' => $num1, 'num2' => $num2, 'hash' => $hash];
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// подписчики на главную
|
// подписчики на главную
|
||||||
//add_action('admin_init', 'restrict_subscriber_admin_access');
|
//add_action('admin_init', 'restrict_subscriber_admin_access');
|
||||||
function restrict_subscriber_admin_access() {
|
function restrict_subscriber_admin_access() {
|
||||||
|
|||||||
@@ -6,81 +6,95 @@ get_header();
|
|||||||
|
|
||||||
<h1 id="mainpage-title">Подписка на рассылку</h1>
|
<h1 id="mainpage-title">Подписка на рассылку</h1>
|
||||||
<div id="fulltext">
|
<div id="fulltext">
|
||||||
|
<?php echo handle_subscription_confirmation(); ?>
|
||||||
<? // режим подтверждение подписки
|
|
||||||
if (isset( $_GET['id'] )){
|
|
||||||
|
|
||||||
$sanitized_id = sanitize_text_field( $_GET['id'] );
|
|
||||||
$sql_update = "UPDATE {$wpdb->prefix}subusers SET status = 1 WHERE hash = '$sanitized_id'";
|
|
||||||
|
|
||||||
$result = $wpdb->get_results( $sql_update );
|
|
||||||
|
|
||||||
echo '<p>Спасибо, мы включили Ваш e-mail!</p>
|
|
||||||
<p>Наши письма могут оказаться в разделе "Рассылки" Вашего почтового приложения или сайта.</p>';
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif( !isset($_POST['mytext']) || $_POST['mytext'] !== ''){ // поле должно быть пустым - заполнить может только бот
|
|
||||||
echo '<p>Не можем подтвердить ваши данные. Пожалуйста, повторите попытку.</p>';
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif ( !isset($_POST['subscription_nonce']) || !wp_verify_nonce($_POST['subscription_nonce'], 'subscription_form_nonce') ) {
|
|
||||||
echo ('<p>Неверный запрос. Пожалуйста, повторите попытку.</p>');
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif( !isset($_POST['addrhash']) || $_POST['addrhash'] !== adddr_hash() ){
|
|
||||||
echo '<p>Не можем опеределить ваши данные. Пожалуйста, повторите попытку.</p>';
|
|
||||||
}
|
|
||||||
|
|
||||||
elseif (isset($_POST['email'])) {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$email = strtolower(trim($_POST['email']));
|
|
||||||
$email = sanitize_text_field($email);
|
|
||||||
|
|
||||||
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
|
||||||
|
|
||||||
$hash = md5('775+'.$email);
|
|
||||||
$date_insert = date('Y-m-d H:i:s');
|
|
||||||
|
|
||||||
$add_sub_sql = "INSERT INTO {$wpdb->prefix}subusers (mail, status, hash, date) VALUES ('$email', '0', '$hash', '$date_insert')";
|
|
||||||
|
|
||||||
//$result = $wpdb->get_results($add_sub_sql);
|
|
||||||
|
|
||||||
$hash_link = home_url().'/subscript?id='.$hash;
|
|
||||||
$to = $email;
|
|
||||||
$subject = 'Подписка на рассылку ВиЖ';
|
|
||||||
$message = "
|
|
||||||
Здравствуйте!\n
|
|
||||||
Для подтверждения подписки на нашу рассылку перейдите по ссылке ниже\n
|
|
||||||
$hash_link.\n\n
|
|
||||||
Если вы не отправляли заявку просто проигнорируйте это письмо.";
|
|
||||||
|
|
||||||
$headers = array('Content-Type: text/plain; charset=UTF-8');
|
|
||||||
|
|
||||||
// Отправка письма
|
|
||||||
//wp_mail($to, $subject, $message, $headers);
|
|
||||||
|
|
||||||
echo '<p>Благодарим за интерес к нашему изданию!</p>
|
|
||||||
<p>На Вашу почту отправлено письмо для подтверждения подписки.</p>';
|
|
||||||
|
|
||||||
|
|
||||||
} else { ?>
|
|
||||||
|
|
||||||
<p>Мы не можем добавить Вас в нашу рассылку.</p>
|
|
||||||
<p>Адрес электронной почты недействительный.</p>
|
|
||||||
|
|
||||||
<? }
|
|
||||||
|
|
||||||
|
|
||||||
}?>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<?php get_footer();
|
<?php get_footer();
|
||||||
|
|
||||||
|
function handle_subscription_confirmation() {
|
||||||
|
|
||||||
|
global $wpdb;
|
||||||
|
$html = '';
|
||||||
|
$err = '<p>Не можем подтвердить ваши данные. Пожалуйста, повторите попытку.</p>';
|
||||||
|
|
||||||
|
// Режим подтверждения подписки
|
||||||
|
if (isset($_GET['id'])) {
|
||||||
|
$sanitized_id = sanitize_text_field($_GET['id']);
|
||||||
|
$sql_update = $wpdb->prepare("UPDATE {$wpdb->prefix}subusers SET status = 1 WHERE hash = %s", $sanitized_id);
|
||||||
|
$wpdb->query($sql_update);
|
||||||
|
|
||||||
|
$html .= '<p>Спасибо, мы включили Ваш e-mail!</p>
|
||||||
|
<p>Наши письма могут оказаться в разделе "Рассылки" Вашего почтового приложения или сайта.</p>';
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Поле mytext должно быть пустым
|
||||||
|
if (!empty($_POST['mytext'])) {
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Проверка nonce
|
||||||
|
if (!isset($_POST['subscription_nonce']) || !wp_verify_nonce($_POST['subscription_nonce'], 'subscription_form_nonce')) {
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверка hash адреса
|
||||||
|
//if (!isset($_POST['addrhash']) || $_POST['addrhash'] !== adddr_hash()) {
|
||||||
|
// return $err;
|
||||||
|
//}
|
||||||
|
// Основная обработка подписки
|
||||||
|
if (isset($_POST['email'])) {
|
||||||
|
if (!isset($_POST['re_num']) || !isset($_POST['re_code'])) {
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
|
||||||
|
$user_answer = (int)$_POST['re_num'];
|
||||||
|
$expected_hash = hash_hmac('sha256', $user_answer, FRM_KEY);
|
||||||
|
|
||||||
|
if ($_POST['re_code'] === $expected_hash) {
|
||||||
|
$email = strtolower(trim($_POST['email']));
|
||||||
|
$email = sanitize_email($email);
|
||||||
|
|
||||||
|
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||||
|
$hash = md5('775+' . $email);
|
||||||
|
$date_insert = current_time('mysql');
|
||||||
|
|
||||||
|
$wpdb->insert(
|
||||||
|
"{$wpdb->prefix}subusers",
|
||||||
|
[
|
||||||
|
'mail' => $email,
|
||||||
|
'status' => 0,
|
||||||
|
'hash' => $hash,
|
||||||
|
'date' => $date_insert
|
||||||
|
],
|
||||||
|
['%s', '%d', '%s', '%s']
|
||||||
|
);
|
||||||
|
|
||||||
|
$hash_link = home_url('/subscript?id=' . $hash);
|
||||||
|
$to = $email;
|
||||||
|
$subject = 'Подписка на рассылку ВиЖ';
|
||||||
|
$message = "Здравствуйте!\n\nДля подтверждения подписки на нашу рассылку перейдите по ссылке ниже\n$hash_link.\n\nЕсли вы не отправляли заявку, просто проигнорируйте это письмо.";
|
||||||
|
$headers = ['Content-Type: text/plain; charset=UTF-8'];
|
||||||
|
|
||||||
|
//wp_mail($to, $subject, $message, $headers);
|
||||||
|
|
||||||
|
$html .= '<p>Благодарим за интерес к нашему изданию!</p>
|
||||||
|
<p>На Вашу почту отправлено письмо для подтверждения подписки.</p>';
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
session_start();
|
$ihash = add_hash_frm();?>
|
||||||
$num1 = rand(1, 10);
|
|
||||||
$num2 = rand(1, 10);
|
|
||||||
$_SESSION['captcha'] = $num1 + $num2;
|
|
||||||
?>
|
|
||||||
|
|
||||||
<div id="subscript_box">
|
<div id="subscript_box">
|
||||||
<div id="convert"></div>
|
<div id="convert"></div>
|
||||||
@@ -13,7 +10,10 @@ $_SESSION['captcha'] = $num1 + $num2;
|
|||||||
<input сlass="frm_mail" type="email" required name="email" placeholder="<?=vij_lang('your_mail', LANG_VERSION);?>">
|
<input сlass="frm_mail" type="email" required name="email" placeholder="<?=vij_lang('your_mail', LANG_VERSION);?>">
|
||||||
<?php wp_nonce_field('subscription_form_nonce', 'subscription_nonce'); ?>
|
<?php wp_nonce_field('subscription_form_nonce', 'subscription_nonce'); ?>
|
||||||
<input type="text" class="mytext" name="mytext" placeholder="Дополнительный текст">
|
<input type="text" class="mytext" name="mytext" placeholder="Дополнительный текст">
|
||||||
<button class="frm_submit"><?=vij_lang('email_btn', LANG_VERSION);?></button>
|
<input type="hidden" name="re_code" value="<?=$ihash['hash']?>">
|
||||||
|
<div class="re_text">Для подписки нажмите на большее число</div>
|
||||||
|
<button class="re_button" type="submit" name="re_num" value="<?=$ihash['num1'] ?>"><?= $ihash['num1'] ?></button>
|
||||||
|
<button class="re_button" type="submit" name="re_num" value="<?= $ihash['num2'] ?>"><?= $ihash['num2'] ?></button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Reference in New Issue
Block a user