Advertisement
campusboy

Untitled

Apr 6th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. class ET_Builder_Module_Contact_Form extends ET_Builder_Module {
  4.     function init() {
  5.         $this->name            = esc_html__( 'Contact Form', 'et_builder' );
  6.         $this->slug            = 'et_pb_contact_form';
  7.         $this->fb_support      = true;
  8.         $this->child_slug      = 'et_pb_contact_field';
  9.         $this->child_item_text = esc_html__( 'Field', 'et_builder' );
  10.  
  11.         $this->whitelisted_fields = array(
  12.             'captcha',
  13.             'email',
  14.             'title',
  15.             'admin_label',
  16.             'module_id',
  17.             'module_class',
  18.             'form_background_color',
  19.             'input_border_radius',
  20.             'submit_button_text',
  21.             'custom_message',
  22.             'use_redirect',
  23.             'redirect_url',
  24.             'success_message',
  25.             'box_shadow_style_submit',
  26.             'box_shadow_horizontal_submit',
  27.             'box_shadow_vertical_submit',
  28.             'box_shadow_blur_submit',
  29.             'box_shadow_spread_submit',
  30.             'box_shadow_color_submit',
  31.             'box_shadow_position_submit',
  32.         );
  33.  
  34.         $this->fields_defaults = array(
  35.             'captcha'      => array( 'on' ),
  36.             'use_redirect' => array( 'off' ),
  37.         );
  38.  
  39.         $this->main_css_element = '%%order_class%%.et_pb_contact_form_container';
  40.  
  41.         $this->options_toggles = array(
  42.             'general'  => array(
  43.                 'toggles' => array(
  44.                     'main_content' => esc_html__( 'Text', 'et_builder' ),
  45.                     'email'        => esc_html__( 'Email', 'et_builder' ),
  46.                     'elements'     => esc_html__( 'Elements', 'et_builder' ),
  47.                     'redirect'     => esc_html__( 'Redirect', 'et_builder' ),
  48.                     'background'   => esc_html__( 'Background', 'et_builder' ),
  49.                 ),
  50.             ),
  51.         );
  52.  
  53.         $this->advanced_options = array(
  54.             'border' => array(
  55.                 'css'          => array(
  56.                     'main'      => array(
  57.                         'border_radii'  => sprintf( '%1$s .input, %1$s .input[type="checkbox"] + label i, %1$s .input[type="radio"] + label i', $this->main_css_element ),
  58.                         'border_styles' => sprintf( '%1$s .input, %1$s .input[type="checkbox"] + label i, %1$s .input[type="radio"] + label i', $this->main_css_element ),
  59.                     ),
  60.                     'important' => 'plugin_only',
  61.                 ),
  62.                 'label_prefix' => esc_html__( 'Inputs', 'et_builder' ),
  63.             ),
  64.             'fonts' => array(
  65.                 'title' => array(
  66.                     'label'    => esc_html__( 'Title', 'et_builder' ),
  67.                     'css'      => array(
  68.                         'main' => "{$this->main_css_element} h1, {$this->main_css_element} h2.et_pb_contact_main_title, {$this->main_css_element} h3.et_pb_contact_main_title, {$this->main_css_element} h4.et_pb_contact_main_title, {$this->main_css_element} h5.et_pb_contact_main_title, {$this->main_css_element} h6.et_pb_contact_main_title",
  69.                     ),
  70.                     'header_level' => array(
  71.                         'default' => 'h1',
  72.                     ),
  73.                 ),
  74.                 'form_field'   => array(
  75.                     'label'    => esc_html__( 'Form Field', 'et_builder' ),
  76.                     'css'      => array(
  77.                         'main' => array(
  78.                             "{$this->main_css_element} .input",
  79.                             "{$this->main_css_element} .input::-webkit-input-placeholder",
  80.                             "{$this->main_css_element} .input::-moz-placeholder",
  81.                             "{$this->main_css_element} .input:-ms-input-placeholder",
  82.                             "{$this->main_css_element} .input[type=checkbox] + label",
  83.                             "{$this->main_css_element} .input[type=radio] + label",
  84.                         ),
  85.                         'important' => 'plugin_only',
  86.                     ),
  87.                 ),
  88.             ),
  89.             'button' => array(
  90.                 'button' => array(
  91.                     'label' => esc_html__( 'Button', 'et_builder' ),
  92.                     'css' => array(
  93.                         'plugin_main' => "{$this->main_css_element}.et_pb_module .et_pb_button",
  94.                     ),
  95.                     'no_rel_attr' => true,
  96.                 ),
  97.             ),
  98.             'background' => array(),
  99.             'custom_margin_padding' => array(
  100.                 'css' => array(
  101.                     'important' => array( 'custom_margin' ), // needed to overwrite last module margin-bottom styling
  102.                 ),
  103.             ),
  104.             'max_width' => array(
  105.                 'css' => array(
  106.                     'module_alignment' => '%%order_class%%.et_pb_contact_form_container.et_pb_module',
  107.                 ),
  108.             ),
  109.             'text'      => array(
  110.                 'css' => array(
  111.                     'text_orientation' => '%%order_class%% input, %%order_class%% textarea, %%order_class%% label',
  112.                     'text_shadow'      => '%%order_class%%, %%order_class%% input, %%order_class%% textarea, %%order_class%% label, %%order_class%% select',
  113.                 ),
  114.             ),
  115.         );
  116.         $this->custom_css_options = array(
  117.             'contact_title' => array(
  118.                 'label'    => esc_html__( 'Contact Title', 'et_builder' ),
  119.                 'selector' => '.et_pb_contact_main_title',
  120.             ),
  121.             'contact_button' => array(
  122.                 'label'    => esc_html__( 'Contact Button', 'et_builder' ),
  123.                 'selector' => '.et_pb_contact_form_container .et_contact_bottom_container .et_pb_contact_submit.et_pb_button',
  124.                 'no_space_before_selector' => true,
  125.             ),
  126.             'contact_fields' => array(
  127.                 'label'    => esc_html__( 'Form Fields', 'et_builder' ),
  128.                 'selector' => 'input',
  129.             ),
  130.             'text_field' => array(
  131.                 'label'    => esc_html__( 'Message Field', 'et_builder' ),
  132.                 'selector' => 'textarea.et_pb_contact_message',
  133.             ),
  134.             'captcha_field' => array(
  135.                 'label'    => esc_html__( 'Captcha Field', 'et_builder' ),
  136.                 'selector' => 'input.et_pb_contact_captcha',
  137.             ),
  138.             'captcha_label' => array(
  139.                 'label'    => esc_html__( 'Captcha Text', 'et_builder' ),
  140.                 'selector' => '.et_pb_contact_right p',
  141.             ),
  142.         );
  143.     }
  144.  
  145.     function get_fields() {
  146.         $fields = array(
  147.             'captcha' => array(
  148.                 'label'           => esc_html__( 'Display Captcha', 'et_builder' ),
  149.                 'type'            => 'yes_no_button',
  150.                 'option_category' => 'configuration',
  151.                 'options'         => array(
  152.                     'on'  => esc_html__( 'Yes', 'et_builder' ),
  153.                     'off' => esc_html__( 'No', 'et_builder' ),
  154.                 ),
  155.                 'toggle_slug'     => 'elements',
  156.                 'description'     => esc_html__( 'Turn the captcha on or off using this option.', 'et_builder' ),
  157.             ),
  158.             'email' => array(
  159.                 'label'           => esc_html__( 'Email', 'et_builder' ),
  160.                 'type'            => 'text',
  161.                 'option_category' => 'basic_option',
  162.                 'description'     => et_get_safe_localization( sprintf(
  163.                     __( 'Input the email address where messages should be sent.<br /><br /> Note: email delivery and spam prevention are complex processes. We recommend using a delivery service such as <a href="%1$s">Mandrill</a>, <a href="%2$s">SendGrid</a>, or other similar service to ensure the deliverability of messages that are submitted through this form', 'et_builder' ),
  164.                     'http://mandrill.com/',
  165.                     'https://sendgrid.com/'
  166.                 ) ),
  167.                 'toggle_slug'     => 'email',
  168.             ),
  169.             'title' => array(
  170.                 'label'           => esc_html__( 'Title', 'et_builder' ),
  171.                 'type'            => 'text',
  172.                 'option_category' => 'basic_option',
  173.                 'description'     => esc_html__( 'Define a title for your contact form.', 'et_builder' ),
  174.                 'toggle_slug'     => 'main_content',
  175.             ),
  176.             'custom_message' => array(
  177.                 'label'           => esc_html__( 'Message Pattern', 'et_builder' ),
  178.                 'type'            => 'textarea',
  179.                 'option_category' => 'configuration',
  180.                 'description'     => et_get_safe_localization( __( 'Here you can define the custom pattern for the email Message. Fields should be included in following format - <strong>%%field_id%%</strong>. For example if you want to include the field with id = <strong>phone</strong> and field with id = <strong>message</strong>, then you can use the following pattern: <strong>My message is %%message%% and phone number is %%phone%%</strong>. Leave blank for default.', 'et_builder' ) ),
  181.                 'toggle_slug'     => 'email',
  182.             ),
  183.             'use_redirect' => array(
  184.                 'label'           => esc_html__( 'Enable Redirect URL', 'et_builder' ),
  185.                 'type'            => 'yes_no_button',
  186.                 'option_category' => 'configuration',
  187.                 'options'         => array(
  188.                     'off' => esc_html__( 'No', 'et_builder' ),
  189.                     'on'  => esc_html__( 'Yes', 'et_builder' ),
  190.                 ),
  191.                 'affects' => array(
  192.                     'redirect_url',
  193.                 ),
  194.                 'toggle_slug'     => 'redirect',
  195.                 'description'     => esc_html__( 'Redirect users after successful form submission.', 'et_builder' ),
  196.             ),
  197.             'redirect_url' => array(
  198.                 'label'           => esc_html__( 'Redirect URL', 'et_builder' ),
  199.                 'type'            => 'text',
  200.                 'option_category' => 'configuration',
  201.                 'depends_show_if' => 'on',
  202.                 'toggle_slug'     => 'redirect',
  203.                 'description'     => esc_html__( 'Type the Redirect URL', 'et_builder' ),
  204.             ),
  205.             'success_message' => array(
  206.                 'label'           => esc_html__( 'Success Message', 'et_builder' ),
  207.                 'type'            => 'text',
  208.                 'option_category' => 'configuration',
  209.                 'description'     => esc_html__( 'Type the message you want to display after successful form submission. Leave blank for default', 'et_builder' ),
  210.                 'toggle_slug'     => 'main_content',
  211.             ),
  212.             'submit_button_text' => array(
  213.                 'label'           => esc_html__( 'Submit Button Text', 'et_builder' ),
  214.                 'type'            => 'text',
  215.                 'option_category' => 'basic_option',
  216.                 'description'     => esc_html__( 'Define the text of the form submit button.', 'et_builder' ),
  217.                 'toggle_slug'     => 'main_content',
  218.             ),
  219.             'form_background_color' => array(
  220.                 'label'             => esc_html__( 'Form Field Background Color', 'et_builder' ),
  221.                 'type'              => 'color-alpha',
  222.                 'custom_color'      => true,
  223.                 'toggle_slug'       => 'form_field',
  224.                 'tab_slug'          => 'advanced',
  225.             ),
  226.             'disabled_on' => array(
  227.                 'label'           => esc_html__( 'Disable on', 'et_builder' ),
  228.                 'type'            => 'multiple_checkboxes',
  229.                 'options'         => array(
  230.                     'phone'   => esc_html__( 'Phone', 'et_builder' ),
  231.                     'tablet'  => esc_html__( 'Tablet', 'et_builder' ),
  232.                     'desktop' => esc_html__( 'Desktop', 'et_builder' ),
  233.                 ),
  234.                 'additional_att'  => 'disable_on',
  235.                 'option_category' => 'configuration',
  236.                 'description'     => esc_html__( 'This will disable the module on selected devices', 'et_builder' ),
  237.                 'tab_slug'        => 'custom_css',
  238.                 'toggle_slug'     => 'visibility',
  239.             ),
  240.             'admin_label' => array(
  241.                 'label'       => esc_html__( 'Admin Label', 'et_builder' ),
  242.                 'type'        => 'text',
  243.                 'description' => esc_html__( 'This will change the label of the module in the builder for easy identification.', 'et_builder' ),
  244.                 'toggle_slug' => 'admin_label',
  245.             ),
  246.             'module_id' => array(
  247.                 'label'           => esc_html__( 'CSS ID', 'et_builder' ),
  248.                 'type'            => 'text',
  249.                 'option_category' => 'configuration',
  250.                 'tab_slug'        => 'custom_css',
  251.                 'toggle_slug'     => 'classes',
  252.                 'option_class'    => 'et_pb_custom_css_regular',
  253.             ),
  254.             'module_class' => array(
  255.                 'label'           => esc_html__( 'CSS Class', 'et_builder' ),
  256.                 'type'            => 'text',
  257.                 'option_category' => 'configuration',
  258.                 'tab_slug'        => 'custom_css',
  259.                 'toggle_slug'     => 'classes',
  260.                 'option_class'    => 'et_pb_custom_css_regular',
  261.             ),
  262.         );
  263.  
  264.         return $fields;
  265.     }
  266.  
  267.     function predefined_child_modules() {
  268.         $output = sprintf(
  269.             '[et_pb_contact_field field_title="%1$s" field_type="input" field_id="Name" required_mark="on" fullwidth_field="off" /][et_pb_contact_field field_title="%2$s" field_type="email" field_id="Email" required_mark="on" fullwidth_field="off" /][et_pb_contact_field field_title="%3$s" field_type="text" field_id="Message" required_mark="on" fullwidth_field="on" /]',
  270.             esc_attr__( 'Name', 'et_builder' ),
  271.             esc_attr__( 'Email Address', 'et_builder' ),
  272.             esc_attr__( 'Message', 'et_builder' )
  273.         );
  274.  
  275.         return $output;
  276.     }
  277.  
  278.     function shortcode_callback( $atts, $content = null, $function_name ) {
  279.         $module_id             = $this->shortcode_atts['module_id'];
  280.         $module_class          = $this->shortcode_atts['module_class'];
  281.         $captcha               = $this->shortcode_atts['captcha'];
  282.         $email                 = $this->shortcode_atts['email'];
  283.         $title                 = $this->shortcode_atts['title'];
  284.         $form_field_text_color = $this->shortcode_atts['form_field_text_color'];
  285.         $form_background_color = $this->shortcode_atts['form_background_color'];
  286.         $button_custom         = $this->shortcode_atts['custom_button'];
  287.         $custom_icon           = $this->shortcode_atts['button_icon'];
  288.         $submit_button_text    = $this->shortcode_atts['submit_button_text'];
  289.         $custom_message        = $this->shortcode_atts['custom_message'];
  290.         $use_redirect          = $this->shortcode_atts['use_redirect'];
  291.         $redirect_url          = $this->shortcode_atts['redirect_url'];
  292.         $success_message       = $this->shortcode_atts['success_message'];
  293.         $header_level          = $this->shortcode_atts['title_level'];
  294.  
  295.         global $et_pb_contact_form_num;
  296.  
  297.         $module_class              = ET_Builder_Element::add_module_order_class( $module_class, $function_name );
  298.         $video_background          = $this->video_background();
  299.         $parallax_image_background = $this->get_parallax_image_background();
  300.  
  301.         if ( '' !== $form_field_text_color ) {
  302.             ET_Builder_Element::set_style( $function_name, array(
  303.                 'selector'    => '%%order_class%% .input[type="checkbox"]:checked + label i:before',
  304.                 'declaration' => sprintf(
  305.                     'color: %1$s%2$s;',
  306.                     esc_html( $form_field_text_color ),
  307.                     et_is_builder_plugin_active() ? ' !important' : ''
  308.                 ),
  309.             ) );
  310.  
  311.             ET_Builder_Element::set_style( $function_name, array(
  312.                 'selector'    => '%%order_class%% .input[type="radio"]:checked + label i:before',
  313.                 'declaration' => sprintf(
  314.                     'background-color: %1$s%2$s;',
  315.                     esc_html( $form_field_text_color ),
  316.                     et_is_builder_plugin_active() ? ' !important' : ''
  317.                 ),
  318.             ) );
  319.         }
  320.  
  321.         if ( '' !== $form_background_color ) {
  322.             ET_Builder_Element::set_style( $function_name, array(
  323.                 'selector'    => '%%order_class%% .input, %%order_class%% .input[type="checkbox"] + label i, %%order_class%% .input[type="radio"] + label i',
  324.                 'declaration' => sprintf(
  325.                     'background-color: %1$s%2$s;',
  326.                     esc_html( $form_background_color ),
  327.                     et_is_builder_plugin_active() ? ' !important' : ''
  328.                 ),
  329.             ) );
  330.         }
  331.  
  332.         $success_message = '' !== $success_message ? $success_message : esc_html__( 'Thanks for contacting us', 'et_builder' );
  333.  
  334.         $et_pb_contact_form_num = $this->shortcode_callback_num();
  335.  
  336.         $content = $this->shortcode_content;
  337.  
  338.         $et_error_message = '';
  339.         $et_contact_error = false;
  340.         $current_form_fields = isset( $_POST['et_pb_contact_email_fields_' . $et_pb_contact_form_num] ) ? $_POST['et_pb_contact_email_fields_' . $et_pb_contact_form_num] : '';
  341.         $hidden_form_fields = isset( $_POST['et_pb_contact_email_hidden_fields_' . $et_pb_contact_form_num] ) ? $_POST['et_pb_contact_email_hidden_fields_' . $et_pb_contact_form_num] : false;
  342.         $contact_email = '';
  343.         $processed_fields_values = array();
  344.  
  345.         $nonce_result = isset( $_POST['_wpnonce-et-pb-contact-form-submitted'] ) && wp_verify_nonce( $_POST['_wpnonce-et-pb-contact-form-submitted'], 'et-pb-contact-form-submit' ) ? true : false;
  346.  
  347.         // check that the form was submitted and et_pb_contactform_validate field is empty to protect from spam
  348.         if ( $nonce_result && isset( $_POST['et_pb_contactform_submit_' . $et_pb_contact_form_num] ) && empty( $_POST['et_pb_contactform_validate_' . $et_pb_contact_form_num] ) ) {
  349.             if ( '' !== $current_form_fields ) {
  350.                 $fields_data_json = str_replace( '\\', '' ,  $current_form_fields );
  351.                 $fields_data_array = json_decode( $fields_data_json, true );
  352.  
  353.                 // check whether captcha field is not empty
  354.                 if ( 'on' === $captcha && ( ! isset( $_POST['et_pb_contact_captcha_' . $et_pb_contact_form_num] ) || empty( $_POST['et_pb_contact_captcha_' . $et_pb_contact_form_num] ) ) ) {
  355.                     $et_error_message .= sprintf( '<p class="et_pb_contact_error_text">%1$s</p>', esc_html__( 'Make sure you entered the captcha.', 'et_builder' ) );
  356.                     $et_contact_error = true;
  357.                 }
  358.  
  359.                 // check all fields on current form and generate error message if needed
  360.                 if ( ! empty( $fields_data_array ) ) {
  361.                     foreach( $fields_data_array as $index => $value ) {
  362.                         // check all the required fields, generate error message if required field is empty
  363.                         if ( 'required' === $value['required_mark'] && empty( $_POST[ $value['field_id'] ] ) ) {
  364.                             $et_error_message .= sprintf( '<p class="et_pb_contact_error_text">%1$s</p>', esc_html__( 'Make sure you fill in all required fields.', 'et_builder' ) );
  365.                             $et_contact_error = true;
  366.                             continue;
  367.                         }
  368.  
  369.                         // additional check for email field
  370.                         if ( 'email' === $value['field_type'] && 'required' === $value['required_mark'] && ! empty( $_POST[ $value['field_id'] ] ) ) {
  371.                             $contact_email = sanitize_email( $_POST[ $value['field_id'] ] );
  372.                             if ( ! is_email( $contact_email ) ) {
  373.                                 $et_error_message .= sprintf( '<p class="et_pb_contact_error_text">%1$s</p>', esc_html__( 'Invalid Email.', 'et_builder' ) );
  374.                                 $et_contact_error = true;
  375.                             }
  376.                         }
  377.  
  378.                         // prepare the array of processed field values in convenient format
  379.                         if ( false === $et_contact_error ) {
  380.                             $processed_fields_values[ $value['original_id'] ]['value'] = isset( $_POST[ $value['field_id'] ] ) ? $_POST[ $value['field_id'] ] : '';
  381.                             $processed_fields_values[ $value['original_id'] ]['label'] = $value['field_label'];
  382.                         }
  383.                     }
  384.                 }
  385.             } else {
  386.                 $et_error_message .= sprintf( '<p class="et_pb_contact_error_text">%1$s</p>', esc_html__( 'Make sure you fill in all required fields.', 'et_builder' ) );
  387.                 $et_contact_error = true;
  388.             }
  389.         } else {
  390.             if ( false === $nonce_result && isset( $_POST['et_pb_contactform_submit_' . $et_pb_contact_form_num] ) && empty( $_POST['et_pb_contactform_validate_' . $et_pb_contact_form_num] ) ) {
  391.                 $et_error_message .= sprintf( '<p class="et_pb_contact_error_text">%1$s</p>', esc_html__( 'Please refresh the page and try again.', 'et_builder' ) );
  392.             }
  393.             $et_contact_error = true;
  394.         }
  395.  
  396.         // generate digits for captcha
  397.         $et_pb_first_digit = rand( 1, 15 );
  398.         $et_pb_second_digit = rand( 1, 15 );
  399.  
  400.         if ( ! $et_contact_error && $nonce_result ) {
  401.             $et_email_to = '' !== $email
  402.                 ? $email
  403.                 : get_site_option( 'admin_email' );
  404.  
  405.             $et_site_name = get_option( 'blogname' );
  406.  
  407.             $contact_name = isset( $processed_fields_values['name'] ) ? stripslashes( sanitize_text_field( $processed_fields_values['name']['value'] ) ) : '';
  408.  
  409.             if ( '' !== $custom_message ) {
  410.                 $message_pattern = et_builder_convert_line_breaks( $custom_message, "\r\n" );
  411.  
  412.                 // insert the data from contact form into the message pattern
  413.                 foreach ( $processed_fields_values as $key => $value ) {
  414.                     $message_pattern = str_ireplace( "%%{$key}%%", $value['value'], $message_pattern );
  415.                 }
  416.  
  417.                 if ( false !== $hidden_form_fields ) {
  418.                     $hidden_form_fields = str_replace( '\\', '' ,  $hidden_form_fields );
  419.                     $hidden_form_fields = json_decode( $hidden_form_fields );
  420.  
  421.                     if ( is_array( $hidden_form_fields ) ) {
  422.                         foreach ( $hidden_form_fields as $hidden_field_label ) {
  423.                             $message_pattern = str_ireplace( "%%{$hidden_field_label}%%", '', $message_pattern );
  424.                         }
  425.                     }
  426.                 }
  427.             } else {
  428.                 // use default message pattern if custom pattern is not defined
  429.                 $message_pattern = isset( $processed_fields_values['message']['value'] ) ? $processed_fields_values['message']['value'] : '';
  430.  
  431.                 // Add all custom fields into the message body by default
  432.                 foreach ( $processed_fields_values as $key => $value ) {
  433.                     if ( ! in_array( $key, array( 'message', 'name', 'email' ) ) ) {
  434.                         $message_pattern .= "\r\n";
  435.                         $message_pattern .= sprintf(
  436.                             '%1$s: %2$s',
  437.                             '' !== $value['label'] ? $value['label'] : $key,
  438.                             $value['value']
  439.                         );
  440.                     }
  441.                 }
  442.             }
  443.  
  444.             $http_host = str_replace( 'www.', '', $_SERVER['HTTP_HOST'] );
  445.  
  446.             $headers[] = "From: \"{$contact_name}\" <mail@{$http_host}>";
  447.             $headers[] = "Reply-To: \"{$contact_name}\" <{$contact_email}>";
  448.  
  449.             add_filter( 'et_get_safe_localization', 'et_allow_ampersand' );
  450.  
  451.             $email_message = trim( stripslashes( wp_strip_all_tags( $message_pattern ) ) );
  452.  
  453.             wp_mail( apply_filters( 'et_contact_page_email_to', $et_email_to ),
  454.                 et_get_safe_localization( sprintf(
  455.                     __( 'New Message From %1$s%2$s', 'et_builder' ),
  456.                     sanitize_text_field( html_entity_decode( $et_site_name, ENT_QUOTES, 'UTF-8' ) ),
  457.                     ( '' !== $title ? sprintf( _x( ' - %s', 'contact form title separator', 'et_builder' ), sanitize_text_field( html_entity_decode( $title, ENT_QUOTES, 'UTF-8' ) ) ) : '' )
  458.                 ) ),
  459.                 ! empty( $email_message ) ? $email_message : ' ',
  460.                 apply_filters( 'et_contact_page_headers', $headers, $contact_name, $contact_email )
  461.             );
  462.  
  463.             remove_filter( 'et_get_safe_localization', 'et_allow_ampersand' );
  464.  
  465.             $et_error_message = sprintf( '<p>%1$s</p>', esc_html( $success_message ) );
  466.         }
  467.  
  468.         $form = '';
  469.  
  470.         $et_pb_captcha = sprintf( '
  471.             <div class="et_pb_contact_right">
  472.                 <p class="clearfix">
  473.                     <span class="et_pb_contact_captcha_question">%1$s</span> = <input type="text" size="2" class="input et_pb_contact_captcha" data-first_digit="%3$s" data-second_digit="%4$s" value="" name="et_pb_contact_captcha_%2$s" data-required_mark="required">
  474.                 </p>
  475.             </div> <!-- .et_pb_contact_right -->',
  476.             sprintf( '%1$s + %2$s', esc_html( $et_pb_first_digit ), esc_html( $et_pb_second_digit ) ),
  477.             esc_attr( $et_pb_contact_form_num ),
  478.             esc_attr( $et_pb_first_digit ),
  479.             esc_attr( $et_pb_second_digit )
  480.         );
  481.  
  482.         if ( '' === trim( $content ) ) {
  483.             $content = do_shortcode( $this->predefined_child_modules() );
  484.         }
  485.  
  486.         if ( $et_contact_error ) {
  487.             // Make sure submit button text is not just a space
  488.             $submit_button_text = trim( $submit_button_text );
  489.  
  490.             // We can't use `empty( trim() )` because that throws
  491.             // an error on old(er) PHP versions
  492.             if ( empty( $submit_button_text ) ) {
  493.                 $submit_button_text = __( 'Submit', 'et_builder' );
  494.             }
  495.  
  496.             $form = sprintf( '
  497.                 <div class="et_pb_contact">
  498.                     <form class="et_pb_contact_form clearfix" method="post" action="%1$s">
  499.                         %8$s
  500.                         <input type="hidden" value="et_contact_proccess" name="et_pb_contactform_submit_%7$s">
  501.                         <input type="text" value="" name="et_pb_contactform_validate_%7$s" class="et_pb_contactform_validate_field" />
  502.                         <div class="et_contact_bottom_container">
  503.                             %2$s
  504.                             <button type="submit" class="et_pb_contact_submit et_pb_button%6$s"%5$s>%3$s</button>
  505.                         </div>
  506.                         %4$s
  507.                     </form>
  508.                 </div> <!-- .et_pb_contact -->',
  509.                 esc_url( get_permalink( get_the_ID() ) ),
  510.                 (  'on' === $captcha ? $et_pb_captcha : '' ),
  511.                 esc_html( $submit_button_text ),
  512.                 wp_nonce_field( 'et-pb-contact-form-submit', '_wpnonce-et-pb-contact-form-submitted', true, false ),
  513.                 '' !== $custom_icon && 'on' === $button_custom ? sprintf(
  514.                     ' data-icon="%1$s"',
  515.                     esc_attr( et_pb_process_font_icon( $custom_icon ) )
  516.                 ) : '',
  517.                 '' !== $custom_icon && 'on' === $button_custom ? ' et_pb_custom_button_icon' : '',
  518.                 esc_attr( $et_pb_contact_form_num ),
  519.                 $content
  520.             );
  521.         }
  522.  
  523.         $output = sprintf( '
  524.             <div id="%4$s" class="et_pb_module et_pb_contact_form_container clearfix%5$s%8$s%10$s%12$s" data-form_unique_num="%6$s"%7$s>
  525.                 %11$s
  526.                 %9$s
  527.                 %1$s
  528.                 <div class="et-pb-contact-message">%2$s</div>
  529.                 %3$s
  530.             </div> <!-- .et_pb_contact_form_container -->
  531.             ',
  532.             ( '' !== $title ? sprintf( '<%2$s class="et_pb_contact_main_title">%1$s</%2$s>', esc_html( $title ), et_pb_process_header_level( $header_level, 'h1' ) ) : '' ),
  533.             '' !== $et_error_message ? $et_error_message : '',
  534.             $form,
  535.             ( '' !== $module_id
  536.                 ? esc_attr( $module_id )
  537.                 : esc_attr( 'et_pb_contact_form_' . $et_pb_contact_form_num )
  538.             ),
  539.             ( '' !== $module_class ? sprintf( ' %1$s', esc_attr( $module_class ) ) : '' ),
  540.             esc_attr( $et_pb_contact_form_num ),
  541.             'on' === $use_redirect && '' !== $redirect_url ? sprintf( ' data-redirect_url="%1$s"', esc_attr( $redirect_url ) ) : '',
  542.             '' !== $video_background ? ' et_pb_section_video et_pb_preload' : '',
  543.             $video_background,
  544.             '' !== $parallax_image_background ? ' et_pb_section_parallax' : '',
  545.             $parallax_image_background,
  546.             $this->get_text_orientation_classname()
  547.         );
  548.  
  549.         return $output;
  550.     }
  551.  
  552.     public function process_box_shadow( $function_name ) {
  553.         $boxShadow = ET_Builder_Module_Fields_Factory::get( 'BoxShadow' );
  554.  
  555.         $selectors = array(
  556.             '%%order_class%% .et_pb_contact_field input',
  557.             '%%order_class%% .et_pb_contact_field select',
  558.             '%%order_class%% .et_pb_contact_field textarea',
  559.             '%%order_class%% .et_pb_contact_field .et_pb_contact_field_options_list label > i',
  560.             '%%order_class%% input.et_pb_contact_captcha',
  561.         );
  562.         self::set_style( $function_name, array(
  563.                 'selector' => implode( ', ', $selectors ),
  564.                 'declaration' => $boxShadow->get_value( $this->shortcode_atts )
  565.             )
  566.         );
  567.  
  568.         if (
  569.             isset( $this->shortcode_atts['custom_button'] )
  570.             &&
  571.             $this->shortcode_atts['custom_button'] === 'on'
  572.         ) {
  573.             self::set_style( $function_name, array(
  574.                     'selector'    => '%%order_class%% .et_pb_contact_submit',
  575.                     'declaration' => $boxShadow->get_value( $this->shortcode_atts, array( 'suffix' => '_button' ) )
  576.                 )
  577.             );
  578.         }
  579.     }
  580. }
  581.  
  582. new ET_Builder_Module_Contact_Form;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement