class TaxonomyTooltip in Glossify 8
Filter to find and process found taxonomy terms in the fields value.
Plugin annotation
@Filter(
id = "glossify_taxonomy",
title = @Translation("Tooltips with taxonomy"),
type = Drupal\filter\Plugin\FilterInterface::TYPE_HTML_RESTRICTOR,
settings = {
"glossify_taxonomy_case_sensitivity" = TRUE,
"glossify_taxonomy_first_only" = TRUE,
"glossify_taxonomy_type" = "tooltips",
"glossify_taxonomy_vocabs" = NULL,
"glossify_taxonomy_urlpattern" = "/taxonomy/term/[id]",
},
weight = -10
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\filter\Plugin\FilterBase implements FilterInterface
- class \Drupal\glossify\GlossifyBase
- class \Drupal\glossify_taxonomy\Plugin\Filter\TaxonomyTooltip
- class \Drupal\glossify\GlossifyBase
- class \Drupal\filter\Plugin\FilterBase implements FilterInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of TaxonomyTooltip
File
- modules/
glossify_taxonomy/ src/ Plugin/ Filter/ TaxonomyTooltip.php, line 27
Namespace
Drupal\glossify_taxonomy\Plugin\FilterView source
class TaxonomyTooltip extends GlossifyBase {
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$vocab_options = [];
$vocabularies = Vocabulary::loadMultiple();
foreach ($vocabularies as $vocab) {
$vocab_options[$vocab
->id()] = $vocab
->get('name');
}
$form['glossify_taxonomy_case_sensitivity'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Case sensitive'),
'#description' => $this
->t('Whether or not the match is case sensitive.'),
'#default_value' => $this->settings['glossify_taxonomy_case_sensitivity'],
];
$form['glossify_taxonomy_first_only'] = [
'#type' => 'checkbox',
'#title' => $this
->t('First match only'),
'#description' => $this
->t('Match and link only the first occurance per field.'),
'#default_value' => $this->settings['glossify_taxonomy_first_only'],
];
$form['glossify_taxonomy_type'] = [
'#type' => 'radios',
'#title' => $this
->t('Type'),
'#required' => TRUE,
'#options' => [
'tooltips' => $this
->t('Tooltips'),
'links' => $this
->t('Links'),
'tooltips_links' => $this
->t('Tooltips and links'),
],
'#description' => $this
->t('How to show matches in content. Description as HTML5 tooltip (abbr element), link to description or both.'),
'#default_value' => $this->settings['glossify_taxonomy_type'],
];
$form['glossify_taxonomy_vocabs'] = [
'#type' => 'checkboxes',
'#multiple' => TRUE,
'#element_validate' => [
[
get_class($this),
'validateTaxonomyVocabs',
],
],
'#title' => $this
->t('Taxonomy vocabularies'),
'#description' => $this
->t('Select the taxonomy vocabularies you want to use term names from to link their term page.'),
'#options' => $vocab_options,
'#default_value' => explode(';', $this->settings['glossify_taxonomy_vocabs']),
];
$form['glossify_taxonomy_urlpattern'] = [
'#type' => 'textfield',
'#title' => $this
->t('URL pattern'),
'#description' => $this
->t('Url pattern, used for linking matched words. Accepts "[id]" as token. Example: "/taxonomy/term/[id]"'),
'#default_value' => $this->settings['glossify_taxonomy_urlpattern'],
];
return $form;
}
/**
* Validation callback for glossify_taxonomy_vocabs.
*
* Make the field required if the filter is enabled.
*
* @param array $element
* The element being processed.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form.
* @param array $complete_form
* The complete form structure.
*/
public static function validateTaxonomyVocabs(&$element, FormStateInterface $form_state, &$complete_form) {
$values = $form_state
->getValues();
// Make taxonomy_vocabs required if the filter is enabled.
if (!empty($values['filters']['glossify_taxonomy']['status'])) {
$field_values = array_filter($values['filters']['glossify_taxonomy']['settings']['glossify_taxonomy_vocabs']);
if (empty($field_values)) {
$element['#required'] = TRUE;
$form_state
->setError($element, t('%field is required.', [
'%field' => $element['#title'],
]));
}
}
}
/**
* {@inheritdoc}
*/
public function process($text, $langcode) {
// Get vocabularies.
$vocabs = explode(';', $this->settings['glossify_taxonomy_vocabs']);
// Let other modules override $vocabs.
\Drupal::moduleHandler()
->alter('glossify_taxonomy_vocabs', $vocabs);
if (count($vocabs)) {
$terms = [];
// Get taxonomyterm data.
$query = \Drupal::database()
->select('taxonomy_term_field_data', 'tfd');
$query
->addfield('tfd', 'tid', 'id');
$query
->addfield('tfd', 'name');
$query
->addfield('tfd', 'name', 'name_norm');
$query
->addField('tfd', 'description__value', 'tip');
$query
->condition('tfd.vid', $vocabs, 'IN');
$query
->condition('tfd.langcode', $langcode);
$query
->orderBy('name_norm', 'DESC');
$results = $query
->execute()
->fetchAllAssoc('name_norm');
// Build terms array.
foreach ($results as $result) {
// Make name_norm lowercase, it seems not possible in PDO query?
if (!$this->settings['glossify_taxonomy_case_sensitivity']) {
$result->name_norm = strtolower($result->name_norm);
}
$terms[$result->name_norm] = $result;
}
// Process text.
if (count($terms) > 0) {
$text = $this
->parseTooltipMatch($text, $terms, $this->settings['glossify_taxonomy_case_sensitivity'], $this->settings['glossify_taxonomy_first_only'], $this->settings['glossify_taxonomy_type'], $this->settings['glossify_taxonomy_urlpattern']);
}
}
return new FilterProcessResult($text);
}
/**
* {@inheritdoc}
*/
public function setConfiguration(array $configuration) {
if (isset($configuration['status'])) {
$this->status = (bool) $configuration['status'];
}
if (isset($configuration['weight'])) {
$this->weight = (int) $configuration['weight'];
}
if (isset($configuration['settings'])) {
// Workaround for not accepting arrays in config schema.
if (is_array($configuration['settings']['glossify_taxonomy_vocabs'])) {
$glossify_taxonomy_vocabs = array_filter($configuration['settings']['glossify_taxonomy_vocabs']);
$configuration['settings']['glossify_taxonomy_vocabs'] = implode(';', $glossify_taxonomy_vocabs);
}
$this->settings = (array) $configuration['settings'];
}
return $this;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
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 | |
FilterBase:: |
public | property | The name of the provider that owns this filter. | |
FilterBase:: |
public | property | An associative array containing the configured settings of this filter. | |
FilterBase:: |
public | property | A Boolean indicating whether this filter is enabled. | |
FilterBase:: |
public | property | The weight of this filter compared to others in a filter collection. | |
FilterBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
1 |
FilterBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
|
FilterBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
FilterBase:: |
public | function |
Returns the administrative description for this filter plugin. Overrides FilterInterface:: |
|
FilterBase:: |
public | function |
Returns HTML allowed by this filter's configuration. Overrides FilterInterface:: |
4 |
FilterBase:: |
public | function |
Returns the administrative label for this filter plugin. Overrides FilterInterface:: |
|
FilterBase:: |
public | function |
Returns the processing type of this filter plugin. Overrides FilterInterface:: |
|
FilterBase:: |
public | function |
Prepares the text for processing. Overrides FilterInterface:: |
|
FilterBase:: |
public | function |
Generates a filter's tip. Overrides FilterInterface:: |
9 |
FilterBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |
4 |
FilterInterface:: |
constant | HTML tag and attribute restricting filters to prevent XSS attacks. | ||
FilterInterface:: |
constant | Non-HTML markup language filters that generate HTML. | ||
FilterInterface:: |
constant | Irreversible transformation filters. | ||
FilterInterface:: |
constant | Reversible transformation filters. | ||
GlossifyBase:: |
protected | function | Get current path. | 1 |
GlossifyBase:: |
protected | function | Convert terms in text to links. | |
GlossifyBase:: |
protected | function | Render link for found match. | 1 |
GlossifyBase:: |
protected | function | Render tip for found match. | 1 |
GlossifyBase:: |
private | function | Cleanup and truncate tip text. | |
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. | |
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. | |
TaxonomyTooltip:: |
public | function |
Performs the filter processing. Overrides FilterInterface:: |
|
TaxonomyTooltip:: |
public | function |
Sets the configuration for this plugin instance. Overrides FilterBase:: |
|
TaxonomyTooltip:: |
public | function |
Generates a filter's settings form. Overrides FilterBase:: |
|
TaxonomyTooltip:: |
public static | function | Validation callback for glossify_taxonomy_vocabs. |