/home/hamzarou/www/wp-content/plugins/sms-alert/handler/smsalert_form_handler.php
<?php
/**
 * Smsalert form handler 
 *
 * PHP version 5
 *
 * @category Handler
 * @package  SMSAlert
 * @author   SMS Alert <support@cozyvision.com>
 * @license  URI: http://www.gnu.org/licenses/gpl-2.0.html
 * @link     https://www.smsalert.co.in/
 */
 
if (! defined('ABSPATH') ) {
    exit;
}
    require_once 'forms/woocommerce/wc-checkout.php';
    require_once 'forms/woocommerce/wc-registration.php';
    require_once 'forms/class-wplogin.php';
    require_once 'forms/class-wpcafe.php';
    require_once 'forms/class-wpforms.php';
    require_once 'forms/class-metform.php';
    require_once 'forms/class-everestform.php';
    require_once 'forms/class-jetform.php';
    require_once 'forms/class-wployalty.php';
    require_once 'forms/class-membermouse.php';
    require_once 'forms/class-bookingcalendar.php';
    require_once 'forms/class-bookitcalendar.php';
	require_once 'forms/class-booknetic.php';
    require_once 'forms/class-buddypress.php';
	require_once 'forms/class-fatservicesbooking.php';
    require_once 'forms/class-restaurantreservation.php';
    require_once 'forms/class-quickrestaurantreservation.php';
    require_once 'forms/class-wperp.php';
    require_once 'forms/class-fluentcrm.php';
    require_once 'forms/class-groundhoggcrm.php';
    require_once 'forms/class-ameliabooking.php';
    require_once 'forms/class-jetpack.php';
    require_once 'forms/class-armember.php';
	require_once 'forms/class-formmaker.php';
	require_once 'forms/class-registrationmagic.php';
    require_once 'forms/class-ultimatemember.php';
    require_once 'forms/class-userregistration.php';
    require_once 'forms/class-easyregistration.php';
    require_once 'forms/class-vendorregistration.php';
    require_once 'forms/class-profileregistration.php';
    require_once 'forms/class-wcfmarketplace.php';
    require_once 'forms/class-contactform7.php';
    require_once 'forms/class-fluentform.php';
    require_once 'forms/class-easyappointments.php';
    require_once 'forms/class-userswpform.php';
    require_once 'forms/class-ninjaform.php';
    require_once 'forms/class-wpmember.php';
    require_once 'forms/class-pieregistration.php';
    require_once 'forms/class-affiliatemanager.php';
    require_once 'forms/class-wpresetpassword.php';
    require_once 'forms/class-learnpressregistration.php';
    require_once 'forms/class-elementor.php';
    require_once 'forms/class-formidable.php';
    require_once 'forms/class-forminator.php';
    require_once 'forms/class-gravityform.php';
    require_once 'forms/class-wpadverts.php';
    require_once 'forms/class-paidmembershippro.php';
	require_once 'forms/class-salonbooking.php';
    require_once 'forms/class-awesomesupport.php';
	require_once 'forms/class-simplyappointments.php';
	require_once 'forms/class-wptravelengine.php';
	require_once 'forms/class-wsform.php';
	add_action('wp_loaded', 'smsalert_customer_validation_handle_form', 1);	
    add_action('smsalert_validate_otp', '_handle_validation_form_action', 1, 2);

    /**
     * Generate and show OTP form.
     *
     * @param string $user_login   user name.
     * @param string $user_email   User email id.
     * @param string $errors       Errors.
     * @param string $phone_number Phone number.
     * @param string $otp_type     OTP type.
     * @param string $password     Password.
     * @param string $extra_data   Extra form data.
     * @param string $from_both    Form name.
     *
     * @return void
     */
function smsalert_site_challenge_otp( $user_login, $user_email, $errors, $phone_number, $otp_type, $password = '', $extra_data = null, $from_both = false )
{
    SmsAlertUtility::checkSession();
    $_SESSION['current_url']     = SmsAlertUtility::currentPageUrl();
    $_SESSION['user_email']      = $user_email;
    $_SESSION['user_login']      = $user_login;
    $_SESSION['user_password']   = $password;
    $_SESSION['phone_number_mo'] = $phone_number;
    $_SESSION['extra_data']      = $extra_data;
    _handle_otp_action($user_login, $user_email, $phone_number, $otp_type, $from_both);
}

    /**
     * Handles resend OTP.
     *
     * @param string $otp_type  OTP type.
     * @param string $from_both Form name.
     *
     * @return void
     */
