Add basic analytics capture (issue #8)
parent
0e2bd52aa0
commit
8d8982cfce
Binary file not shown.
@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
use GeoIp2\Database\Reader;
|
||||
|
||||
$_SERVER['REMOTE_ADDR'] = "206.127.96.82";
|
||||
|
||||
try {
|
||||
|
||||
require_once __DIR__ . "/requiredpublic.php";
|
||||
|
||||
$time = date("Y-m-d H:i:s");
|
||||
|
||||
/**
|
||||
* https://stackoverflow.com/a/2040279
|
||||
*/
|
||||
function gen_uuid() {
|
||||
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||||
// 32 bits for "time_low"
|
||||
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
|
||||
// 16 bits for "time_mid"
|
||||
mt_rand(0, 0xffff),
|
||||
// 16 bits for "time_hi_and_version",
|
||||
// four most significant bits holds version number 4
|
||||
mt_rand(0, 0x0fff) | 0x4000,
|
||||
// 16 bits, 8 bits for "clk_seq_hi_res",
|
||||
// 8 bits for "clk_seq_low",
|
||||
// two most significant bits holds zero and one for variant DCE1.1
|
||||
mt_rand(0, 0x3fff) | 0x8000,
|
||||
// 48 bits for "node"
|
||||
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Read/set the cookie
|
||||
//
|
||||
|
||||
if (isset($_COOKIE['sw-uuid'])) {
|
||||
$uuid = $_COOKIE['sw-uuid'];
|
||||
} else {
|
||||
$uuid = gen_uuid();
|
||||
}
|
||||
|
||||
setcookie("sw-uuid", $uuid, time() + 60 * 60 * 24 * 30, "/", $_SERVER['HTTP_HOST'], false, true);
|
||||
|
||||
//
|
||||
// Get the user's IP address
|
||||
//
|
||||
|
||||
$clientip = $_SERVER['REMOTE_ADDR'];
|
||||
|
||||
// Check if we're behind CloudFlare and adjust accordingly
|
||||
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"]) && validateCloudflare()) {
|
||||
$clientip = $_SERVER["HTTP_CF_CONNECTING_IP"];
|
||||
}
|
||||
|
||||
//
|
||||
// Lookup IP address
|
||||
//
|
||||
|
||||
$reader = new Reader(GEOIP_DB);
|
||||
|
||||
$record = $reader->city($clientip);
|
||||
|
||||
$country = $record->country->name;
|
||||
$region = $record->mostSpecificSubdivision->name;
|
||||
$city = $record->city->name;
|
||||
$lat = $record->location->latitude;
|
||||
$lon = $record->location->longitude;
|
||||
|
||||
//
|
||||
// Save the page visit
|
||||
//
|
||||
|
||||
$database->insert("analytics", [
|
||||
"siteid" => getsiteid(),
|
||||
"pageid" => getpageid(),
|
||||
"uuid" => $uuid,
|
||||
"country" => $country,
|
||||
"region" => $region,
|
||||
"city" => $city,
|
||||
"lat" => $lat,
|
||||
"lon" => $lon,
|
||||
"time" => $time
|
||||
]);
|
||||
} catch (GeoIp2\Exception\AddressNotFoundException $e) {
|
||||
if (DEBUG) {
|
||||
echo "<!-- The client IP was not found in the GeoIP database. -->";
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
// Silently fail so the rest of the site still works
|
||||
}
|
Loading…
Reference in New Issue