diff --git a/core/modules/language/lib/Drupal/language/Access/EditOrDeleteAccessCheck.php b/core/modules/language/lib/Drupal/language/Access/EditOrDeleteAccessCheck.php index 1d5b6e4..49d434d 100644 --- a/core/modules/language/lib/Drupal/language/Access/EditOrDeleteAccessCheck.php +++ b/core/modules/language/lib/Drupal/language/Access/EditOrDeleteAccessCheck.php @@ -27,8 +27,12 @@ public function applies(Route $route) { * {@inheritdoc} */ public function access(Route $route, Request $request) { - if ($language = language_load($request->attributes->get('language'))) { - return !$language->locked && user_access('administer languages'); + $language = language_load($request->attributes->get('language')); + if (empty($language)) { + return TRUE; + } + elseif (!$language->locked && user_access('administer languages')) { + return TRUE; } return FALSE; } diff --git a/core/modules/language/lib/Drupal/language/Form/AdminDeleteForm.php b/core/modules/language/lib/Drupal/language/Form/AdminDeleteForm.php index 3ca66d6..9564d10 100644 --- a/core/modules/language/lib/Drupal/language/Form/AdminDeleteForm.php +++ b/core/modules/language/lib/Drupal/language/Form/AdminDeleteForm.php @@ -39,9 +39,7 @@ class AdminDeleteForm extends ConfirmFormBase implements ControllerInterface { * Constructs a new AdminDeleteForm. */ public function __construct(PathBasedGeneratorInterface $url_generator = NULL) { - $this->urlGenerator = $url_generator; - - parent::__construct($url_generator); + $this->urlGenerator = $url_generator; } /** @@ -94,25 +92,24 @@ public function getFormID() { public function buildForm(array $form, array &$form_state, $language = NULL, Request $request = NULL) { $this->language = language_load($language); - $langcode = $this->language->langcode; + if (is_object($this->language)) { + $langcode = $this->language->langcode; + } + + // If language isn't installed, throw an exception. + $languages = language_list(); + if (empty($langcode) || !isset($languages[$langcode]) || empty($this->language)) { + throw new NotFoundHttpException(); + } if (language_default()->langcode == $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); - } + return parent::buildForm($form, $form_state, $request); } /** diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php index c9c05e8..3b589c9 100644 --- a/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageUILanguageNegotiationTest.php @@ -418,8 +418,8 @@ function testUrlLanguageFallback() { // Check that the language switcher active link matches the given browser // language. - $args = array(':id' => 'block-test-language-block', ':url' => base_path() . $GLOBALS['script_path'] . $langcode_browser_fallback); - $fields = $this->xpath('//div[@id=:id]//a[@class="language-link active" and starts-with(@href, :url)]', $args); + $args = array(':id' => 'block-test-language-block', ':class' => 'active', ':url' => base_path() . $GLOBALS['script_path'] . $langcode_browser_fallback); + $fields = $this->xpath('//div[@id=:id]//li[contains(@class, :class)]//a[@class="language-link" and starts-with(@href, :url)]', $args); $this->assertTrue($fields[0] == $languages[$langcode_browser_fallback]->name, 'The browser language is the URL active language'); // Check that URLs are rewritten using the given browser language. diff --git a/core/modules/system/lib/Drupal/system/Form/RegionalForm.php b/core/modules/system/lib/Drupal/system/Form/RegionalForm.php index 4cfb398..9ee20c8 100644 --- a/core/modules/system/lib/Drupal/system/Form/RegionalForm.php +++ b/core/modules/system/lib/Drupal/system/Form/RegionalForm.php @@ -156,6 +156,8 @@ public function submitForm(array &$form, array &$form_state) { ->set('user.default', $form_state['values']['user_default_timezone']) ->save(); + $form_state['redirect'] = 'admin/config/regional/settings'; + parent::submitForm($form, $form_state); }