errors[] = $message; break; case 'message': $this->messages[] = $message; break; case 'warning': $this->warnings[] = $message; break; } } /** * Add footer link to specific ( errors|messages|wanrnings ) block * * @author peshkov@UD */ public function add_action_link( $link, $type = 'error' ) { switch( $type ) { case 'error': $this->action_links[ 'errors' ][] = $link; break; case 'message': $this->action_links[ 'messages' ][] = $link; break; case 'message': $this->action_links[ 'warnings' ][] = $link; break; } } /** * Determine if errors exist * * @author peshkov@UD */ public function has_errors() { return !empty( $this->errors ) ? true : false; } /** * Renders admin notes in case there are errors or notices on bootstrap init * * @author peshkov@UD */ public function admin_notices() { global $wp_version; //** Don't show the message if the user has no enough permissions. */ if ( ! function_exists( 'wp_get_current_user' ) ) { require_once( ABSPATH . 'wp-includes/pluggable.php' ); } if( empty( $this->args['type'] ) || ( $this->args['type'] == 'plugin' && !current_user_can( 'activate_plugins' ) ) || ( $this->args['type'] == 'theme' && !current_user_can( 'switch_themes' ) ) ) { return; } //** Don't show the message if on a multisite and the user isn't a super user. */ if ( is_multisite() && ! is_super_admin() ) { return; } //** Ignore messages on TGM Plugin Activation page */ if( TGM_Plugin_Activation::get_instance()->is_tgmpa_page() ) { return; } $errors = apply_filters( 'ud:errors:admin_notices', $this->errors, $this->args ); $messages = apply_filters( 'ud:messages:admin_notices', $this->messages, $this->args ); $warnings = apply_filters( 'ud:warnings:admin_notices', $this->warnings, $this->args ); if( !empty( $errors ) || !empty( $messages ) || !empty( $warnings ) ) { echo ""; } //** Errors Block */ if( !empty( $errors ) && is_array( $errors ) ) { $message = ''; $message = sprintf( __( '

%s is not active due to following errors:

%s', $this->domain ), $this->name, $message ); if( !empty( $this->action_links[ 'errors' ] ) && is_array( $this->action_links[ 'errors' ] ) ) { $message .= '

' . implode( ' | ', $this->action_links[ 'errors' ] ) . '

'; } echo '
' . $message . '
'; } //** Determine if warning has been dismissed */ $warning_dismissed = get_option( ( 'dismissed_warning_' . sanitize_key( $this->name ) ) ); $show_warnings = $this->check_dismiss_time( $warning_dismissed ); if ( $show_warnings && ! empty( $warnings ) && is_array( $warnings ) ) { //** Warnings Block */ $message = ''; $message = sprintf( __( '

%s has the following warnings:

%s', $this->domain ), $this->name, $message ); if( $this->dismiss ) { $this->action_links[ 'warnings' ][] = '' . __( 'Dismiss this warning', $this->domain ) . ''; } if( !empty( $this->action_links[ 'warnings' ] ) && is_array( $this->action_links[ 'warnings' ] ) ) { $message .= '

' . implode( ' | ', $this->action_links[ 'warnings' ] ) . '

'; } echo '
' . $message . '
'; } //** Determine if message has been dismissed */ $message_dismissed = get_option( ( 'dismissed_notice_' . sanitize_key( $this->name ) ) ); if ( empty( $message_dismissed ) ) { //** Notices Block */ if( !empty( $messages ) && is_array( $messages ) ) { $message = ''; if( !empty( $errors ) ) { $message = sprintf( __( '

%s has the following additional notices:

%s', $this->domain ), $this->name, $message ); } else { $message = sprintf( __( '

%s is active, but has the following notices:

%s', $this->domain ), $this->name, $message ); } if( $this->dismiss ) { $this->action_links[ 'messages' ][] = '' . __( 'Dismiss this notice', $this->domain ) . ''; } $message .= '

' . implode( ' | ', $this->action_links[ 'messages' ] ) . '

'; echo '
' . $message . '
'; } } if ( $show_warnings || empty( $message_dismissed ) ) { //enqueue dismiss js for ajax requests $script_path = Utility::path( 'static/scripts/ud-dismiss.js', 'url' ); wp_enqueue_script( "ud-dismiss", $script_path, array( 'jquery' ) ); wp_localize_script( "ud-dismiss", "_ud_vars", array( "ajaxurl" => admin_url( 'admin-ajax.php' ), ) ); } } /** * dismiss the notice ajax callback * @throws \Exception */ public function dismiss_notices(){ $response = array( 'success' => '0', 'error' => __( 'There was an error in request.', $this->domain ), ); $error = false; if( empty($_POST['key']) ) { $response['error'] = __( 'Invalid key', $this->domain ); $error = true; } if ( ! $error && update_option( ( $_POST['key'] ), time() ) ) { $response['success'] = '1'; } wp_send_json( $response ); } /** * Check dismiss notice timestamp if greater than 24 hrs * * @param string $time * * @return bool */ public function check_dismiss_time( $time = '' ) { if( empty( $time ) ) { return true; } $current_time = time(); $diff = $current_time - 86400; if ( $diff > (int)$time ) { return true; } return false; } } } }