diff --git includes/menu.inc includes/menu.inc index 80d7631..5bc1608 100644 --- includes/menu.inc +++ includes/menu.inc @@ -1385,7 +1385,13 @@ function menu_get_names() { * Return an array containing the names of system-defined (default) menus. */ function menu_list_system_menus() { - return array('navigation' => 'Navigation', 'management' => 'Management', 'user-menu' => 'User menu', 'main-menu' => 'Main menu', 'secondary-menu' => 'Secondary menu'); + return array( + 'navigation' => 'Navigation', + 'management' => 'Management', + 'user-menu' => 'User menu', + 'main-menu' => 'Main menu', + 'secondary-menu' => 'Secondary menu', + ); } /** diff --git modules/menu/menu.admin.inc modules/menu/menu.admin.inc index 70fb40d..a4f29f5 100644 --- modules/menu/menu.admin.inc +++ modules/menu/menu.admin.inc @@ -530,12 +530,9 @@ function menu_delete_menu_confirm_submit($form, &$form_state) { menu_link_delete($m['mlid']); } // Delete all the links in the menu and the menu from the list of custom menus. - db_delete('menu_links') - ->condition('menu_name', $menu['menu_name']) - ->execute(); - db_delete('menu_custom') - ->condition('menu_name', $menu['menu_name']) - ->execute(); + menu_delete_custom_menu($menu['menu_name']); + + // Delete all the blocks for this menu. if (module_exists('block')) { db_delete('block') @@ -597,22 +594,10 @@ function menu_edit_menu_submit($form, &$form_state) { ->fetchField(); menu_link_save($link); - db_insert('menu_custom') - ->fields(array( - 'menu_name' => $menu['menu_name'], - 'title' => $menu['title'], - 'description' => $menu['description'], - )) - ->execute(); + menu_save_custom_menu($menu['menu_name'], $menu['title'], $menu['description']); } else { - db_update('menu_custom') - ->fields(array( - 'title' => $menu['title'], - 'description' => $menu['description'], - )) - ->condition('menu_name', $menu['menu_name']) - ->execute(); + menu_save_custom_menu($menu['menu_name'], $menu['title'], $menu['description']); $result = db_query("SELECT mlid FROM {menu_links} WHERE link_path = :path", array(':path' => $path . $menu['menu_name']), array('fetch' => PDO::FETCH_ASSOC)); foreach ($result as $m) { $link = menu_link_load($m['mlid']); diff --git modules/menu/menu.install modules/menu/menu.install index 7f0294a..81be00f 100644 --- modules/menu/menu.install +++ modules/menu/menu.install @@ -19,9 +19,8 @@ function menu_install() { 'secondary-menu' => 'The Secondary menu is the default source for the Secondary links which are often used for legal notices, contact details, and other navigation items that play a lesser role than the Main links.', ); $t = get_t(); - $query = db_insert('menu_custom')->fields(array('menu_name', 'title', 'description')); foreach ($system_menus as $menu_name => $title) { - $query->values(array('menu_name' => $menu_name, 'title' => $t($title), 'description' => $t($descriptions[$menu_name])))->execute(); + menu_save_custom_menu($menu_name, $t($title), $t($descriptions[$menu_name])); } } diff --git modules/menu/menu.module modules/menu/menu.module index 72bdc99..3b81b12 100644 --- modules/menu/menu.module +++ modules/menu/menu.module @@ -498,3 +498,39 @@ function menu_get_menus($all = TRUE) { return $query->execute()->fetchAllKeyed(); } + +/** + * Save a custom menu. + * + * @param $menu_name + * Unique key for menu. + * @param $title + * The human readable name. + * @param $description + * Optional; The custom menu description. + */ +function menu_save_custom_menu($menu_name, $title, $description = '') { + db_merge('menu_custom') + ->key(array('menu_name' => $menu_name)) + ->fields(array( + 'title' => $title, + 'description' => $description, + )) + ->execute(); +} + +/** + * Delete custom menu from the database + * + * @param $menu_name + * The name of the custom menu to be deleted. + */ +function menu_delete_custom_menu($menu_name) { + // Delete all the links in the menu and the menu from the list of custom menus. + db_delete('menu_custom') + ->condition('menu_name', $menu_name) + ->execute(); + db_delete('menu_links') + ->condition('menu_name', $menu_name) + ->execute(); +} diff --git modules/menu/menu.test modules/menu/menu.test index bb0dc1f..5c80c4a 100644 --- modules/menu/menu.test +++ modules/menu/menu.test @@ -87,11 +87,41 @@ class MenuTestCase extends DrupalWebTestCase { $this->menu = $this->addCustomMenu(); $this->doMenuTests($this->menu['menu_name']); $this->addInvalidMenuLink($this->menu['menu_name']); + $this->addCustomMenuViaApi(); } + + + + /** + * Add custom menu using API. + */ + function addCustomMenuViaApi() { + // Add a new custom menu. + $menu_name = substr(md5($this->randomName(16)), 0, MENU_MAX_MENU_NAME_LENGTH_UI); + $title = $this->randomName(16); + + $menu = array( + 'menu_name' => $menu_name, + 'title' => $title, + 'description' => 'Description text', + ); + menu_save_custom_menu($menu['menu_name'], $menu['title'], $menu['description']); + + // Assert the menu. + $this->drupalGet('admin/structure/menu-customize/' . $menu_name . '/edit'); + $this->assertText($title, t('Custom menu was added.')); + + // Edit the menu. + $new_title = $this->randomName(16); + $menu['title'] = $new_title; + menu_save_custom_menu($menu['menu_name'], $menu['title'], $menu['description']); + $this->drupalGet('admin/structure/menu-customize/' . $menu_name . '/edit'); + $this->assertText($new_title, t('Custom menu was edited.')); + } + /** * Add custom menu. - * */ function addCustomMenu() { // Add custom menu. @@ -147,6 +177,9 @@ class MenuTestCase extends DrupalWebTestCase { $this->assertResponse(200); $this->assertRaw(t('The custom menu %title has been deleted.', array('%title' => $title)), t('Custom menu was deleted')); $this->assertFalse(menu_load($menu_name), 'Custom menu was deleted'); + // Test if all menu links associated to the menu were removed from database. + $result = db_query("SELECT menu_name FROM {menu_links} WHERE menu_name = :menu_name", array(':menu_name' => $menu_name))->fetchField(); + $this->assertFalse($result, t('All menu links associated to the custom menu were deleted.')); } /** diff --git modules/toolbar/toolbar.install modules/toolbar/toolbar.install index 628893a..642692b 100644 --- modules/toolbar/toolbar.install +++ modules/toolbar/toolbar.install @@ -14,14 +14,8 @@ */ function toolbar_install() { $t = get_t(); - $query = db_insert('menu_custom') - ->fields(array( - 'menu_name' => 'admin_shortcuts', - 'title' => $t('Administration shortcuts'), - 'description' => $t('The Admininstration shortcuts menu contains commonly used links for administrative tasks.') - )) - ->execute(); - + menu_save_custom_menu('admin_shortcuts', $t('Administration shortcuts'), $t('The Administration shortcuts menu contains commonly used links for administrative tasks.')); + // Add starter convenience shortcuts. menu_rebuild(); $items = array(