File "plugin-php-compat-check.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/cache/.wp-cli/wp-content/plugins/mojo-marketplace-wp-plugin/inc/plugin-php-compat-check.php
File size: 4.86 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Class that runs checks before loading possibly incompatible code.
*
* @package Mojo Marketplace
*/
/**
* Class Mojo_Plugin_PHP_Compat_Check
*
* This class is responsible for performing basic checks to see if the minimum requirements for the plugin have been met.
*/
class Mojo_Plugin_PHP_Compat_Check {
/**
* Callbacks for additional checks
*
* @var array
*/
public $callbacks = array();
/**
* Collection of errors
*
* @var \WP_Error
*/
public $errors;
/**
* A reference to the main plugin file
*
* @var string
*/
public $file;
/**
* Minimum PHP version required for this plugin
*
* @var string
*/
public $min_php_version;
/**
* Minimum WordPress version required for this plugin
*
* @var string
*/
public $min_wp_version;
/**
* Plugin name
*
* @var string
*/
public $name = '';
/**
* Required PHP extensions
*
* @var array
*/
public $req_php_extensions = array();
/**
* Setup our class properties
*
* @param string $file Plugin file
*/
public function __construct( $file ) {
$this->errors = new \WP_Error();
$this->file = $file;
$this->name = $this->get_plugin_name();
}
/**
* Get the plugin name from the plugin file headers
*
* @return string
*/
public function get_plugin_name() {
$plugin = get_file_data( $this->file, array( 'name' => 'Plugin Name' ) );
return isset( $plugin['name'] ) ? $plugin['name'] : '';
}
/**
* Check all our plugin requirements.
* Displays an admin notice and deactivates the plugin if all requirements are not met.
*/
public function check_plugin_requirements() {
if ( isset( $this->min_php_version ) ) {
$this->check_has_min_php_version();
}
if ( ! empty( $this->req_php_extensions ) ) {
$this->check_has_required_php_extensions();
}
if ( isset( $this->min_wp_version ) ) {
$this->check_has_min_wp_version();
}
if ( ! empty( $this->callbacks ) ) {
foreach ( $this->callbacks as $callback ) {
if ( is_callable( $callback ) ) {
call_user_func_array( $callback, array( $this ) );
}
}
}
if ( $this->has_errors() ) {
// Suppress 'Plugin Activated' notice
unset( $_GET['activate'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
$this->deactivate();
add_action( 'admin_notices', array( $this, 'admin_notices' ) );
}
}
/**
* Check if the minimum required PHP version is available
*/
public function check_has_min_php_version() {
if ( version_compare( PHP_VERSION, $this->min_php_version, '<' ) ) {
/* translators: 1: plugin name 2: minimum required PHP version, current PHP version */
$error_msg = sprintf( __( '%1$s requires PHP version %2$s or later. You are currently running version %3$s.', 'mojo-marketplace-wp-plugin' ), $this->name, $this->min_php_version, PHP_VERSION );
$error_msg .= esc_html__( ' Please contact your web host about upgrading PHP.', 'mojo-marketplace-wp-plugin' );
$this->errors->add( 'php_version', $error_msg );
}
}
/**
* Check if a required PHP extension is available.
* See http://www.php.net/manual/en/extensions.alphabetical.php for a full list.
*/
public function check_has_required_php_extensions() {
foreach ( $this->req_php_extensions as $extension ) {
if ( ! extension_loaded( $extension ) ) {
$this->errors->add(
'php_extension',
/* translators: 1: plugin name 2: required PHP extension */
sprintf( __( '%1$s requires the %2$s PHP extension.', 'mojo-marketplace-wp-plugin' ), $this->name, $extension )
);
}
}
}
/**
* Check if the minimum required WordPress version is available
*/
public function check_has_min_wp_version() {
global $wp_version;
if ( version_compare( $wp_version, $this->min_wp_version, '<' ) ) {
$this->errors->add(
'wp_version',
sprintf(
/* translators: 1: plugin name 2: minimum required WordPress version 3: current WordPress version */
__( '%1$s requires WordPress version %2$s or later. You are currently running version %3$s.', 'mojo-marketplace-wp-plugin' ),
$this->name,
$this->min_wp_version,
$wp_version
)
);
}
}
/**
* Check if any errors were encountered during our plugin checks
*
* @return bool
*/
public function has_errors() {
return (bool) count( $this->errors->errors );
}
/**
* Deactivate the plugin
*/
public function deactivate() {
require_once ABSPATH . '/wp-admin/includes/plugin.php';
if ( function_exists( 'deactivate_plugins' ) ) {
deactivate_plugins( $this->file );
}
}
/**
* Display error messages in the admin
*/
public function admin_notices() {
echo '<div class="error">';
foreach ( $this->errors->get_error_messages() as $msg ) {
echo '<p>' . esc_html( $msg ) . '</p>';
}
echo '<p>';
/* translators: plugin name */
printf( esc_html__( 'The "%s" plugin has been deactivated.', 'mojo-marketplace-wp-plugin' ), esc_html( $this->name ) );
echo '</p></div>';
}
}