Issue #2491875 by joachim, xjm, Xano, alexpott: EntityViewsData adds Operations links to all entities, which won't work if the entity type has no list builder, leading to WSOD on some views
parent
6f4690d40d
commit
bad2aea4ee
|
@ -152,13 +152,17 @@ class EntityViewsData implements EntityHandlerInterface, EntityViewsDataInterfac
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$data[$base_table]['operations'] = array(
|
// Entity types must implement a list_builder in order to use Views'
|
||||||
'field' => array(
|
// entity operations field.
|
||||||
'title' => $this->t('Operations links'),
|
if ($this->entityType->hasListBuilderClass()) {
|
||||||
'help' => $this->t('Provides links to perform entity operations.'),
|
$data[$base_table]['operations'] = array(
|
||||||
'id' => 'entity_operations',
|
'field' => array(
|
||||||
),
|
'title' => $this->t('Operations links'),
|
||||||
);
|
'help' => $this->t('Provides links to perform entity operations.'),
|
||||||
|
'id' => 'entity_operations',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Setup relations to the revisions/property data.
|
// Setup relations to the revisions/property data.
|
||||||
if ($data_table) {
|
if ($data_table) {
|
||||||
|
|
|
@ -774,6 +774,26 @@ class EntityViewsDataTest extends UnitTestCase {
|
||||||
$this->assertEquals('entity_link_edit', $data['entity_test']['edit_entity_test']['field']['id']);
|
$this->assertEquals('entity_link_edit', $data['entity_test']['edit_entity_test']['field']['id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers ::getViewsData
|
||||||
|
*/
|
||||||
|
public function testGetViewsDataWithoutEntityOperations() {
|
||||||
|
// Make sure there is no list builder. The API does not document is
|
||||||
|
// supports resetting entity handlers, so this might break in the future.
|
||||||
|
$this->baseEntityType->setListBuilderClass(NULL);
|
||||||
|
$data = $this->viewsData->getViewsData();
|
||||||
|
$this->assertArrayNotHasKey('operations', $data[$this->baseEntityType->getBaseTable()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers ::getViewsData
|
||||||
|
*/
|
||||||
|
public function testGetViewsDataWithEntityOperations() {
|
||||||
|
$this->baseEntityType->setListBuilderClass('\Drupal\Core\Entity\EntityListBuilder');
|
||||||
|
$data = $this->viewsData->getViewsData();
|
||||||
|
$this->assertSame('entity_operations', $data[$this->baseEntityType->getBaseTable()]['operations']['field']['id']);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests views data for a string field.
|
* Tests views data for a string field.
|
||||||
*
|
*
|
||||||
|
|
|
@ -313,3 +313,21 @@ function _views_update_argument_map($displays) {
|
||||||
/**
|
/**
|
||||||
* @} End of "addtogroup updates-8.0.0-beta".
|
* @} End of "addtogroup updates-8.0.0-beta".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @addtogroup updates-8.0.0-rc
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear caches to fix entity operations field.
|
||||||
|
*/
|
||||||
|
function views_update_8003() {
|
||||||
|
// Empty update to cause a cache flush so that views data is rebuilt. Entity
|
||||||
|
// types that don't implement a list builder cannot have the entity operations
|
||||||
|
// field.
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @} End of "addtogroup updates-8.0.0-rc".
|
||||||
|
*/
|
||||||
|
|
Loading…
Reference in New Issue