google_tag-8.x-1.x-dev/src/DimensionsMetricsProcessor.php

src/DimensionsMetricsProcessor.php
<?php

declare(strict_types=1);

namespace Drupal\google_tag;

use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Utility\Token;
use Drupal\google_tag\Entity\TagContainer;

/**
 * Processes metrics and dimensions.
 */
final class DimensionsMetricsProcessor {

  /**
   * The Token.
   *
   * @var \Drupal\Core\Utility\Token
   */
  private Token $token;

  /**
   * Route Match Service.
   *
   * @var \Drupal\Core\Routing\RouteMatchInterface
   */
  private RouteMatchInterface $routeMatch;

  /**
   * DimensionsMetricsProcessor constructor.
   *
   * @param \Drupal\Core\Utility\Token $token
   *   Token service.
   * @param \Drupal\Core\Routing\RouteMatchInterface $routeMatch
   *   Route matcher.
   */
  public function __construct(Token $token, RouteMatchInterface $routeMatch) {
    $this->token = $token;
    $this->routeMatch = $routeMatch;
  }

  /**
   * Returns values for metrics and dimensions.
   *
   * @phpstan-return array<string, string|int|float|bool>
   */
  public function getValues(TagContainer $tag): array {
    $types = [];
    foreach ($this->routeMatch->getParameters() as $parameter) {
      if (!$parameter instanceof EntityInterface) {
        continue;
      }
      $token_type = $parameter->getEntityTypeId();
      // Normalize for taxonomy entity token types.
      // @see token_entity_type_alter().
      if ($token_type === 'taxonomy_term' || $token_type === 'taxonomy_vocabulary') {
        $token_type = str_replace('taxonomy_', '', $token_type);
      }
      $types[$token_type] = $parameter;
    }
    $values = [];
    foreach ($tag->getDimensionsAndMetrics() as $custom) {
      $custom['value'] = $this->token->replace($custom['value'], $types, ['clear' => TRUE]);
      if ($custom['value'] === '') {
        continue;
      }
      if (($custom['type'] === 'metric') && is_numeric($custom['value'])) {
        $custom['value'] = (float) $custom['value'];
      }

      $values[$custom['name']] = $custom['value'];
    }
    return $values;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc