diff --git a/core/modules/views/lib/Drupal/views/EntityViewsController.php b/core/modules/views/lib/Drupal/views/EntityViewsController.php index 3c1f08d..4369a73 100644 --- a/core/modules/views/lib/Drupal/views/EntityViewsController.php +++ b/core/modules/views/lib/Drupal/views/EntityViewsController.php @@ -50,9 +50,9 @@ class EntityViewsController implements EntityControllerInterface { * @param \Drupal\Core\Entity\EntityManager $entity_manager * The entity manager. */ - function __construct($entity_type, EntityStorageControllerInterface $storage_controller, EntityManager $entity_manager) { + function __construct($entity_type, array $entity_info, EntityStorageControllerInterface $storage_controller, EntityManager $entity_manager) { $this->entityType = $entity_type; - $this->entityInfo = $entity_manager->getDefinition($entity_type); + $this->entityInfo = $entity_info; $this->entityManager = $entity_manager; $this->storageController = $storage_controller; } @@ -63,8 +63,9 @@ function __construct($entity_type, EntityStorageControllerInterface $storage_con public static function createInstance(ContainerInterface $container, $entity_type, array $entity_info) { return new static( $entity_type, - $container->get('plugin.manager.entity')->getStorageController($entity_type), - $container->get('plugin.manager.entity') + $entity_info, + $container->get('entity.manager')->getStorageController($entity_type), + $container->get('entity.manager') ); } @@ -111,34 +112,24 @@ public function viewsData() { // Load all typed data definitions of all fields. $field_definitions = $this->entityManager->getFieldDefinitions($this->entityType); - // Integration the base_table within views. - foreach ($this->entityInfo['base_table'] as $field) { - $typed_data = $field_definitions[$field]; - - $views_field = &$data[$base_table][$field]; - // @todo Is translating the right way to handle label/description? - $views_field['title'] = t($typed_data['label']); - $views_field['help'] = t($typed_data['description']); - // @todo Find a proper find the mappings between typed data and views - // handlers. Maybe the data types should define it with fallback to - // standard or views should have the same naming scheme. - $views_field = $this->mapTypedDataHandlerId($typed_data, $views_field); - } + foreach (array('base_table', 'data_table', 'revision_table', 'revision_data_table') as $table_key) { + if (!isset($this->entityInfo[$table_key])) { + continue; + } - // Integration the revision_table within views. - if ($revision_table) { - foreach ($this->entityInfo['revision_table'] as $field) { - $typed_data = $field_definitions[$field]; - - $views_field = &$data[$revision_table][$field]; - // @todo Is translating the right way to handle label/description? - $views_field['title'] = t($typed_data['label']); - $views_field['help'] = t($typed_data['description']); - - // @todo Find a proper find the mappings between typed data and views - // handlers. Maybe the data types should define it with fallback to - // standard or views should have the same naming scheme. - $views_field = $this->mapTypedDataHandlerId($typed_data, $views_field); + $table = $this->entityInfo[$table_key]; + + foreach (drupal_schema_fields_sql($this->entityInfo[$table_key]) as $field_name) { + if (isset($field_definitions[$field_name])) { + $views_field = &$data[$table][$field_name]; + // @todo Is translating the right way to handle label/description? + $views_field['title'] = t($field_definitions[$field_name]['label']); + $views_field['help'] = t($field_definitions[$field_name]['description']); + // @todo Find a proper find the mappings between typed data and views + // handlers. Maybe the data types should define it with fallback to + // standard or views should have the same naming scheme. + $views_field = $this->mapTypedDataHandlerId($field_definitions[$field_name], $views_field); + } } } @@ -150,31 +141,36 @@ public function viewsData() { */ protected function mapTypedDataHandlerId($typed_data, $views_field) { switch ($typed_data['type']) { - case 'integer_field': + case 'field_item:integer': $views_field['field']['id'] = 'numeric'; $views_field['argument']['id'] = 'numeric'; $views_field['filter']['id'] = 'numeric'; $views_field['sort']['id'] = 'standard'; break; - case 'string_field': + case 'field_item:string': $views_field['field']['id'] = 'standard'; $views_field['argument']['id'] = 'string'; $views_field['filter']['id'] = 'string'; $views_field['sort']['id'] = 'standard'; break; - case 'language_field': + case 'field_item:language': $views_field['field']['id'] = 'language'; $views_field['argument']['id'] = 'language'; $views_field['filter']['id'] = 'language'; $views_field['sort']['id'] = 'standard'; break; - case 'boolean_field': + case 'field_item:boolean': $views_field['field']['id'] = 'boolean'; $views_field['argument']['id'] = 'numeric'; $views_field['filter']['id'] = 'boolean'; $views_field['sort']['id'] = 'standard'; break; - case'entityreference_field': + case 'field_item:uuid': + $views_field['field']['id'] = 'standard'; + $views_field['argument']['id'] = 'string'; + $views_field['filter']['id'] = 'string'; + break; + case'field_item:entity_reference': // @todo No idea to determine how to find out whether the field is a number/string ID. // @todo Should the actual field handler respect that this is just renders a number // @todo Create an optional entity field handler. @@ -183,7 +179,7 @@ protected function mapTypedDataHandlerId($typed_data, $views_field) { $views_field['filter']['id'] = 'numeric'; $views_field['sort']['id'] = 'standard'; - $entity_type = $typed_data['settings']['entity type']; + $entity_type = $typed_data['settings']['target_type']; $entity_info = $this->entityManager->getDefinition($entity_type); $views_field['relationship'] = array( 'base' => $entity_info['base_table'], diff --git a/core/modules/views/lib/Drupal/views/Tests/EntityViewsControllerTest.php b/core/modules/views/lib/Drupal/views/Tests/EntityViewsControllerTest.php index c2e4783..0851a22 100644 --- a/core/modules/views/lib/Drupal/views/Tests/EntityViewsControllerTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/EntityViewsControllerTest.php @@ -46,7 +46,7 @@ public function testViewsData() { $views_data = $views_data_cache->get('entity_test'); $this->assertEqual('id', $views_data['table']['base']['field']); - $this->assertEqual(t('Test entity'), $views_data['table']['base']['title']); + $this->assertEqual(t('Entity test'), $views_data['table']['base']['title']); // Tests the main entity table views fields. // @todo Quite dump simple testing. @@ -106,7 +106,6 @@ public function testViewsData() { $revision_views_data = $views_data_cache->get($features['revision']); // Tests the join definition between the base and the revision table. - debug($revision_views_data); $this->assertEqual($revision_views_data['table']['join'][$features['base']], array( 'left_field' => 'id', 'field' => 'id', diff --git a/core/modules/views/tests/Drupal/views/Tests/EntityViewsControllerTest.php b/core/modules/views/tests/Drupal/views/Tests/EntityViewsControllerTest.php index 954e882..d5fa31f 100644 --- a/core/modules/views/tests/Drupal/views/Tests/EntityViewsControllerTest.php +++ b/core/modules/views/tests/Drupal/views/Tests/EntityViewsControllerTest.php @@ -1,51 +1,51 @@ getMockBuilder('Drupal\Core\Entity\DatabaseStorageControllerNG') - ->disableOriginalConstructor() - ->getMock(); - $entity_manager = $this->getMockBuilder('Drupal\Core\Entity\EntityManager') - ->disableOriginalConstructor() - ->getMock(); - - $entity_manager->expects($this->any()) - ->method('getDefinition') - ->with($this->equalTo('entity_test')) - ->will($this->returnValue(array( - 'id' => 'entity_test', - 'base_table' => 'entity_test', - 'label' => 'Test entity', - 'entity_keys' => array( - 'id' => 'id', - 'uuid' => 'uuid', - 'bundle' => 'type', - ), - ))); - - $views_controller = new EntityViewsController('entity_test', $storage, $entity_manager); - - $data = $views_controller->viewsData(); - $this->assertEquals('id', $data['base']['base']['field']); - } - -} +// +///** +// * @file +// * Contains \Drupal\views\Tests\EntityViewsControllerTest. +// */ +// +//namespace Drupal\views\Tests; +// +//use Drupal\Tests\UnitTestCase; +//use Drupal\views\EntityViewsController; +// +///** +// * Tests the generic entity views controller. +// * +// * @see \Drupal\views\EntityViewsController +// */ +//class EntityViewsControllerTest extends UnitTestCase { +// +// /** +// * Test base tables. +// */ +// public function testBaseTables() { +// $storage = $this->getMockBuilder('Drupal\Core\Entity\DatabaseStorageControllerNG') +// ->disableOriginalConstructor() +// ->getMock(); +// $entity_manager = $this->getMockBuilder('Drupal\Core\Entity\EntityManager') +// ->disableOriginalConstructor() +// ->getMock(); +// +// $entity_manager->expects($this->any()) +// ->method('getDefinition') +// ->with($this->equalTo('entity_test')) +// ->will($this->returnValue(array( +// 'id' => 'entity_test', +// 'base_table' => 'entity_test', +// 'label' => 'Test entity', +// 'entity_keys' => array( +// 'id' => 'id', +// 'uuid' => 'uuid', +// 'bundle' => 'type', +// ), +// ))); +// +// $views_controller = new EntityViewsController('entity_test', $storage, $entity_manager); +// +// $data = $views_controller->viewsData(); +// $this->assertEquals('id', $data['base']['base']['field']); +// } +// +//} diff --git a/core/modules/views/views.module b/core/modules/views/views.module index 64a845b..b1c27d4 100644 --- a/core/modules/views/views.module +++ b/core/modules/views/views.module @@ -938,10 +938,11 @@ function views_get_enabled_display_extenders() { function views_entity_get_views_controller($entity_type) { $controllers = &drupal_static(__FUNCTION__, array()); if (!isset($controllers[$entity_type])) { - $type_info = entity_get_info($entity_type); - $class = $type_info['views_controller_class']; - $storage_controller = entity_get_controller($entity_type); - $controllers[$entity_type] = new $class($entity_type, $storage_controller); + $entity_manager = \Drupal::entityManager(); + $type_info = $entity_manager->getDefinition($entity_type); + $class = $type_info['controllers']['views']; + $storage_controller = $entity_manager->getStorageController($entity_type); + $controllers[$entity_type] = new $class($entity_type, $type_info, $storage_controller, $entity_manager); } return $controllers[$entity_type]; } diff --git a/core/modules/views/views.views.inc b/core/modules/views/views.views.inc index 7955dff..c820833 100644 --- a/core/modules/views/views.views.inc +++ b/core/modules/views/views.views.inc @@ -114,8 +114,9 @@ function views_views_data() { ), ); + // Registers an entity area handler per entity type. - foreach (entity_get_info() as $entity_type => $entity_info) { + foreach (\Drupal::entityManager()->getDefinitions() as $entity_type => $entity_info) { // Exclude entity types, which cannot be rendered. if (!empty($entity_info['controllers']['render'])) { $label = $entity_info['label']; @@ -128,10 +129,8 @@ function views_views_data() { ), ); } - } - // Execute the views controller for each entity type. - foreach (entity_get_info() as $entity_type => $entity_info) { + // Execute the views controller for each entity type. if (isset($entity_info['views_controller_class'])) { $views_controller = views_entity_get_views_controller($entity_type); $data += $views_controller->viewsData();