PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.14.2
Independent Analytics – WordPress Analytics Plugin v2.14.2
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Views / Campaign.php
independent-analytics / IAWP / Views Last commit date
Campaign.php 9 months ago CampaignParameters.php 9 months ago View.php 5 months ago
Campaign.php
63 lines
1 <?php
2
3 namespace IAWP\Views;
4
5 use IAWP\Illuminate_Builder;
6 use IAWP\Tables;
7 use IAWPSCOPED\Illuminate\Database\Query\Builder;
8 /** @internal */
9 class Campaign
10 {
11 public \IAWP\Views\CampaignParameters $campaign_parameters;
12 public string $landing_page_title;
13 public function __construct(\IAWP\Views\CampaignParameters $campaign_parameters, string $landing_page_title)
14 {
15 $this->campaign_parameters = $campaign_parameters;
16 $this->landing_page_title = $landing_page_title;
17 }
18 /**
19 * Fetch the existing campaign id from the database. If no existing campaign is found, create
20 * one and return its id.
21 *
22 * @return int|null Campaign id
23 */
24 public function sync() : ?int
25 {
26 // Sync the landing page record
27 $landing_page_id = $this->fetchOrCreate(Tables::landing_pages(), ['title' => $this->landing_page_title]);
28 if (\is_null($landing_page_id)) {
29 return null;
30 }
31 // Sync the utm source record
32 $utm_source_id = $this->fetchOrCreate(Tables::utm_sources(), ['utm_source' => $this->campaign_parameters->utm_source()]);
33 if (\is_null($utm_source_id)) {
34 return null;
35 }
36 // Sync the utm medium record
37 $utm_medium_id = $this->fetchOrCreate(Tables::utm_mediums(), ['utm_medium' => $this->campaign_parameters->utm_medium()]);
38 if (\is_null($utm_medium_id)) {
39 return null;
40 }
41 // Sync the utm campaign record
42 $utm_campaign_id = $this->fetchOrCreate(Tables::utm_campaigns(), ['utm_campaign' => $this->campaign_parameters->utm_campaign()]);
43 if (\is_null($utm_campaign_id)) {
44 return null;
45 }
46 // Finally, sync the campaign record
47 return $this->fetchOrCreate(Tables::campaigns(), ['landing_page_id' => $landing_page_id, 'utm_source_id' => $utm_source_id, 'utm_medium_id' => $utm_medium_id, 'utm_campaign_id' => $utm_campaign_id, 'utm_term' => $this->campaign_parameters->utm_term(), 'utm_content' => $this->campaign_parameters->utm_content()], 'campaign_id');
48 }
49 private function fetchOrCreate(string $table, array $values, string $primary_key_column = 'id') : ?int
50 {
51 Illuminate_Builder::new()->from($table)->updateOrInsert($values);
52 $id = Illuminate_Builder::new()->select([$primary_key_column])->from($table)->tap(function (Builder $query) use($values) {
53 foreach ($values as $key => $value) {
54 $query->where($key, '=', $value);
55 }
56 })->value($primary_key_column);
57 if (!\is_numeric($id)) {
58 return null;
59 }
60 return (int) $id;
61 }
62 }
63