diff --git a/lib/classes/component.php b/lib/classes/component.php index 333ff0f0e4b..e7f3eb4b324 100644 --- a/lib/classes/component.php +++ b/lib/classes/component.php @@ -383,6 +383,24 @@ class core_component { return false; } + // Check for key classes which block access to the upgrade in some way. + // Note: This list should be kept _extremely_ minimal and generally + // when adding a newly discovered classes older ones should be removed. + // Always keep moodle_exception in place. + $keyclasses = [ + \core\exception\moodle_exception::class, + \core\output\bootstrap_renderer::class, + ]; + foreach ($keyclasses as $classname) { + if (!array_key_exists($classname, $cache['classmap'])) { + // The cache is missing some key classes. This is likely before the upgrade has run. + error_log( + "The '{$classname}' class was not found in the component class cache. Resetting the classmap.", + ); + return false; + } + } + return true; } diff --git a/lib/setup.php b/lib/setup.php index c0cf3891d1c..9c3fb46124e 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -620,10 +620,6 @@ if (defined('ABORT_AFTER_CONFIG')) { require_once($CFG->libdir .'/setuplib.php'); // Functions that MUST be loaded first. -// TODO MDL-81933 Remove after Moodle 4.5 release. -require_once($CFG->libdir . '/classes/exception/moodle_exception.php'); // Required by some other legacy libraries. -require_once($CFG->libdir . '/classes/output/bootstrap_renderer.php'); // Required by some other legacy libraries. - // Load up standard libraries. require_once($CFG->libdir .'/filterlib.php'); // Functions for filtering test as it is output. require_once($CFG->libdir .'/ajax/ajaxlib.php'); // Functions for managing our use of JavaScript and YUI.