search_api-8.x-1.15/src/Utility/PluginHelper.php
src/Utility/PluginHelper.php
<?php
namespace Drupal\search_api\Utility;
use Drupal\Component\Plugin\Exception\PluginException;
use Drupal\search_api\Datasource\DatasourcePluginManager;
use Drupal\search_api\IndexInterface;
use Drupal\search_api\Processor\ProcessorPluginManager;
use Drupal\search_api\SearchApiException;
use Drupal\search_api\Tracker\TrackerPluginManager;
/**
* Provides methods for creating search plugins.
*/
class PluginHelper implements PluginHelperInterface {
/**
* The datasource plugin manager.
*
* @var \Drupal\search_api\Datasource\DatasourcePluginManager
*/
protected $datasourcePluginManager;
/**
* The processor plugin manager.
*
* @var \Drupal\search_api\processor\ProcessorPluginManager
*/
protected $processorPluginManager;
/**
* The tracker plugin manager.
*
* @var \Drupal\search_api\tracker\TrackerPluginManager
*/
protected $trackerPluginManager;
/**
* Constructs a PluginHelper object.
*
* @param \Drupal\search_api\Datasource\DatasourcePluginManager $datasource_plugin_manager
* The datasource plugin manager.
* @param \Drupal\search_api\Processor\ProcessorPluginManager $processor_plugin_manager
* The processor plugin manager.
* @param \Drupal\search_api\Tracker\TrackerPluginManager $tracker_plugin_manager
* The tracker plugin manager.
*/
public function __construct(DatasourcePluginManager $datasource_plugin_manager, ProcessorPluginManager $processor_plugin_manager, TrackerPluginManager $tracker_plugin_manager) {
$this->datasourcePluginManager = $datasource_plugin_manager;
$this->processorPluginManager = $processor_plugin_manager;
$this->trackerPluginManager = $tracker_plugin_manager;
}
/**
* Creates a plugin object for the given index.
*
* @param \Drupal\search_api\IndexInterface $index
* The index for which to create the plugins.
* @param string $type
* The type of plugin to create: "datasource", "processor" or "tracker".
* @param string $plugin_id
* The plugin's ID.
* @param array $configuration
* (optional) The configuration to set for the plugin.
*
* @return \Drupal\search_api\Plugin\IndexPluginInterface
* The new plugin object.
*
* @throws \Drupal\search_api\SearchApiException
* Thrown if an unknown $type or $plugin_id is given.
*/
protected function createIndexPlugin(IndexInterface $index, $type, $plugin_id, array $configuration = []) {
if (!isset($this->{$type . "PluginManager"})) {
throw new SearchApiException("Unknown plugin type '$type'");
}
try {
$configuration['#index'] = $index;
return $this->{$type . "PluginManager"}->createInstance($plugin_id, $configuration);
}
catch (PluginException $e) {
throw new SearchApiException("Unknown $type plugin with ID '$plugin_id'");
}
}
/**
* Creates multiple plugin objects for the given index.
*
* @param \Drupal\search_api\IndexInterface $index
* The index for which to create the plugins.
* @param string $type
* The type of plugin to create: "datasource", "processor" or "tracker".
* @param string[]|null $plugin_ids
* (optional) The IDs of the plugins to create, or NULL to create instances
* for all known plugins of this type.
* @param array $configurations
* (optional) The configurations to set for the plugins, keyed by plugin ID.
* Missing configurations are either taken from the index's stored settings,
* if they are present there, or default to an empty array.
*
* @return \Drupal\search_api\Plugin\IndexPluginInterface[]
* The created plugin objects.
*
* @throws \Drupal\search_api\SearchApiException
* Thrown if an unknown $type or plugin ID is given.
*/
protected function createIndexPlugins(IndexInterface $index, $type, array $plugin_ids = NULL, array $configurations = []) {
if (!isset($this->{$type . "PluginManager"})) {
throw new SearchApiException("Unknown plugin type '$type'");
}
if ($plugin_ids === NULL) {
$plugin_ids = array_keys($this->{$type . "PluginManager"}->getDefinitions());
}
$plugins = [];
$index_settings = $index->get($type . '_settings');
foreach ($plugin_ids as $plugin_id) {
$configuration = [];
if (isset($configurations[$plugin_id])) {
$configuration = $configurations[$plugin_id];
}
elseif (isset($index_settings[$plugin_id])) {
$configuration = $index_settings[$plugin_id];
}
$plugins[$plugin_id] = $this->createIndexPlugin($index, $type, $plugin_id, $configuration);
}
return $plugins;
}
/**
* {@inheritdoc}
*/
public function createDatasourcePlugin(IndexInterface $index, $plugin_id, array $configuration = []) {
return $this->createIndexPlugin($index, 'datasource', $plugin_id, $configuration);
}
/**
* {@inheritdoc}
*/
public function createProcessorPlugin(IndexInterface $index, $plugin_id, array $configuration = []) {
return $this->createIndexPlugin($index, 'processor', $plugin_id, $configuration);
}
/**
* {@inheritdoc}
*/
public function createTrackerPlugin(IndexInterface $index, $plugin_id, array $configuration = []) {
return $this->createIndexPlugin($index, 'tracker', $plugin_id, $configuration);
}
/**
* {@inheritdoc}
*/
public function createDatasourcePlugins(IndexInterface $index, array $plugin_ids = NULL, array $configuration = []) {
return $this->createIndexPlugins($index, 'datasource', $plugin_ids, $configuration);
}
/**
* {@inheritdoc}
*/
public function createProcessorPlugins(IndexInterface $index, array $plugin_ids = NULL, array $configuration = []) {
return $this->createIndexPlugins($index, 'processor', $plugin_ids, $configuration);
}
/**
* {@inheritdoc}
*/
public function createTrackerPlugins(IndexInterface $index, array $plugin_ids = NULL, array $configuration = []) {
return $this->createIndexPlugins($index, 'tracker', $plugin_ids, $configuration);
}
}
