Advertisement
Guest User

Untitled

a guest
Nov 30th, 2021
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.93 KB | None | 0 0
  1. /*------------------------------------
  2. SUBMIT EMAIL FORM
  3. ------------------------------------*/
  4.  
  5. add_action('wp_ajax_nopriv_submit_simple_form', 'ajax_submit_simple_form');
  6. add_action('wp_ajax_submit_simple_form', 'ajax_submit_simple_form');
  7.  
  8. function ajax_submit_simple_form()
  9. {
  10.     $eol = "\r\n";
  11.     $separator = md5(time());
  12.     $form_name = isset($_REQUEST['form_name']) ? sanitize_text_field($_REQUEST['form_name']) : '';
  13.     $captcha = isset($_REQUEST['g-recaptcha-response']) ? sanitize_text_field($_REQUEST['g-recaptcha-response']) : '';
  14.     $secret = 'secret_key';
  15.     $no_form_name = false;
  16.     $errors = array();
  17.     $to = '';
  18.  
  19.     $json = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=". $secret . "&response=" . $captcha), true);
  20.  
  21.   if($json['success']) {
  22.       echo "ok";
  23.   } else {
  24.       echo "recaptcha error";
  25.   }
  26.  
  27.     switch ($form_name) {
  28.         case 'order':
  29.         case 'order-modal':
  30.             $fields = array(
  31.                 'name' => isset($_REQUEST['name']) ? sanitize_text_field($_REQUEST['name']) : '',
  32.                 'email' => isset($_REQUEST['email']) ? sanitize_email($_REQUEST['email']) : '',
  33.                 'phone' => isset($_REQUEST['phone']) ? sanitize_text_field($_REQUEST['phone']) : '',
  34.                 'people_count' => isset($_REQUEST['people_count']) ? sanitize_text_field($_REQUEST['people_count']) : '',
  35.                 'payment_type' => isset($_REQUEST['payment_type']) ? sanitize_text_field($_REQUEST['payment_type']) : '',
  36.                 'date_from' => isset($_REQUEST['date_from']) ? sanitize_text_field($_REQUEST['date_from']) : '',
  37.                 'date_to' => isset($_REQUEST['date_to']) ? sanitize_text_field($_REQUEST['date_to']) : '',
  38.                 'path' => isset($_REQUEST['path']) ? sanitize_text_field($_REQUEST['path']) : '',
  39.                 'additional' => isset($_REQUEST['additional']) ? sanitize_text_field($_REQUEST['additional']) : '',
  40.             );
  41.             $labels = array(
  42.                 'name' => 'Имя или компания',
  43.                 'email' => 'Электронная почта',
  44.                 'phone' => 'Телефон',
  45.                 'people_count' => 'Количество человек',
  46.                 'payment_type' => 'Вид оплаты',
  47.                 'date_from' => 'Дата и время подачи',
  48.                 'date_to' => 'Дата и время окончания',
  49.                 'path' => 'Маршрут',
  50.                 'additional' => 'Дополнительная информация',
  51.             );
  52.             $required = array(
  53.                 'name' => $fields['name'],
  54.                 // 'email' => $fields['email'],
  55.                 'phone' => $fields['phone'],
  56.                 // 'people_count' => $fields['people_count'],
  57.                 // 'payment_type' => $fields['payment_type'],
  58.                 // 'date_from' => $fields['date_from'],
  59.                 // 'date_to' => $fields['date_to'],
  60.                 // 'path' => $fields['path'],
  61.             );
  62.             $subject = 'Заказ аренды с сайта ' . $_SERVER['SERVER_NAME'];
  63.  
  64.             break;
  65.         case 'order-special-modal':
  66.             $fields = array(
  67.                 'name' => isset($_REQUEST['name']) ? sanitize_text_field($_REQUEST['name']) : '',
  68.                 'email' => isset($_REQUEST['email']) ? sanitize_email($_REQUEST['email']) : '',
  69.                 'phone' => isset($_REQUEST['phone']) ? sanitize_text_field($_REQUEST['phone']) : '',
  70.                 'additional' => isset($_REQUEST['additional']) ? sanitize_text_field($_REQUEST['additional']) : '',
  71.                 'date_from' => isset($_REQUEST['date_from']) ? sanitize_text_field($_REQUEST['date_from']) : '',
  72.                 'date_to' => isset($_REQUEST['date_to']) ? sanitize_text_field($_REQUEST['date_to']) : '',
  73.             );
  74.             $labels = array(
  75.                 'name' => 'Имя или компания',
  76.                 'email' => 'Электронная почта',
  77.                 'phone' => 'Телефон',
  78.                 'additional' => 'Дополнительная информация',
  79.                 'date_from' => 'Дата и время подачи',
  80.                 'date_to' => 'Дата и время окончания',
  81.             );
  82.             $required = array(
  83.                 'name' => $fields['name'],
  84.                 'phone' => $fields['phone'],
  85.             );
  86.             $subject = 'Заказ аренды спецтехники с сайта ' . $_SERVER['SERVER_NAME'];
  87.  
  88.             break;
  89.         case 'callme-modal':
  90.             $fields = array(
  91.                 'name' => isset($_REQUEST['name']) ? sanitize_text_field($_REQUEST['name']) : '',
  92.                 'phone' => isset($_REQUEST['phone']) ? sanitize_text_field($_REQUEST['phone']) : '',
  93.             );
  94.             $labels = array(
  95.                 'name' => 'Имя или компания',
  96.                 'phone' => 'Телефон',
  97.             );
  98.             $required = array(
  99.                 'name' => $fields['name'],
  100.                 'phone' => $fields['phone'],
  101.             );
  102.             $subject = 'Заказ обратного звонка с сайта ' . $_SERVER['SERVER_NAME'];
  103.  
  104.             break;
  105.         case 'testimonial-modal':
  106.             $fields = array(
  107.                 'name' => isset($_REQUEST['name']) ? sanitize_text_field($_REQUEST['name']) : '',
  108.                 'email' => isset($_REQUEST['email']) ? sanitize_email($_REQUEST['email']) : '',
  109.                 'phone' => isset($_REQUEST['phone']) ? sanitize_text_field($_REQUEST['phone']) : '',
  110.                 'rating' => isset($_REQUEST['rating']) ? sanitize_text_field($_REQUEST['rating']) : '',
  111.                 'service' => isset($_REQUEST['service']) ? sanitize_text_field($_REQUEST['service']) : '',
  112.                 'comment' => isset($_REQUEST['comment']) ? sanitize_text_field($_REQUEST['comment']) : '',
  113.                 'gallery' => $_FILES['gallery'] ?? [],
  114.             );
  115.             $labels = array(
  116.                 'name' => 'Имя или компания',
  117.                 'email' => 'Электронная почта',
  118.                 'phone' => 'Телефон',
  119.                 'rating' => 'Оценка',
  120.                 'service' => 'Услуга',
  121.                 'comment' => 'Комментарий',
  122.             );
  123.             $required = array(
  124.                 'name' => $fields['name'],
  125.                 'email' => $fields['email'],
  126.                 'phone' => $fields['phone'],
  127.                 'rating' => $fields['rating'],
  128.                 'service' => $fields['service'],
  129.                 'comment' => $fields['comment'],
  130.             );
  131.             $subject = 'Новый отзыв на сайте ' . $_SERVER['SERVER_NAME'];
  132.  
  133.             break;
  134.  
  135.         default:
  136.             $no_form_name = true;
  137.     }
  138.  
  139.     // Return errors if there are some
  140.     if ($no_form_name) {
  141.         echo 0;
  142.  
  143.         exit;
  144.     }
  145.  
  146.     $errors = array_merge($errors, check_required_fields($required));
  147.  
  148.     // Return errors if there are some
  149.     if ($errors) {
  150.         $data = array(
  151.             'errors' => $errors,
  152.         );
  153.  
  154.         send_ajax_response('fail', $data);
  155.     }
  156.  
  157.     // Form and send message to administrator
  158.     $headers = "From: {$_SERVER['SERVER_NAME']} <robot@{$_SERVER['SERVER_NAME']}>{$eol}";
  159.  
  160.     if ($to === '') {
  161.         $emails = get_field('simple_forms_emails', 'option');
  162.  
  163.         foreach ($emails as $e => $item) {
  164.             $to .= $item['email'];
  165.  
  166.             if ($e !== count($emails) - 1) {
  167.                 $to .= ', ';
  168.             }
  169.         }
  170.     }
  171.  
  172.     $message = '';
  173.     foreach ($labels as $key => $label) {
  174.         if ('' === $fields[$key]) {
  175.             continue;
  176.         }
  177.  
  178.         $message .= "{$label}: {$fields[$key]}\r\n";
  179.     }
  180.     $message .= "\r\n";
  181.     $message .= 'Сообщение сгенерировано роботом и отправлено с сайта http://' . $_SERVER['SERVER_NAME'];
  182.  
  183.     $mailed = wp_mail($to, $subject, $message, $headers, '');
  184.  
  185.     if ($mailed) {
  186.         if ($form_name === 'testimonial-modal') {
  187.             $postId = wp_insert_post([
  188.                 'post_type' => 'testimonial',
  189.                 'post_author' => 1,
  190.                 'post_status' => 'draft',
  191.                 'post_title' => $fields['name'],
  192.                 'post_content' => $fields['comment'],
  193.             ]);
  194.  
  195.             update_field('email', $fields['email'], $postId);
  196.             update_field('phone', $fields['phone'], $postId);
  197.             update_field('service', $fields['service'], $postId);
  198.             update_field('rating', $fields['rating'], $postId);
  199.  
  200.             if (!empty($fields['gallery'])) {
  201.                 $mediaIds = [];
  202.  
  203.                 foreach ($fields['gallery']['name'] as $i => $fileName) {
  204.                     $mediaIds[] = media_handle_sideload([
  205.                         'name' => $fields['gallery']['name'][$i],
  206.                         'type' => $fields['gallery']['type'][$i],
  207.                         'tmp_name' => $fields['gallery']['tmp_name'][$i],
  208.                         'error' => $fields['gallery']['error'][$i],
  209.                         'size' => $fields['gallery']['size'][$i],
  210.                     ], $postId);
  211.                 }
  212.                 update_field('gallery', $mediaIds, $postId);
  213.             }
  214.         }
  215.  
  216.         $data = array(
  217.             'success_msg' => 'Ваша заявка успешно отправлена',
  218.         );
  219.  
  220.         send_ajax_response('success', $data);
  221.     } else {
  222.         $data = array(
  223.             'errors' => array(
  224.                 array(
  225.                     'field' => 'general',
  226.                     'text' => 'При отправке формы произошла ошибка.<br />Попробуйте ещё раз или повторите попытку позднее.',
  227.                 ),
  228.             ),
  229.         );
  230.  
  231.         send_ajax_response('fail', $data);
  232.     }
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement