/**
  * Output the message
  *
  * @since 0.1.0
  *
  * @param string $message The text of the message.
  * @param bool $error Optional. Whether to show as error or update. Default is error.
  * @param string $cap_check Optional. Minimum user capability to show nag to. Default is "activate_plugins"
  * @param string|bool $ignore_key Optional. The user meta key to use for storing if this message has been dismissed by current user or not. If false, it will be generated.
  *
  * @return string|void Admin notice if is_admin() and not dismissed.
  */
 public static function notice($message, $error = true, $cap_check = 'activate_plugins', $ignore_key = false)
 {
     if (is_admin() && (!defined('DOING_AJAX') || !DOING_AJAX)) {
         if (current_user_can($cap_check)) {
             $user_id = get_current_user_id();
             if (!is_string($ignore_key)) {
                 // cal_wd_ig_3911b2583433f696e5813a503bbb2e65
                 $ignore_key = 'cal_wd_ig_' . substr(md5($ignore_key), 0, 40);
             }
             self::$ignore_key = sanitize_key($ignore_key);
             $dissmised = get_user_meta($user_id, self::$ignore_key, true);
             if (!$dissmised) {
                 if ($error) {
                     $class = 'error';
                 } else {
                     $class = 'updated';
                 }
                 self::$nonce_field = wp_nonce_field(self::$nonce_action);
                 $out[] = sprintf('<div id="%1s" data-key="%2s" class="%3s notice is-dismissible"><p>', self::$ignore_key, self::$ignore_key, $class);
                 $out[] = $message;
                 $out[] = self::$nonce_field;
                 $out[] = '</p></div>';
                 add_action('admin_enqueue_scripts', array(__CLASS__, 'js_css'));
                 add_action('wp_ajax_caldera_warnings_dismissible_notice', array(__CLASS__, 'ajax_cb'));
                 return implode('', $out);
             }
         }
     }
 }
 /**
  * Output the message
  *
  * @since 0.1.0
  *
  * @param string $message The text of the message.
  * @param bool $error Optional. Whether to show as error or update. Default is error.
  * @param string $cap_check Optional. Minimum user capability to show nag to. Default is "activate_plugins"
  * @param string|bool $ignore_key Optional. The user meta key to use for storing if this message has been dismissed by current user or not. If false, it will be generated.
  *
  * @return string|void Admin notice if is_admin() and not dismissed.
  */
 public static function notice($message, $error = true, $cap_check = 'activate_plugins', $ignore_key = false)
 {
     if (!current_user_can($cap_check)) {
         return;
     }
     $user_id = get_current_user_id();
     if (!is_string($ignore_key)) {
         // cal_wd_ig_3911b2583433f696e5813a503bbb2e65
         $ignore_key = 'cal_wd_ig_' . substr(md5($ignore_key), 0, 40);
     }
     self::$ignore_key = sanitize_key($ignore_key);
     $dissmised = time() - get_user_meta($user_id, self::$ignore_key, time()) < 60 * 60 * 24 * 30;
     // Nag every 30 days
     if ($dissmised) {
         return;
     }
     if ($error) {
         $class = 'error';
     } else {
         $class = 'update-nag';
     }
     self::$nonce_field = wp_nonce_field(self::$nonce_action);
     $out[] = sprintf('<div id="%1s" data-key="%2s" class="%3s notice is-dismissible">', self::$ignore_key, self::$ignore_key, $class);
     $out[] = $message;
     $out[] = self::$nonce_field;
     $out[] = '</div>';
     return implode('', $out);
 }