rendered paste bodyfunction system_update_6020() { $ret = array(); // We should die a horrible death here if this query fails. $menu = unserialize(db_result(db_query("SELECT data FROM {cache_menu} WHERE cid LIKE '1:%%'"))); if (!$menu) { drupal_set_message('no menu', 'error'); return; } $schema['menu_router'] = drupal_get_schema_unprocessed('system', 'menu_router'); $schema['menu_links'] = drupal_get_schema_unprocessed('system', 'menu_links'); _drupal_initialize_schema('system', $schema); $ret = array(); foreach ($schema as $table) { db_create_table($ret, $table); } $new_menu = menu_router_build(TRUE); if ($menu && module_exists('menu')) { $items = $menu['items']; drupal_install_schema('menu'); $menu_names = array(); $system_menus = array( 1 => 'navigation', variable_get('menu_primary_menu', 2) => 'primary-links', variable_get('menu_secondary_menu', 0) => 'secondary-links', ); // These are the root menus. foreach ($items[0]['children'] as $mid) { if (isset($system_menus[$mid])) { $menu_name = $system_menus[$mid]; } else { $title = $items[$mid]['title']; $menu_name = preg_replace('[^a-z0-9]', '-', $title); while (isset($menu_names[$menu_name])) { $menu = $menu_names[$menu_name]; } $description = db_result(db_query('SELECT description FROM {menu} WHERE mid = %d', $mid)); db_query("INSERT INTO {menu_custom} (menu_name, title, description) VALUES ('%s', '%s', '%s')", $menu_name, $title, $description); } $menu_names[$menu_name] = $menu_name .'-'; foreach ($items[$mid]['children'] as $child_mid) { _system_update_6020($items, $menu_name, $child_mid); } menu_cache_clear($menu_name); } } _menu_navigation_links_rebuild($new_menu); return $ret;}function _system_update_6020($items, $menu_name, $parent_mid) { static $map; $map[$parent_mid] = 0; foreach ($items[$parent_mid] as $key => $item) { $item = menu_link_build($item); $item['menu_name'] = $menu_name; $item['plid'] = $map[$item['pid']]; if ($mid > 0) { $item['description'] = db_result(db_query('SELECT description FROM {menu} WHERE mid = %d', $mid)); } $map[$mid] = menu_link_save($item); if (isset($item['children'])) { foreach ($item['children'] as $child_mid) { _system_update_6020($items, $menu_name, $child_mid); } } }}