Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
28.57% |
2 / 7 |
CRAP | |
33.33% |
17 / 51 |
| ViewsBlockBase | |
0.00% |
0 / 1 |
|
28.57% |
2 / 7 |
72.07 | |
33.33% |
17 / 51 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
9 / 9 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| blockAccess | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| defaultConfiguration | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| buildConfigurationForm | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 20 |
|||
| blockSubmit | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
| addContextualLinks | |
0.00% |
0 / 1 |
3.02 | |
87.50% |
7 / 8 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\views\Plugin\Block\ViewsBlockBase. | |
| */ | |
| namespace Drupal\views\Plugin\Block; | |
| use Drupal\Core\Access\AccessResult; | |
| use Drupal\Core\Block\BlockBase; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\Core\Plugin\ContainerFactoryPluginInterface; | |
| use Drupal\views\ViewExecutableFactory; | |
| use Drupal\Core\Entity\EntityStorageInterface; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| use Drupal\Core\Session\AccountInterface; | |
| /** | |
| * Base class for Views block plugins. | |
| */ | |
| abstract class ViewsBlockBase extends BlockBase implements ContainerFactoryPluginInterface { | |
| /** | |
| * The View executable object. | |
| * | |
| * @var \Drupal\views\ViewExecutable | |
| */ | |
| protected $view; | |
| /** | |
| * The display ID being used for this View. | |
| * | |
| * @var string | |
| */ | |
| protected $displayID; | |
| /** | |
| * Indicates whether the display was successfully set. | |
| * | |
| * @var bool | |
| */ | |
| protected $displaySet; | |
| /** | |
| * The current user. | |
| * | |
| * @var \Drupal\Core\Session\AccountInterface | |
| */ | |
| protected $user; | |
| /** | |
| * Constructs a \Drupal\views\Plugin\Block\ViewsBlockBase object. | |
| * | |
| * @param array $configuration | |
| * A configuration array containing information about the plugin instance. | |
| * @param string $plugin_id | |
| * The plugin_id for the plugin instance. | |
| * @param mixed $plugin_definition | |
| * The plugin implementation definition. | |
| * @param \Drupal\views\ViewExecutableFactory $executable_factory | |
| * The view executable factory. | |
| * @param \Drupal\Core\Entity\EntityStorageInterface $storage | |
| * The views storage. | |
| * @param \Drupal\Core\Session\AccountInterface $user | |
| * The current user. | |
| */ | |
| public function __construct(array $configuration, $plugin_id, $plugin_definition, ViewExecutableFactory $executable_factory, EntityStorageInterface $storage, AccountInterface $user) { | |
| $this->pluginId = $plugin_id; | |
| $delta = $this->getDerivativeId(); | |
| list($name, $this->displayID) = explode('-', $delta, 2); | |
| // Load the view. | |
| $view = $storage->load($name); | |
| $this->view = $executable_factory->get($view); | |
| $this->displaySet = $this->view->setDisplay($this->displayID); | |
| $this->user = $user; | |
| parent::__construct($configuration, $plugin_id, $plugin_definition); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { | |
| return new static( | |
| $configuration, $plugin_id, $plugin_definition, | |
| $container->get('views.executable'), | |
| $container->get('entity.manager')->getStorage('view'), | |
| $container->get('current_user') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function blockAccess(AccountInterface $account) { | |
| if ($this->view->access($this->displayID)) { | |
| $access = AccessResult::allowed(); | |
| } | |
| else { | |
| $access = AccessResult::forbidden(); | |
| } | |
| return $access; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function defaultConfiguration() { | |
| return array('views_label' => ''); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildConfigurationForm(array $form, FormStateInterface $form_state) { | |
| $form = parent::buildConfigurationForm($form, $form_state); | |
| // Set the default label to '' so the views internal title is used. | |
| $form['label']['#default_value'] = ''; | |
| $form['label']['#access'] = FALSE; | |
| // Unset the machine_name provided by BlockForm. | |
| unset($form['id']['#machine_name']['source']); | |
| // Prevent users from changing the auto-generated block machine_name. | |
| $form['id']['#access'] = FALSE; | |
| $form['#pre_render'][] = '\Drupal\views\Plugin\views\PluginBase::preRenderAddFieldsetMarkup'; | |
| // 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'] = 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), | |
| ), | |
| ), | |
| ), | |
| '#fieldset' => 'views_label_fieldset', | |
| ); | |
| if ($this->view->storage->access('edit') && \Drupal::moduleHandler()->moduleExists('views_ui')) { | |
| $form['views_label']['#description'] = $this->t('Changing the title here means it cannot be dynamically altered anymore. (Try changing it directly in <a href=":url">@name</a>.)', array(':url' => \Drupal::url('entity.view.edit_display_form', array('view' => $this->view->storage->id(), 'display_id' => $this->displayID)), '@name' => $this->view->storage->label())); | |
| } | |
| else { | |
| $form['views_label']['#description'] = $this->t('Changing the title here means it cannot be dynamically altered anymore.'); | |
| } | |
| return $form; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function blockSubmit($form, FormStateInterface $form_state) { | |
| if (!$form_state->isValueEmpty('views_label_checkbox')) { | |
| $this->configuration['views_label'] = $form_state->getValue('views_label'); | |
| } | |
| else { | |
| $this->configuration['views_label'] = ''; | |
| } | |
| $form_state->unsetValue('views_label_checkbox'); | |
| } | |
| /** | |
| * Converts Views block content to a renderable array with contextual links. | |
| * | |
| * @param string|array $output | |
| * An string|array representing the block. This will be modified to be a | |
| * renderable array, containing the optional '#contextual_links' property (if | |
| * there are any contextual links associated with the block). | |
| * @param string $block_type | |
| * The type of the block. If it's 'block' it's a regular views display, | |
| * but 'exposed_filter' exist as well. | |
| */ | |
| protected function addContextualLinks(&$output, $block_type = 'block') { | |
| // Do not add contextual links to an empty block. | |
| if (!empty($output)) { | |
| // Contextual links only work on blocks whose content is a renderable | |
| // array, so if the block contains a string of already-rendered markup, | |
| // convert it to an array. | |
| if (is_string($output)) { | |
| $output = array('#markup' => $output); | |
| } | |
| // views_add_contextual_links() needs the following information in | |
| // order to be attached to the view. | |
| $output['#view_id'] = $this->view->storage->id(); | |
| $output['#view_display_show_admin_links'] = $this->view->getShowAdminLinks(); | |
| $output['#view_display_plugin_id'] = $this->view->display_handler->getPluginId(); | |
| views_add_contextual_links($output, $block_type, $this->displayID); | |
| } | |
| } | |
| } |