diff -u b/core/modules/filter/src/Plugin/Filter/FilterEntityEmbed.php b/core/modules/filter/src/Plugin/Filter/FilterEntityEmbed.php --- b/core/modules/filter/src/Plugin/Filter/FilterEntityEmbed.php +++ b/core/modules/filter/src/Plugin/Filter/FilterEntityEmbed.php @@ -107,7 +107,7 @@ static $depth = 0; $depth++; - if ($depth > 20) { + if ($depth > 2) { throw new RecursiveRenderingException( sprintf('Recursive rendering detected when rendering embedded %s entity %s.', $entity_type, $entity->id()) ); @@ -126,7 +126,9 @@ } catch (\Exception $e) { $this->logger->error($e->getMessage()); - $output = $this->t('An error occured while loading the entity.'); + $output = $this->t('An error occured while loading the entity: @message', [ + '@message' => $e->getMessage(), + ]); } $this->replaceNodeContent($node, $output); only in patch2: unchanged: --- /dev/null +++ b/core/modules/filter/tests/src/Kernel/FilterEmbedTest.php @@ -0,0 +1,137 @@ +container->get('plugin.manager.filter'); + $bag = new FilterPluginCollection($manager, []); + $this->filters = $bag->getAll(); + + $this->installSchema('system', 'sequences'); + $this->installSchema('node', 'node_access'); + $this->installEntitySchema('user'); + $this->installEntitySchema('node'); + $this->installEntitySchema('date_format'); + $this->installConfig('system'); + $this->installConfig('field'); + $this->installConfig('filter'); + $this->installConfig('node'); + $this->installConfig('text'); + $this->installConfig('datetime'); + DateFormat::load('medium') + ->setPattern('Y-m-d H:i:s O') + ->save(); + + $type = NodeType::create([ + 'type' => 'article', + 'name' => 'Article', + ]); + $type->save(); + node_add_body_field($type); + + // Add another text format specifying all possible properties. + $format = FilterFormat::create([ + 'format' => 'custom_format', + 'name' => 'Custom format', + ]); + $format->setFilterConfig('entity_embed', [ + 'status' => 1, + ]); + $format->save(); + } + + /** + * Tests the media embed filter. + */ + public function testEmbedFilter() { + // Get media embed filter. + $filter = $this->filters['entity_embed']; + $account = User::create([ + 'name' => $this->randomString(), + ]); + $account->save(); + $container = \Drupal::getContainer(); + $container->get('current_user')->setAccount($account); + $node = Node::create([ + 'type' => 'article', + 'title' => 'Foo title', + 'uid' => $account->id(), + 'status' => 1, + ]); + $node->save(); + $node_uuid = $node->uuid(); + + // Render entity. + /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $view_builder */ + $view_builder = \Drupal::entityTypeManager(); + $build = $view_builder->getViewBuilder($node->getEntityTypeId())->view($node, 'teaser'); + /** @var \Drupal\Core\Render\RendererInterface $renderer */ + $renderer = \Drupal::service('renderer'); + $rendered_node = $renderer->renderPlain($build)->__toString(); + + // Test filter using data-entity-embed-display attribute. + $input = ''; + $expected = $rendered_node; + $actual = $filter->process($input, 'und')->getProcessedText(); + $this->assertSame($expected, $actual); + + // Try using the filter with a formatter. + $node2 = Node::create([ + 'type' => 'article', + 'title' => 'Foo title 2', + 'uid' => $account->id(), + 'status' => 1, + ]); + $node2->save(); + $node2->body->value = $input; + $node2->body->format = 'custom_format'; + $node2->save(); + $build = $view_builder->getViewBuilder($node2->getEntityTypeId())->view($node2); + $rendered_node2 = $renderer->renderPlain($build)->__toString(); + $this->assertContains($rendered_node, $rendered_node2); + + // Recursion. + $node2->body->value = ''; + $node2->body->format = 'custom_format'; + $node2->save(); + $build = $view_builder->getViewBuilder($node2->getEntityTypeId())->view($node2); + $rendered_node2 = $renderer->renderPlain($build)->__toString(); + $this->assertContains('Recursive rendering detected', $rendered_node2); + + } + +}