![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/www/wp-content/themes/dt-the7/inc/widgets/contact-form/ |
<?php /** * Contact form widget. * * @since 1.0.0 * * @package The7 */ defined( 'ABSPATH' ) || exit; add_action( 'widgets_init', array( 'Presscore_Inc_Widgets_ContactForm', 'presscore_register_widget' ) ); class Presscore_Inc_Widgets_ContactForm extends WP_Widget { public static $widget_defaults = array( 'title' => '', 'text' => '', 'fields' => array(), 'send_to' => '', 'msg_height' => 6, 'button_size' => 'm', 'button_title' => '', 'terms' => false, 'terms_msg' => '', ); public static $fields_list = array(); /** * The7 ReCaptcha object. * * @var The7_ReCaptcha */ protected $captcha; /** * Widget setup. */ function __construct() { $widget_ops = array( 'description' => _x( 'Contact form', 'widget', 'the7mk2' ) ); parent::__construct( 'presscore-contact-form-widget', DT_WIDGET_PREFIX . _x( 'Contact form', 'widget', 'the7mk2' ), $widget_ops ); self::$fields_list = array( 'name' => array( 'title' => __( 'Name', 'the7mk2' ), 'defaults' => array( 'on' => true, 'required' => true, ), ), 'email' => array( 'title' => __( 'E-mail', 'the7mk2' ), 'defaults' => array( 'on' => true, 'required' => true, ), ), 'telephone' => array( 'title' => __( 'Telephone', 'the7mk2' ), 'defaults' => array( 'on' => false, 'required' => false, ), ), 'country' => array( 'title' => __( 'Country', 'the7mk2' ), 'defaults' => array( 'on' => false, 'required' => false, ), ), 'city' => array( 'title' => __( 'City', 'the7mk2' ), 'defaults' => array( 'on' => false, 'required' => false, ), ), 'company' => array( 'title' => __( 'Company', 'the7mk2' ), 'defaults' => array( 'on' => false, 'required' => false, ), ), 'website' => array( 'title' => __( 'Website', 'the7mk2' ), 'defaults' => array( 'on' => false, 'required' => false, ), ), 'message' => array( 'title' => __( 'Message', 'the7mk2' ), 'defaults' => array( 'on' => true, 'required' => false, ), ), ); self::$widget_defaults['terms_msg'] = _x( 'By using this form you agree with the storage and handling of your data by this website.', 'widget', 'the7mk2' ); add_filter( 'dt_core_send_mail-to', array( $this, 'widget_send_to_email_filter' ), 20, 2 ); $this->captcha = new The7_ReCaptcha(); } /** * Output widget. * * @param array $args * @param array $instance */ function widget( $args, $instance ) { $this->presscore_enqueue_scripts(); static $number = 0; $number++; extract( $args ); $instance = wp_parse_args( (array) $instance, self::$widget_defaults ); /* Our variables from the widget settings. */ $title = apply_filters( 'widget_title', $instance['title'] ); $text = $instance['text']; $send_to = $instance['send_to']; $fields = $instance['fields']; $fields_not_empty = in_array( true, wp_list_pluck( $fields, 'on' ) ); $msg_height = $instance['msg_height']; $class_adapter = array( 'email' => 'mail', ); echo $before_widget; if ( $title ) { echo $before_title . $title . $after_title; } if ( $text ) { echo '<div class="widget-info">' . $text . '</div>'; } if ( $fields_not_empty ) { $form_class = array( 'dt-contact-form', 'dt-form', ); if ( $instance['terms'] ) { $form_class[] = 'privacy-form'; } $form_class = implode( ' ', $form_class ); echo '<form class="' . esc_attr( $form_class ) . '" method="post">'; echo '<input type="hidden" name="widget_id" value="' . $this->id . '" />'; echo '<input type="hidden" name="send_message" value="" />'; echo '<input type="hidden" name="security_token" value="' . esc_attr( of_get_option( 'contact_form_security_token' ) ) . '"/>'; $fields_str = ''; $message = ''; foreach ( $fields as $index => $field ) { if ( empty( $field['on'] ) ) { continue; } if ( ! isset( self::$fields_list[ $index ] ) ) { continue; } $field_data = self::$fields_list[ $index ]; $valid_class = ''; $title = $field_data['title']; $name = $index; $required_str = 'false'; $field_class = $index; if ( isset( $class_adapter[ $index ] ) ) { $field_class = $class_adapter[ $index ]; } if ( $field['required'] ) { $title .= ' *'; $required_str = 'true'; $valid_params = array( 'required' ); switch ( $index ) { case 'email': $valid_params[] = 'custom[email]'; break; case 'telephone': $valid_params[] = 'custom[phone]'; break; case 'website': $valid_params[] = 'custom[url]'; break; } $valid_class = ' class="' . esc_attr( sprintf( 'validate[%s]', implode( ',', $valid_params ) ) ) . '"'; } $title = esc_attr( $title ); $name = esc_attr( $name ); $required_str = esc_attr( $required_str ); if ( 'message' !== $index ) { $tmp_field = '<input type="text"' . $valid_class . ' placeholder="' . $title . '" name="' . $name . '" value="" aria-required="' . $required_str . '">' . "\n"; } else { $tmp_field = '<textarea' . $valid_class . ' placeholder="' . $title . '" name="' . $name . '" rows="' . esc_attr( $msg_height ) . '" aria-required="' . $required_str . '"></textarea>' . "\n"; } $tmp_field = sprintf( '<span class="form-%s"><label class="assistive-text">%s</label>%s</span>', esc_attr( $field_class ), // $name, $title, $tmp_field ); if ( 'message' !== $index ) { $fields_str .= $tmp_field; } else { $message = $tmp_field; } } if ( $fields_str ) { $fields_str = '<div class="form-fields">' . $fields_str . '</div>'; } echo $fields_str . $message; if ( $this->captcha->is_active() ) { echo '<div class="the7-g-captcha"></div>'; } if ( $instance['terms'] ) { $terms_field_id = 'the7-form-terms-' . md5( (string) rand( 0, 9999 ) ); $terms_msg = $instance['terms_msg'] ? $instance['terms_msg'] : self::$widget_defaults['terms_msg']; printf( '<p class="the7-form-terms-wrap"><input type="checkbox" id="%1$s" name="terms" class="validate[required] the7-form-terms" aria-required="true" /> <label for="%1$s"><span class="form-terms-text">%2$s</span></label></p>', $terms_field_id, wp_kses_post( $terms_msg ) ); } $button_title = ! empty( $instance['button_title'] ) ? $instance['button_title'] : __( 'Submit', 'the7mk2' ); echo '<p>'; echo presscore_get_button_html( array( 'href' => '#', 'title' => esc_html( $button_title ), 'class' => 'dt-btn dt-btn-' . esc_attr( $instance['button_size'] ) . ' dt-btn-submit', 'atts' => ' rel="nofollow"', ) ); echo '<input class="assistive-text" type="submit" value="' . esc_attr( __( 'submit', 'the7mk2' ) ) . '">'; echo '</p>'; echo '</form>' . "\n"; } echo $after_widget; } /** * Update the widget settings. * * @param array $new_instance * @param array $old_instance * * @return array */ function update( $new_instance, $old_instance ) { $instance = wp_parse_args( $old_instance, self::$widget_defaults ); $instance['title'] = strip_tags( $new_instance['title'] ); $instance['text'] = $new_instance['text']; $instance['send_to'] = $new_instance['send_to']; $instance['fields'] = self::presscore_sanitize_fields( $new_instance['fields'] ); $instance['msg_height'] = absint( $new_instance['msg_height'] ); $instance['button_size'] = in_array( $instance['button_size'], array( 's', 'm', 'l' ) ) ? $instance['button_size'] : self::$widget_defaults['button_size']; $instance['button_title'] = esc_html( $instance['button_title'] ); $instance['terms'] = ! empty( $new_instance['terms'] ); $terms_msg = $new_instance['terms_msg'] ? $new_instance['terms_msg'] : self::$widget_defaults['terms_msg']; $instance['terms_msg'] = wp_kses_post( $terms_msg ); return $instance; } /** * Displays the widget settings controls on the widget panel. * * @param array $instance */ function form( $instance ) { /* Set up some default widget settings. */ $instance = wp_parse_args( (array) $instance, self::$widget_defaults ); $fields = empty( $instance['fields'] ) ? array() : $instance['fields']; ?> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _ex( 'Title:', 'widget', 'the7mk2' ); ?></label> <input type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" class="widefat" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'text' ); ?>"><?php _ex( 'Text:', 'widget', 'the7mk2' ); ?></label> <textarea id="<?php echo $this->get_field_id( 'text' ); ?>" rows="10" class="widefat" name="<?php echo $this->get_field_name( 'text' ); ?>"><?php echo esc_html( $instance['text'] ); ?></textarea> </p> <h4><?php _ex( 'Fields:', 'widget', 'the7mk2' ); ?></h4> <table style="width: 100%; text-align: left; line-height: 1.5"> <tbody> <?php foreach ( self::$fields_list as $index => $field ) : $value = isset( $fields[ $index ] ) ? $fields[ $index ] : array(); $field_on = isset( $value['on'] ) ? $value['on'] : $field['defaults']['on']; $field_required = isset( $value['required'] ) ? $value['required'] : $field['defaults']['required']; ?> <tr> <th><?php echo $field['title'] . ':'; ?></th> <td><label><input type="radio" name="<?php echo $this->get_field_name( 'fields' ) . "[$index]"; ?>[on]" value="1" <?php checked( $field_on ); ?> /><?php _ex( 'on', 'widget', 'the7mk2' ); ?></label> <label><input type="radio" name="<?php echo $this->get_field_name( 'fields' ) . "[$index]"; ?>[on]" value="0" <?php checked( ! $field_on ); ?> /><?php _ex( 'off', 'widget', 'the7mk2' ); ?></label></td> <td><label><input type="checkbox" name="<?php echo $this->get_field_name( 'fields' ) . "[$index]"; ?>[required]" value="1" <?php checked( $field_required ); ?>/> <?php _ex( 'required', 'widget', 'the7mk2' ); ?></label></td> </tr> <?php endforeach; ?> </tbody> </table> <p> <label for="<?php echo $this->get_field_id( 'terms' ); ?>"><?php _ex( 'Show privacy message', 'widget', 'the7mk2' ); ?></label> <input type="checkbox" id="<?php echo $this->get_field_id( 'terms' ); ?>" name="<?php echo $this->get_field_name( 'terms' ); ?>" value="1" <?php checked( $instance['terms'] ); ?> onchange="the7ContactFormWidgetCheckTerms(this)"/> </p> <p class="the7-contact-form-widget-terms-msg-block" <?php echo $instance['terms'] ? '' : 'style="display: none;"'; ?>> <label for="<?php echo $this->get_field_id( 'terms_msg' ); ?>"><?php _ex( 'Privacy message:', 'widget', 'the7mk2' ); ?></label> <textarea id="<?php echo $this->get_field_id( 'terms_msg' ); ?>" rows="5" class="widefat" name="<?php echo $this->get_field_name( 'terms_msg' ); ?>"><?php echo wp_kses_post( $instance['terms_msg'] ); ?></textarea> </p> <p> <label><?php _ex( 'Message field height (in lines)', 'widget', 'the7mk2' ); ?> <input type="text" name="<?php echo $this->get_field_name( 'msg_height' ); ?>" value="<?php echo esc_attr( $instance['msg_height'] ); ?>" size="3"/></label> </p> <p> <label><?php _ex( 'Send mail to:', 'widget', 'the7mk2' ); ?><input type="text" class="widefat" name="<?php echo $this->get_field_name( 'send_to' ); ?>" value="<?php echo esc_attr( $instance['send_to'] ); ?>"/></label> </p> <div style="clear: both;"></div> <?php } /** * Enqueue scripts. */ function presscore_enqueue_scripts() { wp_register_script( 'the7-form-validator', PRESSCORE_THEME_URI . '/js/atoms/plugins/validator/jquery.validationEngine.js', array( 'jquery' ), THE7_VERSION, true ); $ve_locale = $this->_get_validator_locale(); wp_register_script( 'the7-form-validator-translation', PRESSCORE_THEME_URI . '/js/atoms/plugins/validator/languages/jquery.validationEngine-' . $ve_locale . '.js', array( 'the7-form-validator' ), THE7_VERSION, true ); the7_register_script( 'the7-contact-form', PRESSCORE_THEME_URI . '/js/dt-contact-form', array( 'the7-form-validator', 'the7-form-validator-translation' ), THE7_VERSION, true ); wp_enqueue_script( 'the7-contact-form' ); if ( $this->captcha->is_active() ) { $this->captcha->enqueue_scripts(); } } function _get_validator_locale() { $supported_locales = array( 'ca', 'cs', 'da', 'de', 'el', 'en', 'es', 'et', 'fa', 'fi', 'fr', 'hr', 'hu', 'id', 'it', 'ja', 'lt', 'nb', 'nl', 'nn', 'no', 'pl', 'pt', 'pt_BR', 'ro', 'ru', 'se', 'sv', 'tr', 'vi', 'zh_CN', 'zh_TW', ); $current_locale = get_locale(); if ( ! in_array( $current_locale, array( 'pt_BR', 'zh_CN', 'zh_TW' ) ) ) { $current_locale = current( explode( '_', $current_locale ) ); } if ( ! in_array( $current_locale, $supported_locales ) ) { $current_locale = 'en'; } return $current_locale; } /** * Filter send_to mail attribute. * * @param string $em Default email. * @param array $request Request arguments array. * * @return string */ public function widget_send_to_email_filter( $em = '', $request = array() ) { if ( ! empty( $request['widget_id'] ) ) { $widget_id = str_replace( "{$this->id_base}-", '', $request['widget_id'] ); $option = get_option( $this->option_name ); if ( isset( $option[ $widget_id ] ) && ! empty( $option[ $widget_id ]['send_to'] ) ) { return $option[ $widget_id ]['send_to']; } } return $em; } /** * Sanitize widget fields. * * @param array $fields * * @return array */ public static function presscore_sanitize_fields( $fields = array() ) { $fields = array_intersect_key( $fields, self::$fields_list ); foreach ( $fields as &$field ) { $field['on'] = (bool) absint( $field['on'] ); $field['required'] = isset( $field['required'] ); } return $fields; } /** * Register widget. */ public static function presscore_register_widget() { register_widget( __CLASS__ ); } }