Created
July 11, 2018 19:00
-
-
Save edwardchan/b8099d4d8e0a3d7c4a700e995623873d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/core/modules/menu_ui/menu_ui.module b/core/modules/menu_ui/menu_ui.module | |
index cb1e85307f..28dd17dcd2 100644 | |
--- a/core/modules/menu_ui/menu_ui.module | |
+++ b/core/modules/menu_ui/menu_ui.module | |
@@ -16,6 +16,7 @@ | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Routing\RouteMatchInterface; | |
use Drupal\menu_link_content\Entity\MenuLinkContent; | |
+use Drupal\node\Entity\NodeType; | |
use Drupal\node\NodeTypeInterface; | |
use Drupal\system\Entity\Menu; | |
use Drupal\node\NodeInterface; | |
@@ -120,6 +121,36 @@ function menu_ui_menu_delete(Menu $menu) { | |
if (\Drupal::moduleHandler()->moduleExists('block')) { | |
\Drupal::service('plugin.manager.block')->clearCachedDefinitions(); | |
} | |
+ | |
+ if (\Drupal::moduleHandler()->moduleExists('node')) { | |
+ // Remove this menu from node types referencing the deleted menu. | |
+ $node_types = NodeType::loadMultiple(); | |
+ foreach ($node_types as $node_type) { | |
+ /** @var \Drupal\node\NodeTypeInterface $node_type */ | |
+ $menu_ids = $node_type->getThirdPartySetting('menu_ui', 'available_menus', []); | |
+ if (in_array($menu->id(), $menu_ids)) { | |
+ $menu_ids = array_diff($menu_ids, [$menu->id()]); | |
+ $node_type | |
+ ->setThirdPartySetting('menu_ui', 'available_menus', $menu_ids) | |
+ ->save(); | |
+ } | |
+ } | |
+ } | |
+ | |
+ if (\Drupal::moduleHandler()->moduleExists('node')) { | |
+ // Remove this menu from node types referencing the deleted menu. | |
+ $node_types = NodeType::loadMultiple(); | |
+ foreach ($node_types as $node_type) { | |
+ /** @var \Drupal\node\NodeTypeInterface $node_type */ | |
+ $menu_ids = $node_type->getThirdPartySetting('menu_ui', 'available_menus', []); | |
+ if (in_array($menu->id(), $menu_ids)) { | |
+ $menu_ids = array_diff($menu_ids, [$menu->id()]); | |
+ $node_type | |
+ ->setThirdPartySetting('menu_ui', 'available_menus', $menu_ids) | |
+ ->save(); | |
+ } | |
+ } | |
+ } | |
} | |
/** | |
@@ -262,12 +293,10 @@ function menu_ui_form_node_form_alter(&$form, FormStateInterface $form_state) { | |
$node_type = $node->type->entity; | |
/** @var \Drupal\Core\Menu\MenuParentFormSelectorInterface $menu_parent_selector */ | |
$menu_parent_selector = \Drupal::service('menu.parent_form_selector'); | |
- $menu_names = menu_ui_get_menus(); | |
- $type_menus = $node_type->getThirdPartySetting('menu_ui', 'available_menus', ['main']); | |
- $available_menus = []; | |
- foreach ($type_menus as $menu) { | |
- $available_menus[$menu] = $menu_names[$menu]; | |
- } | |
+ $menus_all = menu_ui_get_menus(); | |
+ $available_menus = $node_type->getThirdPartySetting('menu_ui', 'available_menus', array('main')); | |
+ // Remove menus which do not exist. | |
+ $available_menus = array_intersect_key($menus_all, array_flip($available_menus)); | |
if ($defaults['id']) { | |
$default = $defaults['menu_name'] . ':' . $defaults['parent']; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment