diff --git a/core/modules/language/language.module b/core/modules/language/language.module index 5df2a4b..96052c2 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -126,10 +126,6 @@ function language_menu() { 'file' => 'language.admin.inc', 'type' => MENU_VISIBLE_IN_BREADCRUMB, ); - $items['admin/config/regional/language/detection/browser/delete/%'] = array( - 'title' => 'Delete language mapping', - 'route_name' => 'language_negotiation_browser_delete', - ); $items['admin/config/regional/language/detection/selected'] = array( 'title' => 'Selected language detection configuration', 'route_name' => 'language_negotiation_selected', diff --git a/core/modules/language/language.routing.yml b/core/modules/language/language.routing.yml index 00fb348..018bab6 100644 --- a/core/modules/language/language.routing.yml +++ b/core/modules/language/language.routing.yml @@ -27,11 +27,11 @@ language_admin_overview: _permission: 'administer languages' language_admin_delete: - pattern: '/admin/config/regional/language/delete/{language}' + pattern: '/admin/config/regional/language/delete/{language_entity}' defaults: - _form: '\Drupal\language\Form\AdminDeleteForm' + _form: '\Drupal\language\Form\LanguageDeleteForm' requirements: - _entity_access: 'language.delete' + _entity_access: 'language_entity.delete' language_negotiation_browser_delete: pattern: 'admin/config/regional/language/detection/browser/delete/{browser_langcode}' diff --git a/core/modules/language/lib/Drupal/language/Form/AdminDeleteForm.php b/core/modules/language/lib/Drupal/language/Form/AdminDeleteForm.php deleted file mode 100644 index ff4d41a..0000000 --- a/core/modules/language/lib/Drupal/language/Form/AdminDeleteForm.php +++ /dev/null @@ -1,127 +0,0 @@ -urlGenerator = $url_generator; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('url_generator') - ); - } - - /** - * {@inheritdoc} - */ - public function getQuestion() { - return t('Are you sure you want to delete the language %language?', array('%language' => $this->language->name)); - } - - /** - * {@inheritdoc} - */ - public function getCancelPath() { - return 'admin/config/regional/language'; - } - - /** - * {@inheritdoc} - */ - public function getDescription() { - return t('Deleting a language will remove all interface translations associated with it, and posts in this language will be set to be language neutral. This action cannot be undone.'); - } - - /** - * {@inheritdoc} - */ - public function getConfirmText() { - return t('Delete'); - } - - /** - * {@inheritdoc} - */ - public function getFormID() { - return 'language_admin_delete_form'; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, array &$form_state, $language = NULL, Request $request = NULL) { - $this->language = $language; - - $langcode = $this->language->id; - - 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. - $languages = language_list(); - if (!isset($languages[$langcode])) { - throw new NotFoundHttpException(); - } - else { - return parent::buildForm($form, $form_state, $request); - } - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, array &$form_state) { - $success = language_delete($this->language->id); - - if ($success) { - $t_args = array('%language' => $this->language->name, '%langcode' => $this->language->id); - drupal_set_message(t('The %language (%langcode) language has been removed.', $t_args)); - } - - $form_state['redirect'] = 'admin/config/regional/language'; - } -} diff --git a/core/modules/language/lib/Drupal/language/Form/LanguageDeleteForm.php b/core/modules/language/lib/Drupal/language/Form/LanguageDeleteForm.php new file mode 100644 index 0000000..99c483f --- /dev/null +++ b/core/modules/language/lib/Drupal/language/Form/LanguageDeleteForm.php @@ -0,0 +1,128 @@ +urlGenerator = $url_generator; + $this->language = $language_entity; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('url_generator'), + $container->get('request')->attributes->get('language_entity') + ); + } + + /** + * {@inheritdoc} + */ + public function getQuestion() { + return t('Are you sure you want to delete the language %language?', array('%language' => $this->language->get('label'))); + } + + /** + * {@inheritdoc} + */ + public function getCancelPath() { + return 'admin/config/regional/language'; + } + + /** + * {@inheritdoc} + */ + public function getDescription() { + return t('Deleting a language will remove all interface translations associated with it, and content in this language will be set to be language neutral. This action cannot be undone.'); + } + + /** + * {@inheritdoc} + */ + public function getConfirmText() { + return t('Delete'); + } + + /** + * {@inheritdoc} + */ + public function getFormID() { + return 'language_admin_delete_form'; + } + + /** + * {@inheritdoc} + */ + public function buildForm(array $form, array &$form_state, Request $request = NULL) { + + $langcode = $this->language->id(); + + 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. + $languages = language_list(); + if (!isset($languages[$langcode])) { + throw new NotFoundHttpException(); + } + else { + return parent::buildForm($form, $form_state, $request); + } + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, array &$form_state) { + $success = language_delete($this->language->id()); + + if ($success) { + $t_args = array('%language' => $this->language->get('label'), '%langcode' => $this->language->id()); + drupal_set_message(t('The %language (%langcode) language has been removed.', $t_args)); + } + + $form_state['redirect'] = 'admin/config/regional/language'; + } +} diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageListTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageListTest.php index a33638e..4870f57 100644 --- a/core/modules/language/lib/Drupal/language/Tests/LanguageListTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageListTest.php @@ -115,7 +115,7 @@ function testLanguageList() { $this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), 'Correct page redirection.'); // Verify that language is no longer found. $this->drupalGet('admin/config/regional/language/delete/' . $langcode); - $this->assertResponse(403, 'Language no longer found.'); + $this->assertResponse(404, 'Language no longer found.'); // Make sure the "language_count" state has been updated correctly. drupal_static_reset('language_list'); $languages = language_list(); @@ -132,7 +132,7 @@ function testLanguageList() { $this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), 'Correct page redirection.'); // Verify that language is no longer found. $this->drupalGet('admin/config/regional/language/delete/fr'); - $this->assertResponse(403, 'Language no longer found.'); + $this->assertResponse(404, 'Language no longer found.'); // Make sure the "language_count" state has not changed. $language_count = $this->container->get('state')->get('language_count') ?: 1; $this->assertEqual($language_count, count($languages), 'Language count is correct.'); diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php index af6960b..e391022 100644 --- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php +++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleTranslationUiTest.php @@ -180,7 +180,7 @@ function testStringTranslation() { // Reload to remove $name. $this->drupalGet($path); // Verify that language is no longer found. - $this->assertResponse(403, 'Language no longer found.'); + $this->assertResponse(404, 'Language no longer found.'); $this->drupalLogout(); // Delete the string.