=== modified file 'includes/menu.inc' --- includes/menu.inc 2010-09-16 19:47:45 +0000 +++ includes/menu.inc 2010-09-19 15:36:45 +0000 @@ -3231,10 +3231,15 @@ function _menu_router_build($callbacks) // If an access callback is not found for a default local task we use // the callback from the parent, since we expect them to be identical. // In all other cases, the access parameters must be specified. - if (($item['type'] == MENU_DEFAULT_LOCAL_TASK) && !isset($item['access callback']) && isset($parent['access callback'])) { - $item['access callback'] = $parent['access callback']; - if (!isset($item['access arguments']) && isset($parent['access arguments'])) { - $item['access arguments'] = $parent['access arguments']; + if (($item['type'] == MENU_DEFAULT_LOCAL_TASK)) { + if (!isset($item['access callback']) && isset($parent['access callback'])) { + $item['access callback'] = $parent['access callback']; + if (!isset($item['access arguments']) && isset($parent['access arguments'])) { + $item['access arguments'] = $parent['access arguments']; + } + } + if (!isset($item['page callback'])) { + $item['page callback'] = 'menu_goto_tab_parent'; } } // Same for page callbacks. @@ -3436,5 +3441,20 @@ function _menu_site_is_offline($check_on } /** + * The default page callback for MENU_DEFAULT_LOCAL_TASKs. + * + * As Drupal never links to these pages, redirect to the parent. + */ +function menu_goto_tab_parent() { + $item = menu_get_item(); + // We can't use menu_get_item() to get the tab parent because the + // translated path to the parent is unknown. + $parent = db_query('SELECT * FROM {menu_router} WHERE path = :path', array(':path' => $item['tab_parent']))->fetchAssoc(); + $map = arg(); + _menu_translate($parent, $map, TRUE); + drupal_goto($parent['href']); +} + +/** * @} End of "defgroup menu". */