search_api_autocomplete-8.x-1.x-dev/src/Plugin/search_api_autocomplete/search/ViewsDeriver.php
src/Plugin/search_api_autocomplete/search/ViewsDeriver.php
<?php
namespace Drupal\search_api_autocomplete\Plugin\search_api_autocomplete\search;
use Drupal\Component\Plugin\Exception\PluginException;
use Drupal\search_api\IndexInterface;
use Drupal\search_api\Plugin\views\query\SearchApiQuery;
use Drupal\search_api_autocomplete\Search\SearchPluginDeriverBase;
/**
* Derives a search plugin definition for every view.
*
* @see \Drupal\search_api_autocomplete\Plugin\search_api_autocomplete\search\Views
*/
class ViewsDeriver extends SearchPluginDeriverBase {
/**
* {@inheritdoc}
*/
public function getDerivativeDefinitions($base_plugin_definition) {
if (!isset($this->derivatives)) {
$this->derivatives = [];
try {
/** @var \Drupal\Core\Entity\EntityStorageInterface $views_storage */
$views_storage = $this->getEntityTypeManager()->getStorage('view');
}
catch (PluginException $e) {
return $this->derivatives;
}
/** @var \Drupal\views\ViewEntityInterface $view */
foreach ($views_storage->loadMultiple() as $view) {
$index = SearchApiQuery::getIndexFromTable($view->get('base_table'));
if (!($index instanceof IndexInterface)) {
continue;
}
$this->derivatives[$view->id()] = [
'label' => $view->label(),
'index' => $index->id(),
] + $base_plugin_definition;
}
}
return $this->derivatives;
}
}
