diff --git a/patch.patch b/patch.patch deleted file mode 100644 index 756bbda..0000000 --- a/patch.patch +++ /dev/null @@ -1,188 +0,0 @@ -diff --git a/src/EntityEmbedDisplay/FieldFormatterEntityEmbedDisplayBase.php b/src/EntityEmbedDisplay/FieldFormatterEntityEmbedDisplayBase.php -index 79456c2..1ef8333 100644 ---- a/src/EntityEmbedDisplay/FieldFormatterEntityEmbedDisplayBase.php -+++ b/src/EntityEmbedDisplay/FieldFormatterEntityEmbedDisplayBase.php -@@ -1,10 +1,5 @@ - formatterPluginManager->getDefinition($this->getDerivativeId()); -+ $definition = $this->formatterPluginManager->getDefinition($this->getFieldFormatterId()); - return $definition['class']::isApplicable($this->getFieldDefinition()); - } - - /** -+ * Returns the field formatter id. -+ */ -+ public function getFieldFormatterId() { -+ return $this->getDerivativeId(); -+ } -+ -+ /** - * {@inheritdoc} - */ - public function build() { -diff --git a/src/Plugin/Derivative/ViewModeDeriver.php b/src/Plugin/Derivative/ViewModeDeriver.php -new file mode 100644 -index 0000000..f3020b1 ---- /dev/null -+++ b/src/Plugin/Derivative/ViewModeDeriver.php -@@ -0,0 +1,59 @@ -+entityDisplayRepository = $entity_display_repository; -+ } -+ -+ /** -+ * {@inheritdoc} -+ */ -+ public static function create(ContainerInterface $container, $base_plugin_id) { -+ return new static( -+ $container->get('entity_display.repository') -+ ); -+ } -+ -+ /** -+ * {@inheritdoc} -+ */ -+ public function getDerivativeDefinitions($base_plugin_definition) { -+ foreach ($this->entityDisplayRepository->getAllViewModes() as $entity_type => $view_modes) { -+ foreach ($view_modes as $view_mode => $definition) { -+ $this->derivatives[$definition['id']] = $this->derivatives[$definition['id']] ?: $base_plugin_definition; -+ $this->derivatives[$definition['id']]['label'] = new TranslatableMarkup($definition['label']); -+ $this->derivatives[$definition['id']]['view_mode'] = $view_mode; -+ $this->derivatives[$definition['id']]['entity_types'] = $definition['targetEntityType']; -+ } -+ } -+ return $this->derivatives; -+ } -+ -+} -diff --git a/src/Plugin/entity_embed/EntityEmbedDisplay/ViewModeFieldFormatter.php b/src/Plugin/entity_embed/EntityEmbedDisplay/ViewModeFieldFormatter.php -new file mode 100644 -index 0000000..aa86c47 ---- /dev/null -+++ b/src/Plugin/entity_embed/EntityEmbedDisplay/ViewModeFieldFormatter.php -@@ -0,0 +1,82 @@ -+fieldDefinition)) { -+ $this->fieldDefinition = parent::getFieldDefinition(); -+ $this->fieldDefinition->setSetting('target_type', $this->getEntityTypeFromContext()); -+ } -+ return $this->fieldDefinition; -+ } -+ -+ /** -+ * {@inheritdoc} -+ */ -+ public function getFieldFormatter() { -+ if (!isset($this->fieldFormatter)) { -+ $display = [ -+ 'type' => $this->getFieldFormatterId(), -+ 'settings' => [ -+ 'view_mode' => $this->getPluginDefinition()['view_mode'], -+ ], -+ 'label' => 'hidden', -+ ]; -+ -+ // Create the formatter plugin. Will use the default formatter for that -+ // field type if none is passed. -+ $this->fieldFormatter = $this->formatterPluginManager->getInstance( -+ [ -+ 'field_definition' => $this->getFieldDefinition(), -+ 'view_mode' => '_entity_embed', -+ 'configuration' => $display, -+ ] -+ ); -+ } -+ return $this->fieldFormatter; -+ } -+ -+ /** -+ * {@inheritdoc} -+ */ -+ public function buildConfigurationForm(array $form, FormStateInterface $form_state) { -+ // Remove the configuration from entity_reference_entity_view. The view mode -+ // is already set in getFieldFormatter. -+ return []; -+ } -+ -+ /** -+ * {@inheritdoc} -+ */ -+ public function getFieldFormatterId() { -+ return 'entity_reference_entity_view'; -+ } -+ -+ /** -+ * {@inheritdoc} -+ */ -+ public function getFieldValue() { -+ return ['target_id' => $this->getContextValue('entity')->id()]; -+ } -+ -+} diff --git a/src/Plugin/Derivative/ViewModeDeriver.php b/src/Plugin/Derivative/ViewModeDeriver.php index f3020b1..60e83a2 100644 --- a/src/Plugin/Derivative/ViewModeDeriver.php +++ b/src/Plugin/Derivative/ViewModeDeriver.php @@ -47,7 +47,7 @@ class ViewModeDeriver extends DeriverBase implements ContainerDeriverInterface { public function getDerivativeDefinitions($base_plugin_definition) { foreach ($this->entityDisplayRepository->getAllViewModes() as $entity_type => $view_modes) { foreach ($view_modes as $view_mode => $definition) { - $this->derivatives[$definition['id']] = $this->derivatives[$definition['id']] ?: $base_plugin_definition; + $this->derivatives[$definition['id']] = $base_plugin_definition; $this->derivatives[$definition['id']]['label'] = new TranslatableMarkup($definition['label']); $this->derivatives[$definition['id']]['view_mode'] = $view_mode; $this->derivatives[$definition['id']]['entity_types'] = $definition['targetEntityType']; diff --git a/src/Tests/EntityReferenceFieldFormatterTest.php b/src/Tests/EntityReferenceFieldFormatterTest.php index 9676ebd..39242ad 100644 --- a/src/Tests/EntityReferenceFieldFormatterTest.php +++ b/src/Tests/EntityReferenceFieldFormatterTest.php @@ -1,10 +1,5 @@ plugins as $plugin) { + $form = []; + $form_state = new FormState(); + $display = $this->displayPluginManager()->createInstance($plugin, []); + $display->setContextValue('entity', $this->node); + $conf_form = $display->buildConfigurationForm($form, $form_state); + $this->assertIdentical(array_keys($conf_form), []); + } + } + + /** + * Tests filter using view mode Entity Embed Display plugins. + */ + public function testFilterViewModePlugins() { + foreach ($this->plugins as $plugin) { + $content = ''; + $settings = []; + $settings['type'] = 'page'; + $settings['title'] = 'Test ' . $plugin . ' Entity Embed Display plugin'; + $settings['body'] = [['value' => $content, 'format' => 'custom_format']]; + $node = $this->drupalCreateNode($settings); + $this->drupalGet('node/' . $node->id()); + $plugin = explode('.', $plugin); + $view_mode = str_replace('_', '-', end($plugin)); + $this->assertRaw('node--view-mode-' . $view_mode, 'Node rendered in the correct view mode: ' . $view_mode . '.'); + } + } + +}