Guest User

Untitled

a guest
Apr 6th, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.62 KB | None | 0 0
  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