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