Commit 9677ab12 authored by Dries's avatar Dries
Browse files

- Patch #32665 by Richard Archer: add more functionality to menu item settings...

- Patch #32665 by Richard Archer: add more functionality to menu item settings on node/*/edit pages.
parent 94f290c8
......@@ -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 <a href="%menu">menu administration</a> 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 <a href="%menu">menu administration</a> 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);
}
......@@ -576,29 +603,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);
}
}
......@@ -617,22 +666,72 @@ function menu_node_form($edit = array()) {
}
}
$form['menu'] = array('#type' => 'fieldset', '#title' => t('Menu settings'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#tree' => TRUE);
$form['menu'] = array(
'#type' => 'fieldset',
'#title' => t('Menu settings'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#tree' => TRUE,
);
$form['menu']['title'] = array('#type' => 'textfield', '#title' => t('Title'), '#default_value' => $item['title'], '#description' => t('The name to display for this link.'));
$form['menu']['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => $item['title'],
'#description' => t('The name to display for this link.'),
);
$form['menu']['description'] = array(
'#type' => 'textfield',
'#title' => t('Description'),
'#default_value' => $item['description'],
'#description' => t('The description displayed when hovering over a menu item.'),
);
// Generate a list of possible parents (not including this item or descendants).
$options = menu_parent_options($item['mid']);
$form['menu']['pid'] = array('#type' => select, '#title' => t('Parent item'), '#default_value' => $item['pid'], '#options' => $options);
$form['menu']['description'] = array('#type' => 'hidden', '#value' => $item['description']);
$form['menu']['path'] = array('#type' => 'hidden', '#value' => $item['path']);
$form['menu']['weight'] = array('#type' => 'hidden', '#value' => $item['weight'] ? $item['weight'] : 0);
// Generate a list of possible parents.
$options = menu_parent_options($item['mid'], variable_get('menu_parent_items', 0));
$form['menu']['mid'] = array('#type' => 'hidden', '#value' => $item['mid'] ? $item['mid'] : 0);
$form['menu']['type'] = array('#type' => 'hidden', '#value' => $item['type'] ? $item['type'] : MENU_CUSTOM_ITEM);
$form['menu']['pid'] = array(
'#type' => select,
'#title' => t('Parent item'),
'#default_value' => $item['pid'],
'#options' => $options,
);
$form['menu']['path'] = array(
'#type' => 'hidden',
'#value' => $item['path'],
);
$form['menu']['weight'] = array(
'#type' => 'weight',
'#title' => t('Weight'),
'#default_value' => $item['weight'],
'#delta' => 10,
'#description' => t('Optional. In the menu, the heavier items will sink and the lighter items will be positioned nearer the top.'),
);
$form['menu']['mid'] = array(
'#type' => 'hidden',
'#value' => $item['mid'] ? $item['mid'] : 0,
);
$form['menu']['type'] = array(
'#type' => 'hidden',
'#value' => $item['type'] ? $item['type'] : MENU_CUSTOM_ITEM,
);
if ($item['mid'] > 0) {
$form['menu']['delete'] = array('#type' => 'checkbox', '#title' => t('Check to delete this menu item.'), '#default_value' => $item['delete']);
$form['menu']['delete'] = array(
'#type' => 'checkbox',
'#title' => t('Check to delete this menu item.'),
'#default_value' => $item['delete'],
);
$form['menu']['advanced'] = array(
'#type' => 'item',
'#value' => t('You may also <a href="%edit">edit the advanced settings</a> for this menu item.', array('%edit' => url("admin/menu/item/edit/{$item['mid']}"))),
);
}
return $form;
......
......@@ -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 <a href="%menu">menu administration</a> 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 <a href="%menu">menu administration</a> 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);
}
......@@ -576,29 +603,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);
}
}
......@@ -617,22 +666,72 @@ function menu_node_form($edit = array()) {
}
}
$form['menu'] = array('#type' => 'fieldset', '#title' => t('Menu settings'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#tree' => TRUE);
$form['menu'] = array(
'#type' => 'fieldset',
'#title' => t('Menu settings'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#tree' => TRUE,
);
$form['menu']['title'] = array('#type' => 'textfield', '#title' => t('Title'), '#default_value' => $item['title'], '#description' => t('The name to display for this link.'));
$form['menu']['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => $item['title'],
'#description' => t('The name to display for this link.'),
);
$form['menu']['description'] = array(
'#type' => 'textfield',
'#title' => t('Description'),
'#default_value' => $item['description'],
'#description' => t('The description displayed when hovering over a menu item.'),
);
// Generate a list of possible parents (not including this item or descendants).
$options = menu_parent_options($item['mid']);
$form['menu']['pid'] = array('#type' => select, '#title' => t('Parent item'), '#default_value' => $item['pid'], '#options' => $options);
$form['menu']['description'] = array('#type' => 'hidden', '#value' => $item['description']);
$form['menu']['path'] = array('#type' => 'hidden', '#value' => $item['path']);
$form['menu']['weight'] = array('#type' => 'hidden', '#value' => $item['weight'] ? $item['weight'] : 0);
// Generate a list of possible parents.
$options = menu_parent_options($item['mid'], variable_get('menu_parent_items', 0));
$form['menu']['mid'] = array('#type' => 'hidden', '#value' => $item['mid'] ? $item['mid'] : 0);
$form['menu']['type'] = array('#type' => 'hidden', '#value' => $item['type'] ? $item['type'] : MENU_CUSTOM_ITEM);
$form['menu']['pid'] = array(
'#type' => select,
'#title' => t('Parent item'),
'#default_value' => $item['pid'],
'#options' => $options,
);
$form['menu']['path'] = array(
'#type' => 'hidden',
'#value' => $item['path'],
);
$form['menu']['weight'] = array(
'#type' => 'weight',
'#title' => t('Weight'),
'#default_value' => $item['weight'],
'#delta' => 10,
'#description' => t('Optional. In the menu, the heavier items will sink and the lighter items will be positioned nearer the top.'),
);
$form['menu']['mid'] = array(
'#type' => 'hidden',
'#value' => $item['mid'] ? $item['mid'] : 0,
);
$form['menu']['type'] = array(
'#type' => 'hidden',
'#value' => $item['type'] ? $item['type'] : MENU_CUSTOM_ITEM,
);
if ($item['mid'] > 0) {
$form['menu']['delete'] = array('#type' => 'checkbox', '#title' => t('Check to delete this menu item.'), '#default_value' => $item['delete']);
$form['menu']['delete'] = array(
'#type' => 'checkbox',
'#title' => t('Check to delete this menu item.'),
'#default_value' => $item['delete'],
);
$form['menu']['advanced'] = array(
'#type' => 'item',
'#value' => t('You may also <a href="%edit">edit the advanced settings</a> for this menu item.', array('%edit' => url("admin/menu/item/edit/{$item['mid']}"))),
);
}
return $form;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment