function menu_update_7000

Migrate the "Default menu for content" setting to individual node types.

Related topics

File

modules/menu/menu.install, line 80

Code

function menu_update_7000() {
    // Act only on sites originally on Drupal 6 that have a custom "Default menu
    // for content" setting.
    $default_node_menu = variable_get('menu_default_node_menu');
    if (isset($default_node_menu)) {
        // Remove variable no longer used in Drupal 7.
        variable_del('menu_default_node_menu');
        // Make sure the menu chosen as the default still exists.
        $defined_menus = db_query('SELECT * FROM {menu_custom}')->fetchAllAssoc('menu_name', PDO::FETCH_ASSOC);
        // If the menu does not exist, do nothing; nodes will use the default D7
        // node menu settings.
        if (!isset($defined_menus[$default_node_menu])) {
            return;
        }
        // Update the menu settings for each node type.
        foreach (_update_7000_node_get_types() as $type => $type_object) {
            $type_menus = variable_get('menu_options_' . $type);
            // If the site already has a custom menu setting for this node type (set
            // on the initial upgrade to Drupal 7.0), don't override it.
            if (!isset($type_menus)) {
                // Set up this node type so that the Drupal 6 "Default menu for content"
                // is still available in the "Menu settings" section.
                variable_set('menu_options_' . $type, array(
                    $default_node_menu,
                ));
                variable_set('menu_parent_' . $type, $default_node_menu . ':0');
            }
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.