Commit 28fdb397 authored by Dries's avatar Dries

- Patch #39778 by chx: obliterate nodeapi op form in favor of the forms API's...

- Patch #39778 by chx: obliterate nodeapi op form in favor of the forms API's way of doing things.  Tested with help from webchick.
parent 3e36be3b
......@@ -445,10 +445,32 @@ function block_box_delete_confirm_submit($form_id, $form_values) {
function block_box_form($edit = array()) {
$form['title'] = array('#type' => 'textfield', '#title' => t('Block title'), '#default_value' => $edit['title'], '#maxlength' => 64, '#description' => t('The title of the block as shown to the user.'));
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Block title'),
'#default_value' => $edit['title'],
'#maxlength' => 64,
'#description' => t('The title of the block as shown to the user.'),
'#weight' => -18,
);
$form['body'] = array(
'#type' => 'textarea',
'#title' => t('Block body'),
'#default_value' => $edit['body'],
'#rows' => 15,
'#description' => t('The content of the block as shown to the user.'),
'#weight' => -17,
);
$form['format'] = filter_form($edit['format']);
$form['body'] = array('#type' => 'textarea', '#title' => t('Block body'), '#default_value' => $edit['body'], '#rows' => 15, '#description' => t('The content of the block as shown to the user.'));
$form['info'] = array('#type' => 'textfield', '#title' => t('Block description'), '#default_value' => $edit['info'], '#maxlength' => 64, '#description' => t('A brief description of your block. Used on the <a href="%overview">block overview page</a>.', array('%overview' => url('admin/block'))), '#required' => TRUE);
$form['info'] = array(
'#type' => 'textfield',
'#title' => t('Block description'),
'#default_value' => $edit['info'],
'#maxlength' => 64,
'#description' => t('A brief description of your block. Used on the <a href="%overview">block overview page</a>.', array('%overview' => url('admin/block'))),
'#required' => TRUE,
'#weight' => -15,
);
return $form;
}
......
......@@ -445,10 +445,32 @@ function block_box_delete_confirm_submit($form_id, $form_values) {
function block_box_form($edit = array()) {
$form['title'] = array('#type' => 'textfield', '#title' => t('Block title'), '#default_value' => $edit['title'], '#maxlength' => 64, '#description' => t('The title of the block as shown to the user.'));
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Block title'),
'#default_value' => $edit['title'],
'#maxlength' => 64,
'#description' => t('The title of the block as shown to the user.'),
'#weight' => -18,
);
$form['body'] = array(
'#type' => 'textarea',
'#title' => t('Block body'),
'#default_value' => $edit['body'],
'#rows' => 15,
'#description' => t('The content of the block as shown to the user.'),
'#weight' => -17,
);
$form['format'] = filter_form($edit['format']);
$form['body'] = array('#type' => 'textarea', '#title' => t('Block body'), '#default_value' => $edit['body'], '#rows' => 15, '#description' => t('The content of the block as shown to the user.'));
$form['info'] = array('#type' => 'textfield', '#title' => t('Block description'), '#default_value' => $edit['info'], '#maxlength' => 64, '#description' => t('A brief description of your block. Used on the <a href="%overview">block overview page</a>.', array('%overview' => url('admin/block'))), '#required' => TRUE);
$form['info'] = array(
'#type' => 'textfield',
'#title' => t('Block description'),
'#default_value' => $edit['info'],
'#maxlength' => 64,
'#description' => t('A brief description of your block. Used on the <a href="%overview">block overview page</a>.', array('%overview' => url('admin/block'))),
'#required' => TRUE,
'#weight' => -15,
);
return $form;
}
......
......@@ -230,7 +230,7 @@ function blog_form(&$node) {
$form['title'] = array('#type' => 'textfield', '#title' => t('Title'), '#required' => TRUE, '#default_value' => $node->title);
$form['body'] = array('#type' => 'textarea', '#title' => t('Body'), '#default_value' => $node->body, '#rows' => 20, '#required' => TRUE);
$form = array_merge($form, filter_form($node->format));
$form['filter'] = filter_form($node->format);
return $form;
}
......
......@@ -230,7 +230,7 @@ function blog_form(&$node) {
$form['title'] = array('#type' => 'textfield', '#title' => t('Title'), '#required' => TRUE, '#default_value' => $node->title);
$form['body'] = array('#type' => 'textarea', '#title' => t('Body'), '#default_value' => $node->body, '#rows' => 20, '#required' => TRUE);
$form = array_merge($form, filter_form($node->format));
$form['filter'] = filter_form($node->format);
return $form;
}
......
......@@ -255,7 +255,7 @@ function book_form(&$node) {
$form['body'] = array(
'#type' => 'textarea', '#title' => t('Body'), '#default_value' => $node->body, '#rows' => 20, '#required' => TRUE
);
$form = array_merge($form, filter_form($node->format));
$form['format'] = filter_form($node->format);
$form['log'] = array(
'#type' => 'fieldset', '#title' => t('Log message'), '#collapsible' => TRUE, '#collapsed' => TRUE
......
......@@ -255,7 +255,7 @@ function book_form(&$node) {
$form['body'] = array(
'#type' => 'textarea', '#title' => t('Body'), '#default_value' => $node->body, '#rows' => 20, '#required' => TRUE
);
$form = array_merge($form, filter_form($node->format));
$form['format'] = filter_form($node->format);
$form['log'] = array(
'#type' => 'fieldset', '#title' => t('Log message'), '#collapsible' => TRUE, '#collapsed' => TRUE
......
......@@ -232,8 +232,26 @@ function comment_link($type, $node = 0, $main = 0) {
}
function comment_form_alter($form_id, &$form) {
if (isset($form['type']) && $form['type']['#value'] .'_node_settings' == $form_id) {
$form['workflow']['comment_'. $form['type']['#value']] = array('#type' => 'radios', '#title' => t('Default comment setting'), '#default_value' => variable_get('comment_'. $form['type']['#value'], COMMENT_NODE_READ_WRITE), '#options' => array(t('Disabled'), t('Read only'), t('Read/Write')), '#description' => t('Users with the <em>administer comments</em> permission will be able to override this setting.'));
if (isset($form['type'])) {
if ($form['type']['#value'] .'_node_settings' == $form_id) {
$form['workflow']['comment_'. $form['type']['#value']] = array('#type' => 'radios', '#title' => t('Default comment setting'), '#default_value' => variable_get('comment_'. $form['type']['#value'], COMMENT_NODE_READ_WRITE), '#options' => array(t('Disabled'), t('Read only'), t('Read/Write')), '#description' => t('Users with the <em>administer comments</em> permission will be able to override this setting.'));
}
if ($form['type']['#value'] .'_node_form' == $form_id && user_access('administer comments')) {
$node = $form['#node'];
$selected = isset($node->comment) ? $node->comment : variable_get("comment_$node->type", COMMENT_NODE_READ_WRITE);
$form['user_comments'] = array(
'#type' => 'fieldset',
'#title' => t('User Comments'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['user_comments']['comment'] = array(
'#type' => 'radios',
'#parents' => array('comment'),
'#default_value' => $selected,
'#options' => array(t('Disabled'), t('Read only'), t('Read/Write')),
);
}
}
}
......@@ -246,15 +264,6 @@ function comment_nodeapi(&$node, $op, $arg = 0) {
case 'fields':
return array('comment');
case 'form':
if (user_access('administer comments')) {
$selected = isset($node->comment) ? $node->comment : variable_get("comment_$node->type", COMMENT_NODE_READ_WRITE);
$form['user_comments'] = array('#type' => 'fieldset', '#title' => t('User Comments'), '#collapsible' => TRUE, '#collapsed' => TRUE);
$form['user_comments']['comment'] = array('#type' => 'radios', '#parents' => array('comment'), '#default_value' => $selected, '#options' => array(t('Disabled'), t('Read only'), t('Read/Write')));
return $form;
}
break;
case 'load':
return db_fetch_array(db_query("SELECT last_comment_timestamp, last_comment_name, comment_count FROM {node_comment_statistics} WHERE nid = %d", $node->nid));
case 'validate':
......@@ -1156,8 +1165,7 @@ function comment_form($edit, $title = NULL) {
$form['comment'] = array('#type' => 'textarea', '#title' => t('Comment'), '#rows' => 15, '#default_value' => $edit['comment'] ? $edit['comment'] : $user->signature, '#required' => TRUE
);
$form = array_merge($form, filter_form($node->format));
$form['format']['#weight'] = 18;
$form['format'] = filter_form($node->format, 18);
$form['cid'] = array('#type' => 'value', '#value' => $edit['cid']);
$form['pid'] = array('#type' => 'value', '#value' => $edit['pid']);
......
......@@ -232,8 +232,26 @@ function comment_link($type, $node = 0, $main = 0) {
}
function comment_form_alter($form_id, &$form) {
if (isset($form['type']) && $form['type']['#value'] .'_node_settings' == $form_id) {
$form['workflow']['comment_'. $form['type']['#value']] = array('#type' => 'radios', '#title' => t('Default comment setting'), '#default_value' => variable_get('comment_'. $form['type']['#value'], COMMENT_NODE_READ_WRITE), '#options' => array(t('Disabled'), t('Read only'), t('Read/Write')), '#description' => t('Users with the <em>administer comments</em> permission will be able to override this setting.'));
if (isset($form['type'])) {
if ($form['type']['#value'] .'_node_settings' == $form_id) {
$form['workflow']['comment_'. $form['type']['#value']] = array('#type' => 'radios', '#title' => t('Default comment setting'), '#default_value' => variable_get('comment_'. $form['type']['#value'], COMMENT_NODE_READ_WRITE), '#options' => array(t('Disabled'), t('Read only'), t('Read/Write')), '#description' => t('Users with the <em>administer comments</em> permission will be able to override this setting.'));
}
if ($form['type']['#value'] .'_node_form' == $form_id && user_access('administer comments')) {
$node = $form['#node'];
$selected = isset($node->comment) ? $node->comment : variable_get("comment_$node->type", COMMENT_NODE_READ_WRITE);
$form['user_comments'] = array(
'#type' => 'fieldset',
'#title' => t('User Comments'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['user_comments']['comment'] = array(
'#type' => 'radios',
'#parents' => array('comment'),
'#default_value' => $selected,
'#options' => array(t('Disabled'), t('Read only'), t('Read/Write')),
);
}
}
}
......@@ -246,15 +264,6 @@ function comment_nodeapi(&$node, $op, $arg = 0) {
case 'fields':
return array('comment');
case 'form':
if (user_access('administer comments')) {
$selected = isset($node->comment) ? $node->comment : variable_get("comment_$node->type", COMMENT_NODE_READ_WRITE);
$form['user_comments'] = array('#type' => 'fieldset', '#title' => t('User Comments'), '#collapsible' => TRUE, '#collapsed' => TRUE);
$form['user_comments']['comment'] = array('#type' => 'radios', '#parents' => array('comment'), '#default_value' => $selected, '#options' => array(t('Disabled'), t('Read only'), t('Read/Write')));
return $form;
}
break;
case 'load':
return db_fetch_array(db_query("SELECT last_comment_timestamp, last_comment_name, comment_count FROM {node_comment_statistics} WHERE nid = %d", $node->nid));
case 'validate':
......@@ -1156,8 +1165,7 @@ function comment_form($edit, $title = NULL) {
$form['comment'] = array('#type' => 'textarea', '#title' => t('Comment'), '#rows' => 15, '#default_value' => $edit['comment'] ? $edit['comment'] : $user->signature, '#required' => TRUE
);
$form = array_merge($form, filter_form($node->format));
$form['format']['#weight'] = 18;
$form['format'] = filter_form($node->format, 18);
$form['cid'] = array('#type' => 'value', '#value' => $edit['cid']);
$form['pid'] = array('#type' => 'value', '#value' => $edit['pid']);
......
......@@ -750,7 +750,7 @@ function check_markup($text, $format = FILTER_FORMAT_DEFAULT, $check = TRUE) {
* @return
* HTML for the form element.
*/
function filter_form($value = FILTER_FORMAT_DEFAULT) {
function filter_form($value = FILTER_FORMAT_DEFAULT, $weight = -16) {
if ($value == FILTER_FORMAT_DEFAULT) {
$value = variable_get('filter_default_format', 1);
}
......@@ -759,11 +759,17 @@ function filter_form($value = FILTER_FORMAT_DEFAULT) {
$extra = l(t('More information about formatting options'), 'filter/tips');
if (count($formats) > 1) {
$form['format'] = array('#type' => 'fieldset', '#title' => t('Input format'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#weight' => -16);
$form = array(
'#type' => 'fieldset',
'#title' => t('Input format'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#weight' => $weight,
);
// Multiple formats available: display radio buttons with tips.
foreach ($formats as $format) {
$form['format'][$format->format] = array(
'#type' => 'filter_format',
$form[$format->format] = array(
'#type' => 'radio',
'#title' => $format->name,
'#default_value' => $value,
'#return_value' => $format->format,
......@@ -772,16 +778,19 @@ function filter_form($value = FILTER_FORMAT_DEFAULT) {
'#validate' => array('filter_form_validate' => array())
);
}
return $form;
}
else {
// Only one format available: use a hidden form item and only show tips.
$format = array_shift($formats);
$form['format'][$format->name] = array('#type' => 'value', '#value' => $format->format);
$form[$format->name] = array('#type' => 'value', '#value' => $format->format);
$tips = _filter_tips(variable_get('filter_default_format', 1), false);
$form['format']['guidelines'] = array('#type' => 'markup', '#title' => t('Formatting guidelines'), '#value' => theme('filter_tips', $tips, false, $extra));
return $form;
$form['guidelines'] = array(
'#type' => 'markup',
'#title' => t('Formatting guidelines'),
'#value' => theme('filter_tips', $tips, false, $extra),
);
}
return $form;
}
function filter_form_validate($element) {
......
......@@ -750,7 +750,7 @@ function check_markup($text, $format = FILTER_FORMAT_DEFAULT, $check = TRUE) {
* @return
* HTML for the form element.
*/
function filter_form($value = FILTER_FORMAT_DEFAULT) {
function filter_form($value = FILTER_FORMAT_DEFAULT, $weight = -16) {
if ($value == FILTER_FORMAT_DEFAULT) {
$value = variable_get('filter_default_format', 1);
}
......@@ -759,11 +759,17 @@ function filter_form($value = FILTER_FORMAT_DEFAULT) {
$extra = l(t('More information about formatting options'), 'filter/tips');
if (count($formats) > 1) {
$form['format'] = array('#type' => 'fieldset', '#title' => t('Input format'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#weight' => -16);
$form = array(
'#type' => 'fieldset',
'#title' => t('Input format'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#weight' => $weight,
);
// Multiple formats available: display radio buttons with tips.
foreach ($formats as $format) {
$form['format'][$format->format] = array(
'#type' => 'filter_format',
$form[$format->format] = array(
'#type' => 'radio',
'#title' => $format->name,
'#default_value' => $value,
'#return_value' => $format->format,
......@@ -772,16 +778,19 @@ function filter_form($value = FILTER_FORMAT_DEFAULT) {
'#validate' => array('filter_form_validate' => array())
);
}
return $form;
}
else {
// Only one format available: use a hidden form item and only show tips.
$format = array_shift($formats);
$form['format'][$format->name] = array('#type' => 'value', '#value' => $format->format);
$form[$format->name] = array('#type' => 'value', '#value' => $format->format);
$tips = _filter_tips(variable_get('filter_default_format', 1), false);
$form['format']['guidelines'] = array('#type' => 'markup', '#title' => t('Formatting guidelines'), '#value' => theme('filter_tips', $tips, false, $extra));
return $form;
$form['guidelines'] = array(
'#type' => 'markup',
'#title' => t('Formatting guidelines'),
'#value' => theme('filter_tips', $tips, false, $extra),
);
}
return $form;
}
function filter_form_validate($element) {
......
......@@ -591,7 +591,7 @@ function forum_form(&$node) {
$form['body'] = array('#type' => 'textarea', '#title' => t('Body'), '#default_value' => $node->body, '#rows' => 20, '#required' => TRUE
);
$form = array_merge($form, filter_form($node->format));
$form['format'] = filter_form($node->format);
return $form;
}
......
......@@ -591,7 +591,7 @@ function forum_form(&$node) {
$form['body'] = array('#type' => 'textarea', '#title' => t('Body'), '#default_value' => $node->body, '#rows' => 20, '#required' => TRUE
);
$form = array_merge($form, filter_form($node->format));
$form['format'] = filter_form($node->format);
return $form;
}
......
......@@ -106,21 +106,17 @@ 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' => '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'))),
'#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')))
);
$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');
......@@ -133,32 +129,9 @@ 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.'),
);
$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.'),
'#description' => t('If you select the same menu as primary links then secondary links will display the appropriate second level of your navigation hierarchy.')
);
$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);
}
......@@ -192,12 +165,6 @@ function menu_nodeapi(&$node, $op) {
if (user_access('administer menu')) {
switch ($op) {
case 'form':
$edit = isset($_POST['edit']) ? $_POST['edit'] : '';
$edit['nid'] = isset($node->nid) ? $node->nid : '';
return menu_node_form($edit);
break;
case 'insert':
case 'update':
if ($node->menu['delete']) {
......@@ -593,51 +560,29 @@ 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. 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.
* given menu item.
*/
function menu_parent_options($mid, $pid = 0, $depth = 0) {
$menu = menu_get_menu();
$options = array();
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']) {
if (isset($menu['items'][$pid]) && $menu['items'][$pid]['children']) {
usort($menu['items'][$pid]['children'], '_menu_sort');
foreach ($menu['items'][$pid]['children'] as $child) {
$options += menu_parent_options($mid, $child, $depth);
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);
}
}
}
......@@ -647,84 +592,87 @@ function menu_parent_options($mid, $pid = 0, $depth = 0) {
/**
* Add menu item fields to the node form.
*/
function menu_node_form($edit = array()) {
$item = array();
if ($edit['nid'] > 0) {
$item = db_fetch_array(db_query("SELECT * FROM {menu} WHERE path = 'node/%d'", $edit['nid']));
if (is_array($edit['menu'])) {
$item = !is_array($item) ? $edit['menu'] : (($_POST['op'] == t('Preview')) ? array_merge($item, $edit['menu']) : array_merge($edit['menu'], $item));
function menu_form_alter($form_id, &$form) {
if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
$edit = isset($_POST['edit']) ? $_POST['edit'] : '';
$edit['nid'] = $form['nid']['#value'];
$item = array();
if ($edit['nid'] > 0) {
$item = db_fetch_array(db_query("SELECT * FROM {menu} WHERE path = 'node/%d'", $edit['nid']));
if (is_array($edit['menu'])) {
$item = !is_array($item) ? $edit['menu'] : (($_POST['op'] == t('Preview')) ? array_merge($item, $edit['menu']) : array_merge($edit['menu'], $item));
}
}
}
$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']['description'] = array(
'#type' => 'textfield',
'#title' => t('Description'),
'#default_value' => $item['description'],
'#description' => t('The description displayed when hovering over a menu item.'),
);
$form['menu'] = array(
'#type' => 'fieldset',
'#title' => t('Menu settings'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#tree' => TRUE,
);
// Generate a list of possible parents.
$options = menu_parent_options($item['mid'], variable_get('menu_parent_items', 0));
$form['menu']['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => $item['title'],
'#description' => t('The name to display for this link.'),
);
$form['menu']['pid'] = array(
'#type' => select,
'#title' => t('Parent item'),
'#default_value' => $item['pid'],
'#options' => $options,
);
$form['menu']['description'] = array(
'#type' => 'textfield',
'#title' => t('Description'),
'#default_value' => $item['description'],
'#description' => t('The description displayed when hovering over a menu item.'),
);
$form['menu']['path'] = array(
'#type' => 'hidden',
'#value' => $item['path'],
);
// Generate a list of possible parents.
$options = menu_parent_options($item['mid'], variable_get('menu_parent_items', 0));
$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']['pid'] = array(
'#type' => select,
'#title' => t('Parent item'),
'#default_value' => $item['pid'],
'#options' => $options,
);
$form['menu']['mid'] = array(
'#type' => 'hidden',
'#value' => $item['mid'] ? $item['mid'] : 0,
);
$form['menu']['path'] = array(
'#type' => 'hidden',
'#value' => $item['path'],
);
$form['menu']['type'] = array(
'#type' => 'hidden',
'#value' => $item['type'] ? $item['type'] : MENU_CUSTOM_ITEM,
);
$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 wi