diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/PluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/PluginBase.php index a291143..a626c3b 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/PluginBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/PluginBase.php @@ -105,8 +105,8 @@ public static function create(ContainerInterface $container, array $configuratio * The options configured for this plugin. */ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) { - $this->setOptionDefaults($this->options, $this->defineOptions()); $this->view = $view; + $this->setOptionDefaults($this->options, $this->defineOptions()); $this->displayHandler = $display; $this->unpackOptions($this->options, $options); diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php index f5d7002..9d7e977 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php @@ -410,7 +410,15 @@ public function useStringGroupBy() { protected function defineOptions() { $options = parent::defineOptions(); - $options['label'] = array('default' => $this->definition['title'], 'translatable' => TRUE); + $options['label'] = array('default' => '', 'translatable' => TRUE); + // Some styles (for example table) should have field labels enabled by + // default. + if (!isset($this->view->style_plugin)) { + $this->view->initStyle(); + } + if ($this->view->style_plugin->defaultFieldLabels()) { + $options['label']['default'] = $this->definition['title']; + } $options['exclude'] = array('default' => FALSE, 'bool' => TRUE); $options['alter'] = array( 'contains' => array( diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.php index 68cdc5a..f0da4d4 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.php @@ -93,6 +93,13 @@ * @see StylePluginBase::renderGroupingSets() */ protected $groupingTheme = 'views_view_grouping'; + + /** + * Should field labels be enabled by default. + * + * @var bool + */ + protected $defaultFieldLabels = FALSE; /** * Overrides \Drupal\views\Plugin\views\PluginBase::init(). @@ -180,6 +187,15 @@ public function usesTokens() { } /** + * Return TRUE if this style enables field labels by default. + * + * @return bool + */ + public function defaultFieldLabels() { + return $this->defaultFieldLabels; + } + + /** * Return the token replaced row class for the specified row. */ public function getRowClass($row_index) { diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/style/Table.php b/core/modules/views/lib/Drupal/views/Plugin/views/style/Table.php index de5eef1..c2ecaaf 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/views/style/Table.php +++ b/core/modules/views/lib/Drupal/views/Plugin/views/style/Table.php @@ -51,6 +51,13 @@ class Table extends StylePluginBase { protected $usesRowClass = TRUE; /** + * Should field labels be enabled by default. + * + * @var bool + */ + protected $defaultFieldLabels = TRUE; + + /** * Contains the current active sort column. * @var string */ diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldWebTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldWebTest.php index 6d73636..3d23801 100644 --- a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldWebTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldWebTest.php @@ -330,6 +330,8 @@ public function testFieldClasses() { $id_field = $view->field['id']; $id_field->options['element_default_classes'] = FALSE; + // Setup some kind of label by default. + $id_field->options['label'] = $this->randomName(); $output = $view->preview(); $output = drupal_render($output); $this->assertFalse($this->xpathContent($output, '//div[contains(@class, :class)]', array(':class' => 'field-content'))); diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleTest.php index 13335e6..eb1aaa9 100644 --- a/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleTest.php @@ -127,12 +127,14 @@ function _testGrouping($stripped = FALSE) { 'table' => 'views_test_data', 'field' => 'name', 'relationship' => 'none', + 'label' => 'Name', ), 'job' => array( 'id' => 'job', 'table' => 'views_test_data', 'field' => 'job', 'relationship' => 'none', + 'label' => 'Job', ), 'age' => array( 'id' => 'age', diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/FieldTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/FieldTest.php new file mode 100644 index 0000000..2dc7faf --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/UI/FieldTest.php @@ -0,0 +1,46 @@ + 'Field UI', + 'description' => 'Tests the UI of field handlers.', + 'group' => 'Views UI', + ); + } + + /** + * Tests the field labels. + */ + public function testFieldLabel() { + // Create a view with unformatted style and make sure the fields have no + // labels by default. + $view = array(); + $view['human_name'] = $this->randomName(16); + $view['name'] = strtolower($this->randomName(16)); + $view['show[wizard_key]'] = 'node'; + $view['page[create]'] = TRUE; + $view['page[style][style_plugin]'] = 'default'; + $view['page[path]'] = $view['name']; + $this->drupalPost('admin/structure/views/add', $view, t('Save & exit')); + + $view = views_get_view($view['name']); + $view->initHandlers(); + $this->assertEqual($view->field['title']->options['label'], '', 'The field label for normal styles are empty.'); + } +} diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/StyleTableTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/StyleTableTest.php new file mode 100644 index 0000000..276b523 --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/UI/StyleTableTest.php @@ -0,0 +1,46 @@ + 'Style: Table UI', + 'description' => 'Tests the UI of views when using the table style.', + 'group' => 'Views UI', + ); + } + + /** + * Tests created a table style view. + */ + public function testWizard() { + // Create a new view and check that the first field has a label. + $view = array(); + $view['human_name'] = $this->randomName(16); + $view['name'] = strtolower($this->randomName(16)); + $view['show[wizard_key]'] = 'node'; + $view['page[create]'] = TRUE; + $view['page[style][style_plugin]'] = 'table'; + $view['page[path]'] = $view['name']; + $this->drupalPost('admin/structure/views/add', $view, t('Save & exit')); + + $view = views_get_view($view['name']); + $view->initHandlers(); + $this->assertEqual($view->field['title']->options['label'], 'Title', 'The field label for table styles is not empty.'); + } + +} diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_click_sort.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_click_sort.yml index 2dfc632..9101617 100644 --- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_click_sort.yml +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_click_sort.yml @@ -10,18 +10,21 @@ display: id: id table: views_test_data field: id + label: ID plugin_id: numeric provider: views_test_data name: id: name table: views_test_data field: name + label: Name plugin_id: string provider: views_test_data created: id: created table: views_test_data field: created + label: created plugin_id: date provider: views_test_data display_options: