Skip to content

Instantly share code, notes, and snippets.

@edwardchan
Created July 11, 2018 19:00
Show Gist options
  • Save edwardchan/b8099d4d8e0a3d7c4a700e995623873d to your computer and use it in GitHub Desktop.
Save edwardchan/b8099d4d8e0a3d7c4a700e995623873d to your computer and use it in GitHub Desktop.
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