PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.14.8
Independent Analytics – WordPress Analytics Plugin v2.14.8
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 / Models / Visitor.php
independent-analytics / IAWP / Models Last commit date
Campaign.php 10 months ago Campaign_Landing_Page.php 9 months ago Campaign_UTM_Campaign.php 9 months ago Campaign_UTM_Medium.php 9 months ago Campaign_UTM_Source.php 9 months ago ClickWhale_Link_Page.php 1 year ago Current_Traffic.php 2 years ago Device.php 10 months ago Form.php 1 year ago Geo.php 10 months ago Journey.php 5 months ago Link.php 8 months ago Link_Pattern.php 10 months ago Model.php 6 months ago Page.php 10 months ago Page_Author_Archive.php 2 years ago Page_Date_Archive.php 2 years ago Page_Home.php 2 years ago Page_Not_Found.php 1 year ago Page_Post_Type_Archive.php 1 year ago Page_Search.php 2 years ago Page_Singular.php 1 year ago Page_Term_Archive.php 2 years ago Page_Virtual.php 1 year ago Referrer.php 6 months ago Referrer_Type.php 9 months ago Universal_Model_Columns.php 1 year ago Visitor.php 9 months ago
Visitor.php
122 lines
1 <?php
2
3 namespace IAWP\Models;
4
5 use IAWP\Geoposition;
6 use IAWP\Illuminate_Builder;
7 use IAWP\Query;
8 use IAWP\Utils\Request;
9 use IAWP\Utils\Salt;
10 /**
11 * How to use:
12 *
13 * Example IP from the Netherlands
14 * $visitor = new Visitor('92.111.145.208', 'some ua string');
15 *
16 * Example IP from the United States
17 * $visitor = new Visitor('98.111.145.208', 'some ua string');
18 *
19 * Access visitor token
20 * $visitor->id();
21 * @internal
22 */
23 class Visitor
24 {
25 private $id;
26 private $geoposition;
27 private $current_session;
28 /**
29 * New instances should be created with a string ip address
30 *
31 * @param string $ip
32 * @param string $user_agent
33 */
34 public function __construct(string $ip, string $user_agent)
35 {
36 $this->id = $this->fetch_visitor_id_by_hash($this->calculate_hash($ip, $user_agent));
37 $this->geoposition = new Geoposition($ip);
38 $this->current_session = $this->fetch_current_session();
39 }
40 public function geoposition() : Geoposition
41 {
42 return $this->geoposition;
43 }
44 public function has_recorded_session() : bool
45 {
46 return \is_object($this->current_session);
47 }
48 public function most_recent_session_id() : ?int
49 {
50 $session_id = \IAWPSCOPED\iawp_intify($this->current_session->session_id);
51 if ($this->has_recorded_session() && \is_int($session_id)) {
52 return $session_id;
53 } else {
54 return null;
55 }
56 }
57 public function most_recent_initial_view_id() : ?int
58 {
59 $initial_view_id = \IAWPSCOPED\iawp_intify($this->current_session->initial_view_id);
60 if ($this->has_recorded_session() && \is_int($initial_view_id)) {
61 return $initial_view_id;
62 } else {
63 return null;
64 }
65 }
66 public function most_recent_final_view_id() : ?int
67 {
68 $final_view_id = \IAWPSCOPED\iawp_intify($this->current_session->final_view_id);
69 if ($this->has_recorded_session() && \is_int($final_view_id)) {
70 return $final_view_id;
71 } else {
72 return null;
73 }
74 }
75 public function most_recent_view_id() : ?int
76 {
77 return $this->most_recent_final_view_id() ?? $this->most_recent_initial_view_id();
78 }
79 /**
80 * Return the database id for a visitor
81 *
82 * @return string
83 */
84 public function id() : string
85 {
86 return $this->id;
87 }
88 public function is_first_session() : bool
89 {
90 $sessions_table = Query::get_table_name(Query::SESSIONS);
91 return Illuminate_Builder::new()->select('session_id')->from($sessions_table, 'sessions')->where('visitor_id', '=', $this->id)->doesntExist();
92 }
93 /**
94 * @param string $ip
95 * @param string $user_agent
96 * @return string
97 */
98 private function calculate_hash(string $ip, string $user_agent) : string
99 {
100 $salt = Salt::visitor_token_salt();
101 $result = $salt . $ip . $user_agent;
102 return \md5($result);
103 }
104 private function fetch_current_session()
105 {
106 $sessions_table = Query::get_table_name(Query::SESSIONS);
107 $session = Illuminate_Builder::new()->from($sessions_table, 'sessions')->selectRaw('IFNULL(ended_at, created_at) AS latest_view_at')->selectRaw('sessions.*')->where('visitor_id', '=', $this->id)->havingRaw('latest_view_at > DATE_SUB(UTC_TIMESTAMP(), INTERVAL 30 MINUTE)')->orderBy('latest_view_at', 'DESC')->first();
108 return $session;
109 }
110 public static function fetch_visitor_id_by_hash(string $hash) : int
111 {
112 $visitors_table = Query::get_table_name(Query::VISITORS);
113 Illuminate_Builder::new()->from($visitors_table)->insertOrIgnore([['hash' => $hash]]);
114 $id = Illuminate_Builder::new()->from($visitors_table)->where('hash', '=', $hash)->value('visitor_id');
115 return (int) $id;
116 }
117 public static function fetch_current_visitor() : self
118 {
119 return new \IAWP\Models\Visitor(Request::ip(), Request::user_agent());
120 }
121 }
122