Repository URL to install this package:
|
Version:
1.1.0 ▾
|
drupal/melt_glossify
/
melt_glossify.tokens.inc
|
|---|
<?php
/**
* @file
* For melt Glossify tokens.
*/
use Drupal\Core\Render\BubbleableMetadata;
use Drupal\Core\Render\Markup;
/**
* Implements hook_token_info().
*/
function melt_glossify_token_info() {
$type = [
'name' => t('melt Glossify'),
'description' => t('Converts tokens to <abbr> tags for melt Glossify.'),
];
$term['vocab:term'] = [
'name' => t("Term abbreviation"),
'description' => t("Wraps term in <abbr> tag if found. Replace <b>vocab</b> with vocabulary machine name and <b>term</b> with term name or id."),
];
return [
'types' => ['meltglossify' => $type],
'tokens' => ['meltglossify' => $term],
];
}
/**
* Implements hook_tokens().
*/
function melt_glossify_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
$replacements = [];
if ($type == 'meltglossify') {
foreach ($tokens as $name => $original) {
// Check to see if we're passing a label override
// Examples: [meltglossify:term:?New Label] or [meltglossify:vocab:term:?New Label]
$parts = explode(':?', $name);
$labelOverride = FALSE;
if (count($parts) === 2) {
list($name, $labelOverride) = $parts;
}
// Split apart [meltglossify:vocab:term] or [meltglossify:term]
// to get the vocabulary and term.
$parts = explode(':', $name);
$vocab = NULL;
$term = NULL;
$termDefinition = NULL;
$termName = NULL;
// Handle [meltglossify:vocab:term] or [meltglossify:term] scenarios.
if (count($parts) === 2) {
$vocab = $parts[0];
$termName = $parts[1];
if ($term = taxonomy_term_load_multiple_by_name($termName, $vocab)) {
$term = reset($term);
}
else {
Drupal::logger('melt_glossify')->info('Did not find term based on values given to token: @vocab:@termName', [
'@vocab' => $vocab,
'@termName' => $termName,
]);
}
}
else {
$termName = $parts[0];
if ($term = taxonomy_term_load_multiple_by_name($termName)) {
$term = reset($term);
}
else {
Drupal::logger('melt_glossify')->info('Did not find term based on values given to token: @termName', [
'@termName' => $termName,
]);
}
}
// If no term is found, then exit immediately and return the term the
// user provided as the $replacement value.
if (empty($term)) {
$replacements[$original] = $termName;
return $replacements;
}
$termDefinition = $term->getDescription();
if ($labelOverride) {
$termName = $labelOverride;
}
// If we find a defintion, wrap the term in an `<abbr>` tag
// and give the value of the `title` attribute the term definition.
if (!empty($termDefinition)) {
$abbr = [
'#markup' => Markup::create("<abbr title='$termDefinition'>$termName</abbr>"),
];
$replacements[$original] = \Drupal::service('renderer')->render($abbr);
}
else {
$replacements[$original] = $termName;
}
}
}
return $replacements;
}