PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.6
GiveWP – Donation Plugin and Fundraising Platform v4.16.6
4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 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 1 month 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 4 years ago class-email-access-email.php 1 month ago class-email-notification-table.php 3 years ago class-email-notification-util.php 6 years ago class-email-notifications.php 5 days ago class-email-setting-field.php 3 years ago class-failed-donation-email.php 6 months ago class-new-donation-email.php 6 years ago class-new-donor-register-email.php 4 years ago class-new-offline-donation-email.php 10 months ago class-offline-donation-instruction-email.php 6 years ago filters.php 4 years ago
class-email-notifications.php
433 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 * @since 4.16.6 Re-check capability/nonce here, since this callback is also reachable via a direct action dispatch that bypasses the check normally done in preview_email().
318 * @access public
319 *
320 * @param Give_Email_Notification $email
321 */
322 public function email_preview_header( $email ) {
323 if ( ! Give_Email_Notification_Util::can_preview_email() ) {
324 return;
325 }
326
327 /**
328 * Filter the all email preview headers.
329 *
330 * @since 2.0
331 *
332 * @param Give_Email_Notification $email
333 */
334 $email_preview_header = apply_filters( 'give_email_preview_header', give_get_preview_email_header(), $email );
335
336 echo $email_preview_header;
337 }
338
339 /**
340 * Add email preview data
341 *
342 * @since 2.0
343 * @access public
344 *
345 * @param array $email_preview_data
346 *
347 * @return array
348 */
349 public function email_preview_data( $email_preview_data ) {
350 $email_preview_data['payment_id'] = absint( give_check_variable( give_clean( $_GET ), 'isset', 0, 'preview_id' ) );
351 $email_preview_data['user_id'] = absint( give_check_variable( give_clean( $_GET ), 'isset', 0, 'user_id' ) );
352
353 return $email_preview_data;
354 }
355
356 /**
357 * Replace email template tags.
358 *
359 * @since 2.0
360 * @access public
361 *
362 * @param string $email_message
363 * @param array $email_preview_data
364 *
365 * @return string
366 */
367 public function email_preview_message( $email_message, $email_preview_data ) {
368 if (
369 ! empty( $email_preview_data['payment_id'] )
370 || ! empty( $email_preview_data['user_id'] )
371 ) {
372 $email_message = give_do_email_tags( $email_message, $email_preview_data );
373 }
374
375 return $email_message;
376 }
377
378 /**
379 * Displays the email preview
380 *
381 * @since 2.0
382 * @access public
383 * @return bool|null
384 */
385 public function send_preview_email() {
386 // Bailout.
387 if ( ! Give_Email_Notification_Util::can_send_preview_email() ) {
388 return false;
389 }
390
391 // Security check.
392 give_validate_nonce( $_GET['_wpnonce'], 'give-send-preview-email' );
393
394 // Get email type.
395 $email_type = give_check_variable( give_clean( $_GET ), 'isset', '', 'email_type' );
396
397 /* @var Give_Email_Notification $email */
398 foreach ( $this->get_email_notifications() as $email ) {
399 if ( $email_type === $email->config['id'] && Give_Email_Notification_Util::is_email_preview( $email ) ) {
400 $email->send_preview_email();
401 break;
402 }
403 }
404
405 // Remove the test email query arg.
406 wp_redirect( esc_url_raw( remove_query_arg( 'give_action' ) ) );
407 exit;
408 }
409
410
411 /**
412 * Load Give_Email_Notifications
413 *
414 * @since 2.0
415 * @access public
416 */
417 public function load() {
418 add_action( 'init', array( $this, 'init' ), -1 );
419 }
420 }
421
422 // Helper class.
423 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/abstract-email-notification.php';
424 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/class-email-notification-util.php';
425
426 // Add backward compatibility.
427 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/backward-compatibility.php';
428
429 /**
430 * Initialize functionality.
431 */
432 Give_Email_Notifications::get_instance()->load();
433