summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/menu.inc9
-rw-r--r--modules/simpletest/tests/menu.test9
-rw-r--r--modules/simpletest/tests/menu_test.module16
3 files changed, 31 insertions, 3 deletions
diff --git a/includes/menu.inc b/includes/menu.inc
index 39f7dddad..8c2255067 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -3166,12 +3166,15 @@ function _menu_router_build($callbacks) {
if (!isset($item['page arguments']) && isset($parent['page arguments'])) {
$item['page arguments'] = $parent['page arguments'];
}
- if (!isset($item['file']) && isset($parent['file'])) {
- $item['file'] = $parent['file'];
- }
if (!isset($item['file path']) && isset($parent['file path'])) {
$item['file path'] = $parent['file path'];
}
+ if (!isset($item['file']) && isset($parent['file'])) {
+ $item['file'] = $parent['file'];
+ if (empty($item['file path']) && isset($item['module']) && isset($parent['module']) && $item['module'] != $parent['module']) {
+ $item['file path'] = drupal_get_path('module', $parent['module']);
+ }
+ }
}
// Same for delivery callbacks.
if (!isset($item['delivery callback']) && isset($parent['delivery callback'])) {
diff --git a/modules/simpletest/tests/menu.test b/modules/simpletest/tests/menu.test
index d9563a86a..0e6da766b 100644
--- a/modules/simpletest/tests/menu.test
+++ b/modules/simpletest/tests/menu.test
@@ -52,6 +52,15 @@ class MenuRouterTestCase extends DrupalWebTestCase {
}
/**
+ * Test that 'page callback', 'file' and 'file path' keys are properly
+ * inherited from parent menu paths.
+ */
+ function testFileInheritance() {
+ $this->drupalGet('admin/config/development/file-inheritance');
+ $this->assertText('File inheritance test description', t('File inheritance works.'));
+ }
+
+ /**
* Test path containing "exotic" characters.
*/
function testExoticPath() {
diff --git a/modules/simpletest/tests/menu_test.module b/modules/simpletest/tests/menu_test.module
index 1e436ee59..ee8f2ea1b 100644
--- a/modules/simpletest/tests/menu_test.module
+++ b/modules/simpletest/tests/menu_test.module
@@ -173,6 +173,22 @@ function menu_test_menu() {
'context' => MENU_CONTEXT_NONE,
);
+ // File inheritance tests. This menu item should inherit the page callback
+ // system_admin_menu_block_page() and therefore render its children as links
+ // on the page.
+ $items['admin/config/development/file-inheritance'] = array(
+ 'title' => 'File inheritance',
+ 'description' => 'Test file inheritance',
+ 'access arguments' => array('access content'),
+ );
+ $items['admin/config/development/file-inheritance/inherit'] = array(
+ 'title' => 'Inherit',
+ 'description' => 'File inheritance test description',
+ 'page callback' => 'menu_test_callback',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ );
+
return $items;
}