diff --git a/blocks/classes/local/views/secondary.php b/blocks/classes/navigation/views/secondary.php
similarity index 96%
rename from blocks/classes/local/views/secondary.php
rename to blocks/classes/navigation/views/secondary.php
index c23e857a5f7..43acdadf8c8 100644
--- a/blocks/classes/local/views/secondary.php
+++ b/blocks/classes/navigation/views/secondary.php
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
-namespace core_block\local\views;
+namespace core_block\navigation\views;
/**
* Class secondary
diff --git a/lib/blocklib.php b/lib/blocklib.php
index 9c4f2badbfc..ce4f72b6405 100644
--- a/lib/blocklib.php
+++ b/lib/blocklib.php
@@ -1688,8 +1688,12 @@ class block_manager {
* @return \core\navigation\views\secondary
*/
protected function get_secondarynav(block_base $block): \core\navigation\views\secondary {
- $class = "core_block\\local\\views\\secondary";
- if (class_exists("block_{$block->name()}\\local\\views\\secondary")) {
+ $class = "core_block\\navigation\\views\\secondary";
+ if (class_exists("block_{$block->name()}\\navigation\\views\\secondary")) {
+ $class = "block_{$block->name()}\\navigation\\views\\secondary";
+ } else if (class_exists("block_{$block->name()}\\local\\views\\secondary")) {
+ // For backwards compatibility, support the old location for this class (it was in a
+ // 'local' namespace which shouldn't be used for core APIs).
$class = "block_{$block->name()}\\local\\views\\secondary";
}
$secondarynav = new $class($this->page);
diff --git a/lib/db/renamedclasses.php b/lib/db/renamedclasses.php
index 39d6de58801..515c8040100 100644
--- a/lib/db/renamedclasses.php
+++ b/lib/db/renamedclasses.php
@@ -83,4 +83,6 @@ $renamedclasses = [
'core_question\\form\\tags' => 'qbank_tagquestion\\form\\tags_form',
'context_to_string_translator' => 'core_question\\local\\bank\\context_to_string_translator',
'question_edit_contexts' => 'core_question\\local\\bank\\question_edit_contexts',
+ // Since Moodle 4.0.5.
+ 'core_block\\local\\views\\secondary' => 'core_block\\navigation\\views\\secondary',
];
diff --git a/lib/pagelib.php b/lib/pagelib.php
index 26cc6e5f86d..189f0c723d0 100644
--- a/lib/pagelib.php
+++ b/lib/pagelib.php
@@ -873,7 +873,11 @@ class moodle_page {
if ($this->_secondarynav === null) {
$class = 'core\navigation\views\secondary';
// Try and load a custom class first.
- if (class_exists("mod_{$this->activityname}\\local\\views\\secondary")) {
+ if (class_exists("mod_{$this->activityname}\\navigation\\views\\secondary")) {
+ $class = "mod_{$this->activityname}\\navigation\\views\\secondary";
+ } else if (class_exists("mod_{$this->activityname}\\local\\views\\secondary")) {
+ // For backwards compatibility, support the old location for this class (it was in a
+ // 'local' namespace which shouldn't be used for core APIs).
$class = "mod_{$this->activityname}\\local\\views\\secondary";
}
diff --git a/lib/upgrade.txt b/lib/upgrade.txt
index eca92585625..185b8858582 100644
--- a/lib/upgrade.txt
+++ b/lib/upgrade.txt
@@ -1,6 +1,11 @@
This files describes API changes in core libraries and APIs,
information provided here is intended especially for developers.
+=== 4.0.5 ===
+* For plugins that override secondary navigation, the namespace for the custom secondary navigation class has
+ changed. It was (for example) mod_mymodule\local\views\secondary but is now
+ mod_mymodule\navigation\views\secondary. The old location will continue to work, but will be deprecated in 4.1.
+
=== 4.0.2 ===
* The core renderer `edit_button` method now accepts an optional `$method` argument (get/post) for the button
* The check for $plugin->incompatible was found to be incorrect. The $plugin->incompatible attribute is meant to define the minimum
diff --git a/mod/assign/classes/local/views/secondary.php b/mod/assign/classes/navigation/views/secondary.php
similarity index 97%
rename from mod/assign/classes/local/views/secondary.php
rename to mod/assign/classes/navigation/views/secondary.php
index 4b490964c15..e7a83770c10 100644
--- a/mod/assign/classes/local/views/secondary.php
+++ b/mod/assign/classes/navigation/views/secondary.php
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
-namespace mod_assign\local\views;
+namespace mod_assign\navigation\views;
use core\navigation\views\secondary as core_secondary;
diff --git a/mod/assign/db/renamedclasses.php b/mod/assign/db/renamedclasses.php
index dca2b289f9f..1e1dbee41ae 100644
--- a/mod/assign/db/renamedclasses.php
+++ b/mod/assign/db/renamedclasses.php
@@ -28,5 +28,7 @@ defined('MOODLE_INTERNAL') || die();
$renamedclasses = [
// Since Moodle 4.0.
'assign_header' => 'mod_assign\output\assign_header',
- 'assign_submission_status' => 'mod_assign\output\assign_submission_status'
+ 'assign_submission_status' => 'mod_assign\output\assign_submission_status',
+ // Since Moodle 4.0.5.
+ 'mod_assign\local\views\secondary' => 'mod_assign\navigation\views\secondary',
];
diff --git a/mod/feedback/classes/local/views/secondary.php b/mod/feedback/classes/navigation/views/secondary.php
similarity index 98%
rename from mod/feedback/classes/local/views/secondary.php
rename to mod/feedback/classes/navigation/views/secondary.php
index 2aaa9d39eeb..e61d5aef411 100644
--- a/mod/feedback/classes/local/views/secondary.php
+++ b/mod/feedback/classes/navigation/views/secondary.php
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
-namespace mod_feedback\local\views;
+namespace mod_feedback\navigation\views;
use core\navigation\views\secondary as core_secondary;
use settings_navigation;
diff --git a/mod/glossary/classes/local/views/secondary.php b/mod/glossary/classes/navigation/views/secondary.php
similarity index 97%
rename from mod/glossary/classes/local/views/secondary.php
rename to mod/glossary/classes/navigation/views/secondary.php
index 83e2edd46e8..0c1b7fec585 100644
--- a/mod/glossary/classes/local/views/secondary.php
+++ b/mod/glossary/classes/navigation/views/secondary.php
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
-namespace mod_glossary\local\views;
+namespace mod_glossary\navigation\views;
use core\navigation\views\secondary as core_secondary;
diff --git a/mod/label/classes/local/views/secondary.php b/mod/label/classes/navigation/views/secondary.php
similarity index 98%
rename from mod/label/classes/local/views/secondary.php
rename to mod/label/classes/navigation/views/secondary.php
index bba9e330302..64be842fd86 100644
--- a/mod/label/classes/local/views/secondary.php
+++ b/mod/label/classes/navigation/views/secondary.php
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
-namespace mod_label\local\views;
+namespace mod_label\navigation\views;
use core\navigation\views\secondary as core_secondary;
use settings_navigation;
diff --git a/mod/quiz/classes/local/views/secondary.php b/mod/quiz/classes/navigation/views/secondary.php
similarity index 98%
rename from mod/quiz/classes/local/views/secondary.php
rename to mod/quiz/classes/navigation/views/secondary.php
index e9be56666a4..89a6d3f17a9 100644
--- a/mod/quiz/classes/local/views/secondary.php
+++ b/mod/quiz/classes/navigation/views/secondary.php
@@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
-namespace mod_quiz\local\views;
+namespace mod_quiz\navigation\views;
use core\navigation\views\secondary as core_secondary;
diff --git a/mod/quiz/db/renamedclasses.php b/mod/quiz/db/renamedclasses.php
new file mode 100644
index 00000000000..d351caa17ba
--- /dev/null
+++ b/mod/quiz/db/renamedclasses.php
@@ -0,0 +1,30 @@
+.
+
+/**
+ * This file contains mappings for classes that have been renamed.
+ *
+ * @package mod_quiz
+ * @copyright 2022 The Open University
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+$renamedclasses = [
+ // Since Moodle 4.0.5.
+ 'mod_quiz\local\views\secondary' => 'mod_quiz\navigation\views\secondary',
+];