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 / Timeline.php
independent-analytics / IAWP / Journey Last commit date
Events 3 months ago EngagementScore.php 6 months ago JourneyStatisticsJob.php 5 months ago Timeline.php 5 months ago
Timeline.php
69 lines
1 <?php
2
3 namespace IAWP\Journey;
4
5 use IAWP\Journey\Events\Click;
6 use IAWP\Journey\Events\Event;
7 use IAWP\Journey\Events\Order;
8 use IAWP\Journey\Events\Origin;
9 use IAWP\Journey\Events\Submission;
10 use IAWP\Journey\Events\View;
11 use IAWP\Utils\Format;
12 use IAWP\Utils\Timezone;
13 use IAWPSCOPED\Illuminate\Support\Collection;
14 /** @internal */
15 class Timeline
16 {
17 private Origin $origin;
18 /** @var Event[] */
19 private array $events;
20 public function __construct(int $session_id)
21 {
22 $this->origin = Origin::from_session($session_id);
23 $this->events = [$this->origin, ...$this->fetch_events($session_id)];
24 }
25 public function origin() : Origin
26 {
27 return $this->origin;
28 }
29 public function visitor_url() : string
30 {
31 return \admin_url('admin.php?page=independent-analytics-visitor&visitor=' . $this->origin->visitor_id());
32 }
33 public function session_count_message() : string
34 {
35 $sessions = $this->origin()->session_count();
36 if ($sessions === 1) {
37 return \__('No other sessions for this visitor', 'independent-analytics');
38 } else {
39 return \sprintf(\__('View all %d sessions for this visitor', 'independent-analytics'), $sessions);
40 }
41 }
42 public function created_at_for_humans() : string
43 {
44 return $this->origin->created_at()->timezone(Timezone::site_timezone())->format(Format::date());
45 }
46 public function events()
47 {
48 return $this->events;
49 }
50 public function conversion_events()
51 {
52 $types = ['order', 'click', 'submission'];
53 return Collection::make($this->events)->filter(fn(Event $event) => \in_array($event->type(), $types))->values()->all();
54 }
55 private function fetch_events(int $session_id) : array
56 {
57 $views = Collection::make(View::from_session($session_id));
58 $first_view = $views->shift();
59 $events = Collection::make($views)->merge(Order::from_session($session_id))->merge(Submission::from_session($session_id))->merge(Click::from_session($session_id))->sortBy(function (Event $event) {
60 $priorities = ['click' => 0, 'submission' => 1, 'order' => 2, 'view' => 3];
61 return [$event->created_at()->timestamp, $priorities[$event->type()] ?? 4];
62 });
63 if ($first_view) {
64 $events->prepend($first_view);
65 }
66 return $events->all();
67 }
68 }
69