PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.7.2
GiveWP – Donation Plugin and Fundraising Platform v2.7.2
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 / class-notices.php
give / includes Last commit date
admin 5 years ago api 6 years ago database 6 years ago deprecated 6 years ago donors 5 years ago emails 6 years ago forms 6 years ago frontend 6 years ago gateways 6 years ago libraries 6 years ago payments 6 years ago actions.php 6 years ago ajax-functions.php 6 years ago class-give-async-process.php 6 years ago class-give-background-updater.php 6 years ago class-give-cache-setting.php 6 years ago class-give-cache.php 6 years ago class-give-cli-commands.php 6 years ago class-give-comment.php 6 years ago class-give-cron.php 6 years ago class-give-donate-form.php 6 years ago class-give-donor.php 6 years ago class-give-email-access.php 6 years ago class-give-license-handler.php 6 years ago class-give-logging.php 6 years ago class-give-readme-parser.php 6 years ago class-give-roles.php 6 years ago class-give-scripts.php 6 years ago class-give-session.php 6 years ago class-give-stats.php 6 years ago class-give-template-loader.php 6 years ago class-give-tooltips.php 6 years ago class-give-translation.php 6 years ago class-notices.php 6 years ago country-functions.php 6 years ago currencies-list.php 6 years ago currency-functions.php 6 years ago error-tracking.php 6 years ago filters.php 6 years ago formatting.php 6 years ago install.php 6 years ago login-register.php 6 years ago misc-functions.php 6 years ago plugin-compatibility.php 6 years ago post-types.php 6 years ago price-functions.php 6 years ago process-donation.php 6 years ago setting-functions.php 6 years ago shortcodes.php 6 years ago template-functions.php 6 years ago user-functions.php 6 years ago
class-notices.php
758 lines
1 <?php
2 /**
3 * Admin Notices Class.
4 *
5 * @package Give
6 * @subpackage Admin/Notices
7 * @copyright Copyright (c) 2016, GiveWP
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 1.8.9
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Give_Notices Class
19 *
20 * @since 1.8.9
21 */
22 class Give_Notices {
23 /**
24 * List of notices
25 *
26 * @var array
27 * @since 1.8.9
28 * @access private
29 */
30 private static $notices = array();
31
32
33 /**
34 * Flag to check if any notice auto dismissible among all notices
35 *
36 * @since 1.8.9
37 * @access private
38 * @var bool
39 */
40 private static $has_auto_dismissible_notice = false;
41
42 /**
43 * Flag to check if any notice has dismiss interval among all notices
44 *
45 * @since 1.8.9
46 * @access private
47 * @var bool
48 */
49 private static $has_dismiss_interval_notice = false;
50
51 /**
52 * Get things started.
53 *
54 * @since 1.8.9
55 */
56 public function __construct() {
57 add_action( 'admin_notices', array( $this, 'render_admin_notices' ), 999 );
58 add_action( 'admin_footer', array( $this, '__reveal_notices' ) );
59 add_action( 'give_dismiss_notices', array( $this, 'dismiss_notices' ) );
60
61 add_action( 'give_frontend_notices', array( $this, 'render_frontend_notices' ), 999 );
62 add_action( 'give_pre_form_output', array( $this, 'render_frontend_form_notices' ), 10, 1 );
63 add_action( 'give_ajax_donation_errors', array( $this, 'render_frontend_notices' ) );
64
65 /**
66 * Backward compatibility for deprecated params.
67 *
68 * @since 1.8.14
69 */
70 add_filter( 'give_register_notice_args', array( $this, 'bc_deprecated_params' ) );
71 add_filter( 'give_frontend_errors_args', array( $this, 'bc_deprecated_params' ) );
72 add_filter( 'give_frontend_notice_args', array( $this, 'bc_deprecated_params' ) );
73 }
74
75 /**
76 * Add backward compatibility to deprecated params.
77 *
78 * @since 1.8.14
79 * @access public
80 *
81 * @param array $args Array of notice params
82 *
83 * @return array
84 */
85 public function bc_deprecated_params( $args ) {
86 /**
87 * Param: auto_dismissible
88 * deprecated in 1.8.14
89 *
90 * Check if auto_dismissible is set and it true then unset and change dismissible parameter value to auto
91 */
92 if ( isset( $args['auto_dismissible'] ) ) {
93 if ( ! empty( $args['auto_dismissible'] ) ) {
94 $args['dismissible'] = 'auto';
95 }
96 // unset auto_dismissible as it has been deprecated.
97 unset( $args['auto_dismissible'] );
98 }
99
100 return $args;
101 }
102
103 /**
104 * Register notice.
105 *
106 * @since 1.8.9
107 * @access public
108 *
109 * @param $notice_args
110 *
111 * @return bool
112 */
113 public function register_notice( $notice_args ) {
114 // Bailout.
115 if ( empty( $notice_args['id'] ) || array_key_exists( $notice_args['id'], self::$notices ) ) {
116 return false;
117 }
118
119 $notice_args = wp_parse_args(
120 $notice_args,
121 array(
122 'id' => '',
123 'description' => '',
124
125 /*
126 * Add custom notice html
127 * Note: This param has more priority then description, so if you have both param then this one will be use
128 * for generating notice html. Most of feature of notice attach to core generated html, so if you set
129 * custom html then please add required classes and data attribute which help to apply feature on notice.
130 *
131 * @since 1.8.16
132 */
133 'description_html' => '',
134
135 /*
136 * Add New Parameter and remove the auto_dismissible parameter.
137 * Value: auto/true/false
138 *
139 * @since 1.8.14
140 */
141 'dismissible' => true,
142
143 // Value: error/warning/success/info/updated
144 'type' => 'error',
145
146 // Value: null/user/all
147 'dismissible_type' => null,
148
149 // Value: shortly/permanent/null/custom
150 'dismiss_interval' => null,
151
152 // Only set it when custom is defined.
153 'dismiss_interval_time' => null,
154
155 )
156 );
157
158 /**
159 * Filter to modify Notice args before it get add
160 *
161 * @since 1.8.14
162 */
163 $notice_args = apply_filters( 'give_register_notice_args', $notice_args );
164
165 // Set extra dismiss links if any.
166 if ( false !== strpos( $notice_args['description'], 'data-dismiss-interval' ) ) {
167
168 preg_match_all( '/data-([^"]*)="([^"]*)"/', $notice_args['description'], $extra_notice_dismiss_link );
169
170 if ( ! empty( $extra_notice_dismiss_link ) ) {
171 $extra_notice_dismiss_links = array_chunk( current( $extra_notice_dismiss_link ), 3 );
172 foreach ( $extra_notice_dismiss_links as $extra_notice_dismiss_link ) {
173 // Create array og key ==> value by parsing query string created after renaming data attributes.
174 $data_attribute_query_str = str_replace(
175 array( 'data-', '-', '"' ),
176 array(
177 '',
178 '_',
179 '',
180 ),
181 implode( '&', $extra_notice_dismiss_link )
182 );
183
184 $notice_args['extra_links'][] = wp_parse_args( $data_attribute_query_str );
185 }
186 }
187 }
188
189 self::$notices[ $notice_args['id'] ] = $notice_args;
190
191 // Auto set show param if not already set.
192 if ( ! isset( self::$notices[ $notice_args['id'] ]['show'] ) ) {
193 self::$notices[ $notice_args['id'] ]['show'] = $this->is_notice_dismissed( $notice_args ) ? false : true;
194 }
195
196 // Auto set time interval for shortly.
197 if ( 'shortly' === self::$notices[ $notice_args['id'] ]['dismiss_interval'] ) {
198 self::$notices[ $notice_args['id'] ]['dismiss_interval_time'] = DAY_IN_SECONDS;
199 }
200
201 return true;
202 }
203
204 /**
205 * Display notice.
206 *
207 * @since 1.8.9
208 */
209 public function render_admin_notices() {
210 /* @var WP_Screen $wp_screen */
211 $wp_screen = get_current_screen();
212
213 // Bailout.
214 if ( empty( self::$notices ) ) {
215 return;
216 }
217
218 // Do not render notices on Gutenberg editor page.
219 if (
220 method_exists( $wp_screen, 'is_block_editor' )
221 && $wp_screen->is_block_editor()
222 ) {
223 return;
224 }
225
226 // Do not render notices on these pages as well.
227 // We don't want to annoy admins with notices on important screens like WP or GiveWP updates, etc.
228 if (
229 'update-core' === $wp_screen->id
230 || 'give_forms_page_give-addons' === $wp_screen->id
231 || 'give_forms_page_give-updates' === $wp_screen->id
232 ) {
233 return;
234 }
235
236 $output = '';
237
238 foreach ( self::$notices as $notice_id => $notice ) {
239 // Check flag set to true to show notice.
240 if ( ! $notice['show'] ) {
241 continue;
242 }
243
244 // Render custom html.
245 if ( ! empty( $notice['description_html'] ) ) {
246 $output .= "{$notice['description_html']} \n";
247 continue;
248 }
249
250 // Check if notice dismissible or not.
251 if ( ! self::$has_auto_dismissible_notice ) {
252 self::$has_auto_dismissible_notice = ( 'auto' === $notice['dismissible'] );
253 }
254
255 // Check if notice dismissible or not.
256 if ( ! self::$has_dismiss_interval_notice ) {
257 self::$has_dismiss_interval_notice = $notice['dismiss_interval'];
258 }
259
260 $css_id = ( false === strpos( $notice['id'], 'give' ) ? "give-{$notice['id']}" : $notice['id'] );
261
262 $css_class = 'give-notice notice ' . ( empty( $notice['dismissible'] ) ? 'non' : 'is' ) . "-dismissible {$notice['type']} notice-{$notice['type']}";
263 $output .= sprintf(
264 '<div id="%1$s" class="%2$s" data-dismissible="%3$s" data-dismissible-type="%4$s" data-dismiss-interval="%5$s" data-notice-id="%6$s" data-security="%7$s" data-dismiss-interval-time="%8$s" style="display: none">' . " \n",
265 $css_id,
266 $css_class,
267 give_clean( $notice['dismissible'] ),
268 $notice['dismissible_type'],
269 $notice['dismiss_interval'],
270 $notice['id'],
271 empty( $notice['dismissible_type'] ) ? '' : wp_create_nonce( "give_edit_{$notice_id}_notice" ),
272 $notice['dismiss_interval_time']
273 );
274
275 $output .= ( 0 === strpos( $notice['description'], '<div' ) || 0 === strpos( $notice['description'], '<p' ) ? $notice['description'] : "<p>{$notice['description']}</p>" );
276 $output .= "</div> \n";
277 }
278
279 echo $output;
280
281 $this->print_js();
282 }
283
284
285 /**
286 * Render give frontend notices.
287 *
288 * @since 1.8.9
289 * @access public
290 *
291 * @param int $form_id
292 */
293 public function render_frontend_notices( $form_id = 0 ) {
294 $errors = give_get_errors();
295
296 $request_form_id = isset( $_REQUEST['form-id'] ) ? absint( $_REQUEST['form-id'] ) : 0;
297
298 // Sanity checks first: Ensure that gateway returned errors display on the appropriate form.
299 if ( ! isset( $_POST['give_ajax'] ) && $request_form_id !== $form_id ) {
300 return;
301 }
302
303 if ( $errors ) {
304 self::print_frontend_errors( $errors );
305
306 give_clear_errors();
307 }
308 }
309
310 /**
311 * Renders notices for different actions depending on
312 * the type of form display option.
313 *
314 * @since 2.2
315 * @access public
316 *
317 * @param int $form_id Form ID.
318 *
319 * @return void
320 */
321 public function render_frontend_form_notices( $form_id ) {
322 $display_option = give_get_meta( $form_id, '_give_payment_display', true );
323
324 if ( 'modal' === $display_option ) {
325 add_action( 'give_payment_mode_top', array( $this, 'render_frontend_notices' ) );
326 } else {
327 add_action( 'give_pre_form', array( $this, 'render_frontend_notices' ), 11 );
328 }
329 }
330
331 /**
332 * Print notice js.
333 *
334 * @since 1.8.9
335 * @access private
336 */
337 private function print_js() {
338 if ( self::$has_auto_dismissible_notice ) :
339 ?>
340 <script>
341 jQuery(document).ready(function () {
342 // auto hide setting message in 5 seconds.
343 window.setTimeout(
344 function () {
345 jQuery('.give-notice[data-dismissible="auto"]').slideUp();
346 },
347 5000
348 );
349 })
350 </script>
351 <?php
352 endif;
353
354 if ( self::$has_dismiss_interval_notice ) :
355 ?>
356 <script>
357 jQuery(document).ready(function () {
358 var $body = jQuery('body');
359
360 $body.on('click', '.give_dismiss_notice', function (e) {
361 var $parent = jQuery(this).parents('.give-notice'),
362 custom_notice_data = {
363 'dismissible_type': jQuery(this).data('dismissible-type'),
364 'dismiss_interval': jQuery(this).data('dismiss-interval'),
365 'dismiss_interval_time': jQuery(this).data('dismiss-interval-time')
366 };
367
368 $parent.find('button.notice-dismiss').trigger('click', [custom_notice_data]);
369 return false;
370 });
371
372 $body.on('click', 'button.notice-dismiss', function (e, custom_notice_data) {
373 var $parent = jQuery(this).parents('.give-notice'),
374 custom_notice_data = custom_notice_data || {};
375
376 e.preventDefault();
377
378 var data = {
379 'give-action': 'dismiss_notices',
380 'notice_id': $parent.data('notice-id'),
381 'dismissible_type': $parent.data('dismissible-type'),
382 'dismiss_interval': $parent.data('dismiss-interval'),
383 'dismiss_interval_time': $parent.data('dismiss-interval-time'),
384 '_wpnonce': $parent.data('security')
385 };
386
387 if (Object.keys(custom_notice_data).length) {
388 jQuery.extend(data, custom_notice_data);
389 }
390
391 // Bailout.
392 if (
393 !data.dismiss_interval ||
394 !data.dismissible_type
395 ) {
396 return false;
397 }
398
399 jQuery.post(
400 '<?php echo admin_url(); ?>admin-ajax.php',
401 data,
402 function (response) {
403
404 })
405 })
406 });
407 </script>
408 <?php
409 endif;
410 }
411
412 /**
413 * Show notices
414 * Note: only for internal use
415 *
416 * @since 2.3.0
417 */
418 public function __reveal_notices() {
419 ?>
420 <script>
421 jQuery(document).ready(function($){
422 // Fix notice appearance issue.
423 window.setTimeout(
424 function(){
425 var give_notices = $('.give-notice');
426
427 if( give_notices.length ) {
428 give_notices.slideDown();
429 }
430 },
431 1000
432 );
433 });
434 </script>
435 <?php
436 }
437
438
439 /**
440 * Hide notice.
441 *
442 * @since 1.8.9
443 * @access public
444 */
445 public function dismiss_notices() {
446 $_post = give_clean( $_POST );
447 $notice_id = esc_attr( $_post['notice_id'] );
448
449 // Bailout.
450 if (
451 empty( $notice_id ) ||
452 empty( $_post['dismissible_type'] ) ||
453 empty( $_post['dismiss_interval'] ) ||
454 ! check_ajax_referer( "give_edit_{$notice_id}_notice", '_wpnonce' )
455 ) {
456 wp_send_json_error();
457 }
458
459 $notice_key = Give()->notices->get_notice_key( $notice_id, $_post['dismiss_interval'] );
460 if ( 'user' === $_post['dismissible_type'] ) {
461 $current_user = wp_get_current_user();
462 $notice_key = Give()->notices->get_notice_key( $notice_id, $_post['dismiss_interval'], $current_user->ID );
463 }
464
465 $notice_dismiss_time = ! empty( $_post['dismiss_interval_time'] ) ? $_post['dismiss_interval_time'] : null;
466
467 // Save option to hide notice.
468 Give_Cache::set( $notice_key, true, $notice_dismiss_time, true );
469
470 /**
471 * Fire the action when notice dismissed
472 *
473 * @since 2.2.0
474 */
475 do_action( 'give_notice_dismissed', $_post );
476
477 wp_send_json_success();
478 }
479
480
481 /**
482 * Get notice key.
483 *
484 * @since 1.8.9
485 * @access public
486 *
487 * @param string $notice_id
488 * @param string $dismiss_interval
489 * @param int $user_id
490 *
491 * @return string
492 */
493 public function get_notice_key( $notice_id, $dismiss_interval = null, $user_id = 0 ) {
494 $notice_key = "_give_notice_{$notice_id}";
495
496 if ( ! empty( $dismiss_interval ) ) {
497 $notice_key .= "_{$dismiss_interval}";
498 }
499
500 if ( $user_id ) {
501 $notice_key .= "_{$user_id}";
502 }
503
504 $notice_key = sanitize_key( $notice_key );
505
506 return $notice_key;
507 }
508
509
510 /**
511 * Get notice dismiss link.
512 *
513 * @param $notice_args
514 *
515 * @return string
516 */
517 public function get_dismiss_link( $notice_args ) {
518 $notice_args = wp_parse_args(
519 $notice_args,
520 array(
521 'title' => __( 'Click here', 'give' ),
522 'dismissible_type' => '',
523 'dismiss_interval' => '',
524 'dismiss_interval_time' => null,
525 )
526 );
527
528 return sprintf(
529 '<a href="#" class="give_dismiss_notice" data-dismissible-type="%1$s" data-dismiss-interval="%2$s" data-dismiss-interval-time="%3$s">%4$s</a>',
530 $notice_args['dismissible_type'],
531 $notice_args['dismiss_interval'],
532 $notice_args['dismiss_interval_time'],
533 $notice_args['title']
534 );
535 }
536
537
538 /**
539 * Check if notice dismissed or not
540 *
541 * @since 1.8.9
542 * @access public
543 *
544 * @param array $notice
545 *
546 * @return bool|null
547 */
548 public function is_notice_dismissed( $notice ) {
549 $notice_key = $this->get_notice_key( $notice['id'], $notice['dismiss_interval'] );
550 $is_notice_dismissed = false;
551
552 if ( 'user' === $notice['dismissible_type'] ) {
553 $current_user = wp_get_current_user();
554 $notice_key = Give()->notices->get_notice_key( $notice['id'], $notice['dismiss_interval'], $current_user->ID );
555 }
556
557 $notice_data = Give_Cache::get( $notice_key, true );
558
559 // Find notice dismiss link status if notice has extra dismissible links.
560 if ( ( empty( $notice_data ) || is_wp_error( $notice_data ) ) && ! empty( $notice['extra_links'] ) ) {
561
562 foreach ( $notice['extra_links'] as $extra_link ) {
563 $new_notice_data = wp_parse_args( $extra_link, $notice );
564 unset( $new_notice_data['extra_links'] );
565
566 if ( $is_notice_dismissed = $this->is_notice_dismissed( $new_notice_data ) ) {
567 return $is_notice_dismissed;
568 }
569 }
570 }
571
572 $is_notice_dismissed = ! empty( $notice_data ) && ! is_wp_error( $notice_data );
573
574 return $is_notice_dismissed;
575 }
576
577
578 /**
579 * Print frontend errors.
580 *
581 * @since 1.8.9
582 * @access public
583 *
584 * @param array $errors
585 */
586 public static function print_frontend_errors( $errors ) {
587 // Bailout.
588 if ( ! $errors ) {
589 return;
590 }
591
592 /**
593 * Change auto_dismissible to dismissible and set the value to true
594 *
595 * @since 1.8.14
596 */
597 $default_notice_args = array(
598 'dismissible' => true,
599 'dismiss_interval' => 5000,
600 );
601
602 // Note: we will remove give_errors class in future.
603 $classes = apply_filters( 'give_error_class', array( 'give_notices', 'give_errors' ) );
604
605 echo sprintf( '<div class="%s">', implode( ' ', $classes ) );
606
607 // Loop error codes and display errors.
608 foreach ( $errors as $error_id => $error ) {
609 // Backward compatibility v<1.8.11
610 if ( is_string( $error ) ) {
611 $error = array(
612 'message' => $error,
613 'notice_args' => array(),
614 );
615 }
616
617 $notice_args = wp_parse_args( $error['notice_args'], $default_notice_args );
618
619 /**
620 * Filter to modify Frontend Errors args before errors is display.
621 *
622 * @since 1.8.14
623 */
624 $notice_args = apply_filters( 'give_frontend_errors_args', $notice_args );
625
626 echo sprintf(
627 '<div class="give_error give_notice" id="give_error_%1$s" data-dismissible="%2$s" data-dismiss-interval="%3$d">
628 <p><strong>%4$s</strong>: %5$s</p>
629 </div>',
630 $error_id,
631 give_clean( $notice_args['dismissible'] ),
632 absint( $notice_args['dismiss_interval'] ),
633 esc_html__( 'Error', 'give' ),
634 $error['message']
635 );
636 }
637
638 echo '</div>';
639 }
640
641 /**
642 * Print frontend notice.
643 * Notice: notice type can be success/error/warning
644 *
645 * @since 1.8.9
646 * @access public
647 *
648 * @param string $message
649 * @param bool $echo
650 * @param string $notice_type
651 * @param array $notice_args
652 *
653 * @return string
654 */
655 public static function print_frontend_notice( $message, $echo = true, $notice_type = 'warning', $notice_args = array() ) {
656 if ( empty( $message ) ) {
657 return '';
658 }
659
660 /**
661 * Change auto_dismissible to dismissible and set the value to true
662 *
663 * @since 1.8.14
664 */
665 $default_notice_args = array(
666 'dismissible' => false,
667 'dismiss_type' => 'auto',
668 'dismiss_interval' => 5000,
669 );
670
671 $notice_args = wp_parse_args( $notice_args, $default_notice_args );
672
673 // Notice dismissible must be true for dismiss type.
674 $notice_args['dismiss_type'] = ! $notice_args['dismissible'] ? '' : $notice_args['dismiss_type'];
675
676 /**
677 * Filter to modify Frontend notice args before notices is display.
678 *
679 * @since 1.8.14
680 */
681 $notice_args = apply_filters( 'give_frontend_notice_args', $notice_args );
682
683 $close_icon = 'manual' === $notice_args['dismiss_type'] ?
684 sprintf(
685 '<img class="notice-dismiss give-notice-close" src="%s" />',
686 esc_url( GIVE_PLUGIN_URL . 'assets/dist/images/close.svg' )
687 ) :
688 '';
689
690 // Note: we will remove give_errors class in future.
691 $error = sprintf(
692 '<div class="give_notices give_errors" id="give_error_%1$s">
693 <p class="give_notice give_%1$s" data-dismissible="%2$s" data-dismiss-interval="%3$d" data-dismiss-type="%4$s">
694 %5$s
695 </p>
696 %6$s
697 </div>',
698 $notice_type,
699 give_clean( $notice_args['dismissible'] ),
700 absint( $notice_args['dismiss_interval'] ),
701 give_clean( $notice_args['dismiss_type'] ),
702 $message,
703 $close_icon
704 );
705
706 if ( ! $echo ) {
707 return $error;
708 }
709
710 echo $error;
711 }
712
713 /**
714 * Print Inline Notice.
715 * Note: dismissible feature will note work if notice will add to dom by javascript after document load.
716 *
717 * @param array $notice_args An array of notice arguments.
718 *
719 * @todo Implement render_admin_notices function within this function in future.
720 *
721 * @access public
722 * @since 1.8.17
723 *
724 * @return string
725 */
726 public function print_admin_notices( $notice_args = array() ) {
727 // Bailout.
728 if ( empty( $notice_args['description'] ) ) {
729 return '';
730 }
731
732 $defaults = array(
733 'id' => '',
734 'echo' => true,
735 'notice_type' => 'warning',
736 'dismissible' => true,
737 );
738 $notice_args = wp_parse_args( $notice_args, $defaults );
739
740 $output = '';
741 $css_id = ! empty( $notice_args['id'] ) ? $notice_args['id'] : uniqid( 'give-inline-notice-' );
742 $css_class = "notice-{$notice_args['notice_type']} give-notice notice inline";
743 $css_class .= ( $notice_args['dismissible'] ) ? ' is-dismissible' : '';
744 $output .= sprintf(
745 '<div id="%1$s" class="%2$s"><p>%3$s</p></div>',
746 $css_id,
747 $css_class,
748 $notice_args['description']
749 );
750
751 if ( ! $notice_args['echo'] ) {
752 return $output;
753 }
754
755 echo $output;
756 }
757 }
758