function _handle_verification_resend_otp_action( $otp_type, $from_both )
{
    SmsAlertUtility::checkSession();
    $user_email   = sanitize_email($_SESSION['user_email']);
    $user_login   = sanitize_text_field($_SESSION['user_login']);
    $password     = sanitize_text_field($_SESSION['user_password']);
    $phone_number = sanitize_text_field($_SESSION['phone_number_mo']);
    $extra_data   = sanitize_text_field($_SESSION['extra_data']);
    _handle_otp_action($user_login, $user_email, $phone_number, $otp_type, $from_both);
}

    /**
     * Handles OTP action.
     *
     * @param string $user_login   user name.
     * @param string $user_email   User email id.
     * @param string $phone_number Phone number.
     * @param string $otp_type     OTP type.
     * @param string $form         Form name.
     *
     * @return void
     */
function _handle_otp_action( $user_login, $user_email, $phone_number, $otp_type, $form )
{
    global $phoneLogic;
    $phoneLogic->_handle_logic($user_login, $user_email, $phone_number, $otp_type, $form);
}

    /**
     * Handles Go back action.
     *
     * @return void
     */
function _handle_validation_goBack_action()
{
    SmsAlertUtility::checkSession();
    $url = isset($_SESSION['current_url']) ? sanitize_text_field($_SESSION['current_url']) : '';
    session_unset();
    wp_safe_redirect($url);
    exit();
}

    /**
     * Handles OTP validation action.
     *
     * @param string $requestVariable Request variable.
     * @param string $from_both       Form name.
     *
     * @return void
     */
function _handle_validation_form_action( $requestVariable = 'smsalert_customer_validation_otp_token', $from_both = false )
{
    SmsAlertUtility::checkSession();
    $_REQUEST        = smsalert_sanitize_array($_REQUEST);
    $user_login      = ! SmsAlertUtility::isBlank($_SESSION['user_login']) ? sanitize_text_field(wp_unslash($_SESSION['user_login'])) : null;
    $user_email      = ! SmsAlertUtility::isBlank($_SESSION['user_email']) ? sanitize_email(wp_unslash($_SESSION['user_email'])) : null;
    $phone_number    = ( array_key_exists('billing_phone', $_REQUEST) && ! empty($_REQUEST['billing_phone']) ) ? sanitize_text_field(wp_unslash($_REQUEST['billing_phone'])) : null;
    $phone_number    = array_key_exists('phone_number_mo', $_SESSION) && ! SmsAlertUtility::isBlank($_SESSION['phone_number_mo']) ? sanitize_text_field($_SESSION['phone_number_mo']) : $phone_number;
    $password        = ! SmsAlertUtility::isBlank($_SESSION['user_password']) ? sanitize_text_field($_SESSION['user_password']) : null;
    $extra_data      = ! SmsAlertUtility::isBlank($_SESSION['extra_data']) ? smsalert_sanitize_array($_SESSION['extra_data']) : null;
    $requestVariable = ( array_key_exists('phone', $_REQUEST) && ! array_key_exists('smsalert_customer_validation_otp_token', $_REQUEST) ) ? sanitize_text_field(wp_unslash($_REQUEST['phone'])) : 'smsalert_customer_validation_otp_token';

    //$requestVariable = array_key_exists( 'order_verify', $_REQUEST ) ? 'order_verify' : $requestVariable;

    $otp_token = ! empty($_REQUEST[ $requestVariable ]) ? sanitize_text_field(wp_unslash($_REQUEST[ $requestVariable ])) : null;
    $content = json_decode(SmsAlertcURLOTP::validateOtpToken($phone_number, $otp_token), true);
    
    if (( 'success' === $content['status'] ) && isset($content['description']['desc']) && strcasecmp($content['description']['desc'], 'Code Matched successfully.') === 0 ) {
        _handle_success_validated($user_login, $user_email, $password, $phone_number, $extra_data);
    } else {
        _handle_error_validated($user_login, $user_email, $phone_number);
    }
}

    /**
     * Handles Success validation action.
     *
     * @param string $user_login   user name.
     * @param string $user_email   User email id.
     * @param string $password     Password.
     * @param string $phone_number Phone number.
     * @param string $extra_data   Extra form data.
     *
     * @return void
     */
