Files
2025-02-24 22:33:42 +01:00

52 lines
2.1 KiB
PHP

<?php
if (!defined('ABSPATH')) die('No direct access allowed');
/**
* Get the country code using Geolite DB (using WooCommerce libraries)
*
* @param array $database - The database path
* @param array $base_path - The base path (WC_ABSPATH)
* @return mixed
*/
function wpo_get_country_code_from_geolite2($database, $base_path) {
// Check if at least one of the files exists, and if the server is compatible with geolite
if (file_exists($base_path.'includes/libraries/geolite2/Reader/Decoder.php')) {
// WC < 3.9
require_once $base_path.'includes/libraries/geolite2/Reader/Decoder.php';
require_once $base_path.'includes/libraries/geolite2/Reader/InvalidDatabaseException.php';
require_once $base_path.'includes/libraries/geolite2/Reader/Metadata.php';
require_once $base_path.'includes/libraries/geolite2/Reader/Util.php';
require_once $base_path.'includes/libraries/geolite2/Reader.php';
} elseif (file_exists($base_path.'vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php')) {
// WC >= 3.9
require_once $base_path.'vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php';
require_once $base_path.'vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php';
require_once $base_path.'vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php';
require_once $base_path.'vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php';
require_once $base_path.'vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php';
}
if (class_exists('MaxMind\Db\Reader')) {
try {
$reader = new MaxMind\Db\Reader($database); // phpcs:ignore PHPCompatibility.LanguageConstructs.NewLanguageConstructs.t_ns_separatorFound
$data = $reader->get(wpo_cache_get_visitor_ip_address());
if (isset($data['country']['iso_code'])) {
$iso_code = $data['country']['iso_code'];
}
$reader->close();
if (!empty($iso_code)) {
return strtoupper($iso_code);
}
} catch (Exception $e) {
if (defined('WP_DEBUG') && WP_DEBUG || isset($_GET['wpo_cache_debug'])) {
error_log('wpo_get_country_code_from_geolite2: '.$e->getMessage());
}
}
}
return '';
}