function rcl_register_author_post($postdata)
{
    global $user_ID, $rcl_options, $wpdb;
    $user_can = $rcl_options['user_public_access_recall'];
    if ($user_can || $user_ID) {
        return $postdata;
    }
    if (!$postdata['post_author']) {
        $email_new_user = sanitize_email($_POST['email-user']);
        if ($email_new_user) {
            $user_id = false;
            $random_password = wp_generate_password($length = 12, $include_standard_special_chars = false);
            $userdata = array('user_pass' => $random_password, 'user_login' => $email_new_user, 'user_email' => $email_new_user, 'display_name' => $_POST['name-user']);
            $user_id = rcl_insert_user($userdata);
            if ($user_id) {
                //Сразу авторизуем пользователя
                if (!$rcl_options['confirm_register_recall']) {
                    $creds = array();
                    $creds['user_login'] = $email_new_user;
                    $creds['user_password'] = $random_password;
                    $creds['remember'] = true;
                    $user = wp_signon($creds, false);
                    $user_ID = $user_id;
                }
                $postdata['post_author'] = $user_id;
                $postdata['post_status'] = 'pending';
            }
        }
    }
    return $postdata;
}
function rcl_get_register_user($errors)
{
    global $wpdb, $rcl_options, $wp_errors;
    $wp_errors = new WP_Error();
    if (count($errors->errors)) {
        $wp_errors = $errors;
        return $wp_errors;
    }
    $pass = sanitize_text_field($_POST['user_pass']);
    $email = $_POST['user_email'];
    $login = sanitize_user($_POST['user_login']);
    //print_r($_POST);exit;
    $ref = $_POST['redirect_to'] ? apply_filters('url_after_register_rcl', esc_url($_POST['redirect_to'])) : wp_registration_url();
    $get_fields = get_option('custom_profile_field');
    $requared = true;
    if ($get_fields) {
        foreach ((array) $get_fields as $custom_field) {
            $custom_field = apply_filters('chek_custom_field_regform', $custom_field);
            if (!$custom_field) {
                continue;
            }
            $slug = $custom_field['slug'];
            if ($custom_field['requared'] == 1 && $custom_field['register'] == 1) {
                if ($custom_field['type'] == 'checkbox') {
                    $chek = explode('#', $custom_field['field_select']);
                    $count_field = count($chek);
                    for ($a = 0; $a < $count_field; $a++) {
                        if (!isset($_POST[$slug][$a])) {
                            $requared = false;
                        } else {
                            $requared = true;
                            break;
                        }
                    }
                } else {
                    if ($custom_field['type'] == 'file') {
                        if (!isset($_FILES[$slug])) {
                            $requared = false;
                        }
                    } else {
                        if (!$_POST[$slug]) {
                            $requared = false;
                        }
                    }
                }
            }
        }
    }
    if (!$pass || !$email || !$login || !$requared) {
        $wp_errors->add('rcl_register_empty', __('Fill in the required fields!', 'wp-recall'));
        return $wp_errors;
    }
    $wp_errors = apply_filters('rcl_registration_errors', $wp_errors, $login, $email);
    if ($wp_errors->errors) {
        return $wp_errors;
    }
    do_action('pre_register_user_rcl', $ref);
    //регистрируем юзера с указанными данными
    $userdata = array('user_pass' => $pass, 'user_login' => $login, 'user_email' => $email, 'display_name' => $fio);
    $user_id = rcl_insert_user($userdata);
    if ($user_id) {
        if ($rcl_options['login_form_recall'] == 2 || false !== strpos($ref, 'wp-login.php')) {
            //если форма ВП, то возвращаем на login с нужными GET-параметрами
            if ($rcl_options['confirm_register_recall'] == 1) {
                wp_safe_redirect('wp-login.php?checkemail=confirm');
            } else {
                wp_safe_redirect('wp-login.php?checkemail=registered');
            }
        } else {
            //иначе возвращаем на ту же страницу
            if ($rcl_options['confirm_register_recall'] == 1) {
                wp_redirect(rcl_format_url($ref) . 'action-rcl=register&success=confirm-email');
            } else {
                wp_redirect(rcl_format_url($ref) . 'action-rcl=register&success=true');
            }
        }
        exit;
    }
}
function rcl_register_user_order()
{
    global $rmag_options, $wpdb, $order, $rcl_options;
    $reg_user = $rmag_options['noreg_order'] ? false : true;
    $fio_new_user = sanitize_text_field($_POST['fio_new_user']);
    $email_new_user = sanitize_email($_POST['email_new_user']);
    include_once 'rcl_order.php';
    $ord = new Rcl_Order();
    $get_fields = get_option('custom_profile_field');
    $get_order_fields = get_option('custom_orders_field');
    $req_prof = $ord->chek_requared_fields($get_fields, 'profile');
    $req_order = $ord->chek_requared_fields($get_order_fields);
    if ($email_new_user && $req_prof && $req_order) {
        $res_email = email_exists($email_new_user);
        $res_login = username_exists($email_new_user);
        $correctemail = is_email($email_new_user);
        $valid = validate_username($email_new_user);
        if (!$reg_user && (!$correctemail || !$valid)) {
            if (!$valid || !$correctemail) {
                $log['int'] = 1;
                $log['recall'] = '<p style="text-align:center;color:red;">Вы ввели некорректный email!</p>';
                echo json_encode($res);
                exit;
            }
        }
        //var_dump($reg_user);exit;
        if ($reg_user && ($res_login || $res_email || !$correctemail || !$valid)) {
            if (!$valid || !$correctemail) {
                $log['int'] = 1;
                $log['recall'] .= '<p style="text-align:center;color:red;">Вы ввели некорректный email!</p>';
            }
            if ($res_login || $res_email) {
                $log['int'] = 1;
                $log['recall'] .= '<p style="text-align:center;color:red;">Этот email уже используется!<br>' . 'Если это ваш email, то авторизуйтесь и продолжите оформление заказа.</p>';
            }
        } else {
            $user_id = false;
            if (!$reg_user) {
                $user = get_user_by('email', $email_new_user);
                if ($user) {
                    $user_id = $user->ID;
                }
            }
            if (!$user_id) {
                $random_password = wp_generate_password($length = 12, $include_standard_special_chars = false);
                $userdata = array('user_pass' => $random_password, 'user_login' => $email_new_user, 'user_email' => $email_new_user, 'display_name' => $fio_new_user);
                $user_id = rcl_insert_user($userdata);
            }
            if ($user_id) {
                if ($get_fields && $user_id) {
                    $cf = new Rcl_Custom_Fields();
                    $cf->register_user_metas($user_id);
                }
                //Сразу авторизуем пользователя
                if ($reg_user && !$rcl_options['confirm_register_recall']) {
                    $creds = array();
                    $creds['user_login'] = $email_new_user;
                    $creds['user_password'] = $random_password;
                    $creds['remember'] = true;
                    $user = wp_signon($creds, false);
                    $redirect_url = rcl_format_url(get_author_posts_url($user_id), 'orders');
                } else {
                    $redirect_url = false;
                }
                $order_id = $ord->get_order_id();
                $results = $ord->insert_order($order_id, $user_id);
                if (!$results) {
                    $log['int'] = 1;
                    $log['recall'] = '<p style="text-align:center;color:red;">Возникла ошибка, заказ не был создан!</p>';
                    echo json_encode($log);
                    exit;
                }
                $order_custom_field = $ord->insert_detail_order($get_order_fields);
                $order = rcl_get_order($order_id);
                $table_order = rcl_get_include_template('order.php', __FILE__);
                $ord->send_mail($order_custom_field, $table_order, $user_id, $creds);
                $notice = $rcl_options['confirm_register_recall'] == 1 ? '<p class=res_confirm style="color:orange;">Для отслеживания статуса заказа подтвердите указанный email!<br>' . 'Перейдите по ссылке в высланном письме.</p>' : '';
                if (!$order->order_price) {
                    //Если заказ бесплатный
                    $notice .= "<p class='res_confirm'>Ваш заказ был создан!<br />" . "Заказ содержал только бесплатные товары<br>" . "Заказу присвоен статус - \"Оплачено\"<br>" . "Заказ поступил в обработку. В своем личном кабинете вы можете узнать статус вашего заказа.</p>";
                    $log['recall'] = $notice;
                    $log['redirect'] = $redirect_url;
                    $log['int'] = 100;
                    echo json_encode($log);
                    exit;
                }
                if (function_exists('rcl_payform')) {
                    $type_order_payment = $rmag_options['type_order_payment'];
                    if ($type_order_payment == 1 || $type_order_payment == 2) {
                        $notice .= "<p class='res_confirm'>Ваш заказ был создан!<br />Заказу присвоен статус - \"Неоплачено\"<br />Вы можете оплатить его сейчас или из своего ЛК. Там же вы можете узнать статус вашего заказа.</p>";
                        if ($type_order_payment == 2) {
                            $notice .= "<p class='res_confirm'>Вы можете пополнить свой личный счет на сайте из своего личного кабинета и в будущем оплачивать свои заказы через него</p>";
                        }
                        if (!$rcl_options['confirm_register_recall']) {
                            $notice .= "<p align='center'><a href='" . $redirect_url . "'>Перейти в свой личный кабинет</a></p>";
                            $notice .= rcl_payform(array('id_pay' => $order_id, 'summ' => $order->order_price, 'user_id' => $user_id, 'type' => 2));
                        }
                        $log['recall'] = $notice;
                        $log['redirect'] = 0;
                        $log['int'] = 100;
                    } else {
                        $log['int'] = 100;
                        $log['redirect'] = $redirect_url;
                        $notice .= "<p class=res_confirm>Ваш заказ был создан!<br />Проверьте свою почту.</p>";
                        $log['recall'] = $notice;
                    }
                } else {
                    $log['int'] = 100;
                    $log['redirect'] = $redirect_url;
                    $notice .= '<p class=res_confirm>Ваш заказ был создан!<br />Проверьте свою почту.</p>';
                    $log['recall'] = $notice;
                }
            }
        }
    } else {
        $log['int'] = 1;
        $log['recall'] = '<p style="text-align:center;color:red;">Пожалуйста, заполните все обязательные поля!</p>';
    }
    echo json_encode($log);
    exit;
}