This commit is contained in:
Jun Pataleta 2024-08-14 23:05:06 +08:00
commit 20dcede4b5
No known key found for this signature in database
GPG Key ID: F83510526D99E2C7
5 changed files with 54 additions and 19 deletions

View File

@ -0,0 +1,10 @@
issueNumber: MDL-82747
notes:
core:
- message: >-
The Moodle autoloader should now be registered using
`\core\component::register_autoloader` rather than manually doing so in
any exceptional location which requires it. It is not normally necessary
to include the autoloader manually, as it is registered automatically
when the Moodle environment is bootstrapped.
type: improved

View File

@ -179,13 +179,8 @@ ini_set('include_path', $CFG->libdir.'/pear' . PATH_SEPARATOR . ini_get('include
// The core_component class can be used in any scripts, it does not need anything else.
require_once($CFG->libdir.'/classes/component.php');
// Register our classloader, in theory somebody might want to replace it to load other hacked core classes.
// Required because the database checks below lead to session interaction which is going to lead us to requiring autoloaded classes.
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register('core_component::classloader');
}
// Register our classloader.
\core\component::register_autoloader();
require_once($CFG->libdir.'/classes/text.php');
require_once($CFG->libdir.'/classes/string_manager.php');

View File

@ -202,12 +202,8 @@ if (!empty($memlimit) and $memlimit != -1) {
// the problem is that we need specific version of quickforms and hacked excel files :-(.
ini_set('include_path', $CFG->libdir.'/pear' . PATH_SEPARATOR . ini_get('include_path'));
// Register our classloader, in theory somebody might want to replace it to load other hacked core classes.
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register('core_component::classloader');
}
// Register our classloader.
\core\component::register_autoloader();
// Continue with lib loading.
require_once($CFG->libdir.'/classes/text.php');

View File

@ -149,6 +149,44 @@ class component {
\Slim::class => 'lib/slim/slim/Slim',
];
/**
* An array containing files which are normally in a package's composer/autoload.files section.
*
* PHP does not provide a mechanism for automatically including the files that methods are in.
*
* The Composer autoloader includes all files in this section of the composer.json file during the instantiation of the loader.
*
* @var array<string>
*/
protected static $composerautoloadfiles = [
'lib/aws-sdk/src/functions.php',
'lib/guzzlehttp/guzzle/src/functions_include.php',
'lib/jmespath/src/JmesPath.php',
'lib/php-di/php-di/src/functions.php',
'lib/ralouphi/getallheaders/src/getallheaders.php',
'lib/symfony/deprecation-contracts/function.php',
];
/**
* Register the Moodle class autoloader.
*/
public static function register_autoloader(): void {
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register([self::class, 'classloader']);
}
// Load any composer-driven autoload files.
// This is intended to mimic the behaviour of the standard Composer Autoloader.
foreach (static::$composerautoloadfiles as $file) {
$path = dirname(__DIR__, 2) . '/' . $file;
if (file_exists($path)) {
require_once($path);
}
}
}
/**
* Class loader for Frankenstyle named classes in standard locations.
* Frankenstyle namespaces are supported.

View File

@ -594,12 +594,8 @@ if (NO_OUTPUT_BUFFERING) {
// the problem is that we need specific version of quickforms and hacked excel files :-(.
ini_set('include_path', $CFG->libdir . '/pear' . PATH_SEPARATOR . ini_get('include_path'));
// Register our classloader, in theory somebody might want to replace it to load other hacked core classes.
if (defined('COMPONENT_CLASSLOADER')) {
spl_autoload_register(COMPONENT_CLASSLOADER);
} else {
spl_autoload_register([\core_component::class, 'classloader']);
}
// Register our classloader.
\core\component::register_autoloader();
// Special support for highly optimised scripts that do not need libraries and DB connection.
if (defined('ABORT_AFTER_CONFIG')) {