PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.10
Independent Analytics – WordPress Analytics Plugin v1.10
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 / inc / models / visitor.php
independent-analytics / inc / models Last commit date
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 visitor.php 3 years ago
visitor.php
137 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->token();
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 $token;
27 private $geo = null;
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 $this->token = self::calculate_token($ip, $user_agent);
38
39 try {
40 $reader = new MaxMind\Db\Reader(path_to('inc/databases/ip_to_geo.mmdb'));
41 $this->geo = $reader->get($ip);
42 $reader->close();
43 } catch (\Exception $e) {
44 $this->geo = null;
45 }
46 }
47
48 /**
49 * @param string $ip
50 * @param string $user_agent
51 * @return string
52 */
53 private function calculate_token(string $ip, string $user_agent): string
54 {
55 $salt = Salt::visitor_token_salt();
56 $result = $salt . $ip . $user_agent;
57
58 return md5($result);
59 }
60
61 /**
62 * Return a token unique for a given visitor
63 *
64 * @return string
65 */
66 public function token(): string
67 {
68 return $this->token;
69 }
70
71 /**
72 * Return an ISO country code
73 *
74 * @return string|null
75 */
76 public function country_code(): ?string
77 {
78 if (isset($this->geo['country']['iso_code'])) {
79 return $this->geo['country']['iso_code'];
80 } else {
81 return null;
82 }
83 }
84
85 /**
86 * Return an English city name
87 *
88 * @return string|null
89 */
90 public function city(): ?string
91 {
92 if (isset($this->geo['city']['names']['en'])) {
93 return $this->geo['city']['names']['en'];
94 } else {
95 return null;
96 }
97 }
98
99 /**
100 * Return an English subdivision name
101 *
102 * @return string|null
103 */
104 public function subdivision(): ?string
105 {
106 if (isset($this->geo['subdivisions'][0]['names']['en'])) {
107 return $this->geo['subdivisions'][0]['names']['en'];
108 } else {
109 return null;
110 }
111 }
112
113 /**
114 * @return string|null
115 */
116 public function country(): ?string
117 {
118 if (isset($this->geo['country']['names']['en'])) {
119 return $this->geo['country']['names']['en'];
120 } else {
121 return null;
122 }
123 }
124
125 /**
126 * @return string|null
127 */
128 public function continent(): ?string
129 {
130 if (isset($this->geo['continent']['names']['en'])) {
131 return $this->geo['continent']['names']['en'];
132 } else {
133 return null;
134 }
135 }
136 }
137