From a3cdaa8dd95f155b675a23601f775e07bdea4684 Mon Sep 17 00:00:00 2001 From: Amaia Anabitarte Date: Wed, 23 Oct 2019 18:58:58 +0200 Subject: [PATCH] MDL-66609 core_h5p: Autoload for H5P third party library classes --- h5p/classes/autoloader.php | 59 ++++++++++++++++++++++++++++++++++++++ h5p/classes/factory.php | 8 ++++++ h5p/lib.php | 3 ++ lib/classes/component.php | 8 ------ 4 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 h5p/classes/autoloader.php diff --git a/h5p/classes/autoloader.php b/h5p/classes/autoloader.php new file mode 100644 index 00000000000..9088ac2b2fd --- /dev/null +++ b/h5p/classes/autoloader.php @@ -0,0 +1,59 @@ +. + +/** + * H5P Autoloader. + * + * @package core_h5p + * @copyright 2019 Mihail Geshoski + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core_h5p; + +defined('MOODLE_INTERNAL') || die(); + +/** + * H5P Autoloader. + * + * @package core_h5p + * @copyright 2019 Mihail Geshoski + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class autoloader { + public static function register(): void { + spl_autoload_register([self::class, 'autoload']); + } + + public static function autoload($classname): void { + global $CFG; + + $classes = [ + 'H5PCore' => '/lib/h5p/h5p.classes.php', + 'H5PFrameworkInterface' => '/lib/h5p/h5p.classes.php', + 'H5PContentValidator' => 'lib/h5p/h5p.classes.php', + 'H5PValidator' => '/lib/h5p/h5p.classes.php', + 'H5PStorage' => '/lib/h5p/h5p.classes.php', + 'H5PDevelopment' => '/lib/h5p/h5p-development.class.php', + 'H5PFileStorage' => '/lib/h5p/h5p-file-storage.interface.php', + 'H5PMetadata' => '/lib/h5p/h5p-metadata.class.php', + ]; + + if (isset($classes[$classname])) { + require_once("{$CFG->dirroot}{$classes[$classname]}"); + } + } +} diff --git a/h5p/classes/factory.php b/h5p/classes/factory.php index f4edb4dd519..d63bfc2c502 100644 --- a/h5p/classes/factory.php +++ b/h5p/classes/factory.php @@ -58,6 +58,14 @@ class factory { /** @var content_validator The Moodle H5PContentValidator implementation */ protected $content_validator; + /** + * factory constructor. + */ + public function __construct() { + // Loading classes we need from H5P third party library. + autoloader::register(); + } + /** * Returns an instance of the \core_h5p\framework class. * diff --git a/h5p/lib.php b/h5p/lib.php index da4871a8bed..deccba44862 100644 --- a/h5p/lib.php +++ b/h5p/lib.php @@ -43,6 +43,9 @@ function core_h5p_pluginfile($course, $cm, $context, string $filearea, array $ar array $options = []) : bool { global $DB; + // Require classes from H5P third party library + \core_h5p\autoloader::register(); + $filesettingsset = false; switch ($filearea) { diff --git a/lib/classes/component.php b/lib/classes/component.php index 35bb9503a6d..22edb6ba780 100644 --- a/lib/classes/component.php +++ b/lib/classes/component.php @@ -90,14 +90,6 @@ class core_component { 'RedeyeVentures\\GeoPattern' => 'lib/geopattern-php/GeoPattern', 'MongoDB' => 'cache/stores/mongodb/MongoDB', 'Firebase\\JWT' => 'lib/php-jwt/src', - 'H5PCore' => '/lib/h5p/h5p.classes', - 'H5PFrameworkInterface' => '/lib/h5p/h5p.classes', - 'H5PContentValidator' => 'lib/h5p/h5p.classes', - 'H5PValidator' => '/lib/h5p/h5p.classes', - 'H5PStorage' => '/lib/h5p/h5p.classes', - 'H5PDevelopment' => '/lib/h5p/h5p-development.class', - 'H5PFileStorage' => '/lib/h5p/h5p-file-storage.interface', - 'H5PMetadata' => '/lib/h5p/h5p-metadata.class', ); /**