Chris@0: get('entity.manager')->getStorage('view') Chris@0: ); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Constructs a ViewsBlock object. Chris@0: * Chris@0: * @param string $base_plugin_id Chris@0: * The base plugin ID. Chris@0: * @param \Drupal\Core\Entity\EntityStorageInterface $view_storage Chris@0: * The entity storage to load views. Chris@0: */ Chris@0: public function __construct($base_plugin_id, EntityStorageInterface $view_storage) { Chris@0: $this->basePluginId = $base_plugin_id; Chris@0: $this->viewStorage = $view_storage; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getDerivativeDefinition($derivative_id, $base_plugin_definition) { Chris@0: if (!empty($this->derivatives) && !empty($this->derivatives[$derivative_id])) { Chris@0: return $this->derivatives[$derivative_id]; Chris@0: } Chris@0: $this->getDerivativeDefinitions($base_plugin_definition); Chris@0: return $this->derivatives[$derivative_id]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function getDerivativeDefinitions($base_plugin_definition) { Chris@0: // Check all Views for block displays. Chris@0: foreach ($this->viewStorage->loadMultiple() as $view) { Chris@0: // Do not return results for disabled views. Chris@0: if (!$view->status()) { Chris@0: continue; Chris@0: } Chris@0: $executable = $view->getExecutable(); Chris@0: $executable->initDisplay(); Chris@0: foreach ($executable->displayHandlers as $display) { Chris@0: /** @var \Drupal\views\Plugin\views\display\DisplayPluginInterface $display */ Chris@0: // Add a block plugin definition for each block display. Chris@0: if (isset($display) && !empty($display->definition['uses_hook_block'])) { Chris@0: $delta = $view->id() . '-' . $display->display['id']; Chris@0: Chris@0: $admin_label = $display->getOption('block_description'); Chris@0: if (empty($admin_label)) { Chris@0: if ($display->display['display_title'] == $display->definition['title']) { Chris@0: $admin_label = $view->label(); Chris@0: } Chris@0: else { Chris@0: // Allow translators to control the punctuation. Plugin Chris@0: // definitions get cached, so use TranslatableMarkup() instead of Chris@0: // t() to avoid double escaping when $admin_label is rendered Chris@0: // during requests that use the cached definition. Chris@0: $admin_label = new TranslatableMarkup('@view: @display', ['@view' => $view->label(), '@display' => $display->display['display_title']]); Chris@0: } Chris@0: } Chris@0: Chris@0: $this->derivatives[$delta] = [ Chris@0: 'category' => $display->getOption('block_category'), Chris@0: 'admin_label' => $admin_label, Chris@0: 'config_dependencies' => [ Chris@0: 'config' => [ Chris@0: $view->getConfigDependencyName(), Chris@0: ], Chris@0: ], Chris@0: ]; Chris@0: Chris@0: // Look for arguments and expose them as context. Chris@0: foreach ($display->getHandlers('argument') as $argument_name => $argument) { Chris@0: /** @var \Drupal\views\Plugin\views\argument\ArgumentPluginBase $argument */ Chris@0: if ($context_definition = $argument->getContextDefinition()) { Chris@18: $this->derivatives[$delta]['context_definitions'][$argument_name] = $context_definition; Chris@0: } Chris@0: } Chris@0: Chris@0: $this->derivatives[$delta] += $base_plugin_definition; Chris@0: } Chris@0: } Chris@0: } Chris@0: return $this->derivatives; Chris@0: } Chris@0: Chris@0: }