Commit 500d30fe authored by git's avatar git Committed by miro_dietiker

Issue #2742115 by dawehner, yongt9412, Berdir:...

Issue #2742115 by dawehner, yongt9412, Berdir: \Drupal\entity_reference_revisions\Plugin\Field\FieldFormatter\EntityReferenceRevisionsFormatterBase::prepareView doesn't protect against unloadable entities
parent 713c9a25
......@@ -14,12 +14,15 @@ abstract class EntityReferenceRevisionsFormatterBase extends EntityReferenceForm
*/
public function prepareView(array $entities_items) {
// Entity revision loading currently has no static/persistent cache and no
// multiload. Simulate that the entities have been loaded by setting the
// special _loaded property to TRUE but do not actually load them, they
// will be loaded automatically if that didn't happen yet.
// multiload. As entity reference checks _loaded, while we don't want to
// indicate a loaded entity, when there is none, as it could cause errors,
// we actually load the entity and set the flag.
foreach ($entities_items as $items) {
foreach ($items as $item) {
$item->_loaded = TRUE;
if ($item->entity) {
$item->_loaded = TRUE;
}
}
}
}
......
administer entity_test composite relationship:
title: administer entity_test composite relationship
......@@ -19,6 +19,7 @@ use Drupal\entity_test\Entity\EntityTestRev;
* entity_revision_parent_type_field = "parent_type",
* entity_revision_parent_id_field = "parent_id",
* entity_revision_parent_field_name_field = "parent_field_name",
* admin_permission = "administer entity_test composite relationship",
* entity_keys = {
* "id" = "id",
* "uuid" = "uuid",
......
<?php
namespace Drupal\Tests\entity_reference_revisions\Kernel;
use Drupal\entity_composite_relationship_test\Entity\EntityTestCompositeRelationship;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\KernelTests\KernelTestBase;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
use Drupal\simpletest\UserCreationTrait;
/**
* @coversDefaultClass \Drupal\entity_reference_revisions\Plugin\Field\FieldFormatter\EntityReferenceRevisionsEntityFormatter
* @group entity_reference_revisions
*/
class EntityReferenceRevisionsFormatterTest extends KernelTestBase {
use UserCreationTrait;
/**
* Modules to enable.
*
* @var array
*/
public static $modules = [
'node',
'user',
'system',
'field',
'entity_reference_revisions',
'entity_composite_relationship_test',
];
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
// Create article content type.
$values = ['type' => 'article', 'name' => 'Article'];
$node_type = NodeType::create($values);
$node_type->save();
$this->installEntitySchema('user');
$this->installEntitySchema('node');
$this->installEntitySchema('entity_test_composite');
$this->installSchema('system', ['sequences']);
$this->installSchema('node', ['node_access']);
// Add the entity_reference_revisions field to article.
$field_storage = FieldStorageConfig::create([
'field_name' => 'composite_reference',
'entity_type' => 'node',
'type' => 'entity_reference_revisions',
'settings' => [
'target_type' => 'entity_test_composite'
],
]);
$field_storage->save();
$field = FieldConfig::create([
'field_storage' => $field_storage,
'bundle' => 'article',
]);
$field->save();
$user = $this->createUser(['administer entity_test composite relationship']);
\Drupal::currentUser()->setAccount($user);
}
public function testFormatterWithDeletedReference() {
// Create the test composite entity.
$text = 'Dummy text';
$entity_test = EntityTestCompositeRelationship::create([
'uuid' => $text,
'name' => $text,
]);
$entity_test->save();
$text = 'Clever text';
// Set the name to a new text.
/** @var \Drupal\entity_composite_relationship_test\Entity\EntityTestCompositeRelationship $entity_test */
$entity_test->name = $text;
$entity_test->setNeedsSave(TRUE);
$node = Node::create([
'title' => $this->randomMachineName(),
'type' => 'article',
'composite_reference' => $entity_test,
]);
$node->save();
// entity_reference_revisions_entity_view
$result = $node->composite_reference->view(['type' => 'entity_reference_revisions_entity_view']);
$this->setRawContent($this->render($result));
$this->assertText('Clever text');
// Remove the referenced entity.
$entity_test->delete();
$node = Node::load($node->id());
$result = $node->composite_reference->view(['type' => 'entity_reference_revisions_entity_view']);
$this->render($result);
$this->assertNoText('Clever text');
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment