Loading core/modules/media/src/Entity/Media.php +7 −3 Original line number Diff line number Diff line Loading @@ -261,15 +261,19 @@ protected function getThumbnailUri($from_queue) { /** * Determines if the source field value has changed. * * The comparison uses MediaSourceInterface::getSourceFieldValue() to ensure * that the correct property from the source field is used. * * @return bool * TRUE if the source field value changed, FALSE otherwise. * * @see \Drupal\media\MediaSourceInterface::getSourceFieldValue() * * @internal */ protected function hasSourceFieldChanged() { $source_field_name = $this->getSource()->getConfiguration()['source_field']; $current_items = $this->get($source_field_name); return isset($this->original) && !$current_items->equals($this->original->get($source_field_name)); $source = $this->getSource(); return isset($this->original) && $source->getSourceFieldValue($this) !== $source->getSourceFieldValue($this->original); } /** Loading core/modules/media/tests/src/Functional/MediaSourceImageTest.php 0 → 100644 +76 −0 Original line number Diff line number Diff line <?php namespace Drupal\Tests\media\Functional; use Drupal\field\Entity\FieldConfig; use Drupal\file\Entity\File; use Drupal\media\Entity\Media; use Drupal\Tests\TestFileCreationTrait; /** * Tests the image media source. * * @group media */ class MediaSourceImageTest extends MediaFunctionalTestBase { use TestFileCreationTrait; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * Test that non-main properties do not trigger source field value change. */ public function testOnlyMainPropertiesTriggerSourceFieldChanged() { $assert_session = $this->assertSession(); $page = $this->getSession()->getPage(); $media_type = $this->createMediaType('image'); $media_type_id = $media_type->id(); $media_type->setFieldMap(['name' => 'name']); $media_type->save(); /** @var \Drupal\field\FieldConfigInterface $field */ // Disable the alt text field, because this is not a JavaScript test and // the alt text field will therefore not appear without a full page refresh. $field = FieldConfig::load("media.$media_type_id.field_media_image"); $settings = $field->getSettings(); $settings['alt_field'] = TRUE; $settings['alt_field_required'] = FALSE; $field->set('settings', $settings); $field->save(); $file = File::create([ 'uri' => $this->getTestFiles('image')[0]->uri, ]); $file->save(); $media = Media::create([ 'name' => 'Custom name', 'bundle' => $media_type_id, 'field_media_image' => $file->id(), ]); $media->save(); // Change only the alt of the image. $this->drupalGet($media->toUrl('edit-form')); $this->submitForm(['field_media_image[0][alt]' => 'Alt text'], 'Save'); // Custom name should stay. $this->drupalGet($media->toUrl('edit-form')); $assert_session->fieldValueEquals('name[0][value]', 'Custom name'); // Remove image and attach a new one. $this->submitForm([], 'Remove'); $image_media_name = 'example_1.jpeg'; $page->attachFileToField('files[field_media_image_0]', $this->root . '/core/modules/media/tests/fixtures/' . $image_media_name); $page->pressButton('Save'); $this->drupalGet($media->toUrl('edit-form')); $assert_session->fieldValueEquals('name[0][value]', 'example_1.jpeg'); } } Loading
core/modules/media/src/Entity/Media.php +7 −3 Original line number Diff line number Diff line Loading @@ -261,15 +261,19 @@ protected function getThumbnailUri($from_queue) { /** * Determines if the source field value has changed. * * The comparison uses MediaSourceInterface::getSourceFieldValue() to ensure * that the correct property from the source field is used. * * @return bool * TRUE if the source field value changed, FALSE otherwise. * * @see \Drupal\media\MediaSourceInterface::getSourceFieldValue() * * @internal */ protected function hasSourceFieldChanged() { $source_field_name = $this->getSource()->getConfiguration()['source_field']; $current_items = $this->get($source_field_name); return isset($this->original) && !$current_items->equals($this->original->get($source_field_name)); $source = $this->getSource(); return isset($this->original) && $source->getSourceFieldValue($this) !== $source->getSourceFieldValue($this->original); } /** Loading
core/modules/media/tests/src/Functional/MediaSourceImageTest.php 0 → 100644 +76 −0 Original line number Diff line number Diff line <?php namespace Drupal\Tests\media\Functional; use Drupal\field\Entity\FieldConfig; use Drupal\file\Entity\File; use Drupal\media\Entity\Media; use Drupal\Tests\TestFileCreationTrait; /** * Tests the image media source. * * @group media */ class MediaSourceImageTest extends MediaFunctionalTestBase { use TestFileCreationTrait; /** * {@inheritdoc} */ protected $defaultTheme = 'stark'; /** * Test that non-main properties do not trigger source field value change. */ public function testOnlyMainPropertiesTriggerSourceFieldChanged() { $assert_session = $this->assertSession(); $page = $this->getSession()->getPage(); $media_type = $this->createMediaType('image'); $media_type_id = $media_type->id(); $media_type->setFieldMap(['name' => 'name']); $media_type->save(); /** @var \Drupal\field\FieldConfigInterface $field */ // Disable the alt text field, because this is not a JavaScript test and // the alt text field will therefore not appear without a full page refresh. $field = FieldConfig::load("media.$media_type_id.field_media_image"); $settings = $field->getSettings(); $settings['alt_field'] = TRUE; $settings['alt_field_required'] = FALSE; $field->set('settings', $settings); $field->save(); $file = File::create([ 'uri' => $this->getTestFiles('image')[0]->uri, ]); $file->save(); $media = Media::create([ 'name' => 'Custom name', 'bundle' => $media_type_id, 'field_media_image' => $file->id(), ]); $media->save(); // Change only the alt of the image. $this->drupalGet($media->toUrl('edit-form')); $this->submitForm(['field_media_image[0][alt]' => 'Alt text'], 'Save'); // Custom name should stay. $this->drupalGet($media->toUrl('edit-form')); $assert_session->fieldValueEquals('name[0][value]', 'Custom name'); // Remove image and attach a new one. $this->submitForm([], 'Remove'); $image_media_name = 'example_1.jpeg'; $page->attachFileToField('files[field_media_image_0]', $this->root . '/core/modules/media/tests/fixtures/' . $image_media_name); $page->pressButton('Save'); $this->drupalGet($media->toUrl('edit-form')); $assert_session->fieldValueEquals('name[0][value]', 'example_1.jpeg'); } }