Issue #2381973 by Gábor Hojtsy, vijaycs85, dawehner: View wizard creates 'invalid' views out of the box, missing plugin_ids, insecure permissions
parent
ec465933bb
commit
bbcc4623a5
|
@ -1,13 +1,5 @@
|
||||||
# Schema for the views plugins of the Aggregator module.
|
# Schema for the views plugins of the Aggregator module.
|
||||||
|
|
||||||
"views.row.entity:aggregator_feed":
|
|
||||||
type: views_entity_row
|
|
||||||
label: 'Entity options'
|
|
||||||
|
|
||||||
"views.row.entity:aggregator_item":
|
|
||||||
type: views_entity_row
|
|
||||||
label: 'Entity options'
|
|
||||||
|
|
||||||
views.argument.aggregator_fid:
|
views.argument.aggregator_fid:
|
||||||
type: views.argument.numeric
|
type: views.argument.numeric
|
||||||
label: 'Aggregator feed ID'
|
label: 'Aggregator feed ID'
|
||||||
|
|
|
@ -98,20 +98,6 @@ views.filter.comment_user_uid:
|
||||||
type: views_filter
|
type: views_filter
|
||||||
label: 'Node user posted comment'
|
label: 'Node user posted comment'
|
||||||
|
|
||||||
"views.row.entity:comment":
|
|
||||||
type: mapping
|
|
||||||
label: 'Entity options'
|
|
||||||
mapping:
|
|
||||||
view_mode:
|
|
||||||
type: string
|
|
||||||
label: 'View mode'
|
|
||||||
relationship:
|
|
||||||
type: string
|
|
||||||
label: 'Relationship'
|
|
||||||
links:
|
|
||||||
type: boolean
|
|
||||||
label: 'Display links'
|
|
||||||
|
|
||||||
views.row.comment_rss:
|
views.row.comment_rss:
|
||||||
type: views_row
|
type: views_row
|
||||||
label: 'Comment'
|
label: 'Comment'
|
||||||
|
@ -119,9 +105,6 @@ views.row.comment_rss:
|
||||||
view_mode:
|
view_mode:
|
||||||
type: string
|
type: string
|
||||||
label: 'Display type'
|
label: 'Display type'
|
||||||
links:
|
|
||||||
type: boolean
|
|
||||||
label: 'Display links'
|
|
||||||
|
|
||||||
views.sort.comment_ces_last_comment_name:
|
views.sort.comment_ces_last_comment_name:
|
||||||
type: views_sort
|
type: views_sort
|
||||||
|
|
|
@ -43,6 +43,7 @@ class Comment extends WizardPluginBase {
|
||||||
'alter_text' => TRUE,
|
'alter_text' => TRUE,
|
||||||
'text' => 'comment/[cid]#comment-[cid]'
|
'text' => 'comment/[cid]#comment-[cid]'
|
||||||
),
|
),
|
||||||
|
'plugin_id' => 'comment',
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53,15 +54,15 @@ class Comment extends WizardPluginBase {
|
||||||
'value' => TRUE,
|
'value' => TRUE,
|
||||||
'table' => 'comment_field_data',
|
'table' => 'comment_field_data',
|
||||||
'field' => 'status',
|
'field' => 'status',
|
||||||
'provider' => 'comment'
|
'plugin_id' => 'boolean',
|
||||||
),
|
),
|
||||||
'status_node' => array(
|
'status_node' => array(
|
||||||
'value' => TRUE,
|
'value' => TRUE,
|
||||||
'table' => 'node_field_data',
|
'table' => 'node_field_data',
|
||||||
'field' => 'status',
|
'field' => 'status',
|
||||||
'provider' => 'node',
|
'plugin_id' => 'boolean',
|
||||||
'relationship' => 'node',
|
'relationship' => 'node',
|
||||||
)
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -74,31 +75,6 @@ class Comment extends WizardPluginBase {
|
||||||
return $options;
|
return $options;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildFormStyle(array &$form, FormStateInterface $form_state, $type) {
|
|
||||||
parent::buildFormStyle($form, $form_state, $type);
|
|
||||||
$style_form =& $form['displays'][$type]['options']['style'];
|
|
||||||
// Some style plugins don't support row plugins so stop here if that's the
|
|
||||||
// case.
|
|
||||||
if (!isset($style_form['row_plugin']['#default_value'])) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$row_plugin = $style_form['row_plugin']['#default_value'];
|
|
||||||
switch ($row_plugin) {
|
|
||||||
case 'comment':
|
|
||||||
$style_form['row_options']['links'] = array(
|
|
||||||
'#type' => 'select',
|
|
||||||
'#title' => $this->t('Should links be displayed below each comment'),
|
|
||||||
'#title_display' => 'invisible',
|
|
||||||
'#options' => array(
|
|
||||||
1 => $this->t('with links (allow users to reply to the comment, etc.)'),
|
|
||||||
0 => $this->t('without links'),
|
|
||||||
),
|
|
||||||
'#default_value' => 1,
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
@ -128,7 +104,6 @@ class Comment extends WizardPluginBase {
|
||||||
switch ($row_plugin) {
|
switch ($row_plugin) {
|
||||||
case 'comment':
|
case 'comment':
|
||||||
$display_options['row']['type'] = 'entity:comment';
|
$display_options['row']['type'] = 'entity:comment';
|
||||||
$display_options['row']['options']['links'] = !empty($row_options['links']);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,6 +143,7 @@ class Comment extends WizardPluginBase {
|
||||||
$display_options['fields']['subject']['hide_empty'] = 0;
|
$display_options['fields']['subject']['hide_empty'] = 0;
|
||||||
$display_options['fields']['subject']['empty_zero'] = 0;
|
$display_options['fields']['subject']['empty_zero'] = 0;
|
||||||
$display_options['fields']['subject']['link_to_comment'] = 1;
|
$display_options['fields']['subject']['link_to_comment'] = 1;
|
||||||
|
$display_options['fields']['subject']['plugin_id'] = 'comment';
|
||||||
|
|
||||||
return $display_options;
|
return $display_options;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,8 @@ class File extends WizardPluginBase {
|
||||||
'table' => 'file_managed',
|
'table' => 'file_managed',
|
||||||
'field' => 'uri',
|
'field' => 'uri',
|
||||||
'exclude' => TRUE,
|
'exclude' => TRUE,
|
||||||
'file_download_path' => TRUE
|
'file_download_path' => TRUE,
|
||||||
|
'plugin_id' => 'file_uri',
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,6 +65,7 @@ class File extends WizardPluginBase {
|
||||||
$display_options['fields']['filename']['hide_empty'] = 0;
|
$display_options['fields']['filename']['hide_empty'] = 0;
|
||||||
$display_options['fields']['filename']['empty_zero'] = 0;
|
$display_options['fields']['filename']['empty_zero'] = 0;
|
||||||
$display_options['fields']['filename']['link_to_file'] = 1;
|
$display_options['fields']['filename']['link_to_file'] = 1;
|
||||||
|
$display_options['fields']['filename']['plugin_id'] = 'file';
|
||||||
|
|
||||||
return $display_options;
|
return $display_options;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,6 @@ display:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
options:
|
||||||
view_mode: teaser
|
view_mode: teaser
|
||||||
comments: false
|
|
||||||
header: { }
|
header: { }
|
||||||
footer: { }
|
footer: { }
|
||||||
empty: { }
|
empty: { }
|
||||||
|
|
|
@ -182,8 +182,6 @@ display:
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
options:
|
||||||
build_mode: teaser
|
|
||||||
comments: false
|
|
||||||
view_mode: teaser
|
view_mode: teaser
|
||||||
sorts:
|
sorts:
|
||||||
sticky:
|
sticky:
|
||||||
|
|
|
@ -1,16 +1,5 @@
|
||||||
# Schema for the views plugins of the Node module.
|
# Schema for the views plugins of the Node module.
|
||||||
|
|
||||||
"views.row.entity:node":
|
|
||||||
type: views_entity_row
|
|
||||||
label: 'Entity options'
|
|
||||||
mapping:
|
|
||||||
comments:
|
|
||||||
type: boolean
|
|
||||||
label: 'Show comments'
|
|
||||||
build_mode:
|
|
||||||
type: string
|
|
||||||
label: 'Build mode'
|
|
||||||
|
|
||||||
views.area.node_listing_empty:
|
views.area.node_listing_empty:
|
||||||
type: views_area
|
type: views_area
|
||||||
label: 'Node link'
|
label: 'Node link'
|
||||||
|
@ -157,7 +146,7 @@ views.field.node_path:
|
||||||
label: 'Use absolute link (begins with "http://")'
|
label: 'Use absolute link (begins with "http://")'
|
||||||
|
|
||||||
views.field.node_revision:
|
views.field.node_revision:
|
||||||
type: views_field
|
type: views.field.node
|
||||||
label: 'Node revision'
|
label: 'Node revision'
|
||||||
mapping:
|
mapping:
|
||||||
link_to_node_revision:
|
link_to_node_revision:
|
||||||
|
@ -234,8 +223,8 @@ views.filter_value.node_status:
|
||||||
label: 'Status'
|
label: 'Status'
|
||||||
|
|
||||||
views.row.node_rss:
|
views.row.node_rss:
|
||||||
type: "views.row.entity:node"
|
type: views_row
|
||||||
label: 'Content'
|
label: 'Content options'
|
||||||
mapping:
|
mapping:
|
||||||
view_mode:
|
view_mode:
|
||||||
type: string
|
type: string
|
||||||
|
|
|
@ -42,7 +42,8 @@ class Node extends WizardPluginBase {
|
||||||
'alter' => array(
|
'alter' => array(
|
||||||
'alter_text' => TRUE,
|
'alter_text' => TRUE,
|
||||||
'text' => 'node/[nid]'
|
'text' => 'node/[nid]'
|
||||||
)
|
),
|
||||||
|
'plugin_id' => 'node',
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53,7 +54,7 @@ class Node extends WizardPluginBase {
|
||||||
'value' => TRUE,
|
'value' => TRUE,
|
||||||
'table' => 'node_field_data',
|
'table' => 'node_field_data',
|
||||||
'field' => 'status',
|
'field' => 'status',
|
||||||
'provider' => 'node'
|
'plugin_id' => 'boolean'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -82,42 +83,6 @@ class Node extends WizardPluginBase {
|
||||||
return $options;
|
return $options;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds the style options to the wizard form.
|
|
||||||
*
|
|
||||||
* @param array $form
|
|
||||||
* The full wizard form array.
|
|
||||||
* @param \Drupal\Core\Form\FormStateInterface $form_state
|
|
||||||
* The current state of the wizard form.
|
|
||||||
* @param string $type
|
|
||||||
* The display ID (e.g. 'page' or 'block').
|
|
||||||
*/
|
|
||||||
protected function buildFormStyle(array &$form, FormStateInterface $form_state, $type) {
|
|
||||||
parent::buildFormStyle($form, $form_state, $type);
|
|
||||||
$style_form =& $form['displays'][$type]['options']['style'];
|
|
||||||
// Some style plugins don't support row plugins so stop here if that's the
|
|
||||||
// case.
|
|
||||||
if (!isset($style_form['row_plugin']['#default_value'])) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$row_plugin = $style_form['row_plugin']['#default_value'];
|
|
||||||
switch ($row_plugin) {
|
|
||||||
case 'full_posts':
|
|
||||||
case 'teasers':
|
|
||||||
$style_form['row_options']['links'] = array(
|
|
||||||
'#type' => 'select',
|
|
||||||
'#title' => $this->t('Should links be displayed below each node'),
|
|
||||||
'#title_display' => 'invisible',
|
|
||||||
'#options' => array(
|
|
||||||
1 => $this->t('with links (allow users to add comments, etc.)'),
|
|
||||||
0 => $this->t('without links'),
|
|
||||||
),
|
|
||||||
'#default_value' => 1,
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Overrides Drupal\views\Plugin\views\wizard\WizardPluginBase::defaultDisplayOptions().
|
* Overrides Drupal\views\Plugin\views\wizard\WizardPluginBase::defaultDisplayOptions().
|
||||||
*/
|
*/
|
||||||
|
@ -148,6 +113,7 @@ class Node extends WizardPluginBase {
|
||||||
$display_options['fields']['title']['hide_empty'] = 0;
|
$display_options['fields']['title']['hide_empty'] = 0;
|
||||||
$display_options['fields']['title']['empty_zero'] = 0;
|
$display_options['fields']['title']['empty_zero'] = 0;
|
||||||
$display_options['fields']['title']['link_to_node'] = 1;
|
$display_options['fields']['title']['link_to_node'] = 1;
|
||||||
|
$display_options['fields']['title']['plugin_id'] = 'node';
|
||||||
|
|
||||||
return $display_options;
|
return $display_options;
|
||||||
}
|
}
|
||||||
|
@ -165,7 +131,8 @@ class Node extends WizardPluginBase {
|
||||||
'table' => 'taxonomy_index',
|
'table' => 'taxonomy_index',
|
||||||
'field' => 'tid',
|
'field' => 'tid',
|
||||||
'value' => $tids,
|
'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
|
// If the user entered more than one valid term in the autocomplete
|
||||||
// field, they probably intended both of them to be applied.
|
// field, they probably intended both of them to be applied.
|
||||||
|
@ -209,21 +176,20 @@ class Node extends WizardPluginBase {
|
||||||
switch ($row_plugin) {
|
switch ($row_plugin) {
|
||||||
case 'full_posts':
|
case 'full_posts':
|
||||||
$display_options['row']['type'] = 'entity:node';
|
$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;
|
break;
|
||||||
case 'teasers':
|
case 'teasers':
|
||||||
$display_options['row']['type'] = 'entity:node';
|
$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;
|
break;
|
||||||
case 'titles_linked':
|
case 'titles_linked':
|
||||||
$display_options['row']['type'] = 'fields';
|
|
||||||
$display_options['field']['title']['link_to_node'] = 1;
|
|
||||||
break;
|
|
||||||
case 'titles':
|
case 'titles':
|
||||||
$display_options['row']['type'] = 'fields';
|
$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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,8 @@ class NodeRevision extends WizardPluginBase {
|
||||||
'alter' => array(
|
'alter' => array(
|
||||||
'alter_text' => TRUE,
|
'alter_text' => TRUE,
|
||||||
'text' => 'node/[nid]/revisions/[vid]/view'
|
'text' => 'node/[nid]/revisions/[vid]/view'
|
||||||
)
|
),
|
||||||
|
'plugin_id' => 'node_revision',
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -52,7 +53,8 @@ class NodeRevision extends WizardPluginBase {
|
||||||
'table' => 'node',
|
'table' => 'node',
|
||||||
'field' => 'nid',
|
'field' => 'nid',
|
||||||
'exclude' => TRUE,
|
'exclude' => TRUE,
|
||||||
'link_to_node' => FALSE
|
'link_to_node' => FALSE,
|
||||||
|
'plugin_id' => 'node',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -64,7 +66,7 @@ class NodeRevision extends WizardPluginBase {
|
||||||
'value' => TRUE,
|
'value' => TRUE,
|
||||||
'table' => 'node_field_revision',
|
'table' => 'node_field_revision',
|
||||||
'field' => 'status',
|
'field' => 'status',
|
||||||
'provider' => 'node'
|
'plugin_id' => 'boolean'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -88,7 +90,7 @@ class NodeRevision extends WizardPluginBase {
|
||||||
|
|
||||||
// Add permission-based access control.
|
// Add permission-based access control.
|
||||||
$display_options['access']['type'] = 'perm';
|
$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.
|
// Remove the default fields, since we are customizing them here.
|
||||||
unset($display_options['fields']);
|
unset($display_options['fields']);
|
||||||
|
@ -107,6 +109,7 @@ class NodeRevision extends WizardPluginBase {
|
||||||
$display_options['fields']['changed']['alter']['html'] = FALSE;
|
$display_options['fields']['changed']['alter']['html'] = FALSE;
|
||||||
$display_options['fields']['changed']['hide_empty'] = FALSE;
|
$display_options['fields']['changed']['hide_empty'] = FALSE;
|
||||||
$display_options['fields']['changed']['empty_zero'] = FALSE;
|
$display_options['fields']['changed']['empty_zero'] = FALSE;
|
||||||
|
$display_options['fields']['changed']['plugin_id'] = 'date';
|
||||||
|
|
||||||
/* Field: Content revision: Title */
|
/* Field: Content revision: Title */
|
||||||
$display_options['fields']['title']['id'] = 'title';
|
$display_options['fields']['title']['id'] = 'title';
|
||||||
|
@ -125,6 +128,7 @@ class NodeRevision extends WizardPluginBase {
|
||||||
$display_options['fields']['title']['empty_zero'] = 0;
|
$display_options['fields']['title']['empty_zero'] = 0;
|
||||||
$display_options['fields']['title']['link_to_node'] = 0;
|
$display_options['fields']['title']['link_to_node'] = 0;
|
||||||
$display_options['fields']['title']['link_to_node_revision'] = 1;
|
$display_options['fields']['title']['link_to_node_revision'] = 1;
|
||||||
|
$display_options['fields']['title']['plugin_id'] = 'node_revision';
|
||||||
|
|
||||||
return $display_options;
|
return $display_options;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,8 +54,6 @@ display:
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
options:
|
||||||
build_mode: teaser
|
|
||||||
comments: false
|
|
||||||
view_mode: teaser
|
view_mode: teaser
|
||||||
style:
|
style:
|
||||||
type: default
|
type: default
|
||||||
|
|
|
@ -54,8 +54,6 @@ display:
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
options:
|
||||||
build_mode: teaser
|
|
||||||
links: false
|
|
||||||
view_mode: teaser
|
view_mode: teaser
|
||||||
rendering_language: translation_language_renderer
|
rendering_language: translation_language_renderer
|
||||||
fields:
|
fields:
|
||||||
|
|
|
@ -39,8 +39,7 @@ display:
|
||||||
type: views_query
|
type: views_query
|
||||||
row:
|
row:
|
||||||
options:
|
options:
|
||||||
build_mode: teaser
|
view_mode: teaser
|
||||||
comments: false
|
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
sorts: { }
|
sorts: { }
|
||||||
style:
|
style:
|
||||||
|
|
|
@ -4,10 +4,6 @@ views.display.rest_export:
|
||||||
type: views_display_path
|
type: views_display_path
|
||||||
label: 'REST display options'
|
label: 'REST display options'
|
||||||
|
|
||||||
views.row.data_entity:
|
|
||||||
type: views_row
|
|
||||||
label: 'Entity row'
|
|
||||||
|
|
||||||
views.row.data_field:
|
views.row.data_field:
|
||||||
type: views_row
|
type: views_row
|
||||||
label: 'Field row'
|
label: 'Field row'
|
||||||
|
@ -27,7 +23,7 @@ views.row.data_field:
|
||||||
label: 'Raw output for ID'
|
label: 'Raw output for ID'
|
||||||
|
|
||||||
views.style.serializer:
|
views.style.serializer:
|
||||||
type: viwes_style
|
type: views_style
|
||||||
label: 'Serialized output format'
|
label: 'Serialized output format'
|
||||||
mapping:
|
mapping:
|
||||||
formats:
|
formats:
|
||||||
|
|
|
@ -24,7 +24,7 @@ views.filter.search:
|
||||||
label: 'On empty input'
|
label: 'On empty input'
|
||||||
|
|
||||||
views.row.search_view:
|
views.row.search_view:
|
||||||
type: views.field.numeric
|
type: views_row
|
||||||
label: 'Source link'
|
label: 'Source link'
|
||||||
mapping:
|
mapping:
|
||||||
score:
|
score:
|
||||||
|
|
|
@ -215,7 +215,6 @@ display:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
options:
|
||||||
view_mode: teaser
|
view_mode: teaser
|
||||||
comments: false
|
|
||||||
header:
|
header:
|
||||||
entity_taxonomy_term:
|
entity_taxonomy_term:
|
||||||
id: entity_taxonomy_term
|
id: entity_taxonomy_term
|
||||||
|
|
|
@ -31,7 +31,8 @@ class TaxonomyTerm extends WizardPluginBase {
|
||||||
'alter' => array(
|
'alter' => array(
|
||||||
'alter_text' => TRUE,
|
'alter_text' => TRUE,
|
||||||
'text' => 'taxonomy/term/[tid]'
|
'text' => 'taxonomy/term/[tid]'
|
||||||
)
|
),
|
||||||
|
'plugin_id' => 'taxonomy',
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,6 +63,7 @@ class TaxonomyTerm extends WizardPluginBase {
|
||||||
$display_options['fields']['name']['hide_empty'] = 0;
|
$display_options['fields']['name']['hide_empty'] = 0;
|
||||||
$display_options['fields']['name']['empty_zero'] = 0;
|
$display_options['fields']['name']['empty_zero'] = 0;
|
||||||
$display_options['fields']['name']['link_to_taxonomy'] = 1;
|
$display_options['fields']['name']['link_to_taxonomy'] = 1;
|
||||||
|
$display_options['fields']['name']['plugin_id'] = 'taxonomy';
|
||||||
|
|
||||||
return $display_options;
|
return $display_options;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,10 +60,6 @@ views.argument_default.node:
|
||||||
type: boolean
|
type: boolean
|
||||||
label: 'Content ID from URL'
|
label: 'Content ID from URL'
|
||||||
|
|
||||||
"views.row.entity:user":
|
|
||||||
type: views_entity_row
|
|
||||||
label: 'Entity options'
|
|
||||||
|
|
||||||
views_field_user:
|
views_field_user:
|
||||||
type: views_field
|
type: views_field
|
||||||
mapping:
|
mapping:
|
||||||
|
|
|
@ -41,7 +41,8 @@ class Users extends WizardPluginBase {
|
||||||
'alter' => array(
|
'alter' => array(
|
||||||
'alter_text' => TRUE,
|
'alter_text' => TRUE,
|
||||||
'text' => 'user/[uid]'
|
'text' => 'user/[uid]'
|
||||||
)
|
),
|
||||||
|
'plugin_id' => 'user',
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -52,7 +53,7 @@ class Users extends WizardPluginBase {
|
||||||
'value' => TRUE,
|
'value' => TRUE,
|
||||||
'table' => 'users_field_data',
|
'table' => 'users_field_data',
|
||||||
'field' => 'status',
|
'field' => 'status',
|
||||||
'provider' => 'user'
|
'plugin_id' => 'boolean',
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -64,7 +65,7 @@ class Users extends WizardPluginBase {
|
||||||
|
|
||||||
// Add permission-based access control.
|
// Add permission-based access control.
|
||||||
$display_options['access']['type'] = 'perm';
|
$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.
|
// Remove the default fields, since we are customizing them here.
|
||||||
unset($display_options['fields']);
|
unset($display_options['fields']);
|
||||||
|
@ -86,6 +87,7 @@ class Users extends WizardPluginBase {
|
||||||
$display_options['fields']['name']['empty_zero'] = 0;
|
$display_options['fields']['name']['empty_zero'] = 0;
|
||||||
$display_options['fields']['name']['link_to_user'] = 1;
|
$display_options['fields']['name']['link_to_user'] = 1;
|
||||||
$display_options['fields']['name']['overwrite_anonymous'] = 0;
|
$display_options['fields']['name']['overwrite_anonymous'] = 0;
|
||||||
|
$display_options['fields']['name']['plugin_id'] = 'user_name';
|
||||||
|
|
||||||
return $display_options;
|
return $display_options;
|
||||||
}
|
}
|
||||||
|
|
|
@ -823,7 +823,7 @@ views_query:
|
||||||
|
|
||||||
views_row:
|
views_row:
|
||||||
type: mapping
|
type: mapping
|
||||||
label: 'Row'
|
label: 'Row options'
|
||||||
mapping:
|
mapping:
|
||||||
relationship:
|
relationship:
|
||||||
type: string
|
type: string
|
||||||
|
@ -835,6 +835,9 @@ views_entity_row:
|
||||||
view_mode:
|
view_mode:
|
||||||
type: string
|
type: string
|
||||||
label: 'View mode'
|
label: 'View mode'
|
||||||
|
rendering_language:
|
||||||
|
type: string
|
||||||
|
label: 'Rendering language'
|
||||||
|
|
||||||
views_cache:
|
views_cache:
|
||||||
type: mapping
|
type: mapping
|
||||||
|
|
|
@ -1,5 +1,12 @@
|
||||||
# Schema for the views row.
|
# Schema for the views row.
|
||||||
|
|
||||||
|
views.row.*:
|
||||||
|
type: views_row
|
||||||
|
|
||||||
|
"views.row.entity:*":
|
||||||
|
type: views_entity_row
|
||||||
|
label: 'Entity options'
|
||||||
|
|
||||||
views.row.fields:
|
views.row.fields:
|
||||||
type: views_row
|
type: views_row
|
||||||
label: 'Field options'
|
label: 'Field options'
|
||||||
|
@ -21,7 +28,7 @@ views.row.fields:
|
||||||
label: 'Hide empty'
|
label: 'Hide empty'
|
||||||
|
|
||||||
views.row.rss_fields:
|
views.row.rss_fields:
|
||||||
type: mapping
|
type: views_row
|
||||||
label: 'RSS field options'
|
label: 'RSS field options'
|
||||||
mapping:
|
mapping:
|
||||||
title_field:
|
title_field:
|
||||||
|
|
|
@ -114,3 +114,14 @@ views.view.*:
|
||||||
label: 'Position'
|
label: 'Position'
|
||||||
display_options:
|
display_options:
|
||||||
type: views.display.[%parent.display_plugin]
|
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'
|
||||||
|
|
|
@ -171,6 +171,7 @@ abstract class ViewsBlockBase extends BlockBase implements ContainerFactoryPlugi
|
||||||
else {
|
else {
|
||||||
$this->configuration['views_label'] = '';
|
$this->configuration['views_label'] = '';
|
||||||
}
|
}
|
||||||
|
$form_state->unsetValue('views_label_checkbox');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -332,6 +332,7 @@ class Block extends DisplayPluginBase {
|
||||||
if ($items_per_page = $form_state->getValue(array('override', 'items_per_page'))) {
|
if ($items_per_page = $form_state->getValue(array('override', 'items_per_page'))) {
|
||||||
$block->setConfigurationValue('items_per_page', $items_per_page);
|
$block->setConfigurationValue('items_per_page', $items_per_page);
|
||||||
}
|
}
|
||||||
|
$form_state->unsetValue(array('override', 'items_per_page'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -848,9 +848,16 @@ abstract class WizardPluginBase extends PluginBase implements WizardInterface {
|
||||||
// Add a least one field so the view validates and the user has a preview.
|
// Add a least one field so the view validates and the user has a preview.
|
||||||
// The base field can provide a default in its base settings; otherwise,
|
// The base field can provide a default in its base settings; otherwise,
|
||||||
// choose the first field with a field handler.
|
// choose the first field with a field handler.
|
||||||
$data = Views::viewsData()->get($this->base_table);
|
$default_table = $this->base_table;
|
||||||
|
$data = Views::viewsData()->get($default_table);
|
||||||
if (isset($data['table']['base']['defaults']['field'])) {
|
if (isset($data['table']['base']['defaults']['field'])) {
|
||||||
$default_field = $data['table']['base']['defaults']['field'];
|
$default_field = $data['table']['base']['defaults']['field'];
|
||||||
|
// If the table for the default field is different to the base table,
|
||||||
|
// load the view table data for this table.
|
||||||
|
if (isset($data['table']['base']['defaults']['table']) && $data['table']['base']['defaults']['table'] != $default_table) {
|
||||||
|
$default_table = $data['table']['base']['defaults']['table'];
|
||||||
|
$data = Views::viewsData()->get($default_table);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
foreach ($data as $default_field => $field_data) {
|
foreach ($data as $default_field => $field_data) {
|
||||||
|
@ -860,15 +867,12 @@ abstract class WizardPluginBase extends PluginBase implements WizardInterface {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$display_options['fields'][$default_field] = array(
|
$display_options['fields'][$default_field] = array(
|
||||||
'table' => $this->base_table,
|
'table' => $default_table,
|
||||||
'field' => $default_field,
|
'field' => $default_field,
|
||||||
'id' => $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;
|
return $display_options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -951,6 +955,7 @@ abstract class WizardPluginBase extends PluginBase implements WizardInterface {
|
||||||
'table' => $table,
|
'table' => $table,
|
||||||
'field' => $bundle_key,
|
'field' => $bundle_key,
|
||||||
'value' => $value,
|
'value' => $value,
|
||||||
|
'plugin_id' => $handler,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1027,6 +1032,7 @@ abstract class WizardPluginBase extends PluginBase implements WizardInterface {
|
||||||
'table' => $table,
|
'table' => $table,
|
||||||
'field' => $column,
|
'field' => $column,
|
||||||
'order' => $sort,
|
'order' => $sort,
|
||||||
|
'plugin_id' => $data[$column]['sort']['id'],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,15 @@ use Drupal\views\Tests\ViewTestBase;
|
||||||
*/
|
*/
|
||||||
abstract class WizardTestBase extends ViewTestBase {
|
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.
|
* Modules to enable.
|
||||||
*
|
*
|
||||||
|
|
|
@ -85,7 +85,8 @@ display:
|
||||||
type: full
|
type: full
|
||||||
query:
|
query:
|
||||||
type: views_query
|
type: views_query
|
||||||
row_plugin: fields
|
row:
|
||||||
|
type: fields
|
||||||
style_plugin: default
|
style_plugin: default
|
||||||
field_langcode: '***LANGUAGE_language_content***'
|
field_langcode: '***LANGUAGE_language_content***'
|
||||||
field_langcode_add_to_query: null
|
field_langcode_add_to_query: null
|
||||||
|
|
|
@ -41,11 +41,10 @@ display:
|
||||||
type: full
|
type: full
|
||||||
query:
|
query:
|
||||||
type: views_query
|
type: views_query
|
||||||
row_options:
|
row:
|
||||||
build_mode: teaser
|
type: 'entity:node'
|
||||||
comments: '0'
|
options:
|
||||||
links: '1'
|
view_mode: teaser
|
||||||
row_plugin: node
|
|
||||||
sorts:
|
sorts:
|
||||||
created:
|
created:
|
||||||
field: created
|
field: created
|
||||||
|
@ -66,11 +65,9 @@ display:
|
||||||
defaults:
|
defaults:
|
||||||
pager: false
|
pager: false
|
||||||
pager_options: false
|
pager_options: false
|
||||||
row_options: '0'
|
|
||||||
row_plugin: '0'
|
|
||||||
style_options: '0'
|
style_options: '0'
|
||||||
style_plugin: '0'
|
style_plugin: '0'
|
||||||
field:
|
fields:
|
||||||
title:
|
title:
|
||||||
link_to_node: '1'
|
link_to_node: '1'
|
||||||
plugin_id: node
|
plugin_id: node
|
||||||
|
@ -79,11 +76,8 @@ display:
|
||||||
items_per_page: 5
|
items_per_page: 5
|
||||||
type: some
|
type: some
|
||||||
pager_options: { }
|
pager_options: { }
|
||||||
row_options:
|
row:
|
||||||
build_mode: teaser
|
type: fields
|
||||||
comments: '0'
|
|
||||||
links: '1'
|
|
||||||
row_plugin: fields
|
|
||||||
style_options: { }
|
style_options: { }
|
||||||
style_plugin: default
|
style_plugin: default
|
||||||
field_langcode: '***LANGUAGE_language_content***'
|
field_langcode: '***LANGUAGE_language_content***'
|
||||||
|
|
|
@ -58,9 +58,7 @@ display:
|
||||||
type: views_query
|
type: views_query
|
||||||
row:
|
row:
|
||||||
options:
|
options:
|
||||||
build_mode: teaser
|
view_mode: teaser
|
||||||
comments: false
|
|
||||||
links: '1'
|
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
sorts:
|
sorts:
|
||||||
created:
|
created:
|
||||||
|
|
|
@ -34,7 +34,6 @@ display:
|
||||||
relationship: none
|
relationship: none
|
||||||
view_mode: teaser
|
view_mode: teaser
|
||||||
rendering_language: translation_language_renderer
|
rendering_language: translation_language_renderer
|
||||||
links: 0
|
|
||||||
sorts:
|
sorts:
|
||||||
title:
|
title:
|
||||||
id: title
|
id: title
|
||||||
|
|
|
@ -84,9 +84,6 @@ display:
|
||||||
type: default
|
type: default
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
|
||||||
comments: false
|
|
||||||
links: '1'
|
|
||||||
field_langcode: '***LANGUAGE_language_content***'
|
field_langcode: '***LANGUAGE_language_content***'
|
||||||
field_langcode_add_to_query: null
|
field_langcode_add_to_query: null
|
||||||
display_plugin: default
|
display_plugin: default
|
||||||
|
|
|
@ -44,9 +44,6 @@ display:
|
||||||
type: default
|
type: default
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
|
||||||
comments: false
|
|
||||||
links: '1'
|
|
||||||
field_langcode: '***LANGUAGE_language_content***'
|
field_langcode: '***LANGUAGE_language_content***'
|
||||||
field_langcode_add_to_query: null
|
field_langcode_add_to_query: null
|
||||||
display_plugin: default
|
display_plugin: default
|
||||||
|
|
|
@ -44,9 +44,6 @@ display:
|
||||||
type: default
|
type: default
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
|
||||||
comments: false
|
|
||||||
links: '1'
|
|
||||||
field_langcode: '***LANGUAGE_language_content***'
|
field_langcode: '***LANGUAGE_language_content***'
|
||||||
field_langcode_add_to_query: null
|
field_langcode_add_to_query: null
|
||||||
display_plugin: default
|
display_plugin: default
|
||||||
|
|
|
@ -36,9 +36,7 @@ display:
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
options:
|
||||||
build_mode: teaser
|
view_mode: teaser
|
||||||
links: '1'
|
|
||||||
comments: false
|
|
||||||
fields:
|
fields:
|
||||||
title:
|
title:
|
||||||
id: title
|
id: title
|
||||||
|
|
|
@ -50,9 +50,7 @@ display:
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
options:
|
||||||
build_mode: teaser
|
view_mode: teaser
|
||||||
links: '1'
|
|
||||||
comments: false
|
|
||||||
fields:
|
fields:
|
||||||
title:
|
title:
|
||||||
id: title
|
id: title
|
||||||
|
|
|
@ -36,9 +36,7 @@ display:
|
||||||
row:
|
row:
|
||||||
type: 'entity:node'
|
type: 'entity:node'
|
||||||
options:
|
options:
|
||||||
build_mode: teaser
|
view_mode: teaser
|
||||||
links: '1'
|
|
||||||
comments: false
|
|
||||||
fields:
|
fields:
|
||||||
title:
|
title:
|
||||||
id: title
|
id: title
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Contains \Drupal\views_ui\Tests\NewViewConfigSchemaTest.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\views_ui\Tests;
|
||||||
|
|
||||||
|
use Drupal\simpletest\WebTestBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests configuration schema against new views.
|
||||||
|
*
|
||||||
|
* @group views_ui
|
||||||
|
*/
|
||||||
|
class NewViewConfigSchemaTest extends WebTestBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
public static $modules = array('views_ui', 'node', 'comment', 'file', 'taxonomy', 'dblog', 'aggregator');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests creating brand new views.
|
||||||
|
*/
|
||||||
|
public function testNewViews() {
|
||||||
|
$this->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'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue