Loading core/modules/content_translation/src/Hook/ContentTranslationFormLanguageHooks.php +7 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,13 @@ public function formLanguageContentSettingsFormAlter(array &$form, FormStateInte '#default_value' => $definition->isTranslatable(), ]; // Display the column translatability configuration widget. $column_element = $this->fieldSyncWidget->widget($definition, "settings[{$entity_type_id}][{$bundle}][columns][{$field_name}]"); // Base field definitions do not carry third-party settings. // Use the bundle-level config wrapper so sync options are // available even before a BaseFieldOverride is explicitly saved. $field_for_sync_widget = $definition->getFieldStorageDefinition()->isBaseField() ? $definition->getConfig($bundle) : $definition; $column_element = $this->fieldSyncWidget->widget($field_for_sync_widget, "settings[{$entity_type_id}][{$bundle}][columns][{$field_name}]"); if ($column_element) { $form['settings'][$entity_type_id][$bundle]['columns'][$field_name] = $column_element; } Loading core/modules/content_translation/tests/src/Functional/ContentLanguageBaseFieldSyncWidgetTest.php 0 → 100644 +63 −0 Original line number Diff line number Diff line <?php declare(strict_types=1); namespace Drupal\Tests\content_translation\Functional; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\media\Traits\MediaTypeCreationTrait; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; /** * Tests base-field translation sync options on content language settings form. */ #[RunTestsInSeparateProcesses] #[Group('content_translation')] final class ContentLanguageBaseFieldSyncWidgetTest extends BrowserTestBase { use MediaTypeCreationTrait; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected static $modules = [ 'content_translation', 'language', 'media', 'media_test_source', ]; /** * Tests translation sync options appear for translatable base fields. */ public function testBaseFieldSyncOptionsVisibleOnFirstLoad(): void { $account = $this->drupalCreateUser([ 'administer languages', 'administer content translation', 'administer media', 'administer media types', ]); $this->drupalLogin($account); $media_type = $this->createMediaType('test'); $this->drupalGet('admin/config/regional/content-language'); $assert_session = $this->assertSession(); $assert_session->statusCodeEquals(200); // Regression test: before any save/create of a base field override, the // column-group sync options for a translatable base field must be present. $assert_session->elementExists('css', 'input[name="settings[media][' . $media_type->id() . '][fields][thumbnail]"]'); $assert_session->elementExists('css', 'input[name="settings[media][' . $media_type->id() . '][columns][thumbnail][file]"]'); $assert_session->elementExists('css', 'input[name="settings[media][' . $media_type->id() . '][columns][thumbnail][alt]"]'); $assert_session->elementExists('css', 'input[name="settings[media][' . $media_type->id() . '][columns][thumbnail][title]"]'); } } Loading
core/modules/content_translation/src/Hook/ContentTranslationFormLanguageHooks.php +7 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,13 @@ public function formLanguageContentSettingsFormAlter(array &$form, FormStateInte '#default_value' => $definition->isTranslatable(), ]; // Display the column translatability configuration widget. $column_element = $this->fieldSyncWidget->widget($definition, "settings[{$entity_type_id}][{$bundle}][columns][{$field_name}]"); // Base field definitions do not carry third-party settings. // Use the bundle-level config wrapper so sync options are // available even before a BaseFieldOverride is explicitly saved. $field_for_sync_widget = $definition->getFieldStorageDefinition()->isBaseField() ? $definition->getConfig($bundle) : $definition; $column_element = $this->fieldSyncWidget->widget($field_for_sync_widget, "settings[{$entity_type_id}][{$bundle}][columns][{$field_name}]"); if ($column_element) { $form['settings'][$entity_type_id][$bundle]['columns'][$field_name] = $column_element; } Loading
core/modules/content_translation/tests/src/Functional/ContentLanguageBaseFieldSyncWidgetTest.php 0 → 100644 +63 −0 Original line number Diff line number Diff line <?php declare(strict_types=1); namespace Drupal\Tests\content_translation\Functional; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\media\Traits\MediaTypeCreationTrait; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; /** * Tests base-field translation sync options on content language settings form. */ #[RunTestsInSeparateProcesses] #[Group('content_translation')] final class ContentLanguageBaseFieldSyncWidgetTest extends BrowserTestBase { use MediaTypeCreationTrait; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * {@inheritdoc} */ protected static $modules = [ 'content_translation', 'language', 'media', 'media_test_source', ]; /** * Tests translation sync options appear for translatable base fields. */ public function testBaseFieldSyncOptionsVisibleOnFirstLoad(): void { $account = $this->drupalCreateUser([ 'administer languages', 'administer content translation', 'administer media', 'administer media types', ]); $this->drupalLogin($account); $media_type = $this->createMediaType('test'); $this->drupalGet('admin/config/regional/content-language'); $assert_session = $this->assertSession(); $assert_session->statusCodeEquals(200); // Regression test: before any save/create of a base field override, the // column-group sync options for a translatable base field must be present. $assert_session->elementExists('css', 'input[name="settings[media][' . $media_type->id() . '][fields][thumbnail]"]'); $assert_session->elementExists('css', 'input[name="settings[media][' . $media_type->id() . '][columns][thumbnail][file]"]'); $assert_session->elementExists('css', 'input[name="settings[media][' . $media_type->id() . '][columns][thumbnail][alt]"]'); $assert_session->elementExists('css', 'input[name="settings[media][' . $media_type->id() . '][columns][thumbnail][title]"]'); } }