diff --git a/src/AiReferenceGenerator.php b/src/AiReferenceGenerator.php index 0983393609162bd8eb02bdced62c31243e62cff7..647d229106f2c648ade176befe085ad0e344fd7f 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 de42512a907573207c8111623db04438dc5e0540..4079b497456fdbba0df1217d5fc397c39947f538 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); + } + }