<?php
/**
 * @package wpml-core
 */

/**
 * Admin Notifier Class
 *
 * Manages Admin Notices
 *
 *
 */

add_action ( 'init', array('ICL_AdminNotifier', 'init') );

class ICL_AdminNotifier {

	public static function init() {
		if ( is_admin() ) {
			add_action( 'wp_ajax_icl-hide-admin-message', array( __CLASS__, 'hide_message' ) );
			add_action( 'wp_ajax_icl-show-admin-message', array( __CLASS__, 'show_message' ) );
			if ( ! defined( 'DOING_AJAX' ) ) {
				add_action( 'admin_enqueue_scripts', array( __CLASS__, 'add_script' ) );

				add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ) );
			}

			add_filter( 'troubleshooting_js_data', array( __CLASS__, 'troubleshooting_js_data' ) );
			add_action( 'wpml_troubleshooting_cleanup', array( __CLASS__, 'troubleshooting' ) );
			add_action( 'wp_ajax_icl_restore_notifications', array( __CLASS__, 'restore_notifications' ) );
			add_action( 'wp_ajax_icl_remove_notifications', array( __CLASS__, 'remove_notifications' ) );
		}
	}

	public static function add_script() {
		wp_enqueue_script( 'icl-admin-notifier', ICL_PLUGIN_URL . '/res/js/icl-admin-notifier.js', array( 'jquery' ), ICL_SITEPRESS_VERSION );
	}

	/**
	 * @param string $message
	 * @param string $type
	 */
	public static function add_instant_message( $message, $type = '' ) {
		$messages                          = self::get_messages();
		$messages[ 'instant_messages' ][ ] = array(
			'text' => $message,
			'type' => $type
		);
		self::save_messages( $messages );
	}

	public static function get_message($message_id) {
		$messages = self::get_messages();

		return isset($messages['messages'][$message_id]) ? $messages['messages'][$message_id] : false;
	}

	public static function message_id_exists($message_id) {
		$message = self::get_message($message_id);

		return $message !== false;
	}

	private static function get_messages() {
		$messages = get_option( 'icl_admin_messages' );
		if ( !( isset( $messages ) && $messages != false ) ) {
			return array( 'messages' => array(), 'instant_messages' => array() );
		}
		if ( !isset( $messages[ 'messages' ] ) || !isset( $messages[ 'instant_messages' ] ) ) {
			$messages = array( 'messages' => array(), 'instant_messages' => array() );
		}

		return (array)$messages;
	}

	private static function save_messages( $messages ) {
		if ( isset( $messages ) ) {
			update_option( 'icl_admin_messages', (array)$messages );
		}
		self::get_messages();
	}

	/**
	 * @param $args
	 * Args attributes:
	 *
	 * 		string        id - An unique identifier for the message
	 * 		string        msg - The actual message
	 * 		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
	 * 		array         classes (optional) - Display the notice only on specific url(s)
	 * 		bool          hide (optional) - Enable the toggle link to permanently hide the notice
	 * 		bool          hide_per_user (optional) - Enable the toggle link per user basis (overrides hide option)
	 * 		bool          dismiss (optional) - Enable the dismiss option
	 * 		bool          dismiss_per_user (optional) - Enable the dismiss option per user basis (overrides dismiss option)
	 * 		bool|string   fallback_text (optional) - A message to show when the notice gets hidden
	 * 		bool|string   fallback_type (optional) - The message type to use in the fallback message (@see $type)
	 * 		array         fallback_classes (optional) - The message type to use in the fallback message (@see $type)
	 * 		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)
	 * 		bool          admin_notice (optional) - Hook the rendering to the 'admin_notice' action
	 * 		string|array  limit_to_page (optional) - Display the notice only on specific page(s)
	 */
	public static function add_message( $args ) {
		$defaults = array(
			'type'             => '',
			'classes'          => array(),
			'hide'             => false,
			'hide_per_user'    => false,
			'dismiss'          => false,
			'dismiss_per_user' => false,
			'fallback_text'    => false,
			'fallback_type'    => false,
			'fallback_classes' => array(),
			'group'            => false,
			'admin_notice'     => false,
			'hidden'           => false,
			'dismissed'        => false,
			'limit_to_page'    => false,
			'show_once'        => false,
			'capability'	   => '',
		);

		$args = self::sanitize_message_args( $args );

		$args = array_merge( $defaults, $args );

		$id = $args[ 'id' ];

		//Check if existing message has been set as dismissed
		if ( self::message_id_exists( $id ) ) {
			$temp_msg = self::get_message( $id );

			if ( $temp_msg ) {
				$current_user_id = get_current_user_id();
				$message_user_data = isset( $temp_msg[ 'users' ][ $current_user_id ] ) ? $temp_msg[ 'users' ][ $current_user_id ] : false;

				if ( ( !empty( $temp_msg[ 'dismiss_per_user' ] )
				       && isset( $message_user_data[ 'dismissed' ] )
				       && $message_user_data[ 'dismissed' ] )
				     || ( !empty( $temp_msg[ 'dismiss' ] )
				          && isset( $temp_msg[ 'dismissed' ] )
				          && $temp_msg[ 'dismissed' ] )
				) {
					return;
				}

				$args[ 'hidden' ] = $message_user_data[ 'hidden' ] ? false : $args[ 'hidden' ];
			}
		}

		$id = $id ? $id : md5(wp_json_encode($args));
		$messages = self::get_messages();

		$message = array(
			'id'               => $id,
			'text'             => $args[ 'text' ],
			'type'             => $args[ 'type' ],
			'classes'          => $args[ 'classes' ],
			'hide'             => $args[ 'hide' ],
			'hide_per_user'    => $args[ 'hide_per_user' ],
			'dismiss'          => $args[ 'dismiss' ],
			'dismiss_per_user' => $args[ 'dismiss_per_user' ],
			'fallback_text'    => $args[ 'fallback_text' ],
			'fallback_type'    => $args[ 'fallback_type' ],
			'fallback_classes' => $args[ 'classes' ],
			'group'            => $args[ 'group' ],
			'admin_notice'     => $args[ 'admin_notice' ],
			'hidden'           => false,
			'dismissed'        => false,
			'limit_to_page'    => $args[ 'limit_to_page' ],
			'show_once'        => $args[ 'show_once' ],
			'capability'       => $args[ 'capability' ],
		);

		$message_md5 = md5(wp_json_encode($message));

		if(isset( $messages[ 'messages' ][ $id ] )) {
			$existing_message_md5 = md5(wp_json_encode($messages[ 'messages' ][ $id ]));
			if($message_md5 != $existing_message_md5) {
				unset($messages[ 'messages' ][ $id ]);
			}
		}

		if ( !isset( $messages[ 'messages' ][ $id ] ) ) {
			$messages[ 'messages' ][ $id ] = $message;
			self::save_messages( $messages );
		}
	}

	public static function hide_message() {
		$message_id = isset( $_POST[ 'icl-admin-message-id' ] ) ? $_POST[ 'icl-admin-message-id' ] : '';
		$message_id = preg_replace( '/^icl-id-/', '', $message_id );
		$dismiss = isset( $_POST[ 'dismiss' ] ) ? $_POST[ 'dismiss' ] : false;
		if ( !self::message_id_exists($message_id) ) {
			exit;
		}

		self::set_message_display ( $message_id, false, 'hide', 'hidden', 'hide_per_user' );

		if($dismiss) {
			self::set_message_display ( $message_id, false, 'dismiss', 'dismissed', 'dismiss_per_user' );
		} else {
			$messages = self::get_messages();
			$message  = $messages[ 'messages' ][ $message_id ];
			if ( $message && isset( $message[ 'fallback_text' ] ) && $message[ 'fallback_text' ] ) {
				echo self::display_message( $message_id, $message[ 'fallback_text' ], $message[ 'fallback_type' ], $message[ 'fallback_classes' ], false, false, true, true );
			}
		}
		exit;
	}

	public static function show_message() {
		$message_id = isset( $_POST[ 'icl-admin-message-id' ] ) ? $_POST[ 'icl-admin-message-id' ] : '';
		$message_id = preg_replace( '/^icl-id-/', '', $message_id );
		if ( !self::message_id_exists($message_id) ) {
			exit;
		}

		self::set_message_display ( $message_id, true, 'hide', 'hidden', 'hide_per_user' );

		$messages = self::get_messages();
		$message = $messages[ 'messages' ][ $message_id ];
		if ( $message ) {
			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 );
		}
		exit;
	}

	public static function engage_message() {
		$message_id = isset( $_POST[ 'icl-admin-message-id' ] ) ? $_POST[ 'icl-admin-message-id' ] : '';
		$message_id = preg_replace( '/^icl-id-/', '', $message_id );
		if ( !self::message_id_exists($message_id) ) {
			exit;
		}

		self::set_message_display ( $message_id, true, 'dismiss', 'dismissed', 'dismiss_per_user' );
	}

	private static function set_message_display( $message_id, $show, $action, $action_past, $action_user ) {
		if ( $message_id === null ) {
			return;
		}

		$messages = self::get_messages ();

		if ( !isset( $messages[ 'messages' ][ $message_id ] ) ) {
			return;
		}
		$message         = $messages[ 'messages' ][ $message_id ];
		$current_user_id = get_current_user_id ();
		if ( $message[ $action_user ] && $current_user_id ) {
			$message[ 'users' ][ $current_user_id ][ $action_past ] = !$show;
		} elseif ( $message[ $action ] ) {
			$message[ $action_past ] = !$show;
		}
		$messages[ 'messages' ][ $message_id ] = $message;
		self::save_messages ( $messages );
	}

	public static function remove_message( $message_id ) {
		if ( $message_id === null || !isset( $message_id ) ) {
			return false;
		}

		$messages = self::get_messages();

		if ( !isset( $messages[ 'messages' ][ $message_id ] ) ) {
			return false;
		}

		unset( $messages[ 'messages' ][ $message_id ] );

		self::save_messages( $messages );

		return false;
	}

	public static function remove_message_group( $message_group ) {
		if ( $message_group === null || !isset( $message_group ) ) {
			return;
		}

		$all_messages = self::get_messages();

		if(!isset($all_messages['messages'])) return;

		$messages = $all_messages['messages'];

		$ids_to_remove = array();
		foreach($messages as $id => $message_data) {
			if(isset($message_data['group']) && $message_data['group'] == $message_group) {
				$ids_to_remove[] = $id;
			}
		}

		foreach($ids_to_remove as $id_to_remove) {
			self::remove_message($id_to_remove);
		}
	}

	public static function display_messages( $group = false ) {
		if ( is_admin() ) {
			$messages = self::get_messages();

			foreach ( $messages[ 'messages' ] as $id => $msg ) {
				if ( !$group || ( isset( $msg[ 'group' ] ) && $msg[ 'group' ] == $group ) ) {
					if ( isset( $msg[ 'admin_notice' ] ) && !$msg[ 'admin_notice' ] ) {
						if ( !isset( $msg[ 'capability' ] ) || ( $msg[ 'capability' ] == '' ) || current_user_can( $msg[ 'capability' ]) ) {
							self::display_message( $id, $msg[ 'text' ], $msg[ 'type' ], $msg[ 'classes' ], $msg[ 'hide' ] || $msg['hide_per_user'], $msg[ 'dismiss' ] || $msg['dismiss_per_user'], true );
						}
					}
				}
			}

			foreach ( $messages[ 'instant_messages' ] as $msg ) {
				self::display_instant_message( $msg[ 'text' ], $msg[ 'type' ] );
			}
			// delete instant messages
			$messages[ 'instant_messages' ] = array();
			self::save_messages( $messages );
		}
	}

	/**
	 * @deprecated deprecated @since version 3.2. Use ICL_AdminNotifier::display_message()
	 *
	 * @param bool $group
	 */
	public static function displayMessages( $group = false ) {
		self::display_messages( $group );
	}

	public static function admin_notices() {
		$messages = self::get_messages();
		if(isset($messages['messages'])) {
			foreach ( $messages['messages'] as $id => $msg ) {

				if(isset($msg['limit_to_page']) && $msg['limit_to_page']) {
					if(!is_array($msg['limit_to_page'])) {
						$msg['limit_to_page'] = (array)$msg['limit_to_page'];
					}
					if(!isset($_REQUEST['page']) || !in_array($_REQUEST['page'], $msg['limit_to_page'] )) {
						continue;
					}
				}

				if ( $msg[ 'admin_notice' ] ) {
					$current_user_id  = get_current_user_id();
					$display          = true;
					$display_fallback = false;

					$message_user_data = isset( $msg[ 'users' ][ $current_user_id ] ) ? $msg[ 'users' ][ $current_user_id ] : false;

					if ( $msg[ 'dismiss_per_user' ] && isset( $message_user_data[ 'dismissed' ] ) && $message_user_data[ 'dismissed' ] ) {
						$display = false;
					} elseif ( $msg[ 'dismiss' ] && isset( $msg[ 'dismissed' ] ) && $msg[ 'dismissed' ] ) {
						$display = false;
					}

					if ( $display ) {
						if ( $msg[ 'hide_per_user' ] && isset( $message_user_data[ 'hidden' ] ) && $message_user_data[ 'hidden' ] ) {
							$display          = false;
							$display_fallback = $msg[ 'fallback_text' ];
						} elseif ( $msg[ 'hide' ] && isset( $msg[ 'hidden' ] ) && $msg[ 'hidden' ] ) {
							$display          = false;
							$display_fallback = $msg[ 'fallback_text' ];
						}
					}

					$msg[ 'classes' ]          = isset( $msg[ 'classes' ] ) ? $msg[ 'classes' ] : array();
					$msg[ 'fallback_classes' ] = isset( $msg[ 'fallback_classes' ] ) ? $msg[ 'fallback_classes' ] : array();
					if ( $display ) {
						self::display_message( $id, $msg[ 'text' ], $msg[ 'type' ], $msg[ 'classes' ], $msg[ 'hide' ] || $msg[ 'hide_per_user' ], $msg[ 'dismiss' ] || $msg[ 'dismiss_per_user' ], true );
						if ( $msg[ 'show_once' ] && ! $display_fallback ) {
							self::remove_message( $msg[ 'id' ] );
						}
					} elseif ( $display_fallback ) {
						self::display_message( $id, $msg[ 'fallback_text' ], $msg[ 'fallback_type' ], $msg[ 'fallback_classes' ], false, false, true );
						if ( $msg[ 'show_once' ] ) {
							self::remove_message( $msg[ 'id' ] );
						}
					}
				}
			}
		}
	}

	/**
	 * @param string       $id
	 * @param string       $message
	 * @param string       $type
	 * @param string|array $classes
	 * @param bool         $hide
	 * @param bool         $dismiss
	 * @param bool         $admin_notice
	 * @param bool         $echo
	 *
	 * @return string
	 */
	private static function display_message( $id, $message, $type = '', $classes = array(), $hide = true, $dismiss = false, $admin_notice = false, $echo = false ) {
		$result = '';
		$temp_classes = array();
		if(strpos($type, 'icl-admin-message')) {
			$type = str_replace('icl-admin-message-', '', $type);
		}
		if($admin_notice) {
			$temp_classes[] = 'icl-admin-message';
		}
		$temp_types = explode(' ', $type);
		$temp_types = array_unique($temp_types);
		foreach($temp_types as $temp_type) {
			if($admin_notice) {
				$temp_classes[] = 'icl-admin-message-' . $temp_type;
			}
			$temp_classes[] = $temp_type;
		}

		if ( $classes ) {
			if(!is_array($classes)) {
				$classes = explode(' ', $classes);
			}
			foreach($classes as $class) {
				$temp_classes[] = $class;
			}
		}

		$temp_classes = array_unique($temp_classes);

		$class = implode(' ', $temp_classes);

		$result .='<div class="' . $class .'" id="icl-id-' . $id . '"' ;

		if($hide) {
			$result .= ' data-hide-text="' . __( 'Hide', 'sitepress' ) . '" ';
		}
		$result .= '>';

		$result .= '<div class="icl-admin-message-wrapper">' . stripslashes( $message );
		if ( $hide ) {
			$result .= ' <a href="#" class="icl-admin-message-hide">' . __( 'Hide', 'sitepress' ) . '</a>';
		}

		if ( $dismiss ) {
			$result .= ' <div class="icl-admin-message-dismiss">';
			$result .= '<input class="icl-admin-message-dismiss-check" type="checkbox" value="1" />';
			$result .= __( 'Dismiss', 'sitepress' );
			$result .= '</div>';
		}

		$result .= '</div>';
		$result .= '</div>';

		if(!$echo) {
			echo $result;
		}

		return $result;
	}

	public static function display_instant_message( $message, $type = 'information', $class = false, $return = false, $fadeout = false ) {
		$classes = array();
		if ( !$class && $type ) {
			$classes[ ] = $type;
		}
		$classes[ ] = 'instant-message';
		$classes[ ] = 'message';
		$classes[ ] = 'message-' . $type;

		foreach ( $classes as $class ) {
			$classes[ ] = 'icl-admin-' . $class;
		}

		if ( $fadeout ) {
			$classes[ ] = 'js-icl-fadeout';
		}

		$classes = array_unique($classes);

		if(in_array('error', $classes)) {
			$key = array_search('error', $classes);
			if($key!==false) {
				unset($classes[$key]);
			}
		}

		$result = '<div class="' . implode( ' ', $classes ) . '">';
		$result .= stripslashes( $message );
		$result .= '</div>';

		if ( !$return ) {
			echo $result;
		}

		return $result;
	}

	/**
	 * @param $args
	 *
	 * @return mixed
	 */
	private static function sanitize_message_args( $args ) {
		if ( isset( $args[ 'msg' ] ) ) {
			$args[ 'text' ] = $args[ 'msg' ];
			unset( $args[ 'msg' ] );
		}

		if ( isset( $args[ 'fallback' ] ) ) {
			$args[ 'fallback_message' ] = $args[ 'fallback' ];
			unset( $args[ 'fallback' ] );
		}

		if ( isset( $args[ 'message_fallback' ] ) ) {
			$args[ 'fallback_message' ] = $args[ 'message_fallback' ];
			unset( $args[ 'message_fallback' ] );
		}

		if ( isset( $args[ 'type_fallback' ] ) ) {
			$args[ 'fallback_type' ] = $args[ 'type_fallback' ];
			unset( $args[ 'type_fallback' ] );

			return $args;
		}

		if ( ! isset( $args[ 'classes' ] ) ) {
			$args[ 'classes' ] = array();
		} elseif ( ! is_array( $args[ 'classes' ] ) ) {
			$args[ 'classes' ] = (array) $args[ 'classes' ];
		}

		if ( ! isset( $args[ 'limit_to_page' ] ) ) {
			$args[ 'limit_to_page' ] = array();
		} elseif ( ! is_array( $args[ 'limit_to_page' ] ) ) {
			$args[ 'limit_to_page' ] = (array) $args[ 'limit_to_page' ];
		}

		return $args;
	}

	static function troubleshooting_js_data($data) {
		$data['nonce']['icl_restore_notifications'] = wp_create_nonce( 'icl_restore_notifications' );
		$data['nonce']['icl_remove_notifications'] = wp_create_nonce( 'icl_remove_notifications' );
		return $data;
	}

	static function has_hidden_messages() {
		$messages = self::get_messages();
		$no_hidden_messages = true;
		foreach ( $messages as $group => $message_group ) {
			foreach ( $message_group as $id => $msg ) {
				if ( ( isset( $msg[ 'hidden' ] ) && $msg[ 'hidden' ] ) || ( isset( $msg[ 'dismissed' ] ) && $msg[ 'dismissed' ] ) ) {
					$no_hidden_messages = false;
				} else {
					$current_user_id   = get_current_user_id();
					$message_user_data = isset( $msg[ 'users' ][ $current_user_id ] ) ? $msg[ 'users' ][ $current_user_id ] : false;
					if ($message_user_data && $msg[ 'dismiss_per_user' ] && isset( $message_user_data[ 'dismissed' ] ) && $message_user_data[ 'dismissed' ] ) {
						$no_hidden_messages = false;
					} elseif ($message_user_data && $msg[ 'dismiss' ] && isset( $msg[ 'dismissed' ] ) && $msg[ 'dismissed' ] ) {
						$no_hidden_messages = false;
					}

					if ( $no_hidden_messages ) {
						if ( isset($msg[ 'hide_per_user' ]) && $msg[ 'hide_per_user' ] && isset( $message_user_data[ 'hidden' ] ) && $message_user_data[ 'hidden' ] ) {
							$no_hidden_messages = ! $msg[ 'fallback_text' ];
						} elseif ( $msg[ 'hide' ] && isset( $msg[ 'hidden' ] ) && $msg[ 'hidden' ] ) {
							$no_hidden_messages = ! $msg[ 'fallback_text' ];
						}
					}
				}

				if ( ! $no_hidden_messages ) {
					return true;
				}
			}
		}
		return false;
	}

	static function troubleshooting() {
		?>
		<h4><?php _e( 'Messages and notifications', 'sitepress' ) ?></h4>
		<?php
		if ( self::has_hidden_messages() ) {

			?>
			<p>
				<input id="icl_restore_notifications" type="button" class="button-secondary" value="<?php echo __( 'Restore messages and notification', 'sitepress' ); ?>" />
				<br />
				<br />
				<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>
				<br />
				<br />
				<small style="margin-left:10px;"><?php echo __( 'Restore dismissed and hidden messages and notifications.', 'sitepress' ); ?></small>
			</p>
		<?php
		}
		?>
		<p>
			<input id="icl_remove_notifications" type="button" class="button-secondary" value="<?php echo __( 'Remove all messages and notifications', 'sitepress' ); ?>" />
			<br />
			<small style="margin-left:10px;"><?php echo __( 'Remove all messages and notifications, for all users.', 'sitepress' ); ?></small>
		</p>
	<?php
	}

	static function remove_notifications() {
		self::save_messages(array());
		echo wp_json_encode( array( 'errors' => 0, 'message' => __( 'Done', 'sitepress' ), 'cont' => 0, 'reload' => 1 ) );
		die();
	}

	static function restore_notifications() {
		$all_users = $_POST['all_users'];

		$messages = self::get_messages();
		$dirty = 0;
		foreach ( $messages as $group => $message_group ) {
			foreach ( $message_group as $id => $msg ) {
				if ( $msg[ 'hidden' ] ) {
					$msg[ 'hidden' ] = false;
					$dirty++;
				}
				if ( $msg[ 'dismissed' ] ) {
					$msg[ 'dismissed' ] = false;
					$dirty++;
				}

				$current_user_id   = get_current_user_id();
				foreach($msg[ 'users' ] as $user_id => $message_user_data) {
					if($current_user_id == $user_id || $all_users) {
						if ( $message_user_data[ 'hidden' ] ) {
							$message_user_data[ 'hidden' ] = false;
							$dirty++;
						}
						if ( $message_user_data[ 'dismissed' ] ) {
							$message_user_data[ 'dismissed' ] = false;
							$dirty++;
						}
					}
					$msg[ 'users' ][$user_id] = $message_user_data;
				}

				$message_group[$id] = $msg;
			}
			$messages[$group] = $message_group;
		}

		if($dirty) {
			self::save_messages($messages);
		}

		echo wp_json_encode( array( 'errors' => 0, 'message' => __( 'Done', 'sitepress' ), 'cont' => $dirty, 'reload' => 1 ) );
		die();
	}

	/** Deprecated methods */


	/**
	 * @deprecated deprecated @since version 3.2. Use ICL_AdminNotifier::remove_message()
	 *
	 * @param $message_id
	 *
	 * @return bool
	 */
	public static function removeMessage( $message_id ) {
		return self::remove_message( $message_id );
	}

	/**
	 * @deprecated deprecated @since version 3.2
	 *
	 */
	public static function hideMessage() {
		self::hide_message();
	}

	/**
	 * @deprecated deprecated @since version 3.2
	 *
	 * @param string $message
	 * @param string $type
	 */
	public static function addInstantMessage( $message, $type = '' ) {
		self::add_instant_message( $message, $type );
	}

	/**
	 * @deprecated deprecated @since version 3.2
	 *
	 */
	public static function addScript() {
		self::add_script();
	}

	/**
	 * @deprecated deprecated @since version 3.2
	 *
	 * @param string $id               An unique identifier for the message
	 * @param string $msg              The actual message
	 * @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
	 * @param bool   $hide             (optional) Enable the toggle link to permanently hide the notice
	 * @param bool   $fallback_message (optional) A message to show when the notice gets hidden
	 * @param bool   $fallback_type    (optional) The message type to use in the fallback message (@see $type)
	 * @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)
	 * @param bool   $admin_notice     (optional) Hook the rendering to the 'admin_notice' action
	 */
	public static function addMessage( $id, $msg, $type = '', $hide = true, $fallback_message = false, $fallback_type = false, $group = false, $admin_notice = false ) {
		$args = array(
			'id'               => $id,
			'msg'              => $msg,
			'type'             => $type,
			'hide'             => $hide,
			'message_fallback' => $fallback_message,
			'fallback_type'    => $fallback_type,
			'group'            => $group,
			'admin_notice'     => $admin_notice,
		);

		self::add_message( $args );
	}

	/**
	 * @deprecated deprecated @since version 3.2. Use ICL_AdminNotifier::display_instant_message()
	 *
	 * @param        $message
	 * @param string $type
	 * @param bool   $class
	 * @param bool   $return
	 *
	 * @return string
	 */
	public static function displayInstantMessage( $message, $type = 'information', $class = false, $return = false ) {
		return self::display_instant_message($message , $type, $class, $return);
	}

}

