Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
drupal/melt_glossify / melt_glossify.tokens.inc
Size: Mime:
<?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 &lt;abbr&gt; tags for melt Glossify.'),
  ];
  $term['vocab:term'] = [
    'name' => t("Term abbreviation"),
    'description' => t("Wraps term in &lt;abbr&gt; 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) {

      // 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 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;
}