diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceInlineSettingsFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceInlineSettingsFormatter.php index af08d03..6fbf111 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceInlineSettingsFormatter.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceInlineSettingsFormatter.php @@ -193,7 +193,9 @@ protected function getAvailableFormatterOptions(FieldStorageDefinitionInterface $options = []; foreach ($formatters as $formatter_id => $formatter_options) { $formatter_definition = $this->formatterPluginManager->getDefinition($formatter_id); - if (method_exists($formatter_definition['class'], 'isApplicable') && $formatter_definition['class']::isApplicable($field_definition)) { + /** @var \Drupal\Core\Field\FormatterInterface $formatter_class */ + $formatter_class = $formatter_definition['class']; + if ($formatter_class::isApplicable($field_definition)) { $options[$formatter_id] = $formatter_definition['label']; } } diff --git a/core/modules/field/src/Tests/EntityReference/EntityReferenceTestTrait.php b/core/modules/field/src/Tests/EntityReference/EntityReferenceTestTrait.php index 568cd4d..80d38bc 100644 --- a/core/modules/field/src/Tests/EntityReference/EntityReferenceTestTrait.php +++ b/core/modules/field/src/Tests/EntityReference/EntityReferenceTestTrait.php @@ -11,15 +11,15 @@ trait EntityReferenceTestTrait { /** - * Creates a field of an entity reference field storage on the specified bundle. + * Creates a field of an entity reference field storage on a given bundle. * * @param string $entity_type * The type of entity the field will be attached to. * @param string $bundle * The bundle name of the entity the field will be attached to. * @param string $field_name - * The name of the field; if it already exists, a new instance of the existing - * field will be created. + * The name of the field; if it already exists, a new instance of the + * existing field will be created. * @param string $field_label * The label of the field. * @param string $target_entity_type diff --git a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceFormatterTest.php b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceFormatterTest.php index 1938781..7167efb 100644 --- a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceFormatterTest.php +++ b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceFormatterTest.php @@ -443,7 +443,6 @@ public function testRenderInlineSettingsFormatter($label_option, $expected_outpu 'type' => 'string', 'settings' => [], 'label' => $label_option, - 'show_basefields' => FALSE, ], ])->save(); diff --git a/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceInlineSettingsFormatterTest.php b/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceInlineSettingsFormatterTest.php new file mode 100644 index 0000000..9571a78 --- /dev/null +++ b/core/tests/Drupal/FunctionalJavascriptTests/EntityReference/EntityReferenceInlineSettingsFormatterTest.php @@ -0,0 +1,89 @@ +createContentType(['type' => 'page']); + + $field_name = 'field_test'; + $this->createEntityReferenceField('node', 'page', $field_name, 'Field Test', 'node', 'default', ['target_bundles' => ['page']]); + EntityViewDisplay::load('node.page.default') + ->setComponent($field_name, [ + 'type' => 'entity_reference_label', + ])->save(); + + $user = $this->drupalCreateUser([ + 'access content', + 'create page content', + 'administer node display', + ]); + $this->drupalLogin($user); + } + + /** + * Tests the Inline Settings Formatter configuration. + */ + public function testEntityReferenceInlineSettingsFormatter() { + $page = $this->getSession()->getPage(); + $assert_session = $this->assertSession(); + + // Visit the display config page. + $this->drupalGet('/admin/structure/types/manage/page/display'); + $page->selectFieldOption('fields[field_test][type]', 'entity_reference_inline_settings'); + $result = $assert_session->waitForElementVisible('css', '.field-plugin-summary-cell .ajax-new-content'); + $this->assertNotEmpty($result); + $assert_session->pageTextContains('The field "Title" will be used by default.'); + $assert_session->pageTextContains('The "Plain text" formatter will be used by default.'); + + // Open the formatter settings form by clicking the cog wheel. + $page->find('css', 'input[data-drupal-selector="edit-fields-field-test-settings-edit"]')->click(); + $assert_session->assertWaitOnAjaxRequest(); + + $assert_session->selectExists('fields[field_test][settings_edit_form][settings][field_name]'); + $assert_session->selectExists('fields[field_test][settings_edit_form][settings][label]'); + $assert_session->selectExists('fields[field_test][settings_edit_form][settings][type]'); + $assert_session->optionNotExists('fields[field_test][settings_edit_form][settings][type]', 'entity_reference_entity_id'); + $assert_session->checkboxNotChecked('fields[field_test][settings_edit_form][settings][settings][link_to_entity]'); + $page->selectFieldOption('fields[field_test][settings_edit_form][settings][field_name]', 'field_test'); + $assert_session->assertWaitOnAjaxRequest(); + + $assert_session->selectExists('fields[field_test][settings_edit_form][settings][type]'); + $assert_session->optionExists('fields[field_test][settings_edit_form][settings][type]', 'entity_reference_entity_id'); + $page->selectFieldOption('fields[field_test][settings_edit_form][settings][type]', 'entity_reference_entity_id'); + $assert_session->assertWaitOnAjaxRequest(); + + $page->pressButton('Update'); + $assert_session->assertWaitOnAjaxRequest(); + + $assert_session->pageTextContains('Field "Field Test" displayed.'); + $assert_session->pageTextContains('Formatter "Entity ID" used.'); + + } + +}