• File: compatibility-check.php
  • Full Path: /home/matthif/www/wp-content/plugins/google-analytics-for-wordpress/includes/compatibility-check.php
  • Date Modified: 01/24/2025 1:57 PM
  • File size: 11.51 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

if ( ! class_exists'MonsterInsights_Compatibility_Check' ) ) {
    
/**
     * Check PHP and WP compatibility
     *
     * @since 8.0.0
     */
    
class MonsterInsights_Compatibility_Check {
        
/**
         * Holds singleton instance
         *
         * @since 8.0.0
         * @var MonsterInsights_Compatibility_Check
         */
        
private static $instance;

        
/**
         * Return Singleton instance
         *
         * @return MonsterInsights_Compatibility_Check
         * @since 8.0.0
         */
        
public static function get_instance() {
            if ( empty( 
self::$instance ) ) {
                
self::$instance = new self();
            }

            return 
self::$instance;
        }

        
/**
         * @since 8.0.0
         * @var array {
         *     PHP Version requirement and recommendation
         *
         * @type string $required Halt and deactivate plugin if PHP is under this version
         * @type string $warning Display undismissable warning if PHP is under this version
         * @type string $recommended Display undismissable warning if PHP is under this version
         * }
         */
        
private $compatible_php_version = array(
            
'required'    => '7.2',
            
'warning'     => '7.0',
            
'recommended' => false,
        );

        
/**
         * @since 8.0.0
         * @var array {
         *     WP Version requirement and recommendation
         *
         * @type string $required Halt and deactivate plugin if WP is under this version
         * @type string $warning Display undismissable warning if WP is under this version
         * @type string $recommended Display undismissable warning if WP is under this version
         * }
         */
        
private $compatible_wp_version = array(
            
'required'    => '5.6',
            
'warning'     => '6.0',
            
'recommended' => false,
        );

        
/**
         * Private constructor
         *
         * @since 8.0.0
         */
        
private function __construct() {
            
add_filter'monsterinsights_compatible_php_version', array(
                
$this,
                
'filter_compatible_php_version'
            
), 10);
            
add_filter'monsterinsights_compatible_wp_version', array(
                
$this,
                
'filter_compatible_wp_version'
            
), 10);
        }

        
/**
         * Return the strictest php compatibility versions
         *
         * @param array $version {
         *     PHP Version requirement and recommendation
         *
         * @type string $required Halt and deactivate plugin if PHP is under this version
         * @type string $warning Display undismissable warning if PHP is under this version
         * @type string $recommended Display undismissable warning if PHP is under this version
         * }
         *
         * @return array {
         *     PHP Version requirement and recommendation
         *
         * @type string $required Halt and deactivate plugin if PHP is under this version
         * @type string $warning Display undismissable warning if PHP is under this version
         * @type string $recommended Display undismissable warning if PHP is under this version
         * }
         * @since 8.0.0
         */
        
public function filter_compatible_php_version$version ) {
            if ( ! 
$version || version_compare$version['required'], $this->compatible_php_version['required'], '<' ) ) {
                return 
$this->compatible_php_version;
            }

            return 
$version;
        }

        
/**
         * Return the strictest WP compatibility versions
         *
         * @param array $version {
         *     WP Version requirement and recommendation
         *
         * @type string $required Halt and deactivate plugin if WP is under this version
         * @type string $warning Display undismissable warning if WP is under this version
         * @type string $recommended Display undismissable warning if WP is under this version
         * }
         *
         * @return array {
         *     WP Version requirement and recommendation
         *
         * @type string $required Halt and deactivate plugin if WP is under this version
         * @type string $warning Display undismissable warning if WP is under this version
         * @type string $recommended Display undismissable warning if WP is under this version
         * }
         * @since 8.0.0
         */
        
public function filter_compatible_wp_version$version ) {
            if ( ! 
$version || version_compare$version['required'], $this->compatible_wp_version['required'], '<' ) ) {
                return 
$this->compatible_wp_version;
            }

            return 
$version;
        }

        
