PluginProbe
Booking Calendar / 10.1.3
Booking Calendar v10.1.3
11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 10.11 10.11.2 All 203 releases
booking / core / admin / page-email-approved.php

page-email-approved.php in Booking Calendar 10.1.3, at core/admin/page-email-approved.php

1,083 lines 61.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @version 1.0
4 * @package Content
5 * @category Menu
6 * @author wpdevelop
7 *
8 * @web-site https://wpbookingcalendar.com/
9 * @email info@wpbookingcalendar.com
10 *
11 * @modified 2015-04-09
12 */
13
14 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
15
16
17 if ( ! defined( 'WPBC_EMAIL_APPROVED_PREFIX' ) ) define( 'WPBC_EMAIL_APPROVED_PREFIX', 'booking_email_' ); // Its defined in api-emails.php file & its same for all emails, here its used only for easy coding...
18
19 if ( ! defined( 'WPBC_EMAIL_APPROVED_ID' ) ) define( 'WPBC_EMAIL_APPROVED_ID', 'approved' ); /* Define Name of Email Template.
20 Note. Prefix "booking_email_" defined in api-emails.php file.
21 Full name of option is - "booking_email_approved"
22 Other email templates names:
23 - 'new_admin'
24 - 'new_visitor'
25 - 'approved'
26 - 'deny' -- pending, trash, deleted
27 - 'payment_request'
28 - 'modification'
29 */
30
31
32 require_once( WPBC_PLUGIN_DIR . '/core/any/api-emails.php' ); // API
33
34
35
36 // <editor-fold defaultstate="collapsed" desc=" Import Old Data " >
37
38 function wpbc_import6_is_old_email_approved_exist() {
39
40 $is_old_data_exist = get_bk_option( 'booking_email_approval_content' );
41
42 if ( ! empty( $is_old_data_exist ) ) // Check if Old data exist
43 return true;
44 else
45 return false;
46 }
47
48 function wpbc_import6_get_old_email_approved_data() {
49
50 $default_values = array();
51 if ( wpbc_import6_is_old_email_approved_exist() ) {
52 $default_values['enabled'] = get_bk_option( 'booking_is_email_approval_adress' );
53 $default_values['copy_to_admin'] = get_bk_option( 'booking_is_email_approval_send_copy_to_admin' ); //Parse it to Name and Email
54 $default_values['from'] = get_bk_option( 'booking_email_approval_adress' ); //Parse it to Name and Email, relpace [visitoremail]
55 $default_values['subject'] = get_bk_option( 'booking_email_approval_subject' );
56 $default_values['content'] = get_bk_option( 'booking_email_approval_content' );
57
58 }
59 return $default_values;
60 }
61
62
63 function wpbc_import6_is_new_email_approved_exist() {
64
65 $is_data_exist = get_bk_option( WPBC_EMAIL_APPROVED_PREFIX . WPBC_EMAIL_APPROVED_ID ); // ''booking_email_' - defined in api-emails.php file.
66
67 if ( ! empty( $is_data_exist ) ) // Check if data exist
68 return true;
69 else
70 return false;
71 }
72
73
74 function wpbc_import6_email__approved__get_fields_array_for_activation() {
75
76
77 if ( ! wpbc_import6_is_new_email_approved_exist() ) { // New Email Template NOT exist
78
79 // Import
80 $old_data = wpbc_import6_get_old_email_approved_data();
81 if ( ! empty( $old_data ) ) { // Get Old data
82
83 /*
84 $old_data = [
85 [enabled] => On
86 [to] => "Booking system" <beta@wpbookingcalendar.com>
87 [from] => [visitoremail]
88 [subject] => New booking
89 [content] => You need to approve a new booking [bookingtype] for: [dates]<br/><br/> Person detail information:<br/> [content]<br/><br/> Currently a new booking is waiting for approval. Please visit the moderation panel [moderatelink]<br/><br/>Thank you, Beta<br/>[siteurl]
90 ]
91 wpbc_get_email_parts() >>> return [
92 [email] => beta@wpbookingcalendar.com
93 [title] => Booking system
94 [original] => "Booking system"
95 [original_to_show] => "Booking system" <beta@wpbookingcalendar.com>
96 ]
97 */
98
99 // Make transform - emails
100 // $email_to = wpbc_get_email_parts( $old_data['to'] );
101 $email_from = wpbc_get_email_parts( $old_data['from'] );
102
103 // $old_data['to'] = $email_to['email']; // 'beta@wpbookingcalendar.com' // booking_email_reservation_adress
104 // $old_data['to_name'] = $email_to['title']; // 'Booking system' // booking_email_reservation_adress
105 /* Description of Code.
106 * Here we replacing any shortcodes, like [visitoremail] to get_option( 'admin_email' )
107 * because we are setting in header "Reply-To" visitor emil from the booking form - its exist by hook for this email template at the wpbc-emails.php file
108 *
109 * Here we need to use for field "From" email with DNS same as DNS in the website. In most cases its have to be the get_option( 'admin_email' )
110 *
111 * After parsing with wpbc_get_email_parts, if we was have [visitoremail] in this field, then $email_from['email'] will be empty. So we check it and set admin email.
112 *
113 */
114 $old_data['from'] = ( empty( $email_from['email'] ) ? get_option( 'admin_email' ) /*$email_from['original']*/ : $email_from['email'] ); // [visitoremail] | email@server.com // booking_email_reservation_from_adress
115 $old_data['from_name'] = $email_from['title']; // [visitoremail] | 'Booking System' | '' // booking_email_reservation_from_adress
116
117 // $old_data['subject'] = html_entity_decode( $old_data['subject'] );
118 // $old_data['content'] = html_entity_decode( $old_data['content'] );
119 }
120
121 // Default
122 $init_fields_values = $old_data;
123 $mail_api = new WPBC_Emails_API_Approved( WPBC_EMAIL_APPROVED_ID , $init_fields_values );
124
125 $default_fields_in_settings = $mail_api->get_default_values() ; // Get default fields values, from settings - defined in function init_settings_fields {class WPBC_Emails_API_Approved}
126
127 $fields_values = wp_parse_args( $old_data, $default_fields_in_settings );
128
129 return array( WPBC_EMAIL_APPROVED_PREFIX . WPBC_EMAIL_APPROVED_ID => $fields_values );
130
131 /*
132 Array (
133 [booking_email_approved] => Array
134 (
135 [enabled] => On
136 [to] => beta@wpbookingcalendar.com
137 [to_name] => Booking system
138 [from] => admin@wpbookingcalendar.com
139 [from_name] =>
140 [subject] => New booking
141 [content] => You need to approve a new booking [bookingtype] for: [dates]...
142 [header_content] =>
143 [footer_content] =>
144 [template_file] => plain
145 [base_color] => #557da1
146 [background_color] => #f5f5f5
147 [body_color] => #fdfdfd
148 [text_color] => #505050
149 [email_content_type] => html
150 )
151 )
152
153 // $mail_api->save_to_db( $fields_values );
154
155 */
156
157 } else { // New Email Template is Exist - return empty array(), its will make loading of data from DB, during activation Mail API class.
158 return array( WPBC_EMAIL_APPROVED_PREFIX . WPBC_EMAIL_APPROVED_ID => array() );
159 }
160 }
161 // </editor-fold>
162
163
164
165 /** Email F i e l d s */
166 class WPBC_Emails_API_Approved extends WPBC_Emails_API { // O v e r r i d i n g "WPBC_Emails_API" ClASS
167
168
169 /** Overrided functions - define Email Fields & Values */
170 public function init_settings_fields() {
171
172 $this->fields = array();
173
174 $this->fields['enabled'] = array(
175 'type' => 'checkbox'
176 , 'default' => 'On'
177 , 'title' => __('Enable / Disable', 'booking')
178 , 'label' => __('Enable this email notification', 'booking')
179 , 'description' => ''
180 , 'group' => 'general'
181
182 );
183
184
185
186 $this->fields['copy_to_admin'] = array(
187 'type' => 'checkbox'
188 , 'default' => 'Off'
189 , 'title' => __('Copy(ies)', 'booking') //FixIn: 8.1.2.17.1
190 , 'label' => __('Enable / disable sending email(s) to additional addresses', 'booking') . ' (admin@; sales@; others@)' //FixIn: 8.1.2.17.1
191 , 'description' => ''
192 , 'group' => 'general'
193
194 );
195
196
197 //FixIn: 8.1.2.17
198 $this->fields['to_html_prefix'] = array(
199 'type' => 'pure_html'
200 , 'group' => 'general'
201 , 'html' => '<tr valign="top" class="wpbc_tr_copy_to_admin_to">
202 <th scope="row">
203 <label class="wpbc-form-email" for="'
204 . esc_attr( 'approved_to' )
205 . '">' . wp_kses_post( __('To' ,'booking') ) . ' (' . strtolower( __('Copy(ies)', 'booking') ). ')' //FixIn: 8.1.2.17.1
206 . '</label>
207 </th>
208 <td><fieldset style="float:left;width:50%;margin-right:5%;">'
209 );
210 $this->fields['to'] = array(
211 'type' => 'text' // We are using here 'text' and not 'email', for ability to save several comma seperated emails.
212 , 'default' => get_option( 'admin_email' )
213 //, 'placeholder' => ''
214 , 'title' => ''
215 , 'description' => __('Email Address', 'booking') . '. ' . __('Required', 'booking') . '. '
216 . __('You can put multiple emails separated by', 'booking') . ' <code>;</code>' //FixIn: 8.1.2.17.1
217 , 'description_tag' => ''
218 , 'css' => 'width:100%'
219 , 'group' => 'general'
220 , 'tr_class' => ''
221 , 'only_field' => true
222 , 'validate_as' => array( )
223 );
224 $this->fields['to_html_middle'] = array(
225 'type' => 'pure_html'
226 , 'group' => 'general'
227 , 'html' => '</fieldset><fieldset style="float:left;width:45%;">'
228 );
229 $this->fields['to_name'] = array(
230 'type' => 'text'
231 , 'default' => 'Booking system'
232 //, 'placeholder' => ''
233 , 'title' => ''
234 , 'description' => __('Title', 'booking') . ' (' . __('optional', 'booking') . ').' //. ' ' . __('If empty then title defined as WordPress', 'booking')
235 , 'description_tag' => ''
236 , 'css' => 'width:100%'
237 , 'group' => 'general'
238 , 'tr_class' => ''
239 , 'only_field' => true
240 );
241 $this->fields['to_html_sufix'] = array(
242 'type' => 'pure_html'
243 , 'group' => 'general'
244 , 'html' => ' </fieldset>
245 </td>
246 </tr>'
247 );
248
249 $this->fields['to_hr'] = array( 'type' => 'hr' );
250 /**/
251 //FixIn: 8.1.2.17 - END
252
253
254
255 $this->fields['from_html_prefix'] = array(
256 'type' => 'pure_html'
257 , 'group' => 'general'
258 , 'html' => '<tr valign="top">
259 <th scope="row">
260 <label class="wpbc-form-email" for="'
261 . esc_attr( 'approved_from' )
262 . '">' . wp_kses_post( __('From' ,'booking') )
263 . '</label>
264 </th>
265 <td><fieldset style="float:left;width:50%;margin-right:5%;">'
266 );
267 $this->fields['from'] = array(
268 'type' => 'email' // Its can be only 1 email, so check it as Email field.
269 , 'default' => get_option( 'admin_email' )
270 //, 'placeholder' => ''
271 , 'title' => ''
272 , 'description' => __('Email Address', 'booking') . '. ' . __('Required', 'booking') . '. ' . __('Email Address will be used in the FROM field of response to Visitor.', 'booking') //FixIn: 8.1.2.17
273 , 'description_tag' => ''
274 , 'css' => 'width:100%'
275 , 'group' => 'general'
276 , 'tr_class' => ''
277 , 'only_field' => true
278 , 'validate_as' => array( 'required' )
279 );
280 $this->fields['from_html_middle'] = array(
281 'type' => 'pure_html'
282 , 'group' => 'general'
283 , 'html' => '</fieldset><fieldset style="float:left;width:45%;">'
284 );
285 $this->fields['from_name'] = array(
286 'type' => 'text'
287 , 'default' => 'Booking system'
288 //, 'placeholder' => ''
289 , 'title' => ''
290 , 'description' => __('Title', 'booking') . ' (' . __('optional', 'booking') . ').' //. ' ' . __('If empty then title defined as WordPress', 'booking')
291 , 'description_tag' => ''
292 , 'css' => 'width:100%'
293 , 'group' => 'general'
294 , 'tr_class' => ''
295 , 'only_field' => true
296 );
297 $this->fields['from_html_sufix'] = array(
298 'type' => 'pure_html'
299 , 'group' => 'general'
300 , 'html' => ' </fieldset>
301 </td>
302 </tr>'
303 );
304
305
306
307
308 $this->fields['subject_before'] = array(
309 'type' => 'pure_html'
310 , 'group' => 'general_content'
311 , 'html' => '<tr><td colspan="2">'
312 .'<div style="margin: 0 0 15px;font-weight: 600;">'
313 .'<label class="wpbc-form-email-subject" for="' . WPBC_EMAIL_APPROVED_ID . '_subject">' .
314 __( 'Subject', 'booking' )
315 . '</label></div>'
316 );
317 $this->fields['subject'] = array(
318 'type' => 'text'
319 , 'default' => __( 'Your booking has been approved', 'booking' )
320 //, 'placeholder' => ''
321 , 'title' => __('Subject', 'booking')
322 , 'description' => ''
323 , 'description_tag' => ''
324 , 'css' => 'width:100%;font-size:16px;line-height:34px;font-weight:600;'
325 , 'group' => 'general_content'
326 , 'tr_class' => ''
327 , 'validate_as' => array( 'required' )
328 , 'only_field' => true
329 );
330 $this->fields['subject_after'] = array( 'type' => 'pure_html', 'group' => 'general_content',
331 'html' => '<p style="text-align: right;font-size:12px;">'
332 . sprintf(__('Type your email %ssubject%s for the booking confirmation message.' ,'booking'),'<b>','</b>') . ' ' . __('Required', 'booking')
333 . '.</p>' . '</td></tr>' );
334
335 $blg_title = get_option( 'blogname' );
336 $blg_title = str_replace( array( '"', "'" ), '', $blg_title );
337
338 if ( class_exists( 'wpdev_bk_personal' ) ) {
339 $email_content = sprintf( __( 'Your reservation %s for: %s has been approved.%sYou can edit the booking on this page: %s Thank you, %s', 'booking' ), '[bookingtype]', '[dates]', '<br/><br/>[content]<br/><br/>', '[visitorbookingediturl]<br/><br/>', $blg_title . '<br/>[siteurl]' );
340 } else {
341 $email_content = sprintf( __( 'Your booking %s for: %s has been approved.%sThank you, %s', 'booking' ), '[bookingtype]', '[dates]', '<br/><br/>[content]<br/><br/>', $blg_title . '<br/>[siteurl]' );
342 }
343
344 $this->fields['content_before'] = array(
345 'type' => 'pure_html',
346 'group' => 'general_content',
347 'html' => '<tr><td colspan="2" style="padding-bottom:0;">'
348 . '<div style="margin: 0;font-weight: 600;">'
349 . '<label class="wpbc-form-email-content" for="' . WPBC_EMAIL_APPROVED_ID . '_content">' .
350 __( 'Content', 'booking' )
351 . '</label></div>'
352 );
353 $this->fields['content'] = array(
354 'type' => 'wp_textarea'
355 , 'default' => $email_content
356 //, 'placeholder' => ''
357 , 'title' => __('Content', 'booking')
358 , 'description' => ''//__('Type your email message content. ', 'booking')
359 , 'description_tag' => ''
360 , 'css' => ''
361 , 'group' => 'general_content'
362 , 'tr_class' => ''
363 , 'rows' => 17
364 , 'show_in_2_cols' => true
365 , 'only_field' => true
366 );
367 $this->fields['content_after'] = array( 'type' => 'pure_html', 'group' => 'general_content', 'html' => '</td></tr>' );
368 // $this->fields['content'] = htmlspecialchars( $this->fields['content'] );// Convert > to &gt;
369 // $this->fields['content'] = html_entity_decode( $this->fields['content'] );// Convert &gt; to >
370
371
372
373 ////////////////////////////////////////////////////////////////////
374 // Style
375 ////////////////////////////////////////////////////////////////////
376
377
378 $this->fields['header_content'] = array(
379 'type' => 'textarea'
380 , 'default' => ''
381 , 'title' => __('Email Heading', 'booking')
382 , 'description' => __('Enter main heading contained within the email notification.', 'booking')
383 //, 'placeholder' => ''
384 , 'rows' => 2
385 , 'css' => "width:100%;"
386 , 'group' => 'parts'
387 );
388 $this->fields['footer_content'] = array(
389 'type' => 'textarea'
390 , 'default' => ''
391 , 'title' => __('Email Footer Text', 'booking')
392 , 'description' => __('Enter text contained within footer of the email notification', 'booking')
393 //, 'placeholder' => ''
394 , 'rows' => 2
395 , 'css' => 'width:100%;'
396 , 'group' => 'parts'
397 );
398
399 $this->fields['template_file'] = array(
400 'type' => 'select'
401 , 'default' => 'plain'
402 , 'title' => __('Email template', 'booking')
403 , 'description' => __('Choose email template.', 'booking')
404 , 'description_tag' => 'span'
405 , 'css' => ''
406 , 'options' => array(
407 'plain' => __('Plain (without styles)', 'booking')
408 , 'standard' => __('Standard 1 column', 'booking')
409 )
410 , 'group' => 'style'
411 );
412
413 $this->fields['template_file_help'] = array(
414 'type' => 'help'
415 , 'value' => array( sprintf( __('You can override this email template in this folder %s', 'booking')
416 , '<code>' . realpath( dirname(__FILE__) . '/../any/emails_tpl/' ) . '</code>' )
417 )
418 , 'cols' => 2
419 , 'group' => 'style'
420 );
421
422 $this->fields['base_color'] = array(
423 'type' => 'color'
424 , 'default' => '#557da1'
425 , 'title' => __('Base Color', 'booking')
426 , 'description' => __('The base color for email templates.', 'booking')
427 . ' ' . __('Default color', 'booking') .': <code>#557da1</code>.'
428 , 'group' => 'style'
429 , 'tr_class' => 'template_colors'
430 );
431 $this->fields['background_color'] = array(
432 'type' => 'color'
433 , 'default' => '#f5f5f5'
434 , 'title' => __('Background Color', 'booking')
435 , 'description' => __('The background color for email templates.', 'booking')
436 . ' ' . __('Default color', 'booking') .': <code>#f5f5f5</code>.'
437 , 'group' => 'style'
438 , 'tr_class' => 'template_colors'
439 );
440 $this->fields['body_color'] = array(
441 'type' => 'color'
442 , 'default' => '#fdfdfd'
443 , 'title' => __('Email Body Background Color', 'booking')
444 , 'description' => __('The main body background color for email templates.', 'booking')
445 . ' ' . __('Default color', 'booking') .': <code>#fdfdfd</code>.'
446 , 'group' => 'style'
447 , 'tr_class' => 'template_colors'
448 );
449 $this->fields['text_color'] = array(
450 'type' => 'color'
451 , 'default' => '#505050'
452 , 'title' => __('Email Body Text Colour', 'booking')
453 , 'description' => __('The main body text color for email templates.', 'booking')
454 . ' ' . __('Default color', 'booking') .': <code>#505050</code>.'
455 , 'group' => 'style'
456 , 'tr_class' => 'template_colors'
457 );
458
459
460 ////////////////////////////////////////////////////////////////////
461 // Email format: Plain, HTML, MultiPart
462 ////////////////////////////////////////////////////////////////////
463
464
465 $this->fields['email_content_type'] = array(
466 'type' => 'select'
467 , 'default' => 'plain'
468 , 'title' => __('Email format', 'booking')
469 , 'description' => __('Choose which format of email to send.', 'booking')
470 , 'description_tag' => 'p'
471 , 'css' => 'width:100%;'
472 , 'options' => array(
473 'plain' => __('Plain text', 'booking')
474 // , 'html' => __('HTML', 'booking')
475 // , 'multipart' => __('Multipart', 'booking')
476 )
477 , 'group' => 'email_content_type'
478 );
479 if ( class_exists( 'DOMDocument' ) ) {
480 $this->fields['email_content_type']['options']['html'] = __('HTML', 'booking');
481 $this->fields['email_content_type']['options']['multipart'] = __('Multipart', 'booking');
482
483 $this->fields['email_content_type']['default'] = 'html';
484 }
485
486
487
488 ////////////////////////////////////////////////////////////////////
489 // Help
490 ////////////////////////////////////////////////////////////////////
491
492 $this->fields['content_help'] = array(
493 'type' => 'help'
494 , 'value' => array()
495 , 'cols' => 2
496 , 'group' => 'help'
497 , 'css' => 'padding-right: 10px !important;max-height: 598px;overflow: auto;'
498 , 'only_field' => true
499 );
500
501 $skip_shortcodes = array(
502 'denyreason'
503 , 'moderatelink'
504 , 'paymentreason'
505 , 'visitorbookingediturl'
506 //, 'visitorbookingslisting' //FixIn: 8.1.3.5.1
507 , 'visitorbookingcancelurl'
508 , 'visitorbookingpayurl'
509 );
510 $email_example = sprintf(__('For example: "You have a new reservation %s on the following date(s): %s Contact information: %s You can approve or cancel this booking at: %s Thank you, Reservation service."' ,'booking'),'','[dates]&lt;br/&gt;&lt;br/&gt;','&lt;br/&gt; [content]&lt;br/&gt;&lt;br/&gt;', htmlentities( ' <a href="[moderatelink]">'.__('here' ,'booking').'</a> ') . '&lt;br/&gt;&lt;br/&gt; ');
511
512 $help_fields = wpbc_get_email_help_shortcodes( $skip_shortcodes, $email_example );
513
514 foreach ( $help_fields as $help_fields_key => $help_fields_value ) {
515 $this->fields['content_help']['value'][] = $help_fields_value;
516 }
517
518 }
519
520 }
521
522
523
524 /** Settings Emails P a g e */
525 class WPBC_Settings_Page_Email_Approved extends WPBC_Page_Structure {
526
527 public $email_settings_api = false;
528
529
530 /**
531 * Define interface for Email API
532 *
533 * @param string $selected_email_name - name of Email template
534 * @param array $init_fields_values - array of init form fields data
535 * @return object Email API
536 */
537 public function mail_api( $selected_email_name ='', $init_fields_values = array() ){
538
539 if ( $this->email_settings_api === false ) {
540 $this->email_settings_api = new WPBC_Emails_API_Approved( $selected_email_name , $init_fields_values );
541 }
542
543 return $this->email_settings_api;
544 }
545
546
547 public function in_page() { // P a g e t a g
548 return 'wpbc-settings';
549 }
550
551
552 public function tabs() { // T a b s A r r a y
553
554 $tabs = array();
555
556 // $tabs[ 'email' ] = array(
557 // 'title' => __( 'Emails', 'booking') // Title of TAB
558 // , 'page_title'=> __( 'Emails Settings', 'booking') // Title of Page
559 // , 'hint' => __( 'Emails Settings', 'booking') // Hint
560 // //, 'link' => '' // Can be skiped, then generated link based on Page and Tab tags. Or can be extenral link
561 // //, 'position' => '' // 'left' || 'right' || ''
562 // //, 'css_classes'=> '' // CSS class(es)
563 // //, 'icon' => '' // Icon - link to the real PNG img
564 // , 'font_icon' => 'wpbc_icn_mail_outline' // CSS definition of forn Icon
565 // //, 'default' => false // Is this tab activated by default or not: true || false.
566 // //, 'disabled' => false // Is this tab disbaled: true || false.
567 // //, 'hided' => false // Is this tab hided: true || false.
568 // , 'subtabs' => array()
569 // );
570
571 $subtabs = array();
572
573
574 $is_data_exist = get_bk_option( WPBC_EMAIL_NEW_ADMIN_PREFIX . WPBC_EMAIL_APPROVED_ID );
575 if ( ( ! empty( $is_data_exist ) ) && ( isset( $is_data_exist['copy_to_admin'] ) ) && ( $is_data_exist['copy_to_admin'] == 'On' ) ) {
576 $sufix = '<sup> 2</sup>';
577 } else {
578 $sufix = '';
579 }
580
581 $subtabs['approved'] = array(
582 'type' => 'subtab' // Required| Possible values: 'subtab' | 'separator' | 'button' | 'goto-link' | 'html'
583 , 'title' => '<span>' . __( 'Approved', 'booking' ) . $sufix . '</span>' // Title of TAB
584 , 'page_title' => __('Emails Settings', 'booking') // Title of Page
585 , 'hint' => __('Customization of email template, which is sent to Visitor after approval of booking' ,'booking') //FixIn: 8.1.2.17.1
586 , 'link' => '' // link
587 , 'position' => '' // 'left' || 'right' || ''
588 , 'css_classes' => '' // CSS class(es)
589 //, 'icon' => 'http://.../icon.png' // Icon - link to the real PNG img
590 //, 'font_icon' => 'wpbc_icn_mail_outline' // CSS definition of Font Icon
591 , 'header_font_icon' => 'wpbc_icn_mail_outline' // CSS definition of Font Icon //FixIn: 9.6.1.4
592 , 'default' => false // Is this sub tab activated by default or not: true || false.
593 , 'disabled' => false // Is this sub tab deactivated: true || false.
594 , 'checkbox' => false // or definition array for specific checkbox: array( 'checked' => true, 'name' => 'feature1_active_status' ) //, 'checkbox' => array( 'checked' => $is_checked, 'name' => 'enabled_active_status' )
595 , 'content' => 'content' // Function to load as conten of this TAB
596 , 'is_use_left_navigation' => true
597 , 'show_checked_icon' => true
598 , 'checked_data' => WPBC_EMAIL_NEW_ADMIN_PREFIX . WPBC_EMAIL_APPROVED_ID // This is where we get content
599 );
600
601 $tabs[ 'email' ]['subtabs'] = $subtabs;
602
603 return $tabs;
604 }
605
606
607 /** Show Content of Settings page */
608 public function content() {
609 $this->css();
610
611 // -------------------------------------------------------------------------------------------------------------
612 // Checking
613 // -------------------------------------------------------------------------------------------------------------
614 do_action( 'wpbc_hook_settings_page_header', 'emails_settings'); // Define Notices Section and show some static messages, if needed
615
616 if ( ! wpbc_is_mu_user_can_be_here('activated_user') ) return false; // Check if MU user activated, otherwise show Warning message.
617 // if ( ! wpbc_is_mu_user_can_be_here('only_super_admin') ) return false; // User is not Super admin, so exit. Basically its was already checked at the bottom of the PHP file, just in case.
618
619
620 // -------------------------------------------------------------------------------------------------------------
621 // S u b m i t Main Form
622 // -------------------------------------------------------------------------------------------------------------
623 $submit_form_name = 'wpbc_emails_template'; // Define form name
624 // $this->maybe_update(); // It is run from parent CLASS before showing this content on Actual Selected by user Page
625
626
627 ////////////////////////////////////////////////////////////////////////
628 // JavaScript: Tooltips, Popover, Datepick (js & css)
629 ////////////////////////////////////////////////////////////////////////
630
631 echo '<span class="wpdevelop">';
632
633 wpbc_js_for_bookings_page();
634
635 echo '</span>';
636
637
638 ////////////////////////////////////////////////////////////////////////
639 // Content
640 ////////////////////////////////////////////////////////////////////////
641 ?>
642 <div class="clear"></div>
643
644 <span class="metabox-holder">
645
646 <form name="<?php echo $submit_form_name; ?>" id="<?php echo $submit_form_name; ?>" action="" method="post" autocomplete="off">
647 <?php
648 // N o n c e field, and key for checking S u b m i t
649 wp_nonce_field( 'wpbc_settings_page_' . $submit_form_name );
650 ?><input type="hidden" name="is_form_sbmitted_<?php echo $submit_form_name; ?>" id="is_form_sbmitted_<?php echo $submit_form_name; ?>" value="1" />
651
652 <div class="clear"></div>
653 <?php
654
655 wpbc_email_troubleshooting_help_notice();
656
657 ?>
658 <div class="metabox-holder">
659 <?php
660 wpbc_open_meta_box_section( $submit_form_name . 'general', __('Email is sent to Visitor after Approval of booking.', 'booking') ); //FixIn: 8.1.2.17.1
661
662 $this->mail_api()->show( 'general' );
663
664 wpbc_close_meta_box_section();
665 ?>
666 <div class="wpbc_settings_row wpbc_settings_row_left" >
667 <?php
668 wpbc_open_meta_box_section( $submit_form_name . 'general_content', __('Email Content', 'booking') ); //FixIn: 8.1.2.17.1
669
670 $this->mail_api()->show( 'general_content' );
671
672 wpbc_close_meta_box_section();
673 ?>
674 </div>
675
676 <div class="wpbc_settings_row wpbc_settings_row_right">
677 <?php
678 wpbc_open_meta_box_section( $submit_form_name . 'help', __('Help', 'booking') );
679
680 $this->mail_api()->show( 'help' );
681
682 wpbc_close_meta_box_section();
683 ?>
684 </div>
685 <div class="clear"></div>
686 <?php
687 wpbc_open_meta_box_section( $submit_form_name . 'email_content_type', __('Email Type', 'booking') . ' / ' . __('Email Styles', 'booking') );
688
689 $this->mail_api()->show( 'email_content_type' );
690
691 $this->mail_api()->show( 'style' );
692
693 wpbc_close_meta_box_section();
694
695 wpbc_open_meta_box_section( $submit_form_name . 'parts' , __('Header / Footer', 'booking') );
696
697 $this->mail_api()->show( 'parts' );
698
699 wpbc_close_meta_box_section();
700 ?>
701 </div>
702 <input type="submit" value="<?php echo esc_attr( __( 'Save Changes', 'booking' ) ); ?>" class="button button-primary" />
703 </form>
704 </span>
705 <?php
706
707 $this->enqueue_js();
708 }
709
710
711 /**
712 * This function called from PARENT CLASS for actual selected tab. Firstly it load data and then Maybe Save changes.
713 * @return void
714 */
715 public function maybe_update() {
716
717 // -------------------------------------------------------------------------------------------------------------
718 // Load Data
719 // -------------------------------------------------------------------------------------------------------------
720
721 /* Check if New Email Template Exist or NOT
722 * Exist - return empty array in format: array( OPTION_NAME => array() )
723 * It will load DATA from DB, during creation mail_api CLASS
724 * during initial activation of the API its try to get option from DB
725 * We need to define this API before checking POST, to know all available fields
726 * Define Email Name & define field values from DB, if not exist, then default values.
727 * Not Exist - import Old Data from DB
728 * or get "default" data from settings and return array with this data
729 * This data its initial parameters for definition fields in mail_api CLASS
730 *
731 */
732
733 $init_fields_values = wpbc_import6_email__approved__get_fields_array_for_activation();
734
735 // Get Value of first element - array of default or imported OLD data, because need only array of values without key - name of options for wp_options table
736 $init_fields_values_temp = array_values( $init_fields_values ); //FixIn: 7.0.1.32
737 $init_fields_values = array_shift( $init_fields_values_temp );
738
739
740 $this->mail_api( WPBC_EMAIL_APPROVED_ID, $init_fields_values );
741
742
743 // -------------------------------------------------------------------------------------------------------------
744 // Maybe Update Data
745 // -------------------------------------------------------------------------------------------------------------
746
747 $submit_form_name = 'wpbc_emails_template'; // Define form name
748
749 $this->mail_api()->validated_form_id = $submit_form_name; // Define ID of Form for ability to validate fields before submit.
750
751 if ( isset( $_POST['is_form_sbmitted_'. $submit_form_name ] ) ) {
752
753 // Nonce checking {Return false if invalid, 1 if generated between, 0-12 hours ago, 2 if generated between 12-24 hours ago. }
754 $nonce_gen_time = check_admin_referer( 'wpbc_settings_page_' . $submit_form_name ); // Its stop show anything on submiting, if its not refear to the original page
755
756 // Save Changes
757 $this->update();
758 }
759 }
760
761
762 /** Update Email template to DB */
763 public function update() {
764
765 // Get Validated Email fields
766 $validated_fields = $this->mail_api()->validate_post();
767
768 $this->mail_api()->save_to_db( $validated_fields );
769
770 wpbc_show_message ( __('Settings saved.', 'booking'), 5 ); // Show Save message
771 }
772
773 // <editor-fold defaultstate="collapsed" desc=" CSS & JS " >
774
775 /** CSS for this page */
776 private function css() {
777 ?>
778 <style type="text/css">
779 .wpbc-help-message {
780 border:none;
781 margin:0 !important;
782 padding:0 !important;
783 }
784
785 @media (max-width: 399px) {
786 }
787 </style>
788 <?php
789 }
790
791
792 /**
793 * Add Custon JavaScript - for some specific settings options
794 * Executed After post content, after initial definition of settings, and possible definition after POST request.
795 *
796 * @param type $menu_slug
797 *
798 */
799 private function enqueue_js(){
800
801 $js_script = '';
802 //Show or hide colors section in settings page depend form selected email template.
803 $js_script .= " jQuery('select[name=\"approved_template_file\"]').on( 'change', function(){
804 if ( jQuery('select[name=\"approved_template_file\"] option:selected').val() == 'plain' ) {
805 jQuery('.template_colors').hide();
806 } else {
807 jQuery('.template_colors').show();
808 }
809 } ); ";
810 $js_script .= "\n"; //New Line
811 $js_script .= " if ( jQuery('select[name=\"approved_template_file\"] option:selected').val() == 'plain' ) {
812 jQuery('.template_colors').hide();
813 } ";
814
815 // Show Warning messages if Title (optional) is empty - title of email will be "WordPress
816 $js_script .= " jQuery(document).ready(function(){ ";
817 $js_script .= " if ( jQuery('#approved_to_name').val() == '' ) {";
818 $js_script .= " jQuery('#approved_to_name').parent().append('<div class=\'updated\' style=\'border-left-color:#ffb900;padding:5px 10px;\'>". esc_js(__('If empty then title defined as WordPress', 'booking' ))."</div>')";
819 $js_script .= " }";
820 $js_script .= " if ( jQuery('#approved_from_name').val() == '' ) {";
821 $js_script .= " jQuery('#approved_from_name').parent().append('<div class=\'updated\' style=\'border-left-color:#ffb900;padding:5px 10px;\'>". esc_js(__('If empty then title defined as WordPress', 'booking' ))."</div>')";
822 $js_script .= " }";
823 $js_script .= " }); ";
824
825 //FixIn: 8.1.2.17
826 $js_script .= " jQuery('#approved_copy_to_admin').on( 'change', function(){ ";
827 $js_script .= " if ( jQuery('#approved_copy_to_admin').is(':checked') ) {";
828 $js_script .= " jQuery('.wpbc_tr_copy_to_admin_to').show();";
829 $js_script .= " } else { ";
830 $js_script .= " jQuery('.wpbc_tr_copy_to_admin_to').hide();";
831 $js_script .= " } ";
832 $js_script .= " }); ";
833 $js_script .= " jQuery(document).ready(function(){ ";
834 $js_script .= " if ( jQuery('#approved_copy_to_admin').is(':checked') ) {";
835 $js_script .= " jQuery('.wpbc_tr_copy_to_admin_to').show();";
836 $js_script .= " } else { ";
837 $js_script .= " jQuery('.wpbc_tr_copy_to_admin_to').hide();";
838 $js_script .= " } ";
839 $js_script .= " }); ";
840 //FixIn: 8.1.2.17 - END
841
842 // Eneque JS to the footer of the page
843 wpbc_enqueue_js( $js_script );
844 }
845
846 // </editor-fold>
847 }
848 add_action('wpbc_menu_created', array( new WPBC_Settings_Page_Email_Approved() , '__construct') ); // Executed after creation of Menu
849
850
851
852 // <editor-fold defaultstate="collapsed" desc=" Emails Sending" >
853
854 /**
855 * Get ShortCodes to Replace
856 *
857 * @param int $booking_id - ID of booking
858 * @param int $bktype - booking resource type
859 * @param string $formdata - booking form data content
860 */
861 function wpbc__get_replace_shortcodes__email_approved( $booking_id, $bktype, $formdata ) {
862
863 $replace = array();
864
865 // Resources ///////////////////////////////////////////////////////////////
866 $bk_title = wpbc_get_resource_title( $bktype );
867
868 // Dates ///////////////////////////////////////////////////////////////////
869 $my_dates4emeil = wpbc_db__get_sql_dates__in_booking__as_str( $booking_id );
870 if ( get_bk_option( 'booking_date_view_type' ) == 'short' )
871 $my_dates_4_send = wpbc_get_dates_short_format( $my_dates4emeil );
872 else
873 $my_dates_4_send = wpbc_get_dates_comma_string_localized( $my_dates4emeil );
874
875 $my_dates4emeil_check_in_out = explode(',', $my_dates4emeil );
876
877 $my_check_in_date = wpbc_get_dates_comma_string_localized( $my_dates4emeil_check_in_out[0] );
878 $my_check_out_date = wpbc_get_dates_comma_string_localized( $my_dates4emeil_check_in_out[ count( $my_dates4emeil_check_in_out ) - 1 ] );
879 //FixIn: 8.7.2.5
880 $my_check_in_onlydate = wpbc_get_dates_comma_string_localized( wpbc_datetime_localized( date( 'Y-m-d 00:00:00', strtotime( $my_dates4emeil_check_in_out[0] ) ), 'Y-m-d 00:00:00' ) );
881 $my_check_out_onlydate = wpbc_get_dates_comma_string_localized( wpbc_datetime_localized( date( 'Y-m-d 00:00:00', strtotime( $my_dates4emeil_check_in_out[ count( $my_dates4emeil_check_in_out ) - 1 ] ) ), 'Y-m-d 00:00:00' ) );
882
883 $my_check_out_plus1day = wpbc_get_dates_comma_string_localized( wpbc_datetime_localized( date( 'Y-m-d H:i:s', strtotime( $my_dates4emeil_check_in_out[ count( $my_dates4emeil_check_in_out ) - 1 ] . " +1 day" ) ), 'Y-m-d H:i:s' ) ); //FixIn: 6.0.1.11
884
885 // Cost ////////////////////////////////////////////////////////////////////
886 $booking_cost_digits_only = apply_bk_filter( 'get_booking_cost_from_db', '', $booking_id ); //FixIn: 9.2.3.1
887 $booking_cost = wpbc_get_cost_with_currency_for_user( $booking_cost_digits_only );
888 // Other ///////////////////////////////////////////////////////////////////
889 $replace[ 'booking_id' ] = $booking_id;
890 $replace[ 'id' ] = $replace[ 'booking_id' ];
891 $replace[ 'dates' ] = $my_dates_4_send;
892 $replace[ 'check_in_date' ] = $my_check_in_date;
893 $replace[ 'check_out_date' ] = $my_check_out_date;
894 //FixIn: 8.7.2.5
895 $replace[ 'check_in_only_date' ] = $my_check_in_onlydate;
896 $replace[ 'check_out_only_date' ] = $my_check_out_onlydate;
897
898 $replace[ 'check_out_plus1day'] = $my_check_out_plus1day; //FixIn: 6.0.1.11
899 $replace[ 'dates_count' ] = count( $my_dates4emeil_check_in_out );
900 $replace['cost'] = $booking_cost;
901 $replace['cost_digits_only'] = $booking_cost_digits_only;
902 $replace[ 'siteurl' ] = htmlspecialchars_decode( '<a href="' . home_url() . '">' . home_url() . '</a>' );
903 $replace[ 'resource_title'] = wpbc_lang( $bk_title );
904 $replace[ 'bookingtype' ] = $replace[ 'resource_title'];
905 $replace[ 'remote_ip' ] = wpbc_get_user_ip(); //FixIn:7.1.2.4 // The IP address from which the user is viewing the current page.
906 $replace[ 'user_agent' ] = $_SERVER['HTTP_USER_AGENT']; // Contents of the User-Agent: header from the current request, if there is one.
907 $replace[ 'request_url' ] = ( isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : '' ); // The address of the page (if any) where action was occured. Because we are sending it in Ajax request, we need to use the REFERER HTTP
908 $replace[ 'current_date' ] = date_i18n( get_bk_option( 'booking_date_format' ) );
909 $replace[ 'current_time' ] = date_i18n( get_bk_option( 'booking_time_format' ) );
910
911 // Form Fields /////////////////////////////////////////////////////////////
912 $booking_form_show_array = wpbc__legacy__get_form_content_arr( $formdata, $bktype, '', $replace ); // We use here $replace array, becaise in "Content of booking filds data" form can be shortcodes from above definition
913
914 foreach ( $booking_form_show_array['_all_fields_'] as $shortcode_name => $shortcode_value ) {
915
916 if ( ! isset( $replace[ $shortcode_name ] ) )
917 $replace[ $shortcode_name ] = $shortcode_value;
918 }
919 $replace[ 'content' ] = $booking_form_show_array['content'];
920
921 // Links ///////////////////////////////////////////////////////////////////
922 $replace[ 'moderatelink' ] = htmlspecialchars_decode(
923 // '<a href="' .
924 esc_url( wpbc_get_bookings_url() . '&view_mode=vm_listing&tab=actions&wh_booking_id=' . $booking_id )
925 // . '">' . __('here', 'booking') . '</a>'
926 );
927 $replace[ 'visitorbookingediturl' ] = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingediturl]', $booking_id );
928 $replace[ 'visitorbookingslisting' ] = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingslisting]', $booking_id ); //FixIn: 8.1.3.5.1
929 $replace[ 'visitorbookingcancelurl' ] = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingcancelurl]', $booking_id );
930 $replace[ 'visitorbookingpayurl' ] = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[visitorbookingpayurl]', $booking_id );
931 $replace[ 'bookinghash' ] = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '[bookinghash]', $booking_id );
932
933 //FixIn: 7.1.2.5 8.5.2.13
934 // $booking_data = array( 'form_data' => $booking_form_show_array );
935 // $booking_data[ 'dates_short' ] = array( $my_dates4emeil_check_in_out[ 0 ], '-', $my_dates4emeil_check_in_out[ count( $my_dates4emeil_check_in_out ) - 1 ] );
936 // $replace[ 'add_to_google_cal_url' ] = htmlspecialchars_decode( esc_url(
937 // wpbc_btn_add_booking_to_google_calendar( $booking_data , array( 'is_only_url' => true ), false )
938 // ) );
939 //FixIn: 9.6.3.8
940 $google_calendar_link = wpbc_booking_do_action__get_google_calendar_link( array(
941 'form_data' => $booking_form_show_array['_all_fields_'],
942 'form_show' => $booking_form_show_array['content'], //strip_tags( $parsed_form_show ),
943 'dates_short' => array(
944 $my_dates4emeil_check_in_out[0]
945 , '-'
946 , $my_dates4emeil_check_in_out[ count( $my_dates4emeil_check_in_out ) - 1 ]
947 )
948 ) );
949 $replace['add_to_google_cal_url'] = htmlspecialchars_decode( esc_url( $google_calendar_link ) );
950 $replace['add_to_google_cal_button'] = '<a href="' . esc_attr( $replace['add_to_google_cal_url'] ) . '" target="_blank" rel="nofollow">Add to Google Calendar</a>';
951
952 ////////////////////////////////////////////////////////////////////////////
953 // Get additional replace paramaters to the email shortcodes
954 $replace = apply_filters( 'wpbc_replace_params_for_booking', $replace, $booking_id, $bktype, $formdata ); //FixIn: 8.0.1.7
955
956
957 return $replace;
958
959
960 }
961
962
963 /**
964 * Send email
965 *
966 * @param type $booking_id - ID of booking
967 * @param type $bktype - type
968 * @param type $formdata - booking form data
969 */
970 function wpbc_send_email_approved( $approved_id_str, $is_send_emeils, $denyreason = '' ) {
971
972 global $wpdb;
973 $sql = "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.booking_id IN ({$approved_id_str})";
974 $result = $wpdb->get_results( $sql );
975
976 foreach ( $result as $res ) {
977
978 $booking_id = $res->booking_id;
979 $bktype = $res->booking_type;
980 $formdata = $res->form;
981
982 $previous_active_user = apply_bk_filter( 'wpbc_mu_set_environment_for_owner_of_resource', -1, $bktype ); // MU
983
984 make_bk_action( 'booking_aproved', $res, '' ); // Check for ability to change HASH during approving booking //FixIn: 7.0.1.35
985
986 ////////////////////////////////////////////////////////////////////////
987 // Load Data
988 ////////////////////////////////////////////////////////////////////////
989
990 /* Check if New Email Template Exist or NOT
991 * Exist - return empty array in format: array( OPTION_NAME => array() )
992 * Its will load DATA from DB, during creattion mail_api CLASS
993 * during initial activation of the API its try to get option from DB
994 * We need to define this API before checking POST, to know all available fields
995 * Define Email Name & define field values from DB, if not exist, then default values.
996 * Not Exist - import Old Data from DB
997 * or get "default" data from settings and return array with this data
998 * This data its initial parameters for definition fields in mail_api CLASS
999 *
1000 */
1001
1002 $init_fields_values = wpbc_import6_email__approved__get_fields_array_for_activation();
1003
1004 // Get Value of first element - array of default or imported OLD data, because need only array of values without key - name of options for wp_options table
1005 $init_fields_values_temp = array_values( $init_fields_values ); //FixIn: 7.0.1.32
1006 $init_fields_values = array_shift( $init_fields_values_temp );
1007
1008
1009 $mail_api = new WPBC_Emails_API_Approved( WPBC_EMAIL_APPROVED_ID, $init_fields_values );
1010
1011 ////////////////////////////////////////////////////////////////////////////
1012
1013 if ( $mail_api->fields_values['enabled'] == 'Off' ) return false; // Email template deactivated - exit.
1014
1015
1016 $replace = wpbc__get_replace_shortcodes__email_approved( $booking_id, $bktype, $formdata );
1017 $replace[ 'denyreason' ] = $denyreason; //FixIn: 7.0.1.1
1018 $replace[ 'approvereason' ] = $denyreason; //FixIn: 7.0.1.1
1019 $replace[ 'reason' ] = $denyreason; //FixIn: 7.0.1.1
1020 if ( ! empty( $res->remark ) ) //FixIn: 8.1.2.6
1021 $replace[ 'remark' ] = $res->remark; //FixIn: 7.2.1.19
1022
1023 // Replace shortcodes with custom URL parameter, like: 'visitorbookingediturl', 'visitorbookingcancelurl', 'visitorbookingpayurl'
1024 foreach ( array( 'visitorbookingediturl', 'visitorbookingcancelurl', 'visitorbookingpayurl' , 'visitorbookingslisting' ) as $url_shortcode ) { //FixIn: 7.0.1.8 //FixIn: 8.1.3.5.1
1025
1026 // Loop to search if we are having several such shortcodes in our $mail_api->fields_values['content'] (For example, if we have several languges ).
1027 $pos = 0; //FixIn: 7.0.1.52
1028 do {
1029 $shortcode_params = wpbc_get_params_of_shortcode_in_string( $url_shortcode, $mail_api->fields_values['content'] , $pos );
1030
1031 if ( ( ! empty( $shortcode_params ) ) && ( isset( $shortcode_params['url'] ) ) ){
1032
1033 $pos = $shortcode_params['end'];
1034
1035 $exist_replace = substr( $mail_api->fields_values['content'], $shortcode_params['start'], ( $shortcode_params['end'] - $shortcode_params['start'] ) );
1036
1037 $new_replace = $url_shortcode . rand(1000,9000);
1038
1039 $mail_api->fields_values['content'] = str_replace( $exist_replace, $new_replace ,$mail_api->fields_values['content'] );
1040
1041 $pos = $shortcode_params['start'] + strlen( $new_replace ); //FixIn: 9.7.3.5.1
1042 $replace[ $new_replace ] = apply_bk_filter( 'wpdev_booking_set_booking_edit_link_at_email', '['.$exist_replace.']', $booking_id );
1043 } else if ( //FixIn: 8.1.1.8
1044 ( ! empty( $shortcode_params ) )
1045 && ( isset( $shortcode_params['end'] ) )
1046 && ( $shortcode_params['end'] < strlen( $mail_api->fields_values['content'] ) )
1047 ) {
1048 $pos = $shortcode_params['end'];
1049 } else {
1050 $shortcode_params = false; //FixIn: 7.0.1.58
1051 }
1052
1053 } while ( ! empty( $shortcode_params ) ); //FixIn: 7.0.1.52
1054
1055 }
1056
1057 $mail_api->set_replace( $replace );
1058 $mail_api->fields_values['from_name'] = $mail_api->replace_shortcodes( $mail_api->fields_values['from_name'] ); //FixIn: 7.0.1.29
1059
1060
1061 $to = ( isset( $replace['email'] ) ) ? $replace['email'] : ''; // Get To field
1062
1063 if ( ! empty( $replace['email'] ) ) {
1064 $to = wpbc_email_prepand_person_name( $replace['email'], $replace );
1065 }
1066
1067 $to = wpbc_check_for_several_emails_in_form( $to, $formdata, $bktype ); //FixIn: 6.0.1.9
1068
1069 $to = str_replace( ';', ',', $to );
1070
1071 if ( wpbc_is_not_blank_email( $to, $replace['content'] ) ) {
1072 $email_result = $mail_api->send( $to, $replace );
1073 }
1074
1075 make_bk_action( 'wpbc_mu_set_environment_for_user', $previous_active_user ); // MU
1076 }
1077
1078 $email_result = ( isset( $email_result ) ) ? $email_result : false;
1079 return $email_result;
1080 }
1081
1082 // </editor-fold>
1083