Issue #3455820 by nicxvan, alexpott, smustgrave: Decompress files for config_install

merge-requests/8705/merge
Alex Pott 2024-07-09 17:58:16 +01:00
parent 8927879944
commit 0426157519
No known key found for this signature in database
GPG Key ID: BDA67E7EE836E5CE
247 changed files with 8121 additions and 25 deletions

View File

@ -24,6 +24,7 @@
"modules/system/tests/logo.svgz",
"node_modules/*",
"profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/**/*",
"tests/fixtures/config_install/*",
"tests/fixtures/files/*",
"tests/Drupal/Tests/Component/Annotation/Doctrine/**",
"tests/PHPStan/vendor/**",

View File

@ -398,7 +398,7 @@ $ignoreErrors[] = [
'path' => __DIR__ . '/lib/Drupal/Core/Extension/ExtensionVersion.php',
];
$ignoreErrors[] = [
'message' => '#^The "module_installer\\.uninstall_validators" service is deprecated in drupal:11.1.0 and is removed from drupal:12.0.0\\. Inject "\\!tagged_iterator module_install\\.uninstall_validator" instead\\. See https\\://www\\.drupal\\.org/node/3432595$#',
'message' => '#^The "module_installer\\.uninstall_validators" service is deprecated in drupal\\:11\\.1\\.0 and is removed from drupal\\:12\\.0\\.0\\. Inject "\\!tagged_iterator module_install\\.uninstall_validator" instead\\. See https\\://www\\.drupal\\.org/node/3432595$#',
'count' => 1,
'path' => __DIR__ . '/lib/Drupal/Core/Extension/ModuleInstaller.php',
];
@ -2379,6 +2379,21 @@ $ignoreErrors[] = [
'count' => 2,
'path' => __DIR__ . '/tests/Drupal/BuildTests/Framework/Tests/BuildTestTest.php',
];
$ignoreErrors[] = [
'message' => '#^Drupal\\\\Tests\\\\BrowserTestBase\\:\\:\\$defaultTheme is required\\. See https\\://www\\.drupal\\.org/node/3083055, which includes recommendations on which theme to use\\.$#',
'count' => 1,
'path' => __DIR__ . '/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigExistingSettingsTest.php',
];
$ignoreErrors[] = [
'message' => '#^Drupal\\\\Tests\\\\BrowserTestBase\\:\\:\\$defaultTheme is required\\. See https\\://www\\.drupal\\.org/node/3083055, which includes recommendations on which theme to use\\.$#',
'count' => 1,
'path' => __DIR__ . '/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigNoSystemSiteTest.php',
];
$ignoreErrors[] = [
'message' => '#^Drupal\\\\Tests\\\\BrowserTestBase\\:\\:\\$defaultTheme is required\\. See https\\://www\\.drupal\\.org/node/3083055, which includes recommendations on which theme to use\\.$#',
'count' => 1,
'path' => __DIR__ . '/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigTest.php',
];
$ignoreErrors[] = [
// identifier: variable.undefined
'message' => '#^Variable \\$found might not be defined\\.$#',

View File

@ -0,0 +1,184 @@
<?php
declare(strict_types=1);
namespace Drupal\FunctionalTests\Installer;
use Drupal\Component\Serialization\Yaml;
use Drupal\Core\Database\Database;
use Drupal\Core\Installer\Form\SelectProfileForm;
/**
* Provides a base class for testing installing from existing configuration.
*/
abstract class InstallerConfigDirectoryTestBase extends InstallerTestBase {
/**
* This is set by the profile in the core.extension extracted.
*
* If set to FALSE, then the install will proceed without an install profile.
*/
protected $profile = NULL;
/**
* @todo Fill out docblock.
*/
protected $existingSyncDirectory = FALSE;
/**
* This copies a source directory to a destination directory recursively.
*
* @param string $source
* Source directory.
* @param string $destination
* Destination directory.
*/
protected function copyDirectory(string $source, string $destination): void {
if (!is_dir($destination)) {
mkdir($destination, 0755, TRUE);
}
$files = scandir($source);
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
$sourceFile = $source . '/' . $file;
$destinationFile = $destination . '/' . $file;
if (is_dir($sourceFile)) {
$this->copyDirectory($sourceFile, $destinationFile);
}
else {
copy($sourceFile, $destinationFile);
}
}
}
}
/**
* {@inheritdoc}
*/
protected function prepareEnvironment() {
parent::prepareEnvironment();
if ($this->profile === NULL) {
$core_extension_location = $this->getConfigLocation() . '/core.extension.yml';
$core_extension = Yaml::decode(file_get_contents($core_extension_location));
$this->profile = $core_extension['profile'];
}
if ($this->profile !== FALSE) {
// Create a profile for testing. We set core_version_requirement to '*' for
// the test so that it does not need to be updated between major versions.
$info = [
'type' => 'profile',
'core_version_requirement' => '*',
'name' => 'Configuration installation test profile (' . $this->profile . ')',
];
// File API functions are not available yet.
$path = $this->siteDirectory . '/profiles/' . $this->profile;
// Put the sync directory inside the profile.
$config_sync_directory = $path . '/config/sync';
mkdir($path, 0777, TRUE);
file_put_contents("$path/{$this->profile}.info.yml", Yaml::encode($info));
}
else {
// If we have no profile we must use an existing sync directory.
$this->existingSyncDirectory = TRUE;
$config_sync_directory = $this->siteDirectory . '/config/sync';
}
if ($this->existingSyncDirectory) {
$config_sync_directory = $this->siteDirectory . '/config/sync';
$this->settings['settings']['config_sync_directory'] = (object) [
'value' => $config_sync_directory,
'required' => TRUE,
];
}
// Create config/sync directory and extract tarball contents to it.
mkdir($config_sync_directory, 0777, TRUE);
$this->copyDirectory($this->getConfigLocation(), $config_sync_directory);
// Add the module that is providing the database driver to the list of
// modules that can not be uninstalled in the core.extension configuration.
if (file_exists($config_sync_directory . '/core.extension.yml')) {
$core_extension = Yaml::decode(file_get_contents($config_sync_directory . '/core.extension.yml'));
$module = Database::getConnection()->getProvider();
if ($module !== 'core') {
$core_extension['module'][$module] = 0;
$core_extension['module'] = module_config_sort($core_extension['module']);
}
if ($this->profile === FALSE && array_key_exists('profile', $core_extension)) {
// Remove the profile.
unset($core_extension['module'][$core_extension['profile']]);
unset($core_extension['profile']);
// Set a default theme to the first theme that will be installed as this
// can not be retrieved from the profile.
$this->defaultTheme = array_key_first($core_extension['theme']);
}
file_put_contents($config_sync_directory . '/core.extension.yml', Yaml::encode($core_extension));
}
}
/**
* Gets the path to the configuration directory.
*
* The directory will be copied to the install profile's config/sync
* directory for testing.
*
* @return string
* The path to the configuration directory.
*/
abstract protected function getConfigLocation();
/**
* {@inheritdoc}
*/
protected function installParameters() {
$parameters = parent::installParameters();
// The options that change configuration are disabled when installing from
// existing configuration.
unset($parameters['forms']['install_configure_form']['site_name']);
unset($parameters['forms']['install_configure_form']['site_mail']);
unset($parameters['forms']['install_configure_form']['enable_update_status_module']);
unset($parameters['forms']['install_configure_form']['enable_update_status_emails']);
return $parameters;
}
/**
* Confirms that the installation installed the configuration correctly.
*/
public function testConfigSync(): void {
// After installation there is no snapshot and nothing to import.
$change_list = $this->configImporter()->getStorageComparer()->getChangelist();
$expected = [
'create' => [],
// The system.mail is changed configuration because the test system
// changes it to ensure that mails are not sent.
'update' => ['system.mail'],
'delete' => [],
'rename' => [],
];
$this->assertEquals($expected, $change_list);
}
/**
* Installer step: Select installation profile.
*/
protected function setUpProfile() {
if ($this->existingSyncDirectory) {
$edit = [
'profile' => SelectProfileForm::CONFIG_INSTALL_PROFILE_KEY,
];
$this->submitForm($edit, $this->translations['Save and continue']);
}
else {
parent::setUpProfile();
}
}
}

