/wp-content/plugins/sitepress-multilingual-cms/inc/icl-admin-notifier.php

https://gitlab.com/woxiprogrammers/infinia-wordpress · PHP · 740 lines · 526 code · 113 blank · 101 comment · 131 complexity · 6ad9a870bc911c7c9376b6eaede0a609 MD5 · raw file

  1. <?php
  2. /**
  3. * @package wpml-core
  4. */
  5. /**
  6. * Admin Notifier Class
  7. *
  8. * Manages Admin Notices
  9. *
  10. *
  11. */
  12. add_action ( 'init', array('ICL_AdminNotifier', 'init') );
  13. class ICL_AdminNotifier {
  14. public static function init() {
  15. if ( is_admin() ) {
  16. add_action( 'wp_ajax_icl-hide-admin-message', array( __CLASS__, 'hide_message' ) );
  17. add_action( 'wp_ajax_icl-show-admin-message', array( __CLASS__, 'show_message' ) );
  18. if ( ! defined( 'DOING_AJAX' ) ) {
  19. add_action( 'admin_enqueue_scripts', array( __CLASS__, 'add_script' ) );
  20. add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ) );
  21. }
  22. add_filter( 'troubleshooting_js_data', array( __CLASS__, 'troubleshooting_js_data' ) );
  23. add_action( 'wpml_troubleshooting_cleanup', array( __CLASS__, 'troubleshooting' ) );
  24. add_action( 'wp_ajax_icl_restore_notifications', array( __CLASS__, 'restore_notifications' ) );
  25. add_action( 'wp_ajax_icl_remove_notifications', array( __CLASS__, 'remove_notifications' ) );
  26. }
  27. }
  28. public static function add_script() {
  29. wp_enqueue_script( 'icl-admin-notifier', ICL_PLUGIN_URL . '/res/js/icl-admin-notifier.js', array( 'jquery' ), ICL_SITEPRESS_VERSION );
  30. }
  31. /**
  32. * @param string $message
  33. * @param string $type
  34. */
  35. public static function add_instant_message( $message, $type = '' ) {
  36. $messages = self::get_messages();
  37. $messages[ 'instant_messages' ][ ] = array(
  38. 'text' => $message,
  39. 'type' => $type
  40. );
  41. self::save_messages( $messages );
  42. }
  43. public static function get_message($message_id) {
  44. $messages = self::get_messages();
  45. return isset($messages['messages'][$message_id]) ? $messages['messages'][$message_id] : false;
  46. }
  47. public static function message_id_exists($message_id) {
  48. $message = self::get_message($message_id);
  49. return $message !== false;
  50. }
  51. private static function get_messages() {
  52. $messages = get_option( 'icl_admin_messages' );
  53. if ( !( isset( $messages ) && $messages != false ) ) {
  54. return array( 'messages' => array(), 'instant_messages' => array() );
  55. }
  56. if ( !isset( $messages[ 'messages' ] ) || !isset( $messages[ 'instant_messages' ] ) ) {
  57. $messages = array( 'messages' => array(), 'instant_messages' => array() );
  58. }
  59. return (array)$messages;
  60. }
  61. private static function save_messages( $messages ) {
  62. if ( isset( $messages ) ) {
  63. update_option( 'icl_admin_messages', (array)$messages );
  64. }
  65. self::get_messages();
  66. }
  67. /**
  68. * @param $args
  69. * Args attributes:
  70. *
  71. * string id - An unique identifier for the message
  72. * string msg - The actual message
  73. * string type (optional) - Any string: it will be used as css class fro the message container. A typical value is 'error', but the following strings can be also used: icl-admin-message-information, icl-admin-message-warning
  74. * array classes (optional) - Display the notice only on specific url(s)
  75. * bool hide (optional) - Enable the toggle link to permanently hide the notice
  76. * bool hide_per_user (optional) - Enable the toggle link per user basis (overrides hide option)
  77. * bool dismiss (optional) - Enable the dismiss option
  78. * bool dismiss_per_user (optional) - Enable the dismiss option per user basis (overrides dismiss option)
  79. * bool|string fallback_text (optional) - A message to show when the notice gets hidden
  80. * bool|string fallback_type (optional) - The message type to use in the fallback message (@see $type)
  81. * array fallback_classes (optional) - The message type to use in the fallback message (@see $type)
  82. * bool|string group (optional) - A way to group messages: when displaying messages stored with this method, it's possible to filter them by group (@see ICL_AdminNotifier::displayMessages)
  83. * bool admin_notice (optional) - Hook the rendering to the 'admin_notice' action
  84. * string|array limit_to_page (optional) - Display the notice only on specific page(s)
  85. */
  86. public static function add_message( $args ) {
  87. $defaults = array(
  88. 'type' => '',
  89. 'classes' => array(),
  90. 'hide' => false,
  91. 'hide_per_user' => false,
  92. 'dismiss' => false,
  93. 'dismiss_per_user' => false,
  94. 'fallback_text' => false,
  95. 'fallback_type' => false,
  96. 'fallback_classes' => array(),
  97. 'group' => false,
  98. 'admin_notice' => false,
  99. 'hidden' => false,
  100. 'dismissed' => false,
  101. 'limit_to_page' => false,
  102. 'show_once' => false,
  103. 'capability' => '',
  104. );
  105. $args = self::sanitize_message_args( $args );
  106. $args = array_merge( $defaults, $args );
  107. $id = $args[ 'id' ];
  108. //Check if existing message has been set as dismissed
  109. if ( self::message_id_exists( $id ) ) {
  110. $temp_msg = self::get_message( $id );
  111. if ( $temp_msg ) {
  112. $current_user_id = get_current_user_id();
  113. $message_user_data = isset( $temp_msg[ 'users' ][ $current_user_id ] ) ? $temp_msg[ 'users' ][ $current_user_id ] : false;
  114. if ( ( !empty( $temp_msg[ 'dismiss_per_user' ] )
  115. && isset( $message_user_data[ 'dismissed' ] )
  116. && $message_user_data[ 'dismissed' ] )
  117. || ( !empty( $temp_msg[ 'dismiss' ] )
  118. && isset( $temp_msg[ 'dismissed' ] )
  119. && $temp_msg[ 'dismissed' ] )
  120. ) {
  121. return;
  122. }
  123. $args[ 'hidden' ] = $message_user_data[ 'hidden' ] ? false : $args[ 'hidden' ];
  124. }
  125. }
  126. $id = $id ? $id : md5(wp_json_encode($args));
  127. $messages = self::get_messages();
  128. $message = array(
  129. 'id' => $id,
  130. 'text' => $args[ 'text' ],
  131. 'type' => $args[ 'type' ],
  132. 'classes' => $args[ 'classes' ],
  133. 'hide' => $args[ 'hide' ],
  134. 'hide_per_user' => $args[ 'hide_per_user' ],
  135. 'dismiss' => $args[ 'dismiss' ],
  136. 'dismiss_per_user' => $args[ 'dismiss_per_user' ],
  137. 'fallback_text' => $args[ 'fallback_text' ],
  138. 'fallback_type' => $args[ 'fallback_type' ],
  139. 'fallback_classes' => $args[ 'classes' ],
  140. 'group' => $args[ 'group' ],
  141. 'admin_notice' => $args[ 'admin_notice' ],
  142. 'hidden' => false,
  143. 'dismissed' => false,
  144. 'limit_to_page' => $args[ 'limit_to_page' ],
  145. 'show_once' => $args[ 'show_once' ],
  146. 'capability' => $args[ 'capability' ],
  147. );
  148. $message_md5 = md5(wp_json_encode($message));
  149. if(isset( $messages[ 'messages' ][ $id ] )) {
  150. $existing_message_md5 = md5(wp_json_encode($messages[ 'messages' ][ $id ]));
  151. if($message_md5 != $existing_message_md5) {
  152. unset($messages[ 'messages' ][ $id ]);
  153. }
  154. }
  155. if ( !isset( $messages[ 'messages' ][ $id ] ) ) {
  156. $messages[ 'messages' ][ $id ] = $message;
  157. self::save_messages( $messages );
  158. }
  159. }
  160. public static function hide_message() {
  161. $message_id = isset( $_POST[ 'icl-admin-message-id' ] ) ? $_POST[ 'icl-admin-message-id' ] : '';
  162. $message_id = preg_replace( '/^icl-id-/', '', $message_id );
  163. $dismiss = isset( $_POST[ 'dismiss' ] ) ? $_POST[ 'dismiss' ] : false;
  164. if ( !self::message_id_exists($message_id) ) {
  165. exit;
  166. }
  167. self::set_message_display ( $message_id, false, 'hide', 'hidden', 'hide_per_user' );
  168. if($dismiss) {
  169. self::set_message_display ( $message_id, false, 'dismiss', 'dismissed', 'dismiss_per_user' );
  170. } else {
  171. $messages = self::get_messages();
  172. $message = $messages[ 'messages' ][ $message_id ];
  173. if ( $message && isset( $message[ 'fallback_text' ] ) && $message[ 'fallback_text' ] ) {
  174. echo self::display_message( $message_id, $message[ 'fallback_text' ], $message[ 'fallback_type' ], $message[ 'fallback_classes' ], false, false, true, true );
  175. }
  176. }
  177. exit;
  178. }
  179. public static function show_message() {
  180. $message_id = isset( $_POST[ 'icl-admin-message-id' ] ) ? $_POST[ 'icl-admin-message-id' ] : '';
  181. $message_id = preg_replace( '/^icl-id-/', '', $message_id );
  182. if ( !self::message_id_exists($message_id) ) {
  183. exit;
  184. }
  185. self::set_message_display ( $message_id, true, 'hide', 'hidden', 'hide_per_user' );
  186. $messages = self::get_messages();
  187. $message = $messages[ 'messages' ][ $message_id ];
  188. if ( $message ) {
  189. 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 );
  190. }
  191. exit;
  192. }
  193. public static function engage_message() {
  194. $message_id = isset( $_POST[ 'icl-admin-message-id' ] ) ? $_POST[ 'icl-admin-message-id' ] : '';
  195. $message_id = preg_replace( '/^icl-id-/', '', $message_id );
  196. if ( !self::message_id_exists($message_id) ) {
  197. exit;
  198. }
  199. self::set_message_display ( $message_id, true, 'dismiss', 'dismissed', 'dismiss_per_user' );
  200. }
  201. private static function set_message_display( $message_id, $show, $action, $action_past, $action_user ) {
  202. if ( $message_id === null ) {
  203. return;
  204. }
  205. $messages = self::get_messages ();
  206. if ( !isset( $messages[ 'messages' ][ $message_id ] ) ) {
  207. return;
  208. }
  209. $message = $messages[ 'messages' ][ $message_id ];
  210. $current_user_id = get_current_user_id ();
  211. if ( $message[ $action_user ] && $current_user_id ) {
  212. $message[ 'users' ][ $current_user_id ][ $action_past ] = !$show;
  213. } elseif ( $message[ $action ] ) {
  214. $message[ $action_past ] = !$show;
  215. }
  216. $messages[ 'messages' ][ $message_id ] = $message;
  217. self::save_messages ( $messages );
  218. }
  219. public static function remove_message( $message_id ) {
  220. if ( $message_id === null || !isset( $message_id ) ) {
  221. return false;
  222. }
  223. $messages = self::get_messages();
  224. if ( !isset( $messages[ 'messages' ][ $message_id ] ) ) {
  225. return false;
  226. }
  227. unset( $messages[ 'messages' ][ $message_id ] );
  228. self::save_messages( $messages );
  229. return false;
  230. }
  231. public static function remove_message_group( $message_group ) {
  232. if ( $message_group === null || !isset( $message_group ) ) {
  233. return;
  234. }
  235. $all_messages = self::get_messages();
  236. if(!isset($all_messages['messages'])) return;
  237. $messages = $all_messages['messages'];
  238. $ids_to_remove = array();
  239. foreach($messages as $id => $message_data) {
  240. if(isset($message_data['group']) && $message_data['group'] == $message_group) {
  241. $ids_to_remove[] = $id;
  242. }
  243. }
  244. foreach($ids_to_remove as $id_to_remove) {
  245. self::remove_message($id_to_remove);
  246. }
  247. }
  248. public static function display_messages( $group = false ) {
  249. if ( is_admin() ) {
  250. $messages = self::get_messages();
  251. foreach ( $messages[ 'messages' ] as $id => $msg ) {
  252. if ( !$group || ( isset( $msg[ 'group' ] ) && $msg[ 'group' ] == $group ) ) {
  253. if ( isset( $msg[ 'admin_notice' ] ) && !$msg[ 'admin_notice' ] ) {
  254. if ( !isset( $msg[ 'capability' ] ) || ( $msg[ 'capability' ] == '' ) || current_user_can( $msg[ 'capability' ]) ) {
  255. self::display_message( $id, $msg[ 'text' ], $msg[ 'type' ], $msg[ 'classes' ], $msg[ 'hide' ] || $msg['hide_per_user'], $msg[ 'dismiss' ] || $msg['dismiss_per_user'], true );
  256. }
  257. }
  258. }
  259. }
  260. foreach ( $messages[ 'instant_messages' ] as $msg ) {
  261. self::display_instant_message( $msg[ 'text' ], $msg[ 'type' ] );
  262. }
  263. // delete instant messages
  264. $messages[ 'instant_messages' ] = array();
  265. self::save_messages( $messages );
  266. }
  267. }
  268. /**
  269. * @deprecated deprecated @since version 3.2. Use ICL_AdminNotifier::display_message()
  270. *
  271. * @param bool $group
  272. */
  273. public static function displayMessages( $group = false ) {
  274. self::display_messages( $group );
  275. }
  276. public static function admin_notices() {
  277. $messages = self::get_messages();
  278. if(isset($messages['messages'])) {
  279. foreach ( $messages['messages'] as $id => $msg ) {
  280. if(isset($msg['limit_to_page']) && $msg['limit_to_page']) {
  281. if(!is_array($msg['limit_to_page'])) {
  282. $msg['limit_to_page'] = (array)$msg['limit_to_page'];
  283. }
  284. if(!isset($_REQUEST['page']) || !in_array($_REQUEST['page'], $msg['limit_to_page'] )) {
  285. continue;
  286. }
  287. }
  288. if ( $msg[ 'admin_notice' ] ) {
  289. $current_user_id = get_current_user_id();
  290. $display = true;
  291. $display_fallback = false;
  292. $message_user_data = isset( $msg[ 'users' ][ $current_user_id ] ) ? $msg[ 'users' ][ $current_user_id ] : false;
  293. if ( $msg[ 'dismiss_per_user' ] && isset( $message_user_data[ 'dismissed' ] ) && $message_user_data[ 'dismissed' ] ) {
  294. $display = false;
  295. } elseif ( $msg[ 'dismiss' ] && isset( $msg[ 'dismissed' ] ) && $msg[ 'dismissed' ] ) {
  296. $display = false;
  297. }
  298. if ( $display ) {
  299. if ( $msg[ 'hide_per_user' ] && isset( $message_user_data[ 'hidden' ] ) && $message_user_data[ 'hidden' ] ) {
  300. $display = false;
  301. $display_fallback = $msg[ 'fallback_text' ];
  302. } elseif ( $msg[ 'hide' ] && isset( $msg[ 'hidden' ] ) && $msg[ 'hidden' ] ) {
  303. $display = false;
  304. $display_fallback = $msg[ 'fallback_text' ];
  305. }
  306. }
  307. $msg[ 'classes' ] = isset( $msg[ 'classes' ] ) ? $msg[ 'classes' ] : array();
  308. $msg[ 'fallback_classes' ] = isset( $msg[ 'fallback_classes' ] ) ? $msg[ 'fallback_classes' ] : array();
  309. if ( $display ) {
  310. self::display_message( $id, $msg[ 'text' ], $msg[ 'type' ], $msg[ 'classes' ], $msg[ 'hide' ] || $msg[ 'hide_per_user' ], $msg[ 'dismiss' ] || $msg[ 'dismiss_per_user' ], true );
  311. if ( $msg[ 'show_once' ] && ! $display_fallback ) {
  312. self::remove_message( $msg[ 'id' ] );
  313. }
  314. } elseif ( $display_fallback ) {
  315. self::display_message( $id, $msg[ 'fallback_text' ], $msg[ 'fallback_type' ], $msg[ 'fallback_classes' ], false, false, true );
  316. if ( $msg[ 'show_once' ] ) {
  317. self::remove_message( $msg[ 'id' ] );
  318. }
  319. }
  320. }
  321. }
  322. }
  323. }
  324. /**
  325. * @param string $id
  326. * @param string $message
  327. * @param string $type
  328. * @param string|array $classes
  329. * @param bool $hide
  330. * @param bool $dismiss
  331. * @param bool $admin_notice
  332. * @param bool $echo
  333. *
  334. * @return string
  335. */
  336. private static function display_message( $id, $message, $type = '', $classes = array(), $hide = true, $dismiss = false, $admin_notice = false, $echo = false ) {
  337. $result = '';
  338. $temp_classes = array();
  339. if(strpos($type, 'icl-admin-message')) {
  340. $type = str_replace('icl-admin-message-', '', $type);
  341. }
  342. if($admin_notice) {
  343. $temp_classes[] = 'icl-admin-message';
  344. }
  345. $temp_types = explode(' ', $type);
  346. $temp_types = array_unique($temp_types);
  347. foreach($temp_types as $temp_type) {
  348. if($admin_notice) {
  349. $temp_classes[] = 'icl-admin-message-' . $temp_type;
  350. }
  351. $temp_classes[] = $temp_type;
  352. }
  353. if ( $classes ) {
  354. if(!is_array($classes)) {
  355. $classes = explode(' ', $classes);
  356. }
  357. foreach($classes as $class) {
  358. $temp_classes[] = $class;
  359. }
  360. }
  361. $temp_classes = array_unique($temp_classes);
  362. $class = implode(' ', $temp_classes);
  363. $result .='<div class="' . $class .'" id="icl-id-' . $id . '"' ;
  364. if($hide) {
  365. $result .= ' data-hide-text="' . __( 'Hide', 'sitepress' ) . '" ';
  366. }
  367. $result .= '>';
  368. $result .= '<div class="icl-admin-message-wrapper">' . stripslashes( $message );
  369. if ( $hide ) {
  370. $result .= ' <a href="#" class="icl-admin-message-hide">' . __( 'Hide', 'sitepress' ) . '</a>';
  371. }
  372. if ( $dismiss ) {
  373. $result .= ' <div class="icl-admin-message-dismiss">';
  374. $result .= '<input class="icl-admin-message-dismiss-check" type="checkbox" value="1" />';
  375. $result .= __( 'Dismiss', 'sitepress' );
  376. $result .= '</div>';
  377. }
  378. $result .= '</div>';
  379. $result .= '</div>';
  380. if(!$echo) {
  381. echo $result;
  382. }
  383. return $result;
  384. }
  385. public static function display_instant_message( $message, $type = 'information', $class = false, $return = false, $fadeout = false ) {
  386. $classes = array();
  387. if ( !$class && $type ) {
  388. $classes[ ] = $type;
  389. }
  390. $classes[ ] = 'instant-message';
  391. $classes[ ] = 'message';
  392. $classes[ ] = 'message-' . $type;
  393. foreach ( $classes as $class ) {
  394. $classes[ ] = 'icl-admin-' . $class;
  395. }
  396. if ( $fadeout ) {
  397. $classes[ ] = 'js-icl-fadeout';
  398. }
  399. $classes = array_unique($classes);
  400. if(in_array('error', $classes)) {
  401. $key = array_search('error', $classes);
  402. if($key!==false) {
  403. unset($classes[$key]);
  404. }
  405. }
  406. $result = '<div class="' . implode( ' ', $classes ) . '">';
  407. $result .= stripslashes( $message );
  408. $result .= '</div>';
  409. if ( !$return ) {
  410. echo $result;
  411. }
  412. return $result;
  413. }
  414. /**
  415. * @param $args
  416. *
  417. * @return mixed
  418. */
  419. private static function sanitize_message_args( $args ) {
  420. if ( isset( $args[ 'msg' ] ) ) {
  421. $args[ 'text' ] = $args[ 'msg' ];
  422. unset( $args[ 'msg' ] );
  423. }
  424. if ( isset( $args[ 'fallback' ] ) ) {
  425. $args[ 'fallback_message' ] = $args[ 'fallback' ];
  426. unset( $args[ 'fallback' ] );
  427. }
  428. if ( isset( $args[ 'message_fallback' ] ) ) {
  429. $args[ 'fallback_message' ] = $args[ 'message_fallback' ];
  430. unset( $args[ 'message_fallback' ] );
  431. }
  432. if ( isset( $args[ 'type_fallback' ] ) ) {
  433. $args[ 'fallback_type' ] = $args[ 'type_fallback' ];
  434. unset( $args[ 'type_fallback' ] );
  435. return $args;
  436. }
  437. if ( ! isset( $args[ 'classes' ] ) ) {
  438. $args[ 'classes' ] = array();
  439. } elseif ( ! is_array( $args[ 'classes' ] ) ) {
  440. $args[ 'classes' ] = (array) $args[ 'classes' ];
  441. }
  442. if ( ! isset( $args[ 'limit_to_page' ] ) ) {
  443. $args[ 'limit_to_page' ] = array();
  444. } elseif ( ! is_array( $args[ 'limit_to_page' ] ) ) {
  445. $args[ 'limit_to_page' ] = (array) $args[ 'limit_to_page' ];
  446. }
  447. return $args;
  448. }
  449. static function troubleshooting_js_data($data) {
  450. $data['nonce']['icl_restore_notifications'] = wp_create_nonce( 'icl_restore_notifications' );
  451. $data['nonce']['icl_remove_notifications'] = wp_create_nonce( 'icl_remove_notifications' );
  452. return $data;
  453. }
  454. static function has_hidden_messages() {
  455. $messages = self::get_messages();
  456. $no_hidden_messages = true;
  457. foreach ( $messages as $group => $message_group ) {
  458. foreach ( $message_group as $id => $msg ) {
  459. if ( ( isset( $msg[ 'hidden' ] ) && $msg[ 'hidden' ] ) || ( isset( $msg[ 'dismissed' ] ) && $msg[ 'dismissed' ] ) ) {
  460. $no_hidden_messages = false;
  461. } else {
  462. $current_user_id = get_current_user_id();
  463. $message_user_data = isset( $msg[ 'users' ][ $current_user_id ] ) ? $msg[ 'users' ][ $current_user_id ] : false;
  464. if ($message_user_data && $msg[ 'dismiss_per_user' ] && isset( $message_user_data[ 'dismissed' ] ) && $message_user_data[ 'dismissed' ] ) {
  465. $no_hidden_messages = false;
  466. } elseif ($message_user_data && $msg[ 'dismiss' ] && isset( $msg[ 'dismissed' ] ) && $msg[ 'dismissed' ] ) {
  467. $no_hidden_messages = false;
  468. }
  469. if ( $no_hidden_messages ) {
  470. if ( isset($msg[ 'hide_per_user' ]) && $msg[ 'hide_per_user' ] && isset( $message_user_data[ 'hidden' ] ) && $message_user_data[ 'hidden' ] ) {
  471. $no_hidden_messages = ! $msg[ 'fallback_text' ];
  472. } elseif ( $msg[ 'hide' ] && isset( $msg[ 'hidden' ] ) && $msg[ 'hidden' ] ) {
  473. $no_hidden_messages = ! $msg[ 'fallback_text' ];
  474. }
  475. }
  476. }
  477. if ( ! $no_hidden_messages ) {
  478. return true;
  479. }
  480. }
  481. }
  482. return false;
  483. }
  484. static function troubleshooting() {
  485. ?>
  486. <h4><?php _e( 'Messages and notifications', 'sitepress' ) ?></h4>
  487. <?php
  488. if ( self::has_hidden_messages() ) {
  489. ?>
  490. <p>
  491. <input id="icl_restore_notifications" type="button" class="button-secondary" value="<?php echo __( 'Restore messages and notification', 'sitepress' ); ?>" />
  492. <br />
  493. <br />
  494. <input id="icl_restore_notifications_all_users"
  495. name="icl_restore_notifications_all_users"
  496. type="checkbox"
  497. value="1" /><label for="icl_restore_notifications_all_users"><?php echo __( 'Apply to all users', 'sitepress' ); ?></label>
  498. <br />
  499. <br />
  500. <small style="margin-left:10px;"><?php echo __( 'Restore dismissed and hidden messages and notifications.', 'sitepress' ); ?></small>
  501. </p>
  502. <?php
  503. }
  504. ?>
  505. <p>
  506. <input id="icl_remove_notifications" type="button" class="button-secondary" value="<?php echo __( 'Remove all messages and notifications', 'sitepress' ); ?>" />
  507. <br />
  508. <small style="margin-left:10px;"><?php echo __( 'Remove all messages and notifications, for all users.', 'sitepress' ); ?></small>
  509. </p>
  510. <?php
  511. }
  512. static function remove_notifications() {
  513. self::save_messages(array());
  514. echo wp_json_encode( array( 'errors' => 0, 'message' => __( 'Done', 'sitepress' ), 'cont' => 0, 'reload' => 1 ) );
  515. die();
  516. }
  517. static function restore_notifications() {
  518. $all_users = $_POST['all_users'];
  519. $messages = self::get_messages();
  520. $dirty = 0;
  521. foreach ( $messages as $group => $message_group ) {
  522. foreach ( $message_group as $id => $msg ) {
  523. if ( $msg[ 'hidden' ] ) {
  524. $msg[ 'hidden' ] = false;
  525. $dirty++;
  526. }
  527. if ( $msg[ 'dismissed' ] ) {
  528. $msg[ 'dismissed' ] = false;
  529. $dirty++;
  530. }
  531. $current_user_id = get_current_user_id();
  532. foreach($msg[ 'users' ] as $user_id => $message_user_data) {
  533. if($current_user_id == $user_id || $all_users) {
  534. if ( $message_user_data[ 'hidden' ] ) {
  535. $message_user_data[ 'hidden' ] = false;
  536. $dirty++;
  537. }
  538. if ( $message_user_data[ 'dismissed' ] ) {
  539. $message_user_data[ 'dismissed' ] = false;
  540. $dirty++;
  541. }
  542. }
  543. $msg[ 'users' ][$user_id] = $message_user_data;
  544. }
  545. $message_group[$id] = $msg;
  546. }
  547. $messages[$group] = $message_group;
  548. }
  549. if($dirty) {
  550. self::save_messages($messages);
  551. }
  552. echo wp_json_encode( array( 'errors' => 0, 'message' => __( 'Done', 'sitepress' ), 'cont' => $dirty, 'reload' => 1 ) );
  553. die();
  554. }
  555. /** Deprecated methods */
  556. /**
  557. * @deprecated deprecated @since version 3.2. Use ICL_AdminNotifier::remove_message()
  558. *
  559. * @param $message_id
  560. *
  561. * @return bool
  562. */
  563. public static function removeMessage( $message_id ) {
  564. return self::remove_message( $message_id );
  565. }
  566. /**
  567. * @deprecated deprecated @since version 3.2
  568. *
  569. */
  570. public static function hideMessage() {
  571. self::hide_message();
  572. }
  573. /**
  574. * @deprecated deprecated @since version 3.2
  575. *
  576. * @param string $message
  577. * @param string $type
  578. */
  579. public static function addInstantMessage( $message, $type = '' ) {
  580. self::add_instant_message( $message, $type );
  581. }
  582. /**
  583. * @deprecated deprecated @since version 3.2
  584. *
  585. */
  586. public static function addScript() {
  587. self::add_script();
  588. }
  589. /**
  590. * @deprecated deprecated @since version 3.2
  591. *
  592. * @param string $id An unique identifier for the message
  593. * @param string $msg The actual message
  594. * @param string $type (optional) Any string: it will be used as css class fro the message container. A typical value is 'error', but the following strings can be also used: icl-admin-message-information, icl-admin-message-warning
  595. * @param bool $hide (optional) Enable the toggle link to permanently hide the notice
  596. * @param bool $fallback_message (optional) A message to show when the notice gets hidden
  597. * @param bool $fallback_type (optional) The message type to use in the fallback message (@see $type)
  598. * @param bool $group (optional) A way to group messages: when displaying messages stored with this method, it's possible to filter them by group (@see ICL_AdminNotifier::displayMessages)
  599. * @param bool $admin_notice (optional) Hook the rendering to the 'admin_notice' action
  600. */
  601. public static function addMessage( $id, $msg, $type = '', $hide = true, $fallback_message = false, $fallback_type = false, $group = false, $admin_notice = false ) {
  602. $args = array(
  603. 'id' => $id,
  604. 'msg' => $msg,
  605. 'type' => $type,
  606. 'hide' => $hide,
  607. 'message_fallback' => $fallback_message,
  608. 'fallback_type' => $fallback_type,
  609. 'group' => $group,
  610. 'admin_notice' => $admin_notice,
  611. );
  612. self::add_message( $args );
  613. }
  614. /**
  615. * @deprecated deprecated @since version 3.2. Use ICL_AdminNotifier::display_instant_message()
  616. *
  617. * @param $message
  618. * @param string $type
  619. * @param bool $class
  620. * @param bool $return
  621. *
  622. * @return string
  623. */
  624. public static function displayInstantMessage( $message, $type = 'information', $class = false, $return = false ) {
  625. return self::display_instant_message($message , $type, $class, $return);
  626. }
  627. }