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 / View.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
View.php
69 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\Obj;
9 use IAWP\Utils\Timezone;
10 /** @internal */
11 class View extends \IAWP\Journey\Events\Event
12 {
13 private int $session_id;
14 private string $viewed_at;
15 private ?string $next_viewed_at;
16 private string $cached_title;
17 private ?string $cached_url;
18 public function __construct(object $record)
19 {
20 $this->session_id = $record->session_id;
21 $this->viewed_at = $record->viewed_at;
22 $this->next_viewed_at = $record->next_viewed_at ?? null;
23 $this->cached_title = $record->cached_title ?? '(' . \__('Untitled', 'independent-analytics') . ')';
24 $this->cached_url = $record->cached_url ?? null;
25 }
26 public function type() : string
27 {
28 return 'view';
29 }
30 public function label() : string
31 {
32 return \__('View', 'independent-analytics');
33 }
34 public function created_at() : ?CarbonImmutable
35 {
36 return CarbonImmutable::parse($this->viewed_at, 'utc')->timezone(Timezone::site_timezone());
37 }
38 public function html() : string
39 {
40 return \IAWPSCOPED\iawp_render('journeys.timeline.view', ['event' => $this]);
41 }
42 public function duration() : ?string
43 {
44 if ($this->next_viewed_at === null) {
45 return null;
46 }
47 $date = CarbonImmutable::parse($this->viewed_at, 'utc');
48 $next_date = CarbonImmutable::parse($this->next_viewed_at, 'utc');
49 $interval = $date->diffAsCarbonInterval($next_date);
50 return $interval->cascade()->forHumans(['short' => \true]);
51 }
52 public function title() : string
53 {
54 return $this->cached_title;
55 }
56 public function url() : ?string
57 {
58 return $this->cached_url;
59 }
60 public static function from_session(int $session_id) : array
61 {
62 $query = Illuminate_Builder::new()->select(['sessions.session_id', 'views.viewed_at', 'views.next_viewed_at', 'resources.cached_title', 'resources.cached_url'])->from(Tables::sessions(), 'sessions')->leftJoin(Tables::views() . ' AS views', 'sessions.session_id', '=', 'views.session_id')->leftJoin(Tables::resources() . ' AS resources', 'views.resource_id', '=', 'resources.id')->where('sessions.session_id', '=', $session_id);
63 $records = $query->get()->all();
64 return \array_map(function ($record) {
65 return new \IAWP\Journey\Events\View(Obj::empty_strings_to_null($record));
66 }, $records);
67 }
68 }
69