summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2007-08-11 14:06:15 +0000
committerDries Buytaert <dries@buytaert.net>2007-08-11 14:06:15 +0000
commit15c68075d9fe8350a78a9ac5969ecff1be2cee49 (patch)
treed5c48980e30ff7ffd709bf180f9dad6e31d8dbcf /modules
parent541c9673b4e2bab76a423d40c5f48cdae2e5c8de (diff)
downloadbrdo-15c68075d9fe8350a78a9ac5969ecff1be2cee49.tar.gz
brdo-15c68075d9fe8350a78a9ac5969ecff1be2cee49.tar.bz2
- Patch #154470 by pwolanin et al: optimize menu queries and indices.
Diffstat (limited to 'modules')
-rw-r--r--modules/book/book.module11
-rw-r--r--modules/menu/menu.module41
-rw-r--r--modules/system/system.install18
-rw-r--r--modules/system/system.schema18
4 files changed, 54 insertions, 34 deletions
diff --git a/modules/book/book.module b/modules/book/book.module
index 11b11d258..f67f0e004 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -620,7 +620,7 @@ function book_outline_form_submit($form, &$form_state) {
}
}
else {
- drupal_set_message(t('There was an error adding the post to the book.'));
+ drupal_set_message(t('There was an error adding the post to the book.'), 'error');
}
}
@@ -1451,8 +1451,9 @@ function book_menu_subtree_data($item) {
$data = $cache->data;
}
else {
+ $match = array("menu_name = '%s'");
+ $args = array($item['menu_name']);
$i = 1;
- $match = array();
while ($i <= MENU_MAX_DEPTH && $item["p$i"]) {
$match[] = "p$i = %d";
$args[] = $item["p$i"];
@@ -1460,10 +1461,10 @@ function book_menu_subtree_data($item) {
}
$sql = "
SELECT b.*, m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.type, ml.*
- FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path
+ FROM {menu_links} ml INNER JOIN {menu_router} m ON m.path = ml.router_path
INNER JOIN {book} b ON ml.mlid = b.mlid
- WHERE ml.hidden >= 0 AND ". implode(' AND ', $match) ."
- ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC";
+ WHERE ". implode(' AND ', $match) ."
+ ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC";
$data['tree'] = menu_tree_data(db_query($sql, $args), array(), $item['depth']);
$data['node_links'] = array();
diff --git a/modules/menu/menu.module b/modules/menu/menu.module
index abe5889d5..6ca854633 100644
--- a/modules/menu/menu.module
+++ b/modules/menu/menu.module
@@ -70,6 +70,8 @@ function menu_menu() {
'title' => 'Customize menu',
'page callback' => 'menu_overview',
'page arguments' => array(3),
+ 'title callback' => 'menu_overview_title',
+ 'title arguments' => array(3),
'access arguments' => array('administer menu'),
'type' => MENU_CALLBACK);
$items['admin/build/menu-customize/%menu/list'] = array(
@@ -142,6 +144,13 @@ function menu_enable() {
}
/**
+ * Title callback for the menu overview page and links.
+ */
+function menu_overview_title($menu) {
+ return t('!menu_title (overview)', array('!menu_title' => $menu['title']));
+}
+
+/**
* Load the data for a single custom menu.
*/
function menu_load($menu_name) {
@@ -171,14 +180,14 @@ function menu_overview($menu) {
$sql ="
SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.type, ml.*
FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path
- WHERE ml.menu_name = '%s' AND ml.hidden >= 0
- ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC";
- $sql_count = "SELECT COUNT(*) FROM {menu_links} ml WHERE menu_name = '%s' AND hidden >= 0";
+ WHERE ml.menu_name = '%s'
+ ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC";
+ $sql_count = "SELECT COUNT(*) FROM {menu_links} ml WHERE menu_name = '%s'";
$result = pager_query($sql, 200, 0, $sql_count, $menu['menu_name']);
$tree = menu_tree_data($result);
$node_links = array();
menu_tree_collect_node_links($tree, $node_links);
- menu_tree_check_access($tree, $node_links, TRUE);
+ menu_tree_check_access($tree, $node_links);
$rows = _menu_overview_tree($tree);
$output = theme('table', $header, $rows);
$output .= theme('pager', NULL, 200, 0);
@@ -192,9 +201,11 @@ function _menu_overview_tree($tree) {
static $rows = array();
foreach ($tree as $data) {
$title = '';
- if ($item = $data['link']) {
+ $item = $data['link'];
+ // Don't show callbacks; these have $item['hidden'] < 0.
+ if ($item && $item['hidden'] >= 0) {
$title = str_repeat('&nbsp;&nbsp;', $item['depth'] - 1) . ($item['depth'] > 1 ? '-&nbsp;' : '');
- $title .= l($item['link_title'], $item['href'], $item['options']);
+ $title .= l($item['title'], $item['href'], $item['options']);
// Populate the operations field.
$operations = array();
// Set the edit column.
@@ -360,7 +371,9 @@ function menu_item_delete_submit($form, &$form_state) {
function menu_edit_item_submit($form, &$form_state) {
$form_state['values']['options']['attributes']['title'] = $form_state['values']['description'];
list($form_state['values']['menu_name'], $form_state['values']['plid']) = explode(':', $form_state['values']['parent']);
- menu_link_save($form_state['values']);
+ if (!menu_link_save($form_state['values'])) {
+ drupal_set_message(t('There was an error saving the menu link.'), 'error');
+ }
$form_state['redirect'] = 'admin/build/menu-customize/'. $form_state['values']['menu_name'];
}
@@ -379,7 +392,7 @@ function menu_edit_item_submit($form, &$form_state) {
function menu_parent_options($menus, $item) {
foreach ($menus as $menu_name => $title) {
- $tree = menu_tree_all_data($menu_name, NULL, TRUE);
+ $tree = menu_tree_all_data($menu_name, NULL);
$options[$menu_name .':0'] = '<'. $title .'>';
_menu_parents_recurse($tree, $menu_name, '--', $options, $item['mlid']);
}
@@ -391,14 +404,14 @@ function menu_parent_options($menus, $item) {
*/
function _menu_parents_recurse($tree, $menu_name, $indent, &$options, $exclude) {
foreach ($tree as $data) {
- if ($data['link']['mlid'] != $exclude) {
+ if ($data['link']['mlid'] != $exclude && $data['link']['hidden'] >= 0) {
$title = $indent .' '. truncate_utf8($data['link']['title'], 30, TRUE, FALSE);
if ($data['link']['hidden']) {
$title .= ' ('. t('disabled') .')';
}
$options[$menu_name .':'. $data['link']['mlid']] = $title;
if ($data['below'] && $data['link']['depth'] < MENU_MAX_DEPTH - 1) {
- _menu_parents_recurse($data['below'], $menu_name, $indent .'--', $options, $exclude);
+ _menu_parents_recurse($data['below'], $menu_name, $indent .'--', $options, $exclude);
}
}
}
@@ -500,7 +513,7 @@ function menu_delete_menu_confirm_submit($form, &$form_state) {
// Delete all links to the overview page for this menu.
$result = db_query("SELECT mlid FROM {menu_links} ml WHERE ml.link_path = '%s'", 'admin/build/menu-customize/'. $menu['menu_name']);
while ($m = db_fetch_array($result)) {
- menu_link_delete($m['mlid']);
+ menu_link_delete($m['mlid']);
}
// Delete all the links in the menu and the menu from the list of custom menus.
db_query("DELETE FROM {menu_links} WHERE menu_name = '%s'", $menu['menu_name']);
@@ -527,7 +540,7 @@ function menu_edit_menu_validate($form, &$form_state) {
// We will add 'menu-' to the menu name to help avoid name-space conflicts.
$item['menu_name'] = 'menu-'. $item['menu_name'];
if (db_result(db_query("SELECT menu_name FROM {menu_custom} WHERE menu_name = '%s'", $item['menu_name'])) ||
- db_result(db_query_range("SELECT menu_name FROM {menu_links} WHERE menu_name = '%s'", $item['menu_name'], 0, 1))) {
+ db_result(db_query_range("SELECT menu_name FROM {menu_links} WHERE menu_name = '%s'", $item['menu_name'], 0, 1))) {
form_set_error('menu_name', t('Menu already exists'));
}
}
@@ -663,7 +676,9 @@ function menu_nodeapi(&$node, $op) {
if (!$item['customized']) {
$item['options']['attributes']['title'] = trim($node->title);
}
- menu_link_save($item);
+ if (!menu_link_save($item)) {
+ drupal_set_message(t('There was an error saving the menu link.'), 'error');
+ }
}
}
break;
diff --git a/modules/system/system.install b/modules/system/system.install
index 9882d4601..37f67941c 100644
--- a/modules/system/system.install
+++ b/modules/system/system.install
@@ -3333,6 +3333,9 @@ function system_update_6020() {
'plid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'link_path' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
'router_path' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
+ 'link_title' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
+ 'options' => array('type' => 'text', 'not null' => FALSE),
+ 'module' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => 'system'),
'hidden' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'small'),
'external' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'small'),
'has_children' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'small'),
@@ -3346,16 +3349,15 @@ function system_update_6020() {
'p4' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'p5' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'p6' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
- 'module' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => 'system'),
- 'link_title' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
- 'options' => array('type' => 'text', 'not null' => FALSE)
+ 'p7' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+ 'p8' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+ 'p9' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
),
'indexes' => array(
- 'expanded_children' => array('expanded', 'has_children'),
- 'menu_name_path' => array('menu_name', 'link_path'),
- 'plid'=> array('plid'),
- 'parents' => array('p1', 'p2', 'p3', 'p4', 'p5'),
- 'router_path' => array('router_path'),
+ 'path_menu' => array(array('link_path', 128), 'menu_name'),
+ 'menu_plid_expand_child' => array('menu_name', 'plid', 'expanded', 'has_children'),
+ 'menu_parents' => array('menu_name', 'p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8', 'p9'),
+ 'router_path' => array(array('router_path', 128)),
),
'primary key' => array('mlid'),
);
diff --git a/modules/system/system.schema b/modules/system/system.schema
index bc1428bb7..9e05060f1 100644
--- a/modules/system/system.schema
+++ b/modules/system/system.schema
@@ -104,6 +104,9 @@ function system_schema() {
'plid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'link_path' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
'router_path' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
+ 'link_title' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
+ 'options' => array('type' => 'text', 'not null' => FALSE),
+ 'module' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => 'system'),
'hidden' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'small'),
'external' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'small'),
'has_children' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'size' => 'small'),
@@ -117,16 +120,15 @@ function system_schema() {
'p4' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'p5' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
'p6' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
- 'module' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => 'system'),
- 'link_title' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''),
- 'options' => array('type' => 'text', 'not null' => FALSE)
+ 'p7' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+ 'p8' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+ 'p9' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
),
'indexes' => array(
- 'expanded_children' => array('expanded', 'has_children'),
- 'menu_name_path' => array('menu_name', 'link_path'),
- 'plid'=> array('plid'),
- 'parents' => array('p1', 'p2', 'p3', 'p4', 'p5'),
- 'router_path' => array('router_path'),
+ 'path_menu' => array(array('link_path', 128), 'menu_name'),
+ 'menu_plid_expand_child' => array('menu_name', 'plid', 'expanded', 'has_children'),
+ 'menu_parents' => array('menu_name', 'p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8', 'p9'),
+ 'router_path' => array(array('router_path', 128)),
),
'primary key' => array('mlid'),
);