Issue #2613222 by webflo, alexpott, ameymudras, pooja saraah, _utsavsharma, penyaskito, Janvi Dasani: Language module shouldn't alter config in sync mode
parent
09ade8fa41
commit
7e2db381c3
|
@ -7,12 +7,15 @@
|
|||
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\Core\Access\AccessResult;
|
||||
use Drupal\Core\Config\FileStorage;
|
||||
use Drupal\Core\Config\InstallStorage;
|
||||
use Drupal\Core\Entity\ContentEntityFormInterface;
|
||||
use Drupal\Core\Entity\EntityFormInterface;
|
||||
use Drupal\Core\Entity\EntityInterface;
|
||||
use Drupal\Core\Field\FieldDefinitionInterface;
|
||||
use Drupal\Core\Field\FieldItemListInterface;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Installer\InstallerKernel;
|
||||
use Drupal\Core\Language\LanguageInterface;
|
||||
use Drupal\Core\Routing\RouteMatchInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
|
@ -289,8 +292,26 @@ function language_negotiation_url_prefixes_update() {
|
|||
/**
|
||||
* Implements hook_modules_installed().
|
||||
*/
|
||||
function language_modules_installed($modules) {
|
||||
function language_modules_installed($modules, $is_syncing) {
|
||||
if ($is_syncing) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!in_array('language', $modules)) {
|
||||
if (InstallerKernel::installationAttempted()) {
|
||||
// If the install profile provides its own language.types configuration do
|
||||
// not overwrite it.
|
||||
$profile_directory = \Drupal::service('extension.list.profile')->getPath(\Drupal::installProfile());
|
||||
$profile_storages = [
|
||||
new FileStorage($profile_directory . '/' . InstallStorage::CONFIG_INSTALL_DIRECTORY),
|
||||
new FileStorage($profile_directory . '/' . InstallStorage::CONFIG_OPTIONAL_DIRECTORY),
|
||||
];
|
||||
foreach ($profile_storages as $storage) {
|
||||
if ($storage->exists('language.types')) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Since newly (un)installed modules may change the default settings for
|
||||
// non-locked language types (e.g. content language), we need to resave the
|
||||
// language type configuration.
|
||||
|
@ -318,8 +339,8 @@ function language_modules_installed($modules) {
|
|||
/**
|
||||
* Implements hook_modules_uninstalled().
|
||||
*/
|
||||
function language_modules_uninstalled($modules) {
|
||||
language_modules_installed($modules);
|
||||
function language_modules_uninstalled($modules, $is_syncing) {
|
||||
language_modules_installed($modules, $is_syncing);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace Drupal\Tests\language\Functional;
|
||||
|
||||
use Drupal\Tests\BrowserTestBase;
|
||||
|
||||
/**
|
||||
* Ensures the language config is installed but not altered on install.
|
||||
*
|
||||
* @group language
|
||||
*/
|
||||
class LanguageConfigInstallOverrideExistingTest extends BrowserTestBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected $profile = 'test_language_negotiation';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected $defaultTheme = 'stark';
|
||||
|
||||
/**
|
||||
* Tests when language config is installed existing config is not overridden.
|
||||
*/
|
||||
public function testLanguageConfigInstallOverrideExisting() {
|
||||
/** @var \Drupal\Core\Config\StorageInterface $storage */
|
||||
$storage = $this->container->get('config.storage');
|
||||
$config = $this->config('language.types');
|
||||
|
||||
// The negotiation methods that have been removed should be disabled after
|
||||
// purging if not avoided in language_modules_installed().
|
||||
$language_types_data = $storage->read('language.types');
|
||||
$this->assertTrue(isset($language_types_data['negotiation']['language_content']['enabled']['test_language_negotiation_method']));
|
||||
$this->assertTrue(isset($language_types_data['negotiation']['language_content']['enabled']['language-selected']));
|
||||
|
||||
$this->assertEquals(-10, $config->get('negotiation.language_content.enabled.test_language_negotiation_method'));
|
||||
$this->assertEquals(12, $config->get('negotiation.language_content.enabled.language-selected'));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
all:
|
||||
- language_interface
|
||||
- language_content
|
||||
- language_url
|
||||
configurable:
|
||||
- language_interface
|
||||
- language_content
|
||||
negotiation:
|
||||
language_content:
|
||||
enabled:
|
||||
test_language_negotiation_method: -10
|
||||
language-url: -8
|
||||
language-selected: 12
|
||||
method_weights:
|
||||
test_language_negotiation_method: -10
|
||||
language-content-entity: -9
|
||||
language-url: -8
|
||||
language-session: -6
|
||||
language-user: -4
|
||||
language-browser: -2
|
||||
language-interface: 9
|
||||
language-selected: 12
|
||||
language_url:
|
||||
enabled:
|
||||
language-url: 0
|
||||
language-url-fallback: 1
|
||||
language_interface:
|
||||
enabled:
|
||||
language-user-admin: -20
|
||||
language-user: -19
|
||||
language-url: -18
|
||||
language-selected: -15
|
||||
method_weights:
|
||||
language-user-admin: -20
|
||||
language-user: -19
|
||||
language-url: -18
|
||||
language-session: -17
|
||||
language-browser: -16
|
||||
language-selected: -15
|
|
@ -0,0 +1,7 @@
|
|||
name: Testing language negotiation
|
||||
type: profile
|
||||
description: 'Minimal profile for running tests related the language negotiation.'
|
||||
version: VERSION
|
||||
hidden: true
|
||||
install:
|
||||
- drupal:language
|
Loading…
Reference in New Issue