function _handle_success_validated( $user_login, $user_email, $password, $phone_number, $extra_data )
{
    $redirect_to = array_key_exists('redirect_to', $_POST) ? sanitize_text_field(wp_unslash($_POST['redirect_to'])) : '';
    do_action('otp_verification_successful', $redirect_to, $user_login, $user_email, $password, $phone_number, $extra_data);
}

    /**
     * Handles Error validation action.
     *
     * @param string $user_login   user name.
     * @param string $user_email   User email id.
     * @param string $phone_number Phone number.
     *
     * @return void
     */
function _handle_error_validated( $user_login, $user_email, $phone_number )
{
    do_action('otp_verification_failed', $user_login, $user_email, $phone_number);
}



    /**
     * Handles ajax phone validation action.
     *
     * @param string $getdata Extra form data.
     *
     * @return void
     */
function _handle_mo_ajax_phone_validate( $getdata )
{
    SmsAlertUtility::checkSession();
    $_SESSION[ FormSessionVars::AJAX_FORM ] = trim($getdata['billing_phone']);
    smsalert_site_challenge_otp(
        sanitize_text_field($_SESSION['user_login']),
        null,
        null,
        trim(sanitize_text_field($data['billing_phone'])),
        'phone',
        sanitize_text_field($_SESSION['user_password']),
        null,
        null
    );
}

    /**
     * Handles ajax form validation action.
     *
     * @return void
     */
function _handle_mo_ajax_form_validate_action()
{
    SmsAlertUtility::checkSession();
    if (isset($_SESSION[ FormSessionVars::WC_SOCIAL_LOGIN ]) ) {
        _handle_validation_form_action();
        if ('validated' === $_SESSION[ FormSessionVars::WC_SOCIAL_LOGIN ] ) {
            wp_send_json(SmsAlertUtility::_create_json_response('successfully validated', 'success'));
        } else {
            wp_send_json(SmsAlertUtility::_create_json_response(__('Invalid one time passcode. Please enter a valid passcode.', 'sms-alert'), 'error'));
        }
    }
}

    /**
     * Handles create user action.
     *
     * @param string $postdata Extra form data.
     *
     * @return void
     */
function _handle_mo_create_user_wc_action( $postdata )
{
    SmsAlertUtility::checkSession();
    if (isset($_SESSION[ FormSessionVars::WC_SOCIAL_LOGIN ]) && ( 'validated' === $_SESSION[ FormSessionVars::WC_SOCIAL_LOGIN ] ) ) {
        create_new_wc_social_customer($postdata);
    }
}

    /**
     * Handles Customer validation action.
     *
     * @return void
     */
function smsalert_customer_validation_handle_form()
{
    $from_both = isset($_POST['from_both']) ? sanitize_text_field(wp_unslash($_POST['from_both'])) : '';
    $options   = isset($_REQUEST['option']) ? trim(sanitize_text_field(wp_unslash($_REQUEST['option']))) : '';

    if (! empty($options) ) {

        switch ( $options ) {
        case 'validation_goBack':
            _handle_validation_goBack_action();
            break;
        case 'smsalert-ajax-otp-generate':
            _handle_mo_ajax_phone_validate($_GET);
            break;
        case 'smsalert-ajax-otp-validate':
            _handle_mo_ajax_form_validate_action($_GET);
            break;
        case 'smsalert_ajax_form_validate':
            _handle_mo_create_user_wc_action($_POST);
            break;
        case 'smsalert-validate-otp-form':
            $from_both = ( true === $from_both ) ? true : false;
            _handle_validation_form_action();
            break;
        case 'verification_resend_otp_phone':
            $from_both = ( true === $from_both ) ? true : false;
            _handle_verification_resend_otp_action('phone', $options);
            break;
        case 'verification_resend_otp_email':
            $from_both = ( true === $from_both ) ? true : false;
            _handle_verification_resend_otp_action('email', $options);
            break;
        case 'verification_resend_otp_both':
            $from_both = ( true === $from_both ) ? true : false;
            _handle_verification_resend_otp_action('both', $options);
            break;
        }
    }
}