Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/popup-ma.../trunk/classes/Utils
File: Prerequisites.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* Prerequisites Utility
[2] Fix | Delete
*
[3] Fix | Delete
* @package PUM
[4] Fix | Delete
* @copyright Copyright (c) 2023, Code Atlantic LLC
[5] Fix | Delete
*/
[6] Fix | Delete
[7] Fix | Delete
/**
[8] Fix | Delete
* Prerequisite handler.
[9] Fix | Delete
*
[10] Fix | Delete
* @version 1.0.0
[11] Fix | Delete
*/
[12] Fix | Delete
class PUM_Utils_Prerequisites {
[13] Fix | Delete
[14] Fix | Delete
/**
[15] Fix | Delete
* Cache accessible across instances.
[16] Fix | Delete
*
[17] Fix | Delete
* @var array
[18] Fix | Delete
*/
[19] Fix | Delete
public static $cache = [];
[20] Fix | Delete
[21] Fix | Delete
/**
[22] Fix | Delete
* Array of checks to perform.
[23] Fix | Delete
*
[24] Fix | Delete
* @var array
[25] Fix | Delete
*/
[26] Fix | Delete
protected $checks = [];
[27] Fix | Delete
[28] Fix | Delete
/**
[29] Fix | Delete
* Array of detected failures.
[30] Fix | Delete
*
[31] Fix | Delete
* @var array
[32] Fix | Delete
*/
[33] Fix | Delete
protected $failures = [];
[34] Fix | Delete
[35] Fix | Delete
/**
[36] Fix | Delete
* Instantiate prerequisite checker.
[37] Fix | Delete
*
[38] Fix | Delete
* @param array $requirements Array of requirements.
[39] Fix | Delete
*/
[40] Fix | Delete
public function __construct( $requirements = [] ) {
[41] Fix | Delete
foreach ( $requirements as $arguments ) {
[42] Fix | Delete
switch ( $arguments['type'] ) {
[43] Fix | Delete
case 'php':
[44] Fix | Delete
$this->checks[] = wp_parse_args(
[45] Fix | Delete
$arguments,
[46] Fix | Delete
[
[47] Fix | Delete
'type' => 'php',
[48] Fix | Delete
'version' => '5.6',
[49] Fix | Delete
]
[50] Fix | Delete
);
[51] Fix | Delete
break;
[52] Fix | Delete
case 'plugin':
[53] Fix | Delete
$this->checks[] = wp_parse_args(
[54] Fix | Delete
$arguments,
[55] Fix | Delete
[
[56] Fix | Delete
'type' => 'plugin',
[57] Fix | Delete
'slug' => '',
[58] Fix | Delete
'name' => '',
[59] Fix | Delete
'version' => '',
[60] Fix | Delete
'check_installed' => false,
[61] Fix | Delete
'dep_label' => '',
[62] Fix | Delete
]
[63] Fix | Delete
);
[64] Fix | Delete
break;
[65] Fix | Delete
default:
[66] Fix | Delete
break;
[67] Fix | Delete
}
[68] Fix | Delete
}
[69] Fix | Delete
}
[70] Fix | Delete
[71] Fix | Delete
/**
[72] Fix | Delete
* Check requirements.
[73] Fix | Delete
*
[74] Fix | Delete
* @param boolean $return_on_fail Whether it should stop processing if one fails.
[75] Fix | Delete
*
[76] Fix | Delete
* @return bool
[77] Fix | Delete
*/
[78] Fix | Delete
public function check( $return_on_fail = false ) {
[79] Fix | Delete
$end_result = true;
[80] Fix | Delete
[81] Fix | Delete
foreach ( $this->checks as $check ) {
[82] Fix | Delete
$result = $this->check_handler( $check );
[83] Fix | Delete
[84] Fix | Delete
if ( false === $result ) {
[85] Fix | Delete
if ( true === $return_on_fail ) {
[86] Fix | Delete
return false;
[87] Fix | Delete
}
[88] Fix | Delete
[89] Fix | Delete
$end_result = false;
[90] Fix | Delete
}
[91] Fix | Delete
}
[92] Fix | Delete
[93] Fix | Delete
return $end_result;
[94] Fix | Delete
}
[95] Fix | Delete
[96] Fix | Delete
/**
[97] Fix | Delete
* Render notices when appropriate.
[98] Fix | Delete
*/
[99] Fix | Delete
public function setup_notices() {
[100] Fix | Delete
add_action( 'admin_notices', [ $this, 'render_notices' ] );
[101] Fix | Delete
}
[102] Fix | Delete
[103] Fix | Delete
/**
[104] Fix | Delete
* Handle individual checks by mapping them to methods.
[105] Fix | Delete
*
[106] Fix | Delete
* @param array $check Requirement check arguments.
[107] Fix | Delete
*
[108] Fix | Delete
* @return bool
[109] Fix | Delete
*/
[110] Fix | Delete
public function check_handler( $check ) {
[111] Fix | Delete
return method_exists( $this, 'check_' . $check['type'] ) ? $this->{'check_' . $check['type']}( $check ) : false;
[112] Fix | Delete
}
[113] Fix | Delete
[114] Fix | Delete
/**
[115] Fix | Delete
* Report failure notice to the queue.
[116] Fix | Delete
*
[117] Fix | Delete
* @param array $check_args Array of check arguments.
[118] Fix | Delete
*/
[119] Fix | Delete
public function report_failure( $check_args ) {
[120] Fix | Delete
$this->failures[] = $check_args;
[121] Fix | Delete
}
[122] Fix | Delete
[123] Fix | Delete
/**
[124] Fix | Delete
* Get a list of failures.
[125] Fix | Delete
*
[126] Fix | Delete
* @return array
[127] Fix | Delete
*/
[128] Fix | Delete
public function get_failures() {
[129] Fix | Delete
return $this->failures;
[130] Fix | Delete
}
[131] Fix | Delete
[132] Fix | Delete
/**
[133] Fix | Delete
* Check PHP version against args.
[134] Fix | Delete
*
[135] Fix | Delete
* @param array $check_args Array of args.
[136] Fix | Delete
*
[137] Fix | Delete
* @return bool
[138] Fix | Delete
*/
[139] Fix | Delete
public function check_php( $check_args ) {
[140] Fix | Delete
if ( false === version_compare( phpversion(), $check_args['version'], '>=' ) ) {
[141] Fix | Delete
$this->report_failure( $check_args );
[142] Fix | Delete
return false;
[143] Fix | Delete
}
[144] Fix | Delete
[145] Fix | Delete
return true;
[146] Fix | Delete
}
[147] Fix | Delete
[148] Fix | Delete
/**
[149] Fix | Delete
* Check plugin requirements.
[150] Fix | Delete
*
[151] Fix | Delete
* @param array $check_args Array of args.
[152] Fix | Delete
*
[153] Fix | Delete
* @return bool
[154] Fix | Delete
*/
[155] Fix | Delete
public function check_plugin( $check_args ) {
[156] Fix | Delete
$active = $this->plugin_is_active( $check_args['slug'] );
[157] Fix | Delete
[158] Fix | Delete
/**
[159] Fix | Delete
* The following checks are performed in this order for performance reasons.
[160] Fix | Delete
*
[161] Fix | Delete
* We start with most cached option, to least in hopes of a hit early.
[162] Fix | Delete
*
[163] Fix | Delete
* 1. If active and not checking version.
[164] Fix | Delete
* 2. If active and outdated.
[165] Fix | Delete
* 3. If not active and installed.
[166] Fix | Delete
* 4. If not installed
[167] Fix | Delete
*/
[168] Fix | Delete
if ( true === $active ) {
[169] Fix | Delete
// If required version is set & plugin is active, check that first.
[170] Fix | Delete
if ( isset( $check_args['version'] ) ) {
[171] Fix | Delete
$version = $this->get_plugin_data( $check_args['slug'], 'Version' );
[172] Fix | Delete
[173] Fix | Delete
// If its higher than the required version, we can bail now > true.
[174] Fix | Delete
if ( version_compare( $version, $check_args['version'], '>=' ) ) {
[175] Fix | Delete
return true;
[176] Fix | Delete
} else {
[177] Fix | Delete
// If not updated, report the failure and bail > false.
[178] Fix | Delete
$this->report_failure(
[179] Fix | Delete
array_merge(
[180] Fix | Delete
$check_args,
[181] Fix | Delete
[
[182] Fix | Delete
// Report not_updated status.
[183] Fix | Delete
'not_updated' => true,
[184] Fix | Delete
]
[185] Fix | Delete
)
[186] Fix | Delete
);
[187] Fix | Delete
return false;
[188] Fix | Delete
}
[189] Fix | Delete
} else {
[190] Fix | Delete
// If the plugin is active, with no required version, were done > true.
[191] Fix | Delete
return true;
[192] Fix | Delete
}
[193] Fix | Delete
}
[194] Fix | Delete
[195] Fix | Delete
if ( $check_args['check_installed'] ) {
[196] Fix | Delete
// Check if installed, if so the plugin is not activated.
[197] Fix | Delete
if ( $check_args['name'] === $this->get_plugin_data( $check_args['slug'], 'Name' ) ) {
[198] Fix | Delete
$this->report_failure(
[199] Fix | Delete
array_merge(
[200] Fix | Delete
$check_args,
[201] Fix | Delete
[
[202] Fix | Delete
// Report not_activated status.
[203] Fix | Delete
'not_activated' => true,
[204] Fix | Delete
]
[205] Fix | Delete
)
[206] Fix | Delete
);
[207] Fix | Delete
} else {
[208] Fix | Delete
$this->report_failure(
[209] Fix | Delete
array_merge(
[210] Fix | Delete
$check_args,
[211] Fix | Delete
[
[212] Fix | Delete
// Report not_installed status.
[213] Fix | Delete
'not_installed' => true,
[214] Fix | Delete
]
[215] Fix | Delete
)
[216] Fix | Delete
);
[217] Fix | Delete
}
[218] Fix | Delete
}
[219] Fix | Delete
[220] Fix | Delete
return false;
[221] Fix | Delete
}
[222] Fix | Delete
[223] Fix | Delete
/**
[224] Fix | Delete
* Internally cached get_plugin_data/get_file_data wrapper.
[225] Fix | Delete
*
[226] Fix | Delete
* @param string $slug Plugins `folder/file.php` slug.
[227] Fix | Delete
* @param string $header Specific plugin header needed.
[228] Fix | Delete
* @return mixed
[229] Fix | Delete
*/
[230] Fix | Delete
private function get_plugin_data( $slug, $header = null ) {
[231] Fix | Delete
if ( ! isset( static::$cache['get_plugin_data'][ $slug ] ) ) {
[232] Fix | Delete
$headers = \get_file_data(
[233] Fix | Delete
WP_PLUGIN_DIR . '/' . $slug,
[234] Fix | Delete
[
[235] Fix | Delete
'Name' => 'Plugin Name',
[236] Fix | Delete
'Version' => 'Version',
[237] Fix | Delete
],
[238] Fix | Delete
'plugin'
[239] Fix | Delete
);
[240] Fix | Delete
[241] Fix | Delete
static::$cache['get_plugin_data'][ $slug ] = $headers;
[242] Fix | Delete
}
[243] Fix | Delete
[244] Fix | Delete
$plugin_data = static::$cache['get_plugin_data'][ $slug ];
[245] Fix | Delete
[246] Fix | Delete
if ( empty( $header ) ) {
[247] Fix | Delete
return $plugin_data;
[248] Fix | Delete
}
[249] Fix | Delete
[250] Fix | Delete
return isset( $plugin_data[ $header ] ) ? $plugin_data[ $header ] : null;
[251] Fix | Delete
}
[252] Fix | Delete
[253] Fix | Delete
/**
[254] Fix | Delete
* Check if plugin is active.
[255] Fix | Delete
*
[256] Fix | Delete
* @param string $slug Slug to check for.
[257] Fix | Delete
*
[258] Fix | Delete
* @return bool
[259] Fix | Delete
*/
[260] Fix | Delete
protected function plugin_is_active( $slug ) {
[261] Fix | Delete
$active_plugins = get_option( 'active_plugins', [] );
[262] Fix | Delete
[263] Fix | Delete
return in_array( $slug, $active_plugins, true );
[264] Fix | Delete
}
[265] Fix | Delete
[266] Fix | Delete
[267] Fix | Delete
/**
[268] Fix | Delete
* Get php error message.
[269] Fix | Delete
*
[270] Fix | Delete
* @param array $failed_check_args Check arguments.
[271] Fix | Delete
*
[272] Fix | Delete
* @return string
[273] Fix | Delete
*/
[274] Fix | Delete
public function get_php_message( $failed_check_args ) {
[275] Fix | Delete
/* translators: 1. PHP Version */
[276] Fix | Delete
$message = __( 'This plugin requires <b>PHP %s</b> or higher in order to run.', 'popup-maker' );
[277] Fix | Delete
return sprintf( $message, $failed_check_args['version'] );
[278] Fix | Delete
}
[279] Fix | Delete
[280] Fix | Delete
/**
[281] Fix | Delete
* Get plugin error message.
[282] Fix | Delete
*
[283] Fix | Delete
* @param array $failed_check_args Get helpful error message.
[284] Fix | Delete
*
[285] Fix | Delete
* @return string
[286] Fix | Delete
*/
[287] Fix | Delete
public function get_plugin_message( $failed_check_args ) {
[288] Fix | Delete
$slug = $failed_check_args['slug'];
[289] Fix | Delete
// Without file path.
[290] Fix | Delete
$short_slug = explode( '/', $slug );
[291] Fix | Delete
$short_slug = $short_slug[0];
[292] Fix | Delete
$name = $failed_check_args['name'];
[293] Fix | Delete
$dep_label = $failed_check_args['dep_label'];
[294] Fix | Delete
[295] Fix | Delete
if ( isset( $failed_check_args['not_activated'] ) ) {
[296] Fix | Delete
$url = esc_url( wp_nonce_url( admin_url( 'plugins.php?action=activate&plugin=' . $slug ), 'activate-plugin_' . $slug ) );
[297] Fix | Delete
$link = '<a href="' . $url . '">' . __( 'activate it', 'popup-maker' ) . '</a>';
[298] Fix | Delete
[299] Fix | Delete
$text = sprintf(
[300] Fix | Delete
/* translators: 1. Plugin Name, 2. Required Plugin Name, 4. `activate it` link. */
[301] Fix | Delete
__( 'The plugin "%1$s" requires %2$s! Please %3$s to continue!', 'popup-maker' ),
[302] Fix | Delete
$dep_label,
[303] Fix | Delete
'<strong>' . $name . '</strong>',
[304] Fix | Delete
$link
[305] Fix | Delete
);
[306] Fix | Delete
} elseif ( isset( $failed_check_args['not_updated'] ) ) {
[307] Fix | Delete
$url = esc_url( wp_nonce_url( admin_url( 'update.php?action=upgrade-plugin&plugin=' . $slug ), 'upgrade-plugin_' . $slug ) );
[308] Fix | Delete
$link = '<a href="' . $url . '">' . __( 'update it', 'popup-maker' ) . '</a>';
[309] Fix | Delete
[310] Fix | Delete
$text = sprintf(
[311] Fix | Delete
/* translators: 1. Plugin Name, 2. Required Plugin Name, 3. Version number, 4. `update it` link. */
[312] Fix | Delete
__( 'The plugin "%1$s" requires %2$s v%3$s or higher! Please %4$s to continue!', 'popup-maker' ),
[313] Fix | Delete
$dep_label,
[314] Fix | Delete
'<strong>' . $name . '</strong>',
[315] Fix | Delete
'<strong>' . $failed_check_args['version'] . '</strong>',
[316] Fix | Delete
$link
[317] Fix | Delete
);
[318] Fix | Delete
} else {
[319] Fix | Delete
$url = esc_url( wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $short_slug ), 'install-plugin_' . $short_slug ) );
[320] Fix | Delete
$link = '<a href="' . $url . '">' . __( 'install it', 'popup-maker' ) . '</a>';
[321] Fix | Delete
[322] Fix | Delete
$text = sprintf(
[323] Fix | Delete
/* translators: 1. Plugin Name, 2. Required Plugin Name, 3. `install it` link. */
[324] Fix | Delete
__( 'The plugin "%1$s" requires %2$s! Please %3$s to continue!', 'popup-maker' ),
[325] Fix | Delete
$dep_label,
[326] Fix | Delete
'<strong>' . $name . '</strong>',
[327] Fix | Delete
$link
[328] Fix | Delete
);
[329] Fix | Delete
}
[330] Fix | Delete
[331] Fix | Delete
return $text;
[332] Fix | Delete
}
[333] Fix | Delete
[334] Fix | Delete
/**
[335] Fix | Delete
* Render needed admin notices.
[336] Fix | Delete
*
[337] Fix | Delete
* @return void
[338] Fix | Delete
*/
[339] Fix | Delete
public function render_notices() {
[340] Fix | Delete
foreach ( $this->failures as $failure ) {
[341] Fix | Delete
$class = 'notice notice-error';
[342] Fix | Delete
$message = method_exists( $this, 'get_' . $failure['type'] . '_message' ) ? $this->{'get_' . $failure['type'] . '_message'}( $failure ) : false;
[343] Fix | Delete
[344] Fix | Delete
/* phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped */
[345] Fix | Delete
echo sprintf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), $message );
[346] Fix | Delete
}
[347] Fix | Delete
}
[348] Fix | Delete
}
[349] Fix | Delete
[350] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function