From 5000144b07be72b9406dd96dd1819dce5b8f2ef1 Mon Sep 17 00:00:00 2001 From: ad0z <a0z@noreply.codeberg.org> Date: Sat, 25 Jan 2025 13:48:56 +0100 Subject: [PATCH 1/3] Issue #2973170: disable "Autocreate entity" for file target --- src/Feeds/Target/EntityReference.php | 48 ++++++++++++++++++---------- src/Feeds/Target/File.php | 7 ++++ 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/Feeds/Target/EntityReference.php b/src/Feeds/Target/EntityReference.php index 25c2fec2..083e3336 100644 --- a/src/Feeds/Target/EntityReference.php +++ b/src/Feeds/Target/EntityReference.php @@ -322,7 +322,7 @@ class EntityReference extends FieldTargetBase implements ConfigurableTargetInter return $target_ids; } - if ($this->configuration['autocreate'] && $field === $this->getLabelKey()) { + if ($this->hasAutocreateSupport() && $this->configuration['autocreate'] && $field === $this->getLabelKey()) { return [$this->createEntity($search)]; } @@ -362,18 +362,32 @@ class EntityReference extends FieldTargetBase implements ConfigurableTargetInter return $entity->id(); } + /** + * Determines if given target has auto create support. + * + * @return bool + * TRUE if supported, FALSE otherwise. + */ + protected function hasAutocreateSupport() { + return TRUE; + } + /** * {@inheritdoc} */ public function defaultConfiguration() { $config = parent::defaultConfiguration() + [ - 'reference_by' => $this->getLabelKey(), - 'autocreate' => FALSE, - 'autocreate_bundle' => FALSE, - ]; + 'reference_by' => $this->getLabelKey(), + 'autocreate' => FALSE, + 'autocreate_bundle' => FALSE, + ]; if (array_key_exists('feeds_item', $this->getPotentialFields())) { $config['feeds_item'] = FALSE; } + if ($this->hasAutocreateSupport()) { + $config['autocreate'] = FALSE; + $config['autocreate_bundle'] = FALSE; + } return $config; } @@ -425,18 +439,20 @@ class EntityReference extends FieldTargetBase implements ConfigurableTargetInter ], ]; - $form['autocreate'] = [ - '#type' => 'checkbox', - '#title' => $this->t('Autocreate entity'), - '#default_value' => $this->configuration['autocreate'], - '#states' => [ - 'visible' => [ - ':input[name="mappings[' . $delta . '][settings][reference_by]"]' => [ - 'value' => $this->getLabelKey(), + if ($this->hasAutocreateSupport()) { + $form['autocreate'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Autocreate entity'), + '#default_value' => $this->configuration['autocreate'], + '#states' => [ + 'visible' => [ + ':input[name="mappings[' . $delta . '][settings][reference_by]"]' => [ + 'value' => $this->getLabelKey(), + ], ], ], - ], - ]; + ]; + } $bundles = $this->getBundles(); if (count($bundles) > 0) { @@ -488,7 +504,7 @@ class EntityReference extends FieldTargetBase implements ConfigurableTargetInter ]; } - if ($this->configuration['reference_by'] === $this->getLabelKey()) { + if ($this->hasAutocreateSupport() && $this->configuration['reference_by'] === $this->getLabelKey()) { $create = $this->configuration['autocreate'] ? $this->t('Yes') : $this->t('No'); $summary[] = $this->t('Autocreate entities: %create', ['%create' => $create]); if ($this->configuration['autocreate'] && in_array($this->configuration['autocreate_bundle'], $this->getBundles())) { diff --git a/src/Feeds/Target/File.php b/src/Feeds/Target/File.php index b4592634..b86ad3e4 100644 --- a/src/Feeds/Target/File.php +++ b/src/Feeds/Target/File.php @@ -415,4 +415,11 @@ class File extends EntityReference { } } + /** + * {@inheritdoc} + */ + protected function hasAutocreateSupport() { + return FALSE; + } + } -- GitLab From 5873374eef932a39e028dbc161e324a6ef2eb187 Mon Sep 17 00:00:00 2001 From: ad0z <a0z@noreply.codeberg.org> Date: Wed, 29 Jan 2025 21:31:47 +0100 Subject: [PATCH 2/3] Issue #2973170: update EntityReference::defaultConfiguration, update tests --- src/Feeds/Target/EntityReference.php | 2 -- tests/src/Functional/Feeds/Target/EntityReferenceTest.php | 2 ++ tests/src/Functional/Feeds/Target/FileTest.php | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Feeds/Target/EntityReference.php b/src/Feeds/Target/EntityReference.php index 083e3336..6fe733b0 100644 --- a/src/Feeds/Target/EntityReference.php +++ b/src/Feeds/Target/EntityReference.php @@ -378,8 +378,6 @@ class EntityReference extends FieldTargetBase implements ConfigurableTargetInter public function defaultConfiguration() { $config = parent::defaultConfiguration() + [ 'reference_by' => $this->getLabelKey(), - 'autocreate' => FALSE, - 'autocreate_bundle' => FALSE, ]; if (array_key_exists('feeds_item', $this->getPotentialFields())) { $config['feeds_item'] = FALSE; diff --git a/tests/src/Functional/Feeds/Target/EntityReferenceTest.php b/tests/src/Functional/Feeds/Target/EntityReferenceTest.php index 92ccc987..c7afc2b7 100644 --- a/tests/src/Functional/Feeds/Target/EntityReferenceTest.php +++ b/tests/src/Functional/Feeds/Target/EntityReferenceTest.php @@ -80,6 +80,8 @@ class EntityReferenceTest extends FeedsBrowserTestBase { $this->assertSession()->optionExists('mappings[2][settings][autocreate_bundle]', 'foo'); $this->assertSession()->optionExists('mappings[2][settings][autocreate_bundle]', 'qux'); $this->assertSession()->optionNotExists('mappings[2][settings][autocreate_bundle]', 'bar'); + // Assert that autocreate field exists. + $this->assertSession()->fieldExists('mappings[2][settings][autocreate]'); } } diff --git a/tests/src/Functional/Feeds/Target/FileTest.php b/tests/src/Functional/Feeds/Target/FileTest.php index d097d73e..a2dbe349 100644 --- a/tests/src/Functional/Feeds/Target/FileTest.php +++ b/tests/src/Functional/Feeds/Target/FileTest.php @@ -65,6 +65,10 @@ class FileTest extends FeedsBrowserTestBase { ], ]); + // Assert that autocreate field does not exist for file target. + $this->drupalGet('/admin/structure/feeds/manage/' . $feed_type->id() . '/mapping'); + $this->assertSession()->fieldNotExists('mappings[2][settings][autocreate]'); + // Create a feed and import. $feed = $this->createFeed($feed_type->id(), [ 'source' => $this->getBaseUrl() . '/testing/feeds/files.csv', -- GitLab From fa17da3a7ac31ef7f1ec5be449dfd02d119c269e Mon Sep 17 00:00:00 2001 From: MegaChriz <megachriz@hotmail.com> Date: Tue, 25 Feb 2025 12:33:28 +0100 Subject: [PATCH 3/3] Corrections and added test for the file target. --- src/Feeds/Target/EntityReference.php | 48 +++++++++---------- .../Feeds/Target/EntityReferenceTest.php | 2 +- .../src/Functional/Feeds/Target/FileTest.php | 36 ++++++++++++-- 3 files changed, 56 insertions(+), 30 deletions(-) diff --git a/src/Feeds/Target/EntityReference.php b/src/Feeds/Target/EntityReference.php index 6fe733b0..4705a34c 100644 --- a/src/Feeds/Target/EntityReference.php +++ b/src/Feeds/Target/EntityReference.php @@ -363,7 +363,7 @@ class EntityReference extends FieldTargetBase implements ConfigurableTargetInter } /** - * Determines if given target has auto create support. + * Determines if this target has autocreate support. * * @return bool * TRUE if supported, FALSE otherwise. @@ -377,8 +377,8 @@ class EntityReference extends FieldTargetBase implements ConfigurableTargetInter */ public function defaultConfiguration() { $config = parent::defaultConfiguration() + [ - 'reference_by' => $this->getLabelKey(), - ]; + 'reference_by' => $this->getLabelKey(), + ]; if (array_key_exists('feeds_item', $this->getPotentialFields())) { $config['feeds_item'] = FALSE; } @@ -450,30 +450,30 @@ class EntityReference extends FieldTargetBase implements ConfigurableTargetInter ], ], ]; - } - - $bundles = $this->getBundles(); - if (count($bundles) > 0) { - - // Check that recent field configuration changes haven't invalidated any - // previous selection. - if (!in_array($this->configuration['autocreate_bundle'], $bundles)) { - $this->configuration['autocreate_bundle'] = reset($bundles); - } - $form['autocreate_bundle'] = [ - '#type' => 'select', - '#title' => $this->t('Bundle to autocreate'), - '#options' => $bundles, - '#default_value' => $this->configuration['autocreate_bundle'], - '#states' => [ - 'visible' => [ - ':input[name="mappings[' . $delta . '][settings][autocreate]"]' => [ - ['checked' => TRUE, 'visible' => TRUE], + $bundles = $this->getBundles(); + if (count($bundles) > 0) { + + // Check that recent field configuration changes haven't invalidated any + // previous selection. + if (!in_array($this->configuration['autocreate_bundle'], $bundles)) { + $this->configuration['autocreate_bundle'] = reset($bundles); + } + + $form['autocreate_bundle'] = [ + '#type' => 'select', + '#title' => $this->t('Bundle to autocreate'), + '#options' => $bundles, + '#default_value' => $this->configuration['autocreate_bundle'], + '#states' => [ + 'visible' => [ + ':input[name="mappings[' . $delta . '][settings][autocreate]"]' => [ + ['checked' => TRUE, 'visible' => TRUE], + ], ], ], - ], - ]; + ]; + } } return $form; diff --git a/tests/src/Functional/Feeds/Target/EntityReferenceTest.php b/tests/src/Functional/Feeds/Target/EntityReferenceTest.php index c7afc2b7..fb5aef92 100644 --- a/tests/src/Functional/Feeds/Target/EntityReferenceTest.php +++ b/tests/src/Functional/Feeds/Target/EntityReferenceTest.php @@ -80,7 +80,7 @@ class EntityReferenceTest extends FeedsBrowserTestBase { $this->assertSession()->optionExists('mappings[2][settings][autocreate_bundle]', 'foo'); $this->assertSession()->optionExists('mappings[2][settings][autocreate_bundle]', 'qux'); $this->assertSession()->optionNotExists('mappings[2][settings][autocreate_bundle]', 'bar'); - // Assert that autocreate field exists. + // Assert that the autocreate field exists. $this->assertSession()->fieldExists('mappings[2][settings][autocreate]'); } diff --git a/tests/src/Functional/Feeds/Target/FileTest.php b/tests/src/Functional/Feeds/Target/FileTest.php index a2dbe349..ddb1ac7e 100644 --- a/tests/src/Functional/Feeds/Target/FileTest.php +++ b/tests/src/Functional/Feeds/Target/FileTest.php @@ -39,7 +39,7 @@ class FileTest extends FeedsBrowserTestBase { /** * Tests importing several files. */ - public function test() { + public function testImport() { // Create a feed type for importing nodes with files. $feed_type = $this->createFeedTypeForCsv([ 'title' => 'title', @@ -65,10 +65,6 @@ class FileTest extends FeedsBrowserTestBase { ], ]); - // Assert that autocreate field does not exist for file target. - $this->drupalGet('/admin/structure/feeds/manage/' . $feed_type->id() . '/mapping'); - $this->assertSession()->fieldNotExists('mappings[2][settings][autocreate]'); - // Create a feed and import. $feed = $this->createFeed($feed_type->id(), [ 'source' => $this->getBaseUrl() . '/testing/feeds/files.csv', @@ -82,6 +78,36 @@ class FileTest extends FeedsBrowserTestBase { } } + /** + * Tests that configuring a file target on the mapping page works. + */ + public function testConfigureTarget() { + // Create a feed type. + $feed_type = $this->createFeedTypeForCsv([ + 'guid' => 'guid', + 'title' => 'title', + ]); + + // Go to the mapping page, and a target to 'field_file'. + $edit = [ + 'add_target' => 'field_file', + ]; + $this->drupalGet('/admin/structure/feeds/manage/' . $feed_type->id() . '/mapping'); + $this->submitForm($edit, 'Save'); + + // Check editing target configuration. + $edit = []; + $this->submitForm($edit, 'target-settings-2'); + + // Assert that certain fields appear. + $this->assertSession()->fieldExists('mappings[2][settings][reference_by]'); + $this->assertSession()->fieldExists('mappings[2][settings][existing]'); + + // Assert that the autocreate field does not exist, since the file target + // does not support that feature. + $this->assertSession()->fieldNotExists('mappings[2][settings][autocreate]'); + } + /** * Lists test files. */ -- GitLab