From ad3d637c57bcb3645b189b05b04d464a0149c229 Mon Sep 17 00:00:00 2001 From: Dries Buytaert Date: Mon, 5 Dec 2005 10:38:42 +0000 Subject: - Patch by Richard: fixing breakage caused by the 'Obliterate nodeapi op form' patch. --- modules/menu/menu.module | 89 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 69 insertions(+), 20 deletions(-) (limited to 'modules/menu/menu.module') diff --git a/modules/menu/menu.module b/modules/menu/menu.module index 1eb896873..b1ec8e114 100644 --- a/modules/menu/menu.module +++ b/modules/menu/menu.module @@ -106,17 +106,21 @@ function menu_configure() { $primary_options[$mid] = $menu['items'][$mid]['title']; } - $form['settings_links'] = array('#type' => 'fieldset', '#title' => t('Primary links settings')); + $form['settings_links'] = array( + '#type' => 'fieldset', + '#title' => t('Primary links settings'), + ); + $form['settings_links']['intro'] = array( - '#type' => 'markup', - '#value' => t('Primary links is a navigation system which usually (depending on your theme) appears at the top-right of the browser window. There are usually two rows of links, primary and secondary. You may control which links appear in this area by choosing a menu from which the links will be generated and then placing your links into the menu using the menu administration or the \'Menu settings\' pane on each edit node form.', array('%menu' => url('admin/menu'))) + '#type' => 'item', + '#value' => t('Primary links is a navigation system which usually (depending on your theme) appears at the top-right of the browser window. There are usually two rows of links, primary and secondary. You may control which links appear in this area by choosing a menu from which the links will be generated and then placing your links into the menu using the menu administration or the menu settings pane on each post authoring form.', array('%menu' => url('admin/menu'))), ); $form['settings_links']['menu_primary_menu'] = array( '#type' => 'select', '#title' => t('Menu containing primary links'), '#default_value' => variable_get('menu_primary_menu', 0), - '#options' => $primary_options + '#options' => $primary_options, ); $secondary_options[0] = t('No secondary links'); @@ -129,9 +133,32 @@ function menu_configure() { '#title' => t('Menu containing secondary links'), '#default_value' => variable_get('menu_secondary_menu', 0), '#options' => $secondary_options, - '#description' => t('If you select the same menu as primary links then secondary links will display the appropriate second level of your navigation hierarchy.') + '#description' => t('If you select the same menu as primary links then secondary links will display the appropriate second level of your navigation hierarchy.'), + ); + + $form['settings_authoring'] = array( + '#type' => 'fieldset', + '#title' => t('Post authoring form settings'), + ); + + $form['settings_authoring']['intro'] = array( + '#type' => 'item', + '#value' => t('On each post authoring form there is a menu settings pane. This setting allows you to limit what is displayed in the parent item drop-down menu of that pane. This can be used to force new menu items to be created in the primary links menu or to hide admin menu items.'), ); + $authoring_options = array(0 => t('Show all menus')); + foreach ($menu['items'][0]['children'] as $mid) { + $authoring_options[$mid] = $menu['items'][$mid]['title']; + } + + $form['settings_authoring']['menu_parent_items'] = array( + '#type' => 'select', + '#title' => t('Restrict parent items to'), + '#default_value' => variable_get('menu_parent_items', 0), + '#options' => $authoring_options, + '#description' => t('Choose the menu from which parent items will be made available. Only this menu item and its children will be shown.'), + ); + return system_settings_form('menu_configure', $form); } @@ -560,29 +587,51 @@ function menu_overview_tree_rows($pid = 0, $depth = 0) { /** * Return a list of menu items that are valid possible parents for the - * given menu item. + * given menu item. The list excludes the given item and its children. + * + * @param $mid + * The menu item id for which to generate a list of parents. + * If $mid == 0 then the complete tree is returned. + * @param $pid + * The menu item id of the menu item at which to start the tree. + * If $pid > 0 then this item will be included in the tree. + * @param $depth + * The current depth in the tree - used when recursing to indent the tree. + * @return + * An array of menu titles keyed on the mid. */ function menu_parent_options($mid, $pid = 0, $depth = 0) { $menu = menu_get_menu(); $options = array(); - if (isset($menu['items'][$pid]) && $menu['items'][$pid]['children']) { + if (!isset($menu['items'][$pid])) { + return $options; + } + + // Exclude $mid and its children from the list unless $mid is 0. + if ($mid && $mid == $pid) { + return $options; + } + + // Add the current $pid to the list. + if ($pid > 0 && ($menu['items'][$pid]['type'] & (MENU_MODIFIABLE_BY_ADMIN | MENU_IS_ROOT))) { + $title = ' '. $menu['items'][$pid]['title']; + for ($i = 0; $i < $depth; $i++) { + $title = '--'. $title; + } + if (!($menu['items'][$pid]['type'] & MENU_VISIBLE_IN_TREE)) { + $title .= ' ('. t('disabled') .')'; + } + $options[$pid] = $title; + $depth ++; + } + + // Add children of $pid to the list recursively. + if ($menu['items'][$pid]['children']) { usort($menu['items'][$pid]['children'], '_menu_sort'); foreach ($menu['items'][$pid]['children'] as $child) { - if ($child != $mid) { - if ($child > 0 && ($menu['items'][$child]['type'] & (MENU_MODIFIABLE_BY_ADMIN | MENU_IS_ROOT))) { - $title = ' '. $menu['items'][$child]['title']; - for ($i = 0; $i < $depth; $i++) { - $title = '--'. $title; - } - if (!($menu['items'][$child]['type'] & (MENU_VISIBLE_IN_TREE | MENU_VISIBLE_IF_HAS_CHILDREN))) { - $title .= ' ('. t('disabled') .')'; - } - $options[$child] = $title; - } - $options += menu_parent_options($mid, $child, $depth + 1); - } + $options += menu_parent_options($mid, $child, $depth); } } -- cgit v1.2.3