Merge branch 'MDL-55237_31' of git://github.com/dmonllao/moodle into MOODLE_31_STABLE

This commit is contained in:
Eloy Lafuente (stronk7)
2016-08-30 12:54:53 +02:00
3 changed files with 33 additions and 7 deletions
+12 -6
View File
@@ -910,18 +910,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.
+19 -1
View File
@@ -458,15 +458,33 @@ class core_component_testcase extends advanced_testcase {
$this->assertCount(0, core_component::get_component_classes_in_namespace('core_unexistingcomponent', 'something'));
$this->assertCount(0, core_component::get_component_classes_in_namespace('auth_cas', 'something'));
// Matches the last namespace level name not partials.
$this->assertCount(0, core_component::get_component_classes_in_namespace('auth_cas', 'tas'));
$this->assertCount(0, core_component::get_component_classes_in_namespace('core_user', 'course'));
$this->assertCount(0, core_component::get_component_classes_in_namespace('mod_forum', 'output\\emaildigest'));
$this->assertCount(0, core_component::get_component_classes_in_namespace('mod_forum', '\\output\\emaildigest'));
$this->assertCount(2, core_component::get_component_classes_in_namespace('mod_forum', 'output\\email'));
$this->assertCount(2, core_component::get_component_classes_in_namespace('mod_forum', '\\output\\email'));
$this->assertCount(2, core_component::get_component_classes_in_namespace('mod_forum', 'output\\email\\'));
$this->assertCount(2, core_component::get_component_classes_in_namespace('mod_forum', '\\output\\email\\'));
// Prefix with backslash if it doesn\'t come prefixed.
$this->assertCount(1, core_component::get_component_classes_in_namespace('auth_cas', 'task'));
$this->assertCount(1, core_component::get_component_classes_in_namespace('auth_cas', '\\task'));
// Core as a component works.
// Core as a component works, the funcion can normalise the component name.
$this->assertCount(7, core_component::get_component_classes_in_namespace('core', 'update'));
$this->assertCount(7, core_component::get_component_classes_in_namespace('', 'update'));
$this->assertCount(7, core_component::get_component_classes_in_namespace('moodle', 'update'));
// Multiple levels.
$this->assertCount(5, core_component::get_component_classes_in_namespace('core_user', '\\output\\myprofile\\'));
$this->assertCount(5, core_component::get_component_classes_in_namespace('core_user', 'output\\myprofile\\'));
$this->assertCount(5, core_component::get_component_classes_in_namespace('core_user', '\\output\\myprofile'));
$this->assertCount(5, core_component::get_component_classes_in_namespace('core_user', 'output\\myprofile'));
// Without namespace it returns classes/ classes.
$this->assertCount(2, core_component::get_component_classes_in_namespace('tool_mobile', ''));
$this->assertCount(1, core_component::get_component_classes_in_namespace('tool_filetypes'));
}
}
@@ -26,6 +26,8 @@ namespace mod_forum\output\email;
defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/../../../renderer.php');
/**
* Forum post renderable.
*