PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 / class-email-notifications.php
give / includes / admin / emails Last commit date
abstract-email-notification.php 4 years ago ajax-handler.php 2 weeks ago backward-compatibility.php 6 years ago class-donation-receipt-email.php 4 years ago class-donor-note-email.php 6 years ago class-donor-register-email.php 3 years ago class-email-access-email.php 4 days ago class-email-notification-table.php 3 years ago class-email-notification-util.php 6 years ago class-email-notifications.php 5 months ago class-email-setting-field.php 3 years ago class-failed-donation-email.php 5 months ago class-new-donation-email.php 6 years ago class-new-donor-register-email.php 3 years ago class-new-offline-donation-email.php 9 months ago class-offline-donation-instruction-email.php 6 years ago filters.php 3 years ago
class-email-notifications.php
428 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, GiveWP
10 * @license https://opensource.org/licenses/gpl-license GNU Public License
11 * @since 2.0
12 */
13
14 /**
15 * Class Give_Email_Notifications
16 *
17 * @since 2.17.1 Remove validate_settings function.
18 * Email recipient option value validation logic move to src/EmailGlobalSettingValidator.
19 */
20 class Give_Email_Notifications {
21 /**
22 * Instance.
23 *
24 * @since 2.0
25 * @access static
26 * @var
27 */
28 private static $instance;
29
30 /**
31 * Array of email notifications.
32 *
33 * @since 2.0
34 * @access private
35 * @var Give_Email_Notification[]
36 */
37 private $emails = array();
38
39 /**
40 * Singleton pattern.
41 *
42 * @since 2.0
43 * @access private
44 * Give_Email_Notifications constructor.
45 */
46 private function __construct() {
47 }
48
49
50 /**
51 * Get instance.
52 *
53 * @since 2.0
54 * @access static
55 * @return static
56 */
57 static function get_instance() {
58 if ( null === static::$instance ) {
59 self::$instance = new static();
60 }
61
62 return self::$instance;
63 }
64
65 /**
66 * Setup dependencies
67 *
68 * @since 2.0
69 */
70 public function init() {
71 // Load files.
72 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/ajax-handler.php';
73 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/class-email-setting-field.php';
74 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/filters.php';
75
76 // Load email notifications.
77 $this->add_emails_notifications();
78
79 add_filter( 'give_metabox_form_data_settings', array( $this, 'add_metabox_setting_fields' ), 10, 2 );
80 add_action( 'init', array( $this, 'preview_email' ) );
81 add_action( 'init', array( $this, 'send_preview_email' ) );
82
83 /* @var Give_Email_Notification $email */
84 foreach ( $this->get_email_notifications() as $email ) {
85 // Setup email section.
86 if ( Give_Email_Notification_Util::is_show_on_emails_setting_page( $email ) ) {
87 add_filter( 'give_get_sections_emails', array( $email, 'add_section' ) );
88 add_filter( "give_hide_section_{$email->config['id']}_on_emails_page", array( $email, 'hide_section' ) );
89 }
90
91 // Setup email preview.
92 if ( Give_Email_Notification_Util::is_email_preview_has_header( $email ) ) {
93 add_action( "give_{$email->config['id']}_email_preview", array( $this, 'email_preview_header' ) );
94 add_filter( "give_{$email->config['id']}_email_preview_data", array( $this, 'email_preview_data' ) );
95 add_filter( "give_{$email->config['id']}_email_preview_message", array( $this, 'email_preview_message' ), 1, 2 );
96 }
97 }
98 }
99
100
101 /**
102 * Add setting to metabox.
103 *
104 * @since 2.0
105 * @access public
106 *
107 * @param array $settings
108 * @param int $post_id
109 *
110 * @return array
111 */
112 public function add_metabox_setting_fields( $settings, $post_id ) {
113 $emails = $this->get_email_notifications();
114
115 // Bailout.
116 if ( empty( $emails ) ) {
117 return $settings;
118 }
119
120 // Email notification setting.
121 $settings['email_notification_options'] = array(
122 'id' => 'email_notification_options',
123 'title' => __( 'Email Notifications', 'give' ),
124 'icon-html' => '<i class="fas fa-envelope"></i>',
125 'fields' => array(
126 array(
127 'name' => __( 'Email Options', 'give' ),
128 'id' => '_give_email_options',
129 'type' => 'radio_inline',
130 'default' => 'global',
131 'options' => array(
132 'global' => __( 'Global Options', 'give' ),
133 'enabled' => __( 'Customize', 'give' ),
134 ),
135 ),
136 array(
137 'id' => '_give_email_template',
138 'name' => esc_html__( 'Email Template', 'give' ),
139 'desc' => esc_html__( 'Choose your template from the available registered template types.', 'give' ),
140 'type' => 'select',
141 'default' => 'default',
142 'options' => give_get_email_templates(),
143 ),
144 array(
145 'id' => '_give_email_logo',
146 'name' => esc_html__( 'Logo', 'give' ),
147 'desc' => esc_html__( 'Upload or choose a logo to be displayed at the top of the donation receipt emails. Displayed on HTML emails only.', 'give' ),
148 'type' => 'file',
149 ),
150 array(
151 'id' => '_give_from_name',
152 'name' => esc_html__( 'From Name', 'give' ),
153 'desc' => esc_html__( 'The name which appears in the "From" field in all GiveWP donation emails.', 'give' ),
154 'default' => get_bloginfo( 'name' ),
155 'type' => 'text',
156 ),
157 array(
158 'id' => '_give_from_email',
159 'name' => esc_html__( 'From Email', 'give' ),
160 'desc' => esc_html__( 'Email address from which all GiveWP emails are sent from. This will act as the "from" and "reply-to" email address.', 'give' ),
161 'default' => get_bloginfo( 'admin_email' ),
162 'type' => 'text',
163 ),
164 array(
165 'name' => 'email_notification_docs',
166 'type' => 'docs_link',
167 'url' => 'http://docs.givewp.com/email-notification',
168 'title' => __( 'Email Notification', 'give' ),
169 ),
170 ),
171
172 /**
173 * Filter the email notification settings.
174 *
175 * @since 2.0
176 */
177 'sub-fields' => apply_filters( 'give_email_notification_options_metabox_fields', array(), $post_id ),
178 );
179
180 return $settings;
181 }
182
183 /**
184 * Add email notifications
185 *
186 * @since 4.14.0 Add failed donation email.
187 * @since 2.0
188 * @access private
189 */
190 private function add_emails_notifications() {
191 $this->emails = array(
192 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-new-donation-email.php',
193 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-failed-donation-email.php',
194 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-donation-receipt-email.php',
195 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-new-offline-donation-email.php',
196 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-offline-donation-instruction-email.php',
197 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-new-donor-register-email.php',
198 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-donor-register-email.php',
199 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-donor-note-email.php',
200 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-email-access-email.php',
201 );
202
203 /**
204 * Filter the email notifications.
205 *
206 * @since 2.0
207 */
208 $this->emails = apply_filters( 'give_email_notifications', $this->emails, $this );
209
210 // Bailout.
211 if ( empty( $this->emails ) ) {
212 return;
213 }
214
215 // Initiate email notifications.
216 foreach ( $this->emails as $email ) {
217 $email->init();
218 }
219 }
220
221
222 /**
223 * Get list of email notifications.
224 *
225 * @since 2.0
226 * @access public
227 * @return array
228 */
229 public function get_email_notifications() {
230 return $this->emails;
231 }
232
233
234 /**
235 * Displays the email preview
236 *
237 * @since 2.0
238 * @access public
239 * @return bool|null
240 */
241 public function preview_email() {
242 // Bailout.
243 if ( ! Give_Email_Notification_Util::can_preview_email() ) {
244 return false;
245 }
246
247 // Security check.
248 give_validate_nonce( $_GET['_wpnonce'], 'give-preview-email' );
249
250 // Get email type.
251 $email_type = isset( $_GET['email_type'] ) ? esc_attr( $_GET['email_type'] ) : '';
252
253 /* @var Give_Email_Notification $email */
254 foreach ( $this->get_email_notifications() as $email ) {
255 if ( $email_type !== $email->config['id'] ) {
256 continue;
257 }
258
259 // Set form id.
260 $form_id = empty( $_GET['form_id'] ) ? null : absint( $_GET['form_id'] );
261
262 // Call setup email data to apply filter and other thing to email.
263 $email->send_preview_email( false );
264
265 // Decode message.
266 $email_message = $email->preview_email_template_tags( $email->get_email_message( $form_id ) );
267
268 // Show formatted text in browser even text/plain content type set for an email.
269 Give()->emails->html = true;
270
271 Give()->emails->form_id = $form_id;
272
273 if ( 'text/plain' === $email->config['content_type'] ) {
274 // Give()->emails->__set( 'html', false );
275 Give()->emails->__set( 'template', 'none' );
276 }
277
278 if ( $email_message = Give()->emails->build_email( $email_message ) ) {
279
280 /**
281 * Filter the email preview data
282 *
283 * @since 2.0
284 *
285 * @param array
286 */
287 $email_preview_data = apply_filters( "give_{$email_type}_email_preview_data", array() );
288
289 /**
290 * Fire the give_{$email_type}_email_preview action
291 *
292 * @since 2.0
293 */
294 do_action( "give_{$email_type}_email_preview", $email );
295
296 /**
297 * Filter the email message
298 *
299 * @since 2.0
300 *
301 * @param string $email_message
302 * @param array $email_preview_data
303 * @param Give_Email_Notification $email
304 */
305 echo apply_filters( "give_{$email_type}_email_preview_message", $email_message, $email_preview_data, $email );
306
307 exit();
308 }
309 }// End foreach().
310 }
311
312
313 /**
314 * Add header to donation receipt email preview
315 *
316 * @since 2.0
317 * @access public
318 *
319 * @param Give_Email_Notification $email
320 */
321 public function email_preview_header( $email ) {
322 /**
323 * Filter the all email preview headers.
324 *
325 * @since 2.0
326 *
327 * @param Give_Email_Notification $email
328 */
329 $email_preview_header = apply_filters( 'give_email_preview_header', give_get_preview_email_header(), $email );
330
331 echo $email_preview_header;
332 }
333
334 /**
335 * Add email preview data
336 *
337 * @since 2.0
338 * @access public
339 *
340 * @param array $email_preview_data
341 *
342 * @return array
343 */
344 public function email_preview_data( $email_preview_data ) {
345 $email_preview_data['payment_id'] = absint( give_check_variable( give_clean( $_GET ), 'isset', 0, 'preview_id' ) );
346 $email_preview_data['user_id'] = absint( give_check_variable( give_clean( $_GET ), 'isset', 0, 'user_id' ) );
347
348 return $email_preview_data;
349 }
350
351 /**
352 * Replace email template tags.
353 *
354 * @since 2.0
355 * @access public
356 *
357 * @param string $email_message
358 * @param array $email_preview_data
359 *
360 * @return string
361 */
362 public function email_preview_message( $email_message, $email_preview_data ) {
363 if (
364 ! empty( $email_preview_data['payment_id'] )
365 || ! empty( $email_preview_data['user_id'] )
366 ) {
367 $email_message = give_do_email_tags( $email_message, $email_preview_data );
368 }
369
370 return $email_message;
371 }
372
373 /**
374 * Displays the email preview
375 *
376 * @since 2.0
377 * @access public
378 * @return bool|null
379 */
380 public function send_preview_email() {
381 // Bailout.
382 if ( ! Give_Email_Notification_Util::can_send_preview_email() ) {
383 return false;
384 }
385
386 // Security check.
387 give_validate_nonce( $_GET['_wpnonce'], 'give-send-preview-email' );
388
389 // Get email type.
390 $email_type = give_check_variable( give_clean( $_GET ), 'isset', '', 'email_type' );
391
392 /* @var Give_Email_Notification $email */
393 foreach ( $this->get_email_notifications() as $email ) {
394 if ( $email_type === $email->config['id'] && Give_Email_Notification_Util::is_email_preview( $email ) ) {
395 $email->send_preview_email();
396 break;
397 }
398 }
399
400 // Remove the test email query arg.
401 wp_redirect( esc_url_raw( remove_query_arg( 'give_action' ) ) );
402 exit;
403 }
404
405
406 /**
407 * Load Give_Email_Notifications
408 *
409 * @since 2.0
410 * @access public
411 */
412 public function load() {
413 add_action( 'init', array( $this, 'init' ), -1 );
414 }
415 }
416
417 // Helper class.
418 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/abstract-email-notification.php';
419 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/class-email-notification-util.php';
420
421 // Add backward compatibility.
422 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/backward-compatibility.php';
423
424 /**
425 * Initialize functionality.
426 */
427 Give_Email_Notifications::get_instance()->load();
428