PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.2.0
GiveWP – Donation Plugin and Fundraising Platform v2.2.0
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 8 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 8 years ago class-email-setting-field.php 8 years ago class-new-donation-email.php 8 years ago class-new-donor-register-email.php 8 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
976 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 if ( is_array( $this->config['email_tag_context'] ) ) {
603 foreach ( $email_tags as $index => $email_tag ) {
604 if ( in_array( $email_tag['context'], $this->config['email_tag_context'] ) ) {
605 continue;
606 }
607
608 unset( $email_tags[ $index ] );
609 }
610 } else {
611 foreach ( $email_tags as $index => $email_tag ) {
612 if ( $this->config['email_tag_context'] === $email_tag['context'] ) {
613 continue;
614 }
615
616 unset( $email_tags[ $index ] );
617 }
618 }
619 }
620
621 if ( count( $email_tags ) && $formatted ) : ob_start() ?>
622 <ul class="give-email-tags-wrap">
623 <?php foreach ( $email_tags as $email_tag ) : ?>
624 <li class="give_<?php echo $email_tag['tag']; ?>_tag">
625 <code>{<?php echo $email_tag['tag']; ?>}</code> - <?php echo $email_tag['description']; ?>
626 </li>
627 <?php endforeach; ?>
628 </ul>
629 <?php
630 $email_tags = ob_get_clean();
631 endif;
632
633 return $email_tags;
634 }
635
636 /**
637 * Get preview email recipients.
638 *
639 * @since 2.0
640 * @access public
641 *
642 * @param int $form_id
643 *
644 * @return array|string
645 */
646 public function get_preview_email_recipient( $form_id = null ) {
647 $recipients = $this->get_recipient( $form_id );
648
649 /**
650 * Filter the preview email recipients.
651 *
652 * @since 2.0
653 *
654 * @param string|array $recipients List of recipients.
655 * @param Give_Email_Notification $this
656 */
657 $recipients = apply_filters( 'give_get_preview_email_recipient', $recipients, $this, $form_id );
658
659 return $recipients;
660 }
661
662 /**
663 * Get the recipient attachments.
664 *
665 * @since 2.0
666 * @access public
667 *
668 * @param int $form_id
669 *
670 * @return array
671 */
672 public function get_email_attachments( $form_id = null ) {
673 /**
674 * Filter the attachment.
675 *
676 * @since 2.0
677 */
678 return apply_filters( "give_{$this->config['id']}_get_email_attachments", array(), $this, $form_id );
679 }
680
681
682 /**
683 * Send preview email.
684 *
685 * @since 2.0
686 * @access public
687 */
688 public function send_preview_email() {
689 // Get form id
690 $form_id = ! empty( $_GET['form_id'] ) ? absint( $_GET['form_id'] ) : null;
691
692 // setup email data.
693 $this->setup_email_data();
694
695 $attachments = $this->get_email_attachments();
696 $message = $this->preview_email_template_tags( $this->get_email_message( $form_id ) );
697 $subject = $this->preview_email_template_tags( $this->get_email_subject( $form_id ) );
698 $content_type = $this->get_email_content_type( $form_id );
699
700 // Setup email content type.
701 Give()->emails->__set( 'content_type', $content_type );
702 Give()->emails->__set( 'html', true );
703
704 // Setup email template
705 Give()->emails->__set( 'template', $this->get_email_template( $form_id ) );
706
707 // Set email header.
708 Give()->emails->__set( 'heading', $this->preview_email_template_tags( $this->get_email_header( $form_id ) ) );
709
710 // Format plain content type email.
711 if ( 'text/plain' === $content_type ) {
712 Give()->emails->__set( 'html', false );
713 Give()->emails->__set( 'template', 'none' );
714 $message = strip_tags( $message );
715 }
716
717 if ( Give_Email_Notification_Util::can_use_form_email_options( $this, $form_id ) ) {
718 Give()->emails->form_id = $form_id;
719 Give()->emails->from_name = give_get_meta( $form_id, '_give_from_name', true );
720 Give()->emails->from_address = give_get_meta( $form_id, '_give_from_email', true );
721 }
722
723 return Give()->emails->send( $this->get_preview_email_recipient( $form_id ), $subject, $message, $attachments );
724 }
725
726
727 /**
728 * Send email notification.
729 *
730 * Note: To render email tags in all context certain parameters are necessary for core (includes/emails/class-give-emails):
731 * 1. payment_id
732 * 2. user_id
733 * 3. form_id
734 * 4. donor_id
735 * 5. for third party email tags you can pass necessary param along above parameters other value replace by empty string.
736 *
737 * @since 2.0
738 * @access public
739 *
740 * @param array $email_tag_args Arguments which helps to decode email template tags.
741 *
742 * @return bool
743 */
744 public function send_email_notification( $email_tag_args = array() ) {
745 // Add email content type email tags.
746 $email_tag_args['email_content_type'] = $this->config['content_type'];
747
748 /**
749 * Filter the email tag args
750 *
751 * @since 2.0
752 */
753 $email_tag_args = apply_filters( "give_{$this->config['id']}_email_tag_args", $email_tag_args, $this );
754
755 // Get form id.
756 $form_id = ! empty( $email_tag_args['form_id'] )
757 ? absint( $email_tag_args['form_id'] )
758 : ( ! empty( $email_tag_args['payment_id'] ) ? give_get_payment_form_id( $email_tag_args['payment_id'] ) : null );
759
760
761 // Do not send email if notification is disable.
762 if ( ! Give_Email_Notification_Util::is_email_notification_active( $this, $form_id ) ) {
763 return false;
764 }
765
766 /**
767 * Fire action after before email send.
768 *
769 * @since 2.0
770 */
771 do_action( "give_{$this->config['id']}_email_send_before", $this, $form_id );
772
773 $attachments = $this->get_email_attachments();
774 $message = give_do_email_tags( $this->get_email_message( $form_id ), $email_tag_args );
775 $subject = give_do_email_tags( $this->get_email_subject( $form_id ), $email_tag_args );
776 $content_type = $this->get_email_content_type( $form_id );
777
778 // Setup email content type.
779 Give()->emails->__set( 'content_type', $content_type );
780 Give()->emails->__set( 'html', true );
781
782 // Set email template.
783 Give()->emails->__set( 'template', $this->get_email_template( $form_id ) );
784
785 // Set email header.
786 Give()->emails->__set( 'heading', give_do_email_tags( $this->get_email_header( $form_id ), $email_tag_args ) );
787
788 if ( 'text/plain' === $content_type ) {
789 Give()->emails->__set( 'html', false );
790 Give()->emails->__set( 'template', 'none' );
791 $message = strip_tags( $message );
792 }
793
794 if ( Give_Email_Notification_Util::can_use_form_email_options( $this, $form_id ) ) {
795 Give()->emails->form_id = $form_id;
796 Give()->emails->from_name = give_get_meta( $form_id, '_give_from_name', true );
797 Give()->emails->from_address = give_get_meta( $form_id, '_give_from_email', true );
798 }
799
800 // Send email.
801 $email_status = Give()->emails->send( $this->get_recipient( $form_id ), $subject, $message, $attachments );
802
803 /**
804 * Fire action after after email send.
805 *
806 * @since 2.0
807 */
808 do_action( "give_{$this->config['id']}_email_send_after", $email_status, $this, $form_id );
809
810 return $email_status;
811 }
812
813
814 /**
815 * Decode preview email template tags.
816 *
817 * @since 2.0
818 *
819 * @param string $message
820 *
821 * @return string
822 */
823 public function preview_email_template_tags( $message ) {
824 // Set Payment.
825 $payment_id = give_check_variable( give_clean( $_GET ), 'isset_empty', 0, 'preview_id' );
826 $payment = $payment_id ? new Give_Payment( $payment_id ) : new stdClass();
827
828 // Set donor.
829 $user_id = $payment_id
830 ? $payment->user_id
831 : give_check_variable( give_clean( $_GET ), 'isset_empty', 0, 'user_id' );
832 $user_id = $user_id ? $user_id : wp_get_current_user()->ID;
833
834 // Set receipt.
835 $receipt_id = strtolower( md5( uniqid() ) );
836
837 $receipt_link_url = esc_url( add_query_arg( array(
838 'payment_key' => $receipt_id,
839 ), give_get_history_page_uri() ) );
840
841 $receipt_link = sprintf(
842 '<a href="%1$s">%2$s</a>',
843 $receipt_link_url,
844 esc_html__( 'View the receipt in your browser &raquo;', 'give' )
845 );
846
847 // Set default values for tags.
848 $this->config['preview_email_tags_values'] = wp_parse_args(
849 $this->config['preview_email_tags_values'],
850 array(
851 'name' => give_email_tag_first_name( array(
852 'payment_id' => $payment_id,
853 'user_id' => $user_id,
854 ) ),
855 'fullname' => give_email_tag_fullname( array(
856 'payment_id' => $payment_id,
857 'user_id' => $user_id,
858 ) ),
859 'username' => give_email_tag_username( array(
860 'payment_id' => $payment_id,
861 'user_id' => $user_id,
862 ) ),
863 'user_email' => give_email_tag_user_email( array(
864 'payment_id' => $payment_id,
865 'user_id' => $user_id,
866 ) ),
867 'payment_total' => $payment_id ? give_email_tag_payment_total( array( 'payment_id' => $payment_id ) ) : give_currency_filter( '10.50' ),
868 'amount' => $payment_id ? give_email_tag_amount( array( 'payment_id' => $payment_id ) ) : give_currency_filter( '10.50' ),
869 'price' => $payment_id ? give_email_tag_price( array( 'payment_id' => $payment_id ) ) : give_currency_filter( '10.50' ),
870 'payment_method' => $payment_id ? give_email_tag_payment_method( array( 'payment_id' => $payment_id ) ) : __( 'PayPal', 'give' ),
871 'receipt_id' => $receipt_id,
872 'payment_id' => $payment_id ? $payment_id : rand( 2000, 2050 ),
873 'receipt_link_url' => $receipt_link_url,
874 'receipt_link' => $receipt_link,
875 'date' => $payment_id ? date( give_date_format(), strtotime( $payment->date ) ) : date( give_date_format(), current_time( 'timestamp' ) ),
876 'donation' => $payment_id ? give_email_tag_donation( array( 'payment_id' => $payment_id ) ) : esc_html__( 'Sample Donation Form Title', 'give' ),
877 'form_title' => $payment_id ? give_email_tag_form_title( array( 'payment_id' => $payment_id ) ) : esc_html__( 'Sample Donation Form Title - Sample Donation Level', 'give' ),
878 'sitename' => $payment_id ? give_email_tag_sitename( array( 'payment_id' => $payment_id ) ) : get_bloginfo( 'name' ),
879 'billing_address' => $payment_id ? give_email_tag_billing_address( array( 'payment_id' => $payment_id ) ) : '',
880 'email_access_link' => sprintf(
881 '<a href="%1$s">%2$s</a>',
882 add_query_arg(
883 array(
884 'give_nl' => uniqid(),
885 ),
886 give_get_history_page_uri()
887 ),
888 __( 'View your donation history &raquo;', 'give' )
889 ),
890 'reset_password_link' => $user_id ? give_email_tag_reset_password_link( array( 'user_id' => $user_id ), $payment_id ) : '',
891 'site_url' => sprintf(
892 '<a href="%1$s">%2$s</a>',
893 get_bloginfo( 'url' ),
894 get_bloginfo( 'url' )
895 ),
896 'admin_email' => give_email_admin_email(),
897 'offline_mailing_address' => give_email_offline_mailing_address(),
898 )
899 );
900
901 // Decode tags.
902 foreach ( $this->config['preview_email_tags_values'] as $preview_tag => $value ) {
903 if ( isset( $this->config['preview_email_tags_values'][ $preview_tag ] ) ) {
904 $message = str_replace( "{{$preview_tag}}", $this->config['preview_email_tags_values'][ $preview_tag ], $message );
905 }
906 }
907
908 return apply_filters( 'give_email_preview_template_tags', $message );
909 }
910
911 /**
912 * Setup email data
913 *
914 * @since 2.0
915 */
916 public function setup_email_data() {
917 }
918
919
920 /**
921 * Validate email form setting
922 *
923 * Note: internal use only
924 *
925 * @since 2.0
926 * @access public
927 *
928 * @param $form_meta_key
929 * @param $form_meta_value
930 * @param $post_id
931 *
932 */
933 public function validate_form_recipient_field_value( $form_meta_key, $form_meta_value, $post_id ) {
934 // Get valid emails.
935 $new_form_meta_value = array_filter( $form_meta_value, function ( $value ) {
936 return ! empty( $value['email'] ) && is_email( $value['email'] );
937 } );
938
939 // Remove duplicate emails from array.
940 $email_arr = array();
941 foreach ( $new_form_meta_value as $index => $email ) {
942 if( in_array( $email['email'], $email_arr ) ) {
943 unset( $new_form_meta_value[$index] );
944 continue;
945 }
946
947 $email_arr[] = $email['email'];
948 }
949
950 $update = false;
951
952 if ( empty( $new_form_meta_value ) ) {
953 // Set default recipient.
954 $form_meta_value = array(
955 array(
956 'email' => get_bloginfo( 'admin_email' )
957 ),
958 );
959
960 $update = true;
961
962 } elseif ( count( $new_form_meta_value ) !== count( $form_meta_value ) ) {
963 // Filter recipient emails.
964 $form_meta_value = $new_form_meta_value;
965
966 $update = true;
967 }
968
969 if( $update ) {
970 give_update_meta( $post_id, $form_meta_key, $form_meta_value );
971 }
972 }
973 }
974
975 endif; // End class_exists check
976