PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.15.0
Independent Analytics – WordPress Analytics Plugin v2.15.0
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 / Journey / Events / Click.php
independent-analytics / IAWP / Journey / Events Last commit date
Click.php 5 months ago Event.php 5 months ago Order.php 5 months ago Origin.php 5 months ago Submission.php 5 months ago View.php 3 months ago
Click.php
80 lines
1 <?php
2
3 namespace IAWP\Journey\Events;
4
5 use IAWPSCOPED\Carbon\CarbonImmutable;
6 use IAWP\Illuminate_Builder;
7 use IAWP\Tables;
8 use IAWP\Utils\Security;
9 use IAWP\Utils\Timezone;
10 use IAWP\Utils\URL;
11 use IAWPSCOPED\Illuminate\Support\Arr;
12 /** @internal */
13 class Click extends \IAWP\Journey\Events\Event
14 {
15 private int $session_id;
16 private string $created_at;
17 private int $click_id;
18 private string $target;
19 private array $rules;
20 public function __construct(object $record)
21 {
22 $this->session_id = $record->session_id;
23 $this->created_at = $record->created_at;
24 $this->click_id = $record->click_id;
25 $this->target = $record->target;
26 $this->rules = $record->rules;
27 }
28 public function type() : string
29 {
30 return 'click';
31 }
32 public function label() : string
33 {
34 return \__('Click', 'independent-analytics');
35 }
36 public function created_at() : ?CarbonImmutable
37 {
38 return CarbonImmutable::parse($this->created_at, 'utc')->timezone(Timezone::site_timezone());
39 }
40 public function html() : string
41 {
42 return \IAWPSCOPED\iawp_render('journeys.timeline.click', ['event' => $this]);
43 }
44 public function target() : string
45 {
46 return $this->target;
47 }
48 public function is_url_target() : bool
49 {
50 $url = new URL($this->target);
51 return $url->is_valid_url();
52 }
53 public function rules() : array
54 {
55 return $this->rules;
56 }
57 public function rule() : string
58 {
59 return Arr::first($this->rules);
60 }
61 public function has_multiple_rules() : bool
62 {
63 return \count($this->rules) > 1;
64 }
65 public static function from_session(int $session_id) : array
66 {
67 $query = Illuminate_Builder::new()->select(['sessions.session_id', 'clicks.click_id', 'clicks.created_at', 'click_targets.target', 'click_targets.protocol', 'link_rules.name'])->from(Tables::sessions(), 'sessions')->join(Tables::views() . ' AS views', 'sessions.session_id', '=', 'views.session_id')->join(Tables::clicks() . ' AS clicks', 'views.id', '=', 'clicks.view_id')->join(Tables::clicked_links() . ' AS clicked_links', 'clicks.click_id', '=', 'clicked_links.click_id')->join(Tables::links() . ' AS links', 'clicked_links.link_id', '=', 'links.id')->join(Tables::click_targets() . ' AS click_targets', 'links.click_target_id', '=', 'click_targets.click_target_id')->join(Tables::link_rules() . ' AS link_rules', 'links.link_rule_id', '=', 'link_rules.link_rule_id')->where('sessions.session_id', '=', $session_id);
68 $records = $query->get()->groupBy('click_id')->map(function ($group) {
69 $first = $group->first();
70 if ($first->protocol === 'tel' || $first->protocol === 'sms') {
71 $first->target = Security::string($first->target);
72 }
73 return ['session_id' => $first->session_id, 'click_id' => $first->click_id, 'created_at' => $first->created_at, 'target' => $first->target, 'rules' => $group->pluck('name')->unique()->values()->all()];
74 })->all();
75 return \array_map(function ($record) {
76 return new \IAWP\Journey\Events\Click((object) $record);
77 }, $records);
78 }
79 }
80