diff --git a/src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php b/src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php index 4762b68..cf391cc 100644 --- a/src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php +++ b/src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php @@ -207,7 +207,8 @@ class DynamicEntityReferenceItem extends EntityReferenceItem { $settings_form = []; $settings = $this->getSettings(); - foreach (static::getTargetTypes($settings) as $target_type) { + // Config entities are excluded from the UI. + foreach (static::getTargetTypes($settings, FALSE) as $target_type) { $entity_type = \Drupal::entityTypeManager()->getDefinition($target_type); $settings_form[$target_type] = $this->targetTypeFieldSettingsForm($form, $form_state, $target_type); $settings_form[$target_type]['handler']['#title'] = t('Reference type for @target_type', ['@target_type' => $entity_type->getLabel()]); @@ -514,15 +515,20 @@ class DynamicEntityReferenceItem extends EntityReferenceItem { * @param array $settings * The settings of the field storage. * - * @return string[] - * All the target entity type ids that can be referenced. + * @param bool $include_configuration_entities + * (optional) Include configuration entities. Defaults to TRUE. + * + * @return \string[] All the target entity type ids that can be referenced. + * All the target entity type ids that can be referenced. */ - public static function getTargetTypes($settings) { + public static function getTargetTypes($settings, $include_configuration_entities = TRUE) { $labels = \Drupal::service('entity_type.repository')->getEntityTypeLabels(TRUE); $options = array_keys($labels[(string) t('Content', [], ['context' => 'Entity type group'])]); // Add configuration entities. - $options = array_merge($options, array_keys($labels[(string) t('Configuration', [], ['context' => 'Entity type group'])])); + if ($include_configuration_entities) { + $options = array_merge($options, array_keys($labels[(string) t('Configuration', [], ['context' => 'Entity type group'])])); + } if (!empty($settings['exclude_entity_types'])) { return array_diff($options, $settings['entity_type_ids'] ?: []); diff --git a/tests/src/Functional/DynamicEntityReferenceTest.php b/tests/src/Functional/DynamicEntityReferenceTest.php index 42e7448..c94bd5f 100644 --- a/tests/src/Functional/DynamicEntityReferenceTest.php +++ b/tests/src/Functional/DynamicEntityReferenceTest.php @@ -98,6 +98,13 @@ class DynamicEntityReferenceTest extends BrowserTestBase { $assert_session->fieldExists('default_value_input[field_foobar][0][target_type]'); $assert_session->optionExists('default_value_input[field_foobar][0][target_type]', 'entity_test'); $assert_session->optionNotExists('default_value_input[field_foobar][0][target_type]', 'user'); + + // Ensure no configuration entities are exposed to the UI. + $labels = $this->container->get('entity_type.repository')->getEntityTypeLabels(TRUE); + foreach (array_keys($labels[(string) t('Configuration')]) as $entity_type) { + $assert_session->fieldNotExists('settings[' . $entity_type . '][handler]'); + } + $edit = [ 'settings[entity_test_label][handler_settings][target_bundles][entity_test_label]' => TRUE, 'settings[entity_test_view_builder][handler_settings][target_bundles][entity_test_view_builder]' => TRUE,