diff --git a/core/modules/file/file.views.inc b/core/modules/file/file.views.inc index a2edb20508df..a8fc0fe755cb 100644 --- a/core/modules/file/file.views.inc +++ b/core/modules/file/file.views.inc @@ -23,7 +23,7 @@ function file_field_views_data(FieldStorageConfigInterface $field_storage) { 'id' => 'standard', 'base' => 'file_managed', 'entity type' => 'file', - 'base field' => 'target_id', + 'base field' => 'fid', 'label' => t('file from !field_name', array('!field_name' => $field_storage->getName())), ); } diff --git a/core/modules/file/src/Tests/Views/RelationshipUserFileDataTest.php b/core/modules/file/src/Tests/Views/RelationshipUserFileDataTest.php new file mode 100644 index 000000000000..beab748d2a83 --- /dev/null +++ b/core/modules/file/src/Tests/Views/RelationshipUserFileDataTest.php @@ -0,0 +1,98 @@ + 'user', + 'field_name' => 'user_file', + 'type' => 'file', + 'translatable' => '0', + ))->save(); + entity_create('field_config', array( + 'label' => 'User File', + 'description' => '', + 'field_name' => 'user_file', + 'entity_type' => 'user', + 'bundle' => 'user', + 'required' => 0, + ))->save(); + + ViewTestData::createTestViews(get_class($this), array('file_test_views')); + } + + /** + * Tests using the views file relationship. + */ + public function testViewsHandlerRelationshipUserFileData() { + $file = entity_create('file', array( + 'fid' => 2, + 'uid' => 2, + 'filename' => 'image-test.jpg', + 'uri' => "public://image-test.jpg", + 'filemime' => 'image/jpeg', + 'created' => 1, + 'changed' => 1, + 'status' => FILE_STATUS_PERMANENT, + )); + $file->enforceIsNew(); + file_put_contents($file->getFileUri(), file_get_contents('core/modules/simpletest/files/image-1.png')); + $file->save(); + + $account = $this->drupalCreateUser(); + $account->user_file->target_id = 2; + $account->save(); + + $view = Views::getView('test_file_user_file_data'); + // Tests \Drupal\taxonomy\Plugin\views\relationship\NodeTermData::calculateDependencies(). + $expected = [ + 'module' => [ + 'file', + 'user', + ], + ]; + $this->assertIdentical($expected, $view->calculateDependencies()); + $this->executeView($view); + $expected_result = array( + array( + 'file_managed_user__user_file_fid' => '2', + ), + ); + $column_map = array('file_managed_user__user_file_fid' => 'file_managed_user__user_file_fid'); + $this->assertIdenticalResultset($view, $expected_result, $column_map); + } + +} diff --git a/core/modules/file/tests/modules/file_test_views/test_views/views.view.test_file_user_file_data.yml b/core/modules/file/tests/modules/file_test_views/test_views/views.view.test_file_user_file_data.yml new file mode 100644 index 000000000000..9387275dd2c7 --- /dev/null +++ b/core/modules/file/tests/modules/file_test_views/test_views/views.view.test_file_user_file_data.yml @@ -0,0 +1,77 @@ +langcode: und +status: true +dependencies: + module: + - file + - user +id: test_file_user_file_data +label: test_file_user_file_data +module: views +description: '' +tag: '' +base_table: users +base_field: uid +core: 8.x +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + options: + perm: 'access user profiles' + cache: + type: none + style: + type: table + options: + grouping: { } + row_class: '' + default_row_class: true + override: true + sticky: false + caption: '' + summary: '' + description: '' + columns: + name: name + fid: fid + info: + name: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + fid: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + default: '-1' + empty_table: false + row: + type: fields + options: + inline: { } + separator: '' + hide_empty: false + default_field_elements: true + relationships: + user_file_target_id: + id: user_file_target_id + table: user__user_file + field: user_file_target_id + relationship: none + group_type: group + admin_label: 'file from user_file' + required: true + plugin_id: standard + arguments: { } + display_extenders: { } diff --git a/core/modules/image/image.views.inc b/core/modules/image/image.views.inc index 36e5dfcc357e..1131e8775805 100644 --- a/core/modules/image/image.views.inc +++ b/core/modules/image/image.views.inc @@ -22,7 +22,7 @@ function image_field_views_data(FieldStorageConfigInterface $field_storage) { $data[$table_name][$field_storage->getName() . '_target_id']['relationship'] = array( 'id' => 'standard', 'base' => 'file_managed', - 'base field' => 'target_id', + 'base field' => 'fid', 'label' => t('image from !field_name', array('!field_name' => $field_storage->getName())), ); } diff --git a/core/modules/image/src/Tests/Views/RelationshipUserImageDataTest.php b/core/modules/image/src/Tests/Views/RelationshipUserImageDataTest.php new file mode 100644 index 000000000000..a36f287bfe0d --- /dev/null +++ b/core/modules/image/src/Tests/Views/RelationshipUserImageDataTest.php @@ -0,0 +1,98 @@ + 'user', + 'field_name' => 'user_picture', + 'type' => 'image', + 'translatable' => '0', + ))->save(); + entity_create('field_config', array( + 'label' => 'User Picture', + 'description' => '', + 'field_name' => 'user_picture', + 'entity_type' => 'user', + 'bundle' => 'user', + 'required' => 0, + ))->save(); + + ViewTestData::createTestViews(get_class($this), array('image_test_views')); + } + + /** + * Tests using the views image relationship. + */ + public function testViewsHandlerRelationshipUserImageData() { + $file = entity_create('file', array( + 'fid' => 2, + 'uid' => 2, + 'filename' => 'image-test.jpg', + 'uri' => "public://image-test.jpg", + 'filemime' => 'image/jpeg', + 'created' => 1, + 'changed' => 1, + 'status' => FILE_STATUS_PERMANENT, + )); + $file->enforceIsNew(); + file_put_contents($file->getFileUri(), file_get_contents('core/modules/simpletest/files/image-1.png')); + $file->save(); + + $account = $this->drupalCreateUser(); + $account->user_picture->target_id = 2; + $account->save(); + + $view = Views::getView('test_image_user_image_data'); + // Tests \Drupal\taxonomy\Plugin\views\relationship\NodeTermData::calculateDependencies(). + $expected = [ + 'module' => [ + 'file', + 'user', + ], + ]; + $this->assertIdentical($expected, $view->calculateDependencies()); + $this->executeView($view); + $expected_result = array( + array( + 'file_managed_user__user_picture_fid' => '2', + ), + ); + $column_map = array('file_managed_user__user_picture_fid' => 'file_managed_user__user_picture_fid'); + $this->assertIdenticalResultset($view, $expected_result, $column_map); + } + +} diff --git a/core/modules/image/tests/modules/image_test_views/image_test_views.info.yml b/core/modules/image/tests/modules/image_test_views/image_test_views.info.yml new file mode 100644 index 000000000000..b5e1000aad41 --- /dev/null +++ b/core/modules/image/tests/modules/image_test_views/image_test_views.info.yml @@ -0,0 +1,9 @@ +name: 'Image test views' +type: module +description: 'Provides default views for views image tests.' +package: Testing +version: VERSION +core: 8.x +dependencies: + - image + - views diff --git a/core/modules/image/tests/modules/image_test_views/test_views/views.view.test_image_user_image_data.yml b/core/modules/image/tests/modules/image_test_views/test_views/views.view.test_image_user_image_data.yml new file mode 100644 index 000000000000..62a82bd7d5d9 --- /dev/null +++ b/core/modules/image/tests/modules/image_test_views/test_views/views.view.test_image_user_image_data.yml @@ -0,0 +1,77 @@ +langcode: und +status: true +dependencies: + module: + - file + - user +id: test_image_user_image_data +label: test_image_user_image_data +module: views +description: '' +tag: '' +base_table: users +base_field: uid +core: 8.x +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + options: + perm: 'access user profiles' + cache: + type: none + style: + type: table + options: + grouping: { } + row_class: '' + default_row_class: true + override: true + sticky: false + caption: '' + summary: '' + description: '' + columns: + name: name + fid: fid + info: + name: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + fid: + sortable: false + default_sort_order: asc + align: '' + separator: '' + empty_column: false + responsive: '' + default: '-1' + empty_table: false + row: + type: fields + options: + inline: { } + separator: '' + hide_empty: false + default_field_elements: true + relationships: + user_picture_target_id: + id: user_picture_target_id + table: user__user_picture + field: user_picture_target_id + relationship: none + group_type: group + admin_label: 'image from user_picture' + required: true + plugin_id: standard + arguments: { } + display_extenders: { }