/home/hamzarou/www/wp-content/plugins/sms-alert/handler/forms/class-wpforms.php
<?php
/**
* This file handles wp forms via sms notification
*
* 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;
}
if (! is_plugin_active('wpforms-lite/wpforms.php') && ! is_plugin_active('wpforms/wpforms.php') ) {
return;
}
/**
* 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/
* WpForm class.
*/
class WpForm extends FormInterface
{
/**
* Form Session Variable.
*
* @return void
*/
private $form_session_var = FormSessionVars::WPFORM;
/**
* Handle OTP form
*
* @return void
*/
public function handleForm()
{
add_action('wpforms_process_complete', array( $this, 'wpfDevProcessComplete' ), 10, 4);
add_filter('wpforms_field_properties', array( $this, 'wpfAddPhoneClass' ), 10, 3);
add_filter('wpforms_display_field_after', array( $this, 'wpfDevProcessFilter' ), 10, 2);
add_filter('wpforms_save_form_args', array( $this, 'smsalertWpformShowWarnings' ), 10, 3);
add_action('wpforms_process', array( $this, 'validateFields' ), 20, 3);
add_filter('wpforms_process_bypass_captcha', array( $this, 'beforeValidateFields' ), 10, 3);
add_filter('sa_get_user_phone_no', array( $this, 'saUpdateBillingPhone' ), 10, 2);
$user_authorize = new smsalert_Setting_Options();
if ($user_authorize->is_user_authorised() ) {
add_action('wpforms_form_settings_panel_content', array( $this, 'customWpformsFormSettingsPanelContent' ), 10, 1);
add_filter('wpforms_builder_settings_sections', array( $this, 'customWpformsBuilderSettingsSections' ), 10, 2);
}
}
/**
* This function by Pass Fields.
*
* @param $fals Form fals
* @param $entry entry
* @param $form_data form_data
*
* @return void.
*/
public function beforeValidateFields( $fals, $entry, $form_data)
{
SmsAlertUtility::checkSession();
if (isset($_SESSION['sa_mobile_verified']) ) {
unset($_SESSION['sa_mobile_verified']);
return $entry;
}
}
/**
* Update phone field
*
* @param string $billing_phone billing phone
* @param int $user_id user id
*
* @return void
*/
public function saUpdateBillingPhone($billing_phone, $user_id)
{
$form_id = !empty($_POST['wpforms']['id'])?$_POST['wpforms']['id']:'';
if ($form_id != '') {
$form_data = wpforms()->get('form')->get($form_id, ['content_only' => true,]);
if (!empty($form_data['settings']['smsalert']['visitor_phone'])) {
$phone_field = $form_data['settings']['smsalert']['visitor_phone'];
$phone_field_id = preg_replace('/[^0-9]/', '', $phone_field);
$phone = '';
if (! empty($phone_field_id) ) {
$datas = array();
foreach ($_POST['wpforms']['complete'] as $key => $field ) {
$datas[ '{field_id="' . $key . '"}' ] = $field['value'];
if ($phone_field_id == $key ) {
$phone = $field['value'];
}
}
}
if (!empty($phone)) {
return $phone;
}
}
}
return $billing_phone;
}
/**
* This function shows validation error message.
*
* @param $fields Form fields
* @param $entry entry
* @param $form_data form_data
*
* @return void.
*/
public function validateFields($fields, $entry, $form_data)
{
if (isset($_REQUEST['option']) && 'smsalert_wpforms_otp' === sanitize_text_field(wp_unslash($_REQUEST['option']))) {
SmsAlertUtility::initialize_transaction($this->form_session_var);
} else {
return;
}
$phone_field = !empty($form_data['settings']['smsalert']['visitor_phone'])?$form_data['settings']['smsalert']['visitor_phone']:'';
$phone_field_id = preg_replace('/[^0-9]/', '', $phone_field);
$phone = '';
if (! empty($phone_field_id) ) {
$datas = array();
foreach ( $fields as $key => $field ) {
$datas[ '{field_id="' . $key . '"}' ] = $field['value'];
if ($phone_field_id == $key ) {
$phone = $field['value'];
}
}
}
if (isset($phone) && SmsAlertUtility::isBlank($phone)) {
wp_send_json(SmsAlertUtility::_create_json_response(__('Please enter phone number.', 'sms-alert'), SmsAlertConstants::ERROR_JSON_TYPE));
exit();
}
return $this->processFormFields($phone);
}
/**
* This function processed form fields.
*
* @param string $phone User phone.
*
* @return bool
*/
public function processFormFields( $phone )
{
global $phoneLogic;
$phone_num = preg_replace('/[^0-9]/', '', $phone);
if (! isset($phone_num) || ! SmsAlertUtility::validatePhoneNumber($phone_num) ) {
wp_send_json(SmsAlertUtility::_create_json_response(str_replace('##phone##', $phone_num, $phoneLogic->_get_otp_invalid_format_message()), SmsAlertConstants::ERROR_JSON_TYPE));
exit();
}
smsalert_site_challenge_otp('test', null, null, $phone_num, 'phone', null, null, 'ajax');
}
/**
* Show warning if phone field not selected.
*
* @param array $form form_data.
* @param array $data data.
* @param array $args args.
*
* @return void
*/
public function smsalertWpformShowWarnings($form, $data, $args)
{
$is_msg_enabled = !empty($data['settings']['smsalert']['message_enable'])?$data['settings']['smsalert']['message_enable']:'';
$is_otp_enable = !empty($data['settings']['smsalert']['otp_enable'])?$data['settings']['smsalert']['otp_enable']:'';
$is_visitor_phone = !empty($data['settings']['smsalert']['visitor_phone'])?$data['settings']['smsalert']['visitor_phone']:'';
if ((!empty($is_msg_enabled) || !empty($is_otp_enable)) && empty($is_visitor_phone)) {
wp_send_json_error(esc_html__('Please choose SMS Alert phone field in SMS Alert tab.', 'sms-alert'));
}
return $form;
}
/**
* Wpf dev process filter.
*
* @param array $field field.
* @param array $form_data form_data.
*
* @return void
*/
public function wpfDevProcessFilter( $field, $form_data )
{
$unique_class = 'sa-class-'.mt_rand(1, 100);
$user_authorize = new smsalert_Setting_Options();
$islogged = $user_authorize->is_user_authorised();
$phone_field = !empty($form_data['settings']['smsalert']['visitor_phone'])?$form_data['settings']['smsalert']['visitor_phone']:'';
$phone_field_id = preg_replace('/[^0-9]/', '', $phone_field);
$enabled_country = smsalert_get_option('checkout_show_country_code', 'smsalert_general', '');
$inline_script = 'document.addEventListener("DOMContentLoaded", function() {';
if (isset($form_data['settings']['smsalert']['otp_enable']) && $islogged && ($field['id'] === $phone_field_id) ) {
$otp_enable = $form_data['settings']['smsalert']['otp_enable'];
if ($otp_enable ) {
$inline_script .= 'jQuery("form#wpforms-form-' . esc_attr($form_data['id']) . '").each(function ()
{
if(!jQuery(this).hasClass("sa-wp-form"))
{
jQuery(this).addClass("'.$unique_class.' sa-wp-form");
}
});';
echo do_shortcode('[sa_verify id="" phone_selector=".smsalert-phone #wpforms-' . esc_attr($form_data['id']) . '-field_' . esc_attr($phone_field_id) . '" submit_selector= ".'.$unique_class.' .wpforms-submit" ]');
}
}
if (isset($form_data['settings']['smsalert']) && 'on' === $enabled_country && !array_key_exists('otp_enable', (array)$form_data['settings']['smsalert']) ) {
$inline_script .= 'jQuery(document).ready(function(){
initialiseCountrySelector(".smsalert-phone #wpforms-' . esc_attr($form_data['id']) . '-field_' . esc_attr($phone_field_id) . '");
});';
}
$inline_script .= '});';
if (! wp_script_is('sainlinescript-handle-footer', 'enqueued') ) {
wp_register_script('sainlinescript-handle-footer', '', [], '', true);
wp_enqueue_script('sainlinescript-handle-footer');
}
wp_add_inline_script("sainlinescript-handle-footer", $inline_script);
}
/**
* Add Tab smsalert setting in wpform builder section
*
* @param array $sections form section.
* @param array $form_data form datas.
*
* @return array
*/
public function customWpformsBuilderSettingsSections( $sections, $form_data )
{
$sections['smsalert'] = 'SMS Alert';
return $sections;
}
/**
* Add Tab panel smsalert setting in wpform builder section
*
* @param object $instance tab panel object.
*
* @return void
*/
public function customWpformsFormSettingsPanelContent( $instance )
{
$form_data = $instance->form_data;
echo '<div class="wpforms-panel-content-section wpforms-panel-content-section-smsalert">';
echo '<div class="wpforms-panel-content-section-title"><span id="wpforms-builder-settings-notifications-title">SMS Alert Message Configuration</span>
</div>';
echo '<div>
<a href="https://www.youtube.com/watch?v=iYvHz6wrBbA" target="_blank" class="btn-outline"><span class="dashicons dashicons-video-alt3" style="font-size: 21px"></span> Youtube</a>
<a href="https://kb.smsalert.co.in/knowledgebase/integrate-with-wpforms/#configuration" target="_blank" class="btn-outline"><span class="dashicons dashicons-format-aside"></span> Documentation</a>
</div>';
$plugin_file = is_plugin_active('wpforms-lite/wpforms.php')?'/wpforms-lite/wpforms.php':'/wpforms/wpforms.php';
$plugin_data = get_plugin_data(WP_PLUGIN_DIR.$plugin_file);
$checkbox = (!empty($plugin_data['Version']) && $plugin_data['Version'] < '1.6.2.3') ? 'checkbox':'toggle';
wpforms_panel_field(
$checkbox,
'smsalert',
'message_enable',
$instance->form_data,
esc_html__('Enable Message', 'sms-alert'),
array( 'parent' => 'settings' )
);
wpforms_panel_field(
$checkbox,
'smsalert',
'otp_enable',
$instance->form_data,
esc_html__('Enable Mobile Verification', 'sms-alert'),
array( 'parent' => 'settings' )
);
wpforms_panel_field(
'text',
'smsalert',
'admin_number',
$instance->form_data,
__('Send Admin SMS To', 'sms-alert'),
array(
'default' => '',
'parent' => 'settings',
'after' => '<p class="note">' .
__('Admin sms notifications will be sent to this number.', 'sms-alert') . '</p>',
)
);
wpforms_panel_field(
'textarea',
'smsalert',
'admin_message',
$instance->form_data,
__('Admin Message', 'sms-alert'),
array(
'rows' => 6,
'default' => sprintf(__('Dear admin, you have a new enquiry from %1$s.%2$sPowered by%3$swww.smsalert.co.in', 'sms-alert'), '[store_name]', PHP_EOL, PHP_EOL),
'smarttags' => array(
'type' => 'all',
),
'parent' => 'settings',
'class' => 'email-msg',
)
);
wpforms_panel_field(
'text',
'smsalert',
'visitor_phone',
$instance->form_data,
__('Select Phone Field', 'sms-alert'),
array(
'default' => '',
'smarttags' => array(
'type' => 'all',
),
'parent' => 'settings',
)
);
wpforms_panel_field(
'textarea',
'smsalert',
'visitor_message',
$instance->form_data,
__('Visitor Message', 'sms-alert'),
array(
'rows' => 6,
'default' => sprintf(__('Hello user, thank you for contacting with %1$s.', 'sms-alert'), '[store_name]'),
'smarttags' => array(
'type' => 'all',
),
'parent' => 'settings',
'class' => 'email-msg',
)
);
$admin_number = isset($form_data['settings']['smsalert']['admin_number'])?$form_data['settings']['smsalert']['admin_number']:'';
echo '</div>';
echo "<script>
var adminnumber = '" . $admin_number . "';
var tagInput1 = new TagsInput({
selector: 'wpforms-panel-field-smsalert-admin_number',
duplicate : false,
max : 10,
});
var number = (adminnumber!='') ? adminnumber.split(',') : [];
if(number.length > 0){
tagInput1.addData(number);
}
</script>";
}
/**
* Process wp form submission and send sms
*
* @param array $properties properties.
* @param array $field field.
* @param array $form_data form data.
*
* @return void
*/
public function wpfAddPhoneClass( $properties, $field, $form_data )
{
$phone_field = !empty($form_data['settings']['smsalert']['visitor_phone'])?$form_data['settings']['smsalert']['visitor_phone']:'';
$phone_field_id = preg_replace('/[^0-9]/', '', $phone_field);
if ($field['id'] === $phone_field_id) {
$properties['container']['class'][] = 'smsalert-phone';
}
return $properties;
}
/**
* Process wp form submission and send sms
*
* @param array $fields form fields.
* @param array $entry form entries.
* @param array $form_data form data.
* @param int $entry_id entity id.
*
* @return void
*/
public function wpfDevProcessComplete( $fields, $entry, $form_data, $entry_id )
{
$user_authorize = new smsalert_Setting_Options();
$islogged = $user_authorize->is_user_authorised();
$msg_enable = !empty($form_data['settings']['smsalert']['message_enable'])?$form_data['settings']['smsalert']['message_enable']:'';
if ($msg_enable && $islogged ) {
$phone_field = $form_data['settings']['smsalert']['visitor_phone'];
$admin_number = $form_data['settings']['smsalert']['admin_number'];
$visitor_message = $form_data['settings']['smsalert']['visitor_message'];
$admin_message = $form_data['settings']['smsalert']['admin_message'];
$phone_field_id = preg_replace('/[^0-9]/', '', $phone_field);
if (! empty($phone_field_id) ) {
$phone = '';
$datas = array();
foreach ( $fields as $key => $field ) {
$datas[ '{field_id="' . $key . '"}' ] = $field['value'];
//Please do not use === triple equal to here(Key does not match after use).
if ($phone_field_id == $key ) {
$phone = $field['value'];
}
}
do_action('sa_send_sms', $phone, self::parseSmsContent($visitor_message, $datas));
if (! empty($admin_number) ) {
do_action('sa_send_sms', $admin_number, self::parseSmsContent($admin_message, $datas));
}
}
}
}
/**
* Check your otp setting is enabled or not.
*
* @return bool
*/
public static function isFormEnabled()
{
$user_authorize = new smsalert_Setting_Options();
$islogged = $user_authorize->is_user_authorised();
return ( $islogged && (is_plugin_active('wpforms-lite/wpforms.php') || is_plugin_active('wpforms/wpforms.php') )) ? true : false;
}
/**
* Handle after failed verification
*
* @param object $user_login users object.
* @param string $user_email user email.
* @param string $phone_number phone number.
*
* @return void
*/
public function handle_failed_verification( $user_login, $user_email, $phone_number )
{
SmsAlertUtility::checkSession();
if (! isset($_SESSION[ $this->form_session_var ]) ) {
return;
}
if (! empty($_REQUEST['option']) && sanitize_text_field(wp_unslash($_REQUEST['option'])) === 'smsalert-validate-otp-form' ) {
wp_send_json(SmsAlertUtility::_create_json_response(__('Invalid one time passcode. Please enter a valid passcode.', 'sms-alert'), 'error'));
exit();
} else {
$_SESSION[ $this->form_session_var ] = 'verification_failed';
}
}
/**
* Handle after post verification
*
* @param string $redirect_to redirect url.
* @param object $user_login user object.
* @param string $user_email user email.
* @param string $password user password.
* @param string $phone_number phone number.
* @param string $extra_data extra hidden fields.
*
* @return void
*/
public function handle_post_verification( $redirect_to, $user_login, $user_email, $password, $phone_number, $extra_data )
{
SmsAlertUtility::checkSession();
if (! isset($_SESSION[ $this->form_session_var ]) ) {
return;
}
$_SESSION['sa_mobile_verified'] = true;
if (! empty($_REQUEST['option']) && sanitize_text_field(wp_unslash($_REQUEST['option'])) === 'smsalert-validate-otp-form' ) {
wp_send_json(SmsAlertUtility::_create_json_response(__('OTP Validated Successfully.', 'sms-alert'), 'success'));
exit();
} else {
$_SESSION[ $this->form_session_var ] = 'validated';
}
}
/**
* Clear otp session variable
*
* @return void
*/
public function unsetOTPSessionVariables()
{
unset($_SESSION[ $this->tx_session_id ]);
unset($_SESSION[ $this->form_session_var ]);
}
/**
* Check current form submission is ajax or not
*
* @param bool $is_ajax bool value for form type.
*
* @return bool
*/
public function is_ajax_form_in_play( $is_ajax )
{
SmsAlertUtility::checkSession();
return isset($_SESSION[ $this->form_session_var ]) ? true : $is_ajax;
}
/**
* Replace variables for sms contennt
*
* @param string $content sms content to be sent.
* @param array $datas values of varibles.
*
* @return string
*/
public static function parseSmsContent( $content = null, $datas = array() )
{
$find = array_keys($datas);
$replace = array_values($datas);
$content = str_replace($find, $replace, $content);
return $content;
}
/**
* Handle form for WordPress backend
*
* @return void
*/
public function handleFormOptions()
{
}
}
new WpForm();