kopia lustrzana https://github.com/magicbug/Cloudlog
Added QRZ-Support to Cloudlog
rodzic
6841f8a0cf
commit
f5313eca63
|
@ -22,7 +22,7 @@ $config['migration_enabled'] = TRUE;
|
|||
|
|
||||
*/
|
||||
|
||||
$config['migration_version'] = 157;
|
||||
$config['migration_version'] = 158;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
@ -107,6 +107,11 @@ class Dashboard extends CI_Controller {
|
|||
$data['lotw_sent_today'] = $QSLStatsBreakdownArray['LoTW_Sent_today'];
|
||||
$data['lotw_rcvd_today'] = $QSLStatsBreakdownArray['LoTW_Received_today'];
|
||||
|
||||
$data['total_qrz_sent'] = $QSLStatsBreakdownArray['QRZ_Sent'];
|
||||
$data['total_qrz_rcvd'] = $QSLStatsBreakdownArray['QRZ_Received'];
|
||||
$data['qrz_sent_today'] = $QSLStatsBreakdownArray['QRZ_Sent_today'];
|
||||
$data['qrz_rcvd_today'] = $QSLStatsBreakdownArray['QRZ_Received_today'];
|
||||
|
||||
$data['last_five_qsos'] = $this->logbook_model->get_last_qsos('18', $logbooks_locations_array);
|
||||
|
||||
$data['vucc'] = $this->vucc->fetchVuccSummary();
|
||||
|
|
|
@ -2,155 +2,157 @@
|
|||
|
||||
/*
|
||||
Controller to interact with the QRZ.com API
|
||||
*/
|
||||
*/
|
||||
|
||||
class Qrz extends CI_Controller {
|
||||
|
||||
// Show frontend if there is one
|
||||
public function index() {
|
||||
$this->config->load('config');
|
||||
}
|
||||
// Show frontend if there is one
|
||||
public function index() {
|
||||
$this->config->load('config');
|
||||
}
|
||||
|
||||
/*
|
||||
* Upload QSO to QRZ.com
|
||||
* When called from the url cloudlog/qrz/upload, the function loops through all station_id's with a qrz api key defined.
|
||||
* All QSOs not previously uploaded, will then be uploaded, one at a time
|
||||
*/
|
||||
public function upload() {
|
||||
$this->setOptions();
|
||||
/*
|
||||
* Upload QSO to QRZ.com
|
||||
* When called from the url cloudlog/qrz/upload, the function loops through all station_id's with a qrz api key defined.
|
||||
* All QSOs not previously uploaded, will then be uploaded, one at a time
|
||||
*/
|
||||
public function upload() {
|
||||
$this->setOptions();
|
||||
|
||||
$this->load->model('logbook_model');
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
$station_ids = $this->logbook_model->get_station_id_with_qrz_api();
|
||||
$station_ids = $this->logbook_model->get_station_id_with_qrz_api();
|
||||
|
||||
if ($station_ids) {
|
||||
foreach ($station_ids as $station) {
|
||||
$qrz_api_key = $station->qrzapikey;
|
||||
if($this->mass_upload_qsos($station->station_id, $qrz_api_key, true)) {
|
||||
echo "QSOs have been uploaded to QRZ.com.";
|
||||
log_message('info', 'QSOs have been uploaded to QRZ.com.');
|
||||
} else{
|
||||
echo "No QSOs found for upload.";
|
||||
log_message('info', 'No QSOs found for upload.');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo "No station profiles with a QRZ API Key found.";
|
||||
log_message('error', "No station profiles with a QRZ API Key found.");
|
||||
}
|
||||
if ($station_ids) {
|
||||
foreach ($station_ids as $station) {
|
||||
$qrz_api_key = $station->qrzapikey;
|
||||
if($this->mass_upload_qsos($station->station_id, $qrz_api_key, true)) {
|
||||
echo "QSOs have been uploaded to QRZ.com.";
|
||||
log_message('info', 'QSOs have been uploaded to QRZ.com.');
|
||||
} else{
|
||||
echo "No QSOs found for upload.";
|
||||
log_message('info', 'No QSOs found for upload.');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo "No station profiles with a QRZ API Key found.";
|
||||
log_message('error', "No station profiles with a QRZ API Key found.");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function setOptions() {
|
||||
$this->config->load('config');
|
||||
ini_set('memory_limit', '-1');
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
}
|
||||
function setOptions() {
|
||||
$this->config->load('config');
|
||||
ini_set('memory_limit', '-1');
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function gets all QSOs from given station_id, that are not previously uploaded to qrz.
|
||||
* Adif is build for each qso, and then uploaded, one at a time
|
||||
*/
|
||||
function mass_upload_qsos($station_id, $qrz_api_key, $trusted = false) {
|
||||
$i = 0;
|
||||
$data['qsos'] = $this->logbook_model->get_qrz_qsos($station_id, $trusted);
|
||||
$errormessages=array();
|
||||
/*
|
||||
* Function gets all QSOs from given station_id, that are not previously uploaded to qrz.
|
||||
* Adif is build for each qso, and then uploaded, one at a time
|
||||
*/
|
||||
function mass_upload_qsos($station_id, $qrz_api_key, $trusted = false) {
|
||||
$i = 0;
|
||||
$data['qsos'] = $this->logbook_model->get_qrz_qsos($station_id, $trusted);
|
||||
$errormessages=array();
|
||||
|
||||
$CI =& get_instance();
|
||||
$CI->load->library('AdifHelper');
|
||||
$CI =& get_instance();
|
||||
$CI->load->library('AdifHelper');
|
||||
|
||||
if ($data['qsos']) {
|
||||
foreach ($data['qsos']->result() as $qso) {
|
||||
$adif = $CI->adifhelper->getAdifLine($qso);
|
||||
if ($data['qsos']) {
|
||||
foreach ($data['qsos']->result() as $qso) {
|
||||
$adif = $CI->adifhelper->getAdifLine($qso);
|
||||
|
||||
if ($qso->COL_QRZCOM_QSO_UPLOAD_STATUS == 'M') {
|
||||
$result = $this->logbook_model->push_qso_to_qrz($qrz_api_key, $adif, true);
|
||||
} else {
|
||||
$result = $this->logbook_model->push_qso_to_qrz($qrz_api_key, $adif);
|
||||
}
|
||||
if ($qso->COL_QRZCOM_QSO_UPLOAD_STATUS == 'M') {
|
||||
$result = $this->logbook_model->push_qso_to_qrz($qrz_api_key, $adif, true);
|
||||
} else {
|
||||
$result = $this->logbook_model->push_qso_to_qrz($qrz_api_key, $adif);
|
||||
}
|
||||
|
||||
if ( ($result['status'] == 'OK') || ( ($result['status'] == 'error') && ($result['message'] == 'STATUS=FAIL&REASON=Unable to add QSO to database: duplicate&EXTENDED=')) ){
|
||||
$this->markqso($qso->COL_PRIMARY_KEY);
|
||||
$i++;
|
||||
} elseif ( ($result['status']=='error') && (substr($result['message'],0,11) == 'STATUS=AUTH')) {
|
||||
log_message('error', 'QRZ upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
|
||||
log_message('error', 'QRZ upload failed with the following message: ' .$result['message']);
|
||||
log_message('error', 'QRZ upload stopped for Station_ID: ' .$station_id);
|
||||
$errormessages[] = $result['message'] . ' Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
|
||||
break; /* If key is invalid, immediate stop syncing for more QSOs of this station */
|
||||
} else {
|
||||
log_message('error', 'QRZ upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
|
||||
log_message('error', 'QRZ upload failed with the following message: ' .$result['message']);
|
||||
$errormessages[] = $result['message'] . ' Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
|
||||
}
|
||||
}
|
||||
$result['status'] = 'OK';
|
||||
$result['count'] = $i;
|
||||
$result['errormessages'] = $errormessages;
|
||||
return $result;
|
||||
} else {
|
||||
$result['status'] = 'Error';
|
||||
$result['count'] = $i;
|
||||
$result['errormessages'] = $errormessages;
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
if ( ($result['status'] == 'OK') || ( ($result['status'] == 'error') && ($result['message'] == 'STATUS=FAIL&REASON=Unable to add QSO to database: duplicate&EXTENDED=')) ){
|
||||
$this->markqso($qso->COL_PRIMARY_KEY);
|
||||
$i++;
|
||||
} elseif ( ($result['status']=='error') && (substr($result['message'],0,11) == 'STATUS=AUTH')) {
|
||||
log_message('error', 'QRZ upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
|
||||
log_message('error', 'QRZ upload failed with the following message: ' .$result['message']);
|
||||
log_message('error', 'QRZ upload stopped for Station_ID: ' .$station_id);
|
||||
$errormessages[] = $result['message'] . ' Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
|
||||
break; /* If key is invalid, immediate stop syncing for more QSOs of this station */
|
||||
} else {
|
||||
log_message('error', 'QRZ upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
|
||||
log_message('error', 'QRZ upload failed with the following message: ' .$result['message']);
|
||||
$errormessages[] = $result['message'] . ' Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
|
||||
}
|
||||
}
|
||||
$result['status'] = 'OK';
|
||||
$result['count'] = $i;
|
||||
$result['errormessages'] = $errormessages;
|
||||
return $result;
|
||||
} else {
|
||||
$result['status'] = 'Error';
|
||||
$result['count'] = $i;
|
||||
$result['errormessages'] = $errormessages;
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Function marks QSO with given primarykey as uploaded to qrz
|
||||
*/
|
||||
function markqso($primarykey) {
|
||||
$this->logbook_model->mark_qrz_qsos_sent($primarykey);
|
||||
}
|
||||
/*
|
||||
* Function marks QSO with given primarykey as uploaded to qrz
|
||||
*/
|
||||
function markqso($primarykey) {
|
||||
$this->logbook_model->mark_qrz_qsos_sent($primarykey);
|
||||
}
|
||||
|
||||
/*
|
||||
* Used for displaying the uid for manually selecting log for upload to qrz
|
||||
*/
|
||||
public function export() {
|
||||
$this->load->model('stations');
|
||||
/*
|
||||
* Used for displaying the uid for manually selecting log for upload to qrz
|
||||
*/
|
||||
public function export() {
|
||||
$this->load->model('stations');
|
||||
|
||||
$data['page_title'] = "QRZ Logbook";
|
||||
$data['page_title'] = "QRZ Logbook";
|
||||
|
||||
$data['station_profiles'] = $this->stations->all_of_user();
|
||||
$data['station_profile'] = $this->stations->stations_with_qrz_api_key();
|
||||
$data['station_profile'] = $this->stations->stations_with_qrz_api_key();
|
||||
$this->load->model('Stations');
|
||||
$data['callsigns'] = $this->Stations->callsigns_of_user($this->session->userdata('user_id'));
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('qrz/export');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('qrz/export');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
|
||||
/*
|
||||
* Used for ajax-function when selecting log for upload to qrz
|
||||
*/
|
||||
public function upload_station() {
|
||||
$this->setOptions();
|
||||
$this->load->model('stations');
|
||||
/*
|
||||
* Used for ajax-function when selecting log for upload to qrz
|
||||
*/
|
||||
public function upload_station() {
|
||||
$this->setOptions();
|
||||
$this->load->model('stations');
|
||||
|
||||
$postData = $this->input->post();
|
||||
$postData = $this->input->post();
|
||||
|
||||
$this->load->model('logbook_model');
|
||||
$result = $this->logbook_model->exists_qrz_api_key($postData['station_id']);
|
||||
$qrz_api_key = $result->qrzapikey;
|
||||
header('Content-type: application/json');
|
||||
$result = $this->mass_upload_qsos($postData['station_id'], $qrz_api_key);
|
||||
if ($result['status'] == 'OK') {
|
||||
$stationinfo = $this->stations->stations_with_qrz_api_key();
|
||||
$info = $stationinfo->result();
|
||||
$this->load->model('logbook_model');
|
||||
$result = $this->logbook_model->exists_qrz_api_key($postData['station_id']);
|
||||
$qrz_api_key = $result->qrzapikey;
|
||||
header('Content-type: application/json');
|
||||
$result = $this->mass_upload_qsos($postData['station_id'], $qrz_api_key);
|
||||
if ($result['status'] == 'OK') {
|
||||
$stationinfo = $this->stations->stations_with_qrz_api_key();
|
||||
$info = $stationinfo->result();
|
||||
|
||||
$data['status'] = 'OK';
|
||||
$data['info'] = $info;
|
||||
$data['infomessage'] = $result['count'] . " QSOs are now uploaded to QRZ.com";
|
||||
$data['errormessages'] = $result['errormessages'];
|
||||
echo json_encode($data);
|
||||
} else {
|
||||
$data['status'] = 'Error';
|
||||
$data['info'] = 'Error: No QSOs found to upload.';
|
||||
$data['errormessages'] = $result['errormessages'];
|
||||
echo json_encode($data);
|
||||
}
|
||||
}
|
||||
$data['status'] = 'OK';
|
||||
$data['info'] = $info;
|
||||
$data['infomessage'] = $result['count'] . " QSOs are now uploaded to QRZ.com";
|
||||
$data['errormessages'] = $result['errormessages'];
|
||||
echo json_encode($data);
|
||||
} else {
|
||||
$data['status'] = 'Error';
|
||||
$data['info'] = 'Error: No QSOs found to upload.';
|
||||
$data['errormessages'] = $result['errormessages'];
|
||||
echo json_encode($data);
|
||||
}
|
||||
}
|
||||
|
||||
public function mark_qrz() {
|
||||
// Set memory limit to unlimited to allow heavy usage
|
||||
|
@ -173,4 +175,186 @@ class Qrz extends CI_Controller {
|
|||
$this->load->view('qrz/mark_qrz', $data);
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
|
||||
public function import_qrz() {
|
||||
$this->load->model('user_model');
|
||||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
|
||||
$data['page_title'] = "QRZ QSL Import";
|
||||
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
$customDate = $this->input->post('from');
|
||||
if ($customDate != NULL) {
|
||||
$qrz_last_date = date($customDate);
|
||||
} else {
|
||||
// Query the logbook to determine when the last LoTW confirmation was
|
||||
$qrz_last_date = null;
|
||||
}
|
||||
$this->download($this->session->userdata('user_id'),$qrz_last_date,true);
|
||||
} // end function
|
||||
|
||||
function download($user_id_to_load = null, $lastqrz = null, $show_views = false) {
|
||||
$this->load->model('user_model');
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
|
||||
$api_keys = $this->logbook_model->get_qrz_apikeys();
|
||||
|
||||
if ($api_keys) {
|
||||
foreach ($api_keys as $station) {
|
||||
if (($user_id_to_load != null) && ($user_id_to_load != $station->user_id)) { // Skip User if we're called with a specific user_id
|
||||
continue;
|
||||
}
|
||||
if ($lastqrz == null) {
|
||||
$lastqrz = $this->logbook_model->qrz_last_qsl_date($station->user_id);
|
||||
}
|
||||
$qrz_api_key = $station->qrzapikey;
|
||||
$result=($this->mass_download_qsos($station->station_callsign, $qrz_api_key, $lastqrz, true, $show_views));
|
||||
}
|
||||
} else {
|
||||
echo "No station profiles with a QRZ API Key found.";
|
||||
log_message('error', "No station profiles with a QRZ API Key found.");
|
||||
}
|
||||
}
|
||||
|
||||
function mass_download_qsos($call = null,$qrz_api_key = '', $lastqrz = '1900-01-01', $trusted = false, $show_views = true) {
|
||||
$config['upload_path'] = './uploads/';
|
||||
$file = $config['upload_path'] . 'qrzcom_download_report.adi';
|
||||
if (file_exists($file) && ! is_writable($file)) {
|
||||
$result = "Temporary download file ".$file." is not writable. Aborting!";
|
||||
return false;
|
||||
}
|
||||
$url = 'http://logbook.qrz.com/api';
|
||||
|
||||
$post_data['KEY'] = $qrz_api_key;
|
||||
$post_data['ACTION'] = 'FETCH';
|
||||
$post_data['OPTION'] = 'MODSINCE:'.$lastqrz.', CALL:'.$call.', STATUS:CONFIRMED, TYPE:ADIF';
|
||||
|
||||
$ch = curl_init( $url );
|
||||
curl_setopt( $ch, CURLOPT_POST, true);
|
||||
curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_data);
|
||||
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
|
||||
curl_setopt( $ch, CURLOPT_HEADER, 0);
|
||||
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
|
||||
|
||||
$content = htmlspecialchars_decode(curl_exec($ch));
|
||||
file_put_contents($file, $content);
|
||||
if (strlen(file_get_contents($file, false, null, 0, 100))!=100) {
|
||||
$result = "QRZ downloading failed for ".$call." either due to it being down or incorrect logins.";
|
||||
return "false";
|
||||
}
|
||||
|
||||
ini_set('memory_limit', '-1');
|
||||
$result = $this->loadFromFile($file, $show_views);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Function: loadFromFile
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| $filepath is the ADIF file, $display_view is used to hide the output if its internal script
|
||||
|
|
||||
| Internal function that takes the QRZ ADIF and imports into the log
|
||||
|
|
||||
*/
|
||||
private function loadFromFile($filepath, $display_view = "TRUE") {
|
||||
|
||||
// Figure out how we should be marking QSLs confirmed via LoTW
|
||||
$config['qrz_rcvd_mark'] = 'Y';
|
||||
|
||||
ini_set('memory_limit', '-1');
|
||||
set_time_limit(0);
|
||||
|
||||
$this->load->library('adif_parser');
|
||||
|
||||
$this->adif_parser->load_from_file($filepath);
|
||||
|
||||
$this->adif_parser->initialize();
|
||||
$tableheaders = "<table width=\"100%\">";
|
||||
$tableheaders .= "<tr class=\"titles\">";
|
||||
$tableheaders .= "<td>Station Callsign</td>";
|
||||
$tableheaders .= "<td>QSO Date</td>";
|
||||
$tableheaders .= "<td>Call</td>";
|
||||
$tableheaders .= "<td>Mode</td>";
|
||||
$tableheaders .= "<td>QRZ QSL Received</td>";
|
||||
$tableheaders .= "<td>QRZ Confirmed</td>";
|
||||
$tableheaders .= "<td>Log Status</td>";
|
||||
$tableheaders .= "</tr>";
|
||||
|
||||
$table = "";
|
||||
while($record = $this->adif_parser->get_record()) {
|
||||
if ((!(isset($record['app_qrzlog_qsldate']))) || (!(isset($record['qso_date'])))) {
|
||||
continue;
|
||||
}
|
||||
$time_on = date('Y-m-d', strtotime($record['qso_date'])) ." ".date('H:i', strtotime($record['time_on']));
|
||||
|
||||
$qsl_date = date('Y-m-d', strtotime($record['app_qrzlog_qsldate']));
|
||||
|
||||
if (isset($record['time_off'])) {
|
||||
$time_off = date('Y-m-d', strtotime($record['qso_date'])) ." ".date('H:i', strtotime($record['time_off']));
|
||||
} else {
|
||||
$time_off = date('Y-m-d', strtotime($record['qso_date'])) ." ".date('H:i', strtotime($record['time_on']));
|
||||
}
|
||||
|
||||
// If we have a positive match from LoTW, record it in the DB according to the user's preferences
|
||||
if ($record['app_qrzlog_status'] == "C") {
|
||||
$record['qsl_rcvd'] = $config['qrz_rcvd_mark'];
|
||||
}
|
||||
|
||||
$status = $this->logbook_model->import_check($time_on, $record['call'], $record['band'], $record['mode'], $record['station_callsign']);
|
||||
|
||||
if($status[0] == "Found") {
|
||||
$qrz_status = $this->logbook_model->qrz_update($time_on, $record['call'], $record['band'], $qsl_date, $record['qsl_rcvd'],$record['station_callsign']);
|
||||
|
||||
$table .= "<tr>";
|
||||
$table .= "<td>".$record['station_callsign']."</td>";
|
||||
$table .= "<td>".$time_on."</td>";
|
||||
$table .= "<td>".$record['call']."</td>";
|
||||
$table .= "<td>".$record['mode']."</td>";
|
||||
$table .= "<td>".$record['qsl_rcvd']."</td>";
|
||||
$table .= "<td>".$qsl_date."</td>";
|
||||
$table .= "<td>QSO Record: ".$status[0]."</td>";
|
||||
$table .= "</tr>";
|
||||
} else {
|
||||
$table .= "<tr>";
|
||||
$table .= "<td>".$record['station_callsign']."</td>";
|
||||
$table .= "<td>".$time_on."</td>";
|
||||
$table .= "<td>".$record['call']."</td>";
|
||||
$table .= "<td>".$record['mode']."</td>";
|
||||
$table .= "<td>".$record['qsl_rcvd']."</td>";
|
||||
$table .= "<td>QSO Record: ".$status[0]."</td>";
|
||||
$table .= "</tr>";
|
||||
}
|
||||
}
|
||||
|
||||
if ($table != "")
|
||||
{
|
||||
$table .= "</table>";
|
||||
$data['qrz_table_headers'] = $tableheaders;
|
||||
$data['qrz_table'] = $table;
|
||||
}
|
||||
|
||||
unlink($filepath);
|
||||
|
||||
$this->load->model('user_model');
|
||||
if ($this->user_model->authorize(2)) { // Only Output results if authorized User
|
||||
if(isset($tableheaders)) {
|
||||
if($display_view == TRUE) {
|
||||
$data['page_title'] = "QRZ ADIF Information";
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('qrz/analysis');
|
||||
$this->load->view('interface_assets/footer');
|
||||
} else {
|
||||
return $tableheaders.$table;
|
||||
}
|
||||
} else {
|
||||
echo "Downloaded QRZ report contains no matches.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
</head>
|
||||
<body>
|
||||
|
||||
<p>Directory access is forbidden.</p>
|
||||
<p>Directory access is forbidden here.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -408,17 +408,23 @@ class Logbook_model extends CI_Model {
|
|||
case 'EQSLSDATE':
|
||||
$this->db->where('date(COL_EQSL_QSLSDATE)=date(SYSDATE())');
|
||||
break;
|
||||
case 'LOTWRDATE':
|
||||
case 'lotwrdate':
|
||||
$this->db->where('date(COL_LOTW_QSLRDATE)=date(SYSDATE())');
|
||||
break;
|
||||
case 'LOTWSDATE':
|
||||
case 'lotwsdate':
|
||||
$this->db->where('date(COL_LOTW_QSLSDATE)=date(SYSDATE())');
|
||||
break;
|
||||
case 'qrzrdate':
|
||||
$this->db->where('date(COL_QRZCOM_QSO_DOWNLOAD_DATE)=date(SYSDATE())');
|
||||
break;
|
||||
case 'qrzsdate':
|
||||
$this->db->where('date(COL_QRZCOM_QSO_UPLOAD_DATE)=date(SYSDATE())');
|
||||
break;
|
||||
}
|
||||
|
||||
$this->db->where_in($this->config->item('table_name').'.station_id', $logbooks_locations_array);
|
||||
|
||||
if ($band != 'All') {
|
||||
if (strtolower($band) != 'all') {
|
||||
if($band != "SAT") {
|
||||
$this->db->where('COL_PROP_MODE !=', 'SAT');
|
||||
$this->db->where('COL_BAND', $band);
|
||||
|
@ -442,7 +448,7 @@ class Logbook_model extends CI_Model {
|
|||
$this->db->where($sql);
|
||||
}
|
||||
|
||||
if ($mode != 'All' && $mode != '') {
|
||||
if (strtolower($mode) != 'all' && $mode != '') {
|
||||
$this->db->where("(COL_MODE='" . $mode . "' OR COL_SUBMODE='" . $mode ."')");
|
||||
}
|
||||
$this->db->order_by("COL_TIME_ON", "desc");
|
||||
|
@ -1728,9 +1734,9 @@ class Logbook_model extends CI_Model {
|
|||
/*
|
||||
* Function returns all the station_id's with QRZ API Key's
|
||||
*/
|
||||
function get_station_id_with_qrz_api() {
|
||||
$sql = 'select station_id, qrzapikey from station_profile
|
||||
where coalesce(qrzapikey, "") <> ""';
|
||||
function get_qrz_apikeys() {
|
||||
$sql = 'select distinct qrzapikey, station_callsign,user_id from station_profile
|
||||
where coalesce(qrzapikey, "") <> "" order by qrzapikey, station_callsign';
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
|
@ -2451,13 +2457,17 @@ function check_if_callsign_worked_in_logbook($callsign, $StationLocationsArray =
|
|||
COUNT(IF(COL_EQSL_QSL_RCVD="Y",COL_EQSL_QSL_RCVD,null)) as eQSL_Received,
|
||||
COUNT(IF(COL_LOTW_QSL_SENT="Y",COL_LOTW_QSL_SENT,null)) as LoTW_Sent,
|
||||
COUNT(IF(COL_LOTW_QSL_RCVD="Y",COL_LOTW_QSL_RCVD,null)) as LoTW_Received,
|
||||
COUNT(IF(COL_QRZCOM_QSO_UPLOAD_STATUS="Y",COL_QRZCOM_QSO_UPLOAD_STATUS,null)) as QRZ_Sent,
|
||||
COUNT(IF(COL_QRZCOM_QSO_DOWNLOAD_STATUS="Y",COL_QRZCOM_QSO_DOWNLOAD_STATUS,null)) as QRZ_Received,
|
||||
COUNT(IF(COL_QSL_SENT="Y" and DATE(COL_QSLSDATE)=DATE(SYSDATE()),COL_QSL_SENT,null)) as QSL_Sent_today,
|
||||
COUNT(IF(COL_QSL_RCVD="Y" and DATE(COL_QSLRDATE)=DATE(SYSDATE()),COL_QSL_RCVD,null)) as QSL_Received_today,
|
||||
COUNT(IF(COL_QSL_SENT IN("Q", "R") and DATE(COL_QSLSDATE)=DATE(SYSDATE()) ,COL_QSL_SENT,null)) as QSL_Requested_today,
|
||||
COUNT(IF(COL_EQSL_QSL_SENT="Y" and DATE(COL_EQSL_QSLSDATE)=DATE(SYSDATE()),COL_EQSL_QSL_SENT,null)) as eQSL_Sent_today,
|
||||
COUNT(IF(COL_EQSL_QSL_RCVD="Y" and DATE(COL_EQSL_QSLRDATE)=DATE(SYSDATE()),COL_EQSL_QSL_RCVD,null)) as eQSL_Received_today,
|
||||
COUNT(IF(COL_LOTW_QSL_SENT="Y" and DATE(COL_LOTW_QSLSDATE)=DATE(SYSDATE()),COL_LOTW_QSL_SENT,null)) as LoTW_Sent_today,
|
||||
COUNT(IF(COL_LOTW_QSL_RCVD="Y" and DATE(COL_LOTW_QSLRDATE)=DATE(SYSDATE()),COL_LOTW_QSL_RCVD,null)) as LoTW_Received_today
|
||||
COUNT(IF(COL_LOTW_QSL_RCVD="Y" and DATE(COL_LOTW_QSLRDATE)=DATE(SYSDATE()),COL_LOTW_QSL_RCVD,null)) as LoTW_Received_today,
|
||||
COUNT(IF(COL_QRZCOM_QSO_UPLOAD_STATUS="Y" and DATE(COL_QRZCOM_QSO_UPLOAD_DATE)=DATE(SYSDATE()),COL_QRZCOM_QSO_UPLOAD_STATUS,null)) as QRZ_Sent_today,
|
||||
COUNT(IF(COL_QRZCOM_QSO_DOWNLOAD_STATUS="Y" and DATE(COL_QRZCOM_QSO_DOWNLOAD_DATE)=DATE(SYSDATE()),COL_QRZCOM_QSO_DOWNLOAD_STATUS,null)) as QRZ_Received_today
|
||||
');
|
||||
$this->db->where_in('station_id', $logbooks_locations_array);
|
||||
|
||||
|
@ -2471,6 +2481,8 @@ function check_if_callsign_worked_in_logbook($callsign, $StationLocationsArray =
|
|||
$QSLBreakdown['eQSL_Received'] = $row->eQSL_Received;
|
||||
$QSLBreakdown['LoTW_Sent'] = $row->LoTW_Sent;
|
||||
$QSLBreakdown['LoTW_Received'] = $row->LoTW_Received;
|
||||
$QSLBreakdown['QRZ_Sent'] = $row->QRZ_Sent;
|
||||
$QSLBreakdown['QRZ_Received'] = $row->QRZ_Received;
|
||||
$QSLBreakdown['QSL_Sent_today'] = $row->QSL_Sent_today;
|
||||
$QSLBreakdown['QSL_Received_today'] = $row->QSL_Received_today;
|
||||
$QSLBreakdown['QSL_Requested_today'] = $row->QSL_Requested_today;
|
||||
|
@ -2478,6 +2490,8 @@ function check_if_callsign_worked_in_logbook($callsign, $StationLocationsArray =
|
|||
$QSLBreakdown['eQSL_Received_today'] = $row->eQSL_Received_today;
|
||||
$QSLBreakdown['LoTW_Sent_today'] = $row->LoTW_Sent_today;
|
||||
$QSLBreakdown['LoTW_Received_today'] = $row->LoTW_Received_today;
|
||||
$QSLBreakdown['QRZ_Sent_today'] = $row->QRZ_Sent_today;
|
||||
$QSLBreakdown['QRZ_Received_today'] = $row->QRZ_Received_today;
|
||||
}
|
||||
|
||||
return $QSLBreakdown;
|
||||
|
@ -2878,7 +2892,31 @@ function check_if_callsign_worked_in_logbook($callsign, $StationLocationsArray =
|
|||
}
|
||||
}
|
||||
|
||||
function lotw_update($datetime, $callsign, $band, $qsl_date, $qsl_status, $state, $qsl_gridsquare, $qsl_vucc_grids, $iota, $cnty, $cqz, $ituz, $station_callsign) {
|
||||
function qrz_update($datetime, $callsign, $band, $qsl_date, $qsl_status, $station_callsign) {
|
||||
|
||||
$data = array(
|
||||
'COL_QRZCOM_QSO_DOWNLOAD_DATE' => $qsl_date,
|
||||
'COL_QRZCOM_QSO_DOWNLOAD_STATUS' => $qsl_status,
|
||||
);
|
||||
|
||||
|
||||
$this->db->where('date_format(COL_TIME_ON, \'%Y-%m-%d %H:%i\') = "'.$datetime.'"');
|
||||
$this->db->where('COL_CALL', $callsign);
|
||||
$this->db->where('COL_BAND', $band);
|
||||
$this->db->where('COL_STATION_CALLSIGN', $station_callsign);
|
||||
|
||||
if ($this->db->update($this->config->item('table_name'), $data)) {
|
||||
unset($data);
|
||||
return "Updated";
|
||||
} else {
|
||||
unset($data);
|
||||
return "Not updated";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function lotw_update($datetime, $callsign, $band, $qsl_date, $qsl_status, $state, $qsl_gridsquare, $qsl_vucc_grids, $iota, $cnty, $cqz, $ituz, $station_callsign) {
|
||||
|
||||
$data = array(
|
||||
'COL_LOTW_QSLRDATE' => $qsl_date,
|
||||
|
@ -2961,7 +2999,20 @@ function check_if_callsign_worked_in_logbook($callsign, $StationLocationsArray =
|
|||
return "Updated";
|
||||
}
|
||||
|
||||
function lotw_last_qsl_date($user_id) {
|
||||
function qrz_last_qsl_date($user_id) {
|
||||
$sql="SELECT date_format(MAX(COALESCE(COL_QRZCOM_QSO_DOWNLOAD_DATE, str_to_date('1900-01-01','%Y-%m-%d'))),'%Y-%m-%d') MAXDATE
|
||||
FROM ".$this->config->item('table_name')." INNER JOIN station_profile ON (".$this->config->item('table_name').".station_id = station_profile.station_id)
|
||||
WHERE station_profile.user_id=? and station_profile.qrzapikey is not null and COL_QRZCOM_QSO_DOWNLOAD_DATE is not null";
|
||||
$query = $this->db->query($sql,$user_id);
|
||||
$row = $query->row();
|
||||
if (isset($row) && ($row->MAXDATE ?? '' != '')) {
|
||||
return $row->MAXDATE;
|
||||
} else {
|
||||
return '1900-01-01';
|
||||
}
|
||||
}
|
||||
|
||||
function lotw_last_qsl_date($user_id) {
|
||||
$sql="SELECT MAX(COALESCE(COL_LOTW_QSLRDATE, '1900-01-01 00:00:00')) MAXDATE
|
||||
FROM ".$this->config->item('table_name')." INNER JOIN station_profile ON (".$this->config->item('table_name').".station_id = station_profile.station_id)
|
||||
WHERE station_profile.user_id=".$user_id." and COL_LOTW_QSLRDATE is not null";
|
||||
|
|
|
@ -87,6 +87,15 @@ class User_Model extends CI_Model {
|
|||
return $r->user_email;
|
||||
}
|
||||
|
||||
function hasQrzKey($user_id) {
|
||||
$this->db->where('station_profile.qrzapikey is not null');
|
||||
$this->db->join('station_profile', 'station_profile.user_id = '.$user_id);
|
||||
$query = $this->db->get($this->config->item('auth_table'));
|
||||
|
||||
$ret = $query->row();
|
||||
return $ret->user_email;
|
||||
}
|
||||
|
||||
function get_email_address($station_id) {
|
||||
$this->db->where('station_id', $station_id);
|
||||
$this->db->join('station_profile', 'station_profile.user_id = '.$this->config->item('auth_table').'.user_id');
|
||||
|
@ -366,6 +375,7 @@ class User_Model extends CI_Model {
|
|||
'active_station_logbook' => $u->row()->active_station_logbook,
|
||||
'language' => isset($u->row()->language) ? $u->row()->language: 'english',
|
||||
'isWinkeyEnabled' => $u->row()->winkey,
|
||||
'hasQrzKey' => $this->hasQrzKey($u->row()->user_id),
|
||||
);
|
||||
|
||||
$this->session->set_userdata($userdata);
|
||||
|
|
|
@ -286,7 +286,7 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
|
|||
</table>
|
||||
<?php } ?>
|
||||
|
||||
<?php if((($this->config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === FALSE) && ($total_lotw_sent != 0 || $total_lotw_rcvd != 0)) { ?>
|
||||
<?php if((($this->config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === false) && ($total_lotw_sent != 0 || $total_lotw_rcvd != 0)) { ?>
|
||||
<table class="table table-striped border-top">
|
||||
<tr class="titles">
|
||||
<td colspan="2"><i class="fas fa-list"></i> <?php echo lang('general_word_lotw'); ?></td>
|
||||
|
@ -296,13 +296,34 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
|
|||
<tr>
|
||||
<td width="50%"><?php echo lang('general_word_sent'); ?></td>
|
||||
<td width="25%"><?php echo $total_lotw_sent; ?></td>
|
||||
<td width="25%"><a href="javascript:displayContacts('','All','All','LOTWSDATE','');"><?php echo $lotw_sent_today; ?></a></td>
|
||||
<td width="25%"><a href="javascript:displayContacts('','all','all','lotwsdate','');"><?php echo $lotw_sent_today; ?></a></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%"><?php echo lang('general_word_received'); ?></td>
|
||||
<td width="25%"><?php echo $total_lotw_rcvd; ?></td>
|
||||
<td width="25%"><a href="javascript:displayContacts('','All','All','LOTWRDATE','');"><?php echo $lotw_rcvd_today; ?></a></td>
|
||||
<td width="25%"><a href="javascript:displayContacts('','all','all','lotwrdate','');"><?php echo $lotw_rcvd_today; ?></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php } ?>
|
||||
|
||||
<?php if((($this->config->item('use_auth') && ($this->session->userdata('user_type') >= 2)) || $this->config->item('use_auth') === false) && ($total_qrz_sent != 0 || $total_qrz_rcvd != 0)) { ?>
|
||||
<table class="table table-striped border-top">
|
||||
<tr class="titles">
|
||||
<td colspan="2"><i class="fas fa-list"></i> QRZ.com</td>
|
||||
<td colspan="1"><?php echo lang('general_word_today'); ?></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%"><?php echo lang('general_word_sent'); ?></td>
|
||||
<td width="25%"><?php echo $total_qrz_sent; ?></td>
|
||||
<td width="25%"><a href="javascript:displayContacts('','all','all','qrzsdate','');"><?php echo $qrz_sent_today; ?></a></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td width="50%"><?php echo lang('general_word_received'); ?></td>
|
||||
<td width="25%"><?php echo $total_qrz_rcvd; ?></td>
|
||||
<td width="25%"><a href="javascript:displayContacts('','all','all','qrzrdate','');"><?php echo $qrz_rcvd_today; ?></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php } ?>
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
<li class="nav-item">
|
||||
<a class="nav-link active" id="export-tab" data-bs-toggle="tab" href="#export" role="tab" aria-controls="import" aria-selected="true">Upload Logbook</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="mark-tab" data-bs-toggle="tab" href="#import" role="tab" aria-controls="import" aria-selected="false">Download QSOs</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="mark-tab" data-bs-toggle="tab" href="#mark" role="tab" aria-controls="export" aria-selected="false">Mark QSOs</a>
|
||||
</li>
|
||||
|
@ -57,7 +60,22 @@
|
|||
?>
|
||||
|
||||
</div>
|
||||
<div class="tab-pane fade" id="mark" role="tabpanel" aria-labelledby="home-tab">
|
||||
<div class="tab-pane fade" id="import" role="tabpanel" aria-labelledby="home-tab">
|
||||
|
||||
<form class="form" action="<?php echo site_url('qrz/import_qrz'); ?>" method="post" enctype="multipart/form-data">
|
||||
<p><span class="badge text-bg-warning">Warning</span> If no startdate is given then all QSOs after last confirmation will be downloaded/updated!</p>
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
<label for="from"><?php echo lang('gen_from_date') . ": " ?></label>
|
||||
<input name="from" id="from" type="date" class="form-control w-auto">
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<button type="submit" class="btn btn-sm btn-primary" value="Export">Download from QRZ Logbook</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade" id="mark" role="tabpanel" aria-labelledby="home-tab">
|
||||
|
||||
<form class="form" action="<?php echo site_url('qrz/mark_qrz'); ?>" method="post" enctype="multipart/form-data">
|
||||
<select name="station_profile" class="form-select mb-4 me-sm-4" style="width: 30%;">
|
||||
|
|
|
@ -98,6 +98,9 @@ $ci =& get_instance();
|
|||
<?php if($this->session->userdata('user_lotw_name') != "") { ?>
|
||||
<th>LoTW</th>
|
||||
<?php } ?>
|
||||
<?php if($this->session->userdata('hasQrzKey') != "") { ?>
|
||||
<th>QRZ</th>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<th><?php echo lang('gen_hamradio_station'); ?></th>
|
||||
<?php if(($this->config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?>
|
||||
|
@ -371,6 +374,36 @@ $ci =& get_instance();
|
|||
echo '</td>';
|
||||
} ?>
|
||||
|
||||
<?php if($this->session->userdata('hasQrzKey') != "") {
|
||||
echo '<td style=\'text-align: center\' class="qrz">';
|
||||
echo '<span ';
|
||||
if ($row->COL_QRZCOM_QSO_UPLOAD_STATUS == "Y") {
|
||||
echo "title=\"QRZ ".lang('general_word_sent');
|
||||
if ($row->COL_QRZCOM_QSO_UPLOAD_DATE != null) {
|
||||
$timestamp = strtotime($row->COL_QRZCOM_QSO_UPLOAD_DATE);
|
||||
echo " ".($timestamp != '' ? date($custom_date_format, $timestamp) : '');
|
||||
}
|
||||
echo "\" data-bs-toggle=\"tooltip\"";
|
||||
}
|
||||
echo ' class="qrz-';
|
||||
echo ($row->COL_QRZCOM_QSO_UPLOAD_STATUS=='Y')?'green':'red';
|
||||
echo '">▲</span>';
|
||||
|
||||
echo '<span ';
|
||||
if ($row->COL_QRZCOM_QSO_DOWNLOAD_STATUS == "Y") {
|
||||
echo "title=\"QRZ ".lang('general_word_received');
|
||||
if ($row->COL_QRZCOM_QSO_DOWNLOAD_DATE != null) {
|
||||
$timestamp = strtotime($row->COL_QRZCOM_QSO_DOWNLOAD_DATE);
|
||||
echo " ".($timestamp != '' ? date($custom_date_format, $timestamp) : '');
|
||||
}
|
||||
echo "\" data-bs-toggle=\"tooltip\"";
|
||||
}
|
||||
echo ' class="qrz-';
|
||||
echo ($row->COL_QRZCOM_QSO_DOWNLOAD_STATUS=='Y')?'green':'red';
|
||||
echo '">▼</span>';
|
||||
echo '</td>';
|
||||
} ?>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($row->station_callsign)) { ?>
|
||||
|
|
|
@ -110,6 +110,13 @@
|
|||
<span class="lotw-<?php echo ($row->COL_LOTW_QSL_SENT=='Y')?'green':'red'?>">▲</span>
|
||||
<span class="lotw-<?php echo ($row->COL_LOTW_QSL_RCVD=='Y')?'green':'red'?>">▼</span>
|
||||
</td>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($this->session->userdata('hasQrzKey') != "") { ?>
|
||||
<td class="lotw">
|
||||
<span class="lotw-<?php echo ($row->COL_QRZCOM_QSO_UPLOAD_STATUS=='Y')?'green':'red'?>">▲</span>
|
||||
<span class="lotw-<?php echo ($row->COL_QRZCOM_QSO_DOWNLOAD_STATUS=='Y')?'green':'red'?>">▼</span>
|
||||
</td>
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($row->station_callsign)) { ?>
|
||||
|
|
|
@ -77,6 +77,9 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
|
|||
<?php if($this->session->userdata('user_lotw_name') != "") { ?>
|
||||
<th>LoTW</th>
|
||||
<?php } ?>
|
||||
<?php if($this->session->userdata('hasQrzKey') != "") { ?>
|
||||
<th>QRZ</th>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<th><?php echo lang('gen_hamradio_station'); ?></th>
|
||||
<?php if(($this->config->item('use_auth')) && ($this->session->userdata('user_type') >= 2)) { ?>
|
||||
|
@ -226,6 +229,13 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
|
|||
</td>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($this->session->userdata('hasQrzKey') != "") { ?>
|
||||
<td class="qrz">
|
||||
<span <?php if ($row->COL_QRZCOM_QSO_UPLOAD_STATUS == "Y") { echo "title=\"QRZ ".lang('general_word_sent'); if ($row->COL_QRZCOM_QSO_UPLOAD_DATE != null) { $timestamp = strtotime($row->COL_QRZCOM_QSO_UPLOAD_DATE); echo " ".($timestamp!=''?date($custom_date_format, $timestamp):''); } echo "\" data-bs-toggle=\"tooltip\""; } ?> class="qrz-<?php echo ($row->COL_QRZCOM_QSO_UPLOAD_STATUS=='Y')?'green':'red'?>">▲</span>
|
||||
<span <?php if ($row->COL_QRZCOM_QSO_DOWNLOAD_STATUS == "Y") { echo "title=\"QRZ ".lang('general_word_received'); if ($row->COL_QRZCOM_QSO_DOWNLOAD_DATE != null) { $timestamp = strtotime($row->COL_QRZCOM_QSO_DOWNLOAD_DATE); echo " ".($timestamp!=''?date($custom_date_format, $timestamp):''); } echo "\" data-bs-toggle=\"tooltip\""; } ?> class="qrz-<?php echo ($row->COL_QRZCOM_QSO_DOWNLOAD_STATUS=='Y')?'green':'red'?>">▼</span>
|
||||
</td>
|
||||
<?php } ?>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($row->station_callsign)) { ?>
|
||||
|
|
|
@ -160,7 +160,7 @@ div.alert-danger {
|
|||
|
||||
#qsoList_wrapper th {
|
||||
text-align: left !important;
|
||||
white-space: nowrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
#qsoList_wrapper td {
|
||||
text-align: left !important;
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
|
||||
#qsoList_wrapper th {
|
||||
text-align: left !important;
|
||||
white-space: nowrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
#qsoList_wrapper td {
|
||||
text-align: left !important;
|
||||
|
|
|
@ -166,7 +166,7 @@ path.grid-worked {
|
|||
|
||||
#qsoList_wrapper th {
|
||||
text-align: left !important;
|
||||
white-space: nowrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
#qsoList_wrapper td {
|
||||
text-align: left !important;
|
||||
|
|
|
@ -179,7 +179,7 @@ div.alert-danger {
|
|||
|
||||
#qsoList_wrapper th {
|
||||
text-align: left !important;
|
||||
white-space: nowrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
#qsoList_wrapper td {
|
||||
text-align: left !important;
|
||||
|
|
|
@ -41,7 +41,7 @@ thead > tr > td {
|
|||
|
||||
#qsoList_wrapper th {
|
||||
text-align: left !important;
|
||||
white-space: nowrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
#qsoList_wrapper td {
|
||||
|
|
|
@ -197,6 +197,18 @@ TD.eqsl {
|
|||
color: #dddddd !important;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
TD.qrz {
|
||||
width: 33px;
|
||||
}
|
||||
.qrz-green {
|
||||
color: #00a000 !important;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
.qrz-red {
|
||||
color: #f00 !important;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
TD.lotw {
|
||||
width: 33px;
|
||||
}
|
||||
|
|
|
@ -202,7 +202,7 @@ div.alert-danger {
|
|||
|
||||
#qsoList_wrapper th {
|
||||
text-align: left !important;
|
||||
white-space: nowrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
#qsoList_wrapper td {
|
||||
text-align: left !important;
|
||||
|
|
Ładowanie…
Reference in New Issue