MDL-55237 core_component: Fix last namespace level matching

Thanks to Andreas Grabs for proposing a fix.
This commit is contained in:
David Monllao
2016-08-30 11:15:27 +08:00
parent 35d5053ba2
commit 8bee2d8df6
3 changed files with 33 additions and 7 deletions
+12 -6
View File
@@ -903,18 +903,24 @@ $cache = '.var_export($cache, true).';
* e.g. get_component_classes_in_namespace('mod_forum', 'event')
*
* @param string $component A valid moodle component (frankenstyle)
* @param string $namespace Namespace from the component name.
* @param string $namespace Namespace from the component name or empty if all $component namespace classes.
* @return array The full class name as key and the class path as value.
*/
public static function get_component_classes_in_namespace($component, $namespace = '') {
// We will add them later.
$namespace = ltrim($namespace, '\\');
$component = self::normalize_componentname($component);
// We need add double backslashes as it is how classes are stored into self::$classmap.
$namespace = implode('\\\\', explode('\\', $namespace));
if ($namespace) {
$regex = '/^' . $component . '\\\\' . $namespace . '/';
// We will add them later.
$namespace = trim($namespace, '\\');
// We need add double backslashes as it is how classes are stored into self::$classmap.
$namespace = implode('\\\\', explode('\\', $namespace));
$namespace = $namespace . '\\\\';
}
$regex = '|^' . $component . '\\\\' . $namespace . '|';
$it = new RegexIterator(new ArrayIterator(self::$classmap), $regex, RegexIterator::GET_MATCH, RegexIterator::USE_KEY);
// We want to be sure that they exist.