diff --git a/core/modules/menu/menu.install b/core/modules/menu/menu.install index 9aa6d29..b7dc67d 100644 --- a/core/modules/menu/menu.install +++ b/core/modules/menu/menu.install @@ -41,12 +41,14 @@ function menu_install() { } menu_cache_clear_all(); - $node_types = array_keys(node_type_get_names()); - foreach ($node_types as $type_id) { - \Drupal::config('menu.entity.node.' . $type_id) - ->set('available_menus', array('main')) - ->set('parent', 'main:0') - ->save(); + if (\Drupal::moduleHandler()->moduleExists('node')) { + $node_types = array_keys(node_type_get_names()); + foreach ($node_types as $type_id) { + \Drupal::config('menu.entity.node.' . $type_id) + ->set('available_menus', array('main')) + ->set('parent', 'main:0') + ->save(); + } } } @@ -58,24 +60,6 @@ function menu_uninstall() { } /** - * Implements hook_node_type_insert(). - */ -function menu_node_type_insert($type) { - \Drupal::config('menu.entity.node.' . $type->id()) - ->set('available_menus', array('main')) - ->set('parent', 'main:0') - ->save(); -} - -/** - * Implements hook_node_type_delete(). - */ -function menu_node_type_delete($type) { - \Drupal::config('menu.entity.node.' . $type->id()) - ->delete(); -} - -/** * Moves menu settings from variables to config. * * @ingroup config_upgrade @@ -150,3 +134,23 @@ function menu_update_8004() { } } +/** + * Ensure menu settings exist for all node types. + * + * @ingroup config_upgrade + */ +function menu_update_8005() { + if (\Drupal::moduleHandler()->moduleExists('node')) { + $node_types = array_keys(node_type_get_names()); + foreach ($node_types as $type_id) { + $menu_settings = \Drupal::config("menu.entity.node.$type_id"); + if ($menu_settings->isNew()) { + $menu_settings + ->set('available_menus', array('main')) + ->set('parent', 'main:0') + ->save(); + } + } + } +} + diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module index a26a9f4..4d97947 100644 --- a/core/modules/menu/menu.module +++ b/core/modules/menu/menu.module @@ -13,6 +13,7 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\block\BlockPluginInterface; +use Drupal\node\NodeTypeInterface; use Drupal\system\Entity\Menu; use Symfony\Component\HttpFoundation\JsonResponse; use Drupal\menu_link\Entity\MenuLink; @@ -274,7 +275,7 @@ function menu_parent_options(array $menus, MenuLink $menu_link = NULL, $type = N } else { // If a node type is set, use all available menus for this type. - $type_menus =\Drupal::config('menu.entity.node.'.$type)->get('available_menus'); + $type_menus = \Drupal::config("menu.entity.node.$type")->get('available_menus'); foreach ($type_menus as $menu) { $available_menus[$menu] = $menu; } @@ -358,6 +359,23 @@ function menu_node_update(EntityInterface $node) { } /** + * Implements hook_node_type_insert(). + */ +function menu_node_type_insert(NodeTypeInterface $type) { + \Drupal::config('menu.entity.node.' . $type->id()) + ->set('available_menus', array('main')) + ->set('parent', 'main:0') + ->save(); +} + +/** + * Implements hook_node_type_delete(). + */ +function menu_node_type_delete(NodeTypeInterface $type) { + \Drupal::config('menu.entity.node.' . $type->id())->delete(); +} + +/** * Helper for hook_node_insert() and hook_node_update(). */ function menu_node_save(EntityInterface $node) { @@ -407,7 +425,7 @@ function menu_node_predelete(EntityInterface $node) { function menu_node_prepare_form(NodeInterface $node, $form_display, $operation, array &$form_state) { if (empty($node->menu)) { // Prepare the node for the edit form so that $node->menu always exists. - $node_type_config = \Drupal::config('menu.entity.node.'.$node->getType()); + $node_type_config = \Drupal::config('menu.entity.node.' . $node->getType()); $menu_name = strtok($node_type_config->get('parent'), ':'); $menu_link = FALSE; if ($node->id()) { @@ -593,7 +611,7 @@ function menu_node_submit(EntityInterface $node, $form, $form_state) { function menu_form_node_type_form_alter(&$form, $form_state) { $menu_options = menu_get_menus(); $type = $form_state['controller']->getEntity(); - $node_type_config = \Drupal::config('menu.entity.node.'.$type->id()); + $node_type_config = \Drupal::config('menu.entity.node.' . $type->id()); $form['menu'] = array( '#type' => 'details', '#title' => t('Menu settings'), diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php index c2a2bc9..6dd7f82 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php @@ -168,7 +168,7 @@ function testBreadCrumbs() { // breadcrumbs may differ, possibly due to theme overrides. $menus = array('main', 'tools'); // Alter node type menu settings. - \Drupal::config('menu.entity.node.'.$type) + \Drupal::config("menu.entity.node.$type") ->set('available_menus', $menus) ->set('parent', 'tools:0') ->save();