Skip to content
Snippets Groups Projects
Commit f7ee9b81 authored by catch's avatar catch
Browse files

Issue #3101552 by Berdir, Primsi, Nikhil_110, smustgrave: Make FileItem translations synchronisable

parent ddf4ed62
No related branches found
No related tags found
26 merge requests!11131[10.4.x-only-DO-NOT-MERGE]: Issue ##2842525 Ajax attached to Views exposed filter form does not trigger callbacks,!9470[10.3.x-only-DO-NOT-MERGE]: #3331771 Fix file_get_contents(): Passing null to parameter,!8540Issue #3457061: Bootstrap Modal dialog Not closing after 10.3.0 Update,!8528Issue #3456871 by Tim Bozeman: Support NULL services,!8373Issue #3427374 by danflanagan8, Vighneshh: taxonomy_tid ViewsArgumentDefault...,!3878Removed unused condition head title for views,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2062Issue #3246454: Add weekly granularity to views date sort,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #159959 canceled
......@@ -375,6 +375,84 @@ public function testFieldSynchronizationAndValidation() {
$this->assertLatestRevisionFieldValues($entity_id, [26, 3, 3, 'Alt 3 EN', 'Alt 4 IT']);
}
/**
* Checks that file field synchronization works as expected.
*/
public function testFileFieldSynchronization(): void {
$entity_type_id = 'entity_test_mulrev';
$file_field_name = 'file_field';
foreach ($this->getTestFiles('text') as $file) {
$entity = File::create((array) $file + ['status' => 1]);
$entity->save();
}
/** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */
$field_storage_config = FieldStorageConfig::create([
'field_name' => $file_field_name,
'type' => 'file',
'entity_type' => $entity_type_id,
'cardinality' => 1,
'translatable' => 1,
]);
$field_storage_config->save();
$field_config = FieldConfig::create([
'entity_type' => $entity_type_id,
'field_name' => $file_field_name,
'bundle' => $entity_type_id,
'label' => 'Synchronized file field',
'translatable' => 1,
]);
$field_config->save();
$property_settings = [
'display' => 'display',
'description' => 'description',
'target_id' => 0,
];
$field_config->setThirdPartySetting('content_translation', 'translation_sync', $property_settings);
$field_config->save();
/** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
$entity = EntityTestMulRev::create([
'uid' => 1,
'langcode' => 'en',
$file_field_name => [
'target_id' => 1,
'description' => 'Description EN',
'display' => 1,
],
]);
$entity->save();
$this->assertEquals(1, $entity->get($file_field_name)->target_id);
$this->assertEquals('Description EN', $entity->get($file_field_name)->description);
$this->assertEquals(1, $entity->get($file_field_name)->display);
// Create a translation with a different file, description and display
// values.
$it_translation = $entity->addTranslation('it', $entity->toArray());
$it_translation->get($file_field_name)->target_id = 2;
$it_translation->get($file_field_name)->description = 'Description IT';
$it_translation->get($file_field_name)->display = 0;
$metadata = $this->contentTranslationManager->getTranslationMetadata($it_translation);
$metadata->setSource('en');
$it_translation->save();
$it_entity = $entity->getTranslation('it');
$this->assertEquals(2, $it_entity->get($file_field_name)->target_id);
$this->assertEquals('Description IT', $it_entity->get($file_field_name)->description);
$this->assertEquals(0, $it_entity->get($file_field_name)->display);
// In the english entity the file should have changed, but the description
// and display should have remained the same.
$en_entity = $entity->getTranslation('en');
$this->assertEquals(2, $en_entity->get($file_field_name)->target_id);
$this->assertEquals('Description EN', $en_entity->get($file_field_name)->description);
$this->assertEquals(1, $en_entity->get($file_field_name)->display);
}
/**
* Tests changing the default language of an entity.
*/
......
......@@ -33,7 +33,21 @@
default_widget: "file_generic",
default_formatter: "file_default",
list_class: FileFieldItemList::class,
constraints: ["ReferenceAccess" => [], "FileValidation" => []]
constraints: ["ReferenceAccess" => [], "FileValidation" => []],
column_groups: [
'target_id' => [
'label' => new TranslatableMarkup('File'),
'translatable' => TRUE,
],
'display' => [
'label' => new TranslatableMarkup('Display'),
'translatable' => TRUE,
],
'description' => [
'label' => new TranslatableMarkup('Description'),
'translatable' => TRUE,
],
],
)]
class FileItem extends EntityReferenceItem {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment