MDL-75077 output: prevent duplicate ID errors in custom menus.

Following on from 8e4a7c6b, we should apply a similar change to
custom menus to account for being collapsed into the "More" menu.
This commit is contained in:
Paul Holden
2022-10-05 18:30:08 +01:00
parent cdd954430f
commit 3afbd2a0ad
2 changed files with 15 additions and 1 deletions
+1
View File
@@ -3657,6 +3657,7 @@ class custom_menu_item implements renderable, templatable {
$syscontext = context_system::instance();
$context = new stdClass();
$context->moremenuid = uniqid();
$context->text = external_format_string($this->text, $syscontext->id);
$context->url = $this->url ? $this->url->out() : null;
// No need for the title if it's the same with text.
+14 -1
View File
@@ -159,7 +159,20 @@ class primary_test extends \advanced_testcase {
$method = new ReflectionMethod('core\navigation\output\primary', 'get_custom_menu');
$method->setAccessible(true);
$renderer = $PAGE->get_renderer('core');
$this->assertEquals($expected, $method->invoke($output, $renderer));
// We can't assert the value of each menuitem "moremenuid" property (because it's random).
$custommenufilter = static function(array $custommenu) use (&$custommenufilter): void {
foreach ($custommenu as $menuitem) {
unset($menuitem->moremenuid);
// Recursively move through child items.
$custommenufilter($menuitem->children);
}
};
$actual = $method->invoke($output, $renderer);
$custommenufilter($actual);
$this->assertEquals($expected, $actual);
}
/**