PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.2.1
GiveWP – Donation Plugin and Fundraising Platform v2.2.1
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / admin / emails / abstract-email-notification.php
give / includes / admin / emails Last commit date
abstract-email-notification.php 7 years ago ajax-handler.php 8 years ago backward-compatibility.php 8 years ago class-donation-receipt-email.php 7 years ago class-donor-register-email.php 7 years ago class-email-access-email.php 7 years ago class-email-notification-table.php 8 years ago class-email-notification-util.php 8 years ago class-email-notifications.php 7 years ago class-email-setting-field.php 8 years ago class-new-donation-email.php 7 years ago class-new-donor-register-email.php 7 years ago class-new-offline-donation-email.php 7 years ago class-offline-donation-instruction-email.php 7 years ago filters.php 8 years ago
abstract-email-notification.php
986 lines
1 <?php
2 /**
3 * Email Notification
4 *
5 * This class handles all email notification settings.
6 *
7 * @package Give
8 * @subpackage Classes/Emails
9 * @copyright Copyright (c) 2016, WordImpress
10 * @license https://opensource.org/licenses/gpl-license GNU Public License
11 * @since 2.0
12 */
13
14 // Exit if access directly.
15 if ( ! defined( 'ABSPATH' ) ) {
16 exit;
17 }
18
19 if ( ! class_exists( 'Give_Email_Notification' ) ) :
20
21 /**
22 * Give_Email_Notification
23 *
24 * @abstract
25 * @since 2.0
26 */
27 abstract class Give_Email_Notification {
28 /**
29 * Array of instances
30 *
31 * @since 2.0
32 * @access private
33 * @var array
34 */
35 private static $singleton = array();
36
37 /**
38 * Array of notification settings.
39 *
40 * @since 2.0
41 * @access public
42 * @var array
43 */
44 public $config = array(
45 'id' => '',
46 'label' => '',
47 'description' => '',
48 'has_recipient_field' => false,
49 'recipient_group_name' => '',
50 'notification_status' => 'disabled',
51 'notification_status_editable' => true,
52 'notices' => array(),
53 'content_type_editable' => true,
54 'has_preview' => true,
55 'has_preview_header' => true,
56 'preview_email_tags_values' => array(),
57 'email_tag_context' => 'all',
58 'form_metabox_setting' => true,
59 'content_type' => '',
60 'email_template' => '',
61 'default_email_subject' => '',
62 'default_email_message' => '',
63 'default_email_header' => '',
64 // This setting page will appear under core setting.
65 'show_on_emails_setting_page' => true,
66 'form_metabox_id' => 'give_email_notification_options_metabox_fields',
67 );
68
69 /**
70 * @var string $recipient_email Donor email.
71 * @access protected
72 * @since 2.0
73 */
74 protected $recipient_email = '';
75
76
77 /**
78 * Setup email notification.
79 *
80 * @since 2.0
81 */
82 public function init() {
83
84 }
85
86
87 /**
88 * Get instance.
89 *
90 * @since 2.0
91 * @access public
92 *
93 * @param string $email_notification_id
94 *
95 * @return Give_Email_Notification
96 */
97 public static function get_instance( $email_notification_id = '' ) {
98 $class = '';
99
100 if ( ! empty( $email_notification_id ) ) {
101 /* @var Give_Email_Notification $class */
102 foreach ( self::$singleton as $class ) {
103 if ( $email_notification_id === $class->config['id'] ) {
104 $class = get_class( $class );
105 break;
106 }
107 }
108 } else {
109 $class = get_called_class();
110 }
111
112 if ( ! empty( $class ) && ( ! array_key_exists( $class, self::$singleton ) || is_null( self::$singleton[ $class ] ) ) ) {
113 self::$singleton[ $class ] = new $class();
114 }
115
116 return ( isset( self::$singleton[ $class ] ) ? self::$singleton[ $class ] : null );
117 }
118
119 /**
120 * Setup action and filters.
121 *
122 * @access public
123 * @since 2.0
124 *
125 * @param array $config
126 */
127 public function load( $config ) {
128 // Set notification configuration.
129 $this->config = wp_parse_args( $config, $this->config );
130
131 // Set email preview header status.
132 $this->config['has_preview_header'] = $this->config['has_preview'] && $this->config['has_preview_header'] ? true : false;
133
134 // Set email content type
135 $this->config['content_type'] = empty( $this->config['content_type'] ) || ! in_array( $this->config['content_type'], array(
136 'text/html',
137 'text/plain',
138 ) )
139 ? Give()->emails->get_content_type()
140 : $this->config['content_type'];
141 $this->config['content_type'] = give_get_option( Give_Email_Setting_Field::get_prefix( $this ) . 'email_content_type', $this->config['content_type'] );
142
143 // Set email template type.
144 $this->config['email_template'] = empty( $this->config['email_template'] )
145 ? give_get_option( 'email_template' )
146 : $this->config['email_template'];
147
148 // Set recipient group name.
149 $this->config['recipient_group_name'] = empty( $this->config['recipient_group_name'] )
150 ? ( ! Give_Email_Notification_Util::has_recipient_field( $this ) ? __( 'Donor', 'give' ) : '' )
151 : $this->config['recipient_group_name'];
152
153 // Non notification status editable notice.
154 $this->config['notices']['non-notification-status-editable'] = empty( $this->config['notices']['non-notification-status-editable'] )
155 ? __( 'You can not edit notification status from here.', 'give' )
156 : $this->config['notices']['non-notification-status-editable'];
157
158 /**
159 * Filter the notification config.
160 *
161 * @since 2.0
162 *
163 * @param array Give_Email_Notification::config
164 * @param Give_Email_Notification $this
165 */
166 $this->config = apply_filters( 'give_email_api_notification_config', $this->config, $this );
167
168 // Setup filters.
169 $this->setup_filters();
170 }
171
172
173 /**
174 * Setup filters.
175 *
176 * @since 2.0
177 * @access public
178 */
179 private function setup_filters() {
180 // Apply filter only for current email notification section.
181 if ( give_get_current_setting_section() === $this->config['id'] ) {
182 // Initialize email context for email notification.
183 $this->config['email_tag_context'] = apply_filters(
184 "give_{$this->config['id']}_email_tag_context",
185 $this->config['email_tag_context'],
186 $this
187 );
188 }
189
190 // Setup setting fields.
191 if( $this->config['show_on_emails_setting_page'] ) {
192 add_filter( 'give_get_settings_emails', array( $this, 'add_setting_fields' ), 10, 2 );
193 }
194
195 if ( $this->config['form_metabox_setting'] && ! empty( $this->config['form_metabox_id'] ) ) {
196 add_filter(
197 $this->config['form_metabox_id'],
198 array( $this, 'add_metabox_setting_field' ),
199 10,
200 2
201 );
202 }
203
204 if( $this->config['has_recipient_field'] ) {
205 add_action(
206 "give_save__give_{$this->config['id']}_recipient",
207 array( $this, 'validate_form_recipient_field_value' ),
208 10,
209 3
210 );
211 }
212
213 /**
214 * Filter the default email subject.
215 *
216 * @since 2.0
217 */
218 $this->config['default_email_subject'] = apply_filters(
219 "give_{$this->config['id']}_get_default_email_subject",
220 $this->config['default_email_subject'],
221 $this
222 );
223
224 /**
225 * Filter the default email message.
226 *
227 * @since 2.0
228 */
229 $this->config['default_email_message'] = apply_filters(
230 "give_{$this->config['id']}_get_default_email_message",
231 $this->config['default_email_message'],
232 $this
233 );
234
235 /**
236 * Filter the default email header.
237 *
238 * @since 2.1.3
239 */
240 $this->config['default_email_header'] = apply_filters(
241 "give_{$this->config['id']}_get_default_email_header",
242 $this->config['default_email_header'],
243 $this
244 );
245 }
246
247 /**
248 * Add sections.
249 *
250 * @since 2.0
251 *
252 * @param array $sections
253 *
254 * @return array
255 */
256 public function add_section( $sections ) {
257 $sections[ $this->config['id'] ] = $this->config['label'];
258
259 return $sections;
260 }
261
262 /**
263 * Add sections.
264 *
265 * @since 2.0
266 *
267 * @param bool $hide_section
268 *
269 * @return bool
270 */
271 public function hide_section( $hide_section ) {
272 $hide_section = true;
273
274 return $hide_section;
275 }
276
277 /**
278 * Register email settings.
279 *
280 * @since 2.0
281 * @access public
282 *
283 * @param array $settings
284 *
285 * @return array
286 */
287 public function add_setting_fields( $settings ) {
288 if ( $this->config['id'] === give_get_current_setting_section() ) {
289 $settings = $this->get_setting_fields();
290 }
291
292 return $settings;
293 }
294
295
296 /**
297 * Get setting fields
298 *
299 * @since 2.0
300 * @access public
301 *
302 * @param int $form_id
303 *
304 * @return array
305 */
306 public function get_setting_fields( $form_id = null ) {
307 return Give_Email_Setting_Field::get_setting_fields( $this, $form_id );
308 }
309
310
311 /**
312 * Register email settings to form metabox.
313 *
314 * @since 2.0
315 * @access public
316 *
317 * @param array $settings
318 * @param int $form_id
319 *
320 * @return array
321 */
322 public function add_metabox_setting_field( $settings, $form_id ) {
323
324 if( Give_Email_Notification_Util::is_email_notification_active( $this ) ) {
325 $settings[] = array(
326 'id' => $this->config['id'],
327 'title' => $this->config['label'],
328 'fields' => $this->get_setting_fields( $form_id ),
329 );
330 }
331
332 return $settings;
333 }
334
335
336 /**
337 * Get extra setting field.
338 *
339 * @since 2.0
340 * @access public
341 *
342 * @param int $form_id
343 *
344 * @return array
345 */
346 public function get_extra_setting_fields( $form_id = null ) {
347 return array();
348 }
349
350
351 /**
352 * Get recipient(s).
353 *
354 * Note: in case of admin notification this fx will return array of emails otherwise empty string or email of donor.
355 *
356 * @since 2.0
357 * @access public
358 *
359 * @param int $form_id
360 *
361 * @return string|array
362 */
363 public function get_recipient( $form_id = null ) {
364 if ( empty( $this->recipient_email ) && $this->config['has_recipient_field'] ) {
365 $this->recipient_email = Give_Email_Notification_Util::get_value(
366 $this,
367 Give_Email_Setting_Field::get_prefix( $this, $form_id ) . 'recipient',
368 $form_id
369 );
370
371
372 /**
373 * Filter the admin notice emails.
374 *
375 * @since 1.0
376 * @deprecated 2.0
377 */
378 $this->recipient_email = apply_filters( 'give_admin_notice_emails', $this->recipient_email, $this, $form_id );
379 }
380
381 /**
382 * Filter the recipients
383 *
384 * @since 2.0
385 */
386 return apply_filters(
387 "give_{$this->config['id']}_get_recipients",
388 give_check_variable(
389 $this->recipient_email,
390 'empty',
391 Give()->emails->get_from_address()
392 ),
393 $this,
394 $form_id
395 );
396 }
397
398 /**
399 * Get notification status.
400 *
401 * @since 2.0
402 * @access public
403 *
404 * @param int $form_id
405 *
406 * @return bool
407 */
408 public function get_notification_status( $form_id = null ) {
409 $notification_status = empty( $form_id )
410 ? give_get_option( "{$this->config['id']}_notification", $this->config['notification_status'] )
411 : give_get_meta( $form_id, Give_Email_Setting_Field::get_prefix( $this, $form_id ) . 'notification', true, 'global' );
412
413 /**
414 * Filter the notification status.
415 *
416 * @since 1.8
417 */
418 return apply_filters(
419 "give_{$this->config['id']}_get_notification_status",
420 $notification_status,
421 $this,
422 $form_id
423 );
424 }
425
426 /**
427 * Get email subject.
428 *
429 * @since 2.0
430 * @access public
431 *
432 * @param int $form_id
433 *
434 * @return string
435 */
436 function get_email_subject( $form_id = null ) {
437 $subject = wp_strip_all_tags(
438 Give_Email_Notification_Util::get_value(
439 $this,
440 Give_Email_Setting_Field::get_prefix( $this, $form_id ) . 'email_subject',
441 $form_id,
442 $this->config['default_email_subject']
443 )
444 );
445
446 /**
447 * Filter the subject.
448 *
449 * @since 2.0
450 */
451 return apply_filters(
452 "give_{$this->config['id']}_get_email_subject",
453 $subject,
454 $this,
455 $form_id
456 );
457 }
458
459 /**
460 * Get email message.
461 *
462 * @since 2.0
463 * @access public
464 *
465 * @param int $form_id
466 *
467 * @return string
468 */
469 public function get_email_message( $form_id = null ) {
470 $message = Give_Email_Notification_Util::get_value(
471 $this,
472 Give_Email_Setting_Field::get_prefix( $this, $form_id ) . 'email_message',
473 $form_id,
474 $this->config['default_email_message']
475 );
476
477 /**
478 * Filter the message.
479 *
480 * @since 2.0
481 */
482 return apply_filters(
483 "give_{$this->config['id']}_get_email_message",
484 $message,
485 $this,
486 $form_id
487 );
488 }
489
490 /**
491 * Get email header.
492 *
493 * @param int $form_id The Form ID.
494 *
495 * @since 2.1.3
496 *
497 * @return string
498 */
499 public function get_email_header( $form_id = null ) {
500 $header = Give_Email_Notification_Util::get_value(
501 $this,
502 Give_Email_Setting_Field::get_prefix( $this, $form_id ) . 'email_header',
503 $form_id,
504 $this->config['default_email_header']
505 );
506
507 /**
508 * Filter the header.
509 *
510 * @since 2.1.3
511 */
512 return apply_filters(
513 "give_{$this->config['id']}_get_email_header",
514 $header,
515 $this,
516 $form_id
517 );
518 }
519
520 /**
521 * Get email content type.
522 *
523 * @since 2.0
524 * @access public
525 *
526 * @param $form_id
527 *
528 * @return string
529 */
530 public function get_email_content_type( $form_id ) {
531 $content_type = Give_Email_Notification_Util::get_value(
532 $this,
533 Give_Email_Setting_Field::get_prefix( $this, $form_id ) . 'email_content_type',
534 $form_id,
535 $this->config['content_type']
536 );
537
538 /**
539 * Filter the email content type.
540 *
541 * @since 2.0
542 */
543 return apply_filters(
544 "give_{$this->config['id']}_get_email_content_type",
545 $content_type,
546 $this,
547 $form_id
548 );
549 }
550
551 /**
552 * Get email template.
553 *
554 * @since 2.0
555 * @access public
556 *
557 * @param $form_id
558 *
559 * @return string
560 */
561 public function get_email_template( $form_id ) {
562 $email_template = give_get_meta( $form_id, '_give_email_template', true );
563 $email_template = Give_Email_Notification_Util::get_value(
564 $this,
565 Give_Email_Setting_Field::get_prefix( $this, $form_id ) .'email_template',
566 $form_id,
567 ! empty( $email_template ) && Give_Email_Notification_Util::can_use_form_email_options( $this, $form_id ) ?
568 $email_template :
569 $this->config['email_template']
570 );
571
572 /**
573 * Filter the email template.
574 *
575 * @since 2.0
576 */
577 return apply_filters(
578 "give_{$this->config['id']}_get_email_template",
579 $email_template,
580 $this,
581 $form_id
582 );
583 }
584
585
586 /**
587 * Get allowed email tags for current email notification.
588 *
589 * @since 2.0
590 * @access private
591 *
592 * @param bool $formatted
593 *
594 * @return array
595 */
596 public function get_allowed_email_tags( $formatted = false ) {
597 // Get all email tags.
598 $email_tags = Give()->email_tags->get_tags();
599
600 // Skip if all email template tags context setup exit.
601 if ( $this->config['email_tag_context'] && 'all' !== $this->config['email_tag_context'] ) {
602 $email_context = (array) $this->config['email_tag_context'];
603
604 foreach ( $email_tags as $index => $email_tag ) {
605 if ( in_array( $email_tag['context'], $email_context ) ) {
606 continue;
607 }
608
609 unset( $email_tags[ $index ] );
610 }
611 }
612
613 /**
614 * Disallow tags on Email Notifications which don't have a
615 * recipient and if the tag's is_admin property is set to true.
616 */
617 if ( false === $this->config['has_recipient_field'] ) {
618 foreach ( $email_tags as $index => $email_tag ) {
619 if ( true === $email_tag['is_admin'] ) {
620 unset( $email_tags[ $index ] );
621 }
622 }
623 }
624
625 if ( count( $email_tags ) && $formatted ) : ob_start() ?>
626 <ul class="give-email-tags-wrap">
627 <?php foreach ( $email_tags as $email_tag ) : ?>
628 <li class="give_<?php echo $email_tag['tag']; ?>_tag">
629 <code>{<?php echo $email_tag['tag']; ?>}</code> - <?php echo $email_tag['description']; ?>
630 </li>
631 <?php endforeach; ?>
632 </ul>
633 <?php
634 $email_tags = ob_get_clean();
635 endif;
636
637 return $email_tags;
638 }
639
640 /**
641 * Get preview email recipients.
642 *
643 * @since 2.0
644 * @access public
645 *
646 * @param int $form_id
647 *
648 * @return array|string
649 */
650 public function get_preview_email_recipient( $form_id = null ) {
651 $recipients = $this->get_recipient( $form_id );
652
653 /**
654 * Filter the preview email recipients.
655 *
656 * @since 2.0
657 *
658 * @param string|array $recipients List of recipients.
659 * @param Give_Email_Notification $this
660 */
661 $recipients = apply_filters( 'give_get_preview_email_recipient', $recipients, $this, $form_id );
662
663 return $recipients;
664 }
665
666 /**
667 * Get the recipient attachments.
668 *
669 * @since 2.0
670 * @access public
671 *
672 * @param int $form_id
673 *
674 * @return array
675 */
676 public function get_email_attachments( $form_id = null ) {
677 /**
678 * Filter the attachment.
679 *
680 * @since 2.0
681 */
682 return apply_filters( "give_{$this->config['id']}_get_email_attachments", array(), $this, $form_id );
683 }
684
685
686 /**
687 * Send preview email.
688 *
689 * @since 2.0
690 * @access public
691 *
692 * @param bool $send Flag to check if send email or not.
693 *
694 * @return bool
695 */
696 public function send_preview_email( $send = true ) {
697 // Get form id
698 $form_id = ! empty( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : null;
699
700 // setup email data.
701 $this->setup_email_data();
702
703 $attachments = $this->get_email_attachments();
704 $message = $this->preview_email_template_tags( $this->get_email_message( $form_id ) );
705 $subject = $this->preview_email_template_tags( $this->get_email_subject( $form_id ) );
706 $content_type = $this->get_email_content_type( $form_id );
707
708 // Setup email content type.
709 Give()->emails->__set( 'content_type', $content_type );
710 Give()->emails->__set( 'html', true );
711
712 // Setup email template
713 Give()->emails->__set( 'template', $this->get_email_template( $form_id ) );
714
715 // Set email header.
716 Give()->emails->__set( 'heading', $this->preview_email_template_tags( $this->get_email_header( $form_id ) ) );
717
718 // Format plain content type email.
719 if ( 'text/plain' === $content_type ) {
720 Give()->emails->__set( 'html', false );
721 Give()->emails->__set( 'template', 'none' );
722 $message = strip_tags( $message );
723 }
724
725 if ( Give_Email_Notification_Util::can_use_form_email_options( $this, $form_id ) ) {
726 Give()->emails->form_id = $form_id;
727 Give()->emails->from_name = give_get_meta( $form_id, '_give_from_name', true );
728 Give()->emails->from_address = give_get_meta( $form_id, '_give_from_email', true );
729 }
730
731 return $send
732 ? Give()->emails->send( $this->get_preview_email_recipient( $form_id ), $subject, $message, $attachments )
733 : false;
734 }
735
736
737 /**
738 * Send email notification.
739 *
740 * Note: To render email tags in all context certain parameters are necessary for core (includes/emails/class-give-emails):
741 * 1. payment_id
742 * 2. user_id
743 * 3. form_id
744 * 4. donor_id
745 * 5. for third party email tags you can pass necessary param along above parameters other value replace by empty string.
746 *
747 * @since 2.0
748 * @access public
749 *
750 * @param array $email_tag_args Arguments which helps to decode email template tags.
751 *
752 * @return bool
753 */
754 public function send_email_notification( $email_tag_args = array() ) {
755 // Add email content type email tags.
756 $email_tag_args['email_content_type'] = $this->config['content_type'];
757
758 /**
759 * Filter the email tag args
760 *
761 * @since 2.0
762 */
763 $email_tag_args = apply_filters( "give_{$this->config['id']}_email_tag_args", $email_tag_args, $this );
764
765 // Get form id.
766 $form_id = ! empty( $email_tag_args['form_id'] )
767 ? absint( $email_tag_args['form_id'] )
768 : ( ! empty( $email_tag_args['payment_id'] ) ? give_get_payment_form_id( $email_tag_args['payment_id'] ) : null );
769
770
771 // Do not send email if notification is disable.
772 if ( ! Give_Email_Notification_Util::is_email_notification_active( $this, $form_id ) ) {
773 return false;
774 }
775
776 /**
777 * Fire action after before email send.
778 *
779 * @since 2.0
780 */
781 do_action( "give_{$this->config['id']}_email_send_before", $this, $form_id );
782
783 $attachments = $this->get_email_attachments();
784 $message = give_do_email_tags( $this->get_email_message( $form_id ), $email_tag_args );
785 $subject = give_do_email_tags( $this->get_email_subject( $form_id ), $email_tag_args );
786 $content_type = $this->get_email_content_type( $form_id );
787
788 // Setup email content type.
789 Give()->emails->__set( 'content_type', $content_type );
790 Give()->emails->__set( 'html', true );
791
792 // Set email template.
793 Give()->emails->__set( 'template', $this->get_email_template( $form_id ) );
794
795 // Set email header.
796 Give()->emails->__set( 'heading', give_do_email_tags( $this->get_email_header( $form_id ), $email_tag_args ) );
797
798 if ( 'text/plain' === $content_type ) {
799 Give()->emails->__set( 'html', false );
800 Give()->emails->__set( 'template', 'none' );
801 $message = strip_tags( $message );
802 }
803
804 if ( Give_Email_Notification_Util::can_use_form_email_options( $this, $form_id ) ) {
805 Give()->emails->form_id = $form_id;
806 Give()->emails->from_name = give_get_meta( $form_id, '_give_from_name', true );
807 Give()->emails->from_address = give_get_meta( $form_id, '_give_from_email', true );
808 }
809
810 // Send email.
811 $email_status = Give()->emails->send( $this->get_recipient( $form_id ), $subject, $message, $attachments );
812
813 /**
814 * Fire action after after email send.
815 *
816 * @since 2.0
817 */
818 do_action( "give_{$this->config['id']}_email_send_after", $email_status, $this, $form_id );
819
820 return $email_status;
821 }
822
823
824 /**
825 * Decode preview email template tags.
826 *
827 * @since 2.0
828 *
829 * @param string $message
830 *
831 * @return string
832 */
833 public function preview_email_template_tags( $message ) {
834 // Set Payment.
835 $payment_id = give_check_variable( give_clean( $_GET ), 'isset_empty', 0, 'preview_id' );
836 $payment = $payment_id ? new Give_Payment( $payment_id ) : new stdClass();
837
838 // Set donor.
839 $user_id = $payment_id
840 ? $payment->user_id
841 : give_check_variable( give_clean( $_GET ), 'isset_empty', 0, 'user_id' );
842 $user_id = $user_id ? $user_id : wp_get_current_user()->ID;
843
844 // Set receipt.
845 $receipt_id = strtolower( md5( uniqid() ) );
846
847 $receipt_link_url = esc_url( add_query_arg( array(
848 'payment_key' => $receipt_id,
849 ), give_get_history_page_uri() ) );
850
851 $receipt_link = sprintf(
852 '<a href="%1$s">%2$s</a>',
853 $receipt_link_url,
854 esc_html__( 'View the receipt in your browser &raquo;', 'give' )
855 );
856
857 // Set default values for tags.
858 $this->config['preview_email_tags_values'] = wp_parse_args(
859 $this->config['preview_email_tags_values'],
860 array(
861 'name' => give_email_tag_first_name( array(
862 'payment_id' => $payment_id,
863 'user_id' => $user_id,
864 ) ),
865 'fullname' => give_email_tag_fullname( array(
866 'payment_id' => $payment_id,
867 'user_id' => $user_id,
868 ) ),
869 'username' => give_email_tag_username( array(
870 'payment_id' => $payment_id,
871 'user_id' => $user_id,
872 ) ),
873 'user_email' => give_email_tag_user_email( array(
874 'payment_id' => $payment_id,
875 'user_id' => $user_id,
876 ) ),
877 'payment_total' => $payment_id ? give_email_tag_payment_total( array( 'payment_id' => $payment_id ) ) : give_currency_filter( '10.50' ),
878 'amount' => $payment_id ? give_email_tag_amount( array( 'payment_id' => $payment_id ) ) : give_currency_filter( '10.50' ),
879 'price' => $payment_id ? give_email_tag_price( array( 'payment_id' => $payment_id ) ) : give_currency_filter( '10.50' ),
880 'payment_method' => $payment_id ? give_email_tag_payment_method( array( 'payment_id' => $payment_id ) ) : __( 'PayPal', 'give' ),
881 'receipt_id' => $receipt_id,
882 'payment_id' => $payment_id ? $payment_id : rand( 2000, 2050 ),
883 'receipt_link_url' => $receipt_link_url,
884 'receipt_link' => $receipt_link,
885 'date' => $payment_id ? date( give_date_format(), strtotime( $payment->date ) ) : date( give_date_format(), current_time( 'timestamp' ) ),
886 'donation' => $payment_id ? give_email_tag_donation( array( 'payment_id' => $payment_id ) ) : esc_html__( 'Sample Donation Form Title', 'give' ),
887 'form_title' => $payment_id ? give_email_tag_form_title( array( 'payment_id' => $payment_id ) ) : esc_html__( 'Sample Donation Form Title - Sample Donation Level', 'give' ),
888 'sitename' => $payment_id ? give_email_tag_sitename( array( 'payment_id' => $payment_id ) ) : get_bloginfo( 'name' ),
889 'billing_address' => $payment_id ? give_email_tag_billing_address( array( 'payment_id' => $payment_id ) ) : '',
890 'email_access_link' => sprintf(
891 '<a href="%1$s">%2$s</a>',
892 add_query_arg(
893 array(
894 'give_nl' => uniqid(),
895 ),
896 give_get_history_page_uri()
897 ),
898 __( 'View your donation history &raquo;', 'give' )
899 ),
900 'reset_password_link' => $user_id ? give_email_tag_reset_password_link( array( 'user_id' => $user_id ), $payment_id ) : '',
901 'site_url' => sprintf(
902 '<a href="%1$s">%2$s</a>',
903 get_bloginfo( 'url' ),
904 get_bloginfo( 'url' )
905 ),
906 'admin_email' => give_email_admin_email(),
907 'offline_mailing_address' => give_email_offline_mailing_address(),
908 )
909 );
910
911 // Decode tags.
912 foreach ( $this->config['preview_email_tags_values'] as $preview_tag => $value ) {
913 if ( isset( $this->config['preview_email_tags_values'][ $preview_tag ] ) ) {
914 $message = str_replace( "{{$preview_tag}}", $this->config['preview_email_tags_values'][ $preview_tag ], $message );
915 }
916 }
917
918 return apply_filters( 'give_email_preview_template_tags', $message );
919 }
920
921 /**
922 * Setup email data
923 *
924 * @since 2.0
925 */
926 public function setup_email_data() {
927 }
928
929
930 /**
931 * Validate email form setting
932 *
933 * Note: internal use only
934 *
935 * @since 2.0
936 * @access public
937 *
938 * @param $form_meta_key
939 * @param $form_meta_value
940 * @param $post_id
941 *
942 */
943 public function validate_form_recipient_field_value( $form_meta_key, $form_meta_value, $post_id ) {
944 // Get valid emails.
945 $new_form_meta_value = array_filter( $form_meta_value, function ( $value ) {
946 return ! empty( $value['email'] ) && is_email( $value['email'] );
947 } );
948
949 // Remove duplicate emails from array.
950 $email_arr = array();
951 foreach ( $new_form_meta_value as $index => $email ) {
952 if( in_array( $email['email'], $email_arr ) ) {
953 unset( $new_form_meta_value[$index] );
954 continue;
955 }
956
957 $email_arr[] = $email['email'];
958 }
959
960 $update = false;
961
962 if ( empty( $new_form_meta_value ) ) {
963 // Set default recipient.
964 $form_meta_value = array(
965 array(
966 'email' => get_bloginfo( 'admin_email' )
967 ),
968 );
969
970 $update = true;
971
972 } elseif ( count( $new_form_meta_value ) !== count( $form_meta_value ) ) {
973 // Filter recipient emails.
974 $form_meta_value = $new_form_meta_value;
975
976 $update = true;
977 }
978
979 if( $update ) {
980 give_update_meta( $post_id, $form_meta_key, $form_meta_value );
981 }
982 }
983 }
984
985 endif; // End class_exists check
986