View difference between Paste ID: j6Zxqr4Q and MgYH5Vz8
SHOW: | | - or go back to the newest paste.
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;