diff --git a/core/modules/block/lib/Drupal/block/Annotation/Block.php b/core/modules/block/lib/Drupal/block/Annotation/Block.php index 62541ab..64987e6 100644 --- a/core/modules/block/lib/Drupal/block/Annotation/Block.php +++ b/core/modules/block/lib/Drupal/block/Annotation/Block.php @@ -30,6 +30,6 @@ class Block extends Plugin { * * @ingroup plugin_translatable */ - public $admin_label; + public $admin_label = ''; } diff --git a/core/modules/block/lib/Drupal/block/Entity/Block.php b/core/modules/block/lib/Drupal/block/Entity/Block.php index 44fa169..0298f44 100644 --- a/core/modules/block/lib/Drupal/block/Entity/Block.php +++ b/core/modules/block/lib/Drupal/block/Entity/Block.php @@ -121,7 +121,8 @@ public function getPlugin() { */ public function label($langcode = NULL) { $settings = $this->get('settings'); - return $settings['label']; + $definition = $this->getPlugin()->getPluginDefinition(); + return $settings['label'] ?: $definition['admin_label']; } /** diff --git a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php index 3f3fe30..9628826 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php +++ b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php @@ -46,7 +46,7 @@ public function build() { * {@inheritdoc} */ public function defaultConfiguration() { - $settings = array(); + $settings = parent::defaultConfiguration(); if ($this->displaySet) { return $this->view->display_handler->blockSettings($settings); diff --git a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlockBase.php b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlockBase.php index e20f146..7e47d78 100644 --- a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlockBase.php +++ b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlockBase.php @@ -87,6 +87,16 @@ public function access(AccountInterface $account) { /** * {@inheritdoc} */ + public function defaultConfiguration() { + $settings = array(); + $settings['views_label'] = ''; + + return $settings; + } + + /** + * {@inheritdoc} + */ public function buildConfigurationForm(array $form, array &$form_state) { $form = parent::buildConfigurationForm($form, $form_state); @@ -94,10 +104,73 @@ public function buildConfigurationForm(array $form, array &$form_state) { $form['label']['#default_value'] = ''; $form['label']['#access'] = FALSE; + // Unset the machine_name provided by BlockFormController. + unset($form['id']['#machine_name']['source']); + // Load the Views plugin object using form_state array and create a + // Prevent users from changing the auto-generated block machine_name. + $form['id']['#access'] = FALSE; + + // Allow to override the label on the actual page. + $form['views_label_checkbox'] = array( + '#type' => 'checkbox', + '#title' => $this->t('Override title'), + '#default_value' => !empty($this->configuration['views_label']), + ); + + $form['views_label_fieldset'] = array( + '#type' => 'fieldset', + '#states' => array( + 'visible' => array( + array( + ':input[name="settings[views_label_checkbox]"]' => array('checked' => TRUE), + ), + ), + ), + ); + + $form['views_label_fieldset']['views_label_warning'] = array( + '#markup' => $this->t('
In most cases you better change the title directly on the view. Overriding the title here will remove dynamic title support from arguments for example.
'), + '#type' => 'item', + '#states' => array( + 'visible' => array( + array( + ':input[name="settings[views_label_checkbox]"]' => array('checked' => TRUE), + ), + ), + ), + ); + + $form['views_label_fieldset']['views_label'] = array( + '#title' => $this->t('Title'), + '#type' => 'textfield', + '#default_value' => $this->configuration['views_label'] ?: $this->view->getTitle(), + '#states' => array( + 'visible' => array( + array( + ':input[name="settings[views_label_checkbox]"]' => array('checked' => TRUE), + ), + ), + ), + ); + + + return $form; } /** + * {@inheritdoc} + */ + public function blockSubmit($form, &$form_state) { + if (!empty($form_state['values']['views_label_checkbox'])) { + $this->configuration['views_label'] = $form_state['values']['label']; + } + else { + $this->configuration['views_label'] = ''; + } + } + + /** * Converts Views block content to a renderable array with contextual links. * * @param string|array $output