• File: notice.php
  • Full Path: /home/matthif/www/wp-content/plugins/google-analytics-for-wordpress/includes/admin/notice.php
  • Date Modified: 01/24/2025 1:57 PM
  • File size: 6.12 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
/**
 * Notices admin class.
 *
 * Handles retrieving whether a particular notice has been dismissed or not,
 * as well as marking a notice as dismissed.
 *
 * @since 6.0.0
 *
 * @package MonsterInsights
 * @subpackage Notices
 * @author  Chris Christoff
 */

// Exit if accessed directly
if ( ! defined'ABSPATH' ) ) {
    exit;
}

final class 
MonsterInsights_Notice_Admin {

    
/**
     * Holds all dismissed notices
     *
     * @access public
     * @since 6.0.0
     * @var array $notices Array of dismissed notices.
     */
    
public $notices;

    
/**
     * Primary class constructor.
     *
     * @access public
     * @since 6.0.0
     */
    
public function __construct() {

        
// Populate $notices
        
$this->notices get_option'monsterinsights_notices' );
        if ( ! 
is_array$this->notices ) ) {
            
$this->notices = array();
        }

    }

    
/**
     * Checks if a given notice has been dismissed or not
     *
     * @access public
     *
     * @param string $notice Programmatic Notice Name
     *
     * @return bool Notice Dismissed
     * @since 6.0.0
     *
     */

    
public function is_dismissed$notice ) {
        if ( ! isset( 
$this->notices$notice ] ) ) {
            return 
false;
        }

        return 
true;

    }

    
/**
     * Marks the given notice as dismissed
     *
     * @access public
     *
     * @param string $notice Programmatic Notice Name
     *
     * @return null
     * @since 6.0.0
     *
     */
    
public function dismiss$notice ) {
        
$this->notices$notice ] = true;
        
update_option'monsterinsights_notices'$this->notices );

    }


    
/**
     * Marks a notice as not dismissed
     *
     * @access public
     *
     * @param string $notice Programmatic Notice Name
     *
     * @return null
     * @since 6.0.0
     *
     */
    
public function undismiss$notice ) {
        unset( 
$this->notices$notice ] );
        
update_option'monsterinsights_notices'$this->notices );

    }

    
/**
     * Displays an inline notice with some MonsterInsights styling.
     *
     * @access public
     *
     * @param string $notice Programmatic Notice Name
     * @param string $title Title
     * @param string $message Message
     * @param string $type Message Type (updated|warning|error) - green, yellow/orange and red respectively.
     * @param string $button_text Button Text (optional)
     * @param string $button_url Button URL (optional)
     * @param bool $is_dismissible User can Dismiss Message (default: false)
     *
     * @since 6.0.0
     *
     */
    
public function display_inline_notice$name$title$message$type 'success'$is_dismissible false$args = array() ) {
        
/* Available/Planned $args options
         * $args = array(
         *  'primary'    => array(
         *      'text'   => '',
         *      'url'    => '',
         *      'target' => '',
         *      'class'  => 'button button-primary',
         *  ),
         *  'secondary'  => array(
         *      'text'   => '',
         *      'url'    => '',
         *      'target' => '',
         *      'class'  => 'button button-secondary',
         *  ),
         *  'skip_message_escape' => true // note: This param is for internal use only. Do not use as a developer.
         * );
         */


        // Check if the notice is dismissible, and if so has been dismissed.
        
if ( $is_dismissible && $this->is_dismissed$name ) ) {
            
// Nothing to show here, return!
            
return '';
        }

        
$dismissible = ( $is_dismissible ) ? ' is-dismissible' '';

        
// Display inline notice
        
ob_start();
        
?>
        <div
            class="monsterinsights-notice <?php echo 'monsterinsights-' esc_attr$type ) . '-notice' esc_attr($dismissible); ?>"
            data-notice="<?php echo esc_attr$name ); ?>">
            <div
                class="monsterinsights-notice-icon <?php echo 'monsterinsights-' esc_attr$type ) . '-notice-icon' ?>">
            </div>
            <div
                class="monsterinsights-notice-text <?php echo 'monsterinsights-' esc_attr$type ) . '-notice-text' ?>">
                <?php
                
// Title
                
if ( ! empty ( $title ) ) {
                    
?>
                    <p class="monsterinsights-notice-title"><?php echo esc_html$title ); ?></p>
                    <?php
                
}

                
// Message
                
if ( ! empty( $message ) ) {
                    if ( empty( 
$args['skip_message_escape'] ) ) {
                        
?>
                        <p class="monsterinsights-notice-message"><?php echo esc_html$message ); ?></p>
                        <?php
                    
} else {
                        
?>
                        <p class="monsterinsights-notice-message"><?php echo $message// phpcs:ignore ?></p>
                        <?php
                    
}
                }

                
// Primary Button
                
if ( ! empty( $args['primary']['text'] ) ) {

                    
$text '';
                    if ( ! empty( 
$args['primary']['text'] ) ) {
                        
$text $args['primary']['text'];
                    }

                    
$url '#';
                    if ( ! empty( 
$args['primary']['url'] ) ) {
                        
$url $args['primary']['url'];
                    }

                    
$target '';
                    if ( ! empty( 
$args['primary']['target'] ) && $args['primary']['target'] === 'blank' ) {
                        
$target ' target="_blank" rel="noopener noreferrer"';
                    }

                    
$class 'button button-primary';
                    if ( ! empty( 
$args['primary']['class'] ) ) {
                        
$class ' class="' $args['primary']['class'] . '"';
                    }
                    
?>
                    <a href="<?php echo esc_url$url ); ?>"<?php echo esc_attr($target); ?><?php echo esc_attr($class); ?>><?php echo esc_html$text ); ?></a>
                    <?php
                
}

                
// Secondary Button
                
if ( ! empty( $args['secondary']['text'] ) ) {

                    
$text '';
                    if ( ! empty( 
$args['secondary']['text'] ) ) {
                        
$text $args['secondary']['text'];
                    }

                    
$url '#';
                    if ( ! empty( 
$args['secondary']['url'] ) ) {
                        
$url $args['secondary']['url'];
                    }

                    
$target '';
                    if ( ! empty( 
$args['secondary']['target'] ) && $args['secondary']['target'] === 'blank' ) {
                        
$target ' target="_blank" rel="noopener noreferrer"';
                    }

                    
$class 'button button-secondary';
                    if ( ! empty( 
$args['secondary']['class'] ) ) {
                        
$class ' class="' $args['secondary']['class'] . '"';
                    }
                    
?>
                    <a href="<?php echo esc_url$url ); ?>"<?php echo esc_attr($target); ?><?php echo esc_attr($class); ?>><?php echo esc_html$text ); ?></a>
                    <?php
                
}

                
// Dismiss Button
                
if ( $is_dismissible ) {
                    
?>
                    <button type="button" class="notice-dismiss<?php echo esc_attr($dismissible); ?>">
                        <span class="screen-reader-text">
                            <?php esc_html_e'Dismiss this notice''google-analytics-for-wordpress' ); ?>
                        </span>
                    </button>
                    <?php
                
}
                
?>
            </div>
        </div>
        <?php
        
return ob_get_clean();
    }
}