Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
12 / 12 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
1 / 1 |
CampaignService | |
100.00% |
12 / 12 |
|
100.00% |
1 / 1 |
10 | |
100.00% |
1 / 1 |
parse | |
100.00% |
12 / 12 |
|
100.00% |
1 / 1 |
10 |
1 | <?php |
2 | |
3 | namespace Drupal\visitors\Service; |
4 | |
5 | use 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 | */ |
12 | class 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 | } |