Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * H5P autoloader management class.
19
 *
20
 * @package    core_h5p
21
 * @copyright  2019 Sara Arjona <sara@moodle.com>
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
namespace core_h5p\local\library;
26
 
27
/**
28
 * H5P autoloader management class.
29
 *
30
 * @package    core_h5p
31
 * @copyright  2019 Sara Arjona <sara@moodle.com>
32
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33
 */
34
class autoloader {
35
 
36
    /**
37
     * Returns the list of plugins that can work as H5P library handlers (have class PLUGINNAME\local\library\handler)
38
     * @return array with the format: pluginname => class
39
     */
40
    public static function get_all_handlers(): array {
41
        $handlers = [];
42
        $plugins = \core_component::get_plugin_list_with_class('h5plib', 'local\library\handler') +
43
            \core_component::get_plugin_list_with_class('h5plib', 'local_library_handler');
44
        // Allow plugins to have the class either with namespace or without (useful for unittest).
45
        foreach ($plugins as $pname => $class) {
46
            $handlers[$pname] = $class;
47
        }
48
 
49
        return $handlers;
50
    }
51
 
52
    /**
53
     * Returns the default H5P library handler class.
54
     *
55
     * @return string|null H5P library handler class
56
     */
57
    public static function get_default_handler(): ?string {
58
        $default = null;
59
        $handlers = self::get_all_handlers();
60
        if (!empty($handlers)) {
61
            // The default handler will be the first value in the list.
62
            $default = array_shift($handlers);
63
        }
64
 
65
        return $default;
66
    }
67
 
68
    /**
69
     * Returns the default H5P library handler.
70
     *
71
     * @return string|null H5P library handler
72
     */
73
    public static function get_default_handler_library(): ?string {
74
        $default = null;
75
        $handlers = self::get_all_handlers();
76
        if (!empty($handlers)) {
77
            // The default handler will be the first in the list.
78
            $keys = array_keys($handlers);
79
            $default = array_shift($keys);
80
        }
81
 
82
        return $default;
83
    }
84
 
85
    /**
86
     * Returns the current H5P library handler class.
87
     *
88
     * @return string H5P library handler class
89
     * @throws \moodle_exception
90
     */
91
    public static function get_handler_classname(): string {
92
        global $CFG;
93
 
94
        $handlers = self::get_all_handlers();
95
        if (!empty($CFG->h5plibraryhandler)) {
96
            if (isset($handlers[$CFG->h5plibraryhandler])) {
97
                return $handlers[$CFG->h5plibraryhandler];
98
            }
99
        }
100
 
101
        // If no handler has been defined, return the default one.
102
        $defaulthandler = self::get_default_handler();
103
        if (empty($defaulthandler)) {
104
            // If there is no default handler, throw an exception.
105
            throw new \moodle_exception('noh5plibhandlerdefined', 'core_h5p');
106
        }
107
 
108
        return $defaulthandler;
109
    }
110
 
111
    /**
112
     * Get the current version of the H5P core library.
113
     *
114
     * @return string
115
     */
116
    public static function get_h5p_version(): string {
117
        return component_class_callback(self::get_handler_classname(), 'get_h5p_version', []);
118
    }
119
 
120
    /**
121
     * Get a URL for the current H5P Core Library.
122
     *
123
     * @param string $filepath The path within the h5p root
124
     * @param array $params these params override current params or add new
125
     * @return null|moodle_url
126
     */
127
    public static function get_h5p_core_library_url(?string $filepath = null, ?array $params = null): ?\moodle_url {
128
        return component_class_callback(self::get_handler_classname(), 'get_h5p_core_library_url', [$filepath, $params]);
129
    }
130
 
131
    /**
132
     * Get a URL for the current H5P Editor Library.
133
     *
134
     * @param string $filepath The path within the h5p root.
135
     * @param array $params These params override current params or add new.
136
     * @return null|\moodle_url The moodle_url instance to a file in the H5P Editor library.
137
     */
138
    public static function get_h5p_editor_library_url(?string $filepath = null, ?array $params = null): ?\moodle_url {
139
        return component_class_callback(self::get_handler_classname(), 'get_h5p_editor_library_url', [$filepath, $params]);
140
    }
141
 
142
    /**
143
     * Get the base path for the current H5P Editor Library.
144
     *
145
     * @param string $filepath The path within the h5p root.
146
     * @return string  Path to a file in the H5P Editor library.
147
     */
148
    public static function get_h5p_editor_library_base(?string $filepath = null): string {
149
        return component_class_callback(self::get_handler_classname(), 'get_h5p_editor_library_base', [$filepath]);
150
    }
151
 
152
    /**
153
     * Returns a localized string, if it exists in the h5plib plugin and the value it's different from the English version.
154
     *
155
     * @param string $identifier The key identifier for the localized string
156
     * @param string $language Language to get the localized string.
157
     * @return string|null The localized string or null if it doesn't exist in this H5P library plugin.
158
     */
159
    public static function get_h5p_string(string $identifier, string $language): ?string {
160
        return component_class_callback(self::get_handler_classname(), 'get_h5p_string', [$identifier, $language]);
161
    }
162
 
163
    /**
164
     * Register the H5P autoloader.
165
     */
166
    public static function register(): void {
167
        component_class_callback(self::get_handler_classname(), 'register', []);
168
    }
169
}