Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
CampaignService
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
10
100.00% covered (success)
100.00%
1 / 1
 parse
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
10
1<?php
2
3namespace Drupal\visitors\Service;
4
5use Drupal\visitors\VisitorsCampaignInterface;
6
7/**
8 * Campaign service for parsing marketing campaign parameters.
9 *
10 * Supports both mtm_* and utm_* parameters for comprehensive campaign tracking.
11 */
12class CampaignService implements VisitorsCampaignInterface {
13
14  /**
15   * {@inheritdoc}
16   */
17  public function parse(?string $query): ?array {
18    if (empty($query)) {
19      return NULL;
20    }
21
22    // Parse the query string into an array.
23    parse_str($query, $params);
24
25    $campaign_data = [];
26
27    // Parse mtm_* parameters (Marketing URL Builder).
28    $mtm_params = [
29      'mtm_campaign' => 'campaign',
30      'mtm_source' => 'source',
31      'mtm_medium' => 'medium',
32      'mtm_keyword' => 'keyword',
33      'mtm_content' => 'content',
34      'mtm_cid' => 'campaign_id',
35      'mtm_group' => 'group',
36      'mtm_placement' => 'placement',
37    ];
38
39    foreach ($mtm_params as $param => $key) {
40      if (isset($params[$param]) && !empty($params[$param])) {
41        $campaign_data[$key] = trim($params[$param]);
42      }
43    }
44
45    // Parse utm_* parameters (Google Analytics).
46    $utm_params = [
47      'utm_campaign' => 'campaign',
48      'utm_source' => 'source',
49      'utm_medium' => 'medium',
50      'utm_term' => 'keyword',
51      'utm_content' => 'content',
52      'utm_id' => 'campaign_id',
53    ];
54
55    foreach ($utm_params as $param => $key) {
56      if (isset($params[$param]) && !empty($params[$param])) {
57        // Only set if not already set by mtm_* parameters.
58        if (!isset($campaign_data[$key])) {
59          $campaign_data[$key] = trim($params[$param]);
60        }
61      }
62    }
63
64    // Return NULL if no campaign data was found.
65    return empty($campaign_data) ? NULL : $campaign_data;
66  }
67
68}