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

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-inclu...
File: class-wp-plugin-dependencies.php
foreach ( $dependencies as $dependency ) {
[500] Fix | Delete
if ( false === self::$plugin_dirnames[ $dependency ] || is_plugin_inactive( self::$plugin_dirnames[ $dependency ] ) ) {
[501] Fix | Delete
$inactive_dependencies[] = $dependency;
[502] Fix | Delete
}
[503] Fix | Delete
}
[504] Fix | Delete
[505] Fix | Delete
if ( ! empty( $inactive_dependencies ) ) {
[506] Fix | Delete
$inactive_dependency_names = array_map(
[507] Fix | Delete
function ( $dependency ) {
[508] Fix | Delete
if ( isset( self::$dependency_api_data[ $dependency ]['Name'] ) ) {
[509] Fix | Delete
$inactive_dependency_name = self::$dependency_api_data[ $dependency ]['Name'];
[510] Fix | Delete
} else {
[511] Fix | Delete
$inactive_dependency_name = $dependency;
[512] Fix | Delete
}
[513] Fix | Delete
return $inactive_dependency_name;
[514] Fix | Delete
},
[515] Fix | Delete
$inactive_dependencies
[516] Fix | Delete
);
[517] Fix | Delete
[518] Fix | Delete
$status['errorCode'] = 'inactive_dependencies';
[519] Fix | Delete
$status['errorMessage'] = sprintf(
[520] Fix | Delete
/* translators: %s: A list of inactive dependency plugin names. */
[521] Fix | Delete
__( 'The following plugins must be activated first: %s.' ),
[522] Fix | Delete
implode( ', ', $inactive_dependency_names )
[523] Fix | Delete
);
[524] Fix | Delete
$status['errorData'] = array_combine( $inactive_dependencies, $inactive_dependency_names );
[525] Fix | Delete
[526] Fix | Delete
wp_send_json_error( $status );
[527] Fix | Delete
}
[528] Fix | Delete
[529] Fix | Delete
$status['message'] = __( 'All required plugins are installed and activated.' );
[530] Fix | Delete
wp_send_json_success( $status );
[531] Fix | Delete
}
[532] Fix | Delete
[533] Fix | Delete
/**
[534] Fix | Delete
* Gets data for installed plugins.
[535] Fix | Delete
*
[536] Fix | Delete
* @since 6.5.0
[537] Fix | Delete
*
[538] Fix | Delete
* @return array An array of plugin data.
[539] Fix | Delete
*/
[540] Fix | Delete
protected static function get_plugins() {
[541] Fix | Delete
if ( is_array( self::$plugins ) ) {
[542] Fix | Delete
return self::$plugins;
[543] Fix | Delete
}
[544] Fix | Delete
[545] Fix | Delete
require_once ABSPATH . '/wp-admin/includes/plugin.php';
[546] Fix | Delete
self::$plugins = get_plugins();
[547] Fix | Delete
[548] Fix | Delete
return self::$plugins;
[549] Fix | Delete
}
[550] Fix | Delete
[551] Fix | Delete
/**
[552] Fix | Delete
* Reads and stores dependency slugs from a plugin's 'Requires Plugins' header.
[553] Fix | Delete
*
[554] Fix | Delete
* @since 6.5.0
[555] Fix | Delete
*/
[556] Fix | Delete
protected static function read_dependencies_from_plugin_headers() {
[557] Fix | Delete
self::$dependencies = array();
[558] Fix | Delete
self::$dependency_slugs = array();
[559] Fix | Delete
self::$dependent_slugs = array();
[560] Fix | Delete
$plugins = self::get_plugins();
[561] Fix | Delete
foreach ( $plugins as $plugin => $header ) {
[562] Fix | Delete
if ( '' === $header['RequiresPlugins'] ) {
[563] Fix | Delete
continue;
[564] Fix | Delete
}
[565] Fix | Delete
[566] Fix | Delete
$dependency_slugs = self::sanitize_dependency_slugs( $header['RequiresPlugins'] );
[567] Fix | Delete
self::$dependencies[ $plugin ] = $dependency_slugs;
[568] Fix | Delete
self::$dependency_slugs = array_merge( self::$dependency_slugs, $dependency_slugs );
[569] Fix | Delete
[570] Fix | Delete
$dependent_slug = self::convert_to_slug( $plugin );
[571] Fix | Delete
self::$dependent_slugs[ $plugin ] = $dependent_slug;
[572] Fix | Delete
}
[573] Fix | Delete
self::$dependency_slugs = array_unique( self::$dependency_slugs );
[574] Fix | Delete
}
[575] Fix | Delete
[576] Fix | Delete
/**
[577] Fix | Delete
* Sanitizes slugs.
[578] Fix | Delete
*
[579] Fix | Delete
* @since 6.5.0
[580] Fix | Delete
*
[581] Fix | Delete
* @param string $slugs A comma-separated string of plugin dependency slugs.
[582] Fix | Delete
* @return array An array of sanitized plugin dependency slugs.
[583] Fix | Delete
*/
[584] Fix | Delete
protected static function sanitize_dependency_slugs( $slugs ) {
[585] Fix | Delete
$sanitized_slugs = array();
[586] Fix | Delete
$slugs = explode( ',', $slugs );
[587] Fix | Delete
[588] Fix | Delete
foreach ( $slugs as $slug ) {
[589] Fix | Delete
$slug = trim( $slug );
[590] Fix | Delete
[591] Fix | Delete
/**
[592] Fix | Delete
* Filters a plugin dependency's slug before matching to
[593] Fix | Delete
* the WordPress.org slug format.
[594] Fix | Delete
*
[595] Fix | Delete
* Can be used to switch between free and premium plugin slugs, for example.
[596] Fix | Delete
*
[597] Fix | Delete
* @since 6.5.0
[598] Fix | Delete
*
[599] Fix | Delete
* @param string $slug The slug.
[600] Fix | Delete
*/
[601] Fix | Delete
$slug = apply_filters( 'wp_plugin_dependencies_slug', $slug );
[602] Fix | Delete
[603] Fix | Delete
// Match to WordPress.org slug format.
[604] Fix | Delete
if ( preg_match( '/^[a-z0-9]+(-[a-z0-9]+)*$/mu', $slug ) ) {
[605] Fix | Delete
$sanitized_slugs[] = $slug;
[606] Fix | Delete
}
[607] Fix | Delete
}
[608] Fix | Delete
$sanitized_slugs = array_unique( $sanitized_slugs );
[609] Fix | Delete
sort( $sanitized_slugs );
[610] Fix | Delete
[611] Fix | Delete
return $sanitized_slugs;
[612] Fix | Delete
}
[613] Fix | Delete
[614] Fix | Delete
/**
[615] Fix | Delete
* Gets the filepath of installed dependencies.
[616] Fix | Delete
* If a dependency is not installed, the filepath defaults to false.
[617] Fix | Delete
*
[618] Fix | Delete
* @since 6.5.0
[619] Fix | Delete
*
[620] Fix | Delete
* @return array An array of install dependencies filepaths, relative to the plugins directory.
[621] Fix | Delete
*/
[622] Fix | Delete
protected static function get_dependency_filepaths() {
[623] Fix | Delete
if ( is_array( self::$dependency_filepaths ) ) {
[624] Fix | Delete
return self::$dependency_filepaths;
[625] Fix | Delete
}
[626] Fix | Delete
[627] Fix | Delete
if ( null === self::$dependency_slugs ) {
[628] Fix | Delete
return array();
[629] Fix | Delete
}
[630] Fix | Delete
[631] Fix | Delete
self::$dependency_filepaths = array();
[632] Fix | Delete
[633] Fix | Delete
$plugin_dirnames = self::get_plugin_dirnames();
[634] Fix | Delete
foreach ( self::$dependency_slugs as $slug ) {
[635] Fix | Delete
if ( isset( $plugin_dirnames[ $slug ] ) ) {
[636] Fix | Delete
self::$dependency_filepaths[ $slug ] = $plugin_dirnames[ $slug ];
[637] Fix | Delete
continue;
[638] Fix | Delete
}
[639] Fix | Delete
[640] Fix | Delete
self::$dependency_filepaths[ $slug ] = false;
[641] Fix | Delete
}
[642] Fix | Delete
[643] Fix | Delete
return self::$dependency_filepaths;
[644] Fix | Delete
}
[645] Fix | Delete
[646] Fix | Delete
/**
[647] Fix | Delete
* Retrieves and stores dependency plugin data from the WordPress.org Plugin API.
[648] Fix | Delete
*
[649] Fix | Delete
* @since 6.5.0
[650] Fix | Delete
*
[651] Fix | Delete
* @global string $pagenow The filename of the current screen.
[652] Fix | Delete
*
[653] Fix | Delete
* @return array|void An array of dependency API data, or void on early exit.
[654] Fix | Delete
*/
[655] Fix | Delete
protected static function get_dependency_api_data() {
[656] Fix | Delete
global $pagenow;
[657] Fix | Delete
[658] Fix | Delete
if ( ! is_admin() || ( 'plugins.php' !== $pagenow && 'plugin-install.php' !== $pagenow ) ) {
[659] Fix | Delete
return;
[660] Fix | Delete
}
[661] Fix | Delete
[662] Fix | Delete
if ( is_array( self::$dependency_api_data ) ) {
[663] Fix | Delete
return self::$dependency_api_data;
[664] Fix | Delete
}
[665] Fix | Delete
[666] Fix | Delete
$plugins = self::get_plugins();
[667] Fix | Delete
self::$dependency_api_data = (array) get_site_transient( 'wp_plugin_dependencies_plugin_data' );
[668] Fix | Delete
foreach ( self::$dependency_slugs as $slug ) {
[669] Fix | Delete
// Set transient for individual data, remove from self::$dependency_api_data if transient expired.
[670] Fix | Delete
if ( ! get_site_transient( "wp_plugin_dependencies_plugin_timeout_{$slug}" ) ) {
[671] Fix | Delete
unset( self::$dependency_api_data[ $slug ] );
[672] Fix | Delete
set_site_transient( "wp_plugin_dependencies_plugin_timeout_{$slug}", true, 12 * HOUR_IN_SECONDS );
[673] Fix | Delete
}
[674] Fix | Delete
[675] Fix | Delete
if ( isset( self::$dependency_api_data[ $slug ] ) ) {
[676] Fix | Delete
if ( false === self::$dependency_api_data[ $slug ] ) {
[677] Fix | Delete
$dependency_file = self::get_dependency_filepath( $slug );
[678] Fix | Delete
[679] Fix | Delete
if ( false === $dependency_file ) {
[680] Fix | Delete
self::$dependency_api_data[ $slug ] = array( 'Name' => $slug );
[681] Fix | Delete
} else {
[682] Fix | Delete
self::$dependency_api_data[ $slug ] = array( 'Name' => $plugins[ $dependency_file ]['Name'] );
[683] Fix | Delete
}
[684] Fix | Delete
continue;
[685] Fix | Delete
}
[686] Fix | Delete
[687] Fix | Delete
// Don't hit the Plugin API if data exists.
[688] Fix | Delete
if ( ! empty( self::$dependency_api_data[ $slug ]['last_updated'] ) ) {
[689] Fix | Delete
continue;
[690] Fix | Delete
}
[691] Fix | Delete
}
[692] Fix | Delete
[693] Fix | Delete
if ( ! function_exists( 'plugins_api' ) ) {
[694] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
[695] Fix | Delete
}
[696] Fix | Delete
[697] Fix | Delete
$information = plugins_api(
[698] Fix | Delete
'plugin_information',
[699] Fix | Delete
array(
[700] Fix | Delete
'slug' => $slug,
[701] Fix | Delete
'fields' => array(
[702] Fix | Delete
'short_description' => true,
[703] Fix | Delete
'icons' => true,
[704] Fix | Delete
),
[705] Fix | Delete
)
[706] Fix | Delete
);
[707] Fix | Delete
[708] Fix | Delete
if ( is_wp_error( $information ) ) {
[709] Fix | Delete
continue;
[710] Fix | Delete
}
[711] Fix | Delete
[712] Fix | Delete
self::$dependency_api_data[ $slug ] = (array) $information;
[713] Fix | Delete
// plugins_api() returns 'name' not 'Name'.
[714] Fix | Delete
self::$dependency_api_data[ $slug ]['Name'] = self::$dependency_api_data[ $slug ]['name'];
[715] Fix | Delete
set_site_transient( 'wp_plugin_dependencies_plugin_data', self::$dependency_api_data, 0 );
[716] Fix | Delete
}
[717] Fix | Delete
[718] Fix | Delete
// Remove from self::$dependency_api_data if slug no longer a dependency.
[719] Fix | Delete
$differences = array_diff( array_keys( self::$dependency_api_data ), self::$dependency_slugs );
[720] Fix | Delete
foreach ( $differences as $difference ) {
[721] Fix | Delete
unset( self::$dependency_api_data[ $difference ] );
[722] Fix | Delete
}
[723] Fix | Delete
[724] Fix | Delete
ksort( self::$dependency_api_data );
[725] Fix | Delete
// Remove empty elements.
[726] Fix | Delete
self::$dependency_api_data = array_filter( self::$dependency_api_data );
[727] Fix | Delete
set_site_transient( 'wp_plugin_dependencies_plugin_data', self::$dependency_api_data, 0 );
[728] Fix | Delete
[729] Fix | Delete
return self::$dependency_api_data;
[730] Fix | Delete
}
[731] Fix | Delete
[732] Fix | Delete
/**
[733] Fix | Delete
* Gets plugin directory names.
[734] Fix | Delete
*
[735] Fix | Delete
* @since 6.5.0
[736] Fix | Delete
*
[737] Fix | Delete
* @return array An array of plugin directory names.
[738] Fix | Delete
*/
[739] Fix | Delete
protected static function get_plugin_dirnames() {
[740] Fix | Delete
if ( is_array( self::$plugin_dirnames ) ) {
[741] Fix | Delete
return self::$plugin_dirnames;
[742] Fix | Delete
}
[743] Fix | Delete
[744] Fix | Delete
self::$plugin_dirnames = array();
[745] Fix | Delete
[746] Fix | Delete
$plugin_files = array_keys( self::get_plugins() );
[747] Fix | Delete
foreach ( $plugin_files as $plugin_file ) {
[748] Fix | Delete
$slug = self::convert_to_slug( $plugin_file );
[749] Fix | Delete
self::$plugin_dirnames[ $slug ] = $plugin_file;
[750] Fix | Delete
}
[751] Fix | Delete
[752] Fix | Delete
return self::$plugin_dirnames;
[753] Fix | Delete
}
[754] Fix | Delete
[755] Fix | Delete
/**
[756] Fix | Delete
* Gets circular dependency data.
[757] Fix | Delete
*
[758] Fix | Delete
* @since 6.5.0
[759] Fix | Delete
*
[760] Fix | Delete
* @return array[] An array of circular dependency pairings.
[761] Fix | Delete
*/
[762] Fix | Delete
protected static function get_circular_dependencies() {
[763] Fix | Delete
if ( is_array( self::$circular_dependencies_pairs ) ) {
[764] Fix | Delete
return self::$circular_dependencies_pairs;
[765] Fix | Delete
}
[766] Fix | Delete
[767] Fix | Delete
if ( null === self::$dependencies ) {
[768] Fix | Delete
return array();
[769] Fix | Delete
}
[770] Fix | Delete
[771] Fix | Delete
self::$circular_dependencies_slugs = array();
[772] Fix | Delete
[773] Fix | Delete
self::$circular_dependencies_pairs = array();
[774] Fix | Delete
foreach ( self::$dependencies as $dependent => $dependencies ) {
[775] Fix | Delete
/*
[776] Fix | Delete
* $dependent is in 'a/a.php' format. Dependencies are stored as slugs, i.e. 'a'.
[777] Fix | Delete
*
[778] Fix | Delete
* Convert $dependent to slug format for checking.
[779] Fix | Delete
*/
[780] Fix | Delete
$dependent_slug = self::convert_to_slug( $dependent );
[781] Fix | Delete
[782] Fix | Delete
self::$circular_dependencies_pairs = array_merge(
[783] Fix | Delete
self::$circular_dependencies_pairs,
[784] Fix | Delete
self::check_for_circular_dependencies( array( $dependent_slug ), $dependencies )
[785] Fix | Delete
);
[786] Fix | Delete
}
[787] Fix | Delete
[788] Fix | Delete
return self::$circular_dependencies_pairs;
[789] Fix | Delete
}
[790] Fix | Delete
[791] Fix | Delete
/**
[792] Fix | Delete
* Checks for circular dependencies.
[793] Fix | Delete
*
[794] Fix | Delete
* @since 6.5.0
[795] Fix | Delete
*
[796] Fix | Delete
* @param array $dependents Array of dependent plugins.
[797] Fix | Delete
* @param array $dependencies Array of plugins dependencies.
[798] Fix | Delete
* @return array A circular dependency pairing, or an empty array if none exists.
[799] Fix | Delete
*/
[800] Fix | Delete
protected static function check_for_circular_dependencies( $dependents, $dependencies ) {
[801] Fix | Delete
$circular_dependencies_pairs = array();
[802] Fix | Delete
[803] Fix | Delete
// Check for a self-dependency.
[804] Fix | Delete
$dependents_location_in_its_own_dependencies = array_intersect( $dependents, $dependencies );
[805] Fix | Delete
if ( ! empty( $dependents_location_in_its_own_dependencies ) ) {
[806] Fix | Delete
foreach ( $dependents_location_in_its_own_dependencies as $self_dependency ) {
[807] Fix | Delete
self::$circular_dependencies_slugs[] = $self_dependency;
[808] Fix | Delete
$circular_dependencies_pairs[] = array( $self_dependency, $self_dependency );
[809] Fix | Delete
[810] Fix | Delete
// No need to check for itself again.
[811] Fix | Delete
unset( $dependencies[ array_search( $self_dependency, $dependencies, true ) ] );
[812] Fix | Delete
}
[813] Fix | Delete
}
[814] Fix | Delete
[815] Fix | Delete
/*
[816] Fix | Delete
* Check each dependency to see:
[817] Fix | Delete
* 1. If it has dependencies.
[818] Fix | Delete
* 2. If its list of dependencies includes one of its own dependents.
[819] Fix | Delete
*/
[820] Fix | Delete
foreach ( $dependencies as $dependency ) {
[821] Fix | Delete
// Check if the dependency is also a dependent.
[822] Fix | Delete
$dependency_location_in_dependents = array_search( $dependency, self::$dependent_slugs, true );
[823] Fix | Delete
[824] Fix | Delete
if ( false !== $dependency_location_in_dependents ) {
[825] Fix | Delete
$dependencies_of_the_dependency = self::$dependencies[ $dependency_location_in_dependents ];
[826] Fix | Delete
[827] Fix | Delete
foreach ( $dependents as $dependent ) {
[828] Fix | Delete
// Check if its dependencies includes one of its own dependents.
[829] Fix | Delete
$dependent_location_in_dependency_dependencies = array_search(
[830] Fix | Delete
$dependent,
[831] Fix | Delete
$dependencies_of_the_dependency,
[832] Fix | Delete
true
[833] Fix | Delete
);
[834] Fix | Delete
[835] Fix | Delete
if ( false !== $dependent_location_in_dependency_dependencies ) {
[836] Fix | Delete
self::$circular_dependencies_slugs[] = $dependent;
[837] Fix | Delete
self::$circular_dependencies_slugs[] = $dependency;
[838] Fix | Delete
$circular_dependencies_pairs[] = array( $dependent, $dependency );
[839] Fix | Delete
[840] Fix | Delete
// Remove the dependent from its dependency's dependencies.
[841] Fix | Delete
unset( $dependencies_of_the_dependency[ $dependent_location_in_dependency_dependencies ] );
[842] Fix | Delete
}
[843] Fix | Delete
}
[844] Fix | Delete
[845] Fix | Delete
$dependents[] = $dependency;
[846] Fix | Delete
[847] Fix | Delete
/*
[848] Fix | Delete
* Now check the dependencies of the dependency's dependencies for the dependent.
[849] Fix | Delete
*
[850] Fix | Delete
* Yes, that does make sense.
[851] Fix | Delete
*/
[852] Fix | Delete
$circular_dependencies_pairs = array_merge(
[853] Fix | Delete
$circular_dependencies_pairs,
[854] Fix | Delete
self::check_for_circular_dependencies( $dependents, array_unique( $dependencies_of_the_dependency ) )
[855] Fix | Delete
);
[856] Fix | Delete
}
[857] Fix | Delete
}
[858] Fix | Delete
[859] Fix | Delete
return $circular_dependencies_pairs;
[860] Fix | Delete
}
[861] Fix | Delete
[862] Fix | Delete
/**
[863] Fix | Delete
* Converts a plugin filepath to a slug.
[864] Fix | Delete
*
[865] Fix | Delete
* @since 6.5.0
[866] Fix | Delete
*
[867] Fix | Delete
* @param string $plugin_file The plugin's filepath, relative to the plugins directory.
[868] Fix | Delete
* @return string The plugin's slug.
[869] Fix | Delete
*/
[870] Fix | Delete
protected static function convert_to_slug( $plugin_file ) {
[871] Fix | Delete
if ( 'hello.php' === $plugin_file ) {
[872] Fix | Delete
return 'hello-dolly';
[873] Fix | Delete
}
[874] Fix | Delete
return str_contains( $plugin_file, '/' ) ? dirname( $plugin_file ) : str_replace( '.php', '', $plugin_file );
[875] Fix | Delete
}
[876] Fix | Delete
}
[877] Fix | Delete
[878] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function