. /** * H5P autoloader management class. * * @package core_h5p * @copyright 2019 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace core_h5p\local\library; /** * H5P autoloader management class. * * @package core_h5p * @copyright 2019 Sara Arjona * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class autoloader { /** * Returns the list of plugins that can work as H5P library handlers (have class PLUGINNAME\local\library\handler) * @return array with the format: pluginname => class */ public static function get_all_handlers(): array { $handlers = []; $plugins = \core_component::get_plugin_list_with_class('h5plib', 'local\library\handler') + \core_component::get_plugin_list_with_class('h5plib', 'local_library_handler'); // Allow plugins to have the class either with namespace or without (useful for unittest). foreach ($plugins as $pname => $class) { $handlers[$pname] = $class; } return $handlers; } /** * Returns the default H5P library handler class. * * @return string|null H5P library handler class */ public static function get_default_handler(): ?string { $default = null; $handlers = self::get_all_handlers(); if (!empty($handlers)) { // The default handler will be the first value in the list. $default = array_shift($handlers); } return $default; } /** * Returns the default H5P library handler. * * @return string|null H5P library handler */ public static function get_default_handler_library(): ?string { $default = null; $handlers = self::get_all_handlers(); if (!empty($handlers)) { // The default handler will be the first in the list. $keys = array_keys($handlers); $default = array_shift($keys); } return $default; } /** * Returns the current H5P library handler class. * * @return string H5P library handler class * @throws \moodle_exception */ public static function get_handler_classname(): string { global $CFG; $handlers = self::get_all_handlers(); if (!empty($CFG->h5plibraryhandler)) { if (isset($handlers[$CFG->h5plibraryhandler])) { return $handlers[$CFG->h5plibraryhandler]; } } // If no handler has been defined, return the default one. $defaulthandler = self::get_default_handler(); if (empty($defaulthandler)) { // If there is no default handler, throw an exception. throw new \moodle_exception('noh5plibhandlerdefined', 'core_h5p'); } return $defaulthandler; } /** * Get the current version of the H5P core library. * * @return string */ public static function get_h5p_version(): string { return component_class_callback(self::get_handler_classname(), 'get_h5p_version', []); } /** * Get a URL for the current H5P Core Library. * * @param string $filepath The path within the h5p root * @param array $params these params override current params or add new * @return null|moodle_url */ public static function get_h5p_core_library_url(?string $filepath = null, ?array $params = null): ?\moodle_url { return component_class_callback(self::get_handler_classname(), 'get_h5p_core_library_url', [$filepath, $params]); } /** * Get a URL for the current H5P Editor Library. * * @param string $filepath The path within the h5p root. * @param array $params These params override current params or add new. * @return null|\moodle_url The moodle_url instance to a file in the H5P Editor library. */ public static function get_h5p_editor_library_url(?string $filepath = null, ?array $params = null): ?\moodle_url { return component_class_callback(self::get_handler_classname(), 'get_h5p_editor_library_url', [$filepath, $params]); } /** * Get the base path for the current H5P Editor Library. * * @param string $filepath The path within the h5p root. * @return string Path to a file in the H5P Editor library. */ public static function get_h5p_editor_library_base(?string $filepath = null): string { return component_class_callback(self::get_handler_classname(), 'get_h5p_editor_library_base', [$filepath]); } /** * Returns a localized string, if it exists in the h5plib plugin and the value it's different from the English version. * * @param string $identifier The key identifier for the localized string * @param string $language Language to get the localized string. * @return string|null The localized string or null if it doesn't exist in this H5P library plugin. */ public static function get_h5p_string(string $identifier, string $language): ?string { return component_class_callback(self::get_handler_classname(), 'get_h5p_string', [$identifier, $language]); } /** * Register the H5P autoloader. */ public static function register(): void { component_class_callback(self::get_handler_classname(), 'register', []); } }