PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / 5.5.7
WPML Multilingual & Multicurrency for WooCommerce v5.5.7
5.5.7 5.3.8 5.3.9 5.4.3 5.4.4 5.4.5 5.5.1 5.5.1.1 5.5.2.2 5.5.2.3 5.5.3 5.5.3.1 5.5.4 5.5.5 5.5.6 trunk 0.9 1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.2 2.3 2.3.1 2.3.2 3.0 3.0.1 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.10 3.6.11 3.6.2 3.6.3 3.6.4 3.6.5 3.6.5.1 3.6.6 3.6.7 3.6.8 3.6.9 3.7 3.7.1 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.15 3.7.16 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.9.0 3.9.1 3.9.1.1 3.9.2 3.9.3 3.9.4 3.9.5 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.10.4 4.11.2 4.11.3.2 4.11.5 4.11.6 4.12.1 4.12.4 4.12.5 4.12.6 4.2.0 4.2.0.1 4.2.1 4.2.1.1 4.2.10 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.7.1 4.2.8 4.2.8.1 4.2.9 4.3.0 4.3.1 4.3.2 4.3.2.1 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0 4.4.1 4.4.2 4.4.2.1 4.5.0 4.6.0 4.6.1 4.6.2 4.6.2.1 4.6.3 4.6.5 4.6.6 4.6.7 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.9.0 4.9.1 5.0.1 5.0.2 5.1.1 5.1.2 5.1.3 5.2.0 5.2.1 5.3.2 5.3.3.1 5.3.4 5.3.5 5.3.6 5.3.7
woocommerce-multilingual / addons / wpml-dependencies / lib / inc / icl-admin-notifier.php
woocommerce-multilingual / addons / wpml-dependencies / lib / inc Last commit date
icl-admin-notifier.php 4 weeks ago
icl-admin-notifier.php
708 lines
1 <?php
2
3
4 add_action( 'init', array( 'ICL_AdminNotifier', 'init' ) );
5
6 if ( ! class_exists( 'ICL_AdminNotifier' ) ) {
7 class ICL_AdminNotifier {
8 public static function init() {
9 if ( is_admin() ) {
10 add_action( 'wp_ajax_icl-hide-admin-message', array( __CLASS__, 'hide_message' ) );
11 add_action( 'wp_ajax_icl-show-admin-message', array( __CLASS__, 'show_message' ) );
12 if ( ! defined( 'DOING_AJAX' ) ) {
13 add_action( 'admin_enqueue_scripts', array( __CLASS__, 'add_script' ) );
14
15 add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ) );
16 }
17
18 add_filter( 'troubleshooting_js_data', array( __CLASS__, 'troubleshooting_js_data' ) );
19 add_action( 'wpml_troubleshooting_cleanup', array( __CLASS__, 'troubleshooting' ) );
20 add_action( 'wp_ajax_icl_restore_notifications', array( __CLASS__, 'restore_notifications' ) );
21 add_action( 'wp_ajax_icl_remove_notifications', array( __CLASS__, 'remove_notifications' ) );
22 }
23 }
24
25 public static function add_script() {
26 wp_enqueue_script( 'icl-admin-notifier', WCML_WPML_DEPENDENCY_URL . '/res/js/icl-admin-notifier.js', array( 'jquery' ), '4.5.0' );
27 }
28
29 public static function add_instant_message( $message, $type = '' ) {
30 $messages = self::get_messages();
31 $messages['instant_messages'][] = array(
32 'text' => $message,
33 'type' => $type,
34 );
35 self::save_messages( $messages );
36 }
37
38 public static function get_message( $message_id ) {
39 $messages = self::get_messages();
40
41 return isset( $messages['messages'][ $message_id ] ) ? $messages['messages'][ $message_id ] : false;
42 }
43
44 public static function message_id_exists( $message_id ) {
45 $message = self::get_message( $message_id );
46
47 return $message !== false;
48 }
49
50 private static function get_messages() {
51 $messages = get_option( 'icl_admin_messages' );
52 if ( ! ( isset( $messages ) && $messages != false ) ) {
53 return array(
54 'messages' => array(),
55 'instant_messages' => array(),
56 );
57 }
58 if ( ! isset( $messages['messages'] ) || ! isset( $messages['instant_messages'] ) ) {
59 $messages = array(
60 'messages' => array(),
61 'instant_messages' => array(),
62 );
63 }
64
65 return (array) $messages;
66 }
67
68 private static function save_messages( $messages ) {
69 if ( isset( $messages ) ) {
70 update_option( 'icl_admin_messages', (array) $messages );
71 }
72 self::get_messages();
73 }
74
75 public static function add_message( $args ) {
76 $defaults = array(
77 'type' => '',
78 'classes' => array(),
79 'hide' => false,
80 'hide_per_user' => false,
81 'dismiss' => false,
82 'dismiss_per_user' => false,
83 'fallback_text' => false,
84 'fallback_type' => false,
85 'fallback_classes' => array(),
86 'group' => false,
87 'admin_notice' => false,
88 'hidden' => false,
89 'dismissed' => false,
90 'limit_to_page' => false,
91 'show_once' => false,
92 'capability' => '',
93 );
94
95 $args = self::sanitize_message_args( $args );
96
97 $args = array_merge( $defaults, $args );
98
99 $id = $args['id'];
100
101 if ( self::message_id_exists( $id ) ) {
102 $temp_msg = self::get_message( $id );
103
104 if ( $temp_msg ) {
105 $current_user_id = get_current_user_id();
106 $message_user_data = isset( $temp_msg['users'][ $current_user_id ] ) ? $temp_msg['users'][ $current_user_id ] : false;
107
108 if ( self::is_user_dismissed( $temp_msg ) || self::is_globally_dismissed( $temp_msg ) || self::is_globally_hidden( $temp_msg ) ) {
109 return;
110 }
111
112 if ( isset( $message_user_data['hidden'] ) ) {
113 $args['hidden'] = $message_user_data['hidden'] ? false : $args['hidden'];
114 }
115 }
116 }
117
118 $id = $id ? $id : md5( wp_json_encode( $args ) );
119 $messages = self::get_messages();
120
121 $message = array(
122 'id' => $id,
123 'text' => $args['text'],
124 'type' => $args['type'],
125 'classes' => $args['classes'],
126 'hide' => $args['hide'],
127 'hide_per_user' => $args['hide_per_user'],
128 'dismiss' => $args['dismiss'],
129 'dismiss_per_user' => $args['dismiss_per_user'],
130 'fallback_text' => $args['fallback_text'],
131 'fallback_type' => $args['fallback_type'],
132 'fallback_classes' => $args['classes'],
133 'group' => $args['group'],
134 'admin_notice' => $args['admin_notice'],
135 'hidden' => false,
136 'dismissed' => false,
137 'limit_to_page' => $args['limit_to_page'],
138 'show_once' => $args['show_once'],
139 'capability' => $args['capability'],
140 );
141
142 $message_md5 = md5( wp_json_encode( $message ) );
143
144 if ( isset( $messages['messages'][ $id ] ) ) {
145 $existing_message_md5 = md5( wp_json_encode( $messages['messages'][ $id ] ) );
146 if ( $message_md5 != $existing_message_md5 ) {
147 unset( $messages['messages'][ $id ] );
148 }
149 }
150
151 if ( ! isset( $messages['messages'][ $id ] ) ) {
152 $messages['messages'][ $id ] = $message;
153 self::save_messages( $messages );
154 }
155 }
156
157 public static function is_user_dismissed( $message_data ) {
158 $current_user_id = get_current_user_id();
159 $message_user_data = isset( $message_data['users'][ $current_user_id ] ) ? $message_data['users'][ $current_user_id ] : false;
160
161 return ! empty( $message_data['dismiss_per_user'] ) && ! empty( $message_user_data['dismissed'] );
162 }
163
164 public static function is_globally_dismissed( $message_data ) {
165 return ! empty( $message_data['dismiss'] ) && $message_data['dismissed'];
166 }
167
168 public static function is_globally_hidden( $message_data ) {
169 return ! empty( $message_data['hide'] ) && $message_data['hidden'];
170 }
171
172 public static function hide_message() {
173
174 $message_id = self::get_message_id();
175 $dismiss = isset( $_POST['dismiss'] ) ? $_POST['dismiss'] : false;
176 if ( ! self::message_id_exists( $message_id ) ) {
177 exit;
178 }
179
180 self::set_message_display( $message_id, false, 'hide', 'hidden', 'hide_per_user' );
181
182 if ( $dismiss ) {
183 self::set_message_display( $message_id, false, 'dismiss', 'dismissed', 'dismiss_per_user' );
184 } else {
185 $messages = self::get_messages();
186 $message = $messages['messages'][ $message_id ];
187 if ( $message && isset( $message['fallback_text'] ) && $message['fallback_text'] ) {
188 echo self::display_message( $message_id, $message['fallback_text'], $message['fallback_type'], $message['fallback_classes'], false, false, true, true );
189 }
190 }
191 exit;
192 }
193
194 public static function get_message_id() {
195 $message_id = '';
196 if ( isset( $_POST['icl-admin-message-id'] ) ) {
197 $message_id = filter_var( $_POST['icl-admin-message-id'], FILTER_SANITIZE_FULL_SPECIAL_CHARS );
198 }
199 $message_id = $message_id ? $message_id : '';
200 $message_id = preg_replace( '/^icl-id-/', '', $message_id );
201
202 return $message_id;
203 }
204
205 public static function show_message() {
206 $message_id = self::get_message_id();
207 if ( ! self::message_id_exists( $message_id ) ) {
208 exit;
209 }
210
211 self::set_message_display( $message_id, true, 'hide', 'hidden', 'hide_per_user' );
212
213 $messages = self::get_messages();
214 $message = $messages['messages'][ $message_id ];
215 if ( $message ) {
216 echo self::display_message( $message_id, $message['text'], $message['type'], $message['classes'], $message['hide'] || $message['hide_per_user'], $message['dismiss'] || $message['dismiss_per_user'], true, true );
217 }
218 exit;
219 }
220
221 public static function engage_message() {
222 $message_id = self::get_message_id();
223 if ( ! self::message_id_exists( $message_id ) ) {
224 exit;
225 }
226
227 self::set_message_display( $message_id, true, 'dismiss', 'dismissed', 'dismiss_per_user' );
228 }
229
230 private static function set_message_display( $message_id, $show, $action, $action_past, $action_user ) {
231 if ( $message_id === null ) {
232 return;
233 }
234
235 $messages = self::get_messages();
236
237 if ( ! isset( $messages['messages'][ $message_id ] ) ) {
238 return;
239 }
240 $message = $messages['messages'][ $message_id ];
241 $current_user_id = get_current_user_id();
242 if ( $message[ $action_user ] && $current_user_id ) {
243 $message['users'][ $current_user_id ][ $action_past ] = ! $show;
244 } elseif ( $message[ $action ] ) {
245 $message[ $action_past ] = ! $show;
246 }
247 $messages['messages'][ $message_id ] = $message;
248 self::save_messages( $messages );
249 }
250
251 public static function remove_message( $message_id ) {
252 if ( ! $message_id ) {
253 return false;
254 }
255
256 $messages = self::get_messages();
257
258 if ( ! isset( $messages['messages'][ $message_id ] ) ) {
259 return false;
260 }
261
262 unset( $messages['messages'][ $message_id ] );
263
264 self::save_messages( $messages );
265
266 return false;
267 }
268
269 public static function remove_message_group( $message_group ) {
270 if ( ! $message_group ) {
271 return;
272 }
273
274 $all_messages = self::get_messages();
275
276 if ( ! isset( $all_messages['messages'] ) ) {
277 return;
278 }
279
280 $messages = $all_messages['messages'];
281
282 $ids_to_remove = array();
283 foreach ( $messages as $id => $message_data ) {
284 if ( isset( $message_data['group'] ) && $message_data['group'] == $message_group ) {
285 $ids_to_remove[] = $id;
286 }
287 }
288
289 foreach ( $ids_to_remove as $id_to_remove ) {
290 self::remove_message( $id_to_remove );
291 }
292 }
293
294 public static function display_messages( $group = false ) {
295 if ( is_admin() ) {
296 $messages = self::get_messages();
297
298 foreach ( $messages['messages'] as $id => $msg ) {
299 if ( ! $group || ( isset( $msg['group'] ) && $msg['group'] == $group ) ) {
300 if ( isset( $msg['admin_notice'] ) && ! $msg['admin_notice'] ) {
301 if ( ! isset( $msg['capability'] ) || ( $msg['capability'] == '' ) || current_user_can( $msg['capability'] ) ) {
302 if ( array_key_exists( 'limit_to_page', $msg ) ) {
303 foreach ( $msg['limit_to_page'] as $page ) {
304 if ( array_key_exists( 'page', $_GET ) && $_GET['page'] === $page ) {
305 self::display_message( $id, $msg['text'], $msg['type'], $msg['classes'], $msg['hide'] || $msg['hide_per_user'], $msg['dismiss'] || $msg['dismiss_per_user'], true );
306 }
307 }
308 } else {
309 self::display_message( $id, $msg['text'], $msg['type'], $msg['classes'], $msg['hide'] || $msg['hide_per_user'], $msg['dismiss'] || $msg['dismiss_per_user'], true );
310 }
311 }
312 }
313 }
314 }
315
316 foreach ( $messages['instant_messages'] as $msg ) {
317 self::display_instant_message( $msg['text'], $msg['type'] );
318 }
319 $messages['instant_messages'] = array();
320 self::save_messages( $messages );
321 }
322 }
323
324 public static function displayMessages( $group = false ) {
325 self::display_messages( $group );
326 }
327
328 public static function admin_notices() {
329 $messages = self::get_messages();
330 if ( isset( $messages['messages'] ) ) {
331 foreach ( $messages['messages'] as $id => $msg ) {
332
333 if ( isset( $msg['limit_to_page'] ) && $msg['limit_to_page'] ) {
334 if ( ! is_array( $msg['limit_to_page'] ) ) {
335 $msg['limit_to_page'] = (array) $msg['limit_to_page'];
336 }
337 if ( ! isset( $_REQUEST['page'] ) || ! in_array( $_REQUEST['page'], $msg['limit_to_page'] ) ) {
338 continue;
339 }
340 }
341
342 if ( $msg['admin_notice'] ) {
343 $current_user_id = get_current_user_id();
344 $display = true;
345 $display_fallback = false;
346
347 $message_user_data = isset( $msg['users'][ $current_user_id ] ) ? $msg['users'][ $current_user_id ] : false;
348
349 if ( $msg['dismiss_per_user'] && isset( $message_user_data['dismissed'] ) && $message_user_data['dismissed'] ) {
350 $display = false;
351 } elseif ( $msg['dismiss'] && isset( $msg['dismissed'] ) && $msg['dismissed'] ) {
352 $display = false;
353 }
354
355 if ( $display ) {
356 if ( $msg['hide_per_user'] && isset( $message_user_data['hidden'] ) && $message_user_data['hidden'] ) {
357 $display = false;
358 $display_fallback = $msg['fallback_text'];
359 } elseif ( $msg['hide'] && isset( $msg['hidden'] ) && $msg['hidden'] ) {
360 $display = false;
361 $display_fallback = $msg['fallback_text'];
362 }
363 }
364
365 $msg['classes'] = isset( $msg['classes'] ) ? $msg['classes'] : array();
366 $msg['fallback_classes'] = isset( $msg['fallback_classes'] ) ? $msg['fallback_classes'] : array();
367 if ( $display ) {
368 self::display_message( $id, $msg['text'], $msg['type'], $msg['classes'], $msg['hide'] || $msg['hide_per_user'], $msg['dismiss'] || $msg['dismiss_per_user'], true );
369 if ( $msg['show_once'] && ! $display_fallback ) {
370 self::remove_message( $msg['id'] );
371 }
372 } elseif ( $display_fallback ) {
373 self::display_message( $id, $msg['fallback_text'], $msg['fallback_type'], $msg['fallback_classes'], false, false, true );
374 if ( $msg['show_once'] ) {
375 self::remove_message( $msg['id'] );
376 }
377 }
378 }
379 }
380 }
381 }
382
383 private static function display_message( $id, $message, $type = '', $classes = array(), $hide = true, $dismiss = false, $admin_notice = false, $echo = false ) {
384 $result = '';
385 $temp_classes = array();
386 if ( strpos( $type, 'icl-admin-message' ) ) {
387 $type = str_replace( 'icl-admin-message-', '', $type );
388 }
389 if ( $admin_notice ) {
390 $temp_classes[] = 'icl-admin-message';
391 }
392 $temp_types = explode( ' ', $type );
393 $temp_types = array_unique( $temp_types );
394 foreach ( $temp_types as $temp_type ) {
395 if ( $admin_notice ) {
396 $temp_classes[] = 'icl-admin-message-' . $temp_type;
397 }
398 $temp_classes[] = $temp_type;
399 }
400
401 if ( $classes ) {
402 if ( ! is_array( $classes ) ) {
403 $classes = explode( ' ', $classes );
404 }
405 foreach ( $classes as $class ) {
406 $temp_classes[] = $class;
407 }
408 }
409 if ( $hide or $dismiss ) {
410 $temp_classes[] = 'otgs-is-dismissible';
411 }
412
413 $temp_classes = array_unique( $temp_classes );
414
415 $class = implode( ' ', $temp_classes );
416
417 $result .= '<div class="' . $class . '" id="icl-id-' . $id . '"';
418
419 if ( $hide ) {
420 $result .= ' data-hide-text="' . __( 'Hide', 'sitepress' ) . '" ';
421 }
422 $result .= '>';
423
424 $result .= '<p>' . self::sanitize_and_format_message( $message ) . '</p>';
425 if ( $hide ) {
426 $result .= ' <span class="icl-admin-message-hide notice-dismiss"><span class="screen-reader-text">' . __( 'Hide this notice.', 'sitepress' ) . '</span></span>';
427 }
428
429 if ( $dismiss ) {
430 $result .= ' <span class="icl-admin-message-dismiss notice-dismiss">';
431 $result .= '<span class="screen-reader-text"><input class="icl-admin-message-dismiss-check" type="checkbox" value="1" />';
432 $result .= __( 'Dismiss this notice.', 'sitepress' );
433 $result .= '</span></span>';
434 }
435
436 $result .= '</div>';
437
438 if ( ! $echo ) {
439 echo $result;
440 }
441
442 return $result;
443 }
444
445 public static function display_instant_message( $message, $type = 'information', $class = false, $return = false, $fadeout = false ) {
446 $classes = array();
447 if ( ! $class && $type ) {
448 $classes[] = $type;
449 }
450 $classes[] = 'instant-message';
451 $classes[] = 'message';
452 $classes[] = 'message-' . $type;
453
454 foreach ( $classes as $class ) {
455 $classes[] = 'icl-admin-' . $class;
456 }
457
458 if ( $fadeout ) {
459 $classes[] = 'js-icl-fadeout';
460 }
461
462 $classes = array_unique( $classes );
463
464 if ( in_array( 'error', $classes ) ) {
465 $key = array_search( 'error', $classes );
466 if ( $key !== false ) {
467 unset( $classes[ $key ] );
468 }
469 }
470
471 $result = '<div class="' . implode( ' ', $classes ) . '">';
472 $result .= self::sanitize_and_format_message( $message );
473 $result .= '</div>';
474
475 if ( ! $return ) {
476 echo $result;
477 }
478
479 return $result;
480 }
481
482 private static function sanitize_message_args( $args ) {
483 if ( isset( $args['msg'] ) ) {
484 $args['text'] = $args['msg'];
485 unset( $args['msg'] );
486 }
487
488 if ( isset( $args['fallback'] ) ) {
489 $args['fallback_message'] = $args['fallback'];
490 unset( $args['fallback'] );
491 }
492
493 if ( isset( $args['message_fallback'] ) ) {
494 $args['fallback_message'] = $args['message_fallback'];
495 unset( $args['message_fallback'] );
496 }
497
498 if ( isset( $args['type_fallback'] ) ) {
499 $args['fallback_type'] = $args['type_fallback'];
500 unset( $args['type_fallback'] );
501
502 return $args;
503 }
504
505 if ( ! isset( $args['classes'] ) ) {
506 $args['classes'] = array();
507 } elseif ( ! is_array( $args['classes'] ) ) {
508 $args['classes'] = (array) $args['classes'];
509 }
510
511 if ( ! isset( $args['limit_to_page'] ) ) {
512 $args['limit_to_page'] = array();
513 } elseif ( ! is_array( $args['limit_to_page'] ) ) {
514 $args['limit_to_page'] = (array) $args['limit_to_page'];
515 }
516
517 return $args;
518 }
519
520 static function troubleshooting_js_data( $data ) {
521 $data['nonce']['icl_restore_notifications'] = wp_create_nonce( 'icl_restore_notifications' );
522 $data['nonce']['icl_remove_notifications'] = wp_create_nonce( 'icl_remove_notifications' );
523
524 return $data;
525 }
526
527 static function has_hidden_messages() {
528 $messages = self::get_messages();
529 $no_hidden_messages = true;
530 foreach ( $messages as $group => $message_group ) {
531 foreach ( $message_group as $id => $msg ) {
532 if ( ( isset( $msg['hidden'] ) && $msg['hidden'] ) || ( isset( $msg['dismissed'] ) && $msg['dismissed'] ) ) {
533 $no_hidden_messages = false;
534 } else {
535 $current_user_id = get_current_user_id();
536 $message_user_data = isset( $msg['users'][ $current_user_id ] ) ? $msg['users'][ $current_user_id ] : false;
537 if ( $message_user_data && $msg['dismiss_per_user'] && isset( $message_user_data['dismissed'] ) && $message_user_data['dismissed'] ) {
538 $no_hidden_messages = false;
539 } elseif ( $message_user_data && $msg['dismiss'] && isset( $msg['dismissed'] ) && $msg['dismissed'] ) {
540 $no_hidden_messages = false;
541 }
542
543 if ( $no_hidden_messages ) {
544 if ( isset( $msg['hide_per_user'] ) && $msg['hide_per_user'] && isset( $message_user_data['hidden'] ) && $message_user_data['hidden'] ) {
545 $no_hidden_messages = ! $msg['fallback_text'];
546 } elseif ( $msg['hide'] && isset( $msg['hidden'] ) && $msg['hidden'] ) {
547 $no_hidden_messages = ! $msg['fallback_text'];
548 }
549 }
550 }
551
552 if ( ! $no_hidden_messages ) {
553 return true;
554 }
555 }
556 }
557
558 return false;
559 }
560
561 static function troubleshooting() {
562 ?>
563 <h4><?php _e( 'Messages and notifications', 'sitepress' ); ?></h4>
564 <?php
565 if ( self::has_hidden_messages() ) {
566
567 ?>
568 <p>
569 <input id="icl_restore_notifications" type="button" class="button-secondary" value="<?php echo __( 'Restore messages and notification', 'sitepress' ); ?>"/>
570 <br/>
571 <br/>
572 <input id="icl_restore_notifications_all_users" name="icl_restore_notifications_all_users" type="checkbox" value="1"/><label for="icl_restore_notifications_all_users"><?php echo __( 'Apply to all users', 'sitepress' ); ?></label>
573 <br/>
574 <br/>
575 <small style="margin-left:10px;"><?php echo __( 'Restore dismissed and hidden messages and notifications.', 'sitepress' ); ?></small>
576 </p>
577 <?php
578 }
579 ?>
580 <p>
581 <input id="icl_remove_notifications" type="button" class="button-secondary" value="<?php echo __( 'Remove all messages and notifications', 'sitepress' ); ?>"/>
582 <br/>
583 <small style="margin-left:10px;"><?php echo __( 'Remove all messages and notifications, for all users.', 'sitepress' ); ?></small>
584 </p>
585 <?php
586 }
587
588 static function remove_notifications() {
589 self::save_messages( array() );
590 echo wp_json_encode(
591 array(
592 'errors' => 0,
593 'message' => __( 'Done', 'sitepress' ),
594 'cont' => 0,
595 'reload' => 1,
596 )
597 );
598 die();
599 }
600
601 static function restore_notifications() {
602 $all_users = $_POST['all_users'];
603
604 $messages = self::get_messages();
605 $dirty = 0;
606 foreach ( $messages as $group => $message_group ) {
607 foreach ( $message_group as $id => $msg ) {
608 if ( $msg['hidden'] ) {
609 $msg['hidden'] = false;
610 $dirty ++;
611 }
612 if ( $msg['dismissed'] ) {
613 $msg['dismissed'] = false;
614 $dirty ++;
615 }
616
617 $current_user_id = get_current_user_id();
618 foreach ( $msg['users'] as $user_id => $message_user_data ) {
619 if ( $current_user_id == $user_id || $all_users ) {
620 if ( $message_user_data['hidden'] ) {
621 $message_user_data['hidden'] = false;
622 $dirty ++;
623 }
624 if ( $message_user_data['dismissed'] ) {
625 $message_user_data['dismissed'] = false;
626 $dirty ++;
627 }
628 }
629 $msg['users'][ $user_id ] = $message_user_data;
630 }
631
632 $message_group[ $id ] = $msg;
633 }
634 $messages[ $group ] = $message_group;
635 }
636
637 if ( $dirty ) {
638 self::save_messages( $messages );
639 }
640
641 echo wp_json_encode(
642 array(
643 'errors' => 0,
644 'message' => __( 'Done', 'sitepress' ),
645 'cont' => $dirty,
646 'reload' => 1,
647 )
648 );
649 die();
650 }
651
652
653 public static function removeMessage( $message_id ) {
654 return self::remove_message( $message_id );
655 }
656
657 public static function hideMessage() {
658 self::hide_message();
659 }
660
661 public static function addInstantMessage( $message, $type = '' ) {
662 self::add_instant_message( $message, $type );
663 }
664
665 public static function addScript() {
666 self::add_script();
667 }
668
669 public static function addMessage( $id, $msg, $type = '', $hide = true, $fallback_message = false, $fallback_type = false, $group = false, $admin_notice = false ) {
670 $args = array(
671 'id' => $id,
672 'msg' => $msg,
673 'type' => $type,
674 'hide' => $hide,
675 'message_fallback' => $fallback_message,
676 'fallback_type' => $fallback_type,
677 'group' => $group,
678 'admin_notice' => $admin_notice,
679 );
680
681 self::add_message( $args );
682 }
683
684 public static function displayInstantMessage( $message, $type = 'information', $class = false, $return = false ) {
685 return self::display_instant_message( $message, $type, $class, $return );
686 }
687
688 public static function sanitize_and_format_message( $message ) {
689 $backticks_pattern = '|`(.*)`|U';
690 preg_match_all( $backticks_pattern, $message, $matches );
691
692 $sanitized_message = $message;
693 if ( 2 === count( $matches ) ) {
694 $matches_to_sanitize = $matches[1];
695
696 foreach ( $matches_to_sanitize as &$match_to_sanitize ) {
697 $match_to_sanitize = '<pre>' . esc_html( $match_to_sanitize ) . '</pre>';
698 }
699 unset( $match_to_sanitize );
700
701 $sanitized_message = str_replace( $matches[0], $matches_to_sanitize, $sanitized_message );
702 }
703
704 return stripslashes( $sanitized_message );
705 }
706 }
707 }
708