View File

@ -11,7 +11,7 @@ use Drupal\Core\Logger\RfcLogLevel;
*
* @group Installer
*/
class InstallerExistingConfigMultilingualTest extends InstallerExistingConfigTestBase {
class InstallerExistingConfigMultilingualTest extends InstallerConfigDirectoryTestBase {
/**
* {@inheritdoc}
@ -21,8 +21,8 @@ class InstallerExistingConfigMultilingualTest extends InstallerExistingConfigTes
/**
* {@inheritdoc}
*/
protected function getConfigTarball() {
return __DIR__ . '/../../../fixtures/config_install/multilingual.tar.gz';
protected function getConfigLocation() {
return __DIR__ . '/../../../fixtures/config_install/multilingual';
}
/**

View File

@ -9,7 +9,7 @@ namespace Drupal\FunctionalTests\Installer;
*
* @group Installer
*/
class InstallerExistingConfigNoConfigTest extends InstallerExistingConfigTestBase {
class InstallerExistingConfigNoConfigTest extends InstallerConfigDirectoryTestBase {
/**
* {@inheritdoc}
@ -28,8 +28,8 @@ class InstallerExistingConfigNoConfigTest extends InstallerExistingConfigTestBas
/**
* {@inheritdoc}
*/
protected function getConfigTarball() {
return __DIR__ . '/../../../fixtures/config_install/testing_config_install_no_config.tar.gz';
protected function getConfigLocation() {
return __DIR__ . '/../../../fixtures/config_install/testing_config_install_no_config';
}
/**

View File

@ -9,7 +9,7 @@ namespace Drupal\FunctionalTests\Installer;
*
* @group Installer
*/
class InstallerExistingConfigNoSystemSiteTest extends InstallerExistingConfigTestBase {
class InstallerExistingConfigNoSystemSiteTest extends InstallerConfigDirectoryTestBase {
/**
* {@inheritdoc}
@ -44,8 +44,8 @@ class InstallerExistingConfigNoSystemSiteTest extends InstallerExistingConfigTes
/**
* {@inheritdoc}
*/
protected function getConfigTarball() {
return __DIR__ . '/../../../fixtures/config_install/testing_config_install.tar.gz';
protected function getConfigLocation() {
return __DIR__ . '/../../../fixtures/config_install/testing_config_install';
}
}

View File

@ -9,7 +9,7 @@ namespace Drupal\FunctionalTests\Installer;
*
* @group Installer
*/
class InstallerExistingConfigProfileHookInstall extends InstallerExistingConfigTestBase {
class InstallerExistingConfigProfileHookInstall extends InstallerConfigDirectoryTestBase {
protected $profile = 'config_profile_with_hook_install';
@ -55,10 +55,10 @@ EOF;
/**
* {@inheritdoc}
*/
protected function getConfigTarball() {
protected function getConfigLocation() {
// We're not going to get to the config import stage so this does not
// matter.
return __DIR__ . '/../../../fixtures/config_install/testing_config_install_no_config.tar.gz';
return __DIR__ . '/../../../fixtures/config_install/testing_config_install_no_config';
}
/**

View File

@ -13,7 +13,7 @@ use Drupal\Component\Serialization\Yaml;
*
* @group Installer
*/
class InstallerExistingConfigSyncDirectoryMultilingualTest extends InstallerExistingConfigTestBase {
class InstallerExistingConfigSyncDirectoryMultilingualTest extends InstallerConfigDirectoryTestBase {
/**
* {@inheritdoc}
@ -43,8 +43,8 @@ class InstallerExistingConfigSyncDirectoryMultilingualTest extends InstallerExis
/**
* {@inheritdoc}
*/
protected function getConfigTarball() {
return __DIR__ . '/../../../fixtures/config_install/multilingual.tar.gz';
protected function getConfigLocation() {
return __DIR__ . '/../../../fixtures/config_install/multilingual';
}
/**

View File

@ -9,7 +9,7 @@ namespace Drupal\FunctionalTests\Installer;
*
* @group Installer
*/
class InstallerExistingConfigSyncDirectoryProfileHookInstall extends InstallerExistingConfigTestBase {
class InstallerExistingConfigSyncDirectoryProfileHookInstall extends InstallerConfigDirectoryTestBase {
/**
* {@inheritdoc}
@ -74,8 +74,8 @@ EOF;
/**
* {@inheritdoc}
*/
protected function getConfigTarball() {
return __DIR__ . '/../../../fixtures/config_install/multilingual.tar.gz';
protected function getConfigLocation() {
return __DIR__ . '/../../../fixtures/config_install/multilingual';
}
/**

View File

@ -9,7 +9,7 @@ namespace Drupal\FunctionalTests\Installer;
*
* @group Installer
*/
class InstallerExistingConfigSyncDirectoryProfileMismatchTest extends InstallerExistingConfigTestBase {
class InstallerExistingConfigSyncDirectoryProfileMismatchTest extends InstallerConfigDirectoryTestBase {
/**
* {@inheritdoc}
@ -29,8 +29,8 @@ class InstallerExistingConfigSyncDirectoryProfileMismatchTest extends InstallerE
/**
* {@inheritdoc}
*/
protected function getConfigTarball() {
return __DIR__ . '/../../../fixtures/config_install/multilingual.tar.gz';
protected function getConfigLocation() {
return __DIR__ . '/../../../fixtures/config_install/multilingual';
}
/**

View File

@ -11,7 +11,7 @@ namespace Drupal\FunctionalTests\Installer;
*
* @group Installer
*/
class InstallerExistingConfigTest extends InstallerExistingConfigTestBase {
class InstallerExistingConfigTest extends InstallerConfigDirectoryTestBase {
/**
* {@inheritdoc}
@ -37,8 +37,8 @@ class InstallerExistingConfigTest extends InstallerExistingConfigTestBase {
/**
* {@inheritdoc}
*/
protected function getConfigTarball() {
return __DIR__ . '/../../../fixtures/config_install/testing_config_install.tar.gz';
protected function getConfigLocation() {
return __DIR__ . '/../../../fixtures/config_install/testing_config_install';
}
}

View File

@ -11,6 +11,12 @@ use Drupal\Core\Installer\Form\SelectProfileForm;
/**
* Provides a base class for testing installing from existing configuration.
*
* @deprecated in drupal:10.4.0 and is removed from drupal:12.0.0. Use
* \Drupal\FunctionalTests\Installer\InstallerConfigDirectoryTestBase
* instead.
*
* @see https://www.drupal.org/node/3460001
*/
abstract class InstallerExistingConfigTestBase extends InstallerTestBase {
@ -26,6 +32,14 @@ abstract class InstallerExistingConfigTestBase extends InstallerTestBase {
*/
protected $existingSyncDirectory = FALSE;
/**
* {@inheritdoc}
*/
public function __construct(string $name) {
@trigger_error(__CLASS__ . ' is deprecated in drupal:10.4.0 and is removed from drupal:12.0.0. Use \Drupal\FunctionalTests\Installer\InstallerConfigDirectoryTestBase instead. See https://www.drupal.org/node/3460001');
parent::__construct($name);
}
/**
* {@inheritdoc}
*/

View File

@ -0,0 +1,27 @@
uuid: 315ef989-5b8d-46fd-afdd-757e3afc9ebe
langcode: en
status: true
dependencies:
config:
- system.menu.admin
module:
- system
theme:
- stark
_core:
default_config_hash: DWAB7HaAfAJerAmyT8B2K-6qxicu9n0PcKVpDr--N4c
id: stark_admin
theme: stark
region: sidebar_first
weight: 1
provider: null
plugin: 'system_menu_block:admin'
settings:
id: 'system_menu_block:admin'
label: Administration
label_display: visible
provider: system
level: 1
depth: 0
expand_all_items: false
visibility: { }

View File

@ -0,0 +1,25 @@
uuid: c49f2565-3d40-4ff8-a22c-2470bd562c5f
langcode: en
status: true
dependencies:
module:
- system
theme:
- stark
_core:
default_config_hash: fRKXNB91UxDvEMkzCR8ZBsawfC6Fqbme2gtobei3gu4
id: stark_branding
theme: stark
region: header
weight: 0
provider: null
plugin: system_branding_block
settings:
id: system_branding_block
label: 'Site branding'
label_display: '0'
provider: system
use_site_logo: true
use_site_name: true
use_site_slogan: true
visibility: { }

View File

@ -0,0 +1,20 @@
uuid: 8429dc9e-5c36-48ac-9ce9-ccde673bdfe7
langcode: en
status: true
dependencies:
theme:
- stark
_core:
default_config_hash: PffmQ-ABSz5tFjWmVsR7NesunDnEivvopnJnBjl8KNE
id: stark_local_actions
theme: stark
region: content
weight: -10
provider: null
plugin: local_actions_block
settings:
id: local_actions_block
label: 'Primary admin actions'
label_display: '0'
provider: core
visibility: { }

View File

@ -0,0 +1,22 @@
uuid: 224383ff-a7e5-4fd1-84b8-c153040baf52
langcode: en
status: true
dependencies:
theme:
- stark
_core:
default_config_hash: c-06bbElRY5sKmglk74ppgTW93Et4-EJFyNiUZMb8JY
id: stark_local_tasks
theme: stark
region: content
weight: -20
provider: null
plugin: local_tasks_block
settings:
id: local_tasks_block
label: Tabs
label_display: '0'
provider: core
primary: true
secondary: true
visibility: { }

View File

@ -0,0 +1,22 @@
uuid: 7cc06fac-e04f-432f-a402-db2b3fc514e2
langcode: en
status: true
dependencies:
module:
- user
theme:
- stark
_core:
default_config_hash: 4QlSnWBcxxKMIFRM8sbu_MjSkcp3NjGgnVrc-lynQHI
id: stark_login
theme: stark
region: sidebar_first
weight: 0
provider: null
plugin: user_login_block
settings:
id: user_login_block
label: 'User login'
label_display: visible
provider: user
visibility: { }

View File

@ -0,0 +1,22 @@
uuid: 7a2e98dd-605d-4724-86aa-a77049371035
langcode: en
status: true
dependencies:
module:
- system
theme:
- stark
_core:
default_config_hash: 5MNdk3fpMKx_xxBTcz2T11DL4XEU1H5SgHl8BsYdFsA
id: stark_messages
theme: stark
region: highlighted
weight: 0
provider: null
plugin: system_messages_block
settings:
id: system_messages_block
label: 'Status messages'
label_display: '0'
provider: system
visibility: { }

View File

@ -0,0 +1,20 @@
uuid: 0d264188-58d5-4c1e-97dd-b921250be7d5
langcode: en
status: true
dependencies:
theme:
- stark
_core:
default_config_hash: 8yptDf6WrXxeyevUz4nP5vfr7BtxQqCBMninhV2IJ1g
id: stark_page_title
theme: stark
region: content
weight: -30
provider: null
plugin: page_title_block
settings:
id: page_title_block
label: 'Page title'
label_display: '0'
provider: core
visibility: { }

View File

@ -0,0 +1,27 @@
uuid: ea5d1d85-0843-4425-9a2c-47cedb033650
langcode: en
status: true
dependencies:
config:
- system.menu.tools
module:
- system
theme:
- stark
_core:
default_config_hash: xCOijLdB1-UgXxQ9a0D1_pd8vxNEhfMnxXZc8jYhHjs
id: stark_tools
theme: stark
region: sidebar_first
weight: 0
provider: null
plugin: 'system_menu_block:tools'
settings:
id: 'system_menu_block:tools'
label: Tools
label_display: visible
provider: system
level: 1
depth: 0
expand_all_items: false
visibility: { }

View File

@ -0,0 +1,10 @@
uuid: fc00df3e-5c5b-4776-b70d-310e9591d166
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: 7klS5IWXrwzVaPpYZFAs6wcx8U2FF1X73OfrtTsvuvE
id: fallback
label: 'Fallback date format'
locked: true
pattern: 'D, m/d/Y - H:i'

View File

@ -0,0 +1,10 @@
uuid: f70daa40-f3ae-47e6-acac-be6894d26ab4
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: EOQltUQPmgc6UQ2rcJ4Xi_leCEJj5ui0TR-12duS-Tk
id: html_date
label: 'HTML Date'
locked: true
pattern: Y-m-d

View File

@ -0,0 +1,10 @@
uuid: cb2b2052-e0de-4435-aad5-5b5a81ac768c
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: jxfClwZIRXIdcvMrE--WkcZxDGUVoOIE3Sm2NRZlFuE
id: html_datetime
label: 'HTML Datetime'
locked: true
pattern: 'Y-m-d\TH:i:sO'

View File

@ -0,0 +1,10 @@
uuid: 4cd971a0-3778-45d2-9ad9-d06ddcaf8d15
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: Z7KuCUwM_WdTNvLcoltuX3_8d-s-8FZkTN6KgNwF0eM
id: html_month
label: 'HTML Month'
locked: true
pattern: Y-m

View File

@ -0,0 +1,10 @@
uuid: 89bb4ba8-1816-42cd-a563-782e2bf6a6ae
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: M7yqicYkU36hRy5p9drAaGBBihhUD1OyujFrAaQ93ZE
id: html_time
label: 'HTML Time'
locked: true
pattern: 'H:i:s'

View File

@ -0,0 +1,10 @@
uuid: 7acf37cd-2800-4a89-b0b2-be8899a50496
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: wKD4WsoV_wFgv2vgI4mcAAFSIzrye17ykzdwrnApkfY
id: html_week
label: 'HTML Week'
locked: true
pattern: Y-\WW

View File

@ -0,0 +1,10 @@
uuid: 5a107621-0d4b-40e0-8588-d4a461d24b7d
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: OjekiQuX9RbVQ2_8jOHBL94RgYLePqX7wpfNGgcQzrk
id: html_year
label: 'HTML Year'
locked: true
pattern: 'Y'

View File

@ -0,0 +1,10 @@
uuid: bea57536-8b97-4559-88af-f59cb327840a
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: 5VpawMrKPEPCkoO4YpPa0TDFO2dgiIHfTziJtwlmUxc
id: html_yearless_date
label: 'HTML Yearless date'
locked: true
pattern: m-d

View File

@ -0,0 +1,10 @@
uuid: 176a9d6c-b90b-4849-bfb7-0101cef34615
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: og8sWXhBuHbLMw3CoiBEZjgqSyhFBFmcbUW_wLcfNbo
id: long
label: 'Default long date'
locked: false
pattern: 'l, F j, Y - H:i'

View File

@ -0,0 +1,10 @@
uuid: f8e4e55a-9592-48e8-af81-070e526949d9
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: nzL5d024NjXIX_8TlT6uFAu973lmfkmHklJC-2i9rAE
id: medium
label: 'Default medium date'
locked: false
pattern: 'D, m/d/Y - H:i'

View File

@ -0,0 +1,10 @@
uuid: 313133c2-c0a7-4da9-9aa4-37ccf9233d68
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: AlzeyytA8InBgxIG9H2UDJYs3CG98Zj6yRsDKmlbZwA
id: short
label: 'Default short date'
locked: false
pattern: 'm/d/Y - H:i'

View File

@ -0,0 +1,13 @@
uuid: 3eb10631-6990-4617-9387-dc35347ba9d5
langcode: en
status: true
dependencies:
module:
- user
_core:
default_config_hash: flXhTcp55yLcyy7ZLOhPGKGZobZQJdkAFVWV3LseiuI
id: user.register
label: Register
description: ''
targetEntityType: user
cache: true

View File

@ -0,0 +1,13 @@
uuid: ac62530b-5610-411e-9c87-6c7c4b885f75
langcode: en
status: false
dependencies:
module:
- node
_core:
default_config_hash: ElrtInxGjZd7GaapJ5O9n-ugi2hG2IxFivtgn0tHOsk
id: node.full
label: 'Full content'
description: ''
targetEntityType: node
cache: true

View File

@ -0,0 +1,13 @@
uuid: 0f13a303-8b40-4b35-bfc6-b196b930215f
langcode: en
status: false
dependencies:
module:
- node
_core:
default_config_hash: vlYzr-rp2f9NMp-Qlr4sFjlqRq-90mco5-afLNGwCrU
id: node.rss
label: RSS
description: ''
targetEntityType: node
cache: true

View File

@ -0,0 +1,13 @@
uuid: a2066483-2f85-4822-af66-dd3fe24537bf
langcode: en
status: false
dependencies:
module:
- node
_core:
default_config_hash: fVFfJv_GzBRE-wpRHbfD5a3VjnhbEOXG6lvRd3uaccY
id: node.search_index
label: 'Search index'
description: ''
targetEntityType: node
cache: true

View File

@ -0,0 +1,13 @@
uuid: 1dcb883c-c089-4ef7-8840-4b4757d19185
langcode: en
status: false
dependencies:
module:
- node
_core:
default_config_hash: 6GCOQ-jP2RbdbHA5YWQ6bT8CfGbqrBYKOSC_XY4E3ZM
id: node.search_result
label: 'Search result highlighting input'
description: ''
targetEntityType: node
cache: true

View File

@ -0,0 +1,13 @@
uuid: 2f0674e6-7141-4f6b-9f1f-6aaaf6a49d79
langcode: en
status: true
dependencies:
module:
- node
_core:
default_config_hash: Mz9qWr1kUYK0mjRAGDsr5XS6PvtZ24en_7ndt-pyWe4
id: node.teaser
label: Teaser
description: ''
targetEntityType: node
cache: true

View File

@ -0,0 +1,13 @@
uuid: 7c381a1a-3206-4c3f-adfe-8a2fbcae76a0
langcode: en
status: true
dependencies:
module:
- user
_core:
default_config_hash: 71CSAr_LNPcgu6D6jI4INl1KATkahmeyUFBETAWya8g
id: user.compact
label: Compact
description: ''
targetEntityType: user
cache: true

View File

@ -0,0 +1,13 @@
uuid: 9e9ad96f-b5d9-4864-b386-7bcc3edd51b1
langcode: en
status: false
dependencies:
module:
- user
_core:
default_config_hash: mQIF_foYjmnVSr9MpcD4CTaJE_FpO1AyDd_DskztGhM
id: user.full
label: 'User account'
description: ''
targetEntityType: user
cache: true

View File

@ -0,0 +1,23 @@
_core:
default_config_hash: m2GVq11UAOVuNgj8x0t5fMOPujpvQQ_zxLoaly1BMEU
module:
block: 0
config: 0
dblog: 0
dynamic_page_cache: 0
field: 0
file: 0
filter: 0
language: 0
locale: 0
node: 0
page_cache: 0
path_alias: 0
system: 0
text: 0
user: 0
views: 10
testing_config_install_multilingual: 1000
theme:
stark: 0
profile: testing_config_install_multilingual

View File

@ -0,0 +1,3 @@
_core:
default_config_hash: jdY7AU0tU-QsjmiOw3W8vwpYMb-By--_MSFgbqKUTYM
definitions: { }

View File

@ -0,0 +1,3 @@
_core:
default_config_hash: e883aGsrt1wFrsydlYU584PZONCSfRy0DtkZ9KzHb58
row_limit: 1000

View File

@ -0,0 +1,3 @@
_core:
default_config_hash: nJk0TAQBzlNo52ehiHI7bIEPLGi0BYqZvPdEn7Chfu0
purge_batch_size: 50

View File

@ -0,0 +1,21 @@
uuid: 38e2675c-36a7-47b9-9ef6-11773d2c9684
langcode: en
status: true
dependencies:
module:
- node
- text
_core:
default_config_hash: EBUo7qOWqaiZaQ_RC9sLY5IoDKphS34v77VIHSACmVY
id: node.body
field_name: body
entity_type: node
type: text_with_summary
settings: { }
module: text
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: true
custom_storage: false

View File

@ -0,0 +1,7 @@
_core:
default_config_hash: 8LI-1XgwLt9hYRns_7c81S632d6JhdqXKs4vDheaG6E
description:
type: textfield
length: 128
icon:
directory: core/modules/file/icons

View File

@ -0,0 +1,29 @@
uuid: 00cd5b60-e455-46ed-899f-b2ebf6cc76aa
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: NIKBt6kw_uPhNI0qtR2DnRf7mSOgAQdx7Q94SKMjXbQ
name: 'Plain text'
format: plain_text
weight: 10
filters:
filter_autop:
id: filter_autop
provider: filter
status: true
weight: 0
settings: { }
filter_html_escape:
id: filter_html_escape
provider: filter
status: true
weight: -10
settings: { }
filter_url:
id: filter_url
provider: filter
status: true
weight: 0
settings:
filter_url_length: 72

View File

@ -0,0 +1,4 @@
_core:
default_config_hash: FiPjM3WdB__ruFA7B6TLwni_UcZbmek5G4b2dxQItxA
fallback_format: plain_text
always_show_fallback_choice: false

View File

@ -0,0 +1,11 @@
uuid: 375507a7-fe17-4941-a622-987650600c9b
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: lBXDpdDPXQtrfTJQhr6MjRJJEEyYSoRJ0acdvHLsWeA
id: en
label: English
direction: ltr
weight: 0
locked: false

View File

@ -0,0 +1,9 @@
uuid: 249500e1-4e93-4eec-b5ae-99afe852d4ed
langcode: en
status: true
dependencies: { }
id: es
label: Spanish
direction: ltr
weight: 1
locked: false

View File

@ -0,0 +1,11 @@
uuid: c66606d5-4582-4b09-aa08-25a721400471
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: eNX6lLCKDaY83nCMh20My---y03KbiFlv802DKCCpvg
id: und
label: 'Not specified'
direction: ltr
weight: 2
locked: true

View File

@ -0,0 +1,11 @@
uuid: 29bd4500-26ce-4284-9d57-a70b0c6ba1aa
langcode: en
status: true
dependencies: { }
_core:
default_config_hash: 35CefWbnzaiytcg3acexxz_GTvuwIjYd_ZTcmmR-tXA
id: zxx
label: 'Not applicable'
direction: ltr
weight: 3
locked: true

View File

@ -0,0 +1,13 @@
_core:
default_config_hash: EMWe7Yu4Q5eD-NUfNuQAWGBvYUNZPIinztEtONSmsDc
map:
'no': nb
pt: pt-pt
zh: zh-hans
zh-tw: zh-hant
zh-hk: zh-hant
zh-mo: zh-hant
zh-cht: zh-hant
zh-cn: zh-hans
zh-sg: zh-hans
zh-chs: zh-hans

View File

@ -0,0 +1,13 @@
_core:
default_config_hash: uEePITI9tV6WqzmsTb7MfPCi5yPWXSxAN1xeLcYFQbM
session:
parameter: language
url:
source: path_prefix
prefixes:
en: ''
es: es
domains:
en: ''
es: ''
selected_langcode: site_default

View File

@ -0,0 +1,19 @@
_core:
default_config_hash: dqouFqVseNJNvEjsoYKxbinFOITuCxYhi4y2OTNQP_8
all:
- language_interface
- language_content
- language_url
configurable:
- language_interface
negotiation:
language_content:
enabled:
language-interface: 0
language_url:
enabled:
language-url: 0
language-url-fallback: 1
language_interface:
enabled:
language-url: 0

View File

@ -0,0 +1,2 @@
settings:
label: Administración

View File

@ -0,0 +1,2 @@
settings:
label: 'Inicio de sesión'

View File

@ -0,0 +1,2 @@
settings:
label: 'Título de página'

View File

@ -0,0 +1,2 @@
settings:
label: Herramientas

View File

@ -0,0 +1 @@
label: 'Formato de fecha de respaldo'

View File

@ -0,0 +1 @@
label: 'Fecha HTML'

View File

@ -0,0 +1 @@
label: 'Mes HTML'

View File

@ -0,0 +1 @@
label: 'Hora HTML'

View File

@ -0,0 +1 @@
label: 'Semana HTML'

View File

@ -0,0 +1 @@
label: 'Año HTML'

View File

@ -0,0 +1 @@
label: 'Fecha anual HTML'

View File

@ -0,0 +1 @@
label: 'Fecha larga por defecto'

View File

@ -0,0 +1,2 @@
label: 'Fecha mediana por defecto'
pattern: 'D, d/m/Y - H:i'

View File

@ -0,0 +1,2 @@
label: 'Fecha corta por defecto'
pattern: 'd/m/Y - H:i'

View File

@ -0,0 +1 @@
label: 'Contenido completo'

View File

@ -0,0 +1 @@
label: 'Índice de búsqueda'

View File

@ -0,0 +1 @@
label: 'Destacar la entrada de los resultados de búsqueda'

View File

@ -0,0 +1 @@
label: 'Cuenta de usuario'

View File

@ -0,0 +1 @@
name: 'Texto sin formato'

View File

@ -0,0 +1 @@
label: Inglés

View File

@ -0,0 +1 @@
label: Español

View File

@ -0,0 +1 @@
label: 'Sin especificar'

View File

@ -0,0 +1 @@
label: 'No aplicable'

View File

@ -0,0 +1 @@
label: 'Eliminar contenido'

View File

@ -0,0 +1 @@
label: 'Fijar contenido'

View File

@ -0,0 +1 @@
label: 'Des fijar el contenido'

View File

@ -0,0 +1 @@
label: 'Promocionar contenido a la página de inicio'

View File

@ -0,0 +1 @@
label: 'Publicar contenido'

View File

@ -0,0 +1 @@
label: 'Guardar contenido'

View File

@ -0,0 +1 @@
label: 'Eliminar contenido de la página de inicio'

View File

@ -0,0 +1 @@
label: 'Anular la publicación del contenido'

View File

@ -0,0 +1 @@
label: 'Bloquear al usuario o usuarios seleccionados'

View File

@ -0,0 +1 @@
label: 'Cancelar la(s) cuenta(s) de usuario seleccionada(s)'

View File

@ -0,0 +1 @@
label: 'Desbloquear al usuario o usuarios seleccionados'

View File

@ -0,0 +1 @@
message: '@site está en mantenimiento en estos momentos. Pronto estaremos de regreso. Gracias por su paciencia.'

View File

@ -0,0 +1,2 @@
label: 'Menú de cuenta de usuario'
description: 'Enlaces relacionados con la cuenta del usuario activo'

View File

@ -0,0 +1,2 @@
label: Administración
description: 'Enlaces de tareas administrativas'

View File

@ -0,0 +1,2 @@
label: 'Pie de página'
description: 'Enlaces de información del sitio'

View File

@ -0,0 +1,2 @@
label: 'Navegación principal'
description: 'Enlaces de secciones del sitio'

View File

@ -0,0 +1,2 @@
label: Herramientas
description: 'Enlaces de herramientas de usuario. Los suelen añadir los módulos'

View File

@ -0,0 +1 @@
name: Drupal

View File

@ -0,0 +1,24 @@
password_reset:
subject: 'Reemplazo de información de inicio de sesión para [user:display-name] en [site:name]'
body: "[user:display-name],\r\n\r\nUna petición para reestablecer la contraseña de su cuenta ha sido realizada en [site:name].\r\n\r\nAhora puede iniciar sesión haciendo clic en este enlace o copiándolo y pegándolo en su navegador:\r\n\r\n[user:one-time-login-url]\r\n\r\nEste enlace solo puede ser usado una vez para iniciar sesión y le llevará a una página donde puede establecer su contraseña. Caduca después de un día y nada ocurrirá si no se usa.\r\n\r\n-- El equipo de [site:name]"
register_admin_created:
subject: 'Un administrador ha creado una cuenta para usted en [site:name]'
body: "[user:display-name],\r\n\r\nUn administrador del sitio en [site:name] ha creado una cuenta para usted. Puede ahora iniciar sesión haciendo clic en este enlace o copiando y pegándolo en su navegador:\r\n\r\n[user:one-time-login-url]\r\n\r\nEste enlace solo puede ser usado una vez para iniciar sesión y le conducirá a la página donde podrá establecer su contraseña.\r\n\r\nDespués de establecer su contraseña, será capaz de iniciar sesión en [site:login-url] en el futuro usando:\r\n\r\nNombre de usuario: [user:name]\r\nContraseña: Su contraseña\r\n\r\n-- Equipo de [site:name]"
register_no_approval_required:
subject: 'Detalles de la cuenta para [user:display-name] en [site:name]'
body: "[user:display-name],\r\n\r\nGracias por registrarse en [site:name]. Puede ahora iniciar sesión haciendo clic en este enlace o copiando y pegandolo en su navegador:\r\n\r\n[user:one-time-login-url]\r\n\r\nEste enlace solo puede ser usado una vez para iniciar sesión y le conducirá a una página donde podrá establecer sus contraseña.\r\n\r\nDespués de establecer su contraseña, será capaz de iniciar sesión en [site:login-url] en el futuro usando:\r\n\r\nNombre de usuario: [user:name]\r\nContraseña: Su contraseña\r\n\r\n-- Equipo de [site:name]"
register_pending_approval:
subject: 'Detalles de cuenta para [user:display-name] en [site:name] (pendiente de aprobación por el administrador)'
body: "[user:display-name],\r\n\r\nGracias por registrarse en [site:name]. Su solicitud de una cuenta actualmente está pendiente de aprobación. Una vez que haya sido aprobada, recibirá otro correo electrónico con información sobre cómo iniciar sesión, establecer su contraseña y otros detalles.\r\n\r\n-- El equipo de [site:name]"
register_pending_approval_admin:
subject: 'Detalles de cuenta para [user:display-name] en [site:name] (pendiente de aprobación por el administrador)'
body: "[user:display-name] ha solicitado una cuenta.\r\n\r\n[user:edit-url]"
status_activated:
subject: 'Detalles de cuenta para [user:display-name] en [site:name] (aprobado)'
body: "[user:display-name],\r\n\r\nSu cuenta en [site:name] ha sido activada.\r\n\r\nUsted puede ahora iniciar sesión haciendo click en este enlace o copiándolo y pegándolo en su navegador:\r\n\r\n[user:one-time-login-url]\r\n\r\nEste enlace solo puede ser usado una vez para iniciar sesión y lo llevará a usted a una página donde podrá establecer su clave personal.\r\n\r\nDespués de establecer su clave personal, usted podrá iniciar sesión en [site:login-url] utilizando:\r\n\r\nusuario: [user:account-name]\r\nclave personal: Your password\r\n\r\n-- Equipo [site:name]"
status_blocked:
subject: 'Detalles de la cuenta de [user:display-name] en [site:name] (bloqueada)'
body: "[user:display-name],\r\n\r\nSu cuenta en [site:name] ha sido bloqueada.\r\n\r\n-- El equipo de [site:name]"
status_canceled:
subject: 'Detalles de cuenta para [user:display-name] en [site:name] (cancelado)'
body: "[user:display-name],\r\n\r\nSu cuenta en [site:name] ha sido cancelada.\r\n\r\n-- El equipo de [site:name]"

Some files were not shown because too many files have changed in this diff Show More