You are here

public function CoreViewsExposedFilterDeriver::getDerivativeDefinitions in Core Views Facets 8

Gets the definition of all derivatives of a base plugin.

Parameters

array $base_plugin_definition: The definition array of the base plugin.

Return value

array An array of full derivative definitions keyed on derivative id.

Overrides DeriverInterface::getDerivativeDefinitions

See also

getDerivativeDefinition()

File

src/Plugin/facets/facet_source/CoreViewsExposedFilterDeriver.php, line 64

Class

CoreViewsExposedFilterDeriver
Derives a facet source plugin definition for views with exposed filters.

Namespace

Drupal\core_views_facets\Plugin\facets\facet_source

Code

public function getDerivativeDefinitions($base_plugin_definition) {
  if (!isset($this->derivatives[$this->basePluginId])) {
    $plugin_derivatives = [];

    /** @var \Drupal\views\Entity\View[] $all_views */
    $all_views = $this->viewStorage
      ->loadMultiple();
    foreach ($all_views as $view) {

      // Do not return results for disabled views.
      if (!$view
        ->status()) {
        continue;
      }
      $displays = $view
        ->get('display');
      foreach ($displays as $name => $display_info) {
        if ($display_info['display_plugin'] === 'page') {
          $view_executable = $view
            ->getExecutable();
          $view_executable
            ->setDisplay($name);
          if ($view_executable && $view_executable
            ->getQuery() instanceof Sql) {
            $exposed_filter_available = FALSE;
            foreach ($view_executable
              ->getHandlers('filter', $name) as $filter) {
              if (!empty($filter['exposed']) && $filter['exposed'] == TRUE) {
                $exposed_filter_available = TRUE;
              }
            }
            if (!$exposed_filter_available) {
              continue;
            }
            $machine_name = $view
              ->id() . '__' . $name;
            $plugin_derivatives[$machine_name] = [
              'id' => $this->basePluginId . ':' . $machine_name,
              'label' => $this
                ->t('Core view exposed filter: %view_name, display: %display_title', [
                '%view_name' => $view
                  ->label(),
                '%display_title' => $display_info['display_title'],
              ]),
              'description' => $this
                ->t('Provides a facet source.'),
              'display_id' => $machine_name,
              'config_dependencies' => [
                'config' => [
                  $view
                    ->getConfigDependencyName(),
                ],
              ],
              'view_id' => $view
                ->id(),
              'view_display' => $name,
            ] + $base_plugin_definition;
          }
        }
      }
    }
    $this->derivatives[$this->basePluginId] = $plugin_derivatives;
  }
  return $this->derivatives[$this->basePluginId];
}