kollapsminoriteten/wp-content/plugins/jetpack/vendor/jetpack-autoloader/class-autoloader-handler.php

199 lines
6.5 KiB
PHP

<?php
/**
* This file was automatically generated by automattic/jetpack-autoloader.
*
* @package automattic/jetpack-autoloader
*/
namespace Automattic\Jetpack\Autoloader\jp2aa52323e0b287da03f99e87bcdacaad;
// phpcs:ignore
/**
* This class selects the package version for the autoloader.
*/
class Autoloader_Handler {
// The name of the autoloader function registered by v1.* autoloaders.
const V1_AUTOLOADER_NAME = 'Automattic\Jetpack\Autoloader\autoloader';
/*
* The autoloader function for v2.* autoloaders is named __NAMESPACE__ . \autoloader.
* The namespace is defined in AutoloadGenerator as
* 'Automattic\Jetpack\Autoloader\jp' plus a unique suffix.
*/
const V2_AUTOLOADER_BASE = 'Automattic\Jetpack\Autoloader\jp';
/**
* The current plugin path.
*
* @var string
*/
private $current_plugin_path;
/**
* The paths for all of the active plugins.
*
* @var array
*/
private $active_plugin_paths;
/**
* The Autoloader_Locator object.
*
* @var Autoloader_Locator
*/
private $autoloader_locator;
/**
* The Version_Selector object.
*
* @var Version_Selector
*/
private $version_selector;
/**
* The constructor.
*
* @param string $current_plugin_path The current plugin path.
* @param array $active_plugin_paths The active plugin paths.
* @param Autoloader_Locator $autoloader_locator The Autoloader_Locator object.
* @param Version_Selector $version_selector The Version_Selector object.
*/
public function __construct( $current_plugin_path, $active_plugin_paths, $autoloader_locator, $version_selector ) {
$this->current_plugin_path = $current_plugin_path;
$this->active_plugin_paths = $active_plugin_paths;
$this->autoloader_locator = $autoloader_locator;
$this->version_selector = $version_selector;
}
/**
* Finds the latest installed autoloader.
*
* @return bool True if this autoloader is the latest, false otherwise.
*/
public function is_latest_autoloader() {
global $jetpack_autoloader_latest_version;
if ( isset( $jetpack_autoloader_latest_version ) ) {
return $jetpack_autoloader_latest_version === $this->autoloader_locator->get_autoloader_version( $this->current_plugin_path );
}
$latest_plugin = $this->autoloader_locator->find_latest_autoloader( $this->active_plugin_paths, $jetpack_autoloader_latest_version );
if ( ! isset( $latest_plugin ) ) {
return true;
}
if ( $latest_plugin !== $this->current_plugin_path ) {
require $this->autoloader_locator->get_autoloader_path( $latest_plugin );
return false;
}
return true;
}
/**
* Checks whether the autoloader should be reset. The autoloader should be reset:
*
* - When a plugin is activated via a method other than a request, for example using WP-CLI.
* - When the active plugins list changes between autoloader checks, for example when filtered by a plugin.
*
* We perform this reset because the manifest files for the plugin will have been initially unknown when
* selecting versions for classes and files.
*
* If the current plugin is not already known, this method will add it to the
* $jetpack_autoloader_activating_plugins_paths global.
* The $jetpack_autoloader_cached_plugin_paths global will store a cache of the
* active plugin paths when last changed.
*
* @return boolean True if the autoloader must be reset, else false.
*/
public function should_autoloader_reset() {
global $jetpack_autoloader_activating_plugins_paths;
global $jetpack_autoloader_cached_plugin_paths;
$plugin_unknown = ! in_array( $this->current_plugin_path, $this->active_plugin_paths, true );
if ( $plugin_unknown ) {
if ( ! isset( $jetpack_autoloader_activating_plugins_paths ) ) {
$jetpack_autoloader_activating_plugins_paths = array();
}
// If the current plugin isn't known, add it to the activating plugins list.
$jetpack_autoloader_activating_plugins_paths[] = $this->current_plugin_path;
$this->active_plugin_paths[] = $this->current_plugin_path;
}
$cache_invalidated = $jetpack_autoloader_cached_plugin_paths !== $this->active_plugin_paths;
if ( $cache_invalidated ) {
$jetpack_autoloader_cached_plugin_paths = $this->active_plugin_paths;
}
return $plugin_unknown || $cache_invalidated;
}
/**
* Builds the Version_Autoloader class that is used for autoloading.
*
* @return Version_Loader
*/
public function build_autoloader() {
$manifest_handler = new Manifest_Handler( $this->active_plugin_paths, $this->version_selector );
global $jetpack_packages_psr4;
$jetpack_packages_psr4 = array();
$manifest_handler->register_plugin_manifests( 'vendor/composer/jetpack_autoload_psr4.php', $jetpack_packages_psr4 );
global $jetpack_packages_classmap;
$jetpack_packages_classmap = array();
$manifest_handler->register_plugin_manifests( 'vendor/composer/jetpack_autoload_classmap.php', $jetpack_packages_classmap );
global $jetpack_packages_filemap;
$jetpack_packages_filemap = array();
$manifest_handler->register_plugin_manifests( 'vendor/composer/jetpack_autoload_filemap.php', $jetpack_packages_filemap );
// Store the generated autoloader data in the loader so we can use it.
return new Version_Loader(
$this->version_selector,
$jetpack_packages_classmap,
$jetpack_packages_psr4,
$jetpack_packages_filemap
);
}
/**
* Updates the spl autoloader chain:
* - Registers this namespace's autoloader function.
* - If a v1 autoloader function is registered, moves it to the end of the chain.
* - Removes any other v2 autoloader functions that have already been registered. This
* can occur when the autoloader is being reset by an activating plugin.
*/
public function update_autoloader_chain() {
spl_autoload_register( __NAMESPACE__ . '\autoloader' );
$autoload_chain = spl_autoload_functions();
foreach ( $autoload_chain as $autoloader ) {
if ( ! is_string( $autoloader ) ) {
/*
* The Jetpack Autoloader functions are registered as strings, so
* just continue if $autoloader isn't a string.
*/
continue;
}
if ( self::V1_AUTOLOADER_NAME === $autoloader ) {
// Move the v1.* autoloader function to the end of the spl autoloader chain.
spl_autoload_unregister( $autoloader );
spl_autoload_register( $autoloader );
} elseif (
self::V2_AUTOLOADER_BASE === substr( $autoloader, 0, strlen( self::V2_AUTOLOADER_BASE ) )
&& __NAMESPACE__ !== substr( $autoloader, 0, strlen( __NAMESPACE__ ) )
) {
// Unregister any other v2.* autoloader functions if they're in the chain.
spl_autoload_unregister( $autoloader );
}
}
}
}