PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.4.3
Independent Analytics – WordPress Analytics Plugin v2.4.3
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 2 years ago Current_Traffic.php 2 years ago Device.php 2 years ago Geo.php 2 years ago Page.php 2 years 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 2 years ago Page_Post_Type_Archive.php 2 years ago Page_Search.php 2 years ago Page_Singular.php 2 years ago Page_Term_Archive.php 2 years ago Page_Virtual.php 2 years ago Referrer.php 2 years ago View_Stats.php 2 years ago Visitor.php 2 years ago WooCommerce_Stats.php 2 years ago
Visitor.php
100 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\Salt;
9 /**
10 * How to use:
11 *
12 * Example IP from the Netherlands
13 * $visitor = new Visitor('92.111.145.208', 'some ua string');
14 *
15 * Example IP from the United States
16 * $visitor = new Visitor('98.111.145.208', 'some ua string');
17 *
18 * Access visitor token
19 * $visitor->id();
20 * @internal
21 */
22 class Visitor
23 {
24 private $id;
25 private $geoposition;
26 /**
27 * New instances should be created with a string ip address
28 *
29 * @param string $ip
30 * @param string $user_agent
31 */
32 public function __construct(string $ip, string $user_agent)
33 {
34 $this->id = $this->fetch_visitor_id($this->calculate_hash($ip, $user_agent));
35 $this->geoposition = new Geoposition($ip);
36 }
37 public function geoposition() : Geoposition
38 {
39 return $this->geoposition;
40 }
41 /**
42 * Get the id for the most recent view for a visitor
43 *
44 * @return int|null
45 */
46 public function current_view_id() : ?int
47 {
48 global $wpdb;
49 $views_table = Query::get_table_name(Query::VIEWS);
50 $sessions_table = Query::get_table_name(Query::SESSIONS);
51 $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()));
52 if (\is_null($id)) {
53 return null;
54 }
55 return \intval($id);
56 }
57 /**
58 * Get the id for the most recent view for a visitor
59 *
60 * @return int|null
61 */
62 public function current_session_initial_view_id() : ?int
63 {
64 global $wpdb;
65 $views_table = Query::get_table_name(Query::VIEWS);
66 $sessions_table = Query::get_table_name(Query::SESSIONS);
67 $id = $wpdb->get_var($wpdb->prepare("\n SELECT sessions.initial_view_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()));
68 if (\is_null($id)) {
69 return null;
70 }
71 return \intval($id);
72 }
73 /**
74 * Return the database id for a visitor
75 *
76 * @return string
77 */
78 public function id() : string
79 {
80 return $this->id;
81 }
82 /**
83 * @param string $ip
84 * @param string $user_agent
85 * @return string
86 */
87 private function calculate_hash(string $ip, string $user_agent) : string
88 {
89 $salt = Salt::visitor_token_salt();
90 $result = $salt . $ip . $user_agent;
91 return \md5($result);
92 }
93 private function fetch_visitor_id(string $hash) : int
94 {
95 $visitors_table = Query::get_table_name(Query::VISITORS);
96 Illuminate_Builder::get_builder()->from($visitors_table)->insertOrIgnore([['hash' => $hash]]);
97 return Illuminate_Builder::get_builder()->from($visitors_table)->where('hash', '=', $hash)->value('visitor_id');
98 }
99 }
100