$notice, 'on_pages' => $on_pages, 'error' => $error, 'time' => $time, 'dismiss' => $dismiss)); foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action('ws_plugin__s2member_during_enqueue_admin_notice', get_defined_vars()); unset($__refs, $__v); // Allow variables to be modified by reference. update_option('ws_plugin__s2member_notices', c_ws_plugin__s2member_utils_arrays::array_unique($notices)); } do_action('ws_plugin__s2member_after_enqueue_admin_notice', get_defined_vars()); } /** * Displays an administrative notice. * * @package s2Member\Admin_Notices * @since 3.5 * * @param string $notice String value of actual notice *(i.e., the message)*. * @param bool $error Optional. True if this notice is regarding an error. Defaults to false. * @param bool $dismiss Optional. If true, the notice will be displayed with a dismissal link. Defaults to false. */ public static function display_admin_notice($notice = '', $error = FALSE, $dismiss = FALSE) { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action('ws_plugin__s2member_before_display_admin_notice', get_defined_vars()); unset($__refs, $__v); // Allow variables to be modified by reference. if($dismiss) $dismissal_link = '
'. '[ dismiss ]'. '
'; if($notice && is_string($notice) && $error) { if($dismiss && !empty($dismissal_link)) $notice = $dismissal_link.$notice; echo '

'.wp_kses_post($notice).'

'; } else if($notice && is_string($notice)) { if($dismiss && !empty($dismissal_link)) $notice = $dismissal_link.$notice; echo '

'.wp_kses_post($notice).'

'; } do_action('ws_plugin__s2member_after_display_admin_notice', get_defined_vars()); } /** * Processes all administrative notices. * * @package s2Member\Admin_Notices * @since 3.5 * * @attaches-to ``add_action('admin_notices');`` * @attaches-to ``add_action('user_admin_notices');`` * @attaches-to ``add_action('network_admin_notices');`` * @todo Update to ``add_action('all_admin_notices');``. */ public static function admin_notices() { global $pagenow; // This holds the current page filename. do_action('ws_plugin__s2member_before_admin_notices', get_defined_vars()); if(is_admin() && is_array($notices = get_option('ws_plugin__s2member_notices')) && !empty($notices)) { $a = (is_blog_admin()) ? 'blog' : ''; $a = (is_user_admin()) ? 'user' : $a; $a = (is_network_admin()) ? 'network' : $a; $a = (!$a) ? 'blog' : $a; // Default blog admin. foreach($notices as $i => $notice) // Check several things about each notice. { //250510 Fixed for PHP 8.1+: safely normalize on_pages before foreach $notice = (array)$notice; $notice['on_pages'] = empty($notice['on_pages']) ? array('*') : (array)$notice['on_pages']; foreach($notice['on_pages'] as $page) { if(!preg_match('/^(.+?)\:/', $page)) // NO prefix? $page = 'blog:'.ltrim($page, ':'); // `blog:` $adms = preg_split('/\|/', preg_replace('/\:(.*)$/i', '', $page)); $page = preg_replace('/^([^\:]*)\:/i', '', $page); if(empty($adms) || in_array('*', $adms) || in_array($a, $adms)) if(!$page || '*' === $page || $pagenow === $page || @$_GET['page'] === $page) { if(strtotime('now') >= (int)$notice['time']) // Time to show it? { foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action('ws_plugin__s2member_during_admin_notices_before_display', get_defined_vars()); unset($__refs, $__v); // Allow variables to be modified by reference. if(!$notice['dismiss'] || (!empty($_GET['ws-plugin--s2member-dismiss-admin-notice']) && $_GET['ws-plugin--s2member-dismiss-admin-notice'] === md5($notice['notice']))) unset($notices[$i]); // Clear this administrative notice now? if(!$notice['dismiss'] || empty($_GET['ws-plugin--s2member-dismiss-admin-notice']) || $_GET['ws-plugin--s2member-dismiss-admin-notice'] !== md5($notice['notice'])) c_ws_plugin__s2member_admin_notices::display_admin_notice($notice['notice'], $notice['error'], $notice['dismiss']); do_action('ws_plugin__s2member_during_admin_notices_after_display', get_defined_vars()); } continue 2; // This notice processed; continue. } } } $notices = array_merge($notices); // Re-index array. foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $$__v; do_action('ws_plugin__s2member_during_admin_notices', get_defined_vars()); unset($__refs, $__v); // Allow variables to be modified by reference. update_option('ws_plugin__s2member_notices', $notices); } do_action('ws_plugin__s2member_after_admin_notices', get_defined_vars()); } } }