/**
         * Return required, warning and recommended PHP versions
         *
         * @return array {
         *     PHP Version requirement and recommendation
         *
         * @type string $required Halt and deactivate plugin if PHP is under this version
         * @type string $warning Display undismissable warning if PHP is under this version
         * @type string $recommended Display undismissable warning if PHP is under this version
         * }
         * @since 8.0.0
         */
        
public function get_compatible_php_version() {
            return 
apply_filters'monsterinsights_compatible_php_version'$this->compatible_php_version );
        }

        
/**
         * Check to see if PHP version meets the minimum required version
         *
         * @return bool
         * @since 8.0.0
         */
        
public function is_php_compatible() {
            
$compatible_php_version $this->get_compatible_php_version();

            return empty( 
$compatible_php_version['required'] ) || version_comparephpversion(), $compatible_php_version['required'], '>=' );
        }

        
/**
         * Return required, warning and recommended WP versions
         *
         * @return array {
         *     WP Version requirement and recommendation
         *
         * @type string $required Halt and deactivate plugin if WP is under this version
         * @type string $warning Display undismissable warning if WP is under this version
         * @type string $recommended Display undismissable warning if WP is under this version
         * }
         * @since 8.0.0
         */
        
public function get_compatible_wp_version() {
            return 
apply_filters'monsterinsights_compatible_wp_version'$this->compatible_wp_version );
        }

        
/**
         * Check to see if WP version meets the minimum required version
         *
         * @return bool
         * @since 8.0.0
         */
        
public function is_wp_compatible() {
            global 
$wp_version;
            
$compatible_wp_version $this->get_compatible_wp_version();

            return empty( 
$compatible_wp_version['required'] ) || version_compare$wp_version$compatible_wp_version['required'], '>=' );
        }

        
/**
         * Check to see if the main plugin or any other add-ons have displayed the required version notice
         *
         * @return bool
         * @since 8.0.0
         */
        
private function is_notice_already_active() {
            return 
defined'MONSTERINSIGHTS_VERSION_NOTICE_ACTIVE' ) && MONSTERINSIGHTS_VERSION_NOTICE_ACTIVE;
        }

        
/**
         * Set global constant so that main plugin or other add-ons are aware that the version notice
         * has been set for display already
         *
         * @return void
         * @since 8.0.0
         */
        
private function set_notice_active() {
            if ( ! 
defined'MONSTERINSIGHTS_VERSION_NOTICE_ACTIVE' ) ) {
                
define'MONSTERINSIGHTS_VERSION_NOTICE_ACTIVE'true );
            }
        }

        
/**
         * Display version notice in admin area if:
         * 1. Minimum PHP and WP versions are not met
         * 2. The notice has been displayed elsewhere (in case there are multiple add-ons)
         *
         * @return void
         * @since 8.0.0
         */
        
public function maybe_display_notice() {
            if ( 
defined'MONSTERINSIGHTS_FORCE_ACTIVATION' ) && MONSTERINSIGHTS_FORCE_ACTIVATION ) {
                return;
            }

            if ( 
$this->is_notice_already_active() ) {
                return;
            }

            if ( ! 
$this->is_php_compatible() ) {
                
add_action'admin_notices', array( $this'display_php_notice' ) );
            }

            if ( ! 
$this->is_wp_compatible() ) {
                
add_action'admin_notices', array( $this'display_wp_notice' ) );
            }
        }

        
/**
         * Deactivate plugin if minimum PHP and WP requirements are not met.
         *
         * @param $plugin
         *
         * @return void
         * @since 8.0.0
         */
        
public function maybe_deactivate_plugin$plugin ) {
            if ( 
defined'MONSTERINSIGHTS_FORCE_ACTIVATION' ) && MONSTERINSIGHTS_FORCE_ACTIVATION ) {
                return;
            }

            
$url                    admin_url'plugins.php' );
            
$compatible_php_version $this->get_compatible_php_version();
            
$compatible_wp_version  $this->get_compatible_wp_version();

            if ( ! empty( 
$compatible_php_version['required'] ) && ! $this->is_php_compatible() ) {
                
deactivate_plugins$plugin );
                
