From 35b20c5055845dfa204e3a7e592f5271998022a7 Mon Sep 17 00:00:00 2001 From: Scott Euser <scotteuser@gmail.com> Date: Sat, 15 Feb 2025 07:03:49 +0000 Subject: [PATCH] Flatten returned options --- src/AiReferenceGenerator.php | 13 +++++ .../src/Functional/AiAutoReferenceUiTest.php | 56 +++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/src/AiReferenceGenerator.php b/src/AiReferenceGenerator.php index 0983393..647d229 100644 --- a/src/AiReferenceGenerator.php +++ b/src/AiReferenceGenerator.php @@ -262,6 +262,19 @@ class AiReferenceGenerator { unset($options[$existing_value['target_id']]); } } + + // Get settable options can return options group by bundle type if there + // are multiple target bundles. + if ($options) { + $first_option = reset($options); + if (is_array($first_option)) { + $merged_options = []; + foreach ($options as $option_group) { + $merged_options += $option_group; + } + return $merged_options; + } + } return $options; } return []; diff --git a/tests/src/Functional/AiAutoReferenceUiTest.php b/tests/src/Functional/AiAutoReferenceUiTest.php index de42512..4079b49 100644 --- a/tests/src/Functional/AiAutoReferenceUiTest.php +++ b/tests/src/Functional/AiAutoReferenceUiTest.php @@ -279,4 +279,60 @@ class AiAutoReferenceUiTest extends BrowserTestBase { ); } + /** + * Tests that the allowed values provides expected results. + */ + public function testAiGeneratorAllowedValues(): void { + $this->drupalCreateContentType([ + 'type' => 'recipe', + 'name' => 'Recipe', + ]); + $this->createEntityReferenceField( + 'node', + 'article', + 'field_related_multiple', + 'Related multiple types', + 'node', + ['article', 'recipe'], + ); + $this->nodes[] = $this->drupalCreateNode([ + 'type' => 'recipe', + 'title' => 'Chocolate Cake Recipe', + 'field_body' => [ + 'value' => '10 cups of sugar', + 'format' => 'plain_text', + ], + ]); + $article = $this->drupalCreateNode([ + 'type' => 'article', + 'title' => 'All about chocolate cakes', + 'field_body' => [ + 'value' => 'Here we reference multiple types', + 'format' => 'plain_text', + ], + ]); + + /** @var \Drupal\ai_auto_reference\AiReferenceGenerator */ + $generator = \Drupal::service('ai_auto_reference.ai_references_generator'); + + // Field with a single target bundle. + $allowed_values = $generator->getFieldAllowedValues($article, 'field_related_food'); + $this->assertSame([ + 1 => 'Chocolate Cake', + 3 => 'Vanilla Ice Cream', + 4 => 'Tomato Soup', + 6 => 'All about chocolate cakes', + ], $allowed_values); + + // Field with multiple target bundles. + $allowed_values = $generator->getFieldAllowedValues($article, 'field_related_multiple'); + $this->assertSame([ + 1 => 'Chocolate Cake', + 3 => 'Vanilla Ice Cream', + 4 => 'Tomato Soup', + 6 => 'All about chocolate cakes', + 5 => 'Chocolate Cake Recipe', + ], $allowed_values); + } + } -- GitLab