diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php index c51678f6b52cfc64ebc8ad1933b993b5a7803b0e..072a65e8659db219a72ab21c2efe3eed96afe1a3 100644 --- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php +++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php @@ -64,22 +64,22 @@ public function form(array $form, array &$form_state, EntityInterface $menu) { $form['links'] = menu_overview_form($form['links'], $form_state); } - $form['actions'] = array('#type' => 'actions'); - $form['actions']['submit'] = array( - '#type' => 'submit', - '#value' => t('Save'), - '#button_type' => 'primary', - ); - // Only custom menus may be deleted. - $form['actions']['delete'] = array( - '#type' => 'submit', - '#value' => t('Delete'), - '#access' => !$menu->isNew() && !isset($system_menus[$menu->id()]), - ); - return $form; } + /** + * Overrides Drupal\Core\Entity\EntityFormController::actions(). + */ + protected function actions(array $form, array &$form_state) { + $actions = parent::actions($form, $form_state); + $menu = $this->getEntity($form_state); + + $system_menus = menu_list_system_menus(); + $actions['delete']['#access'] = !$menu->isNew() && !isset($system_menus[$menu->id()]); + + return $actions; + } + /** * Overrides Drupal\Core\Entity\EntityFormController::save(). */ diff --git a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php index 75532b02a225e36002b08dba01ceec4d03408a94..88283cc2a85e63897379ba9028c0630ec2d94582 100644 --- a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php +++ b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php @@ -182,6 +182,14 @@ function deleteCustomMenu($menu) { // Test if all menu links associated to the menu were removed from database. $result = entity_load_multiple_by_properties('menu_link', array('menu_name' => $menu_name)); $this->assertFalse($result, 'All menu links associated to the custom menu were deleted.'); + + // Make sure there's no delete button on system menus. + $this->drupalGet('admin/structure/menu/manage/main/edit'); + $this->assertNoRaw('edit-delete', 'The delete button was not found'); + + // Try to delete the main menu. + $this->drupalGet('admin/structure/menu/manage/main/delete'); + $this->assertText(t('You are not authorized to access this page.')); } /** diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc index a04fca5b158235974117e95b44045960828484f0..56d51107a36707b7c5cddf9bbbaf30c73634d779 100644 --- a/core/modules/menu/menu.admin.inc +++ b/core/modules/menu/menu.admin.inc @@ -8,6 +8,7 @@ use Drupal\menu_link\Plugin\Core\Entity\MenuLink; use Drupal\system\Plugin\Core\Entity\Menu; use Drupal\Component\Utility\NestedArray; +use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; /** * Menu callback which shows an overview page of all the custom menus and their descriptions.