PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.17.1
Independent Analytics – WordPress Analytics Plugin v1.17.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 wc_stats.php 3 years ago
visitor.php
144 lines
1 <?php
2
3 namespace IAWP;
4
5 /**
6 * How to use:
7 *
8 * Example IP from the Netherlands
9 * $visitor = new Visitor('92.111.145.208', 'some ua string');
10 *
11 * Example IP from the United States
12 * $visitor = new Visitor('98.111.145.208', 'some ua string');
13 *
14 * Access visitor token
15 * $visitor->id();
16 *
17 * Access geo data
18 * $visitor->country_code()
19 * $visitor->city()
20 * $visitor->subdivision()
21 * $visitor->country()
22 * $visitor->continent()
23 */
24 class Visitor
25 {
26 private $id;
27 private $geo;
28
29 /**
30 * New instances should be created with a string ip address
31 *
32 * @param string $ip
33 * @param string $user_agent
34 */
35 public function __construct(string $ip, string $user_agent)
36 {
37 $geo_database = new Geo_Database();
38 $this->id = self::calculate_id($ip, $user_agent);
39 $this->geo = $geo_database->ip_to_geo($ip);
40 $this->get_or_upsert_visitor();
41 }
42
43 private function get_or_upsert_visitor()
44 {
45 Query::query('create_visitor', [
46 'visitor_id' => $this->id(),
47 'country_code' => $this->country_code(),
48 'city' => $this->city(),
49 'subdivision' => $this->subdivision(),
50 'country' => $this->country(),
51 'continent' => $this->continent(),
52 ]);
53 }
54
55 /**
56 * @param string $ip
57 * @param string $user_agent
58 * @return string
59 */
60 private function calculate_id(string $ip, string $user_agent): string
61 {
62 $salt = Salt::visitor_token_salt();
63 $result = $salt . $ip . $user_agent;
64
65 return md5($result);
66 }
67
68 /**
69 * Return the database id for a visitor
70 *
71 * @return string
72 */
73 public function id(): string
74 {
75 return $this->id;
76 }
77
78 /**
79 * Return an ISO country code
80 *
81 * @return string|null
82 */
83 public function country_code(): ?string
84 {
85 if (isset($this->geo['country']['iso_code'])) {
86 return $this->geo['country']['iso_code'];
87 } else {
88 return null;
89 }
90 }
91
92 /**
93 * Return an English city name
94 *
95 * @return string|null
96 */
97 public function city(): ?string
98 {
99 if (isset($this->geo['city']['names']['en'])) {
100 return $this->geo['city']['names']['en'];
101 } else {
102 return null;
103 }
104 }
105
106 /**
107 * Return an English subdivision name
108 *
109 * @return string|null
110 */
111 public function subdivision(): ?string
112 {
113 if (isset($this->geo['subdivisions'][0]['names']['en'])) {
114 return $this->geo['subdivisions'][0]['names']['en'];
115 } else {
116 return null;
117 }
118 }
119
120 /**
121 * @return string|null
122 */
123 public function country(): ?string
124 {
125 if (isset($this->geo['country']['names']['en'])) {
126 return $this->geo['country']['names']['en'];
127 } else {
128 return null;
129 }
130 }
131
132 /**
133 * @return string|null
134 */
135 public function continent(): ?string
136 {
137 if (isset($this->geo['continent']['names']['en'])) {
138 return $this->geo['continent']['names']['en'];
139 } else {
140 return null;
141 }
142 }
143 }
144