src/Utm/Utm.php line 8

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Antony Tkachenko <at@canaryknight.ru>
  4.  */
  5. namespace App\Utm;
  6. class Utm implements \JsonSerializable
  7. {
  8.     const PARAMS = [
  9.         'utm_source',
  10.         'utm_medium',
  11.         'utm_content',
  12.         'utm_term',
  13.         'utm_campaign',
  14.         'referrer'
  15.     ];
  16.     const AMO_PROPS = [
  17.         'utm_source' => 792337,
  18.         'utm_medium' => 792339,
  19.         'utm_content' => 792345,
  20.         'utm_term' => 792343,
  21.         'utm_campaign' => 792341,
  22.         'referrer' => 792355,
  23.     ];
  24.     /** @var array<string,string> */
  25.     private array $values = [];
  26.     private ?string $ymClientId null;
  27.     public static function fromArray(array $values): Utm
  28.     {
  29.         $self = new self();
  30.         foreach ($values as $k => $v) {
  31.             if (!in_array($kself::PARAMS)) {
  32.                 continue;
  33.             }
  34.             $self->values[$k] = $v;
  35.         }
  36.         return $self;
  37.     }
  38.     public function get(string $name): ?string
  39.     {
  40.         return $this->values[$name] ?? null;
  41.     }
  42.     public function getAmoFields(): array
  43.     {
  44.         $values = [];
  45.         foreach (self::AMO_PROPS as $p => $id) {
  46.             $value $this->get($p);
  47.             if (!$value) {
  48.                 continue;
  49.             }
  50.             $values[] = [
  51.                 'field_id' => $id,
  52.                 'values' => [
  53.                     ['value' => $value]
  54.                 ]
  55.             ];
  56.         }
  57.         if ($this->getYmClientId()) {
  58.             $values[] = [
  59.                 'field_id' => 792371,
  60.                 'values' => [
  61.                     ['value' => $this->getYmClientId()]
  62.                 ]
  63.             ];
  64.         }
  65.         return $values;
  66.     }
  67.     public function jsonSerialize(): array
  68.     {
  69.         return $this->values;
  70.     }
  71.     public function getYmClientId(): ?string
  72.     {
  73.         return $this->ymClientId;
  74.     }
  75.     public function setYmClientId(?string $ymClientId): void
  76.     {
  77.         $this->ymClientId $ymClientId;
  78.     }
  79. }