diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc index d995e322a36dec4a2ee62553a3ab36a809919a64..0f385d609b16240451d5b005cb54786abc4c0d25 100644 --- a/core/includes/bootstrap.inc +++ b/core/includes/bootstrap.inc @@ -2405,7 +2405,7 @@ function language_list($flags = Language::STATE_CONFIGURABLE) { // Initialize master language list. if (!isset($languages)) { // Initialize local language list cache. - $languages = array(); + $languages = array(); // Fill in master language list based on current configuration. $default = language_default(); @@ -2429,7 +2429,10 @@ function language_list($flags = Language::STATE_CONFIGURABLE) { } Language::sort($languages); } - else { + // If the language module is enable but the configuration has not been + // written yet the returning an empty language list will cause errors. For + // example the cache clear in search_module_preinstall(). + if (empty($languages)) { // No language module, so use the default language only. $languages = array($default->id => $default); // Add the special languages, they will be filtered later if needed. diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageListModuleInstallTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageListModuleInstallTest.php new file mode 100644 index 0000000000000000000000000000000000000000..89e5c07df70ab5b9c9380d0f17604ec524b2fc9d --- /dev/null +++ b/core/modules/language/lib/Drupal/language/Tests/LanguageListModuleInstallTest.php @@ -0,0 +1,50 @@ +<?php + +/** + * @file + * Contains \Drupal\language\Tests\LanguageListModuleInstallTest. + */ + +namespace Drupal\language\Tests; + +use Drupal\simpletest\WebTestBase; + +/** + * Functional tests for the language list configuration forms. + */ +class LanguageListModuleInstallTest extends WebTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = array('language_test'); + + public static function getInfo() { + return array( + 'name' => 'Language list during module install', + 'description' => 'Tests enabling Language if a module exists that calls language_list during installation.', + 'group' => 'Language', + ); + } + + /** + * Tests enabling Language. + */ + function testModuleInstallLanguageList() { + // Since language_list uses static caches we need to do this be enabling + // the module using a the UI. + $admin_user = $this->drupalCreateUser(array('access administration pages', 'administer modules')); + $this->drupalLogin($admin_user); + $edit = array(); + $edit['modules[Multilingual][language][enable]'] = 'language'; + $this->drupalPostForm('admin/modules', $edit, t('Save configuration')); + + $this->assertEqual(\Drupal::state()->get('language_test.language_count_preinstall', 0), 1, 'Using language_list() returns 1 language during Language installation.'); + + // Get updated module list by rebuilding container. + $this->rebuildContainer(); + $this->assertTrue(\Drupal::moduleHandler()->moduleExists('language'), 'Language module is enabled'); + } +} diff --git a/core/modules/language/tests/language_test/language_test.module b/core/modules/language/tests/language_test/language_test.module index 8e8cbaf97c2c13721eb87837eb605342a05aa90d..31c0a848f651f8d7502f300b599f9ef803bbcef6 100644 --- a/core/modules/language/tests/language_test/language_test.module +++ b/core/modules/language/tests/language_test/language_test.module @@ -128,3 +128,10 @@ function language_test_language_fallback_candidates_test_alter(array &$candidate $candidates[$langcode] = $langcode; } } + +/** + * Implements hook_module_preinstall(). + */ +function language_test_module_preinstall() { + \Drupal::state()->set('language_test.language_count_preinstall', count(language_list())); +}