kopia lustrzana https://github.com/magicbug/Cloudlog
Merge pull request #2106 from AndreasK79/advanced_logbook_qsl_eqsl_lotw
[Advanced logbook] Added columns for QSL/LoTW/eQSL confirmationspull/2107/head
commit
d0e3408f34
|
@ -122,25 +122,7 @@ class Logbookadvanced_model extends CI_Model {
|
|||
$where = "AND $where";
|
||||
}
|
||||
|
||||
if ($sortorder != null) {
|
||||
$sortorder = explode(',', $sortorder);
|
||||
|
||||
switch($sortorder[0]) {
|
||||
case 1: $order = 'ORDER BY qsos.COL_TIME_ON ' . $sortorder[1]; break;
|
||||
case 2: $order = 'ORDER BY station_profile.station_callsign ' . $sortorder[1]; break;
|
||||
case 3: $order = 'ORDER BY qsos.COL_CALL ' . $sortorder[1]; break;
|
||||
case 4: $order = 'ORDER BY qsos.COL_MODE' . $sortorder[1] . ', qsos.COL_SUBMODE ' . $sortorder[1]; break;
|
||||
case 7: $order = 'ORDER BY qsos.COL_BAND ' . $sortorder[1] . ', qsos.COL_SAT_NAME ' . $sortorder[1]; break;
|
||||
case 15: $order = 'ORDER BY qsos.COL_COUNTRY ' . $sortorder[1]; break;
|
||||
case 16: $order = 'ORDER BY qso.COL_STATE ' . $sortorder[1]; break;
|
||||
case 17: $order = 'ORDER BY qsos.COL_CQZ ' . $sortorder[1]; break;
|
||||
case 18: $order = 'ORDER BY qsos.COL_IOTA ' . $sortorder[1]; break;
|
||||
default: $order = 'ORDER BY qsos.COL_TIME_ON desc'; break;
|
||||
}
|
||||
} else {
|
||||
$order = 'ORDER BY qsos.COL_TIME_ON desc';
|
||||
}
|
||||
|
||||
$order = $this->getSortorder($sortorder);
|
||||
|
||||
$sql = "
|
||||
SELECT *, dxcc_entities.name AS station_country
|
||||
|
@ -155,6 +137,59 @@ class Logbookadvanced_model extends CI_Model {
|
|||
return $this->db->query($sql, $binding);
|
||||
}
|
||||
|
||||
public function getSortOrder($sortorder) {
|
||||
if ($sortorder == null) {
|
||||
return 'ORDER BY qsos.COL_TIME_ON desc';
|
||||
} else {
|
||||
$sortorder = explode(',', $sortorder);
|
||||
|
||||
if ($this->session->userdata('user_lotw_name') != "" && $this->session->userdata('user_eqsl_name') != ""){
|
||||
switch($sortorder[0]) {
|
||||
case 1: return 'ORDER BY qsos.COL_TIME_ON ' . $sortorder[1];
|
||||
case 2: return 'ORDER BY station_profile.station_callsign ' . $sortorder[1];
|
||||
case 3: return 'ORDER BY qsos.COL_CALL ' . $sortorder[1];
|
||||
case 4: return 'ORDER BY qsos.COL_MODE' . $sortorder[1] . ', qsos.COL_SUBMODE ' . $sortorder[1];
|
||||
case 7: return 'ORDER BY qsos.COL_BAND ' . $sortorder[1] . ', qsos.COL_SAT_NAME ' . $sortorder[1];
|
||||
case 16: return 'ORDER BY qsos.COL_COUNTRY ' . $sortorder[1];
|
||||
case 17: return 'ORDER BY qso.COL_STATE ' . $sortorder[1];
|
||||
case 18: return 'ORDER BY qsos.COL_CQZ ' . $sortorder[1];
|
||||
case 19: return 'ORDER BY qsos.COL_IOTA ' . $sortorder[1];
|
||||
default: return 'ORDER BY qsos.COL_TIME_ON desc';
|
||||
}
|
||||
}
|
||||
|
||||
else if (($this->session->userdata('user_eqsl_name') != "" && $this->session->userdata('user_lotw_name') == "") || ($this->session->userdata('user_eqsl_name') == "" && $this->session->userdata('user_lotw_name') != "")) {
|
||||
switch($sortorder[0]) {
|
||||
case 1: return 'ORDER BY qsos.COL_TIME_ON ' . $sortorder[1];
|
||||
case 2: return 'ORDER BY station_profile.station_callsign ' . $sortorder[1];
|
||||
case 3: return 'ORDER BY qsos.COL_CALL ' . $sortorder[1];
|
||||
case 4: return 'ORDER BY qsos.COL_MODE' . $sortorder[1] . ', qsos.COL_SUBMODE ' . $sortorder[1];
|
||||
case 7: return 'ORDER BY qsos.COL_BAND ' . $sortorder[1] . ', qsos.COL_SAT_NAME ' . $sortorder[1];
|
||||
case 15: return 'ORDER BY qsos.COL_COUNTRY ' . $sortorder[1];
|
||||
case 16: return 'ORDER BY qso.COL_STATE ' . $sortorder[1];
|
||||
case 17: return 'ORDER BY qsos.COL_CQZ ' . $sortorder[1];
|
||||
case 18: return 'ORDER BY qsos.COL_IOTA ' . $sortorder[1];
|
||||
default: return 'ORDER BY qsos.COL_TIME_ON desc';
|
||||
}
|
||||
}
|
||||
|
||||
else if ($this->session->userdata('user_eqsl_name') == "" && $this->session->userdata('user_lotw_name') == ""){
|
||||
switch($sortorder[0]) {
|
||||
case 1: return 'ORDER BY qsos.COL_TIME_ON ' . $sortorder[1];
|
||||
case 2: return 'ORDER BY station_profile.station_callsign ' . $sortorder[1];
|
||||
case 3: return 'ORDER BY qsos.COL_CALL ' . $sortorder[1];
|
||||
case 4: return 'ORDER BY qsos.COL_MODE' . $sortorder[1] . ', qsos.COL_SUBMODE ' . $sortorder[1];
|
||||
case 7: return 'ORDER BY qsos.COL_BAND ' . $sortorder[1] . ', qsos.COL_SAT_NAME ' . $sortorder[1];
|
||||
case 14: return 'ORDER BY qsos.COL_COUNTRY ' . $sortorder[1];
|
||||
case 15: return 'ORDER BY qso.COL_STATE ' . $sortorder[1];
|
||||
case 16: return 'ORDER BY qsos.COL_CQZ ' . $sortorder[1];
|
||||
case 17: return 'ORDER BY qsos.COL_IOTA ' . $sortorder[1];
|
||||
default: return 'ORDER BY qsos.COL_TIME_ON desc';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function updateQsl($ids, $user_id, $method, $sent) {
|
||||
$this->load->model('user_model');
|
||||
|
||||
|
|
|
@ -201,8 +201,13 @@
|
|||
<th>Refs</th>
|
||||
<th>Name</th>
|
||||
<th>QSL Via</th>
|
||||
<th>QSL Sent</th>
|
||||
<th>QSL Received</th>
|
||||
<th>QSL</th>
|
||||
<?php if ($this->session->userdata('user_lotw_name') != ""){
|
||||
echo '<th class="lotwconfirmation">LoTW</th>';
|
||||
} ?>
|
||||
<?php if ($this->session->userdata('user_eqsl_name') != ""){
|
||||
echo '<th class="eqslconfirmation">eQSL</th>';
|
||||
} ?>
|
||||
<th>QSL Msg</th>
|
||||
<th>DXCC</th>
|
||||
<th>State</th>
|
||||
|
|
|
@ -26,13 +26,20 @@ function updateRow(qso) {
|
|||
cells.eq(c++).text(qso.dxRefs);
|
||||
cells.eq(c++).text(qso.name);
|
||||
cells.eq(c++).text(qso.qslVia);
|
||||
cells.eq(c++).text(qso.qslSent);
|
||||
cells.eq(c++).text(qso.qslReceived);
|
||||
cells.eq(c++).html(qso.qsl);
|
||||
if ($(".lotwconfirmation")[0]){
|
||||
cells.eq(c++).html(qso.lotw);
|
||||
}
|
||||
if ($(".eqslconfirmation")[0]){
|
||||
cells.eq(c++).html(qso.eqsl);
|
||||
}
|
||||
cells.eq(c++).text(qso.qslMessage);
|
||||
cells.eq(c++).text(qso.dxcc);
|
||||
cells.eq(c++).text(qso.state);
|
||||
cells.eq(c++).text(qso.cqzone);
|
||||
cells.eq(c++).text(qso.iota);
|
||||
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
return row;
|
||||
}
|
||||
|
||||
|
@ -60,34 +67,39 @@ function loadQSOTable(rows) {
|
|||
|
||||
for (i = 0; i < rows.length; i++) {
|
||||
let qso = rows[i];
|
||||
|
||||
var data = [
|
||||
'<div class="form-check"><input class="form-check-input" type="checkbox" /></div>',
|
||||
qso.qsoDateTime,
|
||||
qso.de,
|
||||
'<a id="edit_qso" href="javascript:displayQso('+qso.qsoID+')">'+qso.dx+'</a>',
|
||||
qso.mode,
|
||||
qso.rstS,
|
||||
qso.rstR,
|
||||
qso.band,
|
||||
qso.deRefs,
|
||||
qso.dxRefs,
|
||||
qso.name,
|
||||
qso.qslVia,
|
||||
qso.qslSent,
|
||||
qso.qslReceived,
|
||||
qso.qslMessage,
|
||||
qso.dxcc+(qso.end == null ? '' : ' <span class="badge badge-danger">Deleted DXCC</span>'),
|
||||
qso.state,
|
||||
qso.cqzone,
|
||||
qso.iota,
|
||||
];
|
||||
|
||||
var data = [];
|
||||
data.push('<div class="form-check"><input class="form-check-input" type="checkbox" /></div>');
|
||||
data.push(qso.qsoDateTime);
|
||||
data.push(qso.de);
|
||||
data.push('<a id="edit_qso" href="javascript:displayQso('+qso.qsoID+')">'+qso.dx+'</a>');
|
||||
data.push(qso.mode);
|
||||
data.push(qso.rstS);
|
||||
data.push(qso.rstR);
|
||||
data.push(qso.band);
|
||||
data.push(qso.deRefs);
|
||||
data.push(qso.dxRefs);
|
||||
data.push(qso.name);
|
||||
data.push(qso.qslVia);
|
||||
data.push(qso.qsl);
|
||||
if ($(".lotwconfirmation")[0]){
|
||||
data.push(qso.lotw);
|
||||
}
|
||||
if ($(".eqslconfirmation")[0]){
|
||||
data.push(qso.eqsl);
|
||||
}
|
||||
data.push(qso.qslMessage);
|
||||
data.push(qso.dxcc+(qso.end == null ? '' : ' <span class="badge badge-danger">Deleted DXCC</span>'));
|
||||
data.push(qso.state);
|
||||
data.push(qso.cqzone);
|
||||
data.push(qso.iota);
|
||||
|
||||
let createdRow = table.row.add(data).index();
|
||||
table.rows(createdRow).nodes().to$().data('qsoID', qso.qsoID);
|
||||
table.row(createdRow).node().id = 'qsoID-' + qso.qsoID;
|
||||
}
|
||||
table.draw();
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
}
|
||||
|
||||
function processNextCallbookItem() {
|
||||
|
|
|
@ -55,6 +55,10 @@ class QSO
|
|||
private string $QSLSentVia;
|
||||
private string $QSLVia;
|
||||
private ?DateTime $end;
|
||||
/** QSL **/
|
||||
private string $qsl;
|
||||
private string $lotw;
|
||||
private string $eqsl;
|
||||
|
||||
/**
|
||||
* @param array $data Does no validation, it's assumed to be a row from the database in array format
|
||||
|
@ -164,6 +168,20 @@ class QSO
|
|||
$this->QSLSentVia = ($data['COL_QSL_SENT_VIA'] === null) ? '' : $data['COL_QSL_SENT_VIA'];
|
||||
$this->QSLVia = ($data['COL_QSL_VIA'] === null) ? '' : $data['COL_QSL_VIA'];
|
||||
|
||||
$CI =& get_instance();
|
||||
// Get Date format
|
||||
if($CI->session->userdata('user_date_format')) {
|
||||
// If Logged in and session exists
|
||||
$custom_date_format = $CI->session->userdata('user_date_format');
|
||||
} else {
|
||||
// Get Default date format from /config/cloudlog.php
|
||||
$custom_date_format = $CI->config->item('qso_date_format');
|
||||
}
|
||||
|
||||
$this->qsl = $this->getQslString($data, $custom_date_format);
|
||||
$this->lotw = $this->getLotwString($data, $custom_date_format);
|
||||
$this->eqsl = $this->getEqslString($data, $custom_date_format);
|
||||
|
||||
$this->cqzone = ($data['COL_CQZ'] === null) ? '' : $data['COL_CQZ'];
|
||||
$this->state = ($data['COL_STATE'] === null) ? '' :$data['COL_STATE'];
|
||||
$this->dxcc = ($data['name'] === null) ? '- NONE -' :$data['name'];
|
||||
|
@ -174,6 +192,210 @@ class QSO
|
|||
$this->end = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
function getQSLString($data, $custom_date_format): string
|
||||
{
|
||||
$CI =& get_instance();
|
||||
// Load language files
|
||||
$CI->lang->load(array(
|
||||
'contesting',
|
||||
'qslcard',
|
||||
'lotw',
|
||||
'eqsl',
|
||||
'qso'
|
||||
));
|
||||
|
||||
$qslstring = '<span ';
|
||||
|
||||
if ($data['COL_QSL_SENT'] != "N") {
|
||||
switch ($data['COL_QSL_SENT']) {
|
||||
case "Y":
|
||||
$qslstring .= "class=\"qsl-green\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_sent');
|
||||
break;
|
||||
case "Q":
|
||||
$qslstring .= "class=\"qsl-yellow\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_queued');
|
||||
break;
|
||||
case "R":
|
||||
$qslstring .= "class=\"qsl-yellow\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_requested');
|
||||
break;
|
||||
case "I":
|
||||
$qslstring .= "class=\"qsl-grey\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_invalid_ignore');
|
||||
break;
|
||||
default:
|
||||
$qslstring .= "class=\"qsl-red";
|
||||
break;
|
||||
}
|
||||
if ($data['COL_QSLSDATE'] != null) {
|
||||
$timestamp = strtotime($data['COL_QSLSDATE']);
|
||||
$qslstring .= " " .($timestamp != '' ? date($custom_date_format, $timestamp) : '');
|
||||
}
|
||||
} else {
|
||||
$qslstring .= "class=\"qsl-red";
|
||||
}
|
||||
|
||||
if ($data['COL_QSL_SENT_VIA'] != "") {
|
||||
switch ($data['COL_QSL_SENT_VIA']) {
|
||||
case "B":
|
||||
$qslstring .= " (" . $CI->lang->line('general_word_qslcard_bureau') . ")";
|
||||
break;
|
||||
case "D":
|
||||
$qslstring .= " (".$CI->lang->line('general_word_qslcard_direct').")";
|
||||
break;
|
||||
case "M":
|
||||
$qslstring .= " (".$CI->lang->line('general_word_qslcard_via').": ".($data['COL_QSL_VIA'] !="" ? $data['COL_QSL_VIA']:"n/a").")";
|
||||
break;
|
||||
case "E":
|
||||
$qslstring .= " (".$CI->lang->line('general_word_qslcard_electronic').")";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$qslstring .= '">▲</span><span ';
|
||||
|
||||
if ($data['COL_QSL_RCVD'] != "N") {
|
||||
switch ($data['COL_QSL_RCVD']) {
|
||||
case "Y":
|
||||
$qslstring .= "class=\"qsl-green\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_received');
|
||||
break;
|
||||
case "Q":
|
||||
$qslstring .= "class=\"qsl-yellow\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_queued');
|
||||
break;
|
||||
case "R":
|
||||
$qslstring .= "class=\"qsl-yellow\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_requested');
|
||||
break;
|
||||
case "I":
|
||||
$qslstring .= "class=\"qsl-grey\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_invalid_ignore');
|
||||
break;
|
||||
default:
|
||||
$qslstring .= "class=\"qsl-red";
|
||||
break;
|
||||
}
|
||||
if ($data['COL_QSLRDATE'] != null) {
|
||||
$timestamp = strtotime($data['COL_QSLRDATE']);
|
||||
$qslstring .= " " .($timestamp != '' ? date($custom_date_format, $timestamp) : '');
|
||||
}
|
||||
} else {
|
||||
$qslstring .= "class=\"qsl-red"; }
|
||||
if ($data['COL_QSL_RCVD_VIA'] != "") {
|
||||
switch ($data['COL_QSL_RCVD_VIA']) {
|
||||
case "B":
|
||||
$qslstring .= " (".$CI->lang->line('general_word_qslcard_bureau').")";
|
||||
break;
|
||||
case "D":
|
||||
$qslstring .= " (".$CI->lang->line('general_word_qslcard_direct').")";
|
||||
break;
|
||||
case "M":
|
||||
$qslstring .= " (Manager)";
|
||||
break;
|
||||
case "E":
|
||||
$qslstring .= " (".$CI->lang->line('general_word_qslcard_electronic').")";
|
||||
break;
|
||||
}
|
||||
}
|
||||
$qslstring .= '">▼</span>';
|
||||
return $qslstring;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
function getLotwString($data, $custom_date_format): string
|
||||
{
|
||||
$CI =& get_instance();
|
||||
// Load language files
|
||||
$CI->lang->load(array(
|
||||
'contesting',
|
||||
'qslcard',
|
||||
'lotw',
|
||||
'eqsl',
|
||||
'qso'
|
||||
));
|
||||
|
||||
$lotwstring = '<span ';
|
||||
|
||||
if ($data['COL_LOTW_QSL_SENT'] == "Y") {
|
||||
$lotwstring .= "data-original-title=\"" . $CI->lang->line('lotw_short')." ".$CI->lang->line('general_word_sent');
|
||||
if ($data['COL_LOTW_QSLSDATE'] != null) {
|
||||
$timestamp = strtotime($data['COL_LOTW_QSLSDATE']);
|
||||
$lotwstring .= " ". ($timestamp != '' ? date($custom_date_format, $timestamp) : '');
|
||||
}
|
||||
$lotwstring .= "\" data-toggle=\"tooltip\"";
|
||||
}
|
||||
|
||||
$lotwstring .= ' class="lotw-' . (($data['COL_LOTW_QSL_SENT']=='Y') ? 'green' : 'red') . '">▲</span>';
|
||||
$lotwstring .= '<span ';
|
||||
|
||||
if ($data['COL_LOTW_QSL_RCVD'] == "Y") {
|
||||
$lotwstring .= "data-original-title=\"". $CI->lang->line('lotw_short') ." ". $CI->lang->line('general_word_received');
|
||||
|
||||
if ($data['COL_LOTW_QSLRDATE'] != null) {
|
||||
$timestamp = strtotime($data['COL_LOTW_QSLRDATE']);
|
||||
$lotwstring .= " ". ($timestamp != '' ? date($custom_date_format, $timestamp) : '');
|
||||
}
|
||||
|
||||
$lotwstring .= "\" data-toggle=\"tooltip\"";
|
||||
}
|
||||
|
||||
$lotwstring .= ' class="lotw-' . (($data['COL_LOTW_QSL_RCVD']=='Y') ? 'green':'red') . '">▼</span>';
|
||||
|
||||
return $lotwstring;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
function getEqslString($data, $custom_date_format): string
|
||||
{
|
||||
$CI =& get_instance();
|
||||
// Load language files
|
||||
$CI->lang->load(array(
|
||||
'contesting',
|
||||
'qslcard',
|
||||
'lotw',
|
||||
'eqsl',
|
||||
'qso'
|
||||
));
|
||||
|
||||
$eqslstring = '<span ';
|
||||
|
||||
if ($data['COL_EQSL_QSL_SENT'] == "Y") {
|
||||
$eqslstring .= "data-original-title=\"".$CI->lang->line('eqsl_short')." ".$CI->lang->line('general_word_sent');
|
||||
|
||||
if ($data['COL_EQSL_QSLSDATE'] != null) {
|
||||
$timestamp = strtotime($data['COL_EQSL_QSLSDATE']);
|
||||
$eqslstring .= " ".($timestamp!=''?date($custom_date_format, $timestamp):'');
|
||||
}
|
||||
|
||||
$eqslstring .= "\" data-toggle=\"tooltip\"";
|
||||
}
|
||||
|
||||
$eqslstring .= ' class="eqsl-' . (($data['COL_EQSL_QSL_SENT'] =='Y') ? 'green':'red') . '">▲</span><span';
|
||||
|
||||
if ($data['COL_EQSL_QSL_RCVD'] == "Y") {
|
||||
$eqslstring .= "data-original-title=\"".$CI->lang->line('eqsl_short')." ".$CI->lang->line('general_word_received');
|
||||
|
||||
if ($data['COL_EQSL_QSLRDATE'] != null) {
|
||||
$timestamp = strtotime($data['COL_EQSL_QSLRDATE']);
|
||||
$eqslstring .= " ".($timestamp!=''?date($custom_date_format, $timestamp):'');
|
||||
}
|
||||
$eqslstring .= "\" data-toggle=\"tooltip\"";
|
||||
}
|
||||
|
||||
$eqslstring .= ' class="eqsl-' . (($data['COL_EQSL_QSL_RCVD'] =='Y')?'green':'red') . '">';
|
||||
|
||||
if($data['COL_EQSL_QSL_RCVD'] =='Y') {
|
||||
$eqslstring .= '<a class="eqsl-green" href="' . site_url("eqsl/image/".$data['COL_PRIMARY_KEY']) . '" data-fancybox="images" data-width="528" data-height="336">▼</a>';
|
||||
} else {
|
||||
$eqslstring .= '▼';
|
||||
}
|
||||
|
||||
$eqslstring .= '</span>';
|
||||
|
||||
return $eqslstring;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
|
@ -471,6 +693,30 @@ class QSO
|
|||
return $this->QSLSentVia;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getqsl(): string
|
||||
{
|
||||
return $this->qsl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getlotw(): string
|
||||
{
|
||||
return $this->lotw;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function geteqsl(): string
|
||||
{
|
||||
return $this->eqsl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
@ -513,8 +759,9 @@ class QSO
|
|||
'deRefs' => $this->getFormattedDeRefs(),
|
||||
'dxRefs' => $this->getFormattedDxRefs(),
|
||||
'qslVia' => $this->QSLVia,
|
||||
'qslSent' => $this->getFormattedQSLSent(),
|
||||
'qslReceived' => $this->getFormattedQSLReceived(),
|
||||
'qsl' => $this->getqsl(),
|
||||
'lotw' => $this->getlotw(),
|
||||
'eqsl' => $this->geteqsl(),
|
||||
'qslMessage' => $this->getQSLMsg(),
|
||||
'name' => $this->getName(),
|
||||
'dxcc' => $this->getDXCC(),
|
||||
|
|
Ładowanie…
Reference in New Issue