PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.22.0
Independent Analytics – WordPress Analytics Plugin v1.22.0
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 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 3 years ago Current_Traffic.php 3 years ago Geo.php 3 years ago Page.php 3 years ago Page_Author_Archive.php 3 years ago Page_Date_Archive.php 3 years ago Page_Home.php 3 years ago Page_Not_Found.php 3 years ago Page_Post_Type_Archive.php 3 years ago Page_Search.php 3 years ago Page_Singular.php 3 years ago Page_Term_Archive.php 3 years ago Referrer.php 3 years ago View_Stats.php 3 years ago Visitor.php 3 years ago WooCommerce_Stats.php 3 years ago
Visitor.php
145 lines
1 <?php
2
3 namespace IAWP_SCOPED\IAWP\Models;
4
5 use IAWP_SCOPED\IAWP\Geo_Database;
6 use IAWP_SCOPED\IAWP\Query;
7 use IAWP_SCOPED\IAWP\Utils\Salt;
8 /**
9 * How to use:
10 *
11 * Example IP from the Netherlands
12 * $visitor = new Visitor('92.111.145.208', 'some ua string');
13 *
14 * Example IP from the United States
15 * $visitor = new Visitor('98.111.145.208', 'some ua string');
16 *
17 * Access visitor token
18 * $visitor->id();
19 *
20 * Access geo data
21 * $visitor->country_code()
22 * $visitor->city()
23 * $visitor->subdivision()
24 * $visitor->country()
25 * $visitor->continent()
26 */
27 class Visitor
28 {
29 private $id;
30 private $geo;
31 /**
32 * New instances should be created with a string ip address
33 *
34 * @param string $ip
35 * @param string $user_agent
36 */
37 public function __construct(string $ip, string $user_agent)
38 {
39 $geo_database = new Geo_Database();
40 $this->id = self::calculate_id($ip, $user_agent);
41 $this->geo = $geo_database->ip_to_geo($ip);
42 }
43 /**
44 * Get the id for the most recent view for a visitor
45 *
46 * @return int|null
47 */
48 public function most_recent_view_id() : ?int
49 {
50 global $wpdb;
51 $views_table = Query::get_table_name(Query::VIEWS);
52 $sessions_table = Query::get_table_name(Query::SESSIONS);
53 $id = $wpdb->get_var($wpdb->prepare("\n SELECT views.id as id\n FROM {$views_table} AS views\n LEFT JOIN {$sessions_table} AS sessions ON sessions.session_id = views.session_id\n WHERE sessions.visitor_id = %s\n ORDER BY views.viewed_at DESC\n LIMIT 1\n ", $this->id()));
54 if (\is_null($id)) {
55 return null;
56 }
57 return \intval($id);
58 }
59 public function upsert()
60 {
61 Query::query('create_visitor', ['visitor_id' => $this->id(), 'country_code' => $this->country_code(), 'city' => $this->city(), 'subdivision' => $this->subdivision(), 'country' => $this->country(), 'continent' => $this->continent()]);
62 }
63 /**
64 * @param string $ip
65 * @param string $user_agent
66 * @return string
67 */
68 private function calculate_id(string $ip, string $user_agent) : string
69 {
70 $salt = Salt::visitor_token_salt();
71 $result = $salt . $ip . $user_agent;
72 return \md5($result);
73 }
74 /**
75 * Return the database id for a visitor
76 *
77 * @return string
78 */
79 public function id() : string
80 {
81 return $this->id;
82 }
83 /**
84 * Return an ISO country code
85 *
86 * @return string|null
87 */
88 public function country_code() : ?string
89 {
90 if (isset($this->geo['country']['iso_code'])) {
91 return $this->geo['country']['iso_code'];
92 } else {
93 return null;
94 }
95 }
96 /**
97 * Return an English city name
98 *
99 * @return string|null
100 */
101 public function city() : ?string
102 {
103 if (isset($this->geo['city']['names']['en'])) {
104 return $this->geo['city']['names']['en'];
105 } else {
106 return null;
107 }
108 }
109 /**
110 * Return an English subdivision name
111 *
112 * @return string|null
113 */
114 public function subdivision() : ?string
115 {
116 if (isset($this->geo['subdivisions'][0]['names']['en'])) {
117 return $this->geo['subdivisions'][0]['names']['en'];
118 } else {
119 return null;
120 }
121 }
122 /**
123 * @return string|null
124 */
125 public function country() : ?string
126 {
127 if (isset($this->geo['country']['names']['en'])) {
128 return $this->geo['country']['names']['en'];
129 } else {
130 return null;
131 }
132 }
133 /**
134 * @return string|null
135 */
136 public function continent() : ?string
137 {
138 if (isset($this->geo['continent']['names']['en'])) {
139 return $this->geo['continent']['names']['en'];
140 } else {
141 return null;
142 }
143 }
144 }
145