Verified Commit 23559ca6 authored by Dave Long's avatar Dave Long
Browse files

fix: #3606969 Content translation column group settings only show up once...

fix: #3606969 Content translation column group settings only show up once there are base field overrides saved

By: gábor hojtsy
By: penyaskito
(cherry picked from commit 68f6b308)
parent b3251112
Loading
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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;
              }
+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]"]');
  }

}