diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 96052c2..ffdb256 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -94,7 +94,6 @@ function language_menu() { 'file' => 'language.admin.inc', ); $items['admin/config/regional/language/delete/%language'] = array( - 'title' => 'Confirm delete', 'route_name' => 'language_admin_delete', ); @@ -869,3 +868,10 @@ function language_system_regional_settings_form_submit($form, &$form_state) { $language->default = TRUE; language_save($language); } + +/** + * Implements hook_entity_info(). + */ +function language_entity_info(&$entity_info) { + $entity_info['language_entity']['controllers']['form']['delete'] = 'Drupal\language\Form\LanguageDeleteForm'; +} diff --git a/core/modules/language/language.routing.yml b/core/modules/language/language.routing.yml index 018bab6..2f1b8af 100644 --- a/core/modules/language/language.routing.yml +++ b/core/modules/language/language.routing.yml @@ -29,7 +29,7 @@ language_admin_overview: language_admin_delete: pattern: '/admin/config/regional/language/delete/{language_entity}' defaults: - _form: '\Drupal\language\Form\LanguageDeleteForm' + _entity_form: 'language_entity.delete' requirements: _entity_access: 'language_entity.delete' diff --git a/core/modules/language/lib/Drupal/language/Form/LanguageDeleteForm.php b/core/modules/language/lib/Drupal/language/Form/LanguageDeleteForm.php index 99c483f..a2da23c 100644 --- a/core/modules/language/lib/Drupal/language/Form/LanguageDeleteForm.php +++ b/core/modules/language/lib/Drupal/language/Form/LanguageDeleteForm.php @@ -7,26 +7,28 @@ namespace Drupal\language\Form; -use Drupal\Core\Form\ConfirmFormBase; -use Drupal\Core\Controller\ControllerInterface; -use Drupal\language\Plugin\Core\Entity\Language; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\HttpFoundation\Request; +use Drupal\Core\Entity\EntityConfirmFormBase; +use Drupal\Core\Entity\EntityControllerInterface; +use Drupal\Core\Entity\EntityManager; +use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\Routing\PathBasedGeneratorInterface; -use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * Defines a confirmation form for language deletion. + * Defines a confirmation form for deleting a language entity. */ -class LanguageDeleteForm extends ConfirmFormBase implements ControllerInterface { +class LanguageDeleteForm extends EntityConfirmFormBase implements EntityControllerInterface { /** - * The language to be deleted. + * The entity manager. * - * @var Drupal\language\Plugin\Core\Entity\Language; + * @var \Drupal\Core\Entity\EntityManager */ - protected $language; + protected $entityManager; + /** * The urlGenerator service. * @@ -35,20 +37,22 @@ class LanguageDeleteForm extends ConfirmFormBase implements ControllerInterface protected $urlGenerator; /** - * Constructs a new LanguageDeleteForm. + * Constructs a new LanguageDeleteForm object. */ - public function __construct(PathBasedGeneratorInterface $url_generator = NULL, Language $language_entity = NULL) { + public function __construct(ModuleHandlerInterface $module_handler, EntityManager $entity_manager, \Drupal\Core\Routing\PathBasedGeneratorInterface $url_generator) { + parent::__construct($module_handler); + $this->entityManager = $entity_manager; $this->urlGenerator = $url_generator; - $this->language = $language_entity; } /** * {@inheritdoc} */ - public static function create(ContainerInterface $container) { + public static function createInstance(ContainerInterface $container, $entity_type, array $entity_info) { return new static( - $container->get('url_generator'), - $container->get('request')->attributes->get('language_entity') + $container->get('module_handler'), + $container->get('plugin.manager.entity'), + $container->get('url_generator') ); } @@ -56,7 +60,7 @@ public static function create(ContainerInterface $container) { * {@inheritdoc} */ public function getQuestion() { - return t('Are you sure you want to delete the language %language?', array('%language' => $this->language->get('label'))); + return t('Are you sure you want to delete the language %language?', array('%language' => $this->entity->get('label'))); } /** @@ -92,17 +96,16 @@ public function getFormID() { */ public function buildForm(array $form, array &$form_state, Request $request = NULL) { - $langcode = $this->language->id(); + $langcode = $this->entity->id(); + // Warn and redirect user when attempting to delete the default language. if (language_default()->id == $langcode) { drupal_set_message(t('The default language cannot be deleted.')); $url = $this->urlGenerator->generateFromPath('admin/config/regional/language', array('absolute' => TRUE)); - return new RedirectResponse($url); - } - // For other languages, warn the user that data loss is ahead. + // Throw a 404 when attempting to delete a non-existing language. $languages = language_list(); if (!isset($languages[$langcode])) { throw new NotFoundHttpException(); @@ -115,11 +118,11 @@ public function buildForm(array $form, array &$form_state, Request $request = NU /** * {@inheritdoc} */ - public function submitForm(array &$form, array &$form_state) { - $success = language_delete($this->language->id()); + public function submit(array $form, array &$form_state) { + $success = language_delete($this->entity->id()); if ($success) { - $t_args = array('%language' => $this->language->get('label'), '%langcode' => $this->language->id()); + $t_args = array('%language' => $this->entity->get('label'), '%langcode' => $this->entity->id()); drupal_set_message(t('The %language (%langcode) language has been removed.', $t_args)); }