PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 1.9.0
GiveWP – Donation Plugin and Fundraising Platform v1.9.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 / class-email-notifications.php
give / includes / admin / emails Last commit date
abstract-email-notification.php 4 years ago ajax-handler.php 6 years ago backward-compatibility.php 6 years ago class-donation-receipt-email.php 6 years ago class-donor-note-email.php 6 years ago class-donor-register-email.php 6 years ago class-email-access-email.php 6 years ago class-email-notification-table.php 6 years ago class-email-notification-util.php 6 years ago class-email-notifications.php 4 years ago class-email-setting-field.php 4 years ago class-new-donation-email.php 6 years ago class-new-donor-register-email.php 6 years ago class-new-offline-donation-email.php 6 years ago class-offline-donation-instruction-email.php 6 years ago filters.php 4 years ago
class-email-notifications.php
426 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 2.0
187 * @access private
188 */
189 private function add_emails_notifications() {
190 $this->emails = array(
191 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-new-donation-email.php',
192 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-donation-receipt-email.php',
193 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-new-offline-donation-email.php',
194 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-offline-donation-instruction-email.php',
195 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-new-donor-register-email.php',
196 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-donor-register-email.php',
197 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-donor-note-email.php',
198 include GIVE_PLUGIN_DIR . 'includes/admin/emails/class-email-access-email.php',
199 );
200
201 /**
202 * Filter the email notifications.
203 *
204 * @since 2.0
205 */
206 $this->emails = apply_filters( 'give_email_notifications', $this->emails, $this );
207
208 // Bailout.
209 if ( empty( $this->emails ) ) {
210 return;
211 }
212
213 // Initiate email notifications.
214 foreach ( $this->emails as $email ) {
215 $email->init();
216 }
217 }
218
219
220 /**
221 * Get list of email notifications.
222 *
223 * @since 2.0
224 * @access public
225 * @return array
226 */
227 public function get_email_notifications() {
228 return $this->emails;
229 }
230
231
232 /**
233 * Displays the email preview
234 *
235 * @since 2.0
236 * @access public
237 * @return bool|null
238 */
239 public function preview_email() {
240 // Bailout.
241 if ( ! Give_Email_Notification_Util::can_preview_email() ) {
242 return false;
243 }
244
245 // Security check.
246 give_validate_nonce( $_GET['_wpnonce'], 'give-preview-email' );
247
248 // Get email type.
249 $email_type = isset( $_GET['email_type'] ) ? esc_attr( $_GET['email_type'] ) : '';
250
251 /* @var Give_Email_Notification $email */
252 foreach ( $this->get_email_notifications() as $email ) {
253 if ( $email_type !== $email->config['id'] ) {
254 continue;
255 }
256
257 // Set form id.
258 $form_id = empty( $_GET['form_id'] ) ? null : absint( $_GET['form_id'] );
259
260 // Call setup email data to apply filter and other thing to email.
261 $email->send_preview_email( false );
262
263 // Decode message.
264 $email_message = $email->preview_email_template_tags( $email->get_email_message( $form_id ) );
265
266 // Show formatted text in browser even text/plain content type set for an email.
267 Give()->emails->html = true;
268
269 Give()->emails->form_id = $form_id;
270
271 if ( 'text/plain' === $email->config['content_type'] ) {
272 // Give()->emails->__set( 'html', false );
273 Give()->emails->__set( 'template', 'none' );
274 }
275
276 if ( $email_message = Give()->emails->build_email( $email_message ) ) {
277
278 /**
279 * Filter the email preview data
280 *
281 * @since 2.0
282 *
283 * @param array
284 */
285 $email_preview_data = apply_filters( "give_{$email_type}_email_preview_data", array() );
286
287 /**
288 * Fire the give_{$email_type}_email_preview action
289 *
290 * @since 2.0
291 */
292 do_action( "give_{$email_type}_email_preview", $email );
293
294 /**
295 * Filter the email message
296 *
297 * @since 2.0
298 *
299 * @param string $email_message
300 * @param array $email_preview_data
301 * @param Give_Email_Notification $email
302 */
303 echo apply_filters( "give_{$email_type}_email_preview_message", $email_message, $email_preview_data, $email );
304
305 exit();
306 }
307 }// End foreach().
308 }
309
310
311 /**
312 * Add header to donation receipt email preview
313 *
314 * @since 2.0
315 * @access public
316 *
317 * @param Give_Email_Notification $email
318 */
319 public function email_preview_header( $email ) {
320 /**
321 * Filter the all email preview headers.
322 *
323 * @since 2.0
324 *
325 * @param Give_Email_Notification $email
326 */
327 $email_preview_header = apply_filters( 'give_email_preview_header', give_get_preview_email_header(), $email );
328
329 echo $email_preview_header;
330 }
331
332 /**
333 * Add email preview data
334 *
335 * @since 2.0
336 * @access public
337 *
338 * @param array $email_preview_data
339 *
340 * @return array
341 */
342 public function email_preview_data( $email_preview_data ) {
343 $email_preview_data['payment_id'] = absint( give_check_variable( give_clean( $_GET ), 'isset', 0, 'preview_id' ) );
344 $email_preview_data['user_id'] = absint( give_check_variable( give_clean( $_GET ), 'isset', 0, 'user_id' ) );
345
346 return $email_preview_data;
347 }
348
349 /**
350 * Replace email template tags.
351 *
352 * @since 2.0
353 * @access public
354 *
355 * @param string $email_message
356 * @param array $email_preview_data
357 *
358 * @return string
359 */
360 public function email_preview_message( $email_message, $email_preview_data ) {
361 if (
362 ! empty( $email_preview_data['payment_id'] )
363 || ! empty( $email_preview_data['user_id'] )
364 ) {
365 $email_message = give_do_email_tags( $email_message, $email_preview_data );
366 }
367
368 return $email_message;
369 }
370
371 /**
372 * Displays the email preview
373 *
374 * @since 2.0
375 * @access public
376 * @return bool|null
377 */
378 public function send_preview_email() {
379 // Bailout.
380 if ( ! Give_Email_Notification_Util::can_send_preview_email() ) {
381 return false;
382 }
383
384 // Security check.
385 give_validate_nonce( $_GET['_wpnonce'], 'give-send-preview-email' );
386
387 // Get email type.
388 $email_type = give_check_variable( give_clean( $_GET ), 'isset', '', 'email_type' );
389
390 /* @var Give_Email_Notification $email */
391 foreach ( $this->get_email_notifications() as $email ) {
392 if ( $email_type === $email->config['id'] && Give_Email_Notification_Util::is_email_preview( $email ) ) {
393 $email->send_preview_email();
394 break;
395 }
396 }
397
398 // Remove the test email query arg.
399 wp_redirect( remove_query_arg( 'give_action' ) );
400 exit;
401 }
402
403
404 /**
405 * Load Give_Email_Notifications
406 *
407 * @since 2.0
408 * @access public
409 */
410 public function load() {
411 add_action( 'init', array( $this, 'init' ), -1 );
412 }
413 }
414
415 // Helper class.
416 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/abstract-email-notification.php';
417 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/class-email-notification-util.php';
418
419 // Add backward compatibility.
420 require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/backward-compatibility.php';
421
422 /**
423 * Initialize functionality.
424 */
425 Give_Email_Notifications::get_instance()->load();
426