diff --git a/core/modules/media/src/MediaSourceBase.php b/core/modules/media/src/MediaSourceBase.php index 6be29088ad..d22d86ceeb 100644 --- a/core/modules/media/src/MediaSourceBase.php +++ b/core/modules/media/src/MediaSourceBase.php @@ -212,10 +212,8 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form * {@inheritdoc} */ public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { - foreach ($form_state->getValues() as $config_key => $config_value) { - if (isset($this->configuration[$config_key])) { - $this->configuration[$config_key] = $config_value; - } + foreach (array_intersect_key($form_state->getValues(), $this->configuration) as $config_key => $config_value) { + $this->configuration[$config_key] = $config_value; } // If no source field is explicitly set, create it now. diff --git a/core/modules/media/tests/src/Kernel/MediaSourceTest.php b/core/modules/media/tests/src/Kernel/MediaSourceTest.php index bc6a8de299..f59524fd82 100644 --- a/core/modules/media/tests/src/Kernel/MediaSourceTest.php +++ b/core/modules/media/tests/src/Kernel/MediaSourceTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\media\Kernel; use Drupal\Core\Entity\EntityStorageException; +use Drupal\Core\Form\FormState; use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldStorageConfig; use Drupal\media\Entity\Media; @@ -417,4 +418,26 @@ public function testSourceFieldCreation() { $this->assertEquals('test_constraints_type', $field->getTargetBundle(), 'Field is not targeting correct bundle.'); } + /** + * Tests configuration form submit handler on the base media source plugin. + */ + public function testSourceConfigurationSubmit() { + /** @var \Drupal\media\MediaSourceManager $manager */ + $manager = $this->container->get('plugin.manager.media.source'); + $form = []; + $form_state = new FormState(); + $form_state->setValues(['test_config_value' => 'Somewhere over the rainbow.']); + + /** @var \Drupal\media\MediaSourceInterface $source */ + $source = $manager->createInstance('test', []); + $source->submitConfigurationForm($form, $form_state); + + $expected = ['test_config_value' => 'Somewhere over the rainbow.', 'source_field' => 'field_media_test_1']; + $this->assertEquals($expected, $source->getConfiguration(), 'Submitted values were saved correctly.'); + + $form_state->setValue('not_relevant', 'Should not be saved in the plugin.'); + $source->submitConfigurationForm($form, $form_state); + $this->assertEquals($expected, $source->getConfiguration(), 'Submitted values were saved correctly.'); + } + }