// Translators: HTML strong tag starts, PHP version number, HTML string tag end, plugins page Link tag starts with url and plugins page link tag ends.
                
wp_die(
                    
sprintfesc_html__'Sorry, but your current version of PHP does not meet the minimum required version %1$s%2$s%3$s or newer to run MonsterInsights properly. For information on how to upgrade your PHP version, contact your web host. %4$sClick here to return to the Dashboard%5$s.''google-analytics-for-wordpress' ),
                        
'<strong>',
                        
$compatible_php_version['required'], // phpcs:ignore
                        
'</strong>',
                        
'<a target="_blank" href="' esc_url($url) . '">',
                        
'</a>'
                    
)
                );
            }

            if ( ! empty( 
$compatible_wp_version['required'] ) && ! $this->is_wp_compatible() ) {
                
deactivate_pluginsplugin_basename__FILE__ ) );
                
// Translators: HTML strong tag starts, WP version number, HTML string tag end, plugins page Link tag starts with url and plugins page link tag ends.
                
wp_die(
                    
sprintf(
                        
esc_html__'Sorry, but your WordPress version is not %1$s%2$s%3$s or newer. Please update your WordPress version and then activate MonsterInsights. For help on how to update your WordPress %4$sclick here%5$s.''google-analytics-for-wordpress' ),
                        
'<strong>',
                        
$compatible_wp_version['required'], // phpcs:ignore
                        
'</strong>',
                        
'<a target="_blank" href="' esc_url($url) . '">',
                        
'</a>'
                    
)
                );
            }
        }

        
/**
         * Output a nag notice if the user has an out of date PHP version installed
         *
         * @return void
         * @since 8.0.0
         */
        
public function display_php_notice() {
            
$url admin_url'plugins.php' );
            
// Check for MS dashboard
            
if ( is_network_admin() ) {
                
$url network_admin_url'plugins.php' );
            }

            
$compatible_php_version $this->get_compatible_php_version();
            if ( empty( 
$compatible_php_version['required'] ) ) {
                return;
            }

            
$this->set_notice_active();
            
?>
            <div class="error">
                <p>
                    <?php
                    
// Translators: HTML strong tag starts, PHP version number, HTML string tag end, plugins page Link tag starts with url and plugins page link tag ends.
                    
echo sprintf(
                        
esc_html__'Sorry, but your current version of PHP does not meet the minimum required version %1$s%2$s%3$s or newer to run MonsterInsights properly. For information on how to upgrade your PHP version, contact your web host. %4$sClick here to return to the Dashboard%5$s.''google-analytics-for-wordpress' ),
                        
'<strong>',
                        
$compatible_php_version['required'], // phpcs:ignore
                        
'</strong>',
                        
'<a target="_blank" href="' $url '">'// phpcs:ignore
                        
'</a>' );
                    
?>
                </p>
            </div>
            <?php
        
}

        
/**
         * Output a nag notice if the user has an out of date WP version installed
         *
         * @return void
         * @since 8.0.0
         */
        
public function display_wp_notice() {
            
$url monsterinsights_get_url'notice''wrong-wp-version''https://www.wpbeginner.com/beginners-guide/ultimate-guide-to-upgrade-wordpress-for-beginners-infograph/' );

            
$compatible_wp_version $this->get_compatible_wp_version();
            if ( empty( 
$compatible_wp_version['required'] ) ) {
                return;
            }

            
$this->set_notice_active();
            
?>
            <div class="error">
                <p>
                    <?php
                    
// Translators: Make version number bold and add a link to return to the plugins page.
                    
echo sprintf(
                        
esc_html__'Sorry, but your WordPress version is not %1$s%2$s%3$s or newer. Please update your WordPress version and then activate MonsterInsights. For help on how to update your WordPress %4$sclick here%5$s.''google-analytics-for-wordpress' ),
                        
'<strong>',
                        
$compatible_wp_version['required'], // phpcs:ignore
                        
'</strong>',
                        
'<a target="_blank" href="' $url '">'// phpcs:ignore
                        
'</a>'
                    
);
                    
?>
                </p>
            </div>
            <?php
        
}
    }
}