You are here

function purge_tokens_tokens in Purge 8.3

Implements hook_tokens().

File

modules/purge_tokens/purge_tokens.module, line 60
Purge Tokens - Adds tokens support for external cache invalidation.

Code

function purge_tokens_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
  $replacements = [];

  // Replace tokens for individual invalidation objects.
  if ($type == 'invalidation' && $data['invalidation'] instanceof InvalidationInterface) {
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'expression':
          if (is_string($expression = $data['invalidation']
            ->getExpression())) {
            $replacements[$original] = $expression;
          }
          break;
        case 'type':
          $replacements[$original] = $data['invalidation']
            ->getType();
          break;
      }
    }
  }
  elseif ($type == 'invalidations' && $data['invalidations'][0] instanceof InvalidationInterface) {
    $join = function ($invalidations, $separator) {
      $expressions = [];
      foreach ($invalidations as $invalidation) {
        if (is_string($expression = $invalidation
          ->getExpression())) {
          $expressions[] = $expression;
        }
      }
      return implode($separator, $expressions);
    };
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'separated_pipe':
          $replacements[$original] = $join($data['invalidations'], '|');
          break;
        case 'separated_comma':
          $replacements[$original] = $join($data['invalidations'], ',');
          break;
        case 'separated_tab':
          $replacements[$original] = $join($data['invalidations'], "\t");
          break;
      }
    }
  }
  return $replacements;
}