class Glossary in Search API AZ Glossary 8.3
Same name and namespace in other branches
- 8.4 src/Plugin/search_api/processor/Glossary.php \Drupal\search_api_glossary\Plugin\search_api\processor\Glossary
Adds the item's AZ to the indexed data.
Plugin annotation
@SearchApiProcessor(
id = "glossary",
label = @Translation("Glossary processor"),
description = @Translation("Exposes glossary computed fields to Search API."),
stages = {
"add_properties" = 99,
"pre_index_save" = 0,
"preprocess_index" = -20,
},
locked = false,
hidden = false,
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\search_api\Plugin\HideablePluginBase implements HideablePluginInterface
- class \Drupal\search_api\Plugin\ConfigurablePluginBase implements ConfigurablePluginInterface uses PluginDependencyTrait
- class \Drupal\search_api\Plugin\IndexPluginBase implements IndexPluginInterface
- class \Drupal\search_api\Processor\ProcessorPluginBase implements ProcessorInterface
- class \Drupal\search_api_glossary\Plugin\search_api\processor\Glossary implements PluginFormInterface uses PluginFormTrait
- class \Drupal\search_api\Processor\ProcessorPluginBase implements ProcessorInterface
- class \Drupal\search_api\Plugin\IndexPluginBase implements IndexPluginInterface
- class \Drupal\search_api\Plugin\ConfigurablePluginBase implements ConfigurablePluginInterface uses PluginDependencyTrait
- class \Drupal\search_api\Plugin\HideablePluginBase implements HideablePluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of Glossary
File
- src/
Plugin/ search_api/ processor/ Glossary.php, line 30
Namespace
Drupal\search_api_glossary\Plugin\search_api\processorView source
class Glossary extends ProcessorPluginBase implements PluginFormInterface {
use PluginFormTrait;
protected $targetFieldPrefix = 'glossaryaz_';
/**
* The data type helper.
*
* @var \Drupal\search_api\Utility\DataTypeHelperInterface|null
*/
protected $dataTypeHelper;
/**
* {@inheritdoc}
*/
public function getPropertyDefinitions(DatasourceInterface $datasource = NULL) {
$properties = [];
if (!$datasource) {
// Get glossary fields.
$glossary_fields = $this
->getConfig();
// Get original fields from index.
$fields = $this->index
->getFields();
// Loop through the saved config from
// Search API field settings form.
foreach ($glossary_fields as $name => $glossary_field) {
// If glossary is enabled on this field.
if (isset($glossary_field['glossary']) && $glossary_field['glossary'] == 1 && isset($fields[$name])) {
$definition = [
'label' => 'Glossary AZ - ' . Html::escape($fields[$name]
->getPrefixedLabel()),
'description' => 'Glossary AZ - ' . Html::escape($fields[$name]
->getPrefixedLabel()),
// ElasticSearch facets will need this field to be string.
'type' => 'string',
'processor_id' => $this
->getPluginId(),
// This will be a hidden field,
// not something a user can add/remove manually.
'hidden' => TRUE,
];
$new_field_name = $this
->makeFieldName($name);
$properties[$new_field_name] = new ProcessorProperty($definition);
}
}
}
return $properties;
}
/**
* {@inheritdoc}
*/
public function addFieldValues(ItemInterface $item) {
// TODO Dependency Inject.
$glossary_helper = \Drupal::service('search_api_glossary.helper');
$item_fields = $item
->getFields();
// Get glossary fields.
$glossary_fields_conf = $this
->getConfig();
// Loop through all fields.
foreach ($item_fields as $name => $field) {
// Filter out hidden fields
// and fields that do not match
// our required criteria.
// Finally check if this field has glossary enabled.
if ($field
->isHidden() == FALSE && $this
->testType($field
->getType()) && $this
->checkFieldName($name) == FALSE && isset($glossary_fields_conf[$name])) {
$glossary_field_conf = $glossary_fields_conf[$name]['glossary'];
// Check if source field exists
// and if glossary is enabled on this field.
if (isset($glossary_field_conf) && $glossary_field_conf == 1 && !empty($field
->getValues())) {
// Get the Parent field value.
$source_field_value = $field
->getValues()[0];
// Get target field name.
$glossary_field_name = $this
->makeFieldName($name);
// Calculated Glossary value.
$glossary_value = $glossary_helper
->glossaryGetter($source_field_value, $glossary_fields_conf[$name]['grouping']);
// Get target field.
$glossary_field = $item_fields[$glossary_field_name];
// Set the Target Glossary value.
if (empty($glossary_field
->getValues())) {
$glossary_field
->addValue($glossary_value);
}
}
}
}
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'field_enabled' => 0,
'grouping_defaults' => [
'grouping_other' => 'grouping_other',
'grouping_az' => 0,
'grouping_09' => 0,
],
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$fields = $this->index
->getFields();
$form['glossarytable'] = [
'#type' => 'table',
'#header' => [
$this
->t('Field'),
$this
->t('Glossary Grouping'),
],
];
foreach ($fields as $name => $field) {
// Filter out hidden fields
// and fields that do not match
// our required criteria.
if ($field
->isHidden() == FALSE && $this
->testType($field
->getType()) && $this
->checkFieldName($name) == FALSE) {
// Check the config if the field has been enabled?
$glossary_fields = $this
->getConfig();
$field_enabled = isset($glossary_fields[$name]['glossary']) ? $glossary_fields[$name]['glossary'] : $this->configuration['field_enabled'];
// Check the config if the field has been enabled?
$field_grouping = isset($glossary_fields[$name]['grouping']) ? $glossary_fields[$name]['grouping'] : $this->configuration['grouping_defaults'];
$form['glossarytable'][$name]['glossary'] = [
'#type' => 'checkbox',
'#title' => Html::escape($field
->getPrefixedLabel()),
'#default_value' => $field_enabled,
];
// Finally add the glossary grouping options per field.
$form['glossarytable'][$name]['grouping'] = [
'#type' => 'checkboxes',
'#description' => t('When grouping is enabled, individual values such as 1, 2, 3 will get grouped like "0-9"'),
'#options' => [
'grouping_az' => 'Group Alphabetic (A-Z)',
'grouping_09' => 'Group Numeric (0-9)',
'grouping_other' => 'Group Non Alpha Numeric (#)',
],
'#default_value' => $field_grouping,
'#required' => FALSE,
'#states' => [
'visible' => [
[
':input[name="processors[glossary][settings][glossarytable][' . $name . '][glossary]"]' => [
'checked' => TRUE,
],
],
],
],
];
}
}
return $form;
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$glossarytable = $form_state
->getValues('glossarytable');
$this
->setConfig($glossarytable);
}
/**
* {@inheritdoc}
*/
public function preIndexSave() {
// Get glossary fields.
$glossary_fields = $this
->getConfig();
// Get original fields from index.
$fields = $this->index
->getFields();
// Loop through the saved config from
// Search API field settings form.
foreach ($glossary_fields as $name => $glossary_field) {
// If glossary is enabled on this field.
if (isset($glossary_field['glossary']) && $glossary_field['glossary'] == 1 && isset($fields[$name])) {
// Automatically add field to index if processor is enabled.
$new_field_name = $this
->makeFieldName($name);
// ElasticSearch facets will need this field to be string.
$field = $this
->ensureField(NULL, $new_field_name, 'string');
// Hide the field.
$field
->setHidden();
}
}
}
/**
* {@inheritdoc}
*/
protected function testType($type) {
return $this
->getDataTypeHelper()
->isTextType($type, [
'text',
'string',
'integer',
]);
}
/**
* Retrieves the data type helper.
*
* @return \Drupal\search_api\Utility\DataTypeHelperInterface
* The data type helper.
*/
public function getDataTypeHelper() {
return $this->dataTypeHelper ?: \Drupal::service('search_api.data_type_helper');
}
/**
* Return the glossary name of source field.
*
* @param string $name
* Name of the original field.
*
* @return string
* Name of the glossary field.
*/
protected function makeFieldName($name) {
return $this->targetFieldPrefix . $name;
}
/**
* Return the name of source field.
*
* @param string $name
* Name of the glossary field.
*
* @return string
* Name of the original field.
*/
public function getFieldName($name) {
return str_replace($this->targetFieldPrefix, '', $name);
}
/**
* Check for Glossary field.
*
* Check if the supplied name matches the prefix
* This is used to determine if a given field is a
* glossary field or not.
*
* @param string $name
* Name of the field to check.
*
* @return bool
* Is the supplied field glossary or not?
*/
public function checkFieldName($name) {
if (substr($name, 0, strlen($this->targetFieldPrefix)) === $this->targetFieldPrefix) {
return TRUE;
}
return FALSE;
}
/**
* Wrapper to get config.
*
* @return array
* Configuration array.
*/
public function getConfig() {
if (isset($this->configuration['glossarytable'])) {
return unserialize($this->configuration['glossarytable'])['glossarytable'];
}
}
/**
* Wrapper to save config.
*
* @param array $configuration
* Configuration array.
*/
protected function setConfig(array $configuration) {
$this
->setConfiguration([
'glossarytable' => serialize($configuration),
]);
}
}
Members
Name![]() |
Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ConfigurablePluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
ConfigurablePluginBase:: |
protected | function | Calculates and adds dependencies of a specific plugin instance. | |
ConfigurablePluginBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
ConfigurablePluginBase:: |
public | function |
Returns the plugin's description. Overrides ConfigurablePluginInterface:: |
|
ConfigurablePluginBase:: |
protected | function | Calculates and returns dependencies of a specific plugin instance. | |
ConfigurablePluginBase:: |
public | function |
Returns the label for use on the administration pages. Overrides ConfigurablePluginInterface:: |
|
ConfigurablePluginBase:: |
protected | function | Wraps the module handler. | |
ConfigurablePluginBase:: |
public | function |
Informs the plugin that some of its dependencies are being removed. Overrides ConfigurablePluginInterface:: |
5 |
ConfigurablePluginBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
3 |
ConfigurablePluginBase:: |
protected | function | Wraps the theme handler. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
DependencyTrait:: |
protected | property | The object's dependencies. | |
DependencyTrait:: |
protected | function | Adds multiple dependencies. | |
DependencyTrait:: |
protected | function | Adds a dependency. | |
Glossary:: |
protected | property | The data type helper. | |
Glossary:: |
protected | property | ||
Glossary:: |
public | function |
Adds the values of properties defined by this processor to the item. Overrides ProcessorPluginBase:: |
|
Glossary:: |
public | function |
Form constructor. Overrides PluginFormInterface:: |
|
Glossary:: |
public | function | Check for Glossary field. | |
Glossary:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurablePluginBase:: |
|
Glossary:: |
public | function | Wrapper to get config. | |
Glossary:: |
public | function | Retrieves the data type helper. | |
Glossary:: |
public | function | Return the name of source field. | |
Glossary:: |
public | function |
Retrieves the properties this processor defines for the given datasource. Overrides ProcessorPluginBase:: |
|
Glossary:: |
protected | function | Return the glossary name of source field. | |
Glossary:: |
public | function |
Preprocesses the search index entity before it is saved. Overrides ProcessorPluginBase:: |
|
Glossary:: |
protected | function | Wrapper to save config. | |
Glossary:: |
public | function |
Form submission handler. Overrides PluginFormTrait:: |
|
Glossary:: |
protected | function | ||
IndexPluginBase:: |
protected | property | The index this processor is configured for. | |
IndexPluginBase:: |
public | function |
Retrieves the index this plugin is configured for. Overrides IndexPluginInterface:: |
|
IndexPluginBase:: |
public | function |
Sets the index this plugin is configured for. Overrides IndexPluginInterface:: |
|
IndexPluginBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides ConfigurablePluginBase:: |
2 |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginDependencyTrait:: |
protected | function | Calculates and adds dependencies of a specific plugin instance. Aliased as: traitCalculatePluginDependencies | 1 |
PluginDependencyTrait:: |
protected | function | Calculates and returns dependencies of a specific plugin instance. Aliased as: traitGetPluginDependencies | |
PluginDependencyTrait:: |
protected | function | Wraps the module handler. Aliased as: traitModuleHandler | 1 |
PluginDependencyTrait:: |
protected | function | Wraps the theme handler. Aliased as: traitThemeHandler | 1 |
PluginFormTrait:: |
public | function | Form validation handler. | 2 |
ProcessorInterface:: |
constant | Processing stage: add properties. | ||
ProcessorInterface:: |
constant | Processing stage: alter indexed items. | ||
ProcessorInterface:: |
constant | Processing stage: postprocess query. | ||
ProcessorInterface:: |
constant | Processing stage: preprocess index. | ||
ProcessorInterface:: |
constant | Processing stage: preprocess query. | ||
ProcessorInterface:: |
constant | Processing stage: preprocess index. | ||
ProcessorPluginBase:: |
protected | property | The fields helper. | 1 |
ProcessorPluginBase:: |
public | function |
Alter the items to be indexed. Overrides ProcessorInterface:: |
3 |
ProcessorPluginBase:: |
public static | function |
Creates an instance of the plugin. Overrides ConfigurablePluginBase:: |
8 |
ProcessorPluginBase:: |
protected | function | Ensures that a field with certain properties is indexed on the index. | |
ProcessorPluginBase:: |
protected | function | Finds a certain field in the index. | |
ProcessorPluginBase:: |
public | function | Retrieves the fields helper. | 1 |
ProcessorPluginBase:: |
public | function |
Returns the weight for a specific processing stage. Overrides ProcessorInterface:: |
|
ProcessorPluginBase:: |
public | function |
Determines whether this plugin should be hidden in the UI. Overrides HideablePluginBase:: |
|
ProcessorPluginBase:: |
public | function |
Determines whether this processor should always be enabled. Overrides ProcessorInterface:: |
|
ProcessorPluginBase:: |
public | function |
Postprocess search results before they are returned by the query. Overrides ProcessorInterface:: |
2 |
ProcessorPluginBase:: |
public | function |
Preprocesses search items for indexing. Overrides ProcessorInterface:: |
5 |
ProcessorPluginBase:: |
public | function |
Preprocesses a search query. Overrides ProcessorInterface:: |
4 |
ProcessorPluginBase:: |
public | function |
Determines whether re-indexing is required after a settings change. Overrides ProcessorInterface:: |
|
ProcessorPluginBase:: |
public | function | Sets the fields helper. | 1 |
ProcessorPluginBase:: |
public | function |
Sets the weight for a specific processing stage. Overrides ProcessorInterface:: |
|
ProcessorPluginBase:: |
public static | function |
Checks whether this processor is applicable for a certain index. Overrides ProcessorInterface:: |
8 |
ProcessorPluginBase:: |
public | function |
Checks whether this processor implements a particular stage. Overrides ProcessorInterface:: |
2 |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |