Merge pull request #2787 from AndreasK79/dbtools_cleaning

[DBTools] Removed unused code + tweaks
This commit is contained in:
Andreas Kristiansen
2026-01-07 11:50:23 +01:00
committed by GitHub
5 changed files with 3 additions and 412 deletions

View File

@@ -895,30 +895,6 @@ class Logbookadvanced extends CI_Controller {
$this->load->view('logbookadvanced/showStateQsos', $data);
}
public function fixMissingDxcc() {
if(!clubaccess_check(9)) return;
$all = $this->input->post('all', true);
$this->load->model('logbookadvanced_model');
$result = $this->logbookadvanced_model->check_missing_dxcc_id($all);
$data['result'] = $result;
$data['all'] = $all;
$data['type'] = 'dxcc';
$this->load->view('logbookadvanced/showUpdateResult', $data);
}
public function openMissingDxccList() {
if(!clubaccess_check(9)) return;
$this->load->model('logbookadvanced_model');
$data['qsos'] = $this->logbookadvanced_model->getMissingDxccQsos();
$this->load->view('logbookadvanced/showMissingDxccQsos', $data);
}
public function batchFix() {
if(!clubaccess_check(9)) return;

View File

@@ -1632,16 +1632,10 @@ class Logbookadvanced_model extends CI_Model {
return $this->check_missing_distance();
case 'checkcontinent':
return $this->check_qsos_missing_continent();
case 'checkmissingdxcc':
return $this->check_missing_dxcc();
case 'checkdxcc':
return $this->check_dxcc();
case 'checkstate':
return $this->check_missing_state();
case 'checkcqzones':
return $this->check_missing_cq_zones();
case 'checkituzones':
return $this->check_missing_itu_zones();
case 'checkgrids':
return $this->getMissingGridQsos();
case 'checkincorrectgridsquares':
@@ -1696,17 +1690,6 @@ class Logbookadvanced_model extends CI_Model {
return $query->result();
}
public function check_missing_dxcc() {
$sql = "select count(*) as count from " . $this->config->item('table_name') . "
join station_profile on " . $this->config->item('table_name') . ".station_id = station_profile.station_id
where user_id = ? and coalesce(col_dxcc, '') = ''";
$bindings[] = [$this->session->userdata('user_id')];
$query = $this->db->query($sql, $bindings);
return $query->result();
}
public function check_qsos_missing_continent() {
$sql = "select count(*) as count from " . $this->config->item('table_name') . "
join station_profile on " . $this->config->item('table_name') . ".station_id = station_profile.station_id
@@ -1755,30 +1738,6 @@ class Logbookadvanced_model extends CI_Model {
return $query->result();
}
public function check_missing_cq_zones() {
$sql = "select count(*) as count from " . $this->config->item('table_name') . "
join station_profile on " . $this->config->item('table_name') . ".station_id = station_profile.station_id
join dxcc_entities on " . $this->config->item('table_name') . ".col_dxcc = dxcc_entities.adif
where user_id = ? and col_cqz is NULL";
$bindings[] = [$this->session->userdata('user_id')];
$query = $this->db->query($sql, $bindings);
return $query->result();
}
public function check_missing_itu_zones() {
$sql = "select count(*) as count from " . $this->config->item('table_name') . "
join station_profile on " . $this->config->item('table_name') . ".station_id = station_profile.station_id
join dxcc_entities on " . $this->config->item('table_name') . ".col_dxcc = dxcc_entities.adif
where user_id = ? and col_ituz is NULL";
$bindings[] = [$this->session->userdata('user_id')];
$query = $this->db->query($sql, $bindings);
return $query->result();
}
/**
* Fix state for a batch of QSOs using GeoJSON lookup
*
@@ -1894,72 +1853,12 @@ class Logbookadvanced_model extends CI_Model {
return $query->result();
}
/*
This was moved from update to the advanced logbook. Maninly because it affected all QSOs in the logbook, without filters on users or stations.
We need to ensure that we only update the relevant QSOs, filtered on user.
*/
public function check_missing_dxcc_id($all = false) {
ini_set('memory_limit', '-1'); // This consumes a lot of Memory!
$this->db->trans_start(); // Transaction has to be started here, because otherwise we're trying to update rows which are locked by the select
$sql = "select COL_PRIMARY_KEY, COL_CALL, COL_TIME_ON, COL_TIME_OFF, station_profile.station_profile_name from " . $this->config->item('table_name') .
" join station_profile on " . $this->config->item('table_name') . ".station_id = station_profile.station_id
where station_profile.user_id = ?";
if ($all == 'false') { // check which to update - records with no dxcc or all records
$sql .= " and (COL_DXCC is NULL or COL_DXCC = '')";
}
$r = $this->db->query($sql, array($this->session->userdata('user_id')));
$this->load->model('logbook_model');
$count = 0;
if ($r->num_rows() > 0) { //query dxcc_prefixes
$sql = "update " . $this->config->item('table_name') . " set COL_COUNTRY = ?, COL_DXCC = ? where COL_PRIMARY_KEY = ?";
$q = $this->db->conn_id->prepare($sql); // PREPARE this statement. For DB this means: No parsing overhead, parse once use many (see execute query below)
foreach ($r->result_array() as $row) {
$qso_date = $row['COL_TIME_OFF'] == '' ? $row['COL_TIME_ON'] : $row['COL_TIME_OFF'];
$qso_date = date("Y-m-d", strtotime($qso_date));
$d = $this->logbook_model->check_dxcc_table($row['COL_CALL'], $qso_date);
if ($d[0] == 'Not Found') {
$result[] = [
'id' => $row['COL_PRIMARY_KEY'],
'callsign' => $row['COL_CALL'],
'reason' => 'DXCC Not Found',
'location' => $row['station_profile_name'],
'id' => $row['COL_PRIMARY_KEY']
];
} else {
$q->execute(array(addslashes(ucwords(strtolower($d[1]), "- (/")), $d[0], $row['COL_PRIMARY_KEY']));
$count++;
}
}
}
$this->db->trans_complete();
$result['count'] = $count;
return $result;
}
function getMissingDxccQsos() {
$sql = "SELECT col_primary_key, col_call, col_time_on, col_mode, col_submode, col_band, col_state, col_gridsquare, d.name as dxcc_name, station_profile.station_profile_name FROM " . $this->config->item('table_name') . " qsos
JOIN station_profile ON qsos.station_id = station_profile.station_id
LEFT JOIN dxcc_entities d ON qsos.COL_DXCC = d.adif
WHERE station_profile.user_id = ?
AND (qsos.COL_DXCC IS NULL OR qsos.COL_DXCC = '')
ORDER BY COL_TIME_ON DESC";
$query = $this->db->query($sql, [$this->session->userdata('user_id')]);
return $query->result();
}
/*
Function to run batch fixes on the logbook.
Used in dbtools section.
*/
function batchFix($type) {
switch ($type) {
case 'dxcc':
return $this->check_missing_dxcc_id('true');
case 'distance':
return $this->update_distances_batch();
case 'continent':
@@ -2041,6 +1940,7 @@ class Logbookadvanced_model extends CI_Model {
Check all QSOs DXCC against current DXCC database
*/
public function check_dxcc() {
ini_set('memory_limit', '-1');
$i = 0;
$result = array();

View File

@@ -8,7 +8,6 @@ if($this->session->userdata('user_date_format')) {
$custom_date_format = $this->config->item('qso_date_format');
}
switch ($type) {
case 'checkdistance':
check_missing_distance($result);
@@ -16,15 +15,6 @@ switch ($type) {
case 'checkcontinent':
check_qsos_missing_continent($result);
break;
case 'checkmissingdxcc':
check_missing_dxcc($result);
break;
case 'checkcqzones':
check_missing_cq_zones($result);
break;
case 'checkituzones':
check_missing_itu_zones($result);
break;
case 'checkgrids':
check_missing_grids($result);
break;
@@ -77,40 +67,6 @@ function check_qsos_missing_continent($result) { ?>
<?php }
}
function check_missing_dxcc($result) { ?>
<h5><?= __("DXCC Check Results") ?></h5>
<?= __("QSOs to update found:"); ?> <?php echo $result[0]->count; ?>
<?php if ($result[0]->count > 0) { ?>
<br/>
<button type="button" class="mt-2 btn btn-sm btn-primary ld-ext-right" id="fixMissingDxccBtn" onclick="fixMissingDxcc(false)">
<?= __("Run fix") ?><div class="ld ld-ring ld-spin"></div>
</button>
<button id="openMissingDxccListBtn" onclick="openMissingDxccList()" class="btn btn-sm btn-success mt-2 btn btn-sm ld-ext-right"><i class="fas fa-search"></i><div class="ld ld-ring ld-spin"></div></button>
<?php }
}
function check_missing_cq_zones($result) { ?>
<h5><?= __("CQ Zone Check Results") ?></h5>
<?= __("QSOs to update found:"); ?> <?php echo $result[0]->count; ?>
<?php if ($result[0]->count > 0) { ?>
<br/>
<button type="button" class="mt-2 btn btn-sm btn-primary ld-ext-right" id="updateCqZonesBtn" onclick="fixMissingCqZones()">
<?= __("Update now") ?><div class="ld ld-ring ld-spin"></div>
</button>
<?php }
}
function check_missing_itu_zones($result) { ?>
<h5><?= __("ITU Zone Check Results") ?></h5>
<?= __("QSOs to update found:"); ?> <?php echo $result[0]->count; ?>
<?php if ($result[0]->count > 0) { ?>
<br/>
<button type="button" class="mt-2 btn btn-sm btn-primary ld-ext-right" id="updateItuZonesBtn" onclick="fixMissingItuZones()">
<?= __("Update now") ?><div class="ld ld-ring ld-spin"></div>
</button>
<?php }
}
function check_missing_grids($result) { ?>
<h5><?= __("Gridsquare Check Results") ?></h5>
<?= __("QSOs to update found:"); ?> <?php echo count($result); ?>
@@ -146,7 +102,7 @@ function check_dxcc($result, $custom_date_format) { ?>
<th class="select-filter" scope="col"><?= __("LoTW"); ?></th>
<th class="select-filter" scope="col"><?= __("Station Profile"); ?></th>
<th class="select-filter" scope="col"><?= __("Existing DXCC"); ?></th>
<th><?= __("Result DXCC"); ?></th>
<th class="select-filter" scope="col"><?= __("Result DXCC"); ?></th>
</tr>
</thead>
<tbody>

View File

@@ -1,9 +1,6 @@
<?php
switch ($type) {
case 'dxcc':
showDxccUpdateResult($result, $all);
break;
case 'state':
showStateUpdateResult($result, $country);
break;
@@ -13,12 +10,6 @@ switch ($type) {
case 'distance':
showDistanceUpdateResult($result);
break;
case 'cqzones':
showCqzoneUpdateResult($result);
break;
case 'ituzones':
showItuzoneUpdateResult($result);
break;
case 'grids':
showGridUpdateResult($result);
break;
@@ -27,58 +18,6 @@ switch ($type) {
break;
}
function showDxccUpdateResult($result, $all) {
echo '<h5>' . __("Results for DXCC update:") . '</h5>';
if ($result['count'] == 0) {
if ($all == 'false') {
echo '<div class="alert alert-danger" role="alert">' . __("The number of QSOs updated for missing DXCC IDs was") .': ' . $result['count'] . '</div>';
} else {
echo '<div class="alert alert-danger" role="alert">' . __("The number of QSOs re-checked for DXCC was") .': ' . $result['count'] . '</div>';
}
} else {
if ($all == 'false') {
echo '<div class="alert alert-success" role="alert">' . __("The number of QSOs updated for missing DXCC IDs was") .': ' . $result['count'] . '</div>';
} else {
echo '<div class="alert alert-success" role="alert">' . __("The number of QSOs re-checked for DXCC was") .': ' . $result['count'] . '</div>';
}
}
if ($result) {
$details = [];
foreach ($result as $r) {
if (is_array($r)) {
$details[] = $r;
}
}
if (!empty($details)) { ?>
<?php echo __("These QSOs could not be updated:"); ?>
<div class="table-responsive mt-3">
<table class="table table-sm table-striped table-hover">
<thead>
<tr>
<th> <?php echo __("Callsign"); ?> </th>
<th> <?php echo __("Reason"); ?> </th>
<th> <?php echo __("Station location"); ?> </th>
</tr>
</thead>
<tbody>
<?php foreach ($details as $r) { ?>
<tr>
<td><a id="edit_qso" href="javascript:displayQso(<?php echo $r['id']; ?>)"><?php echo htmlspecialchars($r['callsign']); ?></a></td>
<td> <?php echo htmlspecialchars($r['reason']); ?> </td>
<td> <?php echo htmlspecialchars($r['location']); ?> </td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php }
}
}
function showStateUpdateResult($result, $country) {
echo '<h5>' . __("Results for state update:") . '</h5>';
if ($result['count'] == 0) {
@@ -136,16 +75,6 @@ function showDistanceUpdateResult($result) {
echo '<div class="alert alert-' . ($result == 0 ? 'danger' : 'success') . '" role="alert">' . sprintf(__("The number of QSOs updated for distance is") . ': %d', $result) . '</div>';
}
function showCqzoneUpdateResult($result) {
echo '<h5>' . __("Results for CQ zone update:") . '</h5>';
echo '<div class="alert alert-' . ($result == 0 ? 'danger' : 'success') . '" role="alert">' . sprintf(__("The number of QSOs updated for CQ zone is") . ': %d', $result) . '</div>';
}
function showItuzoneUpdateResult($result) {
echo '<h5>' . __("Results for ITU zone update:") . '</h5>';
echo '<div class="alert alert-' . ($result == 0 ? 'danger' : 'success') . '" role="alert">' . sprintf(__("The number of QSOs updated for ITU zone is") . ': %d', $result) . '</div>';
}
function showGridUpdateResult($result) {
echo '<h5>' . __("Results for gridsquare update:") . '</h5>';
echo '<div class="alert alert-' . ($result == 0 ? 'danger' : 'success') . '" role="alert">' . sprintf(__("The number of QSOs updated for gridsquare is") . ': %d', $result) . '</div>';

View File

@@ -2061,39 +2061,6 @@ function saveOptions() {
});
}
function checkMissingDxcc() {
$('#checkMissingDxccsBtn').prop("disabled", true).addClass("running");
$('#closeButton').prop("disabled", true);
$.ajax({
url: base_url + 'index.php/logbookadvanced/checkDb',
data: {
type: 'checkmissingdxcc'
},
type: 'POST',
success: function(response) {
$('#checkMissingDxccsBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(response);
},
error: function(xhr, status, error) {
$('#checkMissingDxccsBtn').prop('disabled', false).text('<?= __("Check") ?>');
$('#closeButton').prop('disabled', false);
let errorMsg = 'Error checking DXCC information';
if (xhr.responseJSON && xhr.responseJSON.message) {
errorMsg += ': ' + xhr.responseJSON.message;
}
BootstrapDialog.alert({
title: 'Error',
message: errorMsg,
type: BootstrapDialog.TYPE_DANGER
});
}
});
}
function checkFixContinent() {
$('#checkFixContinentBtn').prop("disabled", true).addClass("running");
$('#closeButton').prop("disabled", true);
@@ -2285,65 +2252,6 @@ function saveOptions() {
});
}
function fixMissingDxcc(all) {
if (all === true) {
$('#updateDxccBtn').prop("disabled", true).addClass("running");
BootstrapDialog.confirm({
title: lang_general_word_danger,
message: lang_gen_advanced_logbook_confirm_fix_missing_dxcc,
type: BootstrapDialog.TYPE_DANGER,
closable: true,
draggable: true,
btnOKClass: 'btn-danger',
callback: function(result) {
if(result) {
$('#closeButton').prop("disabled", true);
$.ajax({
url: base_url + 'index.php/logbookadvanced/fixMissingDxcc',
type: 'post',
data: {
all: all
},
success: function(data) {
$('#updateDxccBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(data);
},
error: function(xhr, status, error) {
$('#updateDxccBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(error);
}
})
} else {
$('#updateDxccBtn').prop("disabled", false).removeClass("running");
}
},
});
} else {
$('#fixMissingDxccBtn').prop("disabled", true).addClass("running");
$('#closeButton').prop("disabled", true);
$.ajax({
url: base_url + 'index.php/logbookadvanced/fixMissingDxcc',
type: 'post',
data: {
all: all
},
success: function(data) {
$('#fixMissingDxccBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(data);
},
error: function(xhr, status, error) {
$('#fixMissingDxccBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(error);
}
})
}
}
function runUpdateDistancesFix(dialogItself) {
$('#updateDistanceButton').prop("disabled", true).addClass("running");
$('#closeButton').prop("disabled", true);
@@ -2369,40 +2277,6 @@ function saveOptions() {
});
}
function openMissingDxccList() {
$('#openMissingDxccListBtn').prop("disabled", true).addClass("running");
$.ajax({
url: base_url + 'index.php/logbookadvanced/openMissingDxccList',
type: 'post',
success: function (response) {
$('#openMissingDxccListBtn').prop("disabled", false).removeClass("running");
BootstrapDialog.show({
title: 'QSO List',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'options',
nl2br: false,
message: response,
buttons: [
{
label: lang_admin_close,
cssClass: 'btn-sm btn-secondary',
id: 'closeButton',
action: function (dialogItself) {
dialogItself.close();
}
}],
onhide: function(dialogRef){
return;
},
});
},
error: function () {
$('#openMissingDxccListBtn').prop("disabled", false).removeClass("running");
}
});
}
function runContinentFix(dialogItself) {
$('#updateContinentButton').prop("disabled", true).addClass("running");
$('#closeButton').prop("disabled", true);
@@ -2425,50 +2299,6 @@ function saveOptions() {
});
}
function fixMissingCqZones() {
$('#updateCqZonesBtn').prop("disabled", true).addClass("running");
$('#closeButton').prop("disabled", true);
$.ajax({
url: base_url + 'index.php/logbookadvanced/batchFix',
data: {
type: 'cqzones'
},
type: 'POST',
success: function (response) {
$('#updateCqZonesBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(response);
},
error: function(xhr, status, error) {
$('#updateCqZonesBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(error);
}
});
}
function fixMissingItuZones() {
$('#updateItuZonesBtn').prop("disabled", true).addClass("running");
$('#closeButton').prop("disabled", true);
$.ajax({
url: base_url + 'index.php/logbookadvanced/batchFix',
data: {
type: 'ituzones'
},
type: 'POST',
success: function (response) {
$('#updateItuZonesBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(response);
},
error: function(xhr, status, error) {
$('#updateItuZonesBtn').prop("disabled", false).removeClass("running");
$('#closeButton').prop("disabled", false);
$('.result').html(error);
}
});
}
function checkGrids() {
$('#checkGridsBtn').prop("disabled", true).addClass("running");
$('#closeButton').prop("disabled", true);
@@ -2532,7 +2362,7 @@ function saveOptions() {
$('#dxccCheckTable').DataTable({
"pageLength": 25,
responsive: false,
ordering: false,
ordering: true,
"scrollY": "510px",
"scrollCollapse": true,
"paging": false,