diff --git a/core/modules/comment/config/schema/comment.views.schema.yml b/core/modules/comment/config/schema/comment.views.schema.yml index 0bd1332..4565e1b 100644 --- a/core/modules/comment/config/schema/comment.views.schema.yml +++ b/core/modules/comment/config/schema/comment.views.schema.yml @@ -99,15 +99,9 @@ views.filter.comment_user_uid: label: 'Node user posted comment' "views.row.entity:comment": - type: mapping + type: views_entity_row label: 'Entity options' mapping: - view_mode: - type: string - label: 'View mode' - relationship: - type: string - label: 'Relationship' links: type: boolean label: 'Display links' diff --git a/core/modules/comment/src/Plugin/views/wizard/Comment.php b/core/modules/comment/src/Plugin/views/wizard/Comment.php index 2d3b2b5..14ebb1d 100644 --- a/core/modules/comment/src/Plugin/views/wizard/Comment.php +++ b/core/modules/comment/src/Plugin/views/wizard/Comment.php @@ -43,6 +43,7 @@ class Comment extends WizardPluginBase { 'alter_text' => TRUE, 'text' => 'comment/[cid]#comment-[cid]' ), + 'plugin_id' => 'comment', ); /** @@ -53,15 +54,15 @@ class Comment extends WizardPluginBase { 'value' => TRUE, 'table' => 'comment_field_data', 'field' => 'status', - 'provider' => 'comment' + 'plugin_id' => 'boolean', ), 'status_node' => array( 'value' => TRUE, 'table' => 'node_field_data', 'field' => 'status', - 'provider' => 'node', + 'plugin_id' => 'boolean', 'relationship' => 'node', - ) + ), ); /** @@ -168,6 +169,7 @@ protected function defaultDisplayOptions() { $display_options['fields']['subject']['hide_empty'] = 0; $display_options['fields']['subject']['empty_zero'] = 0; $display_options['fields']['subject']['link_to_comment'] = 1; + $display_options['fields']['subject']['plugin_id'] = 'comment'; return $display_options; } diff --git a/core/modules/file/src/Plugin/views/wizard/File.php b/core/modules/file/src/Plugin/views/wizard/File.php index 0539ccf..0d54945 100644 --- a/core/modules/file/src/Plugin/views/wizard/File.php +++ b/core/modules/file/src/Plugin/views/wizard/File.php @@ -33,7 +33,8 @@ class File extends WizardPluginBase { 'table' => 'file_managed', 'field' => 'uri', 'exclude' => TRUE, - 'file_download_path' => TRUE + 'file_download_path' => TRUE, + 'plugin_id' => 'file_uri', ); /** @@ -64,6 +65,7 @@ protected function defaultDisplayOptions() { $display_options['fields']['filename']['hide_empty'] = 0; $display_options['fields']['filename']['empty_zero'] = 0; $display_options['fields']['filename']['link_to_file'] = 1; + $display_options['fields']['filename']['plugin_id'] = 'file'; return $display_options; } diff --git a/core/modules/node/config/install/views.view.frontpage.yml b/core/modules/node/config/install/views.view.frontpage.yml index 503a5e0..97637aa 100644 --- a/core/modules/node/config/install/views.view.frontpage.yml +++ b/core/modules/node/config/install/views.view.frontpage.yml @@ -182,7 +182,6 @@ display: row: type: 'entity:node' options: - build_mode: teaser comments: false view_mode: teaser sorts: diff --git a/core/modules/node/config/schema/node.views.schema.yml b/core/modules/node/config/schema/node.views.schema.yml index 0b16f94..f8aed63 100644 --- a/core/modules/node/config/schema/node.views.schema.yml +++ b/core/modules/node/config/schema/node.views.schema.yml @@ -7,9 +7,9 @@ comments: type: boolean label: 'Show comments' - build_mode: - type: string - label: 'Build mode' + links: + type: boolean + label: 'Display links' views.area.node_listing_empty: type: views_area @@ -157,7 +157,7 @@ views.field.node_path: label: 'Use absolute link (begins with "http://")' views.field.node_revision: - type: views_field + type: views.field.node label: 'Node revision' mapping: link_to_node_revision: diff --git a/core/modules/node/src/Plugin/views/wizard/Node.php b/core/modules/node/src/Plugin/views/wizard/Node.php index 2ce97ca..0f5de61 100644 --- a/core/modules/node/src/Plugin/views/wizard/Node.php +++ b/core/modules/node/src/Plugin/views/wizard/Node.php @@ -42,7 +42,8 @@ class Node extends WizardPluginBase { 'alter' => array( 'alter_text' => TRUE, 'text' => 'node/[nid]' - ) + ), + 'plugin_id' => 'node', ); /** @@ -53,7 +54,7 @@ class Node extends WizardPluginBase { 'value' => TRUE, 'table' => 'node_field_data', 'field' => 'status', - 'provider' => 'node' + 'plugin_id' => 'boolean' ) ); @@ -148,6 +149,7 @@ protected function defaultDisplayOptions() { $display_options['fields']['title']['hide_empty'] = 0; $display_options['fields']['title']['empty_zero'] = 0; $display_options['fields']['title']['link_to_node'] = 1; + $display_options['fields']['title']['plugin_id'] = 'node'; return $display_options; } @@ -165,7 +167,8 @@ protected function defaultDisplayFiltersUser(array $form, FormStateInterface $fo 'table' => 'taxonomy_index', 'field' => 'tid', 'value' => $tids, - 'vocabulary' => $form_state->getValue(array('show', 'tagged_with', 'vocabulary')), + 'vid' => $form_state->getValue(array('show', 'tagged_with', 'vocabulary')), + 'plugin_id' => 'taxonomy_index_tid', ); // If the user entered more than one valid term in the autocomplete // field, they probably intended both of them to be applied. @@ -209,21 +212,22 @@ protected function display_options_row(&$display_options, $row_plugin, $row_opt switch ($row_plugin) { case 'full_posts': $display_options['row']['type'] = 'entity:node'; - $display_options['row']['options']['build_mode'] = 'full'; + $display_options['row']['options']['view_mode'] = 'full'; $display_options['row']['options']['links'] = !empty($row_options['links']); break; case 'teasers': $display_options['row']['type'] = 'entity:node'; - $display_options['row']['options']['build_mode'] = 'teaser'; + $display_options['row']['options']['view_mode'] = 'teaser'; $display_options['row']['options']['links'] = !empty($row_options['links']); break; case 'titles_linked': - $display_options['row']['type'] = 'fields'; - $display_options['field']['title']['link_to_node'] = 1; - break; case 'titles': $display_options['row']['type'] = 'fields'; - $display_options['field']['title']['link_to_node'] = 0; + $display_options['fields']['title']['id'] = 'title'; + $display_options['fields']['title']['table'] = 'node_field_data'; + $display_options['fields']['title']['field'] = 'title'; + $display_options['fields']['title']['link_to_node'] = ($row_plugin == 'titles_linked'); + $display_options['fields']['title']['plugin_id'] = 'node'; break; } } diff --git a/core/modules/node/src/Plugin/views/wizard/NodeRevision.php b/core/modules/node/src/Plugin/views/wizard/NodeRevision.php index 3297b1c..82ad93a 100644 --- a/core/modules/node/src/Plugin/views/wizard/NodeRevision.php +++ b/core/modules/node/src/Plugin/views/wizard/NodeRevision.php @@ -40,7 +40,8 @@ class NodeRevision extends WizardPluginBase { 'alter' => array( 'alter_text' => TRUE, 'text' => 'node/[nid]/revisions/[vid]/view' - ) + ), + 'plugin_id' => 'node_revision', ); /** @@ -52,7 +53,8 @@ class NodeRevision extends WizardPluginBase { 'table' => 'node', 'field' => 'nid', 'exclude' => TRUE, - 'link_to_node' => FALSE + 'link_to_node' => FALSE, + 'plugin_id' => 'node', ) ); @@ -64,7 +66,7 @@ class NodeRevision extends WizardPluginBase { 'value' => TRUE, 'table' => 'node_field_revision', 'field' => 'status', - 'provider' => 'node' + 'plugin_id' => 'boolean' ) ); @@ -88,7 +90,7 @@ protected function defaultDisplayOptions() { // Add permission-based access control. $display_options['access']['type'] = 'perm'; - $display_options['access']['perm'] = 'view revisions'; + $display_options['access']['options']['perm'] = 'view revisions'; // Remove the default fields, since we are customizing them here. unset($display_options['fields']); @@ -107,6 +109,7 @@ protected function defaultDisplayOptions() { $display_options['fields']['changed']['alter']['html'] = FALSE; $display_options['fields']['changed']['hide_empty'] = FALSE; $display_options['fields']['changed']['empty_zero'] = FALSE; + $display_options['fields']['changed']['plugin_id'] = 'date'; /* Field: Content revision: Title */ $display_options['fields']['title']['id'] = 'title'; @@ -125,6 +128,7 @@ protected function defaultDisplayOptions() { $display_options['fields']['title']['empty_zero'] = 0; $display_options['fields']['title']['link_to_node'] = 0; $display_options['fields']['title']['link_to_node_revision'] = 1; + $display_options['fields']['title']['plugin_id'] = 'node_revision'; return $display_options; } diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_contextual_links.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_contextual_links.yml index 7870174..c351d26 100644 --- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_contextual_links.yml +++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_contextual_links.yml @@ -54,7 +54,6 @@ display: row: type: 'entity:node' options: - build_mode: teaser comments: false view_mode: teaser style: diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_field_filters.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_field_filters.yml index 2eb5431..856d139 100644 --- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_field_filters.yml +++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_field_filters.yml @@ -54,7 +54,6 @@ display: row: type: 'entity:node' options: - build_mode: teaser links: false view_mode: teaser rendering_language: translation_language_renderer diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_row_plugin.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_row_plugin.yml index d884ab2..11834f9 100644 --- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_row_plugin.yml +++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_row_plugin.yml @@ -39,7 +39,7 @@ display: type: views_query row: options: - build_mode: teaser + view_mode: teaser comments: false type: 'entity:node' sorts: { } diff --git a/core/modules/rest/config/schema/rest.views.schema.yml b/core/modules/rest/config/schema/rest.views.schema.yml index 351b70d..3acc0a7 100644 --- a/core/modules/rest/config/schema/rest.views.schema.yml +++ b/core/modules/rest/config/schema/rest.views.schema.yml @@ -27,7 +27,7 @@ views.row.data_field: label: 'Raw output for ID' views.style.serializer: - type: viwes_style + type: views_style label: 'Serialized output format' mapping: formats: diff --git a/core/modules/taxonomy/src/Plugin/views/wizard/TaxonomyTerm.php b/core/modules/taxonomy/src/Plugin/views/wizard/TaxonomyTerm.php index 10a42ac..e7d3046 100644 --- a/core/modules/taxonomy/src/Plugin/views/wizard/TaxonomyTerm.php +++ b/core/modules/taxonomy/src/Plugin/views/wizard/TaxonomyTerm.php @@ -31,7 +31,8 @@ class TaxonomyTerm extends WizardPluginBase { 'alter' => array( 'alter_text' => TRUE, 'text' => 'taxonomy/term/[tid]' - ) + ), + 'plugin_id' => 'taxonomy', ); /** @@ -62,6 +63,7 @@ protected function defaultDisplayOptions() { $display_options['fields']['name']['hide_empty'] = 0; $display_options['fields']['name']['empty_zero'] = 0; $display_options['fields']['name']['link_to_taxonomy'] = 1; + $display_options['fields']['name']['plugin_id'] = 'taxonomy'; return $display_options; } diff --git a/core/modules/user/src/Plugin/views/wizard/Users.php b/core/modules/user/src/Plugin/views/wizard/Users.php index 92b29a9..d715dc1 100644 --- a/core/modules/user/src/Plugin/views/wizard/Users.php +++ b/core/modules/user/src/Plugin/views/wizard/Users.php @@ -41,7 +41,8 @@ class Users extends WizardPluginBase { 'alter' => array( 'alter_text' => TRUE, 'text' => 'user/[uid]' - ) + ), + 'plugin_id' => 'user', ); /** @@ -52,7 +53,7 @@ class Users extends WizardPluginBase { 'value' => TRUE, 'table' => 'users_field_data', 'field' => 'status', - 'provider' => 'user' + 'plugin_id' => 'boolean', ) ); @@ -64,7 +65,7 @@ protected function defaultDisplayOptions() { // Add permission-based access control. $display_options['access']['type'] = 'perm'; - $display_options['access']['perm'] = 'access user profiles'; + $display_options['access']['options']['perm'] = 'access user profiles'; // Remove the default fields, since we are customizing them here. unset($display_options['fields']); @@ -86,6 +87,7 @@ protected function defaultDisplayOptions() { $display_options['fields']['name']['empty_zero'] = 0; $display_options['fields']['name']['link_to_user'] = 1; $display_options['fields']['name']['overwrite_anonymous'] = 0; + $display_options['fields']['name']['plugin_id'] = 'user_name'; return $display_options; } diff --git a/core/modules/views/config/schema/views.data_types.schema.yml b/core/modules/views/config/schema/views.data_types.schema.yml index 0c684ca..d34bd57 100644 --- a/core/modules/views/config/schema/views.data_types.schema.yml +++ b/core/modules/views/config/schema/views.data_types.schema.yml @@ -835,6 +835,9 @@ views_entity_row: view_mode: type: string label: 'View mode' + rendering_language: + type: string + label: 'Rendering language' views_cache: type: mapping diff --git a/core/modules/views/config/schema/views.schema.yml b/core/modules/views/config/schema/views.schema.yml index 66abe11..61a6ea5 100644 --- a/core/modules/views/config/schema/views.schema.yml +++ b/core/modules/views/config/schema/views.schema.yml @@ -114,3 +114,14 @@ views.view.*: label: 'Position' display_options: type: views.display.[%parent.display_plugin] + +block.settings.views_block:*: + type: block_settings + label: 'View block' + mapping: + views_label: + type: label + lable: 'Title' + items_per_page: + type: string + label: 'Items per block' diff --git a/core/modules/views/src/Plugin/Block/ViewsBlockBase.php b/core/modules/views/src/Plugin/Block/ViewsBlockBase.php index 4736fbc..953dfae 100644 --- a/core/modules/views/src/Plugin/Block/ViewsBlockBase.php +++ b/core/modules/views/src/Plugin/Block/ViewsBlockBase.php @@ -171,6 +171,7 @@ public function blockSubmit($form, FormStateInterface $form_state) { else { $this->configuration['views_label'] = ''; } + $form_state->unsetValue('views_label_checkbox'); } /** diff --git a/core/modules/views/src/Plugin/views/display/Block.php b/core/modules/views/src/Plugin/views/display/Block.php index 2c41598..d2bfe26 100644 --- a/core/modules/views/src/Plugin/views/display/Block.php +++ b/core/modules/views/src/Plugin/views/display/Block.php @@ -332,6 +332,7 @@ public function blockSubmit(ViewsBlock $block, $form, FormStateInterface $form_s if ($items_per_page = $form_state->getValue(array('override', 'items_per_page'))) { $block->setConfigurationValue('items_per_page', $items_per_page); } + $form_state->unsetValue(array('override', 'items_per_page')); } /** diff --git a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php index 28e7afa..171a8d9 100644 --- a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php +++ b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php @@ -863,12 +863,9 @@ protected function defaultDisplayOptions() { 'table' => $this->base_table, 'field' => $default_field, 'id' => $default_field, + 'plugin_id' => $data[$default_field]['field']['id'], ); - // Load the plugin ID and module. - $base_field = $data['table']['base']['field']; - $display_options['fields'][$base_field]['plugin_id'] = $data[$base_field]['field']['id']; - return $display_options; } @@ -951,6 +948,7 @@ protected function defaultDisplayFiltersUser(array $form, FormStateInterface $fo 'table' => $table, 'field' => $bundle_key, 'value' => $value, + 'plugin_id' => $handler, ); } @@ -1027,6 +1025,7 @@ protected function defaultDisplaySortsUser($form, FormStateInterface $form_state 'table' => $table, 'field' => $column, 'order' => $sort, + 'plugin_id' => $data[$column]['sort']['id'], ); } } diff --git a/core/modules/views/src/Tests/NewViewConfigSchemaTest.php b/core/modules/views/src/Tests/NewViewConfigSchemaTest.php new file mode 100644 index 0000000..d6bb92e --- /dev/null +++ b/core/modules/views/src/Tests/NewViewConfigSchemaTest.php @@ -0,0 +1,63 @@ +drupalLogin($this->drupalCreateUser(array('administer views'))); + + // Create views with all core Views wizards. + $wizards = array( + // Wizard with their own classes. + 'node', + 'node_revision', + 'users', + 'comment', + 'file_managed', + 'taxonomy_term', + 'watchdog', + // Standard derivative classes. + 'standard:aggregator_feed', + 'standard:aggregator_item', + ); + foreach($wizards as $wizard_key) { + $edit = array(); + $edit['label'] = $this->randomString(); + $edit['id'] = strtolower($this->randomMachineName()); + $edit['show[wizard_key]'] = $wizard_key; + $edit['description'] = $this->randomString(); + $this->drupalPostForm('admin/structure/views/add', $edit, t('Save and edit')); + } + } + +} diff --git a/core/modules/views/src/Tests/Wizard/WizardTestBase.php b/core/modules/views/src/Tests/Wizard/WizardTestBase.php index 0a2e998..16907b8 100644 --- a/core/modules/views/src/Tests/Wizard/WizardTestBase.php +++ b/core/modules/views/src/Tests/Wizard/WizardTestBase.php @@ -15,6 +15,15 @@ abstract class WizardTestBase extends ViewTestBase { /** + * Set to TRUE to strict check all configuration saved. + * + * @see \Drupal\Core\Config\Testing\ConfigSchemaChecker + * + * @var bool + */ + protected $strictConfigSchema = TRUE; + + /** * Modules to enable. * * @var array diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_alias.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_alias.yml index e8e5fd7..00fa31e 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_alias.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_alias.yml @@ -85,7 +85,8 @@ display: type: full query: type: views_query - row_plugin: fields + row: + type: fields style_plugin: default field_langcode: '***LANGUAGE_language_content***' field_langcode_add_to_query: null diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display.yml index 331c663..08ee446 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display.yml @@ -41,11 +41,12 @@ display: type: full query: type: views_query - row_options: - build_mode: teaser - comments: '0' - links: '1' - row_plugin: node + row: + type: 'entity:node' + options: + links: true + view_mode: teaser + comments: false sorts: created: field: created @@ -66,11 +67,9 @@ display: defaults: pager: false pager_options: false - row_options: '0' - row_plugin: '0' style_options: '0' style_plugin: '0' - field: + fields: title: link_to_node: '1' plugin_id: node @@ -79,11 +78,8 @@ display: items_per_page: 5 type: some pager_options: { } - row_options: - build_mode: teaser - comments: '0' - links: '1' - row_plugin: fields + row: + type: fields style_options: { } style_plugin: default field_langcode: '***LANGUAGE_language_content***' diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display_feed.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display_feed.yml index d718e15..ffb50d5 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display_feed.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_display_feed.yml @@ -58,9 +58,9 @@ display: type: views_query row: options: - build_mode: teaser + links: true + view_mode: teaser comments: false - links: '1' type: 'entity:node' sorts: created: diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_get_attach_displays.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_get_attach_displays.yml index b234d99..8dd5551 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_get_attach_displays.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_get_attach_displays.yml @@ -36,8 +36,8 @@ display: row: type: 'entity:node' options: - build_mode: teaser - links: '1' + links: true + view_mode: teaser comments: false fields: title: diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_mini_pager.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_mini_pager.yml index 33e6bd9..e2341be 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_mini_pager.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_mini_pager.yml @@ -50,8 +50,8 @@ display: row: type: 'entity:node' options: - build_mode: teaser - links: '1' + links: true + view_mode: teaser comments: false fields: title: diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_redirect_view.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_redirect_view.yml index d77afef..23dc9ea 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_redirect_view.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_redirect_view.yml @@ -36,8 +36,8 @@ display: row: type: 'entity:node' options: - build_mode: teaser - links: '1' + links: true + view_mode: teaser comments: false fields: title: