build the dxcc class without date since we check the exception and prefix date already in the dxcc_lookup, simplifies caching

This commit is contained in:
HB9HIL
2026-02-17 14:11:11 +01:00
parent 46b37997b4
commit de02672ab8
10 changed files with 93 additions and 110 deletions

View File

@@ -962,7 +962,7 @@ class API extends CI_Controller {
];
$return['callsign'] = $lookup_callsign;
$dxccobj = new Dxcc(null);
$dxccobj = new Dxcc();
$callsign_dxcc_lookup = $dxccobj->dxcc_lookup($lookup_callsign, $date);
$last_slash_pos = strrpos($lookup_callsign, '/');
@@ -1122,7 +1122,7 @@ class API extends CI_Controller {
$return['callsign'] = $lookup_callsign;
// Use Wavelog\Dxcc\Dxcc for faster in-memory lookup
$dxccobj = new Dxcc($date);
$dxccobj = new Dxcc();
$callsign_dxcc_lookup = $dxccobj->dxcc_lookup($lookup_callsign, $date);
$return['dxcc_id'] = $callsign_dxcc_lookup['adif'] ?? '';

View File

@@ -61,7 +61,7 @@ class Calltester extends CI_Controller {
// Starting clock time in seconds
$start_time = microtime(true);
$dxccobj = new Dxcc(null);
$dxccobj = new Dxcc();
foreach ($callarray->result() as $call) {
@@ -364,147 +364,147 @@ class Calltester extends CI_Controller {
'Callsign' => 'WJ7R/C6A',
'Country' => 'Bahamas',
'Adif' => 60,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'WJ7R/KH6',
'Country' => 'Hawaii',
'Adif' => 110,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'WJ7R/C6',
'Country' => 'Bahamas',
'Adif' => 60,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VE3EY/VP9',
'Country' => 'Bermuda',
'Adif' => 64,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VP2MDG',
'Country' => 'Montserrat',
'Adif' => 96,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VP2EY',
'Country' => 'Anguilla',
'Adif' => 12,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VP2VI',
'Country' => 'British Virgin Islands.',
'Adif' => 65,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VP2V/AA7V',
'Country' => 'British Virgin Islands',
'Adif' => 65,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'W8LR/R',
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'SO1FH',
'Country' => 'Poland',
'Adif' => 269,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'KZ1H/PP',
'Country' => 'Brazil',
'Adif' => 108,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'K1KW/AM',
'Country' => 'None',
'Adif' => 0,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'K1KW/MM',
'Country' => 'None',
'Adif' => 0,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'TF/DL2NWK/P',
'Country' => 'Iceland',
'Adif' => 242,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'OZ1ALS/A',
'Country' => 'Denmark',
'Adif' => 221,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'LA1K',
'Country' => 'Norway',
'Adif' => 266,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'K1KW/M',
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'TF/DL2NWK/M',
'Country' => 'Iceland',
'Adif' => 242,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'TF/DL2NWK/MM',
'Country' => 'None',
'Adif' => 0,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'TF/DL2NWK/P',
'Country' => 'Iceland',
'Adif' => 242,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => '2M0SQL/P',
'Country' => 'Scotland',
'Adif' => 279,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
@@ -518,42 +518,42 @@ class Calltester extends CI_Controller {
'Callsign' => 'RV0AL/0/P',
'Country' => 'Asiatic Russia',
'Adif' => 15,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'OH/DJ1YFK',
'Country' => 'Finland',
'Adif' => 224,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'N6TR/7',
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'KH0CW',
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'R2FM/P',
'Country' => 'kaliningrad',
'Adif' => 126,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'R2FM',
'Country' => 'kaliningrad',
'Adif' => 126,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
@@ -581,56 +581,56 @@ class Calltester extends CI_Controller {
'Callsign' => 'CX/PR8KW',
'Country' => 'Uruguay',
'Adif' => 144,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'IQ3MV/LH',
'Country' => 'Italy',
'Adif' => 248,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'LA1K/QRP',
'Country' => 'Norway',
'Adif' => 266,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'LA1K/LGT',
'Country' => 'Norway',
'Adif' => 266,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'SM1K/LH',
'Country' => 'Sweden',
'Adif' => 284,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'KG4W',
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'KG4WW',
'Country' => 'Guantanamo Bay',
'Adif' => 105,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'KG4WWW',
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
@@ -658,7 +658,7 @@ class Calltester extends CI_Controller {
'Callsign' => 'PT7BZ/PY0F',
'Country' => 'Fernando De Noronha',
'Adif' => 56,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
@@ -686,7 +686,7 @@ class Calltester extends CI_Controller {
'Callsign' => 'G4SGX/6Y',
'Country' => 'Jamaica',
'Adif' => 82,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
@@ -707,7 +707,7 @@ class Calltester extends CI_Controller {
'Callsign' => 'N2JBY/4X',
'Country' => 'Israel',
'Adif' => 336,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
@@ -721,98 +721,98 @@ class Calltester extends CI_Controller {
'Callsign' => 'HB/DK9TA',
'Country' => 'Switzerland',
'Adif' => 287,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'OE5DI/500',
'Country' => 'Austria',
'Adif' => 206,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'YI6SUL',
'Country' => 'Invalid',
'Adif' => 0,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => '3DA8/DF8LY/P',
'Country' => 'Kingdom Of Eswatini',
'Adif' => 468,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => '3X/DL5DAB',
'Country' => 'Invalid',
'Adif' => 0,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => '3X/DL5DA',
'Country' => 'Guinea',
'Adif' => 107,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'KN5H/6YA',
'Country' => 'Jamaica',
'Adif' => 82,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'DL2AAZ/6Y5',
'Country' => 'Jamaica',
'Adif' => 82,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => '6Y5WJ',
'Country' => 'Jamaica',
'Adif' => 82,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'R20RRC/0',
'Country' => 'Asiatic Russia',
'Adif' => 15,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'G4KJV/2K/P',
'Country' => 'England',
'Adif' => 223,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VP8ADR/40',
'Country' => 'Falkland Islands',
'Adif' => 141,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VP8ADR/400',
'Country' => 'Falkland Islands',
'Adif' => 141,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'LU7CC/E',
'Country' => 'Argentina',
'Adif' => 100,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
@@ -826,105 +826,105 @@ class Calltester extends CI_Controller {
'Callsign' => 'A6050Y/5',
'Country' => 'United Arab Emirates',
'Adif' => 391,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => '9H5G/C6A',
'Country' => 'Bahamas',
'Adif' => 60,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'A45XR/0',
'Country' => 'Oman',
'Adif' => 370,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'RAEM',
'Country' => 'Asiatic Russia',
'Adif' => 54,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'DJ1YFK/VE1',
'Country' => 'Canada',
'Adif' => 1,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'HD1QRC90',
'Country' => 'Ecuador',
'Adif' => 120,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'PJ6A',
'Country' => 'Saba & St. Eustatius',
'Adif' => 519,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'PJ4D',
'Country' => 'Bonaire',
'Adif' => 520,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => '4X50CZ/SK',
'Country' => 'Israel',
'Adif' => 336,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'RK3BY/0',
'Country' => 'Asiatic Russia',
'Adif' => 15,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'IU0KNS/ERA',
'Country' => 'Italy',
'Adif' => 248,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'IU8BPS/AWD',
'Country' => 'Italy',
'Adif' => 248,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'IK7XNF/GIRO',
'Country' => 'Italy',
'Adif' => 248,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VJ5A',
'Country' => 'Australia',
'Adif' => 150,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
$testarray[] = array(
'Callsign' => 'VL2IG',
'Country' => 'Australia',
'Adif' => 150,
'Date' => $date = date('Y-m-d', time())
'Date' => date('Y-m-d', time())
);
set_time_limit(3600);
@@ -937,7 +937,7 @@ class Calltester extends CI_Controller {
$i = 0;
$dxccobj = new Dxcc(null);
$dxccobj = new Dxcc();
foreach ($testarray as $call) {
$i++;

View File

@@ -39,7 +39,7 @@ class Dxcalendar extends CI_Controller {
$custom_date_format = $this->config->item('qso_date_format');
}
$dxccobj = new Dxcc(null);
$dxccobj = new Dxcc();
foreach ($rssdata->channel->item as $item) {
$dxped=(object)[];
$title = explode('--', $item->title);

View File

@@ -66,7 +66,7 @@ class Dxcluster extends CI_Controller {
// TODO: Is this used anywhere? If not, remove it!
public function call($call) {
$date = date('Y-m-d', time());
$dxccobj = new Dxcc($date);
$dxccobj = new Dxcc();
$dxcc = $dxccobj->dxcc_lookup($call, $date);

View File

@@ -1256,7 +1256,7 @@ class Logbook extends CI_Controller {
if ($date == ''){
$date = date("Y-m-d");
}
$dxccobj = new Dxcc($date);
$dxccobj = new Dxcc();
$ans = $dxccobj->dxcc_lookup($call, $date);
return $ans;

View File

@@ -80,7 +80,7 @@ class DxclusterCache {
$this->_delete_from_cache($this->get_worked_call_key($logbook_key, $callsign));
// Look up DXCC and continent from callsign
$dxccobj = new Dxcc(null);
$dxccobj = new Dxcc();
$dxcc_info = $dxccobj->dxcc_lookup($callsign, date('Y-m-d'));
if (!empty($dxcc_info['adif'])) {

View File

@@ -135,7 +135,7 @@ class Dxcluster_model extends CI_Model {
}
$date = date('Y-m-d', time());
$dxccObj = new DXCC($date);
$dxccObj = new DXCC();
// DXCC lookup cache to avoid duplicate lookups
$dxcc_cache = [];
@@ -527,9 +527,8 @@ class Dxcluster_model extends CI_Model {
$jsonraw = curl_exec($ch);
$json = json_decode($jsonraw);
$date = date('Ymd', time());
$dxccObj = new DXCC($date);
$date = date('Y-m-d', time());
$dxccObj = new DXCC();
// Create JSON object
if (strlen($jsonraw)>20) {
@@ -541,7 +540,7 @@ class Dxcluster_model extends CI_Model {
$minutes += $spotage->i;
$json->age=$minutes;
if ($minutes<=$maxage) {
$dxcc=$dxccObj->dxcc_lookup($json->spotter,date('Ymd', time()));
$dxcc=$dxccObj->dxcc_lookup($json->spotter,$date);
$json->dxcc_spotter=$dxcc;
return ($json);
} else {

View File

@@ -137,7 +137,7 @@ class Logbook_model extends CI_Model {
empty($qso_data['continent']);
if ($needs_dxcc_lookup) {
$dxccobj = new Dxcc(null);
$dxccobj = new Dxcc();
$dxcc = $dxccobj->dxcc_lookup(strtoupper(trim($callsign)), $datetime);
}
@@ -4951,14 +4951,14 @@ class Logbook_model extends CI_Model {
$dxcc = array($record['dxcc'] ?? '', $entity['name'] ?? '', $entity['cqz'] ?? '', $entity['cont'] ?? '');
} else {
if ($this->dxcc_object == null) {
$this->dxcc_object = new Dxcc(null);
$this->dxcc_object = new Dxcc();
}
$dxcclookupresult = $this->dxcc_object->dxcc_lookup($record['call'], date('Y-m-d', strtotime($record['qso_date'])));
$dxcc = array($dxcclookupresult['adif'], $dxcclookupresult['entity'], $dxcclookupresult['cqz'], $dxcclookupresult['cont']);
}
} else {
if ($this->dxcc_object == null) {
$this->dxcc_object = new Dxcc(null);
$this->dxcc_object = new Dxcc();
}
$dxcclookupresult = $this->dxcc_object->dxcc_lookup($record['call'], date('Y-m-d', strtotime($record['qso_date'])));
$dxcc = array($dxcclookupresult['adif'], $dxcclookupresult['entity'], $dxcclookupresult['cqz'], $dxcclookupresult['cont']);

View File

@@ -2041,7 +2041,7 @@ class Logbookadvanced_model extends CI_Model {
// Starting clock time in seconds
$start_time = microtime(true);
$dxccobj = new Dxcc(null);
$dxccobj = new Dxcc();
foreach ($callarray->result() as $call) {
@@ -2111,7 +2111,7 @@ class Logbookadvanced_model extends CI_Model {
$r = $this->db->query($sql, array($this->session->userdata('user_id'), json_decode($ids, true)));
$count = 0;
$dxccobj = new Dxcc(null);
$dxccobj = new Dxcc();
if ($r->num_rows() > 0) { //query dxcc_prefixes
$sql = "update " . $this->config->item('table_name') . " set COL_COUNTRY = ?, COL_DXCC = ? where COL_PRIMARY_KEY = ?";

View File

@@ -10,8 +10,8 @@ class Dxcc {
protected $lidadditions = '/^(?:QRP|LGT|2K)$/';
protected $noneadditions = '/^(?:MM|AM)$/';
function __construct($date) {
$this->read_data($date);
function __construct() {
$this->read_data();
}
/**
@@ -321,7 +321,7 @@ class Dxcc {
/*
* Read DXCC data from the database or cache
*/
function read_data($date = NULL) {
function read_data() {
$CI = &get_instance();
$CI->load->is_loaded('cache') ?: $CI->load->driver('cache', [
'adapter' => $CI->config->item('cache_adapter') ?? 'file',
@@ -330,24 +330,16 @@ class Dxcc {
]);
// DXCC Exceptions
$cache_key = 'dxcc_exceptions_' . ($date ?? 'all');
$cache_key = 'dxcc_exceptions';
// Cache check - early return
if ($cached = $CI->cache->get($cache_key)) {
$this->dxccexceptions = $cached;
} else {
$sql = "SELECT `call`, `entity`, `adif`, `cqz`, `cont`, `long`, `lat`, `start`, `end` FROM dxcc_exceptions";
$binding = [];
if ($date !== NULL) {
$sql .= " WHERE (start <= ? OR start IS NULL) AND (end >= ? OR end IS NULL)";
$binding = [$date, $date];
}
$sql .= " ORDER BY start DESC, end DESC";
$sql = "SELECT `call`, `entity`, `adif`, `cqz`, `cont`, `long`, `lat`, `start`, `end` FROM dxcc_exceptions ORDER BY start DESC, end DESC";
$this->dxccexceptions = [];
foreach ($CI->db->query($sql, $binding)->result() as $dxcce) {
foreach ($CI->db->query($sql)->result() as $dxcce) {
$this->dxccexceptions[$dxcce->call][] = [
'adif' => $dxcce->adif,
'cont' => $dxcce->cont,
@@ -364,21 +356,13 @@ class Dxcc {
}
// DXCC Prefixes
$cache_key = 'dxcc_prefixes_' . ($date ?? 'all');
$cache_key = 'dxcc_prefixes';
if ($CI->cache->get($cache_key)) {
$this->dxcc = $CI->cache->get($cache_key);
} else {
$binding = [];
$sql = "SELECT `call`, `entity`, `adif`, `cqz`, `cont`, `long`, `lat`, `start`, `end` FROM dxcc_prefixes";
if ($date !== NULL) {
$sql .= " WHERE (start <= ? OR start IS NULL)
AND (end >= ? OR end IS NULL)";
$binding[] = $date;
$binding[] = $date;
}
$sql .= " ORDER BY start DESC, end DESC";
$dxcc_result = $CI->db->query($sql, $binding);
$sql = "SELECT `call`, `entity`, `adif`, `cqz`, `cont`, `long`, `lat`, `start`, `end` FROM dxcc_prefixes ORDER BY start DESC, end DESC";
$dxcc_result = $CI->db->query($sql);
if ($dxcc_result->num_rows() > 0){
foreach ($dxcc_result->result() as $dx) {