Merge pull request #470 from wavelog/dev

Release Version 1.6.1
This commit is contained in:
Florian (DF2ET)
2024-06-14 07:48:55 +02:00
committed by GitHub
1770 changed files with 130467 additions and 253458 deletions

View File

@@ -676,7 +676,7 @@ $config['proxy_ips'] = '';
|
*/
$config['userdata'] = 'userdata';
$config['userdata'] = 'userdata';
/*
|--------------------------------------------------------------------------
@@ -692,3 +692,9 @@ $config['disable_manual_lotw'] = false;
$config['disable_manual_eqsl'] = false;
$config['disable_manual_hrdlog'] = false;
$config['disable_manual_qrz'] = false;
# Disables QSL-Image-Feature if true. if non-existant or false the QSL-Feature is enabled
$config['disable_qsl'] = false;
# Disables OQRS-Feature if true. if non-existant or false the OQRS-Feature is enabled
$config['disable_oqrs'] = false;

View File

@@ -22,7 +22,7 @@ $config['migration_enabled'] = TRUE;
|
*/
$config['migration_version'] = 202;
$config['migration_version'] = 204;
/*
|--------------------------------------------------------------------------

View File

@@ -1,75 +1,62 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Activators extends CI_Controller {
class Activators extends CI_Controller
{
function __construct()
{
parent::__construct();
$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'); }
if (!$this->user_model->authorize(2)) {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
redirect('dashboard');
}
}
public function index()
{
// Render Page
$data['page_title'] = "Gridsquare Activators";
$this->load->model('Activators_model');
if ($this->input->post('band') != NULL) { // Band is not set when page first loads.
$band = $this->input->post('band');
}
else {
} else {
$band = 'All';
}
if ($this->input->post('mincount') != NULL) { // mincount is not set when page first loads.
$mincount = $this->input->post('mincount');
} else {
$mincount = 2;
}
if ($this->input->post('leogeo') != NULL) { // orbit is not set when page first loads.
$orbit = $this->input->post('leogeo');
} else {
$orbit = 'both';
}
$this->load->model('bands');
$data['worked_bands'] = $this->bands->get_worked_bands();
$data['mincount'] = $mincount;
$data['maxactivatedgrids'] = $this->Activators_model->get_max_activated_grids();
$data['activators_array'] = $this->Activators_model->get_activators($band, $this->input->post('mincount'), $this->input->post('leogeo'));
$data['activators_vucc_array'] = $this->Activators_model->get_activators_vucc($band, $this->input->post('leogeo'));
$data['orbit'] = $orbit;
$data['activators_array'] = $this->Activators_model->get_activators($band, $mincount, $orbit);
$data['activators_vucc_array'] = $this->Activators_model->get_activators_vucc($band, $orbit);
$data['bandselect'] = $band;
$footerData = [];
$footerData['scripts'] = [
'assets/js/sections/activators.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/activators.js")),
];
$this->load->view('interface_assets/header', $data);
$this->load->view('activators/index');
$this->load->view('interface_assets/footer');
}
public function details() {
$this->load->model('logbook_model');
$call = str_replace('"', "", $this->input->post("Callsign"));
$band = str_replace('"', "", $this->input->post("Band"));
$leogeo = str_replace('"', "", $this->input->post("LeoGeo"));
$data['results'] = $this->logbook_model->activator_details($call, $band, $leogeo);
$data['filter'] = "Call ".$call;
switch($band) {
case 'All': $data['page_title'] = "Log View All Bands";
$data['filter'] .= " and Band All";
break;
case 'SAT': $data['page_title'] = "Log View SAT";
$data['filter'] .= " and Band SAT";
break;
default: $data['page_title'] = "Log View Band";
$data['filter'] .= " and Band ".$band;
break;
}
if ($band == "SAT") {
switch($leogeo) {
case 'both': $data['filter'] .= " and GEO/LEO";
break;
case 'leo': $data['filter'] .= " and LEO";
break;
case 'geo': $data['filter'] .= " and GEO";
break;
}
}
$this->load->view('activators/details', $data);
$this->load->view('interface_assets/footer', $footerData);
}
}

View File

@@ -152,6 +152,7 @@ class adif extends CI_Controller {
$station_profile = $this->stations->profile($active_station_id);
$data['active_station_info'] = $station_profile->row();
$data['active_station_id'] = $active_station_id;
$this->load->view('interface_assets/header', $data);
$this->load->view('adif/import');

View File

@@ -65,6 +65,7 @@ class Awards extends CI_Controller {
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['clublog'] = $this->security->xss_clean($this->input->post('clublog'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
@@ -74,6 +75,7 @@ class Awards extends CI_Controller {
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['qrz'] = 0;
$postdata['clublog'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['band'] = 'All';
@@ -113,25 +115,25 @@ class Awards extends CI_Controller {
if ($this->input->post('band') != NULL) { // Band is not set when page first loads.
if ($this->input->post('band') == 'All') { // Did the user specify a band? If not, use all bands
$bands = $data['worked_bands'];
}
else {
} else {
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
}
else {
} else {
$bands = $data['worked_bands'];
}
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$postdata['qrz'] = $this->input->post('qrz') == 0 ? NULL: 1;
$postdata['clublog'] = $this->input->post('clublog') == 0 ? NULL: 1;
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
$postdata['includedeleted'] = $this->security->xss_clean($this->input->post('includedeleted'));
$postdata['Africa'] = $this->security->xss_clean($this->input->post('Africa'));
$postdata['Asia'] = $this->security->xss_clean($this->input->post('Asia'));
@@ -144,8 +146,7 @@ class Awards extends CI_Controller {
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
$postdata['sat'] = $this->security->xss_clean($this->input->post('sats'));
$postdata['orbit'] = $this->security->xss_clean($this->input->post('orbits'));
}
else { // Setting default values at first load of page
} else { // Setting default values at first load of page
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
@@ -186,67 +187,69 @@ class Awards extends CI_Controller {
];
$this->load->model('waja');
$this->load->model('modes');
$this->load->model('bands');
$this->load->model('modes');
$this->load->model('bands');
$data['worked_bands'] = $this->bands->get_worked_bands('waja');
$data['modes'] = $this->modes->active();
$data['worked_bands'] = $this->bands->get_worked_bands('waja');
$data['modes'] = $this->modes->active();
if ($this->input->post('band') != NULL) { // Band is not set when page first loads.
if ($this->input->post('band') == 'All') { // Did the user specify a band? If not, use all bands
$bands = $data['worked_bands'];
}
else {
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
}
else {
$bands = $data['worked_bands'];
}
if ($this->input->post('band') != NULL) { // Band is not set when page first loads.
if ($this->input->post('band') == 'All') { // Did the user specify a band? If not, use all bands
$bands = $data['worked_bands'];
}
else {
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
}
else {
$bands = $data['worked_bands'];
}
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['includedeleted'] = $this->security->xss_clean($this->input->post('includedeleted'));
$postdata['Africa'] = $this->security->xss_clean($this->input->post('Africa'));
$postdata['Asia'] = $this->security->xss_clean($this->input->post('Asia'));
$postdata['Europe'] = $this->security->xss_clean($this->input->post('Europe'));
$postdata['NorthAmerica'] = $this->security->xss_clean($this->input->post('NorthAmerica'));
$postdata['SouthAmerica'] = $this->security->xss_clean($this->input->post('SouthAmerica'));
$postdata['Oceania'] = $this->security->xss_clean($this->input->post('Oceania'));
$postdata['Antarctica'] = $this->security->xss_clean($this->input->post('Antarctica'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
else { // Setting default values at first load of page
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['qrz'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 1;
$postdata['includedeleted'] = 0;
$postdata['Africa'] = 1;
$postdata['Asia'] = 1;
$postdata['Europe'] = 1;
$postdata['NorthAmerica'] = 1;
$postdata['SouthAmerica'] = 1;
$postdata['Oceania'] = 1;
$postdata['Antarctica'] = 1;
$postdata['band'] = 'All';
$postdata['mode'] = 'All';
}
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['clublog'] = $this->security->xss_clean($this->input->post('clublog'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['includedeleted'] = $this->security->xss_clean($this->input->post('includedeleted'));
$postdata['Africa'] = $this->security->xss_clean($this->input->post('Africa'));
$postdata['Asia'] = $this->security->xss_clean($this->input->post('Asia'));
$postdata['Europe'] = $this->security->xss_clean($this->input->post('Europe'));
$postdata['NorthAmerica'] = $this->security->xss_clean($this->input->post('NorthAmerica'));
$postdata['SouthAmerica'] = $this->security->xss_clean($this->input->post('SouthAmerica'));
$postdata['Oceania'] = $this->security->xss_clean($this->input->post('Oceania'));
$postdata['Antarctica'] = $this->security->xss_clean($this->input->post('Antarctica'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
else { // Setting default values at first load of page
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['qrz'] = 0;
$postdata['clublog'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 1;
$postdata['includedeleted'] = 0;
$postdata['Africa'] = 1;
$postdata['Asia'] = 1;
$postdata['Europe'] = 1;
$postdata['NorthAmerica'] = 1;
$postdata['SouthAmerica'] = 1;
$postdata['Oceania'] = 1;
$postdata['Antarctica'] = 1;
$postdata['band'] = 'All';
$postdata['mode'] = 'All';
}
$data['waja_array'] = $this->waja->get_waja_array($bands, $postdata);
$data['waja_summary'] = $this->waja->get_waja_summary($bands, $postdata);
$data['waja_array'] = $this->waja->get_waja_array($bands, $postdata);
$data['waja_summary'] = $this->waja->get_waja_summary($bands, $postdata);
// Render Page
$data['page_title'] = "Awards - WAJA";
@@ -263,67 +266,66 @@ class Awards extends CI_Controller {
];
$this->load->model('jcc_model');
$this->load->model('modes');
$this->load->model('bands');
$this->load->model('modes');
$this->load->model('bands');
$data['worked_bands'] = $this->bands->get_worked_bands('jcc');
$data['modes'] = $this->modes->active();
$data['worked_bands'] = $this->bands->get_worked_bands('jcc');
$data['modes'] = $this->modes->active();
if ($this->input->post('band') != NULL) { // Band is not set when page first loads.
if ($this->input->post('band') == 'All') { // Did the user specify a band? If not, use all bands
$bands = $data['worked_bands'];
}
else {
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
}
else {
$bands = $data['worked_bands'];
}
if ($this->input->post('band') != NULL) { // Band is not set when page first loads.
if ($this->input->post('band') == 'All') { // Did the user specify a band? If not, use all bands
$bands = $data['worked_bands'];
} else {
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
} else {
$bands = $data['worked_bands'];
}
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['includedeleted'] = $this->security->xss_clean($this->input->post('includedeleted'));
$postdata['Africa'] = $this->security->xss_clean($this->input->post('Africa'));
$postdata['Asia'] = $this->security->xss_clean($this->input->post('Asia'));
$postdata['Europe'] = $this->security->xss_clean($this->input->post('Europe'));
$postdata['NorthAmerica'] = $this->security->xss_clean($this->input->post('NorthAmerica'));
$postdata['SouthAmerica'] = $this->security->xss_clean($this->input->post('SouthAmerica'));
$postdata['Oceania'] = $this->security->xss_clean($this->input->post('Oceania'));
$postdata['Antarctica'] = $this->security->xss_clean($this->input->post('Antarctica'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
else { // Setting default values at first load of page
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['qrz'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 0;
$postdata['includedeleted'] = 0;
$postdata['Africa'] = 1;
$postdata['Asia'] = 1;
$postdata['Europe'] = 1;
$postdata['NorthAmerica'] = 1;
$postdata['SouthAmerica'] = 1;
$postdata['Oceania'] = 1;
$postdata['Antarctica'] = 1;
$postdata['band'] = 'All';
$postdata['mode'] = 'All';
}
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['clublog'] = $this->security->xss_clean($this->input->post('clublog'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['includedeleted'] = $this->security->xss_clean($this->input->post('includedeleted'));
$postdata['Africa'] = $this->security->xss_clean($this->input->post('Africa'));
$postdata['Asia'] = $this->security->xss_clean($this->input->post('Asia'));
$postdata['Europe'] = $this->security->xss_clean($this->input->post('Europe'));
$postdata['NorthAmerica'] = $this->security->xss_clean($this->input->post('NorthAmerica'));
$postdata['SouthAmerica'] = $this->security->xss_clean($this->input->post('SouthAmerica'));
$postdata['Oceania'] = $this->security->xss_clean($this->input->post('Oceania'));
$postdata['Antarctica'] = $this->security->xss_clean($this->input->post('Antarctica'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
} else { // Setting default values at first load of page
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['qrz'] = 0;
$postdata['clublog'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 0;
$postdata['includedeleted'] = 0;
$postdata['Africa'] = 1;
$postdata['Asia'] = 1;
$postdata['Europe'] = 1;
$postdata['NorthAmerica'] = 1;
$postdata['SouthAmerica'] = 1;
$postdata['Oceania'] = 1;
$postdata['Antarctica'] = 1;
$postdata['band'] = 'All';
$postdata['mode'] = 'All';
}
$data['jcc_array'] = $this->jcc_model->get_jcc_array($bands, $postdata);
$data['jcc_summary'] = $this->jcc_model->get_jcc_summary($bands, $postdata);
$data['jcc_array'] = $this->jcc_model->get_jcc_array($bands, $postdata);
$data['jcc_summary'] = $this->jcc_model->get_jcc_summary($bands, $postdata);
// Render Page
$data['page_title'] = "Awards - JCC";
@@ -332,86 +334,87 @@ class Awards extends CI_Controller {
$this->load->view('interface_assets/footer', $footerData);
}
public function jcc_export() {
$this->load->model('Jcc_model');
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
public function jcc_export() {
$this->load->model('Jcc_model');
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['clublog'] = $this->security->xss_clean($this->input->post('clublog'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
$qsos = $this->Jcc_model->exportJcc($postdata);
$qsos = $this->Jcc_model->exportJcc($postdata);
$fp = fopen( 'php://output', 'w' );
$i=1;
fputcsv($fp, array('No', 'Callsign', 'Date', 'Band', 'Mode', 'Remarks'), ';');
foreach ($qsos as $qso) {
fputcsv($fp, array($i, $qso['call'], $qso['date'], ($qso['prop_mode'] != null ? $qso['band'].' / '.$qso['prop_mode'] : $qso['band']), $qso['mode'], $qso['cnty'].' - '.$qso['jcc']), ';');
$i++;
}
fclose($fp);
return;
}
$fp = fopen( 'php://output', 'w' );
$i=1;
fputcsv($fp, array('No', 'Callsign', 'Date', 'Band', 'Mode', 'Remarks'), ';');
foreach ($qsos as $qso) {
fputcsv($fp, array($i, $qso['call'], $qso['date'], ($qso['prop_mode'] != null ? $qso['band'].' / '.$qso['prop_mode'] : $qso['band']), $qso['mode'], $qso['cnty'].' - '.$qso['jcc']), ';');
$i++;
}
fclose($fp);
return;
}
public function jcc_cities() {
$this->load->model('Jcc_model');
$data = $this->Jcc_model->jccCities();
header('Content-Type: application/json');
echo json_encode($data, JSON_PRETTY_PRINT);
}
public function jcc_cities() {
$this->load->model('Jcc_model');
$data = $this->Jcc_model->jccCities();
header('Content-Type: application/json');
echo json_encode($data, JSON_PRETTY_PRINT);
}
public function vucc() {
$this->load->model('vucc');
$this->load->model('bands');
$data['worked_bands'] = $this->bands->get_worked_bands('vucc');
public function vucc() {
$this->load->model('vucc');
$this->load->model('bands');
$data['worked_bands'] = $this->bands->get_worked_bands('vucc');
$data['vucc_array'] = $this->vucc->get_vucc_array($data);
$data['vucc_array'] = $this->vucc->get_vucc_array($data);
// Render Page
$data['page_title'] = "Awards - VUCC";
$this->load->view('interface_assets/header', $data);
$this->load->view('awards/vucc/index');
$this->load->view('interface_assets/footer');
}
// Render Page
$data['page_title'] = "Awards - VUCC";
$this->load->view('interface_assets/header', $data);
$this->load->view('awards/vucc/index');
$this->load->view('interface_assets/footer');
}
public function vucc_band(){
$this->load->model('vucc');
$band = str_replace('"', "", $this->security->xss_clean($this->input->get("Band")));
$type = str_replace('"', "", $this->security->xss_clean($this->input->get("Type")));
$data['vucc_array'] = $this->vucc->vucc_details($band, $type);
$data['type'] = $type;
public function vucc_band(){
$this->load->model('vucc');
$band = str_replace('"', "", $this->security->xss_clean($this->input->get("Band")));
$type = str_replace('"', "", $this->security->xss_clean($this->input->get("Type")));
$data['vucc_array'] = $this->vucc->vucc_details($band, $type);
$data['type'] = $type;
// Render Page
$data['page_title'] = "VUCC - " .$band . " Band";
$data['filter'] = "band ".$band;
$data['band'] = $band;
$this->load->view('interface_assets/header', $data);
$this->load->view('awards/vucc/band');
$this->load->view('interface_assets/footer');
}
// Render Page
$data['page_title'] = "VUCC - " .$band . " Band";
$data['filter'] = "band ".$band;
$data['band'] = $band;
$this->load->view('interface_assets/header', $data);
$this->load->view('awards/vucc/band');
$this->load->view('interface_assets/footer');
}
public function vucc_details_ajax(){
$this->load->model('logbook_model');
public function vucc_details_ajax(){
$this->load->model('logbook_model');
$gridsquare = str_replace('"', "", $this->security->xss_clean($this->input->post("Gridsquare")));
$band = str_replace('"', "", $this->security->xss_clean($this->input->post("Band")));
$data['results'] = $this->logbook_model->vucc_qso_details($gridsquare, $band);
$gridsquare = str_replace('"', "", $this->security->xss_clean($this->input->post("Gridsquare")));
$band = str_replace('"', "", $this->security->xss_clean($this->input->post("Band")));
$data['results'] = $this->logbook_model->vucc_qso_details($gridsquare, $band);
// Render Page
$data['page_title'] = "Log View - VUCC";
$data['filter'] = "vucc " . $gridsquare . " and band ".$band;
$this->load->view('awards/details', $data);
}
// Render Page
$data['page_title'] = "Log View - VUCC";
$data['filter'] = "vucc " . $gridsquare . " and band ".$band;
$this->load->view('awards/details', $data);
}
/*
* Used to fetch QSOs from the logbook in the awards
*/
public function qso_details_ajax(){
public function qso_details_ajax() {
$this->load->model('logbook_model');
$searchphrase = str_replace('"', "", $this->security->xss_clean($this->input->post("Searchphrase")));
@@ -419,7 +422,7 @@ class Awards extends CI_Controller {
$mode = str_replace('"', "", $this->security->xss_clean($this->input->post("Mode")));
$sat = str_replace('"', "", $this->security->xss_clean($this->input->post("Sat")));
$orbit = str_replace('"', "", $this->security->xss_clean($this->input->post("Orbit")));
$propagation = str_replace('"', "", $this->security->xss_clean($this->input->post("Propagation")) ?? '');
$propagation = str_replace('"', "", $this->security->xss_clean($this->input->post("Propagation")) ?? '');
$type = $this->security->xss_clean($this->input->post('Type'));
$qsl = $this->input->post('QSL') == null ? '' : $this->security->xss_clean($this->input->post('QSL'));
$searchmode = $this->input->post('searchmode') == null ? '' : $this->security->xss_clean($this->input->post('searchmode'));
@@ -446,6 +449,9 @@ class Awards extends CI_Controller {
if (strpos($qsl, "Z") !== false) {
$qsltype[] = "QRZ.com";
}
if (strpos($qsl, "C") !== false) {
$qsltype[] = "Clublog";
}
// Render Page
$data['page_title'] = "Log View - " . $type;
@@ -458,9 +464,9 @@ class Awards extends CI_Controller {
$data['filter'] .= " and orbit type ".$orbit;
}
}
if ($propagation != '' && $propagation != null) {
$data['filter'] .= " and propagation ".$propagation;
}
if ($propagation != '' && $propagation != null) {
$data['filter'] .= " and propagation ".$propagation;
}
if ($mode != null && strtolower($mode) != 'all') {
$data['filter'] .= " and mode ".$mode;
}
@@ -528,9 +534,8 @@ class Awards extends CI_Controller {
'assets/js/sections/cqmap.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/cqmap.js"))
];
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('cq');
$this->load->model('modes');
@@ -778,7 +783,7 @@ class Awards extends CI_Controller {
$this->load->view('interface_assets/footer', $footerData);
}
public function iota () {
public function iota () {
$this->load->model('iota');
$this->load->model('modes');
$this->load->model('bands');
@@ -799,6 +804,11 @@ class Awards extends CI_Controller {
$data['modes'] = $this->modes->active(); // Used in the view for mode select
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$postdata['qrz'] = $this->input->post('qrz') == 0 ? NULL: 1;
$postdata['clublog'] = $this->input->post('clublog') == 0 ? NULL: 1;
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked')) ?? NULL;
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed')) ?? NULL;
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked')) ?? NULL;
@@ -813,6 +823,11 @@ class Awards extends CI_Controller {
$postdata['band'] = $this->security->xss_clean($this->input->post('band')) ?? NULL;
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode')) ?? NULL;
} else { // Setting default values at first load of page
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['qrz'] = 0;
$postdata['clublog'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 1;
@@ -1320,9 +1335,8 @@ class Awards extends CI_Controller {
This displays the CQ Zone map and requires the $band_type and $mode_type
*/
public function cq_map() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('cq');
@@ -1332,6 +1346,7 @@ class Awards extends CI_Controller {
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$postdata['qrz'] = $this->input->post('qrz') == 0 ? NULL: 1;
$postdata['clublog'] = $this->input->post('clublog') == 0 ? NULL: 1;
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
@@ -1388,6 +1403,7 @@ class Awards extends CI_Controller {
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$postdata['qrz'] = $this->input->post('qrz') == 0 ? NULL: 1;
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['clublog'] = $this->input->post('clublog') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
@@ -1440,6 +1456,7 @@ class Awards extends CI_Controller {
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$postdata['qrz'] = $this->input->post('qrz') == 0 ? NULL: 1;
$postdata['clublog'] = $this->input->post('clublog') == 0 ? NULL: 1;
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
@@ -1483,34 +1500,35 @@ class Awards extends CI_Controller {
This displays the DXCC map
*/
public function jcc_map() {
$this->load->model('jcc_model');
$this->load->model('bands');
$this->load->model('jcc_model');
$this->load->model('bands');
$bands[] = $this->security->xss_clean($this->input->post('band'));
$bands[] = $this->security->xss_clean($this->input->post('band'));
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$postdata['qrz'] = $this->input->post('qrz') == 0 ? NULL: 1;
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$postdata['qrz'] = $this->input->post('qrz') == 0 ? NULL: 1;
$postdata['clublog'] = $this->input->post('clublog') == 0 ? NULL: 1;
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
$jcc_wkd = $this->jcc_model->fetch_jcc_wkd($postdata);
$jcc_cnfm = $this->jcc_model->fetch_jcc_cnfm($postdata);
$jcc_wkd = $this->jcc_model->fetch_jcc_wkd($postdata);
$jcc_cnfm = $this->jcc_model->fetch_jcc_cnfm($postdata);
$jccs = [];
foreach ($jcc_wkd as $jcc) {
$jccs[$jcc->COL_CNTY] = array(1, 0);
}
foreach ($jcc_cnfm as $jcc) {
$jccs[$jcc->COL_CNTY][1] = 1;
}
$jccs = [];
foreach ($jcc_wkd as $jcc) {
$jccs[$jcc->COL_CNTY] = array(1, 0);
}
foreach ($jcc_cnfm as $jcc) {
$jccs[$jcc->COL_CNTY][1] = 1;
}
header('Content-Type: application/json');
echo json_encode($jccs);
header('Content-Type: application/json');
echo json_encode($jccs);
}
/*
@@ -1529,7 +1547,7 @@ class Awards extends CI_Controller {
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
$postdata['band'] = $this->input->post('band');
$postdata['mode'] = $this->input->post('mode');
$postdata['mode'] = $this->input->post('mode');
$postdata['includedeleted'] = $this->input->post('includedeleted') == 0 ? NULL: 1;
$postdata['Africa'] = $this->input->post('Africa') == 0 ? NULL: 1;
$postdata['Asia'] = $this->input->post('Asia') == 0 ? NULL: 1;
@@ -1579,89 +1597,97 @@ class Awards extends CI_Controller {
}
}
public function wab() {
$this->load->model('bands');
$this->load->model('gridmap_model');
$this->load->model('stations');
public function wab() {
$this->load->model('bands');
$this->load->model('gridmap_model');
$this->load->model('stations');
$data['modes'] = $this->gridmap_model->get_worked_modes();
$data['bands'] = $this->bands->get_worked_bands();
$data['orbits'] = $this->bands->get_worked_orbits();
$data['sats_available'] = $this->bands->get_worked_sats();
$data['modes'] = $this->gridmap_model->get_worked_modes();
$data['bands'] = $this->bands->get_worked_bands();
$data['orbits'] = $this->bands->get_worked_orbits();
$data['sats_available'] = $this->bands->get_worked_sats();
$data['user_default_band'] = $this->session->userdata('user_default_band');
$data['user_default_confirmation'] = $this->session->userdata('user_default_confirmation');
$data['user_default_band'] = $this->session->userdata('user_default_band');
$data['user_default_confirmation'] = $this->session->userdata('user_default_confirmation');
$footerData = [];
$footerData['scripts'] = [
'assets/js/sections/wab.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/wab.js"))
];
$footerData = [];
$footerData['scripts'] = [
'assets/js/sections/wab.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/wab.js"))
];
// Render page
$data['page_title'] = "Awards - Worked All Britain";
$this->load->view('interface_assets/header', $data);
$this->load->view('awards/wab/index');
$this->load->view('interface_assets/footer', $footerData);
}
// Render page
$data['page_title'] = "Awards - Worked All Britain";
$this->load->view('interface_assets/header', $data);
$this->load->view('awards/wab/index');
$this->load->view('interface_assets/footer', $footerData);
}
public function wab_map() {
$band = $this->security->xss_clean($this->input->post('band'));
$mode = $this->security->xss_clean($this->input->post('mode'));
$qsl = $this->security->xss_clean($this->input->post('qsl'));
$lotw = $this->security->xss_clean($this->input->post('lotw'));
$eqsl = $this->security->xss_clean($this->input->post('eqsl'));
$qrz = $this->security->xss_clean($this->input->post('qrz'));
$sat = $this->security->xss_clean($this->input->post('sat'));
$orbit = $this->security->xss_clean($this->input->post('orbit'));
public function wab_map() {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['clublog'] = $this->security->xss_clean($this->input->post('clublog'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
$postdata['sat'] = $this->security->xss_clean($this->input->post('sat'));
$postdata['orbit'] = $this->security->xss_clean($this->input->post('orbit'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('wab');
$this->load->model('wab');
if ($logbooks_locations_array) {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$wab_array = $this->wab->get_wab_array($band, $location_list, $mode, $qsl, $lotw, $eqsl, $qrz, $sat, $orbit);
} else {
$location_list = null;
$wab_array = null;
}
if ($logbooks_locations_array) {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$wab_array = $this->wab->get_wab_array($location_list, $postdata);
} else {
$location_list = null;
$wab_array = null;
}
header('Content-Type: application/json');
echo json_encode($wab_array);
}
header('Content-Type: application/json');
echo json_encode($wab_array);
}
public function wab_list() {
$band = $this->security->xss_clean($this->input->post('band'));
$mode = $this->security->xss_clean($this->input->post('mode'));
$qsl = $this->security->xss_clean($this->input->post('qsl'));
$lotw = $this->security->xss_clean($this->input->post('lotw'));
$eqsl = $this->security->xss_clean($this->input->post('eqsl'));
$qrz = $this->security->xss_clean($this->input->post('qrz'));
$sat = $this->security->xss_clean($this->input->post('sat'));
$orbit = $this->security->xss_clean($this->input->post('orbit'));
public function wab_list() {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['clublog'] = $this->security->xss_clean($this->input->post('clublog'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
$postdata['sat'] = $this->security->xss_clean($this->input->post('sat'));
$postdata['orbit'] = $this->security->xss_clean($this->input->post('orbit'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('wab');
$this->load->model('wab');
if ($logbooks_locations_array) {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$wab_array = $this->wab->get_wab_list($band, $location_list, $mode, $qsl, $lotw, $eqsl, $qrz, $sat, $orbit);
} else {
$location_list = null;
$wab_array = null;
}
if ($logbooks_locations_array) {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$wab_array = $this->wab->get_wab_list($location_list, $postdata);
} else {
$location_list = null;
$wab_array = null;
}
$data['wab_array'] = $wab_array;
$data['postdata']['band'] = $band;
$data['postdata']['mode'] = $mode;
$data['postdata']['sat'] = $sat;
$data['postdata']['orbit'] = $orbit;
$data['wab_array'] = $wab_array;
$data['postdata']['band'] = $postdata['band'];
$data['postdata']['mode'] = $postdata['mode'];
$data['postdata']['sat'] = $postdata['sat'];
$data['postdata']['orbit'] = $postdata['orbit'];
$this->load->view('awards/wab/list', $data);
}
$this->load->view('awards/wab/list', $data);
}
public function itu() {
$footerData = [];
@@ -1694,22 +1720,24 @@ class Awards extends CI_Controller {
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['qrz'] = $this->security->xss_clean($this->input->post('qrz'));
$postdata['clublog'] = $this->security->xss_clean($this->input->post('clublog'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
else { // Setting default values at first load of page
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['qrz'] = 0;
$postdata['clublog'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 1;
@@ -1750,6 +1778,7 @@ class Awards extends CI_Controller {
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$postdata['qrz'] = $this->input->post('qrz') == 0 ? NULL: 1;
$postdata['clublog'] = $this->input->post('clublog') == 0 ? NULL: 1;
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;

View File

@@ -34,7 +34,6 @@ class Cfdexport extends CI_Controller {
$fromdate = xss_clean($this->input->post('from'));
$todate = xss_clean($this->input->post('to'));
$this->load->library('frequency');
// Get QSOs with Valid QRAs
$qsos = $this->logbook_model->cfd_get_all_qsos($fromdate, $todate);
$output=strtoupper($this->session->userdata('user_callsign'))."\n";

View File

@@ -1,221 +1,87 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
Controller to interact with the Clublog API
*/
class Clublog extends CI_Controller {
class Clublog extends CI_Controller
{
function __construct()
{
parent::__construct();
if (ENVIRONMENT == 'maintenance' && $this->session->userdata('user_id') == '') {
echo "Maintenance Mode is active. Try again later.\n";
redirect('user/login');
echo "Maintenance Mode is active. Try again later.\n";
redirect('dashboard');
}
}
// Show frontend if there is one
public function index() {
$this->config->load('config');
public function index()
{
// nothing to display
redirect('dashboard');
}
// Upload ADIF to Clublog
public function upload() {
public function upload()
{
$this->load->model('clublog_model');
// set the last run in cron table for the correct cron id
$this->load->model('cron_model');
$this->cron_model->set_last_run($this->router->class.'_'.$this->router->method);
$this->cron_model->set_last_run($this->router->class . '_' . $this->router->method);
$users = $this->clublog_model->get_clublog_users();
foreach ($users as $user) {
$this->uploadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password);
if (!empty($users)) {
foreach ($users as $user) {
$r = $this->clublog_model->uploadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password);
}
} else {
$r = "No user has configured Clublog.";
}
echo $r;
}
// Download ADIF from Clublog
public function download() {
public function download()
{
$this->load->model('clublog_model');
// set the last run in cron table for the correct cron id
$this->load->model('cron_model');
$this->cron_model->set_last_run($this->router->class.'_'.$this->router->method);
$this->cron_model->set_last_run($this->router->class . '_' . $this->router->method);
$users = $this->clublog_model->get_clublog_users();
foreach ($users as $user) {
$this->downloadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password);
}
}
function downloadUser($userid, $username, $password) {
$clean_username = $this->security->xss_clean($username);
$clean_password = $this->security->xss_clean($password);
$clean_userid = $this->security->xss_clean($userid);
$this->config->load('config');
ini_set('memory_limit', '-1');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$this->load->helper('file');
$this->load->model('clublog_model');
$this->load->model('logbook_model');
$station_profiles = $this->clublog_model->all_enabled($clean_userid); // Fetch unique Calls per User with aggregated station_ids
if ($station_profiles->num_rows()) {
foreach ($station_profiles->result() as $station_row) {
$lastrec=$this->clublog_model->clublog_last_qsl_rcvd_date($station_row->station_callsign);
$url='https://clublog.org/getmatches.php?api=608df94896cb9c5421ae748235492b43815610c9&email='.$clean_username.'&password='.$clean_password.'&callsign='.$station_row->station_callsign.'&startyear='.substr($lastrec,0,4).'&startmonth='.substr($lastrec,4,2).'&startday='.substr($lastrec,6,2);
$request = curl_init($url);
// recieve a file
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($request);
$info = curl_getinfo($request);
curl_close ($request);
if(curl_errno($request)) {
echo curl_error($request);
} elseif (preg_match_all('/Invalid callsign/',$response)) { // We're trying to download calls for a station we're not granted. Disable Clublog-Transfer for that station(s)
$this->clublog_model->disable_sync4call($station_row->station_callsign,$station_row->station_ids);
} else {
try {
$cl_qsls=json_decode($response);
foreach ($cl_qsls as $oneqsl) {
$this->logbook_model->clublog_update($oneqsl[2], $oneqsl[0], $oneqsl[3], 'Y', $station_row->station_callsign, $station_row->station_ids);
}
} catch (Exception $e) {
log_message("Error","Something gone wrong while trying to Download for station(s) ".$station_row->station_ids." / Call: ".$station_row->station_callsign);
}
}
if (!empty($users)) {
foreach ($users as $user) {
$r = $this->clublog_model->downloadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password);
}
} else {
$r = "No user has configured Clublog.";
}
echo $r;
}
function uploadUser($userid, $username, $password) {
$clean_username = $this->security->xss_clean($username);
$clean_passord = $this->security->xss_clean($password);
$clean_userid = $this->security->xss_clean($userid);
$this->config->load('config');
ini_set('memory_limit', '-1');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$this->load->helper('file');
$this->load->model('clublog_model');
$station_profiles = $this->clublog_model->all_with_count($clean_userid);
if($station_profiles->num_rows()){
foreach ($station_profiles->result() as $station_row)
{
if($station_row->qso_total > 0) {
$data['qsos'] = $this->clublog_model->get_clublog_qsos($station_row->station_id);
if($data['qsos']->num_rows()){
$string = $this->load->view('adif/data/clublog', $data, TRUE);
$ranid = uniqid();
if ( ! write_file('uploads/clublog'.$ranid.$station_row->station_id.'.adi', $string)) {
echo 'Unable to write the file - Make the folder Upload folder has write permissions.';
}
else {
$file_info = get_file_info('uploads/clublog'.$ranid.$station_row->station_id.'.adi');
// initialise the curl request
$request = curl_init('https://clublog.org/putlogs.php');
if($this->config->item('directory') != "") {
$filepath = $_SERVER['DOCUMENT_ROOT']."/".$this->config->item('directory')."/".$file_info['server_path'];
} else {
$filepath = $_SERVER['DOCUMENT_ROOT']."/".$file_info['server_path'];
}
if (function_exists('curl_file_create')) { // php 5.5+
$cFile = curl_file_create($filepath);
} else { //
$cFile = '@' . realpath($filepath);
}
// send a file
curl_setopt($request, CURLOPT_POST, true);
curl_setopt(
$request,
CURLOPT_POSTFIELDS,
array(
'email' => $clean_username,
'password' => $clean_passord,
'callsign' => $station_row->station_callsign,
'api' => "608df94896cb9c5421ae748235492b43815610c9",
'file' => $cFile
));
// output the response
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($request);
$info = curl_getinfo($request);
if(curl_errno($request)) {
echo curl_error($request);
}
curl_close ($request);
// If Clublog Accepts mark the QSOs
if (preg_match('/\baccepted\b/', $response)) {
echo "QSOs uploaded and Logbook QSOs marked as sent to Clublog"."<br>";
$this->load->model('clublog_model');
$this->clublog_model->mark_qsos_sent($station_row->station_id);
echo "Clublog upload for ".$station_row->station_callsign."<br>";
log_message('info', 'Clublog upload for '.$station_row->station_callsign.' successfully sent.');
} else if (preg_match('/checksum duplicate/',$response)) {
echo "QSOs uploaded (asduplicate!) and Logbook QSOs marked as sent to Clublog"."<br>";
$this->load->model('clublog_model');
$this->clublog_model->mark_qsos_sent($station_row->station_id);
echo "Clublog upload for ".$station_row->station_callsign."<br>";
log_message('info', 'Clublog DUPLICATE upload for '.$station_row->station_callsign.' successfully sent.');
} else {
echo "Error ".$response."<br />";
log_message('error', 'Clublog upload for '.$station_row->station_callsign.' failed reason '.$response);
}
// Delete the ADIF file used for clublog
unlink('uploads/clublog'.$ranid.$station_row->station_id.'.adi');
}
} else {
echo "Nothing awaiting upload to clublog for ".$station_row->station_callsign."<br>";
log_message('info', 'Nothing awaiting upload to clublog for '.$station_row->station_callsign);
}
}
}
}
}
function markqso($station_id) {
function markqso($station_id)
{
$clean_station_id = $this->security->xss_clean($station_id);
$this->load->model('clublog_model');
$this->clublog_model->mark_qsos_sent($clean_station_id);
}
// Find DXCC
function find_dxcc($callsign) {
function find_dxcc($callsign)
{
$clean_callsign = $this->security->xss_clean($callsign);
// Live lookup against Clublogs API
$url = "https://clublog.org/dxcc?call=".$clean_callsign."&api=608df94896cb9c5421ae748235492b43815610c9&full=1";
$url = "https://clublog.org/dxcc?call=" . $clean_callsign . "&api=608df94896cb9c5421ae748235492b43815610c9&full=1";
$json = file_get_contents($url);
$data = json_decode($json, TRUE);

View File

@@ -1,6 +1,7 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Dashboard extends CI_Controller {
class Dashboard extends CI_Controller
{
public function index()
{
@@ -16,7 +17,7 @@ class Dashboard extends CI_Controller {
// Check if users logged in
if($this->user_model->validate_session() == 0) {
if ($this->user_model->validate_session() == 0) {
// user is not logged in
redirect('user/login');
}
@@ -25,19 +26,19 @@ class Dashboard extends CI_Controller {
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
// Calculate Lat/Lng from Locator to use on Maps
if($this->session->userdata('user_locator')) {
$this->load->library('qra');
if ($this->session->userdata('user_locator')) {
$this->load->library('qra');
$qra_position = $this->qra->qra2latlong($this->session->userdata('user_locator'));
if ($qra_position) {
$data['qra'] = "set";
$data['qra_lat'] = $qra_position[0];
$data['qra_lng'] = $qra_position[1];
} else {
$data['qra'] = "none";
}
} else {
$qra_position = $this->qra->qra2latlong($this->session->userdata('user_locator'));
if ($qra_position) {
$data['qra'] = "set";
$data['qra_lat'] = $qra_position[0];
$data['qra_lng'] = $qra_position[1];
} else {
$data['qra'] = "none";
}
} else {
$data['qra'] = "none";
}
$this->load->model('stations');
@@ -50,88 +51,77 @@ class Dashboard extends CI_Controller {
$data['current_active'] = $this->stations->find_active();
$data['themesWithoutMode'] = $this->setup_model->checkThemesWithoutMode();
$data['dashboard_map'] = $this->optionslib->get_option('dashboard_map');
$setup_required = false;
$data['user_map_custom'] = $this->optionslib->get_map_custom();
if($setup_required) {
$data['page_title'] = "Wavelog Setup Checklist";
$this->load->model('cat');
$this->load->model('vucc');
$this->load->view('interface_assets/header', $data);
$this->load->view('setup/check_list');
$this->load->view('interface_assets/footer');
} else {
$data['radio_status'] = $this->cat->recent_status();
//
$this->load->model('cat');
$this->load->model('vucc');
// Store info
$data['todays_qsos'] = $this->logbook_model->todays_qsos($logbooks_locations_array);
$data['total_qsos'] = $this->logbook_model->total_qsos($logbooks_locations_array);
$data['month_qsos'] = $this->logbook_model->month_qsos($logbooks_locations_array);
$data['year_qsos'] = $this->logbook_model->year_qsos($logbooks_locations_array);
$data['radio_status'] = $this->cat->recent_status();
// Load Countries Breakdown data into array
$CountriesBreakdown = $this->logbook_model->total_countries_confirmed($logbooks_locations_array);
// Store info
$data['todays_qsos'] = $this->logbook_model->todays_qsos($logbooks_locations_array);
$data['total_qsos'] = $this->logbook_model->total_qsos($logbooks_locations_array);
$data['month_qsos'] = $this->logbook_model->month_qsos($logbooks_locations_array);
$data['year_qsos'] = $this->logbook_model->year_qsos($logbooks_locations_array);
$data['total_countries'] = $CountriesBreakdown['Countries_Worked'];
$data['total_countries_confirmed_paper'] = $CountriesBreakdown['Countries_Worked_QSL'];
$data['total_countries_confirmed_eqsl'] = $CountriesBreakdown['Countries_Worked_EQSL'];
$data['total_countries_confirmed_lotw'] = $CountriesBreakdown['Countries_Worked_LOTW'];
// Load Countries Breakdown data into array
$CountriesBreakdown = $this->logbook_model->total_countries_confirmed($logbooks_locations_array);
$QSLStatsBreakdownArray = $this->logbook_model->get_QSLStats($logbooks_locations_array);
$data['total_countries'] = $CountriesBreakdown['Countries_Worked'];
$data['total_countries_confirmed_paper'] = $CountriesBreakdown['Countries_Worked_QSL'];
$data['total_countries_confirmed_eqsl'] = $CountriesBreakdown['Countries_Worked_EQSL'];
$data['total_countries_confirmed_lotw'] = $CountriesBreakdown['Countries_Worked_LOTW'];
$data['total_qsl_sent'] = $QSLStatsBreakdownArray['QSL_Sent'];
$data['total_qsl_rcvd'] = $QSLStatsBreakdownArray['QSL_Received'];
$data['total_qsl_requested'] = $QSLStatsBreakdownArray['QSL_Requested'];
$data['qsl_sent_today'] = $QSLStatsBreakdownArray['QSL_Sent_today'];
$data['qsl_rcvd_today'] = $QSLStatsBreakdownArray['QSL_Received_today'];
$data['qsl_requested_today'] = $QSLStatsBreakdownArray['QSL_Requested_today'];
$QSLStatsBreakdownArray =$this->logbook_model->get_QSLStats($logbooks_locations_array);
$data['total_eqsl_sent'] = $QSLStatsBreakdownArray['eQSL_Sent'];
$data['total_eqsl_rcvd'] = $QSLStatsBreakdownArray['eQSL_Received'];
$data['eqsl_sent_today'] = $QSLStatsBreakdownArray['eQSL_Sent_today'];
$data['eqsl_rcvd_today'] = $QSLStatsBreakdownArray['eQSL_Received_today'];
$data['total_qsl_sent'] = $QSLStatsBreakdownArray['QSL_Sent'];
$data['total_qsl_rcvd'] = $QSLStatsBreakdownArray['QSL_Received'];
$data['total_qsl_requested'] = $QSLStatsBreakdownArray['QSL_Requested'];
$data['qsl_sent_today'] = $QSLStatsBreakdownArray['QSL_Sent_today'];
$data['qsl_rcvd_today'] = $QSLStatsBreakdownArray['QSL_Received_today'];
$data['qsl_requested_today'] = $QSLStatsBreakdownArray['QSL_Requested_today'];
$data['total_lotw_sent'] = $QSLStatsBreakdownArray['LoTW_Sent'];
$data['total_lotw_rcvd'] = $QSLStatsBreakdownArray['LoTW_Received'];
$data['lotw_sent_today'] = $QSLStatsBreakdownArray['LoTW_Sent_today'];
$data['lotw_rcvd_today'] = $QSLStatsBreakdownArray['LoTW_Received_today'];
$data['total_eqsl_sent'] = $QSLStatsBreakdownArray['eQSL_Sent'];
$data['total_eqsl_rcvd'] = $QSLStatsBreakdownArray['eQSL_Received'];
$data['eqsl_sent_today'] = $QSLStatsBreakdownArray['eQSL_Sent_today'];
$data['eqsl_rcvd_today'] = $QSLStatsBreakdownArray['eQSL_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['total_lotw_sent'] = $QSLStatsBreakdownArray['LoTW_Sent'];
$data['total_lotw_rcvd'] = $QSLStatsBreakdownArray['LoTW_Received'];
$data['lotw_sent_today'] = $QSLStatsBreakdownArray['LoTW_Sent_today'];
$data['lotw_rcvd_today'] = $QSLStatsBreakdownArray['LoTW_Received_today'];
$data['last_five_qsos'] = $this->logbook_model->get_last_qsos('18', $logbooks_locations_array);
$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['vucc'] = $this->vucc->fetchVuccSummary();
$data['vuccSAT'] = $this->vucc->fetchVuccSummary('SAT');
$data['last_five_qsos'] = $this->logbook_model->get_last_qsos('18', $logbooks_locations_array);
$data['page_title'] = "Dashboard";
$data['vucc'] = $this->vucc->fetchVuccSummary();
$data['vuccSAT'] = $this->vucc->fetchVuccSummary('SAT');
$this->load->model('dxcc');
$dxcc = $this->dxcc->list_current();
$data['page_title'] = "Dashboard";
$current = $this->logbook_model->total_countries_current($logbooks_locations_array);
$this->load->model('dxcc');
$dxcc = $this->dxcc->list_current();
$current = $this->logbook_model->total_countries_current($logbooks_locations_array);
$data['total_countries_needed'] = count($dxcc->result()) - $current;
$this->load->view('interface_assets/header', $data);
$this->load->view('dashboard/index');
$this->load->view('interface_assets/footer');
}
$data['total_countries_needed'] = count($dxcc->result()) - $current;
$this->load->view('interface_assets/header', $data);
$this->load->view('dashboard/index');
$this->load->view('interface_assets/footer');
}
function radio_display_component() {
function radio_display_component()
{
$this->load->model('cat');
$data['radio_status'] = $this->cat->recent_status();
$this->load->view('components/radio_display_table', $data);
}
}
}

View File

@@ -1,4 +1,4 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class eqsl extends CI_Controller {
@@ -10,12 +10,12 @@ class eqsl extends CI_Controller {
$this->load->helper(array('form', 'url'));
if (ENVIRONMENT == 'maintenance' && $this->session->userdata('user_id') == '') {
echo "Maintenance Mode is active. Try again later.\n";
echo "Maintenance Mode is active. Try again later.\n";
redirect('user/login');
}
}
// Default view when loading controller.
// Default view when loading controller.
public function index() {
$this->lang->load('qslcard');
@@ -38,469 +38,221 @@ class eqsl extends CI_Controller {
public function import() {
$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'); }
if (!$this->user_model->authorize(2)) {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
redirect('dashboard');
}
$this->load->model('stations');
$data['station_profile'] = $this->stations->all_of_user();
$active_station_id = $this->stations->find_active();
$station_profile = $this->stations->profile($active_station_id);
$data['active_station_info'] = $station_profile->row();
$this->load->model('stations');
$data['station_profile'] = $this->stations->all_of_user();
$active_station_id = $this->stations->find_active();
$station_profile = $this->stations->profile($active_station_id);
$data['active_station_info'] = $station_profile->row();
// Check if eQSL Nicknames have been defined
$this->load->model('eqslmethods_model');
$eqsl_locations = $this->eqslmethods_model->all_of_user_with_eqsl_nick_defined();
if($eqsl_locations->num_rows() == 0) {
$this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
// Check if eQSL Nicknames have been defined
$this->load->model('eqslmethods_model');
$eqsl_locations = $this->eqslmethods_model->all_of_user_with_eqsl_nick_defined();
if ($eqsl_locations->num_rows() == 0) {
$this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
}
ini_set('memory_limit', '-1');
set_time_limit(0);
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'adi|ADI';
$this->load->library('upload', $config);
$eqsl_results = array();
if (($this->input->post('eqslimport') == 'fetch') && (!($this->config->item('disable_manual_eqsl')))) {
$this->load->library('EqslImporter');
// Get credentials for eQSL
$query = $this->user_model->get_by_id($this->session->userdata('user_id'));
$q = $query->row();
$eqsl_password = $q->user_eqsl_password;
// Validate that eQSL credentials are not empty
if ($eqsl_password == '') {
$this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!');
redirect('eqsl/import');
}
ini_set('memory_limit', '-1');
set_time_limit(0);
$eqsl_force_from_date = (!$this->input->post('eqsl_force_from_date') == "") ? $this->input->post('eqsl_force_from_date') : "";
foreach ($eqsl_locations->result_array() as $eqsl_location) {
$this->eqslimporter->from_callsign_and_QTH(
$eqsl_location['station_callsign'],
$eqsl_location['eqslqthnickname'],
$config['upload_path'],
$eqsl_location['station_id']
);
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'adi|ADI';
$eqsl_results[] = $this->eqslimporter->fetch($eqsl_password, $eqsl_force_from_date);
}
} elseif (($this->input->post('eqslimport') == 'upload')) {
$station_id4upload = $this->input->post('station_profile');
if ($this->stations->check_station_is_accessible($station_id4upload)) {
$station_callsign = $this->stations->profile($station_id4upload)->row()->station_callsign;
if (!$this->upload->do_upload()) {
$data['page_title'] = "eQSL Import";
$data['error'] = $this->upload->display_errors();
$this->load->library('upload', $config);
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/import');
$this->load->view('interface_assets/footer');
$eqsl_results = array();
if (($this->input->post('eqslimport') == 'fetch') && (!($this->config->item('disable_manual_eqsl')))) {
$this->load->library('EqslImporter');
// Get credentials for eQSL
$query = $this->user_model->get_by_id($this->session->userdata('user_id'));
$q = $query->row();
$eqsl_password = $q->user_eqsl_password;
// Validate that eQSL credentials are not empty
if ($eqsl_password == '')
{
$this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!');
redirect('eqsl/import');
}
$eqsl_force_from_date = (!$this->input->post('eqsl_force_from_date')=="")?$this->input->post('eqsl_force_from_date'):"";
foreach ($eqsl_locations->result_array() as $eqsl_location) {
$this->eqslimporter->from_callsign_and_QTH(
$eqsl_location['station_callsign'],
$eqsl_location['eqslqthnickname'],
$config['upload_path'],
$eqsl_location['station_id']
);
$eqsl_results[] = $this->eqslimporter->fetch($eqsl_password, $eqsl_force_from_date);
}
} elseif (($this->input->post('eqslimport') == 'upload')) {
$station_id4upload=$this->input->post('station_profile');
if ($this->stations->check_station_is_accessible($station_id4upload)) {
$station_callsign=$this->stations->profile($station_id4upload)->row()->station_callsign;
if ( ! $this->upload->do_upload())
{
$data['page_title'] = "eQSL Import";
$data['error'] = $this->upload->display_errors();
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/import');
$this->load->view('interface_assets/footer');
return;
} else {
$data = array('upload_data' => $this->upload->data());
$this->load->library('EqslImporter');
$this->eqslimporter->from_file('./uploads/'.$data['upload_data']['file_name'], $station_callsign, $station_id4upload);
$eqsl_results[] = $this->eqslimporter->import();
}
return;
} else {
log_message('error',$station_id4upload." is not valid for user!");
$data = array('upload_data' => $this->upload->data());
$this->load->library('EqslImporter');
$this->eqslimporter->from_file('./uploads/' . $data['upload_data']['file_name'], $station_callsign, $station_id4upload);
$eqsl_results[] = $this->eqslimporter->import();
}
} else {
$data['page_title'] = "eQSL Import";
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/import');
$this->load->view('interface_assets/footer');
return;
log_message('error', $station_id4upload . " is not valid for user!");
}
$data['eqsl_results'] = $eqsl_results;
$data['page_title'] = "eQSL Import Information";
} else {
$data['page_title'] = "eQSL Import";
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/analysis');
$this->load->view('eqsl/import');
$this->load->view('interface_assets/footer');
} // end function
return;
}
$data['eqsl_results'] = $eqsl_results;
$data['page_title'] = "eQSL Import Information";
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/analysis');
$this->load->view('interface_assets/footer');
}
public function export() {
$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'); }
if (!$this->user_model->authorize(2)) {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
redirect('dashboard');
}
// Check if eQSL Nicknames have been defined
$this->load->model('stations');
if($this->stations->are_eqsl_nicks_defined() == 0) {
$this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
}
// Check if eQSL Nicknames have been defined
$this->load->model('stations');
if ($this->stations->are_eqsl_nicks_defined() == 0) {
$this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
}
ini_set('memory_limit', '-1');
set_time_limit(0);
$this->load->model('eqslmethods_model');
$data['page_title'] = "eQSL QSO Upload";
$custom_date_format = $this->session->userdata('user_date_format');
if ((!($this->config->item('disable_manual_eqsl'))) && ($this->input->post('eqslexport') == "export")) {
// Get credentials for eQSL
$query = $this->user_model->get_by_id($this->session->userdata('user_id'));
$q = $query->row();
$data['user_eqsl_name'] = $q->user_eqsl_name;
$data['user_eqsl_password'] = $q->user_eqsl_password;
// Validate that eQSL credentials are not empty
if ($data['user_eqsl_name'] == '' || $data['user_eqsl_password'] == '')
{
$this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!'); redirect('eqsl/import');
}
$rows = '';
// Grab the list of QSOs to send information about
// perform an HTTP get on each one, and grab the status back
$qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
foreach ($qslsnotsent->result_array() as $qsl) {
$rows .= "<tr>";
// eQSL username changes for linked account.
// i.e. when operating /P it must be callsign/p
// the password, however, is always the same as the main account
$data['user_eqsl_name'] = $qsl['station_callsign'];
$adif = $this->generateAdif($qsl, $data);
$status = $this->uploadQso($adif, $qsl);
$timestamp = strtotime($qsl['COL_TIME_ON']);
$rows .= "<td>".date($custom_date_format, $timestamp)."</td>";
$rows .= "<td>".date('H:i', $timestamp)."</td>";
$rows .= "<td>".str_replace("0","&Oslash;",$qsl['COL_CALL'])."</td>";
$rows .= "<td>".$qsl['COL_MODE']."</td>";
if(isset($qsl['COL_SUBMODE'])) {
$rows .= "<td>".$qsl['COL_SUBMODE']."</td>";
} else {
$rows .= "<td></td>";
}
$rows .= "<td>".$qsl['COL_BAND']."</td>";
$rows .= "<td>".$status."</td>";
}
$rows .= "</tr>";
$data['eqsl_table'] = $this->generateResultTable($custom_date_format, $rows);
} else {
$qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
if ($qslsnotsent->num_rows() > 0) {
$data['eqsl_table'] = $this->writeEqslNotSent($qslsnotsent->result_array(), $custom_date_format);
}
}
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/export');
$this->load->view('interface_assets/footer');
}
function uploadQso($adif, $qsl) {
ini_set('memory_limit', '-1');
set_time_limit(0);
$this->load->model('eqslmethods_model');
$status = "";
// begin script
$ch = curl_init();
// basic curl options for all requests
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// use the URL we built
curl_setopt($ch, CURLOPT_URL, $adif);
$result = curl_exec($ch);
$chi = curl_getinfo($ch);
curl_close($ch);
$data['page_title'] = "eQSL QSO Upload";
$custom_date_format = $this->session->userdata('user_date_format');
/* Time for some error handling
Things we might get back
Result: 0 out of 0 records added -> eQSL didn't understand the format
Result: 1 out of 1 records added -> Fantastic
Error: No match on eQSL_User/eQSL_Pswd -> eQSL credentials probably wrong
Warning: Y=2013 M=08 D=11 F6ARS 15M JT65 Bad record: Duplicate
Result: 0 out of 1 records added -> Dupe, OM!
*/
if ($chi['http_code'] == "200") {
if (stristr($result, "Result: 1 out of 1 records added")) {
$status = "Sent";
$this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
} else {
if (stristr($result, "Error: No match on eQSL_User/eQSL_Pswd")) {
$this->session->set_flashdata('warning', 'Your eQSL username and/or password is incorrect.'); redirect('eqsl/export');
} else {
if (stristr($result, "Result: 0 out of 0 records added")) {
$this->session->set_flashdata('warning', 'Something went wrong with eQSL.cc!'); redirect('eqsl/export');
} else {
if (stristr($result, "Bad record: Duplicate")) {
$status = "Duplicate";
# Mark the QSL as sent if this is a dupe.
$this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
}
}
}
if ((!($this->config->item('disable_manual_eqsl'))) && ($this->input->post('eqslexport') == "export")) {
// Get credentials for eQSL
$query = $this->user_model->get_by_id($this->session->userdata('user_id'));
$q = $query->row();
$data['user_eqsl_name'] = $q->user_eqsl_name;
$data['user_eqsl_password'] = $q->user_eqsl_password;
// Validate that eQSL credentials are not empty
if ($data['user_eqsl_name'] == '' || $data['user_eqsl_password'] == '') {
$this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!');
redirect('eqsl/import');
}
} else {
if ($chi['http_code'] == "500") {
$this->session->set_flashdata('warning', 'eQSL.cc is experiencing issues. Please try exporting QSOs later.'); redirect('eqsl/export');
} else {
if ($chi['http_code'] == "400") {
$this->session->set_flashdata('warning', 'There was an error in one of the QSOs. You might want to manually upload them.'); redirect('eqsl/export');
$status = "Error";
$rows = '';
// Grab the list of QSOs to send information about
// perform an HTTP get on each one, and grab the status back
$qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
foreach ($qslsnotsent->result_array() as $qsl) {
$rows .= "<tr>";
// eQSL username changes for linked account.
// i.e. when operating /P it must be callsign/p
// the password, however, is always the same as the main account
$data['user_eqsl_name'] = $qsl['station_callsign'];
$adif = $this->eqslmethods_model->generateAdif($qsl, $data);
$status = $this->eqslmethods_model->uploadQso($adif, $qsl);
$timestamp = strtotime($qsl['COL_TIME_ON']);
$rows .= "<td>" . date($custom_date_format, $timestamp) . "</td>";
$rows .= "<td>" . date('H:i', $timestamp) . "</td>";
$rows .= "<td>" . str_replace("0", "&Oslash;", $qsl['COL_CALL']) . "</td>";
$rows .= "<td>" . $qsl['COL_MODE'] . "</td>";
if (isset($qsl['COL_SUBMODE'])) {
$rows .= "<td>" . $qsl['COL_SUBMODE'] . "</td>";
} else {
if ($chi['http_code'] == "404") {
$this->session->set_flashdata('warning', 'It seems that the eQSL site has changed. Please open up an issue on GitHub.'); redirect('eqsl/export');
}
$rows .= "<td></td>";
}
$rows .= "<td>" . $qsl['COL_BAND'] . "</td>";
$rows .= "<td>" . $status . "</td>";
}
$rows .= "</tr>";
$data['eqsl_table'] = $this->generateResultTable($custom_date_format, $rows);
} else {
$qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
if ($qslsnotsent->num_rows() > 0) {
$data['eqsl_table'] = $this->writeEqslNotSent($qslsnotsent->result_array(), $custom_date_format);
}
}
log_message('debug', $result);
return $status;
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/export');
$this->load->view('interface_assets/footer');
}
function generateResultTable($custom_date_format, $rows) {
$table = '<table = style="width:100%" class="table-sm table table-bordered table-hover table-striped table-condensed text-center">';
$table .= "<thead><tr class=\"titles\">";
$table .= "<th>Date</th>";
$table .= "<th>Time</th>";
$table .= "<th>Call</th>";
$table .= "<th>Mode</th>";
$table .= "<th>Submode</th>";
$table .= "<th>Band</th>";
$table .= "<th>Status</th>";
$table .= "</tr></thead><tbody>";
$table .= "<thead><tr class=\"titles\">";
$table .= "<th>Date</th>";
$table .= "<th>Time</th>";
$table .= "<th>Call</th>";
$table .= "<th>Mode</th>";
$table .= "<th>Submode</th>";
$table .= "<th>Band</th>";
$table .= "<th>Status</th>";
$table .= "</tr></thead><tbody>";
$table .= $rows;
$table .= "</tbody></table>";
return $table;
}
// Build out the ADIF info string according to specs https://eqsl.cc/qslcard/ADIFContentSpecs.cfm
function generateAdif($qsl, $data) {
$COL_QSO_DATE = date('Ymd',strtotime($qsl['COL_TIME_ON']));
$COL_TIME_ON = date('Hi',strtotime($qsl['COL_TIME_ON']));
# Set up the single record file
$adif = "https://www.eqsl.cc/qslcard/importADIF.cfm?";
$adif .= "ADIFData=WavelogUpload%20";
/* Handy reference of escaping chars
"<" = 3C
">" = 3E
":" = 3A
" " = 20
"_" = 5F
"-" = 2D
"." = 2E
"&" = 26
*/
$adif .= "%3C";
$adif .= "ADIF%5FVER";
$adif .= "%3A";
$adif .= "4";
$adif .= "%3E";
$adif .= "1%2E00 ";
$adif .= "%20";
$adif .= "%3C";
$adif .= "EQSL%5FUSER";
$adif .= "%3A";
$adif .= strlen($data['user_eqsl_name']);
$adif .= "%3E";
$adif .= $data['user_eqsl_name'];
$adif .= "%20";
$adif .= "%3C";
$adif .= "EQSL%5FPSWD";
$adif .= "%3A";
$adif .= strlen($data['user_eqsl_password']);
$adif .= "%3E";
$adif .= urlencode($data['user_eqsl_password']);
$adif .= "%20";
$adif .= "%3C";
$adif .= "EOH";
$adif .= "%3E";
# Lay out the required fields
$adif .= "%3C";
$adif .= "QSO%5FDATE";
$adif .= "%3A";
$adif .= "8";
$adif .= "%3E";
$adif .= $COL_QSO_DATE;
$adif .= "%20";
$adif .= "%3C";
$adif .= "TIME%5FON";
$adif .= "%3A";
$adif .= "4";
$adif .= "%3E";
$adif .= $COL_TIME_ON;
$adif .= "%20";
$adif .= "%3C";
$adif .= "CALL";
$adif .= "%3A";
$adif .= strlen($qsl['COL_CALL']);
$adif .= "%3E";
$adif .= $qsl['COL_CALL'];
$adif .= "%20";
$adif .= "%3C";
$adif .= "MODE";
$adif .= "%3A";
$adif .= strlen($qsl['COL_MODE']);
$adif .= "%3E";
$adif .= $qsl['COL_MODE'];
$adif .= "%20";
if(isset($qsl['COL_SUBMODE'])) {
$adif .= "%3C";
$adif .= "SUBMODE";
$adif .= "%3A";
$adif .= strlen($qsl['COL_SUBMODE']);
$adif .= "%3E";
$adif .= $qsl['COL_SUBMODE'];
$adif .= "%20";
}
$adif .= "%3C";
$adif .= "BAND";
$adif .= "%3A";
$adif .= strlen($qsl['COL_BAND']);
$adif .= "%3E";
$adif .= $qsl['COL_BAND'];
$adif .= "%20";
# End all the required fields
// adding RST_Sent
$adif .= "%3C";
$adif .= "RST%5FSENT";
$adif .= "%3A";
$adif .= strlen($qsl['COL_RST_SENT']);
$adif .= "%3E";
$adif .= $qsl['COL_RST_SENT'];
$adif .= "%20";
// adding prop mode if it isn't blank
if ($qsl['COL_PROP_MODE']){
$adif .= "%3C";
$adif .= "PROP%5FMODE";
$adif .= "%3A";
$adif .= strlen($qsl['COL_PROP_MODE']);
$adif .= "%3E";
$adif .= $qsl['COL_PROP_MODE'];
$adif .= "%20";
}
// adding sat name if it isn't blank
if ($qsl['COL_SAT_NAME'] != ''){
$adif .= "%3C";
$adif .= "SAT%5FNAME";
$adif .= "%3A";
$adif .= strlen($qsl['COL_SAT_NAME']);
$adif .= "%3E";
$adif .= str_replace('-', '%2D', $qsl['COL_SAT_NAME']);
$adif .= "%20";
}
// adding sat mode if it isn't blank
if ($qsl['COL_SAT_MODE'] != ''){
$adif .= "%3C";
$adif .= "SAT%5FMODE";
$adif .= "%3A";
$adif .= strlen($qsl['COL_SAT_MODE']);
$adif .= "%3E";
$adif .= $qsl['COL_SAT_MODE'];
$adif .= "%20";
}
// adding qslmsg if it isn't blank
if ($qsl['COL_QSLMSG'] != ''){
$qsl['COL_QSLMSG'] = str_replace(array(chr(10),chr(13)),array(' ',' '),$qsl['COL_QSLMSG']);
$adif .= "%3C";
$adif .= "QSLMSG";
$adif .= "%3A";
$adif .= strlen($qsl['COL_QSLMSG']);
$adif .= "%3E";
$adif .= str_replace('&','%26',$qsl['COL_QSLMSG']);
$adif .= "%20";
}
if ($qsl['eqslqthnickname'] != ''){
$adif .= "%3C";
$adif .= "APP%5FEQSL%5FQTH%5FNICKNAME";
$adif .= "%3A";
$adif .= strlen($qsl['eqslqthnickname']);
$adif .= "%3E";
$adif .= $qsl['eqslqthnickname'];
$adif .= "%20";
}
// adding sat mode if it isn't blank
if ($qsl['station_gridsquare'] != ''){
$adif .= "%3C";
$adif .= "MY%5FGRIDSQUARE";
$adif .= "%3A";
$adif .= strlen($qsl['station_gridsquare']);
$adif .= "%3E";
$adif .= $qsl['station_gridsquare'];
$adif .= "%20";
}
# Tie a bow on it!
$adif .= "%3C";
$adif .= "EOR";
$adif .= "%3E";
# Make sure we don't have any spaces
$adif = str_replace(" ", '%20', $adif);
return $adif;
}
function writeEqslNotSent($qslsnotsent, $custom_date_format) {
$table = '<table = style="width:100%" class="table-sm table qsotable table-bordered table-hover table-striped table-condensed text-center">';
$table .= "<thead><tr class=\"titles\">";
$table .= "<th>Date</th>";
$table .= "<th>Time</th>";
$table .= "<th>Call</th>";
$table .= "<th>Mode</th>";
$table .= "<th>Submode</th>";
$table .= "<th>Band</th>";
$table .= "<th>eQSL QTH Nickname</th>";
$table .= "</tr></thead><tbody>";
foreach ($qslsnotsent as $qsl)
{
$table .= "<thead><tr class=\"titles\">";
$table .= "<th>Date</th>";
$table .= "<th>Time</th>";
$table .= "<th>Call</th>";
$table .= "<th>Mode</th>";
$table .= "<th>Submode</th>";
$table .= "<th>Band</th>";
$table .= "<th>eQSL QTH Nickname</th>";
$table .= "</tr></thead><tbody>";
foreach ($qslsnotsent as $qsl) {
$table .= "<tr>";
$timestamp = strtotime($qsl['COL_TIME_ON']);
$table .= "<td>".date($custom_date_format, $timestamp)."</td>";
$table .= "<td>".date('H:i', $timestamp)."</td>";
$table .= "<td><a href=\"javascript:displayQso(" . $qsl['COL_PRIMARY_KEY'] . ")\">" . str_replace("0","&Oslash;",strtoupper($qsl['COL_CALL'])) . "</a></td>";
$table .= "<td>".$qsl['COL_MODE']."</td>";
if(isset($qsl['COL_SUBMODE'])) {
$table .= "<td>".$qsl['COL_SUBMODE']."</td>";
} else {
$table .= "<td></td>";
}
$table .= "<td>".$qsl['COL_BAND']."</td>";
$table .= "<td>".$qsl['eqslqthnickname']."</td>";
$timestamp = strtotime($qsl['COL_TIME_ON']);
$table .= "<td>" . date($custom_date_format, $timestamp) . "</td>";
$table .= "<td>" . date('H:i', $timestamp) . "</td>";
$table .= "<td><a href=\"javascript:displayQso(" . $qsl['COL_PRIMARY_KEY'] . ")\">" . str_replace("0", "&Oslash;", strtoupper($qsl['COL_CALL'])) . "</a></td>";
$table .= "<td>" . $qsl['COL_MODE'] . "</td>";
if (isset($qsl['COL_SUBMODE'])) {
$table .= "<td>" . $qsl['COL_SUBMODE'] . "</td>";
} else {
$table .= "<td></td>";
}
$table .= "<td>" . $qsl['COL_BAND'] . "</td>";
$table .= "<td>" . $qsl['eqslqthnickname'] . "</td>";
$table .= "</tr>";
}
$table .= "</tbody></table>";
@@ -512,7 +264,7 @@ class eqsl extends CI_Controller {
$this->load->library('electronicqsl');
$this->load->model('Eqsl_images');
if($this->Eqsl_images->get_image($id) == "No Image") {
if ($this->Eqsl_images->get_image($id) == "No Image") {
$this->load->model('logbook_model');
$this->load->model('user_model');
$qso_query = $this->logbook_model->get_qso($id);
@@ -533,38 +285,36 @@ class eqsl extends CI_Controller {
$password = $q->user_eqsl_password;
$image_url = $this->electronicqsl->card_image($username, urlencode($password), $callsign, $band, $mode, $year, $month, $day, $hour, $minute);
$file = file_get_contents($image_url, true);
$file = file_get_contents($image_url, true); // TODO use curl instead
$dom = new domDocument;
$dom->loadHTML($file);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
if(!isset($images) || count($images) == 0) {
if (!isset($images) || count($images) == 0) {
echo "Rate Limited";
exit;
}
foreach ($images as $image)
{
foreach ($images as $image) {
header('Content-Type: image/jpg');
$content = file_get_contents("https://www.eqsl.cc".$image->getAttribute('src'));
$content = file_get_contents("https://www.eqsl.cc" . $image->getAttribute('src'));
if ($content === false) {
echo "No response";
exit;
}
echo $content;
$filename = uniqid().'.jpg';
if (file_put_contents($this->Eqsl_images->get_imagePath('p') .'/'. $filename, $content) !== false) {
$filename = uniqid() . '.jpg';
if (file_put_contents($this->Eqsl_images->get_imagePath('p') . '/' . $filename, $content) !== false) {
$this->Eqsl_images->save_image($id, $filename);
}
}
} else {
header('Content-Type: image/jpg');
$image_url = base_url($this->Eqsl_images->get_imagePath() .'/'. $this->Eqsl_images->get_image($id));
$image_url = base_url($this->Eqsl_images->get_imagePath() . '/' . $this->Eqsl_images->get_image($id));
header('Location: ' . $image_url);
}
}
function bulk_download_image($id) {
@@ -603,33 +353,34 @@ class eqsl extends CI_Controller {
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
if(!isset($images) || count($images) == 0) {
if (!isset($images) || count($images) == 0) {
$error = "Rate Limited";
return $error;
}
foreach ($images as $image)
{
$content = file_get_contents("https://www.eqsl.cc".$image->getAttribute('src'));
foreach ($images as $image) {
$content = file_get_contents("https://www.eqsl.cc" . $image->getAttribute('src'));
if ($content === false) {
$error = "No response";
return $error;
}
$filename = uniqid().'.jpg';
if($this->Eqsl_images->get_image($id) == "No Image") {
if (file_put_contents($this->Eqsl_images->get_imagePath('p') .'/'. $filename, $content) !== false) {
$filename = uniqid() . '.jpg';
if ($this->Eqsl_images->get_image($id) == "No Image") {
if (file_put_contents($this->Eqsl_images->get_imagePath('p') . '/' . $filename, $content) !== false) {
$this->Eqsl_images->save_image($id, $filename);
}
}
}
return $error;
}
public function tools() {
// Check logged in
$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'); }
if (!$this->user_model->authorize(2)) {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
redirect('dashboard');
}
$data['page_title'] = "eQSL Tools";
@@ -642,8 +393,11 @@ class eqsl extends CI_Controller {
public function download() {
// Check logged in
$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'); }
$errors=0;
if (!$this->user_model->authorize(2)) {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
redirect('dashboard');
}
$errors = 0;
if ($this->input->post('eqsldownload') == 'download') {
$i = 0;
@@ -675,12 +429,13 @@ class eqsl extends CI_Controller {
}
}
$data['eqsl_results'] = $eqsl_results;
$data['eqsl_stats'] = "Successfully downloaded: ".$i." / Errors: ".count($eqsl_results);
$data['eqsl_stats'] = "Successfully downloaded: " . $i . " / Errors: " . count($eqsl_results);
$data['page_title'] = "eQSL Download Information";
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/result');
$this->load->view('interface_assets/footer');
} else {
$data['page_title'] = "eQSL Card Image Download";
@@ -698,8 +453,11 @@ class eqsl extends CI_Controller {
public function mark_all_sent() {
// Check logged in
$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'); }
if (!$this->user_model->authorize(2)) {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
redirect('dashboard');
}
// mark all eqsls as sent
$this->load->model('eqslmethods_model');
$this->eqslmethods_model->mark_all_as_sent();
@@ -713,57 +471,11 @@ class eqsl extends CI_Controller {
* Used for CRON job
*/
public function sync() {
// set the last run in cron table for the correct cron id
$this->load->model('cron_model');
$this->cron_model->set_last_run($this->router->class.'_'.$this->router->method);
$this->cron_model->set_last_run($this->router->class . '_' . $this->router->method);
ini_set('memory_limit', '-1');
set_time_limit(0);
$this->load->model('eqslmethods_model');
$users = $this->eqslmethods_model->get_eqsl_users();
foreach ($users as $user) {
$this->uploadUser($user->user_id, $user->user_eqsl_name, $user->user_eqsl_password);
$this->downloadUser($user->user_id, $user->user_eqsl_name, $user->user_eqsl_password);
}
$this->eqslmethods_model->sync();
}
public function downloadUser($userid, $username, $password) {
$this->load->library('EqslImporter');
$this->load->model('eqslmethods_model');
$config['upload_path'] = './uploads/';
$eqsl_locations = $this->eqslmethods_model->all_of_user_with_eqsl_nick_defined($userid);
$eqsl_results = array();
foreach ($eqsl_locations->result_array() as $eqsl_location) {
$this->eqslimporter->from_callsign_and_QTH(
$eqsl_location['station_callsign'],
$eqsl_location['eqslqthnickname'],
$config['upload_path'],
$eqsl_location['station_id']
);
$eqsl_results[] = $this->eqslimporter->fetch($password);
}
}
function uploadUser($userid, $username, $password) {
$data['user_eqsl_name'] = $this->security->xss_clean($username);
$data['user_eqsl_password'] = $this->security->xss_clean($password);
$clean_userid = $this->security->xss_clean($userid);
$qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent($clean_userid);
foreach ($qslsnotsent->result_array() as $qsl) {
$data['user_eqsl_name'] = $qsl['station_callsign'];
$adif = $this->generateAdif($qsl, $data);
$status = $this->uploadQso($adif, $qsl);
}
}
} // end class

View File

@@ -16,8 +16,32 @@ class Hamsat extends CI_Controller {
public function index() {
$data['scripts'] = [
'assets/js/sections/hamsat.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/hamsat.js")),
'assets/js/moment.min.js',
'assets/js/datetime-moment.js'
];
// Get Date format
if($this->session->userdata('user_date_format')) {
// If Logged in and session exists
$pageData['custom_date_format'] = $this->session->userdata('user_date_format');
} else {
// Get Default date format from /config/wavelog.php
$pageData['custom_date_format'] = $this->config->item('qso_date_format');
}
switch ($pageData['custom_date_format']) {
case "d/m/y": $pageData['custom_date_format'] = 'DD/MM/YY'; break;
case "d/m/Y": $pageData['custom_date_format'] = 'DD/MM/YYYY'; break;
case "m/d/y": $pageData['custom_date_format'] = 'MM/DD/YY'; break;
case "m/d/Y": $pageData['custom_date_format'] = 'MM/DD/YYYY'; break;
case "d.m.Y": $pageData['custom_date_format'] = 'DD.MM.YYYY'; break;
case "y/m/d": $pageData['custom_date_format'] = 'YY/MM/DD'; break;
case "Y-m-d": $pageData['custom_date_format'] = 'YYYY-MM-DD'; break;
case "M d, Y": $pageData['custom_date_format'] = 'MMM DD, YYYY'; break;
case "M d, y": $pageData['custom_date_format'] = 'MMM DD, YY'; break;
default: $pageData['custom_date_format'] = 'DD/MM/YYYY';
}
$hkey_opt=$this->user_options_model->get_options('hamsat',array('option_name'=>'hamsat_key','option_key'=>'workable'))->result();
if (count($hkey_opt)>0) {
$data['user_hamsat_workable_only'] = $hkey_opt[0]->option_value;
@@ -34,7 +58,7 @@ class Hamsat extends CI_Controller {
// Load public view
$data['page_title'] = "Hamsat - Satellite Roving";
$this->load->view('interface_assets/header', $data);
$this->load->view('/hamsat/index');
$this->load->view('/hamsat/index', $pageData);
$this->load->view('interface_assets/footer');
}

View File

@@ -41,9 +41,11 @@ class Logbook extends CI_Controller {
$config['cur_tag_close'] = '</a></strong>';
$this->pagination->initialize($config);
//load the model and get results
$data['results'] = $this->logbook_model->get_qsos($config['per_page'],$this->uri->segment(3));
$data['user_map_custom'] = $this->optionslib->get_map_custom();
if(!$data['results']) {
$this->session->set_flashdata('notice', lang('error_no_logbook_found') . ' <a href="' . site_url('logbooks') . '" title="Station Logbooks">Station Logbooks</a>');
@@ -84,13 +86,17 @@ class Logbook extends CI_Controller {
echo json_encode($return, JSON_PRETTY_PRINT);
}
function json($tempcallsign, $tempband, $tempmode, $tempstation_id = null) {
function json($tempcallsign, $tempband, $tempmode, $tempstation_id = null, $date = "") {
session_write_close();
if (($date ?? '') != '') {
$date=date("Y-m-d",strtotime($date));
}
// Cleaning for security purposes
$callsign = $this->security->xss_clean($tempcallsign);
$band = $this->security->xss_clean($tempband);
$mode = $this->security->xss_clean($tempmode);
$station_id = $this->security->xss_clean($tempstation_id);
$date = $this->security->xss_clean($date);
$this->load->model('user_model');
if(!$this->user_model->authorize($this->config->item('auth_mode'))) { return; }
@@ -129,7 +135,7 @@ class Logbook extends CI_Controller {
"image" => "",
];
$return['dxcc'] = $this->dxcheck($callsign);
$return['dxcc'] = $this->dxcheck($callsign,$date);
$lookupcall=$this->get_plaincall($callsign);
@@ -1310,12 +1316,11 @@ class Logbook extends CI_Controller {
function part_table_col($row, $name) {
$ret='';
$ci =& get_instance();
switch($name) {
case 'Mode': $ret.= '<td>'; $ret.= $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE . '</td>'; break;
case 'RSTS': $ret.= '<td class="d-none d-sm-table-cell">' . $row->COL_RST_SENT; if ($row->COL_STX) { $ret.= ' <span data-bs-toggle="tooltip" title="'.($row->COL_CONTEST_ID!=""?$row->COL_CONTEST_ID:"n/a").'" class="badge text-bg-light">'; $ret.=sprintf("%03d", $row->COL_STX); $ret.= '</span>';} if ($row->COL_STX_STRING) { $ret.= ' <span data-bs-toggle="tooltip" title="'.($row->COL_CONTEST_ID!=""?$row->COL_CONTEST_ID:"n/a").'" class="badge text-bg-light">' . $row->COL_STX_STRING . '</span>';} $ret.= '</td>'; break;
case 'RSTR': $ret.= '<td class="d-none d-sm-table-cell">' . $row->COL_RST_RCVD; if ($row->COL_SRX) { $ret.= ' <span data-bs-toggle="tooltip" title="'.($row->COL_CONTEST_ID!=""?$row->COL_CONTEST_ID:"n/a").'" class="badge text-bg-light">'; $ret.=sprintf("%03d", $row->COL_SRX); $ret.= '</span>';} if ($row->COL_SRX_STRING) { $ret.= ' <span data-bs-toggle="tooltip" title="'.($row->COL_CONTEST_ID!=""?$row->COL_CONTEST_ID:"n/a").'" class="badge text-bg-light">' . $row->COL_SRX_STRING . '</span>';} $ret.= '</td>'; break;
case 'Country': $ret.= '<td>' . ucwords(strtolower(($row->COL_COUNTRY ?? ''))); if ($row->end ?? '' != '') $ret.= ' <span class="badge text-bg-danger">'.$ci->lang->line('gen_hamradio_deleted_dxcc').'</span>' . '</td>'; break;
case 'Country': $ret.= '<td>' . ucwords(strtolower(($row->COL_COUNTRY ?? ''))); if ($row->end ?? '' != '') $ret.= ' <span class="badge text-bg-danger">'.$this->lang->line('gen_hamradio_deleted_dxcc').'</span>' . '</td>'; break;
case 'IOTA': $ret.= '<td>' . ($row->COL_IOTA) . '</td>'; break;
case 'SOTA': $ret.= '<td>' . ($row->COL_SOTA_REF) . '</td>'; break;
case 'WWFF': $ret.= '<td>' . ($row->COL_WWFF_REF) . '</td>'; break;
@@ -1323,7 +1328,7 @@ class Logbook extends CI_Controller {
case 'Grid': $ret.= '<td>' . $this->part_QrbCalcLink($row->COL_MY_GRIDSQUARE, $row->COL_VUCC_GRIDS, $row->COL_GRIDSQUARE) . '</td>'; break;
case 'Distance': $ret.= '<td>' . (($row->COL_DISTANCE ?? '' != '') ? $row->COL_DISTANCE . '&nbsp;km' : '') . '</td>'; break;
case 'Band': $ret.= '<td>'; if($row->COL_SAT_NAME != null) { $ret.= '<a href="https://db.satnogs.org/search/?q='.$row->COL_SAT_NAME.'" target="_blank">'.$row->COL_SAT_NAME.'</a></td>'; } else { $ret.= strtolower($row->COL_BAND); } $ret.= '</td>'; break;
case 'Frequency': $ret.= '<td>'; if($row->COL_SAT_NAME != null) { $ret.= '<a href="https://db.satnogs.org/search/?q='.$row->COL_SAT_NAME.'" target="_blank">'.$row->COL_SAT_NAME.'</a></td>'; } else { if($row->COL_FREQ != null) { $ret.= $ci->frequency->hz_to_mhz($row->COL_FREQ); } else { $ret.= strtolower($row->COL_BAND); } } $ret.= '</td>'; break;
case 'Frequency': $ret.= '<td>'; if($row->COL_SAT_NAME != null) { $ret.= '<a href="https://db.satnogs.org/search/?q='.$row->COL_SAT_NAME.'" target="_blank">'.$row->COL_SAT_NAME.'</a></td>'; } else { if($row->COL_FREQ != null) { $ret.= $this->frequency->hz_to_mhz($row->COL_FREQ); } else { $ret.= strtolower($row->COL_BAND); } } $ret.= '</td>'; break;
case 'State': $ret.= '<td>' . ($row->COL_STATE) . '</td>'; break;
case 'Operator': $ret.= '<td>' . ($row->COL_OPERATOR) . '</td>'; break;
}

View File

@@ -43,6 +43,7 @@ class Logbookadvanced extends CI_Controller {
$mapoptions['nightshadow_layer'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'nightshadow_layer','option_key'=>'boolean'))->row();
$data['mapoptions'] = $mapoptions;
$data['user_map_custom'] = $this->optionslib->get_map_custom();
$active_station_id = $this->stations->find_active();
$station_profile = $this->stations->profile($active_station_id);
@@ -57,6 +58,7 @@ class Logbookadvanced extends CI_Controller {
$pageData['station_profile'] = $this->stations->all_of_user();
$pageData['active_station_info'] = $station_profile->row();
$pageData['homegrid'] = explode(',', $this->stations->find_gridsquare());
$pageData['active_station_id'] = $active_station_id;
$pageData['bands'] = $this->bands->get_worked_bands();
@@ -189,6 +191,8 @@ class Logbookadvanced extends CI_Controller {
}
function export_to_adif() {
ini_set('memory_limit', '-1');
set_time_limit(0);
$this->load->model('logbookadvanced_model');
$ids = xss_clean($this->input->post('id'));
@@ -201,6 +205,8 @@ class Logbookadvanced extends CI_Controller {
}
function export_to_adif_params() {
ini_set('memory_limit', '-1');
set_time_limit(0);
$this->load->model('logbookadvanced_model');
$postdata = $this->input->post();
@@ -396,7 +402,7 @@ class Logbookadvanced extends CI_Controller {
if (!empty($qso['COL_GRIDSQUARE']) || !empty($qso['COL_VUCC_GRIDS'])) {
$mappedcoordinates[] = $this->calculate($qso, ($qso['station_gridsquare'] ?? ''), ($qso['COL_GRIDSQUARE'] ?? '') == '' ? $qso['COL_VUCC_GRIDS'] : $qso['COL_GRIDSQUARE'], $measurement_base, $var_dist, $custom_date_format);
} else {
if (!empty($qso['lat']) || !empty($qso['long'])) {
if (!empty($qso['lat']) && !empty($qso['long'])) {
$mappedcoordinates[] = $this->calculateCoordinates($qso, $qso['lat'], $qso['long'], ($qso['station_gridsquare'] ?? ''), $measurement_base, $var_dist, $custom_date_format);
}
}

View File

@@ -88,7 +88,7 @@ class Options extends CI_Controller {
// If theme update is complete set a flashsession with a success note
if($theme_update_status == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_theme_changed_to').$this->input->post('theme'));
$this->session->set_flashdata('success', $this->lang->line('options_saved'));
}
// Update theme choice within the options system
@@ -96,7 +96,7 @@ class Options extends CI_Controller {
// If theme update is complete set a flashsession with a success note
if($search_update_status == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_global_search_changed_to').$this->input->post('globalSearch'));
$this->session->set_flashdata('success', $this->lang->line('options_saved'));
}
// Update dashboard banner within the options system
@@ -104,7 +104,7 @@ class Options extends CI_Controller {
// If dashboard banner update is complete set a flashsession with a success note
if($dasboard_banner_update_status == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_dashboard_banner_changed_to').$this->input->post('dashboardBanner'));
$this->session->set_flashdata('success', $this->lang->line('options_saved'));
}
// Update dashboard map within the options system
@@ -112,7 +112,7 @@ class Options extends CI_Controller {
// If dashboard map update is complete set a flashsession with a success note
if($dashboard_map_update_status == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_dashboard_map_changed_to').$this->input->post('dashboardMap'));
$this->session->set_flashdata('success', $this->lang->line('options_saved'));
}
// Update logbook map within the options system
@@ -120,13 +120,23 @@ class Options extends CI_Controller {
// If logbook map update is complete set a flashsession with a success note
if($logbook_map_update_status == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_logbook_map_changed_to').$this->input->post('logbookMap'));
$this->session->set_flashdata('success', $this->lang->line('options_saved'));
}
// Update public maps within the options system
$public_maps_update_status = $this->optionslib->update('public_maps', $this->input->post('publicMaps'), 'yes');
// If the option was saved successfully set a flashsession with success note
if($public_maps_update_status == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_saved'));
}
// Update public github button within the options system
$public_github_button_update_status = $this->optionslib->update('public_github_button', $this->input->post('publicGithubButton'), 'yes');
// If the option was saved successfully set a flashsession with success note
if($public_github_button_update_status == TRUE) {
$this->session->set_flashdata('success', 'Public Github Button is now ' . $this->input->post('publicGithubButton'));
$this->session->set_flashdata('success', $this->lang->line('options_saved'));
}
// Redirect back to /appearance

View File

@@ -14,6 +14,7 @@ class Oqrs extends CI_Controller {
// Commented out to get public access
// $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'); }
if (($this->config->item('disable_oqrs') ?? false)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
}
public function index() {
@@ -92,9 +93,8 @@ class Oqrs extends CI_Controller {
public function requests() {
$data['page_title'] = "OQRS Requests";
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if ($logbooks_locations_array) {
$location_list = "'".implode("','",$logbooks_locations_array)."'";

View File

@@ -11,6 +11,7 @@ class Qsl extends CI_Controller {
$this->lang->load('qslcard');
$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'); }
if (($this->config->item('disable_qsl') ?? false)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); exit; }
}
// Default view when loading controller.

View File

@@ -432,7 +432,6 @@ class QSO extends CI_Controller {
function band_to_freq($band, $mode) {
if ($band != null and $band != 'null') {
$this->load->library('frequency');
echo $this->frequency->convert_band($band, $mode);
}

View File

@@ -43,11 +43,10 @@ class Sattimers extends CI_Controller {
$data['page_title'] = "Satellite Timers";
$CI =& get_instance();
if($CI->session->userdata('user_date_format')) {
$data['custom_date_format'] = $CI->session->userdata('user_date_format');
if($this->session->userdata('user_date_format')) {
$data['custom_date_format'] = $this->session->userdata('user_date_format');
} else {
$data['custom_date_format'] = $CI->config->item('qso_date_format');
$data['custom_date_format'] = $this->config->item('qso_date_format');
}
switch ($data['custom_date_format']) {

View File

@@ -38,6 +38,24 @@ class SimpleFLE extends CI_Controller {
$this->load->view('simplefle/syntax_help');
}
public function displayOptions() {
$data['callbook_lookup'] = $this->user_options_model->get_options('SimpleFLE',array('option_name'=>'callbook_lookup','option_key'=>'boolean'))->row()->option_value ?? 'true';
$this->load->view('simplefle/options', $data);
}
public function saveOptions() {
if($this->input->post('callbook_lookup')) {
$this->user_options_model->set_option('SimpleFLE', 'callbook_lookup', array('boolean' => xss_clean($this->input->post('callbook_lookup'))));
} else {
log_message('debug', 'SimpleFLE, saveOptions(); No Options to save. No Post Data');
}
}
private function modes_array() {
$this->load->model('modes');
@@ -56,5 +74,4 @@ class SimpleFLE extends CI_Controller {
return $modes;
}
}

View File

@@ -47,18 +47,6 @@ class User_Options extends CI_Controller {
echo json_encode($jsonout);
}
// [MAP Custom] //
public function get_map_custom() {
$result=$this->user_options_model->get_options('map_custom');
$jsonout=[];
foreach($result->result() as $options) {
if ($options->option_name=='icon') $jsonout[$options->option_key]=json_decode($options->option_value,true);
else $jsonout[$options->option_name.'_'.$options->option_key]=$options->option_value;
}
header('Content-Type: application/json');
echo json_encode($jsonout);
}
public function dismissVersionDialog() {
$this->user_options_model->set_option('version_dialog', 'confirmed', array('boolean' => 'true'));
}

View File

@@ -2,9 +2,14 @@
class Visitor extends CI_Controller {
// Define number of QSO per page
private $qso_per_page;
function __construct()
{
parent::__construct();
$this->qso_per_page = 25;
}
function _remap($method) {
@@ -25,9 +30,6 @@ class Visitor extends CI_Controller {
}
elseif($method == "mapqsos") {
$this->mapqsos();
}
elseif($method == "get_map_custom") {
$this->get_map_custom();
}
else {
$this->index($method);
@@ -40,43 +42,58 @@ class Visitor extends CI_Controller {
public function index($public_slug = NULL)
{
$this->load->model('user_model');
// Check slug passed and is valid
if ($this->security->xss_clean($public_slug, TRUE) === FALSE)
{
if ($this->security->xss_clean($public_slug, TRUE) === FALSE) {
// Public Slug failed the XSS test
log_message('error', '[Visitor] XSS Attack detected on public_slug '. $public_slug);
show_404('Unknown Public Page.');
} else {
// Checked slug passed and clean
log_message('info', '[Visitor] public_slug '. $public_slug .' loaded');
// Check if the slug is contained in the station_logbooks table
$this->load->model('logbooks_model');
// Load necessary models
$this->load->model('dxcc');
$this->load->model('cat');
$this->load->model('logbook_model');
$this->load->model('logbooks_model');
if($this->logbooks_model->public_slug_exists($public_slug)) {
// Load the public view
// Load the public view
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($public_slug);
if($logbook_id != false)
{
if($logbook_id != false) {
// Get associated station locations for mysql queries
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
if (!$logbooks_locations_array) {
show_404('Empty Logbook');
}
} else {
log_message('error', $public_slug.' has no associated station locations');
show_404('Unknown Public Page.');
}
$this->load->model('logbook_model');
// Public visitor so no QRA to setup
$data['qra'] = "none";
$this->load->model('cat');
// Pagination Configuration
$this->load->library('pagination');
$config['base_url'] = base_url().'index.php/visitor/'.$public_slug;
$config['total_rows'] = $this->logbook_model->total_qsos($logbooks_locations_array);
$config['per_page'] = $this->qso_per_page;
$config['num_links'] = 6;
$config['full_tag_open'] = '';
$config['full_tag_close'] = '';
$config['cur_tag_open'] = '<strong class="active"><a href="">';
$config['cur_tag_close'] = '</a></strong>';
$this->pagination->initialize($config);
// Store info
$data['todays_qsos'] = $this->logbook_model->todays_qsos($logbooks_locations_array);
@@ -84,6 +101,8 @@ class Visitor extends CI_Controller {
$data['month_qsos'] = $this->logbook_model->month_qsos($logbooks_locations_array);
$data['year_qsos'] = $this->logbook_model->year_qsos($logbooks_locations_array);
$data['user_map_custom'] = $this->optionslib->get_map_custom(true,$public_slug);
// Load Countries Breakdown data into array
$CountriesBreakdown = $this->logbook_model->total_countries_confirmed($logbooks_locations_array);
@@ -92,6 +111,10 @@ class Visitor extends CI_Controller {
$data['total_countries_confirmed_eqsl'] = $CountriesBreakdown['Countries_Worked_EQSL'];
$data['total_countries_confirmed_lotw'] = $CountriesBreakdown['Countries_Worked_LOTW'];
$dxcc = $this->dxcc->list_current();
$current = $this->logbook_model->total_countries_current($logbooks_locations_array);
$data['total_countries_needed'] = count($dxcc->result()) - $current;
$QSLStatsBreakdownArray =$this->logbook_model->get_QSLStats($logbooks_locations_array);
$data['total_qsl_sent'] = $QSLStatsBreakdownArray['QSL_Sent'];
@@ -104,21 +127,15 @@ class Visitor extends CI_Controller {
$data['total_lotw_sent'] = $QSLStatsBreakdownArray['LoTW_Sent'];
$data['total_lotw_rcvd'] = $QSLStatsBreakdownArray['LoTW_Received'];
$data['last_five_qsos'] = $this->logbook_model->get_last_qsos('18', $logbooks_locations_array);
$data['results'] = $this->logbook_model->get_qsos($this->qso_per_page,$this->uri->segment(3),$logbooks_locations_array);
$data['page_title'] = "Dashboard";
$data['slug'] = $public_slug;
$this->load->model('dxcc');
$dxcc = $this->dxcc->list_current();
$current = $this->logbook_model->total_countries_current($logbooks_locations_array);
$data['total_countries_needed'] = count($dxcc->result()) - $current;
$this->load->view('visitor/layout/header', $data);
$this->load->view('visitor/index');
$this->load->view('visitor/layout/footer');
} else {
// Show 404
log_message('error', '[Visitor] XSS Attack detected on public_slug '. $public_slug);
@@ -150,7 +167,7 @@ class Visitor extends CI_Controller {
show_404('Unknown Public Page.');
}
$qsos = $this->logbook_model->get_qsos('18', null, $logbooks_locations_array);
$qsos = $this->logbook_model->get_qsos($this->qso_per_page, $this->uri->segment(4), $logbooks_locations_array);
// [PLOT] ADD plot //
$plot_array = $this->logbook_model->get_plot_array_for_map($qsos->result());
@@ -411,20 +428,26 @@ class Visitor extends CI_Controller {
$slug = $this->security->xss_clean($this->uri->segment(3));
$lastqso = $this->security->xss_clean($this->uri->segment(4));
if ($lastqso === "lastqso") {
$this->load->model('visitor_model');
$result = $this->visitor_model->getlastqsodate($slug)->row();
header('Content-Type: application/json');
echo json_encode($result);
return;
if (!empty($slug)) {
if ($lastqso === "lastqso") {
$this->load->model('visitor_model');
$result = $this->visitor_model->getlastqsodate($slug)->row();
header('Content-Type: application/json');
echo json_encode($result);
return;
}
$data['slug'] = $slug;
$data['page_title'] = "Export Map";
$data['user_map_custom'] = $this->optionslib->get_map_custom(true,$slug);
$this->load->view('visitor/exportmap/header', $data);
$this->load->view('visitor/exportmap/exportmap', $data);
$this->load->view('visitor/exportmap/footer');
} else {
redirect('user/login');
}
$data['slug'] = $slug;
$data['page_title'] = "Export Map";
$this->load->view('visitor/exportmap/header', $data);
$this->load->view('visitor/exportmap/exportmap', $data);
$this->load->view('visitor/exportmap/footer');
}
public function mapqsos() {
@@ -509,47 +532,6 @@ class Visitor extends CI_Controller {
return $data;
}
// [MAP Custom] //
public function get_map_custom() {
$this->load->model('stationsetup_model');
$slug = $this->security->xss_clean($this->input->post('slug'));
$userid = $this->stationsetup_model->public_slug_exists_userid($slug);
$this->load->model('user_options_model');
$result = $this->user_options_model->get_options('map_custom', null, $userid);
$jsonout = [];
foreach($result->result() as $options) {
if ($options->option_name=='icon') $jsonout[$options->option_key]=json_decode($options->option_value,true);
else $jsonout[$options->option_name.'_'.$options->option_key]=$options->option_value;
}
if (count($jsonout) == 0) {
$jsonout['qso'] = array(
"icon" => "fas fa-dot-circle",
"color" => "#ff0000"
);
$jsonout['qsoconfirm'] = array(
"icon" => "fas fa-dot-circle",
"color" => "#00aa00"
);
$jsonout['station'] = array(
"icon" => "fas fa-broadcast-tower",
"color" => "#0000ff"
);
}
$jsonout['gridsquare_layer'] = $this->user_options_model->get_options('ExportMapOptions',array('option_name'=>'gridsquare_layer','option_key'=>$slug), $userid)->row()->option_value ?? true;
$jsonout['path_lines'] = $this->user_options_model->get_options('ExportMapOptions',array('option_name'=>'path_lines','option_key'=>$slug), $userid)->row()->option_value ?? true;
$jsonout['cqzone_layer'] = $this->user_options_model->get_options('ExportMapOptions',array('option_name'=>'cqzone_layer','option_key'=>$slug), $userid)->row()->option_value ?? true;
$jsonout['qsocount'] = $this->user_options_model->get_options('ExportMapOptions',array('option_name'=>'qsocount','option_key'=>$slug), $userid)->row()->option_value ?? 250;
$jsonout['nightshadow_layer'] = $this->user_options_model->get_options('ExportMapOptions',array('option_name'=>'nightshadow_layer','option_key'=>$slug), $userid)->row()->option_value ?? true;
$jsonout['band'] = $this->user_options_model->get_options('ExportMapOptions',array('option_name'=>'band','option_key'=>$slug), $userid)->row()->option_value ?? '';
header('Content-Type: application/json');
echo json_encode($jsonout);
}
function qso_is_confirmed($qso, $user_default_confirmation) {
$confirmed = false;
$qso = (array) $qso;
@@ -580,4 +562,4 @@ class Visitor extends CI_Controller {
return '';
}
}
}
}

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Карта на QSO';
$lang['qso_title_suggestions'] = 'Предложения';
$lang['qso_title_previous_contacts'] = 'Предишни контакти';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profile Picture';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -3,11 +3,11 @@
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['account_logbook_fields'] = '日志显示内容';
$lang['account_column1_text'] = '第1列';
$lang['account_column2_text'] = '第2列';
$lang['account_column3_text'] = '第3列';
$lang['account_column4_text'] = '第4列';
$lang['account_column5_text'] = '第5列仅日志页面展示';
$lang['account_column1_text'] = '第 1 列';
$lang['account_column2_text'] = '第 2 列';
$lang['account_column3_text'] = '第 3 列';
$lang['account_column4_text'] = '第 4 列';
$lang['account_column5_text'] = '第 5 列(仅日志页面展示)';
$lang['account_create_user_account'] = '创建账户';
$lang['account_edit_account'] = '编辑账户';
@@ -30,14 +30,14 @@ $lang['account_personal_information'] = '个人信息';
$lang['account_first_name'] = '姓';
$lang['account_last_name'] = '名';
$lang['account_hamradio_information'] = "HAM信息";
$lang['account_hamradio_information'] = "HAM 信息";
$lang['account_callsign'] = '呼号';
$lang['account_gridsquare'] = '网格坐标';
$lang['account_wavelog_preferences'] = '偏好';
$lang['account_timezone'] = '时区';
$lang['account_date_format'] = '日期格式';
$lang['account_log_end_time'] = '单独记录QSO结束时间';
$lang['account_log_end_time'] = '单独记录 QSO 结束时间';
$lang['account_log_end_time_hint'] = '如果想分别记录QSO的开始和结束时间选择\'是\',若选择\'否\'则QSO开始与结束时间相同';
$lang['account_quicklog_feature'] = "快速日志";
$lang['account_quicklog_feature_hint'] = "快速日志功能可以使用标题栏中的搜索字段来记录呼号";
@@ -48,8 +48,8 @@ $lang['account_quicklog_enter_search'] = "查询呼号";
$lang['account_measurement_preferences'] = '距离单位选择';
$lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = '选择您登录账户时显示偏好的日期格式';
$lang['account_choose_which_unit_distances_will_be_shown_in'] = '选择距离单位';
$lang['account_wavelog_language'] = 'Wavelog语言';
$lang['account_choose_wavelog_language'] = '选择Wavelog语言';
$lang['account_wavelog_language'] = 'Wavelog 语言';
$lang['account_choose_wavelog_language'] = '选择 Wavelog 语言';
$lang['account_main_menu'] = '主菜单';
$lang['account_show_notes_in_the_main_menu'] = '在主菜单显示便签';
@@ -60,19 +60,19 @@ $lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = '如果
$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = '根据 SOTA 编号自动查找网格坐标和山峰';
$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = '根据 WWFF 编号自动查找网格坐标和保护区';
$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = '根据 POTA 编号自动查找网格坐标和公园';
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = '开启此项设置将会通过API获取名称和网格坐标并填写位置和网格定位';
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = '开启此项设置,将会通过 API 获取名称和网格坐标,并填写位置和网格定位';
$lang['account_previous_qsl_type'] = '上一个QSL方式';
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = '选择要在上一个QSO部分中显示的QSL方式';
$lang['account_previous_qsl_type'] = '上一个 QSL 方式';
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = '选择要在上一个 QSO 部分中显示的 QSL 方式';
$lang['account_qrzcom_hamqthcom_images'] = 'qrz.com/hamqth.com 图片';
$lang['account_show_profile_picture_of_qso_partner_from_qrzcom_hamqthcom_profile_in_the_log_qso_section'] = '在日志QSO部分中显示由 qrz.com 中 hamqth.com 配置文件所获得的对方个人资料图片';
$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = '请在 general_config.php 中设置 qrz.com/hamqth.com 的凭据';
$lang['account_amsat_status_upload'] = '上传AMSAT';
$lang['account_amsat_status_upload'] = '上传 AMSAT';
$lang['account_upload_status_of_sat_qsos_to'] = '上传卫星状态到';
$lang['account_logbook_of_the_world'] = 'Logbook of the WorldLoTW';
$lang['account_logbook_of_the_world'] = 'Logbook of the World(LoTW)';
$lang['account_logbook_of_the_world_lotw_username'] = 'Logbook of The World (LoTW) 用户名';
$lang['account_logbook_of_the_world_lotw_password'] = 'Logbook of The World (LoTW) 密码';
@@ -103,13 +103,13 @@ $lang['account_forgot_your_password'] = '忘记密码?';
$lang['account_login'] = '登录';
$lang['account_mastodon'] = 'Mastodon服务器';
$lang['account_mastodon'] = 'Mastodon 服务器';
$lang['account_user_mastodon'] = 'Mastodon 地址';
$lang['account_user_mastodon_hint'] = "Mastodon服务器的主URL地址例如 <a href='https://radiosocial.de/' target='_blank'>https://radiosocial.de";
$lang['account_user_mastodon_hint'] = "Mastodon 服务器的主 URL 地址,例如 <a href='https://radiosocial.de/' target='_blank'>https://radiosocial.de";
$lang['account_default_band_settings'] = '默认波段和QSL确认方式设置';
$lang['account_default_band_settings'] = '默认波段和 QSL 确认方式设置';
$lang['account_gridmap_default_band'] = '默认波段';
$lang['account_qsl_settings'] = '默认QSL方式';
$lang['account_qsl_settings'] = '默认 QSL 方式';
$lang['account_winkeyer'] = 'Winkeyer';
$lang['account_winkeyer_hint'] = "Wavelog 中对 Winkeyer 的支持是实验性的,请在使用前先阅读 <a href='https://github.com/wavelog/wavelog/wiki/Winkey' target='_blank'>https://github.com/wavelog/wavelog/wiki/Winkey</a>";
@@ -128,9 +128,9 @@ $lang['account_miscellaneous'] = "其他";
$lang['account_hamsat'] = "Hams.at";
$lang['account_hamsat_private_feed_key'] = "Private Feed Key";
$lang['account_hamsat_hint'] = "See your profile at <a href='https://hams.at/users/settings' target='_blank'>https://hams.at/users/settings</a>.";
$lang['account_hamsat_workable_only'] = "Show Workable Passes Only";
$lang['account_hamsat_workable_only_hint'] = "If enabled shows only workable passes based on the gridsquare set in your hams.at account. Requires private feed key to be set.";
$lang['account_hamsat_hint'] = " <a href='https://hams.at/users/settings' target='_blank'>https://hams.at/users/settings</a> 查看个人信息。";
$lang['account_hamsat_workable_only'] = "只显示可通联的过境";
$lang['account_hamsat_workable_only_hint'] = "如果启用,仅显示基于在 hams.at 设置好的位置信息计算过境,需要设置好 Private Feed Key";
$lang['account_references_show'] = "Show Reference Fields on QSO Tab";
$lang['account_show_references_on_1st_tab'] = "The enabled items will be shown on the QSO tab rather than the General tab.";
$lang['account_references_show'] = "在 QSO 页面显示标识代号栏";
$lang['account_show_references_on_1st_tab'] = "启用后在 QSO 页面显示(非通用页面)。";

View File

@@ -32,21 +32,21 @@ $lang['adif_select_stationlocation'] = "选择台站位置";
// The File Input is translated by the Browser
$lang['adif_file_label'] = "ADIF 文件";
$lang['adif_hint_no_info_in_file'] = "如果导入的ADIF文件不包含此信息选择此项";
$lang['adif_hint_no_info_in_file'] = "如果导入的 ADIF 文件不包含此信息,选择此项";
$lang['adif_import_dup'] = "导入重复的QSO";
$lang['adif_mark_imported_lotw'] = "标记导入的QSO为已上传至 LoTW";
$lang['adif_mark_imported_hrdlog'] = "标记导入的QSO为已上传至 HRDLog Logbook";
$lang['adif_mark_imported_qrz'] = "标记导入的QSO为已上传至 QRZ Logbook";
$lang['adif_mark_imported_clublog'] = "标记导入的QSO为已上传至 Clublog Logbook";
$lang['adif_import_dup'] = "导入重复的 QSO";
$lang['adif_mark_imported_lotw'] = "标记导入的 QSO 为已上传至 LoTW";
$lang['adif_mark_imported_hrdlog'] = "标记导入的 QSO 为已上传至 HRDLog Logbook";
$lang['adif_mark_imported_qrz'] = "标记导入的 QSO 为已上传至 QRZ Logbook";
$lang['adif_mark_imported_clublog'] = "标记导入的 QSO 为已上传至 Clublog Logbook";
$lang['adif_dxcc_from_adif'] = "使用ADIF文件中的DXCC信息";
$lang['adif_dxcc_from_adif_hint'] = "如果不选择Wavelog将会自动判断QSODXCC";
$lang['adif_dxcc_from_adif'] = "使用 ADIF 文件中的 DXCC 信息";
$lang['adif_dxcc_from_adif_hint'] = "如果不选择Wavelog 将会自动判断 QSODXCC";
$lang['adif_always_use_login_call_as_op'] = "总是在导入时使用登录的呼号作为操作者名称";
$lang['adif_ignore_station_call'] = "导入时忽略台站的呼号";
$lang['adif_ignore_station_call_hint'] = "如果选择Wavelog会尝试导入ADIF文件中的 <b>所有</b> QSO而不判断是否与所选台站位置匹配";
$lang['adif_ignore_station_call_hint'] = "如果选择Wavelog 会尝试导入 ADIF 文件中的 <b>所有</b> QSO而不判断是否与所选台站位置匹配";
$lang['adif_upload'] = "上传";
@@ -123,9 +123,9 @@ ________________________________________________________________________________
$lang['dcl_results'] = "DCL DOK 更新结果";
$lang['dcl_info_updated'] = "DOK 的 DCL 信息已更新。";
$lang['dcl_qsos_updated'] = "已更新的QSO";
$lang['dcl_qsos_ignored'] = "已忽略的QSO";
$lang['dcl_qsos_unmatched'] = "无法匹配的QSO";
$lang['dcl_qsos_updated'] = "已更新的 QSO";
$lang['dcl_qsos_ignored'] = "已忽略的 QSO";
$lang['dcl_qsos_unmatched'] = "无法匹配的 QSO";
$lang['dcl_no_qsos_updated'] = "未找到可以更新的 QSO。";
$lang['dcl_dok_errors'] = "DOK 错误";
$lang['dcl_dok_errors_details'] = "与 DCL 相比,日志中 DOK 的数据不同";

View File

@@ -2,8 +2,8 @@
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['admin_user_line1'] = 'Wavelog至少需要配置一个用户才能运行。';
$lang['admin_user_line2'] = '用户可以被分配不同的角色,这些角色赋予他们不同的权限,例如向日志簿添加 QSO 和访问Wavelog API。';
$lang['admin_user_line1'] = 'Wavelog 至少需要配置一个用户才能运行。';
$lang['admin_user_line2'] = '用户可以被分配不同的角色,这些角色赋予他们不同的权限,例如向日志簿添加 QSO 和访问 Wavelog API。';
$lang['admin_user_line3'] = '页面右上方显示当前登录的用户。';
$lang['admin_user_line4'] = "通过'重置密码'按钮,你可以向用户发送一封带有重置密码链接的邮件。您需要确保全局设定中的邮件设置配置正确";
@@ -12,14 +12,14 @@ $lang['admin_user_list'] = '用户列表';
$lang['admin_user'] = '用户名';
$lang['admin_email'] = '电子邮件';
$lang['admin_type'] = '用户类型';
$lang['admin_last_seen'] = "Last seen";
$lang['admin_last_qso'] = "Last QSO:";
$lang['admin_no_qso_in_log'] = "No QSOs in Log";
$lang['admin_refresh_list'] = "Refresh List";
$lang['admin_last_seen'] = "上次出现";
$lang['admin_last_qso'] = "上个 QSO:";
$lang['admin_no_qso_in_log'] = "日志为空";
$lang['admin_refresh_list'] = "刷新列表";
$lang['admin_options'] = '设置';
$lang['admin_station_logbooks'] = 'Logbooks';
$lang['admin_station_locations'] = 'Locations';
$lang['admin_station_logbooks'] = '日志簿';
$lang['admin_station_locations'] = '地点';
$lang['admin_create_user'] = '创建用户';
$lang['admin_delete'] = '删除用户';
@@ -30,7 +30,7 @@ $lang['admin_update'] = '更新';
$lang['admin_copy'] = '复制';
$lang['admin_save'] = '保存';
$lang['admin_close'] = '关闭';
$lang['admin_clear'] = "Clear";
$lang['admin_clear'] = "清除";
$lang['admin_user_accounts'] = '用户账户';
$lang['admin_danger'] = '危险';
$lang['admin_experimental'] = "实验性功能";
@@ -38,7 +38,7 @@ $lang['admin_password_reset'] = "重置密码";
$lang['admin_email_settings_incorrect'] = "邮件设定出现错误";
$lang['admin_password_reset_processed'] = "密码重置邮件已发送";
$lang['admin_confirm_pwd_reset'] = "Do you really want to send this user a password-reset link?";
$lang['admin_confirm_pwd_reset'] = "确认发送重置密码链接?";
// Contest Menu

View File

@@ -6,7 +6,7 @@ $lang['awards_info_button'] = "奖状详情";
$lang['awards_show_worked'] = "显示已通联";
$lang['awards_show_confirmed'] = "显示已确认";
$lang['awards_show_not_worked'] = "显示未通联";
$lang['awards_qsl_type'] = "Show QSO with QSL Type";
$lang['awards_qsl_type'] = "显示 QSL 分类下的 QSO";
$lang['awards_show_cq_map'] = "查看CQ分区地图";
$lang['awards_summary'] = "概览";
$lang['awards_total'] = "总计";
@@ -16,8 +16,8 @@ $lang['awards_total_confirmed'] = "共确认";
$lang['awards_cq_page_title'] = "CQ 杂志 WAZ 奖状";
$lang['awards_itu_page_title'] = "Awards - ITU Zones";
$lang['awards_show_itu_map'] = "Show ITU Zone Map";
$lang['awards_show_jcc_map'] = "Show JCC Map";
$lang['awards_show_itu_map'] = "显示 ITU 分区地图";
$lang['awards_show_jcc_map'] = "显示 JCC 地图";
/*
___________________________________________________________________________________________
@@ -74,9 +74,9 @@ ________________________________________________________________________________
*/
$lang['awards_helvetia_description_ln1'] = "HELVETIA 26 | SWITZERLAND AWARD";
$lang['awards_helvetia_description_ln2'] = "The USKA (Union of Swiss Shortwave Amateurs) sponsors two awards, the HELVETIA 26 (H26) Award and the SWITZERLAND Award, aimed at promoting activities on the bands by encouraging contacts across as many Swiss cantons as possible on multiple bands.";
$lang['awards_helvetia_description_ln3'] = "These awards come in two versions: one for HF bands and the other for VHF (including SHF and UHF) bands. Valid connections for these awards date back to January 1, 1980";
$lang['awards_helvetia_description_ln4'] = "For more information, you can visit this link: <a href='https://www.uska.ch/contest/uska-diplome/' target='_blank'>https://www.uska.ch/contest/uska-diplome/</a>.";
$lang['awards_helvetia_description_ln2'] = "USKA瑞士短波业余爱好者联盟设立两个奖项HELVETIA 26H26)奖和 SWITZERLAND 奖,旨在通过鼓励在多个波段上通联尽可能多的瑞士州。";
$lang['awards_helvetia_description_ln3'] = "这些奖项有两类:一个适用于 HF 频段,另一个适用于 VHF包括 SHF UHF)频段。这些奖项的有效连接可追溯到 1980 年 1 月 1 日";
$lang['awards_helvetia_description_ln4'] = "如了解更多信息可在:<a href='https://www.uska.ch/contest/uska-diplome/' target='_blank'>https://www.uska.ch/contest/uska-diplome/</a> 查看";
/*
@@ -215,10 +215,10 @@ JCC -- Use all 4 Lines of Text
___________________________________________________________________________________________
*/
$lang['awards_jcc_description_ln1'] = "JCC - Japan Century Cities Award";
$lang['awards_jcc_description_ln2'] = "May be claimed for having contacted (heard) and received a QSL card from an amateur station located in each of at least 100 different cities of Japan.";
$lang['awards_jcc_description_ln3'] = "JCC-200, 300, 400, 500, 600, 700 and 800 will be issued as separate awards. A list of QSL cards should be arranged in order of JCC reference number, however names of city may be omitted. An additional sticker will be issued at every 50 contacts like 150, 250, 350, 450, 550, 650, 750 cities.";
$lang['awards_jcc_description_ln4'] = "For more information, please visit: <a href='https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm' target='_blank'>https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm</a>.";
$lang['awards_jcc_description_ln1'] = "JCC - 日本世纪城市奖";
$lang['awards_jcc_description_ln2'] = "通联(收听)并收到日本 100 个不同城市的电台卡片,即可申请。";
$lang['awards_jcc_description_ln3'] = "此外 JCC 还有数量为 200, 300, 400, 500, 600, 700 and 800 的奖项类别。QSL 卡片应记录 JCC 标识代号,城市名称为无效。额外的贴纸会在每 50 个通联记录发放,如 150, 250, 350, 450, 550, 650, 750 个城市数量";
$lang['awards_jcc_description_ln4'] = "更多信息可在:<a href='https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm' target='_blank'>https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm</a> 查看";
/*
@@ -227,16 +227,16 @@ WAB -- Use all 4 Lines of Text
___________________________________________________________________________________________
*/
$lang['awards_wab_description_ln1'] = "WAB - Worked All Britain Award";
$lang['awards_wab_description_ln2'] = "WAB, Worked All Britain squares in Amateur Radio, encourages licensed ham radio operators to work all the squares in Great Britain.";
$lang['awards_wab_description_ln3'] = "May be claimed for having contacted an amateur station located in the required amount of squares, described on the page linked below.";
$lang['awards_wab_description_ln4'] = "For more information, please visit: <a href='https://wab.intermip.net/default.php' target='_blank'>https://wab.intermip.net/default.php</a>.";
$lang['awards_wab_description_ln1'] = "WAB - 通联大不列颠奖";
$lang['awards_wab_description_ln2'] = "WABWorked All Britain squares in Amateur Radio)鼓励业余无线电操作员通联英国所有网格";
$lang['awards_wab_description_ln3'] = "达成既定数量的通联网格可申请,可在如下链接查看";
$lang['awards_wab_description_ln4'] = "更多信息请查看 <a href='https://wab.intermip.net/default.php' target='_blank'>https://wab.intermip.net/default.php</a>";
/*
___________________________________________________________________________________________
ITU
___________________________________________________________________________________________
*/
$lang['awards_itu_description_ln1'] = "ITU Zones";
$lang['awards_itu_description_ln2'] = "The Classic Worked ITU Zones award may be claimed by producing evidence of having contacted land based amateur radio stations in at least 70 of the 75 broadcasting zones as defined by the International Telecommunications Union (ITU).";
$lang['awards_itu_description_ln3'] = "You can find more information on the website of <a href='https://rsgb.org/main/files/2019/01/Worked_ITU_Zones_Award_Form_2019.pdf' target='_blank'>RSGB</a>.";
$lang['awards_itu_description_ln1'] = "ITU 分区";
$lang['awards_itu_description_ln2'] = "通联全球 75 个 ITU 分区中的 70 个可申请该奖";
$lang['awards_itu_description_ln3'] = "更多信息请查看 <a href='https://rsgb.org/main/files/2019/01/Worked_ITU_Zones_Award_Form_2019.pdf' target='_blank'>RSGB</a>";

View File

@@ -48,19 +48,19 @@ $lang['export_cabrillo_select_year'] = "选择年份";
$lang['export_cabrillo_select_contest'] = "选择比赛";
$lang['export_cabrillo_select_date_range'] = "选择日期区间";
$lang['export_cabrillo_club'] = "俱乐部";
$lang['export_cabrillo_cat_operator'] = "操作员类型Operator";
$lang['export_cabrillo_cat_operator_single_op'] = "单操作员Single Operator";
$lang['export_cabrillo_cat_operator_multi_op'] = "多操作员Multi Operator";
$lang['export_cabrillo_cat_operator_checklog'] = "检查日志Checklog";
$lang['export_cabrillo_cat_assisted'] = "辅助类型Assisted";
$lang['export_cabrillo_cat_assisted_not_ass'] = "无辅助Not Assisted";
$lang['export_cabrillo_cat_assisted_ass'] = "有辅助Assisted";
$lang['export_cabrillo_cat_band'] = "波段类型Band";
$lang['export_cabrillo_cat_operator'] = "操作员类型(Operator)";
$lang['export_cabrillo_cat_operator_single_op'] = "单操作员(Single Operator)";
$lang['export_cabrillo_cat_operator_multi_op'] = "多操作员(Multi Operator)";
$lang['export_cabrillo_cat_operator_checklog'] = "检查日志(Checklog)";
$lang['export_cabrillo_cat_assisted'] = "辅助类型(Assisted)";
$lang['export_cabrillo_cat_assisted_not_ass'] = "无辅助(Not Assisted)";
$lang['export_cabrillo_cat_assisted_ass'] = "有辅助(Assisted)";
$lang['export_cabrillo_cat_band'] = "波段类型(Band)";
$lang['export_cabrillo_cat_band_arrl_vhf'] = "VHF-3-BAND 和 VHF-FM-ONLY (仅限 ARRL VHF 竞赛)";
$lang['export_cabrillo_cat_mode'] = "模式类型Mode";
$lang['export_cabrillo_cat_power'] = "功率类型Power";
$lang['export_cabrillo_cat_station'] = "台站类型Station";
$lang['export_cabrillo_cat_transmitter'] = "发射机类型Transmitter";
$lang['export_cabrillo_cat_mode'] = "模式类型(Mode)";
$lang['export_cabrillo_cat_power'] = "功率类型(Power)";
$lang['export_cabrillo_cat_station'] = "台站类型(Station)";
$lang['export_cabrillo_cat_transmitter'] = "发射机类型(Transmitter)";
$lang['export_cabrillo_cat_overlay'] = "Overlay类型";
$lang['export_cabrillo_operators'] = "操作员";
$lang['export_cabrillo_soapbox'] = "Soapbox(附加信息)";

View File

@@ -15,7 +15,7 @@ $lang['filter_filters'] = '过滤器';
$lang['filter_actions'] = '操作';
$lang['filter_results'] = '每页结果数';
$lang['filter_search'] = '搜索';
$lang['filter_dupes'] = "重复QSO";
$lang['filter_dupes'] = "重复 QSO";
$lang['filter_map'] = '地图';
$lang['filter_options'] = '显示列';
$lang['filter_reset'] = '重置筛选条件';
@@ -32,7 +32,7 @@ $lang['filter_search_dxcc'] = '搜索 DXCC';
$lang['filter_search_state'] = '搜索 州/省';
$lang['filter_search_gridsquare'] = '搜索 网格';
$lang['filter_search_cq_zone'] = '搜索 CQ 分区';
$lang['filter_search_itu_zone'] = 'Search ITU Zone';
$lang['filter_search_itu_zone'] = '搜索 ITU 分区';
$lang['filter_search_mode'] = '搜索 模式';
$lang['filter_search_band'] = '搜索 频段';
$lang['filter_search_iota'] = '搜索 IOTA';
@@ -81,7 +81,7 @@ $lang['filter_general_to'] = '截止日期';
// $lang['gen_hamradio_de'] --> application/language/english/general_words_lang.php
// $lang['gen_hamradio_dx'] --> application/language/english/general_words_lang.php
// $lang['gen_hamradio_dxcc'] --> application/language/english/general_words_lang.php
$lang['filter_general_none'] = '- 无 - (例如 /MM, /AM)';
$lang['filter_general_none'] = '- 无 -(例如 /MM, /AM)';
// $lang['gen_hamradio_state'] --> application/language/english/general_words_lang.php
// $lang['gen_hamradio_gridsquare'] --> application/language/english/general_words_lang.php
// $lang['gen_hamradio_mode'] --> application/language/english/general_words_lang.php
@@ -105,21 +105,21 @@ $lang['filter_actions_update_f_callbook'] = '从 Callbook 更新';
$lang['filter_actions_queue_bureau'] = '卡片局队列';
$lang['filter_actions_queue_direct'] = '直邮卡片队列';
$lang['filter_actions_queue_electronic'] = '电子卡片队列';
$lang['filter_actions_sent_bureau'] = '已发送 (卡片局)';
$lang['filter_actions_sent_direct'] = '已发送 (直邮)';
$lang['filter_actions_sent_electronic'] = '已发送 (电子)';
$lang['filter_actions_sent_bureau'] = '已发送(卡片局)';
$lang['filter_actions_sent_direct'] = '已发送(直邮)';
$lang['filter_actions_sent_electronic'] = '已发送(电子)';
$lang['filter_actions_not_sent'] = '未发送';
$lang['filter_actions_qsl_n_required'] = '未获取 QSL';
$lang['filter_actions_recv_bureau'] = '已接收 (卡片局)';
$lang['filter_actions_recv_direct'] = '已接收 (直邮)';
$lang['filter_actions_recv_electronic'] = '已接收 (电子)';
$lang['filter_actions_not_rcvd'] = "Not Received";
$lang['filter_actions_recv_bureau'] = '已接收(卡片局)';
$lang['filter_actions_recv_direct'] = '已接收(直邮)';
$lang['filter_actions_recv_electronic'] = '已接收(电子)';
$lang['filter_actions_not_rcvd'] = "未收到";
$lang['filter_actions_create_adif'] = '创建 ADIF';
$lang['filter_actions_print_label'] = '打印标签';
$lang['filter_actions_start_print_title'] = '打印标签';
$lang['filter_actions_print_include_via'] = "包含通过";
$lang['filter_actions_print_include_grid'] = '包含网格?';
$lang['filter_actions_print_include_ref'] = "Include reference? (SIG, SOTA, POTA, IOTA, WWFF; If available in location)";
$lang['filter_actions_print_include_ref'] = "包含标识代码?(SIG, SOTA, POTA, IOTA, WWFF; 如存在则显示)";
$lang['filter_actions_start_print'] = '开始打印编号';
$lang['filter_actions_print'] = '打印';
$lang['filter_actions_qsl_slideshow'] = 'QSL 展示窗';

View File

@@ -4,7 +4,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
$lang['error_no_active_station_profile'] = '注意:你需要设置一个活动的电台站地址';
$lang['notice_turn_the_radio_on'] = '你今天还没进行QSO是时候打开你的电台开始通联了';
$lang['notice_turn_the_radio_on'] = '你今天还没进行 QSO是时候打开你的电台开始通联了';
$lang['general_word_important'] = '重要';
$lang['general_word_warning'] = '注意';
@@ -12,14 +12,14 @@ $lang['general_word_danger'] = '警告';
$lang['general_word_maintenance'] = '维护';
$lang['general_word_info'] = '消息';
$lang['general_word_choose_file'] = '选择文件';
$lang['general_word_please_wait'] = "Please Wait ...";
$lang['general_word_please_wait'] = "请稍等…";
$lang['general_word_next'] = '后一项';
$lang['general_word_previous'] = '前一项';
$lang['general_word_cancel'] = "取消";
$lang['general_word_ok'] = "确认";
$lang['general_word_show'] = "Show";
$lang['general_word_show'] = "显示";
$lang['general_word_attention'] = "注意";
$lang['general_word_message'] = "Message";
$lang['general_word_message'] = "消息";
$lang['general_word_enabled'] = "已启用";
$lang['general_word_disabled'] = "已禁用";
$lang['general_word_export'] = "导出";
@@ -29,8 +29,8 @@ $lang['general_word_filtering_on'] = "筛选打开";
$lang['general_word_not_display'] = "不显示";
$lang['general_word_icon'] = "图标";
$lang['general_word_never'] = "从不";
$lang['general_word_active'] = "Active";
$lang['general_word_inactive'] = "Inactive";
$lang['general_word_active'] = "启用";
$lang['general_word_inactive'] = "关闭";
$lang['general_word_date'] = '日期';
$lang['general_word_startdate'] = "开始时间";
@@ -45,7 +45,7 @@ $lang['general_word_location'] = '位置';
$lang['general_word_comment'] = '备注';
$lang['general_word_general'] = '通用';
$lang['general_word_satellite'] = '卫星';
$lang['general_word_orbit'] = 'Orbit';
$lang['general_word_orbit'] = '环绕';
$lang['general_word_satellite_short'] = '卫星';
$lang['general_word_notes'] = '笔记';
$lang['general_word_country'] = 'DXCC 实体';
@@ -57,9 +57,9 @@ $lang['general_word_year'] = '年';
$lang['general_word_month'] = '月';
$lang['general_word_day'] = "";
$lang['general_word_days'] = "";
$lang['general_word_period'] = "Period";
$lang['general_word_yearly'] = "Yearly";
$lang['general_word_monthly'] = "Monthly";
$lang['general_word_period'] = "周期";
$lang['general_word_yearly'] = "每年";
$lang['general_word_monthly'] = "每月";
$lang['general_word_colors'] = "颜色";
$lang['general_word_light'] = "浅色/高光";
@@ -67,7 +67,7 @@ $lang['general_word_worked'] = '已通联';
$lang['general_word_worked_not_confirmed'] = "已通联未确认";
$lang['general_word_not_worked'] = "未通联";
$lang['general_word_confirmed'] = '已确认';
$lang['general_word_not_confirmed'] = "Not Confirmed";
$lang['general_word_not_confirmed'] = "未确认";
$lang['general_word_confirmation'] = "确认";
$lang['general_word_needed'] = '待通联';
@@ -92,22 +92,22 @@ $lang['general_word_qslcard_manager'] = '管理员';
$lang['general_word_qslcard_via'] = '通过';
$lang['general_word_eqslcard'] = '电子 QSL 卡片';
$lang['general_word_eqslcards'] = 'eQSL 卡片';
$lang['general_word_lotw'] = 'Logbook of the WorldLoTW';
$lang['general_word_lotw'] = 'Logbook of the World(LoTW)';
$lang['general_word_lotw_short'] = 'LoTW';
$lang['general_word_details'] = '详细';
$lang['general_word_qso_data'] = 'QSO 数据';
$lang['general_edit_qso'] = '编辑 QSO';
$lang['general_mark_qsl_rx_bureau'] = '标记 已收到的QSL (卡片局)';
$lang['general_mark_qsl_rx_direct'] = '标记 已收到的QSL (直邮)';
$lang['general_mark_qsl_rx_electronic'] = '标记 已收到的QSL (电子)';
$lang['general_mark_qsl_tx_bureau'] = '标记 已发送的QSL (卡片局)';
$lang['general_mark_qsl_tx_direct'] = '标记 已发送的QSL (直邮)';
$lang['general_mark_qsl_requested'] = '标记 已请求 QSL Card';
$lang['general_mark_qsl_requested_bureau'] = '标记 已请求 QSL Card (卡片局)';
$lang['general_mark_qsl_requested_direct'] = '标记 已请求 QSL Card (直邮)';
$lang['general_mark_qsl_not_required'] = '标记 不需要 QSL Card';
$lang['general_mark_qsl_rx_bureau'] = '标记 已收到卡片(卡片局)';
$lang['general_mark_qsl_rx_direct'] = '标记 已收到卡片(直邮)';
$lang['general_mark_qsl_rx_electronic'] = '标记 已收到卡片(电子)';
$lang['general_mark_qsl_tx_bureau'] = '标记 已收到卡片(卡片局)';
$lang['general_mark_qsl_tx_direct'] = '标记 已收到卡片(直邮)';
$lang['general_mark_qsl_requested'] = '标记 已请求卡片';
$lang['general_mark_qsl_requested_bureau'] = '标记 已请求卡片(卡片局)';
$lang['general_mark_qsl_requested_direct'] = '标记 已请求卡片(直邮)';
$lang['general_mark_qsl_not_required'] = '标记 不需要卡片';
$lang['general_delete_qso'] = '删除 QSO';
$lang['general_more_qso'] = '更多 QSO';
@@ -133,31 +133,31 @@ $lang['gen_hamradio_callsign'] = '呼号';
$lang['gen_hamradio_prefix'] = "前缀";
$lang['gen_hamradio_suffix'] = "后缀";
$lang['gen_hamradio_mode'] = '模式';
$lang['gen_hamradio_ant_az'] = 'Antenna Azimuth';
$lang['gen_hamradio_ant_el'] = 'Antenna Elevation';
$lang['gen_hamradio_ant_az'] = '天线方位';
$lang['gen_hamradio_ant_el'] = '天线仰角';
$lang['gen_hamradio_de'] = '本台呼号(De)';
$lang['gen_hamradio_dx'] = '对方呼号(Dx)';
$lang['gen_hamradio_rst_sent'] = 'Sent RST';
$lang['gen_hamradio_rst_rcvd'] = 'Rcvd RST';
$lang['gen_hamradio_rst_sent'] = '信号报告(发送)';
$lang['gen_hamradio_rst_rcvd'] = '信号报告(接收)';
$lang['gen_hamradio_band'] = '频段';
$lang['gen_hamradio_bandgroup'] = "波段";
$lang['gen_hamradio_band_rx'] = '频段 (RX)';
$lang['gen_hamradio_band_rx'] = '频段(接收)';
$lang['gen_hamradio_frequency'] = '频率';
$lang['gen_hamradio_frequency_rx'] = '频率 (RX)';
$lang['gen_hamradio_frequency_rx'] = '频率(接收)';
$lang['gen_hamradio_radio'] = '电台';
$lang['gen_hamradio_rsts'] = '信号报告 (发)';
$lang['gen_hamradio_rstr'] = '信号报告 (收)';
$lang['gen_hamradio_rsts'] = '信号报告(发)';
$lang['gen_hamradio_rstr'] = '信号报告(收)';
$lang['gen_hamradio_refs'] = '对方网格';
$lang['gen_hamradio_myrefs'] = '电台网格';
$lang['gen_hamradio_exchange_sent_short'] = '信号交换 (发)';
$lang['gen_hamradio_exchange_rcvd_short'] = '信号交换 (收)';
$lang['gen_hamradio_exchange_sent_short'] = '信号交换(发)';
$lang['gen_hamradio_exchange_rcvd_short'] = '信号交换(收)';
$lang['gen_hamradio_qsl'] = 'QSL';
$lang['gen_hamradio_qsltype'] = "QSL 类型";
$lang['gen_hamradio_qslvia'] = 'QSL via';
$lang['gen_hamradio_qslmsg'] = 'QSL 信息';
$lang['gen_hamradio_locator'] = '定位地图';
$lang['gen_hamradio_transmit_power'] = '发射功率 (W)';
$lang['gen_hamradio_receive_power'] = 'RX Power (W)';
$lang['gen_hamradio_transmit_power'] = '发射功率(W)';
$lang['gen_hamradio_receive_power'] = 'RX Power(W)';
$lang['gen_hamradio_propagation_mode'] = '传播模式';
$lang['gen_hamradio_satellite_name'] = '卫星名称';
@@ -165,7 +165,7 @@ $lang['gen_hamradio_satellite_mode'] = '卫星模式';
$lang['gen_hamradio_logbook'] = '日志簿';
$lang['gen_hamradio_active_logbook'] = 'Active Logbook';
$lang['gen_hamradio_active_logbook_hint'] = "Displaying all QSOs of station locations which are linked to this logbook";
$lang['gen_hamradio_active_logbook_hint'] = "显示该日志本下全部 QSO";
$lang['gen_hamradio_award'] = "奖项";
$lang['gen_hamradio_zones'] = '分区';
@@ -174,8 +174,8 @@ $lang['gen_hamradio_itu_zone'] = 'ITU 分区';
$lang['gen_hamradio_dxcc'] = 'DXCC实体';
$lang['gen_hamradio_deleted_dxcc'] = '删除 DXCC 实体';
$lang['gen_hamradio_continent'] = '大陆';
$lang['gen_hamradio_usa_state'] = '州美国';
$lang['gen_hamradio_county_reference'] = '县美国';
$lang['gen_hamradio_usa_state'] = '州(美国)';
$lang['gen_hamradio_county_reference'] = '县(美国)';
$lang['gen_hamradio_iota_reference'] = 'IOTA 编号';
$lang['gen_hamradio_sota_reference'] = 'SOTA 编号';
$lang['gen_hamradio_wwff_reference'] = 'WWFF 编号';
@@ -237,6 +237,6 @@ $lang['dashboard_logbooks_warning'] = '你没有电台日志。 请前往<a href
$lang['hams_at_no_activations_found'] = '未找到即将进行的激活。 请稍后再回来查看。';
$lang['gen_add_to_contest'] = "Add QSOs to Contest";
$lang['general_word_realtime'] = "Realtime";
$lang['gen_add_to_contest'] = "向竞赛中添加 QSO";
$lang['general_word_realtime'] = "实时";
$lang['datatables_language'] = "en-GB";

View File

@@ -55,12 +55,12 @@ $lang['lotw_p12_export_step_four'] = '在下方上传文件';
$lang['lotw_confirmed'] = '该 QSO 已在 LoTW 确认';
// LoTW Expiry
$lang['lotw_cert_expiring'] = '至少有一个LoTW证书即将过期!';
$lang['lotw_cert_expired'] = '至少有一个LoTW证书已经过期!';
$lang['lotw_cert_expiring'] = '至少有一个 LoTW 证书即将过期!';
$lang['lotw_cert_expired'] = '至少有一个 LoTW 证书已经过期!';
// Lotw User
$lang['lotw_user'] = '这个电台使用 LOTW';
$lang['lotw_last_upload'] = '最后一次上传是';
// Upload folder permissions
$lang['lotw_upload_folder_permissions'] = 'Upload folder is not writable. Please contact your admin.';
$lang['lotw_upload_folder_permissions'] = '上传目录非可写,请联系本站管理员。';

View File

@@ -9,14 +9,14 @@ $lang['menu_overview'] = '概览';
$lang['menu_advanced'] = '详细信息';
$lang['menu_qso'] = 'QSO';
$lang['menu_live_qso'] = '添加QSO实时';
$lang['menu_post_qso'] = '添加QSO手动';
$lang['menu_fast_log_entry'] = "快速记录QSO";
$lang['menu_live_qso'] = '添加 QSO实时';
$lang['menu_post_qso'] = '添加 QSO手动';
$lang['menu_fast_log_entry'] = "快速记录 QSO";
$lang['menu_live_contest_logging'] = '比赛日志(实时)';
$lang['menu_post_contest_logging'] = '比赛日志(手动)';
$lang['menu_bandmap'] = '波段地图';
$lang['menu_view_qsl'] = '浏览QSL卡片';
$lang['menu_view_eqsl'] = '浏览eQSL卡片';
$lang['menu_view_qsl'] = '浏览 QSL 卡片';
$lang['menu_view_eqsl'] = '浏览 eQSL 卡片';
$lang['menu_notes'] = '笔记';
@@ -56,8 +56,8 @@ $lang['menu_waja'] = 'WAJA';
$lang['menu_was'] = 'WAS';
$lang['menu_wwff'] = 'WWFF';
$lang['menu_tools'] = "Tools";
$lang['menu_sat_timers'] = "SAT Timers";
$lang['menu_tools'] = "工具";
$lang['menu_sat_timers'] = "卫星过境时钟";
$lang['menu_admin'] = '管理';
$lang['menu_user_account'] = '用户账户';
@@ -79,11 +79,11 @@ $lang['menu_login_button'] = '登录';
$lang['menu_account'] = '账户';
$lang['menu_station_logbooks'] = '电台站日志簿';
$lang['menu_station_locations'] = '电台站位置';
$lang['menu_select_location'] = "Select a Location";
$lang['menu_station_setup'] = 'Station Setup';
$lang['menu_select_location'] = "选择电台站位置";
$lang['menu_station_setup'] = '设置台站';
$lang['menu_bands'] = '波段';
$lang['menu_adif_import_export'] = 'ADIF 导入/导出';
$lang['menu_other_export'] = "Other Export Options";
$lang['menu_other_export'] = "其它导出选项";
$lang['menu_kml_export'] = 'KML 导出';
$lang['menu_dx_atlas_gridsquare_export'] = 'DX Atlas Gridsquare 导出';
$lang['menu_sota_csv_export'] = 'SOTA CSV 导出';
@@ -92,7 +92,7 @@ $lang['menu_cfd_export'] = "CFD Export";
$lang['menu_oqrs_requests'] = 'OQRS';
$lang['menu_print_requested_qsls'] = '打印请求的QSL卡片';
$lang['menu_labels'] = '标签';
$lang['menu_third_party_services'] = "Third-Party Services";
$lang['menu_third_party_services'] = "第三方服务";
$lang['menu_logbook_of_the_world'] = 'Logbook of the World';
$lang['menu_eqsl_import_export'] = 'eQSL 导入/导出';
$lang['menu_qrz_logbook'] = 'QRZ 日志簿';
@@ -105,17 +105,17 @@ $lang['menu_forum'] = '论坛';
$lang['menu_logout'] = '注销';
$lang['menu_extras'] = "Extras";
$lang['menu_satellites'] = 'Satellites';
$lang['menu_dx_calendar'] = 'DX Calendar';
$lang['menu_contest_calendar'] = 'Contest Calendar';
$lang['menu_satellites'] = '卫星';
$lang['menu_dx_calendar'] = 'DX 日志';
$lang['menu_contest_calendar'] = '竞赛日志';
$lang['menu_wab'] = 'WAB';
$lang['menu_itu'] = 'ITU';
$lang['menu_canada'] = 'Canada';
$lang['menu_germany'] = 'Germany';
$lang['menu_great_britain'] = 'Great Britain';
$lang['menu_japan'] = 'Japan';
$lang['menu_luxemburg'] = 'Luxemburg';
$lang['menu_switzerland'] = 'Switzerland';
$lang['menu_usa'] = 'USA';
$lang['menu_canada'] = '加拿大';
$lang['menu_germany'] = '德国';
$lang['menu_great_britain'] = '英国';
$lang['menu_japan'] = '日本';
$lang['menu_luxemburg'] = '卢森堡';
$lang['menu_switzerland'] = '瑞士';
$lang['menu_usa'] = '美国';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = '本设置是针对所有用户的全局设置,会
$lang['options_appearance'] = '外观';
$lang['options_theme'] = '主题';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = '全局主题选择,当用户未登录时使用。';
$lang['options_public_search_bar'] = '公共搜索栏';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = '允许未登录的用户访问搜索功能。';
@@ -16,22 +17,19 @@ $lang['options_dashboard_map'] = '仪表盘的地图';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = '允许禁用仪表板上的地图或将其放置在右侧。';
$lang['options_logbook_map'] = '日志地图';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = '允许禁用日志中的地图。';
$lang['options_theme_changed_to'] = '主题更改为 ';
$lang['options_global_search_changed_to'] = '全局搜索更改为 ';
$lang['options_dashboard_banner_changed_to'] = '仪表板横幅更改为 ';
$lang['options_dashboard_map_changed_to'] = '仪表板地图更改为 ';
$lang['options_logbook_map_changed_to'] = '日志地图更改为 ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "选中以在公共视图中禁用地图,包括主地图和网格地图。";
$lang['options_radios'] = '电台';
$lang['options_radio_settings'] = '电台设置';
$lang['options_radio_timeout_warning'] = '电台连接超时警告';
$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = '在QSO输入面板上使用电台连接超时警告提醒您无线电接口断开。';
$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = '在 QSO 输入面板上使用电台连接超时警告,提醒您无线电接口断开。';
$lang['options_this_number_is_in_seconds'] = '此数字以秒为单位。';
$lang['options_radio_timeout_warning_changed_to'] = '无线电超时警告更改为 ';
$lang['options_email'] = '电子邮件';
$lang['options_outgoing_protocol'] = '传出协议';
$lang['options_smtp_encryption'] = 'SMTP加密';
$lang['options_smtp_encryption'] = 'SMTP 加密';
$lang['options_email_address'] = '电子邮件地址';
$lang['options_email_sender_name'] = '发件人姓名';
$lang['options_smtp_host'] = 'SMTP 主机';
@@ -53,14 +51,14 @@ $lang['options_send_testmail_hint'] = "邮件将会发送到填写在个人信
$lang['options_send_testmail_failed'] = "测试邮件发送失败,请检查设置";
$lang['options_send_testmail_success'] = "测试邮件发送成功,设置正常";
$lang['options_oqrs'] = 'OQRS设置';
$lang['options_oqrs'] = 'OQRS 设置';
$lang['options_global_text'] = '全局文本';
$lang['options_this_text_is_an_optional_text_that_can_be_displayed_on_top_of_the_oqrs_page'] = '该文本是一个可选文本可以显示在OQRS页面的顶部。';
$lang['options_grouped_search'] = '分组搜索';
$lang['options_when_this_is_on_all_station_locations_with_oqrs_active_will_be_searched_at_once'] = '当此选项打开时所有具有OQRS活动的电台位置将同时搜索';
$lang['options_grouped_search_show_station_name'] = "在分组搜索结果中显示台站名称";
$lang['options_grouped_search_show_station_name_hint'] = "如果分组搜索被启用,台站名称将会显示在表格当中";
$lang['options_oqrs_options_have_been_saved'] = 'OQRS选项已保存';
$lang['options_oqrs_options_have_been_saved'] = 'OQRS 选项已保存';
$lang['options_save'] = '保存';
$lang['options_dxcluster_provider'] = 'DXClusterCache 的信息来源';
@@ -87,7 +85,7 @@ $lang['options_version_dialog_mode_release_notes'] = "只有发布版的更新
$lang['options_version_dialog_mode_custom_text'] = "只有自定义文字";
$lang['options_version_dialog_mode_both'] = "发布版的更新内容和自定义文字";
$lang['options_version_dialog_mode_disabled'] = "禁用";
$lang['options_version_dialog_mode_hint'] = "版本信息将会对所有用户显示. 用户可以选择在阅读后关闭对话框选择是否显示GitHub上发布版的更新内容还是自定义文字或者两者";
$lang['options_version_dialog_mode_hint'] = "版本信息将会对所有用户显示. 用户可以选择在阅读后关闭对话框,选择是否显示 GitHub 上发布版的更新内容还是自定义文字,或者两者";
$lang['options_version_dialog_custom_text'] = "版本信息————自定义文字";
$lang['options_version_dialog_custom_text_hint'] = "自定义文字将会在对话框中显示";
$lang['options_version_dialog_mode_changed_to'] = "版本信息模式切换为";
@@ -114,11 +112,11 @@ $lang['options_bands_activateall_warning'] = "警告!你要启用所有波段
$lang['options_bands_deactivate_all'] = "停用所有";
$lang['options_bands_deactivateall_warning'] = "警告!你要停用所有波段吗?";
$lang['options_bands_ssb_qrg'] = "SSB 频率";
$lang['options_bands_ssb_qrg_hint'] = "波段中 SSB 的频率以Hz为单位";
$lang['options_bands_ssb_qrg_hint'] = "波段中 SSB 的频率(以 Hz 为单位)";
$lang['options_bands_data_qrg'] = "DATA 频率";
$lang['options_bands_data_qrg_hint'] = "波段中 DATA 的频率以Hz为单位";
$lang['options_bands_data_qrg_hint'] = "波段中 DATA 的频率(以 Hz 为单位)";
$lang['options_bands_cw_qrg'] = "CW 频率";
$lang['options_bands_cw_qrg_hint'] = "波段中 CW 的频率以Hz为单位";
$lang['options_bands_cw_qrg_hint'] = "波段中 CW 的频率(以 Hz 为单位)";
$lang['options_bands_name_band'] = "波段名称例如20m";
$lang['options_bands_name_bandgroup'] = "频段名称例如HF、VHF、UHF、SHF";

View File

@@ -23,17 +23,17 @@ $lang['qslcard_upload_back'] = '上传 QSL 卡片背面图像';
$lang['qslcard_upload_button'] = '上传 QSL 卡片图像';
$lang['qslcard_qslprint_header'] = "导出用于打印的QSL请求";
$lang['qslcard_qslprint_header'] = "导出用于打印的 QSL 请求";
$lang['qslcard_qslprint_text_line1'] = "在这里你可以导出QSL请求为 CSV 或 ADIF 文件用于打印,或者标记为已寄出";
$lang['qslcard_qslprint_text_line2'] = "QSL请求是指'已请求'或'已排队'的QSL信息";
$lang['qslcard_qslprint_text_line2'] = "QSL 请求是指'已请求'或'已排队'的 QSL 信息";
$lang['qslcard_qslprint_send_method'] = "发送方式";
$lang['qslcard_qslprint_mark_as_sent'] = "标记为'已发送’";
$lang['qslcard_qslprint_mark_selected_as_printed'] = "标记选中的QSL信息为'已打印'";
$lang['qslcard_qslprint_remove_selected_from_queue'] = "从队列中删除选中的QSL信息";
$lang['qslcard_qslprint_mark_selected_as_printed'] = "标记选中的 QSL 信息为'已打印'";
$lang['qslcard_qslprint_remove_selected_from_queue'] = "从队列中删除选中的 QSL 信息";
$lang['qslcard_qslprint_export_csv'] = "导出QSL请求为 CSV 文件";
$lang['qslcard_qslprint_export_adif'] = "导出QSL请求为 ADIF 文件";
$lang['qslcard_qslprint_mark_requested_as_sent'] = "标记QSL请求为'已发送'";
$lang['qslcard_qslprint_no_qsls_found'] = "没有找到需要打印的QSL信息";
$lang['qslcard_qslprint_mark_requested_as_sent'] = "标记 QSL 请求为'已发送'";
$lang['qslcard_qslprint_no_qsls_found'] = "没有找到需要打印的 QSL 信息";
$lang['qslcard_qslprint_add_to_queue'] = "添加到打印队列中";
$lang['qslcard_qslprint_no_additional_qso_found'] = "没有找到附加的QSL信息可能它们已经被添加到打印队列中";
$lang['qslcard_qslprint_no_additional_qso_found'] = "没有找到附加的 QSL 信息,可能它们已经被添加到打印队列中";

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO 地图';
$lang['qso_title_suggestions'] = '建议';
$lang['qso_title_previous_contacts'] = '先前通联';
$lang['qso_title_times_worked_before'] = "先前通联的次数";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = '操作员照片';
$lang['qso_previous_max_shown'] = "最多五次先前通联将会被显示";
@@ -18,7 +19,7 @@ $lang['qso_transmit_power_helptext'] = '以W为单位设置功率值。在输入
$lang['qso_sota_ref_helptext'] = '例如: GM/NS-001.';
$lang['qso_wwff_ref_helptext'] = '例如: DLFF-0069.';
$lang['qso_pota_ref_helptext'] = '例如: PA-0150. Multiple values allowed.';
$lang['qso_pota_ref_helptext'] = '例如: PA-0150. 可使用多个值';
$lang['qso_sig_helptext'] = '例如: GMA';
$lang['qso_sig_info_helptext'] = '例如: DA/NW-357';
@@ -35,8 +36,8 @@ $lang['qso_error_timeoff_less_timeon'] = "结束时间小于开始时间";
// Button Text on /qso Display
$lang['qso_btn_clear_qso'] = 'Clear';
$lang['qso_btn_reset_to_default'] = 'Reset to Default';
$lang['qso_btn_clear_qso'] = '清除';
$lang['qso_btn_reset_to_default'] = '重置为默认';
$lang['qso_btn_save_qso'] = '保存 QSO';
$lang['qso_btn_edit_qso'] = '编辑 QSO';
$lang['qso_delete_warning'] = "警告!您确定要删除 QSO 和 ";
@@ -64,13 +65,13 @@ $lang['qso_simplefle_operator'] = "操作员";
$lang['qso_simplefle_operator_hint'] = "例如 BA1AA";
$lang['qso_simplefle_station_call_location'] = "位置";
$lang['qso_simplefle_station_call_location_hint'] = "如果您确实在新位置进行操作,请首先创建一个新的<a href=".site_url('station') .">电台站位置</a>";
$lang['qso_simplefle_utc_time'] = "当前UTC时间";
$lang['qso_simplefle_utc_time'] = "当前 UTC 时间";
$lang['qso_simplefle_enter_the_data'] = "输入信息";
$lang['qso_simplefle_syntax_help_close_w_sample'] = "关闭并加载示例数据";
$lang['qso_simplefle_reload'] = "重新加载QSO列表";
$lang['qso_simplefle_save'] = "保存QSO列表";
$lang['qso_simplefle_reload'] = "重新加载 QSO 列表";
$lang['qso_simplefle_save'] = "保存 QSO 列表";
$lang['qso_simplefle_clear'] = "清除记录会话";
$lang['qso_simplefle_refs_hint'] = "Refs 可以是 <u>S</u>OTA、<u>I</u>OTA、<u>P</u>OTA 或 <u>W</u>WFF";
$lang['qso_simplefle_refs_hint'] = "标识代码可以是 <u>S</u>OTA、<u>I</u>OTA、<u>P</u>OTA 或 <u>W</u>WFF";
$lang['qso_simplefle_error_band'] = "找不到波段!";
$lang['qso_simplefle_error_mode'] = "找不到模式!";
@@ -94,7 +95,9 @@ $lang['qso_simplefle_syntax_help_ln3'] = "例如,如果您在 20m 上与 DF3CB
$lang['qso_simplefle_syntax_help_ln4'] = "如果您不提供任何 RST 信息,语法将使用 59 (599 用于数据)。我们的下一个 QSO 不是双方都是 59所以我们首先提供发送的 RST 信息。它比第一个 QSO 晚了 2 分钟。";
$lang['qso_simplefle_syntax_help_ln5'] = "第一个 QSO 是在 21:34第二个 QSO 在 21:36比第一个 QSO 晚了 2 分钟。我们写下 6因为这是这里唯一改变的数据。关于波段和模式的信息没有改变因此省略了这些数据。";
$lang['qso_simplefle_syntax_help_ln6'] = "我们的下一个 QSO 是在 2021 年 5 月 14 日的 21:40我们将波段更改为 40m但仍然在 SSB 上。如果没有给出 RST 信息,语法将为每个新的 QSO 使用 59。因此我们可以添加另一个 QSO它在两天后的同一时间发生。日期必须是 YYYY-MM-DD 格式。";
$lang['qso_simplefle_syntax_help_ln7'] = "有关语法的更多信息,请查看 DF3CB 的网站<a href='https://df3cb.com/fle/documentation/' target='_blank'>此处</a>。";
$lang['qso_simplefle_syntax_help_ln7'] = "完整的可用指令和语法可在 Wavelog Wiki 中的 <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>这篇文章</a> 查看";
$lang['qso_simplefle_syntax_help_ln8'] = "";
$lang['qso_simplefle_syntax_help_ln9'] = "";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -10,7 +10,7 @@ ________________________________________________________________________________
$lang['station_logbooks'] = "台站日志";
$lang['station_logbooks_description_header'] = "什么是台站日志";
$lang['station_logbooks_description_text'] = "台站日志可以让您对自己的台站位置进行分组这对在同一DXCCVUCC下的不同站点位置非常方便";
$lang['station_logbooks_description_text'] = "台站日志可以让您对自己的台站位置进行分组,这对在同一 DXCCVUCC 下的不同站点位置非常方便";
$lang['station_logbooks_create'] = "新建台站日志";
$lang['station_logbooks_status'] = "状态";
$lang['station_logbooks_link'] = "链接";
@@ -27,12 +27,12 @@ $lang['station_logbooks_edit_name_update'] = "更新台站日志名称";
$lang['station_logbooks_public_slug'] = "自定义日志链接";
$lang['station_logbooks_public_slug_hint'] = "通过自定义日志链接,你可以通过此链接让别人访问你的日志";
$lang['station_logbooks_public_slug_format1'] = "他将会看起来像这样:";
$lang['station_logbooks_public_slug_format2'] = "[your slug]";
$lang['station_logbooks_public_slug_input'] = "Type in Public Slug choice";
$lang['station_logbooks_public_slug_visit'] = "Visit Public Page";
$lang['station_logbooks_public_search_hint'] = "Enabling public search function offers a search input box on the public logbook page accessed via public slug. Search only covers this logbook.";
$lang['station_logbooks_public_search_enabled'] = "Public search enabled";
$lang['station_logbooks_select_avail_loc'] = "Select Available Station Locations";
$lang['station_logbooks_public_slug_format2'] = "[个性地址]";
$lang['station_logbooks_public_slug_input'] = "输入个性地址";
$lang['station_logbooks_public_slug_visit'] = "访问公开页面";
$lang['station_logbooks_public_search_hint'] = "启用可为日志本提供公开搜索功能,范围仅限此日志本。";
$lang['station_logbooks_public_search_enabled'] = "已启用公开搜索";
$lang['station_logbooks_select_avail_loc'] = "选择可用台站位置";
$lang['station_logbooks_link_loc'] = "链接的台站位置";
$lang['station_logbooks_linked_loc'] = "已链接的台站位置";
$lang['station_logbooks_no_linked_loc'] = "未链接的台站位置";
@@ -46,75 +46,75 @@ Station Locations
___________________________________________________________________________________________
*/
$lang['station_location'] = 'Station Location';
$lang['station_location_plural'] = "Station Locations";
$lang['station_location_header_ln1'] = 'Station Locations define operating locations, such as your QTH, a friends QTH, or a portable station.';
$lang['station_location_header_ln2'] = 'Similar to logbooks, a station profile keeps a set of QSOs together.';
$lang['station_location_header_ln3'] = 'Only one station may be active at a time. In the table below this is shown with the -Active Station- badge.';
$lang['station_location_create_header'] = 'Create Station Location';
$lang['station_location_create'] = 'Create a Station Location';
$lang['station_location_edit'] = 'Edit Station Location: ';
$lang['station_location_updated_suff'] = ' Updated.';
$lang['station_location_warning'] = 'Attention: You need to set an active station location. Go to Callsign->Station Location to select one.';
$lang['station_location_reassign_at'] = 'Please reassign them at ';
$lang['station_location_warning_reassign'] = 'Due to recent changes within Wavelog you need to reassign QSOs to your station profiles.';
$lang['station_location'] = '台站地址';
$lang['station_location_plural'] = "台站地址";
$lang['station_location_header_ln1'] = '台站地址为电台使用地址,如您或朋友的 QTH或移动台的地址';
$lang['station_location_header_ln2'] = '和日志簿类似,一个台站地址为 QSO 集合的承载主体';
$lang['station_location_header_ln3'] = '同一时间只允许启用一个台站地址,详见如下表格中的 -启用- 标志';
$lang['station_location_create_header'] = '创建台站地址';
$lang['station_location_create'] = '创建一个台站地址';
$lang['station_location_edit'] = '修改台站地址:';
$lang['station_location_updated_suff'] = ' 已更新';
$lang['station_location_warning'] = '警告:应事先设置一个\'启用\'的台站地址,请在 \'呼号\'->\'台站地址\'中选择一个';
$lang['station_location_reassign_at'] = '重新分配 ';
$lang['station_location_warning_reassign'] = '由于 Wavelog 设置更改,您需要重新在电台设置中重新分配 QSO';
$lang['station_location_id'] = 'ID';
$lang['station_location_name'] = 'Profile Name';
$lang['station_location_name_hint'] = 'Shortname for the station location. For example: Home (HM54ip)';
$lang['station_location_callsign'] = 'Station Callsign';
$lang['station_location_callsign_hint'] = 'Station callsign. For example: 4W7EST/P';
$lang['station_location_power'] = 'Station Power (W)';
$lang['station_location_power_hint'] = 'Default station power in Watt. Overwritten by CAT.';
$lang['station_location_emptylog'] = 'Empty Log';
$lang['station_location_confirm_active'] = 'Are you sure you want to make the following station the active station: ';
$lang['station_location_set_active'] = 'Set Active';
$lang['station_location_active'] = 'Active Station';
$lang['station_location_claim_ownership'] = 'Claim Ownership';
$lang['station_location_confirm_del_qso'] = 'Are you sure you want to delete all QSOs within this station profile?';
$lang['station_location_confirm_del_stationlocation'] = 'Are you sure you want delete station profile ';
$lang['station_location_confirm_del_stationlocation_qso'] = 'This will delete all QSOs within this station profile?';
$lang['station_location_dxcc'] = 'Station DXCC';
$lang['station_location_dxcc_hint'] = 'Station DXCC entity. For example: Scotland';
$lang['station_location_dxcc_warning'] = "Stop here for a Moment. Your chosen DXCC is outdated and not valid anymore. Check which DXCC for this particular location is the correct one. If you are sure, ignore this warning.";
$lang['station_location_city'] = 'Station City';
$lang['station_location_city_hint'] = 'Station city. For example: Inverness';
$lang['station_location_state'] = 'Station State';
$lang['station_location_state_hint'] = 'Station state. Applies to certain countries only. Leave blank if not applicable.';
$lang['station_location_county'] = 'Station County';
$lang['station_location_county_hint'] = 'Station County (Only used for USA/Alaska/Hawaii).';
$lang['station_location_gridsquare'] = 'Station Gridsquare';
$lang['station_location_gridsquare_hint_ln1'] = "Station gridsquare. For example: HM54ip. If you don't know your grid square then <a href='https://zone-check.eu/?m=loc' target='_blank'>click here</a>!";
$lang['station_location_gridsquare_hint_ln2'] = "If you are located on a grid line, enter multiple grid squares separated with commas. For example: IO77,IO78,IO87,IO88.";
$lang['station_location_iota_hint_ln1'] = "Station IOTA reference. For example: EU-005";
$lang['station_location_iota_hint_ln2'] = "You can look up IOTA references at the <a target='_blank' href='https://www.iota-world.org/iota-directory/annex-f-short-title-iota-reference-number-list.html'>IOTA World</a> website.";
$lang['station_location_sota_hint_ln1'] = "Station SOTA reference. You can look up SOTA references at the <a target='_blank' href='https://www.sotamaps.org/'>SOTA Maps</a> website.";
$lang['station_location_wwff_hint_ln1'] = "Station WWFF reference. You can look up WWFF references at the <a target='_blank' href='https://www.cqgma.org/mvs/'>GMA Map</a> website.";
$lang['station_location_pota_hint_ln1'] = "Station POTA reference(s). Mulitple comma separated values allowed. You can look up POTA references at the <a target='_blank' href='https://pota.app/#/map/'>POTA Map</a> website.";
$lang['station_location_signature'] = "Signature";
$lang['station_location_signature_name'] = "Signature Name";
$lang['station_location_signature_name_hint'] = "Station Signature (e.g. GMA)..";
$lang['station_location_signature_info'] = "Signature Information";
$lang['station_location_signature_info_hint'] = "Station Signature Info (e.g. DA/NW-357).";
$lang['station_location_eqsl_hint'] = 'The QTH Nickname which is configured in your eQSL Profile';
$lang['station_location_eqsl_defaultqslmsg'] = "Default QSLMSG";
$lang['station_location_eqsl_defaultqslmsg_hint'] = "Define a default message that will be populated and sent for each QSO for this station location.";
$lang['station_location_qrz_subscription'] = 'Subscription Required';
$lang['station_location_qrz_hint'] = "Find your API key on <a href='https://logbook.qrz.com/logbook' target='_blank'>the QRZ.com Logbook settings page";
$lang['station_location_qrz_realtime_upload'] = 'QRZ.com Logbook Upload';
$lang['station_location_hrdlog_username'] = "HRDLog.net Username";
$lang['station_location_hrdlog_username_hint'] = "The username you are registered with at HRDlog.net (usually your callsign).";
$lang['station_location_name'] = '名称';
$lang['station_location_name_hint'] = '自定义电台名称例如:家 (HM54ip)';
$lang['station_location_callsign'] = '电台呼号';
$lang['station_location_callsign_hint'] = '电台呼号,例如:4W7EST/P';
$lang['station_location_power'] = '电台功率 (W)';
$lang['station_location_power_hint'] = '默认电台功率 (W),如有 CAT 信息会覆盖此设置';
$lang['station_location_emptylog'] = '日志为空';
$lang['station_location_confirm_active'] = '确认将如下台站设为启用状态:';
$lang['station_location_set_active'] = '设置启用';
$lang['station_location_active'] = '启用的台站';
$lang['station_location_claim_ownership'] = '宣称所有权';
$lang['station_location_confirm_del_qso'] = '确认删除台站下的所有 QSO';
$lang['station_location_confirm_del_stationlocation'] = '确认删除该台站 ';
$lang['station_location_confirm_del_stationlocation_qso'] = '此操作会删除所有该台站的 QSO';
$lang['station_location_dxcc'] = '台站 DXCC';
$lang['station_location_dxcc_hint'] = '台站的 DXCC 实体,例如 China';
$lang['station_location_dxcc_warning'] = "请稍等,您选择的 DXCC 已经失效,请确认最新的 DXCC 实体,如果您十分确认,请忽略该警告。";
$lang['station_location_city'] = '台站城市';
$lang['station_location_city_hint'] = '台站城市,例如 Beijing';
$lang['station_location_state'] = '台站州/省';
$lang['station_location_state_hint'] = '台站的州或省,如国家不适用请留空';
$lang['station_location_county'] = '台站县';
$lang['station_location_county_hint'] = '台站的县 (仅用于 美国本土/阿拉斯加/夏威夷)';
$lang['station_location_gridsquare'] = '台站网格地址';
$lang['station_location_gridsquare_hint_ln1'] = "台站网格地址,例如 HM54ip可在 <a href='https://zone-check.eu/?m=loc' target='_blank'>这里</a> 查询自己的网格";
$lang['station_location_gridsquare_hint_ln2'] = "如果处在网格线上,请输入逗号分隔的多个网格,例如:IO77,IO78,IO87,IO88";
$lang['station_location_iota_hint_ln1'] = "台站 IOTA 标识代码,例如 EU-005";
$lang['station_location_iota_hint_ln2'] = "查看 IOTA 名录:<a target='_blank' href='https://www.iota-world.org/iota-directory/annex-f-short-title-iota-reference-number-list.html'>IOTA World</a>";
$lang['station_location_sota_hint_ln1'] = "台站 SOTA 标识代码,查看全部 SOTA<a target='_blank' href='https://www.sotamaps.org/'>SOTA Maps</a>";
$lang['station_location_wwff_hint_ln1'] = "台站 WWFF 标识代码,查看 <a target='_blank' href='https://www.cqgma.org/mvs/'>GMA Map</a>";
$lang['station_location_pota_hint_ln1'] = "台站 POTA 标识代码允许多个逗号分隔值POTA 地图:<a target='_blank' href='https://pota.app/#/map/'>POTA Map</a>";
$lang['station_location_signature'] = "签名";
$lang['station_location_signature_name'] = "签名名称";
$lang['station_location_signature_name_hint'] = "台站签名 (例如 TU 73)";
$lang['station_location_signature_info'] = "签名信息";
$lang['station_location_signature_info_hint'] = "签名信息 (例如 DA/NW-357).";
$lang['station_location_eqsl_hint'] = 'eQSL 中设置过的 QTH Nichname';
$lang['station_location_eqsl_defaultqslmsg'] = "默认 QSL 消息";
$lang['station_location_eqsl_defaultqslmsg_hint'] = "定义一个发送给对方的 QSO 默认消息(适用于 eQSL 等)";
$lang['station_location_qrz_subscription'] = '需要付费订阅';
$lang['station_location_qrz_hint'] = "查看 API Key<a href='https://logbook.qrz.com/logbook' target='_blank'>the QRZ.com Logbook 设置页面";
$lang['station_location_qrz_realtime_upload'] = 'QRZ.com Logbook 上传';
$lang['station_location_hrdlog_username'] = "HRDLog.net 用户名";
$lang['station_location_hrdlog_username_hint'] = "HRDlog.net 注册用户名,通常为呼号";
$lang['station_location_hrdlog_code'] = "HRDLog.net API Key";
$lang['station_location_hrdlog_realtime_upload'] = "HRDLog.net Logbook Realtime Upload";
$lang['station_location_hrdlog_code_hint'] = "Create your API Code on <a href='http://www.hrdlog.net/EditUser.aspx' target='_blank'>HRDLog.net Userprofile page";
$lang['station_location_qo100_hint'] = "Create your API key on <a href='https://qo100dx.club' target='_blank'>your QO-100 Dx Club's profile page";
$lang['station_location_qo100_realtime_upload'] = "QO-100 Dx Club Realtime Upload";
$lang['station_location_oqrs_enabled'] = "OQRS Enabled";
$lang['station_location_oqrs_email_alert'] = "OQRS Email alert";
$lang['station_location_oqrs_email_hint'] = "Make sure email is set up under admin and global options.";
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';
$lang['station_location_hrdlog_realtime_upload'] = "HRDLog.net Logbook 实时上传";
$lang['station_location_hrdlog_code_hint'] = "创建 API 代码:<a href='http://www.hrdlog.net/EditUser.aspx' target='_blank'>HRDLog.net 用户界面";
$lang['station_location_qo100_hint'] = "创建 API 代码:<a href='https://qo100dx.club' target='_blank'>your QO-100 Dx Club 用户界面";
$lang['station_location_qo100_realtime_upload'] = "QO-100 Dx Club 实时上传";
$lang['station_location_oqrs_enabled'] = "OQRS 已启用";
$lang['station_location_oqrs_email_alert'] = "OQRS 邮件提醒";
$lang['station_location_oqrs_email_hint'] = "确认邮件功能在站点设置中已配置";
$lang['station_location_oqrs_text'] = "OQRS 文本";
$lang['station_location_oqrs_text_hint'] = "QSL 信息";
$lang['station_location_ignore'] = "忽略 Clublog 上传";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog 实时上传';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Možnosti Wavelogu jsou globální nastavení použ
$lang['options_appearance'] = 'Vzhled';
$lang['options_theme'] = 'Téma';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Globální volba motivu, která se používá, když uživatelé nejsou přihlášeni.';
$lang['options_public_search_bar'] = 'Veřejná vyhledávací lišta';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Tímto se umožní ne přihlášeným uživatelům přístup ke vyhledávacím funkcím.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Mapa na palubní desce';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'Toto umožňuje zakázat mapu na palubní desce nebo ji umístit na pravou stranu.';
$lang['options_logbook_map'] = 'Mapa v logbooku';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'Toto umožňuje zakázat mapu v logbooku.';
$lang['options_theme_changed_to'] = 'Téma změněno na ';
$lang['options_global_search_changed_to'] = 'Globální vyhledávání změněno na ';
$lang['options_dashboard_banner_changed_to'] = 'Banner na palubní desce změněn na ';
$lang['options_dashboard_map_changed_to'] = 'Mapa na palubní desce změněna na ';
$lang['options_logbook_map_changed_to'] = 'Mapa v logbooku změněna na ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Rádia';
$lang['options_radio_settings'] = 'Nastavení rádia';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Mapa spojení';
$lang['qso_title_suggestions'] = 'Návrhy';
$lang['qso_title_previous_contacts'] = 'Předchozí spojení';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profile Picture';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO Kaart';
$lang['qso_title_suggestions'] = 'Suggesties';
$lang['qso_title_previous_contacts'] = 'Eerdere verbindingen';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profile Picture';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO Map';
$lang['qso_title_suggestions'] = 'Suggestions';
$lang['qso_title_previous_contacts'] = 'Previous Contacts';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profile Picture';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,5 +114,5 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Ulkoasu';
$lang['options_theme'] = 'Teema';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Yleisen teeman valinta, joka vaikuttaa sivuston vierailijoihin. ';
$lang['options_public_search_bar'] = 'Julkinen hakukenttä';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Tämä mahdollistaa vieraiden suorittaa hakuja kirjautumatta.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Vaihdettu teema on ';
$lang['options_global_search_changed_to'] = 'Julkinen haku on vaihdettu: ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radiot';
$lang['options_radio_settings'] = 'Radion asetukset';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Vasta-aseman sijainti kartalla';
$lang['qso_title_suggestions'] = 'Kutsumerkkiehdotukset';
$lang['qso_title_previous_contacts'] = 'Edelliset yhteydet';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profiilikuva';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Carte QSO';
$lang['qso_title_suggestions'] = 'Suggestions';
$lang['qso_title_previous_contacts'] = 'Contacts précédents';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profile Picture';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Optionen sind globe Einstellungen, die für
$lang['options_appearance'] = 'Erscheinungsbild';
$lang['options_theme'] = 'Thema';
$lang['options_saved'] = "Optionen gespeichert";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Globales Thema. Dies wird verwendet, wenn keine Benutzer angemeldet sind.';
$lang['options_public_search_bar'] = 'Öffentliches Suchfeld';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Dies erlaubt nicht angemeldeten Benutzern, die Suchfunktion zu nutzen.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Karte';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'Dies erlaubt es, die Karte auf dem Dashboard rechts anzuzeigen oder zu deaktivieren.';
$lang['options_logbook_map'] = 'Logbook Karte';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'Dies erlaubt, die Karte im Logbuch zu deaktivieren.';
$lang['options_theme_changed_to'] = 'Thema geändert zu ';
$lang['options_global_search_changed_to'] = 'Globale Suche geändert zu ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard Benachrichtigungsbanner geändert zu ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard Karte geändert zu ';
$lang['options_logbook_map_changed_to'] = 'Logbook Karte geändert zu ';
$lang['options_public_maps'] = "Öffentliche Karten";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "Dies erlaubt die Karten auf der öffentlichen Seite zu deaktivieren. Dies betrifft die Haupt-Karte, als auch die Planquadrat-Karte.";
$lang['options_radios'] = 'Funkgeräte';
$lang['options_radio_settings'] = 'Funkgeräteeinstellungen';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO-Karte';
$lang['qso_title_suggestions'] = 'Vorschläge';
$lang['qso_title_previous_contacts'] = 'Vorherige Kontakte';
$lang['qso_title_times_worked_before'] = "mal vorher gearbeitet";
$lang['qso_title_not_worked_before'] = "Noch nicht gearbeitet";
$lang['qso_title_image'] = 'Profilbild';
$lang['qso_previous_max_shown'] = "Es werden maximal 5 Kontakte angezeigt.";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "Zum Beispiel ein QSO um 21:34 Uhr (UTC
$lang['qso_simplefle_syntax_help_ln6'] = "Wenn du keine RST-Informationen angibst, verwendet die Syntax 59 (599 für Daten). Unser nächstes QSO war nicht auf beiden Seiten 59, also geben wir die Informationen zuerst mit gesendeter RST an. Es war 2 Minuten später als das erste QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "Das erste QSO war um 21:34 Uhr, und das zweite 2 Minuten später um 21:36 Uhr. Wir schreiben '6' für die geänderte Minute, da dies die einzige geänderte Information ist. Die Eingaben zum Band und Mode haben sich nicht geändert, daher entfallen diese Daten hier.";
$lang['qso_simplefle_syntax_help_ln8'] = "Für unser nächstes QSO um 21:40 Uhr am 14.05.2021 haben wir das Band auf 40m geändert, sind aber immer noch auf SSB. Wenn keine RST-Informationen angegeben sind, verwendet die Syntax bei jedem neuen QSO 59. Daher können wir ein weiteres QSO hinzufügen welches um die exakt selbe Zeit zwei Tage später stattfand. Das Datum muss im Format YYYY-MM-DD eingegeben werden.";
$lang['qso_simplefle_syntax_help_ln9'] = "Für weitere Informationen zur Syntax siehe die Website von DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>hier.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "Eine vollständige Übersicht aller Befehle und der notwendigen Syntax findest du in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>diesem Artikel</a> in unserem Wiki.";
$lang['qso_simplefle_options'] = 'Optionen';

View File

@@ -114,5 +114,5 @@ $lang['station_location_oqrs_email_hint'] = "Stelle sicher, dass du E-Mail unter
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Einige Informationen, die du zum QSL-Vorgang hinzufügen möchtest.";
$lang['station_location_ignore'] = "Ignoriere Clublog-Upload";
$lang['station_location_ignore_hint'] = "Wenn aktiviert, werden die QSOs, die von diesem Standort gemacht wurden, beim Clublog-Upload ignoriert.";
$lang['station_location_ignore_hint'] = "Wenn aktiviert, werden die QSOs, die von diesem Standort gemacht wurden, beim Clublog-Upload ignoriert.<br/> Sofern das Feld \"von allein\" auf deaktiviert springt, bitte bei Clublog die Einstellungen für diesen Call überprüfen.";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Χάρτης QSO';
$lang['qso_title_suggestions'] = 'Εισήγησης';
$lang['qso_title_previous_contacts'] = 'Προηγούμενες Επαφές';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Εικόνα προφίλ';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Mappa QSO';
$lang['qso_title_suggestions'] = 'Suggerimenti';
$lang['qso_title_previous_contacts'] = 'Contatti Precedenti';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Immagine Profilo';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Mapa łączności';
$lang['qso_title_suggestions'] = 'Sugestie';
$lang['qso_title_previous_contacts'] = 'Poprzednie łączności';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profile Picture';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Это глобальные настройки, и
$lang['options_appearance'] = 'Внешний вид';
$lang['options_theme'] = 'Тема оформления';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Тема оформления по умолчанию, используется, когда пользователи не вошли в систему.';
$lang['options_public_search_bar'] = 'Публично доступный поиск по журналу';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Разрешение пользователям, не вошедшим в систему, получить доступ к функциям поиска.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Карта на экране сводных д
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'Включение отображения карты на экране сводных данных во всю ширину или справа';
$lang['options_logbook_map'] = 'Карта на экране обычного вида журнала ';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'Включение отображения карты на экране обычного вида журнала.';
$lang['options_theme_changed_to'] = 'Тема оформления переключена на ';
$lang['options_global_search_changed_to'] = 'Публично доступный поиск переключен в состояние ';
$lang['options_dashboard_banner_changed_to'] = 'Баннер на экране сводных данных переключен в состояние ';
$lang['options_dashboard_map_changed_to'] = 'Карта на экране сводных данных переключена в состояние ';
$lang['options_logbook_map_changed_to'] = 'Карта на экране обычного вида журнала переключена в состояние ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Радиоинтерфейсы';
$lang['options_radio_settings'] = 'Радиоинтерфейсы';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Карта QSO';
$lang['qso_title_suggestions'] = 'Предложения';
$lang['qso_title_previous_contacts'] = 'Предыдущие контакты';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profile Picture';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "Например, QSO, начавше
$lang['qso_simplefle_syntax_help_ln6'] = "Если вы не предоставите никакой RST-информации, синтаксис будет использовать 59 (599 для данных). В нашем следующем QSO не было 59 с обеих сторон, поэтому мы предоставляем информацию с отправленным RST первыми. Это произошло на 2 минуты позже, чем первое QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "Первое QSO состоялось в 21:34, а второе - на 2 минуты позже, в 21:36. Мы записываем 6, потому что это единственные данные, которые здесь изменились. Информация о диапазоне и режиме не изменилась, поэтому эти данные опущены.";
$lang['qso_simplefle_syntax_help_ln8'] = "Для следующего QSO в 21:40 14 мая 2021 года мы сменили диапазон на 40 м, но по-прежнему на SSB. Если информация о RST не указана, то синтаксис будет использовать 59 для каждого нового QSO. Поэтому мы можем добавить еще одно QSO, состоявшееся точно в это же время двумя днями позже. Дата должна быть в формате YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "Более подробную информацию о синтаксисе можно найти на сайте DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>здесь.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,5 +114,5 @@ $lang['station_location_oqrs_email_hint'] = "Убедитесь, что емэй
$lang['station_location_oqrs_text'] = "Текст OQRS";
$lang['station_location_oqrs_text_hint'] = "Информация, которую вы хотите добавить, касающаяся QSL.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Las Opciones de Wavelog son configuraciones globale
$lang['options_appearance'] = 'Apariencia';
$lang['options_theme'] = 'Tema';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Elección global de Tema, se utiliza cuando ningún usuario ha iniciado sesión.';
$lang['options_public_search_bar'] = 'Barra de Búsqueda Pública';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Esto le permite acceder a las funciones de búsqueda a usuarios que no han iniciado sesión.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Mapa en la Vista General';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'Esto permite que el mapa de la vsita general no aparezca o se muestre a la derecha.';
$lang['options_logbook_map'] = 'Mapa en Libro de Guardia';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'Esto pemrite deshabilitar el mapa en el libro de guardia.';
$lang['options_theme_changed_to'] = 'Tema cambiado a ';
$lang['options_global_search_changed_to'] = 'Búsqueda Global cambiado a ';
$lang['options_dashboard_banner_changed_to'] = 'Marquesina en la Vista General cambiada a ';
$lang['options_dashboard_map_changed_to'] = 'Mapa en la Vista General cambiado a ';
$lang['options_logbook_map_changed_to'] = 'Mapa en Libro de Guardia cambiado a ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Configuración de Radio';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'Mapa de QSO';
$lang['qso_title_suggestions'] = 'Sugerencias';
$lang['qso_title_previous_contacts'] = 'Contactos previos';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Imagen de Perfil';
$lang['qso_previous_max_shown'] = "Se muestra máx. de 5 contactos previos";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "Por ejemplo, un QSO que ha iniciado a
$lang['qso_simplefle_syntax_help_ln6'] = "Si no introduce ninguna información RST, la sintaxis usará 59 (o 599 para datos). Nuestro siguiente QSO no era 59 en ambos lados, así que proveemos la información con el RST enviado primero. Fue 2 minutos después del primer QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "El primer QSL fue a las 21:34, y el segundo 2 minutos después a las 21:36. Escribimos 6 porque fue el único dato que cambió. La información de banda y modo no cambió, así que estos datos se omiten.";
$lang['qso_simplefle_syntax_help_ln8'] = "Para nuestro siguiente QSO a las 21:40 el 14 de mayo de 2021, cambiamos la banda a 40m pero seguimos en SSB. Si no se ingresa datos de RST, la sintaxis usará 59 para cada nuevo QSO. Por lo tanto podemos añadir un nuevo QSO que ocurrió a la misma hora dos días después. La fecha debe estar en el formato YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "Para mayor información acerca de la sintaxis, por favor consulte el sitio de DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>aquí.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Asegúrese que su correo está bien
$lang['station_location_oqrs_text'] = "Texto OQRS";
$lang['station_location_oqrs_text_hint'] = "Algúna información que desee agregar acerca de su forma de hacer QSL.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='Subida en Tiempo Real en ClubLog';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog-alternativ är globala inställningar som a
$lang['options_appearance'] = 'Utseende';
$lang['options_theme'] = 'Tema';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Globalt temaval, detta används när användare inte är inloggade.';
$lang['options_public_search_bar'] = 'Offentlig sökfält';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Detta tillåter icke-inloggade användare att komma åt sökfunktionerna.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard karta';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Loggbok Karta';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'Detta gör det möjligt att inaktivera kartan i loggboken.';
$lang['options_theme_changed_to'] = 'Temat ändrades till ';
$lang['options_global_search_changed_to'] = 'Global sökning ändrad till ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner ändrad till ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard karta ändrad till ';
$lang['options_logbook_map_changed_to'] = 'Loggbokskarta ändrad till ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radioinställningar';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO-karta';
$lang['qso_title_suggestions'] = 'Förslag';
$lang['qso_title_previous_contacts'] = 'Föregående QSOn';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profilbild';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -7,6 +7,7 @@ $lang['options_message1'] = 'Wavelog Options are global settings used for all us
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_saved'] = "Options saved";
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
@@ -16,11 +17,8 @@ $lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_public_maps'] = "Public Maps";
$lang['options_this_allows_to_disable_all_maps_in_the_public_view'] = "This allows to disable all maps in the public view. This affects the main map and the gridsquares map.";
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';

View File

@@ -7,6 +7,7 @@ $lang['qso_title_qso_map'] = 'QSO Haritası';
$lang['qso_title_suggestions'] = 'Öneriler';
$lang['qso_title_previous_contacts'] = 'Önceki Görüşmeler';
$lang['qso_title_times_worked_before'] = "times worked before";
$lang['qso_title_not_worked_before'] = "Not worked before";
$lang['qso_title_image'] = 'Profil Resmi';
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
@@ -96,5 +97,7 @@ $lang['qso_simplefle_syntax_help_ln5'] = "For example, a QSO that started at 21:
$lang['qso_simplefle_syntax_help_ln6'] = "If you don't provide any RST information, the syntax will use 59 (599 for data). Our next QSO wasn't 59 on both sides, so we provide the information with the sent RST first. It was 2 minutes later than the first QSO.";
$lang['qso_simplefle_syntax_help_ln7'] = "The first QSO was at 21:34, and the second one 2 minutes later at 21:36. We write down 6 because this is the only data that changed here. The information about band and mode didn't change, so this data is omitted.";
$lang['qso_simplefle_syntax_help_ln8'] = "For our next QSO at 21:40 on 14th May, 2021, we changed the band to 40m but still on SSB. If no RST information is given, the syntax will use 59 for every new QSO. Therefore we can add another QSO which took place at the exact same time two days later. The date must be in format YYYY-MM-DD.";
$lang['qso_simplefle_syntax_help_ln9'] = "For further information about the syntax, please check the website of DF3CB <a href='https://df3cb.com/fle/documentation/' target='_blank'>here.</a>";
$lang['qso_simplefle_syntax_help_ln9'] = "A full summary of all commands and the necessary syntax can be found in <a href='https://github.com/wavelog/wavelog/wiki/SimpleFLE' target='_blank'>this article</a> of our Wiki.";
$lang['qso_simplefle_options'] = 'Options';

View File

@@ -114,7 +114,7 @@ $lang['station_location_oqrs_email_hint'] = "Make sure email is set up under adm
$lang['station_location_oqrs_text'] = "OQRS Text";
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
$lang['station_location_ignore'] = "Ignore Clublog Upload";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog.";
$lang['station_location_ignore_hint'] = "If enabled, the QSOs made from this location will not be uploaded to Clublog. If this is deactivated on it's own please check if the Call is properly configured at Clublog";
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';

View File

@@ -138,4 +138,65 @@ class OptionsLib {
}
}
function get_map_custom($visitor = false, $slug = null) {
$CI =& get_instance();
$jsonout = [];
if ($visitor == false) {
$result = $CI->user_options_model->get_options('map_custom');
foreach($result->result() as $options) {
if ($options->option_name == 'icon') {
$jsonout[$options->option_key] = json_decode($options->option_value,true);
} else {
$jsonout[$options->option_name.'_'.$options->option_key]=$options->option_value;
}
}
} else {
$CI->load->model('stationsetup_model');
$slug = $CI->security->xss_clean($slug);
$userid = $CI->stationsetup_model->public_slug_exists_userid($slug);
$result = $CI->user_options_model->get_options('map_custom', null, $userid);
foreach($result->result() as $options) {
if ($options->option_name=='icon') {
$jsonout[$options->option_key] = json_decode($options->option_value,true);
} else {
$jsonout[$options->option_name.'_'.$options->option_key] = $options->option_value;
}
}
if (count($jsonout) == 0) {
$jsonout['qso'] = array(
"icon" => "fas fa-dot-circle",
"color" => "#ff0000"
);
$jsonout['qsoconfirm'] = array(
"icon" => "fas fa-dot-circle",
"color" => "#00aa00"
);
$jsonout['station'] = array(
"icon" => "fas fa-broadcast-tower",
"color" => "#0000ff"
);
}
$jsonout['gridsquare_layer'] = $CI->user_options_model->get_options('ExportMapOptions',array('option_name'=>'gridsquare_layer','option_key'=>$slug), $userid)->row()->option_value ?? true;
$jsonout['path_lines'] = $CI->user_options_model->get_options('ExportMapOptions',array('option_name'=>'path_lines','option_key'=>$slug), $userid)->row()->option_value ?? true;
$jsonout['cqzone_layer'] = $CI->user_options_model->get_options('ExportMapOptions',array('option_name'=>'cqzone_layer','option_key'=>$slug), $userid)->row()->option_value ?? true;
$jsonout['qsocount'] = $CI->user_options_model->get_options('ExportMapOptions',array('option_name'=>'qsocount','option_key'=>$slug), $userid)->row()->option_value ?? 250;
$jsonout['nightshadow_layer'] = $CI->user_options_model->get_options('ExportMapOptions',array('option_name'=>'nightshadow_layer','option_key'=>$slug), $userid)->row()->option_value ?? true;
$jsonout['band'] = $CI->user_options_model->get_options('ExportMapOptions',array('option_name'=>'band','option_key'=>$slug), $userid)->row()->option_value ?? '';
}
return json_encode($jsonout);
}
}

View File

@@ -0,0 +1,33 @@
<?php
defined('BASEPATH') or exit('No direct script access allowed');
// Add index for table to speedup LBA
class Migration_contest_idx extends CI_Migration {
public function up() {
$this->add_ix('contest','idx_contest_adifname','`adifname`');
}
public function down() {
$this->rm_ix('contest','idx_contest_adifname');
}
private function add_ix($table_name,$index,$cols) {
$ix_exist = $this->db->query("SHOW INDEX FROM ".$table_name." WHERE Key_name = '".$index."'")->num_rows();
if ($ix_exist == 0) {
$sql = "ALTER TABLE ".$table_name." ADD INDEX `".$index."` (".$cols.");";
$this->db->query($sql);
}
}
private function rm_ix($table_name,$index) {
$ix_exist = $this->db->query("SHOW INDEX FROM ".$table_name." WHERE Key_name = '".$index."'")->num_rows();
if ($ix_exist >= 1) {
$sql = "ALTER TABLE ".$table_name." DROP INDEX `".$index."`;";
$this->db->query($sql);
}
}
}

View File

@@ -0,0 +1,36 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
Tag Wavelog as Version 1.6.1
*/
class Migration_tag_1_6_1 extends CI_Migration {
public function up()
{
// Tag Wavelog New Version
$this->db->where('option_name', 'version');
$this->db->update('options', array('option_value' => '1.6.1'));
// Trigger Version Info Dialog
$this->db->where('option_type', 'version_dialog');
$this->db->where('option_name', 'confirmed');
$this->db->update('user_options', array('option_value' => 'false'));
// Also set Version Dialog to "both" if only custom text is applied
$this->db->where('option_name', 'version_dialog');
$this->db->where('option_value', 'custom_text');
$this->db->update('options', array('option_value' => 'both'));
}
public function down()
{
$this->db->where('option_name', 'version');
$this->db->update('options', array('option_value' => '1.6'));
}
}

View File

@@ -3,115 +3,121 @@ if (!defined('BASEPATH')) exit('No direct script access allowed');
class Activators_model extends CI_Model
{
function get_activators($band, $mincount, $leogeo) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
function get_activators($band, $mincount, $leogeo)
{
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if ($mincount == '' || $mincount == 0 || ! is_numeric($mincount)) {
if ($mincount == '' || $mincount == 0 || !is_numeric($mincount)) {
$mincount = 2;
}
if (!$logbooks_locations_array) {
return null;
}
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'" . implode("','", $logbooks_locations_array) . "'";
$sql = "select COL_CALL as `call`, COUNT(DISTINCT(SUBSTR(COL_GRIDSQUARE,1,4))) AS `count`, GROUP_CONCAT(DISTINCT SUBSTR(`COL_GRIDSQUARE`,1,4) ORDER BY `COL_GRIDSQUARE` SEPARATOR ', ') AS `grids` from ".$this->config->item('table_name')." WHERE station_id in (" . $location_list . ")";
if ($band != 'All') {
if ($band == 'SAT') {
switch ($leogeo) {
case 'both' :
$sql = "SELECT COL_CALL as `call`,
COUNT(DISTINCT(SUBSTR(COL_GRIDSQUARE,1,4))) AS `count`,
GROUP_CONCAT(DISTINCT SUBSTR(`COL_GRIDSQUARE`,1,4) ORDER BY `COL_GRIDSQUARE` SEPARATOR ', ') AS `grids`
FROM " . $this->config->item('table_name') . " WHERE station_id in (" . $location_list . ")";
if ($band != 'All') {
if ($band == 'SAT') {
switch ($leogeo) {
case 'both':
$sql .= " and col_prop_mode ='" . $band . "'";
break;
case 'leo' :
case 'leo':
$sql .= " and col_prop_mode = '" . $band . "'";
$sql .= " and col_sat_name != 'QO-100'";
break;
case 'geo' :
case 'geo':
$sql .= " and col_prop_mode = '" . $band . "'";
$sql .= " and col_sat_name = 'QO-100'";
break;
default :
default:
$sql .= " and col_prop_mode ='" . $band . "'";
break;
}
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and COL_BAND ='" . $band . "'";
}
}
$sql .= " AND `COL_GRIDSQUARE` != '' GROUP BY `COL_CALL` HAVING `count` >= ".$mincount." ORDER BY `count` DESC;";
} else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and COL_BAND ='" . $band . "'";
}
}
$sql .= " AND `COL_GRIDSQUARE` != '' GROUP BY `COL_CALL` HAVING `count` >= " . $mincount . " ORDER BY `count` DESC;";
$query = $this->db->query($sql);
$query = $this->db->query($sql);
return $query->result();
}
return $query->result();
}
function get_activators_vucc($band, $leogeo) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
function get_activators_vucc($band, $leogeo)
{
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'" . implode("','", $logbooks_locations_array) . "'";
$sql = "SELECT DISTINCT COL_CALL AS `call`, GROUP_CONCAT(COL_VUCC_GRIDS) AS `vucc_grids` FROM ".$this->config->item('table_name')." WHERE station_id in (" . $location_list . ")";
if ($band != 'All') {
if ($band == 'SAT') {
switch ($leogeo) {
case 'both' :
$sql = "SELECT DISTINCT COL_CALL AS `call`,
GROUP_CONCAT(COL_VUCC_GRIDS) AS `vucc_grids` FROM " . $this->config->item('table_name') .
" WHERE station_id in (" . $location_list . ")";
if ($band != 'All') {
if ($band == 'SAT') {
switch ($leogeo) {
case 'both':
$sql .= " and col_prop_mode ='" . $band . "'";
break;
case 'leo' :
case 'leo':
$sql .= " and col_prop_mode = '" . $band . "'";
$sql .= " and col_sat_name != 'QO-100'";
break;
case 'geo' :
case 'geo':
$sql .= " and col_prop_mode = '" . $band . "'";
$sql .= " and col_sat_name = 'QO-100'";
break;
default :
default:
$sql .= " and col_prop_mode ='" . $band . "'";
break;
}
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and COL_BAND ='" . $band . "'";
}
}
} else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and COL_BAND ='" . $band . "'";
}
}
$sql .= " AND COL_VUCC_GRIDS != '' GROUP BY COL_CALL;";
$query = $this->db->query($sql);
$query = $this->db->query($sql);
return $query->result();
}
function get_max_activated_grids() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
return $query->result();
}
function get_max_activated_grids()
{
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return array();
}
if (!$logbooks_locations_array) {
return array();
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'" . implode("','", $logbooks_locations_array) . "'";
// Get max no of activated grids of single operator
$data = $this->db->query(
"select COUNT(DISTINCT(SUBSTR(COL_GRIDSQUARE,1,4))) AS `count` from " . $this->config->item('table_name') . " WHERE station_id in (" . $location_list . ") AND `COL_GRIDSQUARE` != '' GROUP BY `COL_CALL` ORDER BY `count` DESC LIMIT 1"
);
foreach($data->result() as $row){
$max = $row->count;
}
return ($max ?? 0);
}
// Get max no of activated grids of single operator
$data = $this->db->query(
"SELECT COUNT(DISTINCT(SUBSTR(COL_GRIDSQUARE,1,4))) AS `count` from " . $this->config->item('table_name') .
" WHERE station_id in (" . $location_list . ") AND
`COL_GRIDSQUARE` != '' GROUP BY `COL_CALL` ORDER BY `count` DESC LIMIT 1"
);
foreach ($data->result() as $row) {
$max = $row->count;
}
return ($max ?? 0);
}
}

View File

@@ -2,6 +2,14 @@
class Bands extends CI_Model {
private $logbooks_locations_array;
public function __construct()
{
$this->load->model('logbooks_model');
$this->logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
}
public $bandslots = array(
"160m"=>0,
"80m"=>0,
@@ -96,16 +104,11 @@ class Bands extends CI_Model {
}
function get_worked_bands($award = 'None') {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
if (!$this->logbooks_locations_array) {
return array();
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'".implode("','",$this->logbooks_locations_array)."'";
// get all worked slots from database
$data = $this->db->query(
@@ -138,14 +141,10 @@ class Bands extends CI_Model {
}
function get_worked_bands_distances() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
if (!$this->logbooks_locations_array) {
return array();
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'".implode("','",$this->logbooks_locations_array)."'";
// get all worked slots from database
$sql = "SELECT distinct LOWER(COL_BAND) as COL_BAND FROM ".$this->config->item('table_name')." WHERE station_id in (" . $location_list . ")";
@@ -169,15 +168,11 @@ class Bands extends CI_Model {
}
function get_worked_sats() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
if (!$this->logbooks_locations_array) {
return array();
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'".implode("','",$this->logbooks_locations_array)."'";
// get all worked sats from database
$sql = "SELECT distinct col_sat_name FROM ".$this->config->item('table_name')." WHERE station_id in (" . $location_list . ") and coalesce(col_sat_name, '') <> '' ORDER BY col_sat_name";
@@ -193,15 +188,11 @@ class Bands extends CI_Model {
}
function get_worked_orbits() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
if (!$this->logbooks_locations_array) {
return array();
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'".implode("','",$this->logbooks_locations_array)."'";
// get all worked orbit types from database
$sql = "SELECT DISTINCT satellite.orbit AS orbit FROM ".$this->config->item('table_name')." LEFT JOIN satellite ON COL_SAT_NAME = satellite.name WHERE station_id in (" . $location_list . ") AND COL_PROP_MODE = 'SAT' AND satellite.orbit IS NOT NULL ORDER BY orbit ASC";
@@ -217,15 +208,11 @@ class Bands extends CI_Model {
}
function get_worked_bands_dok() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
if (!$this->logbooks_locations_array) {
return array();
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'".implode("','",$this->logbooks_locations_array)."'";
// get all worked slots from database
$data = $this->db->query(

View File

@@ -1,6 +1,7 @@
<?php
class Clublog_model extends CI_Model {
class Clublog_model extends CI_Model
{
function get_clublog_users() {
$this->db->select('user_clublog_name, user_clublog_password, user_id');
@@ -10,26 +11,201 @@ class Clublog_model extends CI_Model {
return $query->result();
}
function uploadUser($userid, $username, $password) {
$clean_username = $this->security->xss_clean($username);
$clean_passord = $this->security->xss_clean($password);
$clean_userid = $this->security->xss_clean($userid);
$return = "No QSO's to upload";
$this->config->load('config');
ini_set('memory_limit', '-1');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$this->load->helper('file');
$this->load->library('AdifHelper');
$station_profiles = $this->all_with_count($clean_userid);
if ($station_profiles->num_rows()) {
foreach ($station_profiles->result() as $station_row) {
if ($station_row->qso_total > 0) {
$data['qsos'] = $this->get_clublog_qsos($station_row->station_id);
if ($data['qsos']->num_rows()) {
$string = $this->load->view('adif/data/clublog', $data, TRUE);
$ranid = uniqid();
if (!write_file('uploads/clublog' . $ranid . $station_row->station_id . '.adi', $string)) {
$return = 'Unable to write the file - Make the folder Upload folder has write permissions.';
} else {
$file_info = get_file_info('uploads/clublog' . $ranid . $station_row->station_id . '.adi');
// initialise the curl request
$request = curl_init('https://clublog.org/putlogs.php');
if ($this->config->item('directory') != "") {
$filepath = $_SERVER['DOCUMENT_ROOT'] . "/" . $this->config->item('directory') . "/" . $file_info['server_path'];
} else {
$filepath = $_SERVER['DOCUMENT_ROOT'] . "/" . $file_info['server_path'];
}
if (function_exists('curl_file_create')) { // php 5.5+
$cFile = curl_file_create($filepath);
} else { //
$cFile = '@' . realpath($filepath);
}
// send a file
curl_setopt($request, CURLOPT_POST, true);
curl_setopt(
$request,
CURLOPT_POSTFIELDS,
array(
'email' => $clean_username,
'password' => $clean_passord,
'callsign' => $station_row->station_callsign,
'api' => "608df94896cb9c5421ae748235492b43815610c9",
'file' => $cFile
)
);
// output the response
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($request);
$info = curl_getinfo($request);
if (curl_errno($request)) {
$return = curl_error($request);
}
curl_close($request);
// If Clublog Accepts mark the QSOs
if (preg_match('/\baccepted\b/', $response)) {
$return = "QSOs uploaded and Logbook QSOs marked as sent to Clublog";
$this->mark_qsos_sent($station_row->station_id);
$return = "Clublog upload for " . $station_row->station_callsign;
log_message('info', 'Clublog upload for ' . $station_row->station_callsign . ' successfully sent.');
} else if (preg_match('/checksum duplicate/', $response)) {
$return = "QSOs uploaded (asduplicate!) and Logbook QSOs marked as sent to Clublog";
$this->mark_qsos_sent($station_row->station_id);
$return = "Clublog upload for " . $station_row->station_callsign;
log_message('info', 'Clublog DUPLICATE upload for ' . $station_row->station_callsign . ' successfully sent.');
} else {
$return = "Error " . $response;
log_message('error', 'Clublog upload for ' . $station_row->station_callsign . ' failed reason ' . $response);
if (substr($response,0,13) == 'Upload denied') { // Deactivate Upload for Station if Clublog rejects it due to non-configured Call (prevent being blacklisted at Clublog)
$sql = 'update station_profile set clublogignore = 1 where station_id = ?';
$this->db->query($sql,$station_row->station_id);
}
if (substr($response,0,14) == 'Login rejected') { // Deactivate Upload for Station if Clublog rejects it due to wrong credentials (prevent being blacklisted at Clublog)
$sql = 'update station_profile set clublogignore = 1 where station_id = ?';
$this->db->query($sql,$station_row->station_id);
}
}
// Delete the ADIF file used for clublog
unlink('uploads/clublog' . $ranid . $station_row->station_id . '.adi');
}
} else {
$return = "Nothing awaiting upload to clublog for " . $station_row->station_callsign;
log_message('info', 'Nothing awaiting upload to clublog for ' . $station_row->station_callsign);
}
}
}
}
log_message('info', $return);
return $return . "\n";
}
function downloadUser($userid, $username, $password) {
$clean_username = $this->security->xss_clean($username);
$clean_password = $this->security->xss_clean($password);
$clean_userid = $this->security->xss_clean($userid);
$return = "Nothing to download";
$this->config->load('config');
ini_set('memory_limit', '-1');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$this->load->helper('file');
$this->load->model('logbook_model');
$station_profiles = $this->all_enabled($clean_userid); // Fetch unique Calls per User with aggregated station_ids
if ($station_profiles->num_rows()) {
foreach ($station_profiles->result() as $station_row) {
$lastrec = $this->clublog_last_qsl_rcvd_date($station_row->station_callsign);
$url = 'https://clublog.org/getmatches.php?api=608df94896cb9c5421ae748235492b43815610c9&email=' . $clean_username . '&password=' . $clean_password . '&callsign=' . $station_row->station_callsign . '&startyear=' . substr($lastrec, 0, 4) . '&startmonth=' . substr($lastrec, 4, 2) . '&startday=' . substr($lastrec, 6, 2);
$request = curl_init($url);
// recieve a file
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($request);
$info = curl_getinfo($request);
curl_close($request);
if (curl_errno($request)) {
$return = curl_error($request);
} elseif (preg_match_all('/Login rejected/', $response)) {
$this->disable_sync4call($station_row->station_callsign, $station_row->station_ids);
$return = "Wrong Clublog username and password for Callsign: '" . $station_row->station_callsign . "'. 'LOGIN REJECTED'.";
log_message('debug', $return);
} elseif (preg_match_all('/Invalid callsign/', $response)) { // We're trying to download calls for a station we're not granted. Disable Clublog-Transfer for that station(s)
$this->disable_sync4call($station_row->station_callsign, $station_row->station_ids);
$return = "The callsign '" . $station_row->station_callsign . "' does not match the user account at Clublog. 'INVALID CALLSIGN'.";
log_message('debug', $return);
} else {
try {
$cl_qsls = json_decode($response);
foreach ($cl_qsls as $oneqsl) {
$this->logbook_model->clublog_update($oneqsl[2], $oneqsl[0], $oneqsl[3], 'Y', $station_row->station_callsign, $station_row->station_ids);
}
} catch (Exception $e) {
$return = "Something gone wrong while trying to Download for station(s) " . $station_row->station_ids . " / Call: " . $station_row->station_callsign;
log_message("error", $return);
}
$return = "QSO's for Callsign: '" . $station_row->station_callsign . "' were successfully downloaded";
log_message('info', $return);
}
}
}
return $return . "\n";
}
function mark_qsos_sent($station_id) {
$data = array(
'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'),
'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "Y",
'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'),
'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "Y",
);
$this->db->where("station_id", $station_id);
$this->db->group_start();
$this->db->where("COL_CLUBLOG_QSO_UPLOAD_STATUS", null);
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "");
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "N");
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "M");
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "N");
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "M");
$this->db->group_end();
$this->db->update($this->config->item('table_name'), $data);
}
function mark_qso_sent($qso_id) {
$data = array(
'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'),
'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "Y",
'COL_CLUBLOG_QSO_UPLOAD_DATE' => date('Y-m-d'),
'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "Y",
);
$this->db->where("COL_PRIMARY_KEY", $qso_id);
@@ -43,7 +219,7 @@ class Clublog_model extends CI_Model {
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "");
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "N");
$this->db->group_end();
$this->db->limit(5);
$this->db->limit(5);
$query = $this->db->get($this->config->item('table_name'));
return $query;
@@ -51,9 +227,9 @@ class Clublog_model extends CI_Model {
function mark_all_qsos_notsent($station_id) {
$data = array(
'COL_CLUBLOG_QSO_UPLOAD_DATE' => null,
'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "M",
'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "N",
'COL_CLUBLOG_QSO_UPLOAD_DATE' => null,
'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "M",
'COL_CLUBLOG_QSO_UPLOAD_STATUS' => "N",
);
$this->db->where("station_id", $station_id);
@@ -61,11 +237,11 @@ class Clublog_model extends CI_Model {
$this->db->update($this->config->item('table_name'), $data);
}
function get_clublog_qsos($station_id){
function get_clublog_qsos($station_id) {
$this->db->select('*, dxcc_entities.name as station_country');
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
$this->db->join('station_profile', 'station_profile.station_id = ' . $this->config->item('table_name') . '.station_id');
$this->db->join('dxcc_entities', 'station_profile.station_dxcc = dxcc_entities.adif', 'left outer');
$this->db->where($this->config->item('table_name').'.station_id', $station_id);
$this->db->where($this->config->item('table_name') . '.station_id', $station_id);
$this->db->where('station_profile.clublogignore', 0);
$this->db->group_start();
$this->db->where("COL_CLUBLOG_QSO_UPLOAD_STATUS", null);
@@ -73,17 +249,17 @@ class Clublog_model extends CI_Model {
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "M");
$this->db->or_where("COL_CLUBLOG_QSO_UPLOAD_STATUS", "N");
$this->db->group_end();
$query = $this->db->get($this->config->item('table_name'));
return $query;
}
}
function clublog_last_qsl_rcvd_date($callsign) {
$qso_table_name = $this->config->item('table_name');
$this->db->from($qso_table_name);
$this->db->join('station_profile', 'station_profile.station_id = '.$qso_table_name.'.station_id');
$this->db->join('station_profile', 'station_profile.station_id = ' . $qso_table_name . '.station_id');
$this->db->where('station_profile.station_callsign', $callsign);
$this->db->select("DATE_FORMAT(COL_CLUBLOG_QSO_DOWNLOAD_DATE,'%Y%m%d') AS COL_CLUBLOG_QSO_DOWNLOAD_DATE", FALSE);
@@ -95,7 +271,7 @@ class Clublog_model extends CI_Model {
$query = $this->db->get();
$row = $query->row();
if (isset($row->COL_CLUBLOG_QSO_DOWNLOAD_DATE)){
if (isset($row->COL_CLUBLOG_QSO_DOWNLOAD_DATE)) {
return $row->COL_CLUBLOG_QSO_DOWNLOAD_DATE;
} else {
// No previous date (first time import has run?), so choose UNIX EPOCH!
@@ -105,23 +281,23 @@ class Clublog_model extends CI_Model {
}
function disable_sync4call($call, $stations) {
$sql="update station_profile set clublogignore=1 where station_callsign=? and station_id in (".$stations.")";
$query = $this->db->query($sql,$call);
$sql = "update station_profile set clublogignore=1 where station_callsign=? and station_id in (" . $stations . ")";
$query = $this->db->query($sql, $call);
}
function all_enabled($userid) {
$sql="select sp.station_callsign, group_concat(sp.station_id) as station_ids from station_profile sp
$sql = "select sp.station_callsign, group_concat(sp.station_id) as station_ids from station_profile sp
inner join users u on (u.user_id=sp.user_id)
where u.user_clublog_name is not null and u.user_clublog_password is not null and sp.clublogignore=0 and u.user_id=?
group by sp.station_callsign";
$query = $this->db->query($sql,$userid);
$query = $this->db->query($sql, $userid);
return $query;
}
function all_with_count($userid) {
$this->db->select('station_profile.station_id, station_profile.station_callsign, count('.$this->config->item('table_name').'.station_id) as qso_total');
$this->db->select('station_profile.station_id, station_profile.station_callsign, count(' . $this->config->item('table_name') . '.station_id) as qso_total');
$this->db->from('station_profile');
$this->db->join($this->config->item('table_name'),'station_profile.station_id = '.$this->config->item('table_name').'.station_id','left');
$this->db->join($this->config->item('table_name'), 'station_profile.station_id = ' . $this->config->item('table_name') . '.station_id', 'left');
$this->db->group_by('station_profile.station_id');
$this->db->where('station_profile.user_id', $userid);
$this->db->where('station_profile.clublogignore', 0);
@@ -135,5 +311,3 @@ class Clublog_model extends CI_Model {
return $this->db->get();
}
}
?>

View File

@@ -2,32 +2,337 @@
class Eqslmethods_model extends CI_Model {
function mark_all_as_sent() {
$data = array(
'COL_EQSL_QSL_SENT' => 'Y',
'COL_EQSL_QSLSDATE' => date('Y-m-d')." 00:00:00",
);
function sync() {
$userid=$this->session->userdata('user_id');
if ($userid ?? '' != '') {
$stations = $this->get_all_user_locations($userid);
$logbooks_locations_array = array();
foreach ($stations->result() as $row) {
array_push($logbooks_locations_array, $row->station_id);
}
if (count($logbooks_locations_array)>0) {
$this->db->where_in('station_id', $logbooks_locations_array);
$this->db->group_start();
$this->db->where('COL_EQSL_QSL_SENT', 'N');
$this->db->or_where('COL_EQSL_QSL_SENT', 'R');
$this->db->or_where('COL_EQSL_QSL_SENT', 'Q');
$this->db->or_where('COL_EQSL_QSL_SENT', null);
$this->db->group_end();
ini_set('memory_limit', '-1');
set_time_limit(0);
$this->db->update($this->config->item('table_name'), $data);
}
}
}
$users = $this->get_eqsl_users();
foreach ($users as $user) {
$this->uploadUser($user->user_id, $user->user_eqsl_name, $user->user_eqsl_password);
$this->downloadUser($user->user_id, $user->user_eqsl_name, $user->user_eqsl_password);
}
}
function downloadUser($userid, $username, $password) {
$this->load->library('EqslImporter');
$config['upload_path'] = './uploads/';
$eqsl_locations = $this->all_of_user_with_eqsl_nick_defined($userid);
$eqsl_results = array();
foreach ($eqsl_locations->result_array() as $eqsl_location) {
$this->eqslimporter->from_callsign_and_QTH(
$eqsl_location['station_callsign'],
$eqsl_location['eqslqthnickname'],
$config['upload_path'],
$eqsl_location['station_id']
);
$eqsl_results[] = $this->eqslimporter->fetch($password); // Hint: for debugging add YYYYMMDD as second argument to force from older date
}
}
function uploadUser($userid, $username, $password) {
$data['user_eqsl_name'] = $this->security->xss_clean($username);
$data['user_eqsl_password'] = $this->security->xss_clean($password);
$clean_userid = $this->security->xss_clean($userid);
$qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent($clean_userid);
foreach ($qslsnotsent->result_array() as $qsl) {
$data['user_eqsl_name'] = $qsl['station_callsign'];
$adif = $this->generateAdif($qsl, $data);
$status = $this->uploadQso($adif, $qsl);
}
}
// Build out the ADIF info string according to specs https://eqsl.cc/qslcard/ADIFContentSpecs.cfm
function generateAdif($qsl, $data) {
$COL_QSO_DATE = date('Ymd', strtotime($qsl['COL_TIME_ON']));
$COL_TIME_ON = date('Hi', strtotime($qsl['COL_TIME_ON']));
# Set up the single record file
$adif = "https://www.eqsl.cc/qslcard/importADIF.cfm?";
$adif .= "ADIFData=WavelogUpload%20";
/* Handy reference of escaping chars
"<" = 3C
">" = 3E
":" = 3A
" " = 20
"_" = 5F
"-" = 2D
"." = 2E
"&" = 26
*/
$adif .= "%3C";
$adif .= "ADIF%5FVER";
$adif .= "%3A";
$adif .= "4";
$adif .= "%3E";
$adif .= "1%2E00 ";
$adif .= "%20";
$adif .= "%3C";
$adif .= "EQSL%5FUSER";
$adif .= "%3A";
$adif .= strlen($data['user_eqsl_name']);
$adif .= "%3E";
$adif .= $data['user_eqsl_name'];
$adif .= "%20";
$adif .= "%3C";
$adif .= "EQSL%5FPSWD";
$adif .= "%3A";
$adif .= strlen($data['user_eqsl_password']);
$adif .= "%3E";
$adif .= urlencode($data['user_eqsl_password']);
$adif .= "%20";
$adif .= "%3C";
$adif .= "EOH";
$adif .= "%3E";
# Lay out the required fields
$adif .= "%3C";
$adif .= "QSO%5FDATE";
$adif .= "%3A";
$adif .= "8";
$adif .= "%3E";
$adif .= $COL_QSO_DATE;
$adif .= "%20";
$adif .= "%3C";
$adif .= "TIME%5FON";
$adif .= "%3A";
$adif .= "4";
$adif .= "%3E";
$adif .= $COL_TIME_ON;
$adif .= "%20";
$adif .= "%3C";
$adif .= "CALL";
$adif .= "%3A";
$adif .= strlen($qsl['COL_CALL']);
$adif .= "%3E";
$adif .= $qsl['COL_CALL'];
$adif .= "%20";
$adif .= "%3C";
$adif .= "MODE";
$adif .= "%3A";
$adif .= strlen($qsl['COL_MODE']);
$adif .= "%3E";
$adif .= $qsl['COL_MODE'];
$adif .= "%20";
if (isset($qsl['COL_SUBMODE'])) {
$adif .= "%3C";
$adif .= "SUBMODE";
$adif .= "%3A";
$adif .= strlen($qsl['COL_SUBMODE']);
$adif .= "%3E";
$adif .= $qsl['COL_SUBMODE'];
$adif .= "%20";
}
$adif .= "%3C";
$adif .= "BAND";
$adif .= "%3A";
$adif .= strlen($qsl['COL_BAND']);
$adif .= "%3E";
$adif .= $qsl['COL_BAND'];
$adif .= "%20";
# End all the required fields
// adding RST_Sent
$adif .= "%3C";
$adif .= "RST%5FSENT";
$adif .= "%3A";
$adif .= strlen($qsl['COL_RST_SENT']);
$adif .= "%3E";
$adif .= $qsl['COL_RST_SENT'];
$adif .= "%20";
// adding prop mode if it isn't blank
if ($qsl['COL_PROP_MODE']) {
$adif .= "%3C";
$adif .= "PROP%5FMODE";
$adif .= "%3A";
$adif .= strlen($qsl['COL_PROP_MODE']);
$adif .= "%3E";
$adif .= $qsl['COL_PROP_MODE'];
$adif .= "%20";
}
// adding sat name if it isn't blank
if ($qsl['COL_SAT_NAME'] != '') {
$adif .= "%3C";
$adif .= "SAT%5FNAME";
$adif .= "%3A";
$adif .= strlen($qsl['COL_SAT_NAME']);
$adif .= "%3E";
$adif .= str_replace('-', '%2D', $qsl['COL_SAT_NAME']);
$adif .= "%20";
}
// adding sat mode if it isn't blank
if ($qsl['COL_SAT_MODE'] != '') {
$adif .= "%3C";
$adif .= "SAT%5FMODE";
$adif .= "%3A";
$adif .= strlen($qsl['COL_SAT_MODE']);
$adif .= "%3E";
$adif .= $qsl['COL_SAT_MODE'];
$adif .= "%20";
}
// adding qslmsg if it isn't blank
if ($qsl['COL_QSLMSG'] != '') {
$qsl['COL_QSLMSG'] = str_replace(array(chr(10), chr(13)), array(' ', ' '), $qsl['COL_QSLMSG']);
$adif .= "%3C";
$adif .= "QSLMSG";
$adif .= "%3A";
$adif .= strlen($qsl['COL_QSLMSG']);
$adif .= "%3E";
$adif .= str_replace('&', '%26', $qsl['COL_QSLMSG']);
$adif .= "%20";
}
if ($qsl['eqslqthnickname'] != '') {
$adif .= "%3C";
$adif .= "APP%5FEQSL%5FQTH%5FNICKNAME";
$adif .= "%3A";
$adif .= strlen($qsl['eqslqthnickname']);
$adif .= "%3E";
$adif .= $qsl['eqslqthnickname'];
$adif .= "%20";
}
// adding sat mode if it isn't blank
if ($qsl['station_gridsquare'] != '') {
$adif .= "%3C";
$adif .= "MY%5FGRIDSQUARE";
$adif .= "%3A";
$adif .= strlen($qsl['station_gridsquare']);
$adif .= "%3E";
$adif .= $qsl['station_gridsquare'];
$adif .= "%20";
}
# Tie a bow on it!
$adif .= "%3C";
$adif .= "EOR";
$adif .= "%3E";
# Make sure we don't have any spaces
$adif = str_replace(" ", '%20', $adif);
return $adif;
}
function uploadQso($adif, $qsl) {
$this->load->model('eqslmethods_model');
$status = "";
// begin script
$ch = curl_init();
// basic curl options for all requests
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// use the URL we built
curl_setopt($ch, CURLOPT_URL, $adif);
$result = curl_exec($ch);
$chi = curl_getinfo($ch);
curl_close($ch);
/* Time for some error handling
Things we might get back
Result: 0 out of 0 records added -> eQSL didn't understand the format
Result: 1 out of 1 records added -> Fantastic
Error: No match on eQSL_User/eQSL_Pswd -> eQSL credentials probably wrong
Warning: Y=2013 M=08 D=11 F6ARS 15M JT65 Bad record: Duplicate
Result: 0 out of 1 records added -> Dupe, OM!
*/
if ($chi['http_code'] == "200") {
if (stristr($result, "Result: 1 out of 1 records added")) {
$status = "Sent";
$this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
} else {
if (stristr($result, "Error: No match on eQSL_User/eQSL_Pswd")) {
$this->session->set_flashdata('warning', 'Your eQSL username and/or password is incorrect.');
redirect('eqsl/export');
} else {
if (stristr($result, "Result: 0 out of 0 records added")) {
$this->session->set_flashdata('warning', 'Something went wrong with eQSL.cc!');
redirect('eqsl/export');
} else {
if (stristr($result, "Bad record: Duplicate")) {
$status = "Duplicate";
# Mark the QSL as sent if this is a dupe.
$this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
}
}
}
}
} else {
if ($chi['http_code'] == "500") {
$this->session->set_flashdata('warning', 'eQSL.cc is experiencing issues. Please try exporting QSOs later.');
redirect('eqsl/export');
} else {
if ($chi['http_code'] == "400") {
$this->session->set_flashdata('warning', 'There was an error in one of the QSOs. You might want to manually upload them.');
redirect('eqsl/export');
$status = "Error";
} else {
if ($chi['http_code'] == "404") {
$this->session->set_flashdata('warning', 'It seems that the eQSL site has changed. Please open up an issue on GitHub.');
redirect('eqsl/export');
}
}
}
}
log_message('debug', $result);
return $status;
}
function mark_all_as_sent() {
$data = array(
'COL_EQSL_QSL_SENT' => 'Y',
'COL_EQSL_QSLSDATE' => date('Y-m-d') . " 00:00:00",
);
$userid = $this->session->userdata('user_id');
if ($userid ?? '' != '') {
$stations = $this->get_all_user_locations($userid);
$logbooks_locations_array = array();
foreach ($stations->result() as $row) {
array_push($logbooks_locations_array, $row->station_id);
}
if (count($logbooks_locations_array) > 0) {
$this->db->where_in('station_id', $logbooks_locations_array);
$this->db->group_start();
$this->db->where('COL_EQSL_QSL_SENT', 'N');
$this->db->or_where('COL_EQSL_QSL_SENT', 'R');
$this->db->or_where('COL_EQSL_QSL_SENT', 'Q');
$this->db->or_where('COL_EQSL_QSL_SENT', null);
$this->db->group_end();
$this->db->update($this->config->item('table_name'), $data);
}
}
}
function get_eqsl_users() {
$this->db->select('user_eqsl_name, user_eqsl_password, user_id');
@@ -41,38 +346,37 @@ class Eqslmethods_model extends CI_Model {
* Gets all station location for user, for use in cron where we don't have any login
*/
function get_all_user_locations($userid) {
$this->db->select('station_profile.*, dxcc_entities.name as station_country, dxcc_entities.end as dxcc_end');
$this->db->where('user_id', $userid);
$this->db->join('dxcc_entities','station_profile.station_dxcc = dxcc_entities.adif','left outer');
return $this->db->get('station_profile');
}
$this->db->select('station_profile.*, dxcc_entities.name as station_country, dxcc_entities.end as dxcc_end');
$this->db->where('user_id', $userid);
$this->db->join('dxcc_entities', 'station_profile.station_dxcc = dxcc_entities.adif', 'left outer');
return $this->db->get('station_profile');
}
// Show all QSOs we need to send to eQSL
function eqsl_not_yet_sent($userid = null) {
$CI =& get_instance();
if ($userid == null) {
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
} else {
$stations = $this->get_all_user_locations($userid);
$logbooks_locations_array = array();
foreach ($stations->result() as $row) {
array_push($logbooks_locations_array, $row->station_id);
}
array_push($logbooks_locations_array, -9999);
array_push($logbooks_locations_array, -9999);
}
$this->db->select('station_profile.*, '.$this->config->item('table_name').'.COL_PRIMARY_KEY, '.$this->config->item('table_name').'.COL_TIME_ON, '.$this->config->item('table_name').'.COL_CALL, '.$this->config->item('table_name').'.COL_MODE, '.$this->config->item('table_name').'.COL_SUBMODE, '.$this->config->item('table_name').'.COL_BAND, '.$this->config->item('table_name').'.COL_COMMENT, '.$this->config->item('table_name').'.COL_RST_SENT, '.$this->config->item('table_name').'.COL_PROP_MODE, '.$this->config->item('table_name').'.COL_SAT_NAME, '.$this->config->item('table_name').'.COL_SAT_MODE, '.$this->config->item('table_name').'.COL_QSLMSG');
$this->db->select('station_profile.*, ' . $this->config->item('table_name') . '.COL_PRIMARY_KEY, ' . $this->config->item('table_name') . '.COL_TIME_ON, ' . $this->config->item('table_name') . '.COL_CALL, ' . $this->config->item('table_name') . '.COL_MODE, ' . $this->config->item('table_name') . '.COL_SUBMODE, ' . $this->config->item('table_name') . '.COL_BAND, ' . $this->config->item('table_name') . '.COL_COMMENT, ' . $this->config->item('table_name') . '.COL_RST_SENT, ' . $this->config->item('table_name') . '.COL_PROP_MODE, ' . $this->config->item('table_name') . '.COL_SAT_NAME, ' . $this->config->item('table_name') . '.COL_SAT_MODE, ' . $this->config->item('table_name') . '.COL_QSLMSG');
$this->db->from('station_profile');
$this->db->join($this->config->item('table_name'),'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
$this->db->join($this->config->item('table_name'), 'station_profile.station_id = ' . $this->config->item('table_name') . '.station_id');
$this->db->where("coalesce(station_profile.eqslqthnickname, '') <> ''");
$this->db->where($this->config->item('table_name').'.COL_CALL !=', '');
$this->db->where($this->config->item('table_name') . '.COL_CALL !=', '');
$this->db->group_start();
$this->db->where($this->config->item('table_name').'.COL_EQSL_QSL_SENT is null');
$this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', '');
$this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'R');
$this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'Q');
$this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'N');
$this->db->where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT is null');
$this->db->or_where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT', '');
$this->db->or_where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT', 'R');
$this->db->or_where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT', 'Q');
$this->db->or_where($this->config->item('table_name') . '.COL_EQSL_QSL_SENT', 'N');
$this->db->group_end();
$this->db->where_in('station_profile.station_id', $logbooks_locations_array);
@@ -81,26 +385,25 @@ class Eqslmethods_model extends CI_Model {
// Show all QSOs whose eQSL card images we did not download yet
function eqsl_not_yet_downloaded($userid = null) {
$CI =& get_instance();
if ($userid == null) {
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
} else {
$stations = $this->get_all_user_locations($userid);
$logbooks_locations_array = array();
foreach ($stations->result() as $row) {
array_push($logbooks_locations_array, $row->station_id);
}
array_push($logbooks_locations_array, -9999);
array_push($logbooks_locations_array, -9999);
}
$this->db->select('station_profile.station_id, '.$this->config->item('table_name').'.COL_PRIMARY_KEY, '.$this->config->item('table_name').'.COL_TIME_ON, '.$this->config->item('table_name').'.COL_CALL, '.$this->config->item('table_name').'.COL_MODE, '.$this->config->item('table_name').'.COL_SUBMODE, '.$this->config->item('table_name').'.COL_BAND, '.$this->config->item('table_name').'.COL_PROP_MODE, '.$this->config->item('table_name').'.COL_SAT_NAME, '.$this->config->item('table_name').'.COL_SAT_MODE, '.$this->config->item('table_name').'.COL_QSLMSG, eQSL_images.qso_id');
$this->db->select('station_profile.station_id, ' . $this->config->item('table_name') . '.COL_PRIMARY_KEY, ' . $this->config->item('table_name') . '.COL_TIME_ON, ' . $this->config->item('table_name') . '.COL_CALL, ' . $this->config->item('table_name') . '.COL_MODE, ' . $this->config->item('table_name') . '.COL_SUBMODE, ' . $this->config->item('table_name') . '.COL_BAND, ' . $this->config->item('table_name') . '.COL_PROP_MODE, ' . $this->config->item('table_name') . '.COL_SAT_NAME, ' . $this->config->item('table_name') . '.COL_SAT_MODE, ' . $this->config->item('table_name') . '.COL_QSLMSG, eQSL_images.qso_id');
$this->db->from('station_profile');
$this->db->join($this->config->item('table_name'),'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
$this->db->join('eQSL_images','eQSL_images.qso_id = '.$this->config->item('table_name').'.COL_PRIMARY_KEY','left outer');
$this->db->join($this->config->item('table_name'), 'station_profile.station_id = ' . $this->config->item('table_name') . '.station_id');
$this->db->join('eQSL_images', 'eQSL_images.qso_id = ' . $this->config->item('table_name') . '.COL_PRIMARY_KEY', 'left outer');
//$this->db->where("coalesce(station_profile.eqslqthnickname, '') <> ''");
$this->db->where($this->config->item('table_name').'.COL_CALL !=', '');
$this->db->where($this->config->item('table_name').'.COL_EQSL_QSL_RCVD', 'Y');
$this->db->where($this->config->item('table_name') . '.COL_CALL !=', '');
$this->db->where($this->config->item('table_name') . '.COL_EQSL_QSL_RCVD', 'Y');
$this->db->where('qso_id', NULL);
$this->db->where_in('station_profile.station_id', $logbooks_locations_array);
$this->db->order_by("COL_TIME_ON", "desc");
@@ -123,29 +426,31 @@ class Eqslmethods_model extends CI_Model {
}
// Returns all the distinct callsign, eqsl nick pair for the current user/supplied user
function all_of_user_with_eqsl_nick_defined($userid = null) {
function all_of_user_with_eqsl_nick_defined($userid = null) {
if ($userid == null) {
$this->db->where('user_id', $this->session->userdata('user_id'));
} else {
$this->db->where('user_id', $userid);
}
$this->db->where('eqslqthnickname IS NOT NULL');
$this->db->where('eqslqthnickname !=', '');
$this->db->from('station_profile');
$this->db->select('station_callsign, eqslqthnickname, station_id');
$this->db->distinct(TRUE);
$this->db->where('eqslqthnickname IS NOT NULL');
$this->db->where('eqslqthnickname !=', '');
$this->db->from('station_profile');
$this->db->select('station_callsign, eqslqthnickname, station_id');
$this->db->distinct(TRUE);
return $this->db->get();
}
return $this->db->get();
}
// Get the last date we received an eQSL
function eqsl_last_qsl_rcvd_date($callsign, $nickname) {
$qso_table_name = $this->config->item('table_name');
$this->db->from($qso_table_name);
$this->db->join('station_profile',
'station_profile.station_id = '.$qso_table_name.'.station_id AND station_profile.eqslqthnickname != ""');
$this->db->join(
'station_profile',
'station_profile.station_id = ' . $qso_table_name . '.station_id AND station_profile.eqslqthnickname != ""'
);
$this->db->where('station_profile.station_callsign', $callsign);
$this->db->where('station_profile.eqslqthnickname', $nickname);
@@ -157,7 +462,7 @@ class Eqslmethods_model extends CI_Model {
$query = $this->db->get();
$row = $query->row();
if (isset($row->COL_EQSL_QSLRDATE)){
if (isset($row->COL_EQSL_QSLRDATE)) {
return $row->COL_EQSL_QSLRDATE;
} else {
// No previous date (first time import has run?), so choose UNIX EPOCH!
@@ -176,10 +481,10 @@ class Eqslmethods_model extends CI_Model {
'COL_EQSL_QSL_RCVD' => $qsl_status
);
$this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )');
$this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )');
$this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("' . $datetime . '", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )');
$this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("' . $datetime . '", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )');
$this->db->where('COL_CALL', $callsign);
$this->db->where('COL_STATION_CALLSIGN', $station_callsign);
$this->db->where('COL_STATION_CALLSIGN', $station_callsign);
$this->db->where('COL_BAND', $band);
$this->db->where('COL_MODE', $mode);
$this->db->where('station_id', $station_id);
@@ -192,25 +497,22 @@ class Eqslmethods_model extends CI_Model {
// Determine if we've already received an eQSL for this QSO
function eqsl_dupe_check($datetime, $callsign, $band, $mode, $qsl_status, $station_callsign, $station_id) {
$this->db->select('COL_EQSL_QSLRDATE');
$this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )');
$this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )');
$this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("' . $datetime . '", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )');
$this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("' . $datetime . '", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )');
$this->db->where('COL_CALL', $callsign);
$this->db->where('COL_BAND', $band);
$this->db->where('COL_MODE', $mode);
$this->db->where('COL_STATION_CALLSIGN', $station_callsign);
$this->db->where('COL_STATION_CALLSIGN', $station_callsign);
$this->db->where('COL_EQSL_QSL_RCVD', $qsl_status);
$this->db->where('station_id', $station_id);
$this->db->limit(1);
$query = $this->db->get($this->config->item('table_name'));
$row = $query->row();
if ($row != null) {
return true;
}
}
return false;
}
}
?>

View File

@@ -5,360 +5,325 @@ class IOTA extends CI_Model {
$this->load->library('Genfunctions');
}
function get_iota_array($iotaArray, $bands, $postdata) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
function get_iota_array($iotaArray, $bands, $postdata) {
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
foreach ($bands as $band) { // Looping through bands and iota to generate the array needed for display
foreach ($iotaArray as $iota) {
$iotaMatrix[$iota->tag]['prefix'] = $iota->prefix;
$iotaMatrix[$iota->tag]['name'] = $iota->name;
if ($postdata['includedeleted'])
$iotaMatrix[$iota->tag]['Deleted'] = isset($iota->status) && $iota->status == 'D' ? "<div class='alert-danger'>Y</div>" : '';
$iotaMatrix[$iota->tag][$band] = '-';
}
foreach ($bands as $band) { // Looping through bands and iota to generate the array needed for display
foreach ($iotaArray as $iota) {
$iotaMatrix[$iota->tag]['prefix'] = $iota->prefix;
$iotaMatrix[$iota->tag]['name'] = $iota->name;
if ($postdata['includedeleted'])
$iotaMatrix[$iota->tag]['Deleted'] = isset($iota->status) && $iota->status == 'D' ? "<div class='alert-danger'>Y</div>" : '';
$iotaMatrix[$iota->tag][$band] = '-';
}
// If worked is checked, we add worked iotas to the array
if ($postdata['worked'] != NULL) {
$workedIota = $this->getIotaBandWorked($location_list, $band, $postdata);
foreach ($workedIota as $wiota) {
$iotaMatrix[$wiota->tag][$band] = '<div class="bg-danger awardsBgDanger"><a href=\'javascript:displayContacts("'.$wiota->tag.'","'. $band . '","All","All","'. $postdata['mode'] . '","IOTA")\'>W</a></div>';
}
}
// If worked is checked, we add worked iotas to the array
if ($postdata['worked'] != NULL) {
$workedIota = $this->getIotaBandWorked($location_list, $band, $postdata);
foreach ($workedIota as $wiota) {
$iotaMatrix[$wiota->tag][$band] = '<div class="bg-danger awardsBgDanger"><a href=\'javascript:displayContacts("'.$wiota->tag.'","'. $band . '","All","All","'. $postdata['mode'] . '","IOTA")\'>W</a></div>';
}
}
// If confirmed is checked, we add confirmed iotas to the array
if ($postdata['confirmed'] != NULL) {
$confirmedIota = $this->getIotaBandConfirmed($location_list, $band, $postdata);
foreach ($confirmedIota as $ciota) {
$iotaMatrix[$ciota->tag][$band] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:displayContacts("'.$ciota->tag.'","'. $band . '","All","All","'. $postdata['mode'] . '","IOTA")\'>C</a></div>';
}
}
}
// If confirmed is checked, we add confirmed iotas to the array
if ($postdata['confirmed'] != NULL) {
$confirmedIota = $this->getIotaBandConfirmed($location_list, $band, $postdata);
foreach ($confirmedIota as $ciota) {
$iotaMatrix[$ciota->tag][$band] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:displayContacts("'.$ciota->tag.'","'. $band . '","All","All","'. $postdata['mode'] . '","IOTA")\'>C</a></div>';
}
}
}
// We want to remove the worked iotas in the list, since we do not want to display them
if ($postdata['worked'] == NULL) {
$workedIota = $this->getIotaWorked($location_list, $postdata);
foreach ($workedIota as $wiota) {
if (array_key_exists($wiota->tag, $iotaMatrix)) {
unset($iotaMatrix[$wiota->tag]);
}
}
}
// We want to remove the worked iotas in the list, since we do not want to display them
if ($postdata['worked'] == NULL) {
$workedIota = $this->getIotaWorked($location_list, $postdata);
foreach ($workedIota as $wiota) {
if (array_key_exists($wiota->tag, $iotaMatrix)) {
unset($iotaMatrix[$wiota->tag]);
}
}
}
// We want to remove the confirmed iotas in the list, since we do not want to display them
if ($postdata['confirmed'] == NULL) {
$confirmedIOTA = $this->getIotaConfirmed($location_list, $postdata);
foreach ($confirmedIOTA as $ciota) {
if (array_key_exists($ciota->tag, $iotaMatrix)) {
unset($iotaMatrix[$ciota->tag]);
}
}
}
// We want to remove the confirmed iotas in the list, since we do not want to display them
if ($postdata['confirmed'] == NULL) {
$confirmedIOTA = $this->getIotaConfirmed($location_list, $postdata);
foreach ($confirmedIOTA as $ciota) {
if (array_key_exists($ciota->tag, $iotaMatrix)) {
unset($iotaMatrix[$ciota->tag]);
}
}
}
if (isset($iotaMatrix)) {
return $iotaMatrix;
} else {
return 0;
}
}
if (isset($iotaMatrix)) {
return $iotaMatrix;
}
else {
return 0;
}
}
function getIotaBandConfirmed($location_list, $band, $postdata) {
$sql = "SELECT distinct UPPER(col_iota) as tag FROM " . $this->config->item('table_name') . " thcv
join iota on thcv.col_iota = iota.tag
where station_id in (" . $location_list .
") and thcv.col_iota is not null
and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
function getIotaBandConfirmed($location_list, $band, $postdata) {
$sql = "SELECT distinct UPPER(col_iota) as tag FROM " . $this->config->item('table_name') . " thcv
join iota on thcv.col_iota = iota.tag
where station_id in (" . $location_list . ") and thcv.col_iota is not null";
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= $this->genfunctions->addBandToQuery($band);
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
$sql .= $this->addContinentsToQuery($postdata);
$sql .= $this->genfunctions->addQslToQuery($postdata);
$sql .= $this->addContinentsToQuery($postdata);
$query = $this->db->query($sql);
$query = $this->db->query($sql);
return $query->result();
}
return $query->result();
}
function getIotaBandWorked($location_list, $band, $postdata) {
$sql = 'SELECT distinct UPPER(col_iota) as tag FROM ' . $this->config->item('table_name'). ' thcv
join iota on thcv.col_iota = iota.tag
where station_id in (' . $location_list .
') and thcv.col_iota is not null';
function getIotaBandWorked($location_list, $band, $postdata) {
$sql = 'SELECT distinct UPPER(col_iota) as tag FROM ' . $this->config->item('table_name'). ' thcv
join iota on thcv.col_iota = iota.tag
where station_id in (' . $location_list .
') and thcv.col_iota is not null';
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= $this->genfunctions->addBandToQuery($band);
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
$sql .= $this->addContinentsToQuery($postdata);
$sql .= $this->addContinentsToQuery($postdata);
$query = $this->db->query($sql);
$query = $this->db->query($sql);
return $query->result();
}
return $query->result();
}
function fetchIota($postdata) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
function fetchIota($postdata) {
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = "select tag, name, prefix, dxccid, status, lat1, lat2, lon1, lon2 from iota where 1=1";
$sql = "select tag, name, prefix, dxccid, status, lat1, lat2, lon1, lon2 from iota where 1=1";
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
$sql .= $this->addContinentsToQuery($postdata);
$sql .= $this->addContinentsToQuery($postdata);
if ($postdata['notworked'] == NULL) {
$sql .= " and exists (select 1 from " . $this->config->item('table_name') . " where station_id in (". $location_list . ") and col_iota = iota.tag";
if ($postdata['notworked'] == NULL) {
$sql .= " and exists (select 1 from " . $this->config->item('table_name') . " where station_id in (". $location_list . ") and col_iota = iota.tag";
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
if ($postdata['band'] != 'All') {
if ($postdata['band'] == 'SAT') {
$sql .= " and col_prop_mode ='" . $postdata['band'] . "'";
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $postdata['band'] . "'";
}
}
$sql .= ")";
}
if ($postdata['band'] != 'All') {
if ($postdata['band'] == 'SAT') {
$sql .= " and col_prop_mode ='" . $postdata['band'] . "'";
} else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $postdata['band'] . "'";
}
}
$sql .= ")";
}
$sql .= ' order by tag';
$query = $this->db->query($sql);
$sql .= ' order by tag';
$query = $this->db->query($sql);
return $query->result();
}
return $query->result();
}
function getIotaWorked($location_list, $postdata) {
$sql = "SELECT distinct UPPER(col_iota) as tag FROM " . $this->config->item('table_name') . " thcv
join iota on thcv.col_iota = iota.tag
where station_id in (" . $location_list .
") and thcv.col_iota is not null
and not exists (select 1 from ". $this->config->item('table_name') . " where station_id = ". $location_list .
" and col_iota = thcv.col_iota";
function getIotaWorked($location_list, $postdata) {
$sql = "SELECT distinct UPPER(col_iota) as tag FROM " . $this->config->item('table_name') . " thcv
join iota on thcv.col_iota = iota.tag
where station_id in (" . $location_list . ") and thcv.col_iota is not null
and not exists (select 1 from ". $this->config->item('table_name') . " where station_id = ". $location_list . " and col_iota = thcv.col_iota)";
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y'))";
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
$sql .= $this->addContinentsToQuery($postdata);
$sql .= $this->addContinentsToQuery($postdata);
$query = $this->db->query($sql);
$query = $this->db->query($sql);
return $query->result();
}
return $query->result();
}
function getIotaConfirmed($location_list, $postdata) {
$sql = "SELECT distinct UPPER(col_iota) as tag FROM " . $this->config->item('table_name') . " thcv
join iota on thcv.col_iota = iota.tag
where station_id in (" . $location_list .
") and thcv.col_iota is not null
and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
function getIotaConfirmed($location_list, $postdata) {
$sql = "SELECT distinct UPPER(col_iota) as tag FROM " . $this->config->item('table_name') . " thcv
join iota on thcv.col_iota = iota.tag
where station_id in (" . $location_list . ") and thcv.col_iota is not null";
$sql .= $this->genfunctions->addQslToQuery($postdata);
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
$sql .= $this->addContinentsToQuery($postdata);
$sql .= $this->addContinentsToQuery($postdata);
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
$sql .= $this->genfunctions->addQslToQuery($postdata);
$query = $this->db->query($sql);
$query = $this->db->query($sql);
return $query->result();
}
return $query->result();
}
// Made function instead of repeating this several times
function addContinentsToQuery($postdata) {
$sql = '';
if ($postdata['Africa'] == NULL) {
$sql .= " and left(tag, 2) <> 'AF'";
}
// Made function instead of repeating this several times
function addContinentsToQuery($postdata) {
$sql = '';
if ($postdata['Africa'] == NULL) {
$sql .= " and left(tag, 2) <> 'AF'";
}
if ($postdata['Europe'] == NULL) {
$sql .= " and left(tag, 2) <> 'EU'";
}
if ($postdata['Europe'] == NULL) {
$sql .= " and left(tag, 2) <> 'EU'";
}
if ($postdata['Asia'] == NULL) {
$sql .= " and left(tag, 2) <> 'AS'";
}
if ($postdata['Asia'] == NULL) {
$sql .= " and left(tag, 2) <> 'AS'";
}
if ($postdata['SouthAmerica'] == NULL) {
$sql .= " and left(tag, 2) <> 'SA'";
}
if ($postdata['SouthAmerica'] == NULL) {
$sql .= " and left(tag, 2) <> 'SA'";
}
if ($postdata['NorthAmerica'] == NULL) {
$sql .= " and left(tag, 2) <> 'NA'";
}
if ($postdata['NorthAmerica'] == NULL) {
$sql .= " and left(tag, 2) <> 'NA'";
}
if ($postdata['Oceania'] == NULL) {
$sql .= " and left(tag, 2) <> 'OC'";
}
if ($postdata['Oceania'] == NULL) {
$sql .= " and left(tag, 2) <> 'OC'";
}
if ($postdata['Antarctica'] == NULL) {
$sql .= " and left(tag, 2) <> 'AN'";
}
return $sql;
}
if ($postdata['Antarctica'] == NULL) {
$sql .= " and left(tag, 2) <> 'AN'";
}
return $sql;
}
/*
* Function gets worked and confirmed summary on each band on the active stationprofile
*/
function get_iota_summary($bands, $postdata)
{
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
/*
* Function gets worked and confirmed summary on each band on the active stationprofile
*/
function get_iota_summary($bands, $postdata) {
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
foreach ($bands as $band) {
$worked = $this->getSummaryByBand($band, $postdata, $location_list);
$confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list);
$iotaSummary['worked'][$band] = $worked[0]->count;
$iotaSummary['confirmed'][$band] = $confirmed[0]->count;
}
foreach ($bands as $band) {
$worked = $this->getSummaryByBand($band, $postdata, $location_list);
$confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list);
$iotaSummary['worked'][$band] = $worked[0]->count;
$iotaSummary['confirmed'][$band] = $confirmed[0]->count;
}
$workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list);
$confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list);
$workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list);
$confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list);
$iotaSummary['worked']['Total'] = $workedTotal[0]->count;
$iotaSummary['confirmed']['Total'] = $confirmedTotal[0]->count;
$iotaSummary['worked']['Total'] = $workedTotal[0]->count;
$iotaSummary['confirmed']['Total'] = $confirmedTotal[0]->count;
return $iotaSummary;
}
function getSummaryByBand($band, $postdata, $location_list)
{
$sql = "SELECT count(distinct UPPER(thcv.col_iota)) as count FROM " . $this->config->item('table_name') . " thcv";
$sql .= ' join iota on thcv.col_iota = iota.tag';
$sql .= " where station_id in (" . $location_list . ")";
if ($band == 'SAT') {
$sql .= " and thcv.col_prop_mode ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
return $iotaSummary;
}
function getSummaryByBand($band, $postdata, $location_list) {
$sql = "SELECT count(distinct UPPER(thcv.col_iota)) as count FROM " . $this->config->item('table_name') . " thcv";
$sql .= ' join iota on thcv.col_iota = iota.tag';
$sql .= " where station_id in (" . $location_list . ")";
if ($band == 'SAT') {
$sql .= " and thcv.col_prop_mode ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
$bandslots = $this->bands->get_worked_bands('iota');
$bandslots_list = "'".implode("','",$bandslots)."'";
$sql .= " and thcv.col_band in (" . $bandslots_list . ")" .
" and thcv.col_prop_mode !='SAT'";
} else {
$sql .= " and thcv.col_prop_mode !='SAT'";
$sql .= " and thcv.col_band ='" . $band . "'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
$sql .= " and thcv.col_band in (" . $bandslots_list . ")";
$sql .= " and thcv.col_prop_mode !='SAT'";
} else {
$sql .= " and thcv.col_prop_mode !='SAT'";
$sql .= " and thcv.col_band ='" . $band . "'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
$sql .= $this->addContinentsToQuery($postdata);
$query = $this->db->query($sql);
return $query->result();
}
$sql .= $this->addContinentsToQuery($postdata);
$query = $this->db->query($sql);
return $query->result();
}
function getSummaryByBandConfirmed($band, $postdata, $location_list)
{
$sql = "SELECT count(distinct thcv.col_iota) as count FROM " . $this->config->item('table_name') . " thcv";
$sql .= ' join iota on thcv.col_iota = iota.tag';
$sql .= " where station_id in (" . $location_list . ")";
if ($band == 'SAT') {
$sql .= " and thcv.col_prop_mode ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
function getSummaryByBandConfirmed($band, $postdata, $location_list) {
$sql = "SELECT count(distinct thcv.col_iota) as count FROM " . $this->config->item('table_name') . " thcv";
$sql .= ' join iota on thcv.col_iota = iota.tag';
$sql .= " where station_id in (" . $location_list . ")";
if ($band == 'SAT') {
$sql .= " and thcv.col_prop_mode ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
$bandslots = $this->bands->get_worked_bands('iota');
$bandslots_list = "'".implode("','",$bandslots)."'";
$sql .= " and thcv.col_band in (" . $bandslots_list . ")" .
" and thcv.col_prop_mode !='SAT'";
} else {
$sql .= " and thcv.col_prop_mode !='SAT'";
$sql .= " and thcv.col_band ='" . $band . "'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
$sql .= " and thcv.col_band in (" . $bandslots_list . ")";
$sql .= " and thcv.col_prop_mode !='SAT'";
} else {
$sql .= " and thcv.col_prop_mode !='SAT'";
$sql .= " and thcv.col_band ='" . $band . "'";
}
if ($postdata['includedeleted'] == NULL) {
$sql .= " and coalesce(iota.status, '') <> 'D'";
}
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
$sql .= $this->addContinentsToQuery($postdata);
$sql .= $this->genfunctions->addQslToQuery($postdata);
log_message("Error",$sql);
$query = $this->db->query($sql);
$sql .= $this->addContinentsToQuery($postdata);
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
$query = $this->db->query($sql);
return $query->result();
}
return $query->result();
}
}
?>

View File

@@ -2,8 +2,13 @@
class Jcc_model extends CI_Model {
private $location_list=null;
function __construct() {
$this->load->library('Genfunctions');
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->location_list = "'".implode("','",$logbooks_locations_array)."'";
}
public $jaCities = array(
@@ -924,14 +929,6 @@ class Jcc_model extends CI_Model {
);
function get_jcc_array($bands, $postdata) {
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$jccArray = array_keys($this->jaCities);
@@ -951,14 +948,14 @@ class Jcc_model extends CI_Model {
}
if ($postdata['worked'] != NULL) {
$jccBand = $this->getJccWorked($location_list, $band, $postdata);
$jccBand = $this->getJccWorked($this->location_list, $band, $postdata);
foreach ($jccBand as $line) {
$bandJcc[$line->col_cnty][$band] = '<div class="bg-danger awardsBgDanger"><a href=\'javascript:displayContacts("' . $line->col_cnty . '","' . $band . '","All","All","'. $postdata['mode'] . '","JCC", "")\'>W</a></div>';
$cities[$line->col_cnty]['count']++;
}
}
if ($postdata['confirmed'] != NULL) {
$jccBand = $this->getJccConfirmed($location_list, $band, $postdata);
$jccBand = $this->getJccConfirmed($this->location_list, $band, $postdata);
foreach ($jccBand as $line) {
$bandJcc[$line->col_cnty][$band] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:displayContacts("' . $line->col_cnty . '","' . $band . '","All","All","'. $postdata['mode'] . '","JCC", "'.$qsl.'")\'>C</a></div>';
$cities[$line->col_cnty]['count']++;
@@ -968,7 +965,7 @@ class Jcc_model extends CI_Model {
// We want to remove the worked cities in the list, since we do not want to display them
if ($postdata['worked'] == NULL) {
$jccBand = $this->getJccWorked($location_list, $postdata['band'], $postdata);
$jccBand = $this->getJccWorked($this->location_list, $postdata['band'], $postdata);
foreach ($jccBand as $line) {
unset($bandJcc[$line->col_cnty]);
}
@@ -976,7 +973,7 @@ class Jcc_model extends CI_Model {
// We want to remove the confirmed cities in the list, since we do not want to display them
if ($postdata['confirmed'] == NULL) {
$wasBand = $this->getJccConfirmed($location_list, $postdata['band'], $postdata);
$wasBand = $this->getJccConfirmed($this->location_list, $postdata['band'], $postdata);
foreach ($wasBand as $line) {
unset($bandJcc[$line->col_cnty]);
}
@@ -994,8 +991,7 @@ class Jcc_model extends CI_Model {
if (isset($bandJcc)) {
return $bandJcc;
}
else {
} else {
return 0;
}
}
@@ -1006,7 +1002,6 @@ class Jcc_model extends CI_Model {
select col_dxcc from ".$this->config->item('table_name')." thcv
where station_id in (" . $location_list .
") and col_dxcc > 0";
$sql .= $this->genfunctions->addBandToQuery($band);
if ($postdata['mode'] != 'All') {
@@ -1014,7 +1009,6 @@ class Jcc_model extends CI_Model {
}
$sql .= $this->genfunctions->addQslToQuery($postdata);
$sql .= " group by col_dxcc
) x on dxcc_entities.adif = x.col_dxcc";
@@ -1065,9 +1059,7 @@ class Jcc_model extends CI_Model {
}
$sql .= $this->addStateToQuery();
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= " and not exists (select 1 from ". $this->config->item('table_name') .
" where station_id in (". $location_list . ")" .
" and col_cnty = thcv.col_cnty";
@@ -1077,11 +1069,8 @@ class Jcc_model extends CI_Model {
}
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= $this->genfunctions->addQslToQuery($postdata);
$sql .= $this->addStateToQuery();
$sql .= ")";
$query = $this->db->query($sql);
@@ -1116,35 +1105,25 @@ class Jcc_model extends CI_Model {
/*
* Function gets worked and confirmed summary on each band on the active stationprofile
*/
function get_jcc_summary($bands, $postdata)
{
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
function get_jcc_summary($bands, $postdata) {
foreach ($bands as $band) {
if ($band != 'SAT') {
$worked = $this->getSummaryByBand($band, $postdata, $location_list);
$confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list);
$worked = $this->getSummaryByBand($band, $postdata, $this->location_list);
$confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $this->location_list);
$jccSummary['worked'][$band] = $worked[0]->count;
$jccSummary['confirmed'][$band] = $confirmed[0]->count;
}
}
$workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list);
$confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list);
$workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $this->location_list);
$confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $this->location_list);
$jccSummary['worked']['Total'] = $workedTotal[0]->count;
$jccSummary['confirmed']['Total'] = $confirmedTotal[0]->count;
if (in_array('SAT', $bands)) {
$worked = $this->getSummaryByBand('SAT', $postdata, $location_list);
$confirmed = $this->getSummaryByBandConfirmed('SAT', $postdata, $location_list);
$worked = $this->getSummaryByBand('SAT', $postdata, $this->location_list);
$confirmed = $this->getSummaryByBandConfirmed('SAT', $postdata, $this->location_list);
$jccSummary['worked']['SAT'] = $worked[0]->count;
$jccSummary['confirmed']['SAT'] = $confirmed[0]->count;
}
@@ -1152,19 +1131,15 @@ class Jcc_model extends CI_Model {
return $jccSummary;
}
function getSummaryByBand($band, $postdata, $location_list)
{
function getSummaryByBand($band, $postdata, $location_list) {
$sql = "SELECT count(distinct thcv.col_cnty) as count FROM " . $this->config->item('table_name') . " thcv";
$sql .= " where station_id in (" . $location_list . ")";
if ($band == 'SAT') {
$sql .= " and thcv.col_prop_mode ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
$bandslots = $this->bands->get_worked_bands('was');
$bandslots_list = "'".implode("','",$bandslots)."'";
$sql .= " and thcv.col_band in (" . $bandslots_list . ")" .
@@ -1185,19 +1160,15 @@ class Jcc_model extends CI_Model {
return $query->result();
}
function getSummaryByBandConfirmed($band, $postdata, $location_list)
{
function getSummaryByBandConfirmed($band, $postdata, $location_list) {
$sql = "SELECT count(distinct thcv.col_cnty) as count FROM " . $this->config->item('table_name') . " thcv";
$sql .= " where station_id in (" . $location_list . ")";
if ($band == 'SAT') {
$sql .= " and thcv.col_prop_mode ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
$bandslots = $this->bands->get_worked_bands('was');
$bandslots_list = "'".implode("','",$bandslots)."'";
$sql .= " and thcv.col_band in (" . $bandslots_list . ")" .
@@ -1212,11 +1183,8 @@ class Jcc_model extends CI_Model {
}
$sql .= $this->genfunctions->addQslToQuery($postdata);
$sql .= $this->addStateToQuery();
$query = $this->db->query($sql);
return $query->result();
}
@@ -1230,17 +1198,8 @@ class Jcc_model extends CI_Model {
}
function exportJcc($postdata) {
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = "SELECT distinct col_cnty FROM " . $this->config->item('table_name') . " thcv
where station_id in (" . $location_list . ")";
where station_id in (" . $this->location_list . ")";
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
@@ -1259,7 +1218,7 @@ class Jcc_model extends CI_Model {
}
$qsos = array();
foreach($jccs as $jcc) {
$qso = $this->getFirstQso($location_list, $jcc, $postdata);
$qso = $this->getFirstQso($this->location_list, $jcc, $postdata);
$qsos[] = array('call' => $qso[0]->COL_CALL, 'date' => $qso[0]->COL_TIME_ON, 'band' => $qso[0]->COL_BAND, 'mode' => $qso[0]->COL_MODE, 'prop_mode' => $qso[0]->COL_PROP_MODE, 'cnty' => $qso[0]->COL_CNTY, 'jcc' => $this->jaCities[$qso[0]->COL_CNTY]['name']);
}
@@ -1282,7 +1241,8 @@ class Jcc_model extends CI_Model {
}
function fetch_jcc_wkd($postdata) {
$sql = 'SELECT DISTINCT `COL_CNTY` FROM '.$this->config->item('table_name').' WHERE 1';
$sql = 'SELECT DISTINCT `COL_CNTY` FROM '.$this->config->item('table_name').' WHERE 1
and station_id in ('.$this->location_list.')';
$sql .= $this->addStateToQuery();
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
if ($postdata['mode'] != 'All') {
@@ -1294,7 +1254,8 @@ class Jcc_model extends CI_Model {
}
function fetch_jcc_cnfm($postdata) {
$sql = 'SELECT DISTINCT `COL_CNTY` FROM '.$this->config->item('table_name').' WHERE 1';
$sql = 'SELECT DISTINCT `COL_CNTY` FROM '.$this->config->item('table_name').' WHERE 1
and station_id in ('.$this->location_list.')';
$sql .= $this->addStateToQuery();
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
if ($postdata['mode'] != 'All') {

View File

@@ -2,6 +2,19 @@
class Logbook_model extends CI_Model {
private $station_result=[];
public function __construct() {
$this->oop_populate_modes();
}
private $oop_modes=[];
private function oop_populate_modes() {
$r = $this->db->get('adif_modes');
foreach($r->result_array() as $row){
$this->oop_modes[$row['submode']][]=($row['mode'] ?? '');
}
}
/* Add QSO to Logbook */
function create_qso() {
@@ -400,6 +413,9 @@ class Logbook_model extends CI_Model {
$this->db->join('satellite', 'satellite.name = '.$this->config->item('table_name').'.col_sat_name', 'left outer');
}
switch ($type) {
case 'CALL':
$this->db->where('COL_CALL', $searchphrase);
break;
case 'DXCC':
$this->db->where('COL_COUNTRY', $searchphrase);
if ($band == 'SAT' && $type == 'DXCC') {
@@ -545,6 +561,9 @@ class Logbook_model extends CI_Model {
if (strpos($qsl, "Z") !== false) {
$qslfilter[] = 'COL_QRZCOM_QSO_DOWNLOAD_STATUS = "Y"';
}
if (strpos($qsl, "C") !== false) {
$qslfilter[] = 'COL_CLUBLOG_QSO_DOWNLOAD_STATUS = "Y"';
}
$sql = "(".implode(' OR ', $qslfilter).")";
$this->db->where($sql);
}
@@ -3372,8 +3391,14 @@ function lotw_last_qsl_date($user_id) {
function import_bulk($records, $station_id = "0", $skipDuplicate = false, $markClublog = false, $markLotw = false, $dxccAdif = false, $markQrz = false, $markHrd = false,$skipexport = false, $operatorName = false, $apicall = false, $skipStationCheck = false) {
$custom_errors='';
$a_qsos=[];
if (!$this->stations->check_station_is_accessible($station_id) && $apicall == false ) {
return 'Station not accessible<br>';
}
$station_id_ok = true;
$station_profile=$this->stations->profile_clean($station_id);
foreach ($records as $record) {
$one_error = $this->logbook_model->import($record, $station_id, $skipDuplicate, $markClublog, $markLotw,$dxccAdif, $markQrz, $markHrd, $skipexport, $operatorName, $apicall, $skipStationCheck, true);
$one_error = $this->logbook_model->import($record, $station_id, $skipDuplicate, $markClublog, $markLotw,$dxccAdif, $markQrz, $markHrd, $skipexport, $operatorName, $apicall, $skipStationCheck, true, $station_id_ok, $station_profile);
if ($one_error['error'] ?? '' != '') {
$custom_errors.=$one_error['error']."<br/>";
} else {
@@ -3395,14 +3420,18 @@ function lotw_last_qsl_date($user_id) {
* $markHrd - used in ADIF import to mark QSOs as exported to HRDLog.net Logbook when importing QSOs
* $skipexport - used in ADIF import to skip the realtime upload to QRZ Logbook when importing QSOs from ADIF
*/
function import($record, $station_id = "0", $skipDuplicate = false, $markClublog = false, $markLotw = false, $dxccAdif = false, $markQrz = false, $markHrd = false,$skipexport = false, $operatorName = false, $apicall = false, $skipStationCheck = false, $batchmode = false) {
function import($record, $station_id = "0", $skipDuplicate = false, $markClublog = false, $markLotw = false, $dxccAdif = false, $markQrz = false, $markHrd = false,$skipexport = false, $operatorName = false, $apicall = false, $skipStationCheck = false, $batchmode = false, $station_id_ok = false, $station_profile = null) {
// be sure that station belongs to user
$this->load->model('stations');
if (!$this->stations->check_station_is_accessible($station_id) && $apicall == false ) {
return 'Station not accessible<br>';
if ($station_id_ok == false) {
if (!$this->stations->check_station_is_accessible($station_id) && $apicall == false) {
return 'Station not accessible<br>';
}
}
$station_profile=$this->stations->profile_clean($station_id);
if ($station_profile == null) {
$station_profile=$this->stations->profile_clean($station_id);
}
$station_profile_call=$station_profile->station_callsign;
if (($station_id !=0 ) && (!(isset($record['station_callsign'])))) {
@@ -3414,7 +3443,6 @@ function lotw_last_qsl_date($user_id) {
return($returner);
}
$this->load->library('frequency');
$my_error = "";
// Join date+time
@@ -3994,15 +4022,17 @@ function lotw_last_qsl_date($user_id) {
// Collect field information from the station profile table thats required for the QSO.
if($station_id != "0") {
if (!(array_key_exists($station_id,$this->station_result))) {
$this->db->select('station_profile.*, dxcc_entities.name as station_country');
$this->db->where('station_id', $station_id);
$this->db->join('dxcc_entities', 'station_profile.station_dxcc = dxcc_entities.adif', 'left outer');
$station_result = $this->db->get('station_profile');
$this->station_result[$station_id] = $this->db->get('station_profile');
}
if ($station_result->num_rows() > 0){
if ($this->station_result[$station_id]->num_rows() > 0){
$data['station_id'] = $station_id;
$row = $station_result->row_array();
$row = $this->station_result[$station_id]->row_array();
if (strpos(trim($row['station_gridsquare']), ',') !== false) {
$data['COL_MY_VUCC_GRIDS'] = strtoupper(trim($row['station_gridsquare']));
@@ -4167,202 +4197,201 @@ function lotw_last_qsl_date($user_id) {
}
function get_main_mode_if_submode($mode) {
$this->db->select('mode');
$this->db->where('submode', $mode);
$query = $this->db->get('adif_modes');
if ($query->num_rows() > 0){
$row = $query->row_array();
return $row['mode'];
} else {
return null;
}
}
if (array_key_exists($mode,$this->oop_modes)) {
return($this->oop_modes[$mode][0]);
} else {
return null;
}
}
/*
* Check the dxxc_prefixes table and return (dxcc, country)
*/
public function check_dxcc_table($call, $date){
$csadditions = '/^T$|^P$|^R$|^A$|^M$/';
$csadditions = '/^T$|^P$|^R$|^A$|^M$/';
$dxcc_exceptions = $this->db->select('`entity`, `adif`, `cqz`, `cont`')
->where('call', $call)
->where('(start <= ', $date)
->or_where('start is null)', NULL, false)
->where('(end >= ', $date)
->or_where('end is null)', NULL, false)
->get('dxcc_exceptions');
$dxcc_exceptions = $this->db->select('`entity`, `adif`, `cqz`, `cont`')
->where('`call`', $call)
->where('(start <= ', $date)
->or_where('start is null)', NULL, false)
->where('(end >= ', $date)
->or_where('end is null)', NULL, false)
->get('dxcc_exceptions');
if ($dxcc_exceptions->num_rows() > 0){
$row = $dxcc_exceptions->row_array();
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont']);
}
if (preg_match('/(^KG4)[A-Z09]{3}/', $call)) { // KG4/ and KG4 5 char calls are Guantanamo Bay. If 4 or 6 char, it is USA
$call = "K";
} elseif (preg_match('/(^OH\/)|(\/OH[1-9]?$)/', $call)) { # non-Aland prefix!
$call = "OH"; # make callsign OH = finland
} elseif (preg_match('/(^CX\/)|(\/CX[1-9]?$)/', $call)) { # non-Antarctica prefix!
$call = "CX"; # make callsign CX = Uruguay
} elseif (preg_match('/(^3D2R)|(^3D2.+\/R)/', $call)) { # seems to be from Rotuma
$call = "3D2/R"; # will match with Rotuma
} elseif (preg_match('/^3D2C/', $call)) { # seems to be from Conway Reef
$call = "3D2/C"; # will match with Conway
} elseif (preg_match('/(^LZ\/)|(\/LZ[1-9]?$)/', $call)) { # LZ/ is LZ0 by DXCC but this is VP8h
$call = "LZ";
} elseif (preg_match('/(^KG4)[A-Z09]{2}/', $call)) {
$call = "KG4";
} elseif (preg_match('/(^KG4)[A-Z09]{1}/', $call)) {
$call = "K";
} elseif (preg_match('/\w\/\w/', $call)) {
if (preg_match_all('/^((\d|[A-Z])+\/)?((\d|[A-Z]){3,})(\/(\d|[A-Z])+)?(\/(\d|[A-Z])+)?$/', $call, $matches)) {
$prefix = $matches[1][0];
$callsign = $matches[3][0];
$suffix = $matches[5][0];
if ($prefix) {
$prefix = substr($prefix, 0, -1); # Remove the / at the end
}
if ($suffix) {
$suffix = substr($suffix, 1); # Remove the / at the beginning
};
if (preg_match($csadditions, $suffix)) {
if ($prefix) {
$call = $prefix;
} else {
$call = $callsign;
}
} else {
$result = $this->wpx($call, 1); # use the wpx prefix instead
if ($result == '') {
$row['adif'] = 0;
$row['entity'] = '- NONE -';
$row['cqz'] = 0;
$row['cont'] = '';
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont']);
} else {
$call = $result . "AA";
}
}
}
}
$len = strlen($call);
$dxcc_array=[];
// Fetch all candidates in one shot instead of looping
$dxcc_result=$this->db->query("SELECT `call`, `entity`, `adif`, `cqz`, `cont`
FROM `dxcc_prefixes`
WHERE ? like concat(`call`,'%')
and `call` like ?
AND (`start` <= ? OR start is null)
AND (`end` >= ? OR end is null) order by length(`call`) desc limit 1",array($call,substr($call,0,1).'%',$date,$date));
foreach($dxcc_result->result_array() as $row){
$dxcc_array[$row['call']]=$row;
}
// query the table, removing a character from the right until a match
for ($i = $len; $i > 0; $i--){
//printf("searching for %s\n", substr($call, 0, $i));
if (array_key_exists(substr($call,0,$i),$dxcc_array)) {
$row = $dxcc_array[substr($call,0,$i)];
// $row = $dxcc_result->row_array();
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont']);
}
}
return array("Not Found", "Not Found");
if ($dxcc_exceptions->num_rows() > 0){
$row = $dxcc_exceptions->row_array();
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont']);
}
if (preg_match('/(^KG4)[A-Z09]{3}/', $call)) { // KG4/ and KG4 5 char calls are Guantanamo Bay. If 4 or 6 char, it is USA
$call = "K";
} elseif (preg_match('/(^OH\/)|(\/OH[1-9]?$)/', $call)) { # non-Aland prefix!
$call = "OH"; # make callsign OH = finland
} elseif (preg_match('/(^CX\/)|(\/CX[1-9]?$)/', $call)) { # non-Antarctica prefix!
$call = "CX"; # make callsign CX = Uruguay
} elseif (preg_match('/(^3D2R)|(^3D2.+\/R)/', $call)) { # seems to be from Rotuma
$call = "3D2/R"; # will match with Rotuma
} elseif (preg_match('/^3D2C/', $call)) { # seems to be from Conway Reef
$call = "3D2/C"; # will match with Conway
} elseif (preg_match('/(^LZ\/)|(\/LZ[1-9]?$)/', $call)) { # LZ/ is LZ0 by DXCC but this is VP8h
$call = "LZ";
} elseif (preg_match('/(^KG4)[A-Z09]{2}/', $call)) {
$call = "KG4";
} elseif (preg_match('/(^KG4)[A-Z09]{1}/', $call)) {
$call = "K";
} elseif (preg_match('/\w\/\w/', $call)) {
if (preg_match_all('/^((\d|[A-Z])+\/)?((\d|[A-Z]){3,})(\/(\d|[A-Z])+)?(\/(\d|[A-Z])+)?$/', $call, $matches)) {
$prefix = $matches[1][0];
$callsign = $matches[3][0];
$suffix = $matches[5][0];
if ($prefix) {
$prefix = substr($prefix, 0, -1); # Remove the / at the end
}
if ($suffix) {
$suffix = substr($suffix, 1); # Remove the / at the beginning
};
if (preg_match($csadditions, $suffix)) {
if ($prefix) {
$call = $prefix;
} else {
$call = $callsign;
}
} else {
$result = $this->wpx($call, 1); # use the wpx prefix instead
if ($result == '') {
$row['adif'] = 0;
$row['entity'] = '- NONE -';
$row['cqz'] = 0;
$row['cont'] = '';
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont']);
} else {
$call = $result . "AA";
}
}
}
}
$len = strlen($call);
public function dxcc_lookup($call, $date) {
// query the table, removing a character from the right until a match
for ($i = $len; $i > 0; $i--){
//printf("searching for %s\n", substr($call, 0, $i));
$dxcc_result = $this->db->select('`call`, `entity`, `adif`, `cqz`, `cont`')
->where('call', substr($call, 0, $i))
->where('(start <= ', $date)
->or_where("start is null)", NULL, false)
->where('(end >= ', $date)
->or_where("end is null)", NULL, false)
->get('dxcc_prefixes');
$csadditions = '/^T$|^P$|^R$|^A$|^M$/';
//$dxcc_result = $this->db->query("select `call`, `entity`, `adif` from dxcc_prefixes where `call` = '".substr($call, 0, $i) ."'");
//print $this->db->last_query();
$dxcc_exceptions = $this->db->select('`entity`, `adif`, `cqz`,`cont`')
->where('`call`', $call)
->where('(start <= ', $date)
->or_where('start is null)', NULL, false)
->where('(end >= ', $date)
->or_where('end is null)', NULL, false)
->get('dxcc_exceptions');
if ($dxcc_exceptions->num_rows() > 0){
$row = $dxcc_exceptions->row_array();
return $row;
} else {
if ($dxcc_result->num_rows() > 0){
$row = $dxcc_result->row_array();
return array($row['adif'], $row['entity'], $row['cqz'], $row['cont']);
}
}
if (preg_match('/(^KG4)[A-Z09]{3}/', $call)) { // KG4/ and KG4 5 char calls are Guantanamo Bay. If 4 or 6 char, it is USA
$call = "K";
} elseif (preg_match('/(^OH\/)|(\/OH[1-9]?$)/', $call)) { # non-Aland prefix!
$call = "OH"; # make callsign OH = finland
} elseif (preg_match('/(^CX\/)|(\/CX[1-9]?$)/', $call)) { # non-Antarctica prefix!
$call = "CX"; # make callsign CX = Uruguay
} elseif (preg_match('/(^3D2R)|(^3D2.+\/R)/', $call)) { # seems to be from Rotuma
$call = "3D2/R"; # will match with Rotuma
} elseif (preg_match('/^3D2C/', $call)) { # seems to be from Conway Reef
$call = "3D2/C"; # will match with Conway
} elseif (preg_match('/(^LZ\/)|(\/LZ[1-9]?$)/', $call)) { # LZ/ is LZ0 by DXCC but this is VP8h
$call = "LZ";
} elseif (preg_match('/(^KG4)[A-Z09]{2}/', $call)) {
$call = "KG4";
} elseif (preg_match('/(^KG4)[A-Z09]{1}/', $call)) {
$call = "K";
} elseif (preg_match('/\w\/\w/', $call)) {
if (preg_match_all('/^((\d|[A-Z])+\/)?((\d|[A-Z]){3,})(\/(\d|[A-Z])+)?(\/(\d|[A-Z])+)?$/', $call, $matches)) {
$prefix = $matches[1][0];
$callsign = $matches[3][0];
$suffix = $matches[5][0];
if ($prefix) {
$prefix = substr($prefix, 0, -1); # Remove the / at the end
}
if ($suffix) {
$suffix = substr($suffix, 1); # Remove the / at the beginning
};
if (preg_match($csadditions, $suffix)) {
if ($prefix) {
$call = $prefix;
} else {
$call = $callsign;
}
} else {
$result = $this->wpx($call, 1); # use the wpx prefix instead
if ($result == '') {
$row['adif'] = 0;
$row['cont'] = '';
$row['entity'] = '- NONE -';
$row['cqz'] = 0;
$row['long'] = '0';
$row['lat'] = '0';
return $row;
} else {
$call = $result . "AA";
}
}
}
}
return array("Not Found", "Not Found");
$len = strlen($call);
$dxcc_array=[];
}
// Fetch all candidates in one shot instead of looping
$dxcc_result=$this->db->query("SELECT *
FROM `dxcc_prefixes`
WHERE ? like concat(`call`,'%')
and `call` like ?
AND (`start` <= ? OR start is null)
AND (`end` >= ? OR end is null) order by length(`call`) desc limit 1",array($call,substr($call,0,1).'%',$date,$date));
public function dxcc_lookup($call, $date){
foreach($dxcc_result->result_array() as $row){
$dxcc_array[$row['call']]=$row;
}
$csadditions = '/^T$|^P$|^R$|^A$|^M$/';
// query the table, removing a character from the right until a match
for ($i = $len; $i > 0; $i--){
//printf("searching for %s\n", substr($call, 0, $i));
if (array_key_exists(substr($call,0,$i),$dxcc_array)) {
$row = $dxcc_array[substr($call,0,$i)];
// $row = $dxcc_result->row_array();
return $row;
}
}
}
$dxcc_exceptions = $this->db->select('`entity`, `adif`, `cqz`,`cont`')
->where('call', $call)
->where('(start <= ', $date)
->or_where('start is null)', NULL, false)
->where('(end >= ', $date)
->or_where('end is null)', NULL, false)
->get('dxcc_exceptions');
if ($dxcc_exceptions->num_rows() > 0){
$row = $dxcc_exceptions->row_array();
return $row;
} else {
if (preg_match('/(^KG4)[A-Z09]{3}/', $call)) { // KG4/ and KG4 5 char calls are Guantanamo Bay. If 4 or 6 char, it is USA
$call = "K";
} elseif (preg_match('/(^OH\/)|(\/OH[1-9]?$)/', $call)) { # non-Aland prefix!
$call = "OH"; # make callsign OH = finland
} elseif (preg_match('/(^CX\/)|(\/CX[1-9]?$)/', $call)) { # non-Antarctica prefix!
$call = "CX"; # make callsign CX = Uruguay
} elseif (preg_match('/(^3D2R)|(^3D2.+\/R)/', $call)) { # seems to be from Rotuma
$call = "3D2/R"; # will match with Rotuma
} elseif (preg_match('/^3D2C/', $call)) { # seems to be from Conway Reef
$call = "3D2/C"; # will match with Conway
} elseif (preg_match('/(^LZ\/)|(\/LZ[1-9]?$)/', $call)) { # LZ/ is LZ0 by DXCC but this is VP8h
$call = "LZ";
} elseif (preg_match('/(^KG4)[A-Z09]{2}/', $call)) {
$call = "KG4";
} elseif (preg_match('/(^KG4)[A-Z09]{1}/', $call)) {
$call = "K";
} elseif (preg_match('/\w\/\w/', $call)) {
if (preg_match_all('/^((\d|[A-Z])+\/)?((\d|[A-Z]){3,})(\/(\d|[A-Z])+)?(\/(\d|[A-Z])+)?$/', $call, $matches)) {
$prefix = $matches[1][0];
$callsign = $matches[3][0];
$suffix = $matches[5][0];
if ($prefix) {
$prefix = substr($prefix, 0, -1); # Remove the / at the end
}
if ($suffix) {
$suffix = substr($suffix, 1); # Remove the / at the beginning
};
if (preg_match($csadditions, $suffix)) {
if ($prefix) {
$call = $prefix;
} else {
$call = $callsign;
}
} else {
$result = $this->wpx($call, 1); # use the wpx prefix instead
if ($result == '') {
$row['adif'] = 0;
$row['cont'] = '';
$row['entity'] = '- NONE -';
$row['cqz'] = 0;
$row['long'] = '0';
$row['lat'] = '0';
return $row;
} else {
$call = $result . "AA";
}
}
}
}
$len = strlen($call);
// query the table, removing a character from the right until a match
for ($i = $len; $i > 0; $i--){
//printf("searching for %s\n", substr($call, 0, $i));
$dxcc_result = $this->db->select('*')
->where('call', substr($call, 0, $i))
->where('(start <= ', $date)
->or_where("start is null)", NULL, false)
->where('(end >= ', $date)
->or_where("end is null)", NULL, false)
->get('dxcc_prefixes');
//$dxcc_result = $this->db->query("select `call`, `entity`, `adif` from dxcc_prefixes where `call` = '".substr($call, 0, $i) ."'");
//print $this->db->last_query();
if ($dxcc_result->num_rows() > 0){
$row = $dxcc_result->row_array();
return $row;
}
}
}
return array("Not Found", "Not Found");
return array("Not Found", "Not Found");
}
function wpx($testcall, $i) {
@@ -4513,41 +4542,33 @@ function lotw_last_qsl_date($user_id) {
}
public function check_missing_dxcc_id($all){
// get all records with no COL_DXCC
$this->db->select("COL_PRIMARY_KEY, COL_CALL, COL_TIME_ON, COL_TIME_OFF");
public function check_missing_dxcc_id($all) {
ini_set('memory_limit', '-1'); // This consumes a much 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
$this->db->select("COL_PRIMARY_KEY, COL_CALL, COL_TIME_ON, COL_TIME_OFF"); // get all records with no COL_DXCC
// check which to update - records with no dxcc or all records
if (!$all){
$this->db->where("COL_DXCC is NULL");
}
if (!$all) { // check which to update - records with no dxcc or all records
$this->db->where("COL_DXCC is NULL");
}
$r = $this->db->get($this->config->item('table_name'));
$r = $this->db->get($this->config->item('table_name'));
$count = 0;
$this->db->trans_start();
//query dxcc_prefixes
if ($r->num_rows() > 0){
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));
// Manual call
$d = $this->check_dxcc_table($row['COL_CALL'], $qso_date);
if ($d[0] != 'Not Found'){
$sql = sprintf("update %s set COL_COUNTRY = '%s', COL_DXCC='%s' where COL_PRIMARY_KEY=%d",
$this->config->item('table_name'), addslashes(ucwords(strtolower($d[1]), "- (/")), $d[0], $row['COL_PRIMARY_KEY']);
$this->db->query($sql);
//print($sql."\n");
// printf("Updating %s to %s and %s\n<br/>", $row['COL_PRIMARY_KEY'], ucwords(strtolower($d[1]), "- (/"), $d[0]);
$count++;
}
}
}
$this->db->trans_complete();
print("$count updated\n");
$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->check_dxcc_table($row['COL_CALL'], $qso_date);
if ($d[0] != 'Not Found'){
$q->execute(array(addslashes(ucwords(strtolower($d[1]), "- (/")), $d[0], $row['COL_PRIMARY_KEY']));
$count++;
}
}
}
$this->db->trans_complete();
print("$count updated\n");
}
public function check_missing_continent(){
@@ -4868,7 +4889,32 @@ function lotw_last_qsl_date($user_id) {
if ($row->COL_NAME != null) {
$plot['html'] .= "Name: ".$row->COL_NAME."<br />";
}
$plot['html'] .= "Date/Time: ".$row->COL_TIME_ON."<br />";
$date_cat = "Date";
// Get Date format
if($this->session->userdata('user_date_format')) {
// If Logged in and session exists
$user_date_format = $this->session->userdata('user_date_format');
} else {
// Get Default date format from /config/wavelog.php
$user_date_format = $this->config->item('qso_date_format');
}
$qso_time_on = new DateTime($row->COL_TIME_ON);
if ($this->uri->segment(1) == 'visitor') {
$visitor_date_format = $this->config->item('qso_date_format');
if ($this->config->item('show_time')) {
$visitor_date_format .= ' H:i';
$date_cat .= "/Time";
}
$qso_time_on = $qso_time_on->format($visitor_date_format);
} else {
$qso_time_on = $qso_time_on->format($user_date_format.' H:i');
$date_cat .= "/Time";
}
$plot['html'] .= $date_cat.": ".$qso_time_on."<br />";
$plot['html'] .= ($row->COL_SAT_NAME != null) ? ("SAT: ".$row->COL_SAT_NAME."<br />") : ("Band: ".$row->COL_BAND."<br />");
$plot['html'] .= "Mode: ".($row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE)."<br />";

View File

@@ -3,6 +3,13 @@ use Wavelog\QSLManager\QSO;
class Logbookadvanced_model extends CI_Model {
private $logbooks_locations_array;
public function __construct()
{
$this->load->model('logbooks_model');
$this->logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
}
public function searchDb($searchCriteria) {
$conditions = [];
$binding = [$searchCriteria['user_id']];
@@ -226,7 +233,7 @@ class Logbookadvanced_model extends CI_Model {
}
$sql = "
SELECT *, dxcc_entities.name as dxccname, mydxcc.name AS station_country, exists(select 1 from qsl_images where qsoid = qsos.COL_PRIMARY_KEY) as qslcount, contest.name as contestname
SELECT qsos.*, dxcc_entities.*, station_profile.*, satellite.*, dxcc_entities.name as dxccname, mydxcc.name AS station_country, exists(select 1 from qsl_images where qsoid = qsos.COL_PRIMARY_KEY) as qslcount, contest.name as contestname
FROM " . $this->config->item('table_name') . " qsos
INNER JOIN station_profile ON qsos.station_id=station_profile.station_id
LEFT OUTER JOIN satellite ON qsos.COL_SAT_NAME = satellite.name
@@ -436,18 +443,14 @@ class Logbookadvanced_model extends CI_Model {
}
function get_modes() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
if (!$this->logbooks_locations_array) {
return null;
}
$modes = array();
$this->db->select('distinct col_mode, coalesce(col_submode, "") col_submode', FALSE);
$this->db->where_in('station_id', $logbooks_locations_array);
$this->db->where_in('station_id', $this->logbooks_locations_array);
$this->db->order_by('col_mode, col_submode', 'ASC');
$query = $this->db->get($this->config->item('table_name'));
@@ -467,15 +470,11 @@ class Logbookadvanced_model extends CI_Model {
}
function getQslsForQsoIds($ids) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->db->select('*');
$this->db->from($this->config->item('table_name'));
$this->db->join('qsl_images', 'qsl_images.qsoid = ' . $this->config->item('table_name') . '.col_primary_key');
$this->db->where_in('qsoid', $ids);
$this->db->where_in('station_id', $logbooks_locations_array);
$this->db->where_in('station_id', $this->logbooks_locations_array);
$this->db->order_by("id", "desc");
return $this->db->get()->result();
@@ -542,7 +541,6 @@ class Logbookadvanced_model extends CI_Model {
", " . $this->config->item('table_name').".COL_FREQ_RX = ?" .
" WHERE " . $this->config->item('table_name').".col_primary_key in ? and station_profile.user_id = ?";
$this->load->library('frequency');
$frequencyBand = $this->frequency->defaultFrequencies[$value]['CW'];
$frequencyBandRx = $bandrx == '' ? null : $this->frequency->defaultFrequencies[$bandrx]['CW'];

View File

@@ -3,13 +3,12 @@
class Pota extends CI_Model {
function get_all() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
return null;
}
$this->load->model('bands');

View File

@@ -86,6 +86,7 @@ class Qslprint_model extends CI_Model {
$this->db->order_by("COL_BAND_RX", "ASC");
$this->db->order_by("COL_TIME_ON", "ASC");
$this->db->order_by("COL_MODE", "ASC");
$this->db->limit(1000);
$query = $this->db->get($this->config->item('table_name'));
return $query;
@@ -137,7 +138,7 @@ class Qslprint_model extends CI_Model {
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
// always filter user. this ensures that no inaccesible QSOs will be returned
$this->db->where('station_profile.user_id', $this->session->userdata('user_id'));
$this->db->where('COL_CALL like "%/'.$callsign.'/%" OR COL_CALL like "%/'.$callsign.'" OR COL_CALL like "'.$callsign.'/%" OR COL_CALL = "'.$callsign.'"');
$this->db->where('(COL_CALL like "%/'.$callsign.'/%" OR COL_CALL like "%/'.$callsign.'" OR COL_CALL like "'.$callsign.'/%" OR COL_CALL = "'.$callsign.'")');
$this->db->where('coalesce(COL_QSL_SENT, "") not in ("R", "Q")');
$this->db->order_by("COL_DXCC", "ASC");
$this->db->order_by("COL_CALL", "ASC");

View File

@@ -3,13 +3,12 @@
class Sota extends CI_Model {
function get_all() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
return null;
}
$this->load->model('bands');

View File

@@ -2,6 +2,10 @@
class Stations extends CI_Model {
public function __construct() {
}
function all_with_count() {
$this->db->select('station_profile.*, dxcc_entities.name as station_country, dxcc_entities.end as dxcc_end, count('.$this->config->item('table_name').'.station_id) as qso_total');

View File

@@ -151,8 +151,8 @@ class User_Model extends CI_Model {
$user_show_profile_image, $user_previous_qsl_type, $user_amsat_status_upload, $user_mastodon_url,
$user_default_band, $user_default_confirmation, $user_qso_end_times, $user_quicklog, $user_quicklog_enter,
$language, $user_hamsat_key, $user_hamsat_workable_only, $user_iota_to_qso_tab, $user_sota_to_qso_tab,
$user_wwff_to_qso_tab, $user_pota_to_qso_tab, $user_sig_to_qso_tab, $user_dok_to_qso_tab,
$user_lotw_name, $user_lotw_password, $user_eqsl_name, $user_eqsl_password, $user_clublog_name, $user_clublog_password,
$user_wwff_to_qso_tab, $user_pota_to_qso_tab, $user_sig_to_qso_tab, $user_dok_to_qso_tab,
$user_lotw_name, $user_lotw_password, $user_eqsl_name, $user_eqsl_password, $user_clublog_name, $user_clublog_password,
$user_winkey) {
// Check that the user isn't already used
if(!$this->exists($username)) {
@@ -403,9 +403,11 @@ class User_Model extends CI_Model {
// FUNCTION: void update_session()
// Updates a user's login session after they've logged in
// TODO: This should return bool TRUE/FALSE or 0/1
function update_session($id) {
function update_session($id, $u = null) {
$u = $this->get_by_id($id);
if ($u == null) {
$u = $this->get_by_id($id);
}
$userdata = array(
'user_id' => $u->row()->user_id,
@@ -455,7 +457,7 @@ class User_Model extends CI_Model {
// FUNCTION: bool validate_session()
// Validate a user's login session
// If the user's session is corrupted in any way, it will clear the session
function validate_session() {
function validate_session($u = null) {
if($this->session->userdata('user_id'))
{
@@ -466,7 +468,7 @@ class User_Model extends CI_Model {
if(ENVIRONMENT != 'maintenance') {
if($this->_auth($user_id."-".$user_type, $user_hash)) {
// Freshen the session
$this->update_session($user_id);
$this->update_session($user_id, $u);
return 1;
} else {
$this->clear_session();
@@ -476,7 +478,7 @@ class User_Model extends CI_Model {
if($user_type == '99') {
if($this->_auth($user_id."-".$user_type, $user_hash)) {
// Freshen the session
$this->update_session($user_id);
$this->update_session($user_id, $u);
return 1;
} else {
$this->clear_session();
@@ -533,8 +535,13 @@ class User_Model extends CI_Model {
if($this->config->item('auth_mode') > $level) {
$level = $this->config->item('auth_mode');
}
if(($this->validate_session()) && ($u->row()->user_type >= $level) || $this->config->item('use_auth') == FALSE || $level == 0) {
$this->set_last_seen($u->row()->user_id);
if(($this->validate_session($u)) && ($u->row()->user_type >= $level) || $this->config->item('use_auth') == FALSE || $level == 0) {
$ls = strtotime($u->row()->last_seen ?? '1970-01-01');
$n = time();
if (($n - $ls) > 60) { // Reduce load. 'set_last_seen()' Shouldn't be called at anytime. 60 seconds diff is enough.
$this->set_last_seen($u->row()->user_id);
}
return 1;
} else {
return 0;

View File

@@ -2,6 +2,14 @@
class VUCC extends CI_Model
{
private $logbooks_locations_array;
public function __construct()
{
$this->load->model('logbooks_model');
$this->logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
}
/*
* Fetches worked and confirmed gridsquare on each band and total
*/
@@ -100,15 +108,12 @@ class VUCC extends CI_Model
* $confirmationMethod - qsl, lotw or both, use anything else to skip confirmed
*/
function get_vucc_summary_col_vucc($band, $confirmationMethod) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
if (!$this->logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'".implode("','",$this->logbooks_locations_array)."'";
$sql = "select distinct col_vucc_grids
from " . $this->config->item('table_name') .
@@ -144,15 +149,11 @@ class VUCC extends CI_Model
* $confirmationMethod - qsl, lotw or both, use anything else to skip confirmed
*/
function get_vucc_summary($band, $confirmationMethod) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
if (!$this->logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$location_list = "'".implode("','",$this->logbooks_locations_array)."'";
$sql = "select distinct upper(substring(log.col_gridsquare, 1, 4)) gridsquare
from " . $this->config->item('table_name') . " log".
@@ -252,8 +253,7 @@ class VUCC extends CI_Model
}
}
foreach ($workedGridArray as $grid) {
$this->load->model('logbook_model');
$result = $this->logbook_model->vucc_qso_details($grid, $band);
$result = $this->grid_detail($grid, $band);
$callsignlist = '';
foreach($result->result() as $call) {
$callsignlist .= $call->COL_CALL . '<br/>';
@@ -268,6 +268,25 @@ class VUCC extends CI_Model
}
}
function grid_detail($gridsquare, $band) {
$location_list = "'".implode("','",$this->logbooks_locations_array)."'";
$sql = "select COL_CALL from " . $this->config->item('table_name') .
" where station_id in (" . $location_list . ")" .
" and (col_gridsquare like '" . $gridsquare. "%'
or col_vucc_grids like '%" . $gridsquare. "%')";
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
} else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $band . "'";
}
}
return $this->db->query($sql);
}
function markConfirmedGrids($band, $workedGridArray) {
foreach ($workedGridArray as $grid) {
$vuccBand[$grid]['qsl'] = '';

View File

@@ -6,13 +6,13 @@ class Wab extends CI_Model {
$this->load->library('Genfunctions');
}
function get_wab_array($band, $location_list, $mode, $qsl, $lotw, $eqsl, $qrz, $sat, $orbit) {
function get_wab_array($location_list, $postdata) { // $mode, $qsl, $lotw, $eqsl, $qrz, $clublog, $sat, $orbit) {
$worked = array();
$confirmed = array();
$worked = $this->getWabWorked($location_list, $band, $mode, $sat, $orbit);
$worked = $this->getWabWorked($location_list, $postdata);
$confirmed = $this->getWabConfirmed($location_list, $band, $mode, $qsl, $lotw, $eqsl, $qrz, $sat, $orbit);
$confirmed = $this->getWabConfirmed($location_list, $postdata);
$wabarray = array();
@@ -38,15 +38,15 @@ class Wab extends CI_Model {
}
return $wabarray;
}
}
function get_wab_list($band, $location_list, $mode, $qsl, $lotw, $eqsl, $qrz, $sat, $orbit) {
function get_wab_list($location_list, $postdata) {
$worked = array();
$confirmed = array();
$worked = $this->getWabWorked($location_list, $band, $mode, $sat, $orbit);
$worked = $this->getWabWorked($location_list, $postdata);
$confirmed = $this->getWabConfirmed($location_list, $band, $mode, $qsl, $lotw, $eqsl, $qrz, $sat, $orbit);
$confirmed = $this->getWabConfirmed($location_list, $postdata);
$wabarray = array();
@@ -74,91 +74,62 @@ class Wab extends CI_Model {
ksort($wabarray);
return $wabarray;
}
}
/*
* Function returns all worked, but not confirmed states
* $postdata contains data from the form, in this case Lotw or QSL are used
*/
function getWabWorked($location_list, $band, $mode, $sat, $orbit) {
$sql = "SELECT distinct col_sig_info FROM " . $this->config->item('table_name') . " thcv
where station_id in (" . $location_list . ") and col_sig = 'WAB' and coalesce(col_sig_info, '') <> ''";
/*
* Function returns all worked, but not confirmed states
* $postdata contains data from the form, in this case Lotw or QSL are used
*/
function getWabWorked($location_list, $postdata) { // $mode, $sat, $orbit) {
$sql = "SELECT distinct col_sig_info FROM " . $this->config->item('table_name') . " thcv
where station_id in (" . $location_list . ") and col_sig = 'WAB' and coalesce(col_sig_info, '') <> ''";
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
if ($band == 'SAT') {
if ($sat != 'All') {
$sql .= " and col_sat_name ='" . $sat . "'";
if ($postdata['band'] == 'SAT') {
if ($postdata['sat'] != 'All') {
$sql .= " and col_sat_name ='" . $postdata['sat'] . "'";
}
}
if ($mode != 'All') {
$sql .= " and (col_mode = '" . $mode . "' or col_submode = '" . $mode . "')";
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
$sql .= $this->addOrbitToQuery($orbit);
$sql .= $this->addOrbitToQuery($postdata['orbit']);
$query = $this->db->query($sql);
$query = $this->db->query($sql);
return $query->result();
}
return $query->result();
}
/*
* Function returns all confirmed states on given band and on LoTW or QSL
* $postdata contains data from the form, in this case Lotw or QSL are used
*/
function getWabConfirmed($location_list, $band, $mode, $qsl, $lotw, $eqsl, $qrz, $sat, $orbit) {
$sql = "SELECT distinct col_sig_info FROM " . $this->config->item('table_name') . " thcv
where station_id in (" . $location_list . ") and col_sig = 'WAB' and coalesce(col_sig_info, '') <> ''";
/*
* Function returns all confirmed states on given band and on LoTW or QSL
* $postdata contains data from the form, in this case Lotw or QSL are used
*/
function getWabConfirmed($location_list, $postdata) { // $mode, $qsl, $lotw, $eqsl, $qrz, $clublog, $sat, $orbit) {
$sql = "SELECT distinct col_sig_info FROM " . $this->config->item('table_name') . " thcv
where station_id in (" . $location_list . ") and col_sig = 'WAB' and coalesce(col_sig_info, '') <> ''";
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= $this->genfunctions->addBandToQuery($postdata['band']);
if ($band == 'SAT') {
if ($sat != 'All') {
$sql .= " and col_sat_name ='" . $sat . "'";
if ($postdata['band'] == 'SAT') {
if ($postdata['sat'] != 'All') {
$sql .= " and col_sat_name ='" . $postdata['sat'] . "'";
}
}
if ($mode != 'All') {
$sql .= " and (col_mode = '" . $mode . "' or col_submode = '" . $mode . "')";
if ($postdata['mode'] != 'All') {
$sql .= " and (col_mode = '" . $postdata['mode'] . "' or col_submode = '" . $postdata['mode'] . "')";
}
$sql .= $this->addOrbitToQuery($orbit);
$sql .= $this->addOrbitToQuery($postdata['orbit']);
$sql .= $this->addQslToQuery($qsl, $lotw, $eqsl, $qrz);
$sql .= $this->genfunctions->addQslToQuery($postdata);
$query = $this->db->query($sql);
$query = $this->db->query($sql);
return $query->result();
}
function addQslToQuery($qsl, $lotw, $eqsl, $qrz) {
$sql = '';
$qslarray = array();
if ($qrz != NULL || $lotw != NULL || $qsl != NULL || $eqsl != NULL) {
$sql .= ' and (';
if ($qsl != NULL) {
array_push($qslarray, "col_qsl_rcvd = 'Y'");
}
if ($lotw != NULL) {
array_push($qslarray, "col_lotw_qsl_rcvd = 'Y'");
}
if ($eqsl != NULL) {
array_push($qslarray, "col_eqsl_qsl_rcvd = 'Y'");
}
if ($qrz != NULL) {
array_push($qslarray, "COL_QRZCOM_QSO_DOWNLOAD_STATUS = 'Y'");
}
if (count($qslarray) > 0) {
$sql .= implode(' or ', $qslarray);
} else {
$sql .= '1=0';
}
$sql .= ')';
} else {
$sql.=' and 1=0';
}
return $sql;
return $query->result();
}
// Adds orbit type to query

View File

@@ -2,8 +2,12 @@
class WAJA extends CI_Model {
private $location_list=null;
function __construct() {
$this->load->library('Genfunctions');
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->location_list = "'".implode("','",$logbooks_locations_array)."'";
}
public $jaPrefectures = array(
@@ -56,15 +60,6 @@ class WAJA extends CI_Model {
'47' => 'Okinawa');
function get_waja_array($bands, $postdata) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$wajaArray = array_keys($this->jaPrefectures);
@@ -84,14 +79,14 @@ class WAJA extends CI_Model {
}
if ($postdata['worked'] != NULL) {
$wajaBand = $this->getWajaWorked($location_list, $band, $postdata);
$wajaBand = $this->getWajaWorked($this->location_list, $band, $postdata);
foreach ($wajaBand as $line) {
$bandWaja[$line->col_state][$band] = '<div class="bg-danger awardsBgDanger"><a href=\'javascript:displayContacts("' . $line->col_state . '","' . $band . '","All","All","'. $postdata['mode'] . '","WAJA", "")\'>W</a></div>';
$prefectures[$line->col_state]['count']++;
}
}
if ($postdata['confirmed'] != NULL) {
$wajaBand = $this->getWajaConfirmed($location_list, $band, $postdata);
$wajaBand = $this->getWajaConfirmed($this->location_list, $band, $postdata);
foreach ($wajaBand as $line) {
$bandWaja[$line->col_state][$band] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:displayContacts("' . $line->col_state . '","' . $band . '","All","All","'. $postdata['mode'] . '","WAJA", "'.$qsl.'")\'>C</a></div>';
$prefectures[$line->col_state]['count']++;
@@ -101,7 +96,7 @@ class WAJA extends CI_Model {
// We want to remove the worked states in the list, since we do not want to display them
if ($postdata['worked'] == NULL) {
$wajaBand = $this->getWajaWorked($location_list, $postdata['band'], $postdata);
$wajaBand = $this->getWajaWorked($this->location_list, $postdata['band'], $postdata);
foreach ($wajaBand as $line) {
unset($bandWaja[$line->col_state]);
}
@@ -109,8 +104,8 @@ class WAJA extends CI_Model {
// We want to remove the confirmed states in the list, since we do not want to display them
if ($postdata['confirmed'] == NULL) {
$wasBand = $this->getWajaConfirmed($location_list, $postdata['band'], $postdata);
foreach ($wasBand as $line) {
$wajaBand = $this->getWajaConfirmed($this->location_list, $postdata['band'], $postdata);
foreach ($wajaBand as $line) {
unset($bandWaja[$line->col_state]);
}
}
@@ -125,8 +120,7 @@ class WAJA extends CI_Model {
if (isset($bandWaja)) {
return $bandWaja;
}
else {
} else {
return 0;
}
}
@@ -196,7 +190,6 @@ class WAJA extends CI_Model {
}
$sql .= $this->addStateToQuery();
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= " and not exists (select 1 from ". $this->config->item('table_name') .
@@ -208,13 +201,9 @@ class WAJA extends CI_Model {
}
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= $this->genfunctions->addQslToQuery($postdata);
$sql .= $this->addStateToQuery();
$sql .= ")";
$query = $this->db->query($sql);
return $query->result();
@@ -233,41 +222,26 @@ class WAJA extends CI_Model {
}
$sql .= $this->addStateToQuery();
$sql .= $this->genfunctions->addBandToQuery($band);
$sql .= $this->genfunctions->addQslToQuery($postdata);
$query = $this->db->query($sql);
return $query->result();
}
/*
* Function gets worked and confirmed summary on each band on the active stationprofile
*/
function get_waja_summary($bands, $postdata)
{
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
function get_waja_summary($bands, $postdata) {
foreach ($bands as $band) {
$worked = $this->getSummaryByBand($band, $postdata, $location_list);
$confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list);
$worked = $this->getSummaryByBand($band, $postdata, $this->location_list);
$confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $this->location_list);
$wajaSummary['worked'][$band] = $worked[0]->count;
$wajaSummary['confirmed'][$band] = $confirmed[0]->count;
}
$workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list);
$confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list);
$workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $this->location_list);
$confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $this->location_list);
$wajaSummary['worked']['Total'] = $workedTotal[0]->count;
$wajaSummary['confirmed']['Total'] = $confirmedTotal[0]->count;
@@ -275,10 +249,8 @@ class WAJA extends CI_Model {
return $wajaSummary;
}
function getSummaryByBand($band, $postdata, $location_list)
{
function getSummaryByBand($band, $postdata, $location_list) {
$sql = "SELECT count(distinct thcv.col_state) as count FROM " . $this->config->item('table_name') . " thcv";
$sql .= " where station_id in (" . $location_list . ")";
if ($band == 'SAT') {
@@ -286,12 +258,12 @@ class WAJA extends CI_Model {
} else if ($band == 'All') {
$this->load->model('bands');
$bandslots = $this->bands->get_worked_bands('was');
$bandslots = $this->bands->get_worked_bands('waja');
$bandslots_list = "'".implode("','",$bandslots)."'";
$sql .= " and thcv.col_band in (" . $bandslots_list . ")" .
" and thcv.col_prop_mode !='SAT'";
$sql .= " and thcv.col_band in (" . $bandslots_list . ")";
$sql .= " and thcv.col_prop_mode !='SAT'";
} else {
$sql .= " and thcv.col_prop_mode !='SAT'";
$sql .= " and thcv.col_band ='" . $band . "'";
@@ -308,23 +280,18 @@ class WAJA extends CI_Model {
return $query->result();
}
function getSummaryByBandConfirmed($band, $postdata, $location_list)
{
function getSummaryByBandConfirmed($band, $postdata, $location_list) {
$sql = "SELECT count(distinct thcv.col_state) as count FROM " . $this->config->item('table_name') . " thcv";
$sql .= " where station_id in (" . $location_list . ")";
if ($band == 'SAT') {
$sql .= " and thcv.col_prop_mode ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
$bandslots = $this->bands->get_worked_bands('was');
$bandslots = $this->bands->get_worked_bands('waja');
$bandslots_list = "'".implode("','",$bandslots)."'";
$sql .= " and thcv.col_band in (" . $bandslots_list . ")" .
" and thcv.col_prop_mode !='SAT'";
$sql .= " and thcv.col_band in (" . $bandslots_list . ")";
$sql .= " and thcv.col_prop_mode !='SAT'";
} else {
$sql .= " and thcv.col_prop_mode !='SAT'";
$sql .= " and thcv.col_band ='" . $band . "'";
@@ -335,9 +302,7 @@ class WAJA extends CI_Model {
}
$sql .= $this->genfunctions->addQslToQuery($postdata);
$sql .= $this->addStateToQuery();
$query = $this->db->query($sql);
return $query->result();

View File

@@ -3,13 +3,12 @@
class Wwff extends CI_Model {
function get_all() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('logbooks_model');
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
return null;
}
$this->load->model('bands');

View File

@@ -1,4 +0,0 @@
<div class="container">
<h5><?php echo lang('general_word_filtering_on'); ?> <?php echo $filter ?></h5>
<?php $this->load->view('view_log/partial/log_ajax') ?>

View File

@@ -3,59 +3,59 @@
<form class="form" action="<?php echo site_url('activators'); ?>" method="post" enctype="multipart/form-data">
<!-- Select Basic -->
<div class="mb-3 row">
<label class="col-md-1 control-label" for="band"><?php echo lang('gen_hamradio_band'); ?></label>
<div class="col-md-3">
<select id="band" name="band" class="form-select">
<option value="All" <?php if ($this->input->post('band') == "All" || $this->input->method() !== 'post') echo ' selected'; ?> ><?php echo lang('general_word_all'); ?></option>
<?php foreach($worked_bands as $band) {
echo '<option value="' . $band . '"';
if ($this->input->post('band') == $band) echo ' selected';
echo '>' . $band . '</option>'."\n";
} ?>
</select>
</div>
</div>
<div class="mb-3 row" id="leogeo">
<label class="col-md-1 control-label" for="leogeo">LEO/GEO</label>
<div class="col-md-3">
<select id="leogeo" name="leogeo" class="form-select">
<option value="both" <?php if ($this->input->post('leogeo') == "both" || $this->input->method() !== 'post') echo ' selected'; ?> >Both</option>
<option value="leo" <?php if ($this->input->post('leogeo') == "leo") echo ' selected'; ?>>LEO</option>
<option value="geo" <?php if ($this->input->post('leogeo') == "geo") echo ' selected'; ?>>GEO</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label class="col-md-1 control-label" for="mincount"><?php echo lang('gridsquares_minimum_count'); ?></label>
<div class="col-md-3">
<select id="mincount" name="mincount" class="form-select">
<?php
$i = 1;
do {
echo '<option value="'.$i.'"';
if ($this->input->post('mincount') == $i || ($this->input->method() !== 'post' && $i == 2)) echo ' selected';
echo '>'.$i.'</option>'."\n";
$i++;
} while ($i <= $maxactivatedgrids);
?>
</select>
</div>
</div>
<div class="mb-3 row">
<label class="col-md-1 control-label" for="button1id"></label>
<div class="col-md-10">
<button id="button1id" type="submit" name="button1id" class="btn btn-primary"><?php echo lang('filter_options_show'); ?></button>
</div>
<div class="mb-3 row">
<label class="col-md-1 control-label" for="band"><?php echo lang('gen_hamradio_band'); ?></label>
<div class="col-md-3">
<select id="band" name="band" class="form-select">
<option value="All" <?php if ($bandselect == "All") echo ' selected'; ?>><?php echo lang('general_word_all'); ?></option>
<?php foreach ($worked_bands as $band) {
echo '<option value="' . $band . '"';
if ($bandselect == $band) echo ' selected';
echo '>' . $band . '</option>' . "\n";
} ?>
</select>
</div>
</div>
<div class="mb-3 row" id="leogeo" style="display: none;">
<label class="col-md-1 control-label" for="leogeo">LEO/GEO</label>
<div class="col-md-3">
<select id="leogeo" name="leogeo" class="form-select">
<option value="both" <?php if ($orbit == 'both') echo ' selected'; ?>>Both</option>
<option value="leo" <?php if ($orbit == 'leo') echo ' selected'; ?>>LEO</option>
<option value="geo" <?php if ($orbit == 'geo') echo ' selected'; ?>>GEO</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label class="col-md-1 control-label" for="mincount"><?php echo lang('gridsquares_minimum_count'); ?></label>
<div class="col-md-3">
<select id="mincount" name="mincount" class="form-select">
<?php
$i = 1;
do {
echo '<option value="' . $i . '"';
if ($mincount == $i) echo ' selected';
echo '>' . $i . '</option>' . "\n";
$i++;
} while ($i <= $maxactivatedgrids);
?>
</select>
</div>
</div>
<div class="mb-3 row">
<label class="col-md-1 control-label" for="button1id"></label>
<div class="col-md-10">
<button id="button1id" type="submit" name="button1id" class="btn btn-primary"><?php echo lang('filter_options_show'); ?></button>
</div>
</div>
</form>
<?php
<?php
// Get Date format
if($this->session->userdata('user_date_format')) {
if ($this->session->userdata('user_date_format')) {
// If Logged in and session exists
$custom_date_format = $this->session->userdata('user_date_format');
} else {
@@ -63,21 +63,18 @@
$custom_date_format = $this->config->item('qso_date_format');
}
?>
<?php
<?php
$vucc_grids = array();
if ($activators_vucc_array) {
foreach ($activators_vucc_array as $line) {
$vucc_grids[$line->call] = $line->vucc_grids;
}
foreach ($activators_vucc_array as $line) {
$vucc_grids[$line->call] = $line->vucc_grids;
}
}
if( $this->input->post('band') != NULL) {
if ($activators_array) {
if ($activators_array) {
$result = write_activators($activators_array, $vucc_grids, $custom_date_format, $this->input->post('band'), $this->input->post('leogeo'));
}
else {
echo '<div class="alert alert-danger" role="alert">Nothing found!</div>';
}
$result = write_activators($activators_array, $vucc_grids, $custom_date_format, $bandselect, $orbit);
} else {
echo '<div class="alert alert-danger" role="alert">Nothing found!</div>';
}
?>
@@ -86,12 +83,13 @@
<?php
function write_activators($activators_array, $vucc_grids, $custom_date_format, $band, $leogeo) {
function write_activators($activators_array, $vucc_grids, $custom_date_format, $band, $leogeo)
{
if ($band == '') {
$band = 'All';
$band = 'All';
}
if ($leogeo == '') {
$leogeo = 'both';
$leogeo = 'both';
}
$i = 1;
echo '<table style="width:100%" class="table table-sm activatorstable table-bordered table-hover table-striped table-condensed text-center">
@@ -113,16 +111,16 @@ function write_activators($activators_array, $vucc_grids, $custom_date_format, $
$grids = $line->grids;
$count = $line->count;
if (array_key_exists($line->call, $vucc_grids)) {
foreach(explode(',', $vucc_grids[$line->call]) as $vgrid) {
if(!strpos($grids, $vgrid)) {
$grids .= ','.$vgrid;
}
}
$grids = str_replace(' ', '', $grids);
$grid_array = explode(',', $grids);
sort($grid_array);
$count = count($grid_array);
$grids = implode(', ', $grid_array);
foreach (explode(',', $vucc_grids[$line->call]) as $vgrid) {
if (!strpos($grids, $vgrid)) {
$grids .= ',' . $vgrid;
}
}
$grids = str_replace(' ', '', $grids);
$grid_array = explode(',', $grids);
sort($grid_array);
$count = count($grid_array);
$grids = implode(', ', $grid_array);
}
array_push($activators, array($count, $call, $grids));
}
@@ -130,11 +128,11 @@ function write_activators($activators_array, $vucc_grids, $custom_date_format, $
foreach ($activators as $line) {
echo '<tr>
<td>' . $i++ . '</td>
<td>'.$line[1].'</td>
<td>'.$line[0].'</td>
<td style="text-align: left; font-family: monospace;">'.$line[2].'</td>
<td><a href=javascript:displayActivatorsContacts("'.$line[1].'","'.$band.'","'.$leogeo.'")><i class="fas fa-list"></i></a></td>
<td><a href=javascript:spawnActivatorsMap("'.$line[1].'","'.$line[0].'","'.str_replace(' ', '', $line[2]).'")><i class="fas fa-globe"></i></a></td>
<td>' . $line[1] . '</td>
<td>' . $line[0] . '</td>
<td style="text-align: left; font-family: monospace;">' . $line[2] . '</td>
<td><a href=javascript:displayActivatorsContacts("' . $line[1] . '","' . $band . '","' . $leogeo . '")><i class="fas fa-list"></i></a></td>
<td><a href=javascript:spawnActivatorsMap("' . $line[1] . '","' . $line[0] . '","' . str_replace(' ', '', $line[2]) . '")><i class="fas fa-globe"></i></a></td>
</tr>';
}
echo '</tfoot></table></div>';

View File

@@ -5,9 +5,7 @@ Wavelog ADIF export
<EOH>
<?php
$CI =& get_instance();
$CI->load->library('AdifHelper');
foreach ($qsos->result() as $qso) {
echo $CI->adifhelper->getAdifLine($qso);
echo $this->adifhelper->getAdifLine($qso);
}

View File

@@ -61,7 +61,7 @@
<select name="station_profile" class="form-select mb-2 me-sm-2" style="width: 20%;">
<option value="0"><?php echo lang('adif_select_stationlocation') ?></option>
<?php foreach ($station_profile->result() as $station) { ?>
<option value="<?php echo $station->station_id; ?>" <?php if ($station->station_id == $this->stations->find_active()) {
<option value="<?php echo $station->station_id; ?>" <?php if ($station->station_id == $active_station_id) {
echo " selected =\"selected\"";
} ?>><?php echo lang('gen_hamradio_callsign') . ": " ?><?php echo $station->station_callsign; ?> (<?php echo $station->station_profile_name; ?>)</option>
<?php } ?>
@@ -69,7 +69,7 @@
<div class="small form-text text-muted"><?php echo lang('gen_add_to_contest') ?></div>
<select name="contest" id="contest" class="form-select mb-2 me-sm-2" style="width: 20%;">
<option value="" selected>No Contest</option>
<?php
<?php
foreach ($contests as $contest) {
echo '<option value="'.$contest['adifname'].'">'.$contest['name'].'</option>';
} ?>
@@ -172,7 +172,7 @@
} ?>><?php echo lang('gen_hamradio_callsign') . ": " ?><?php echo $station->station_callsign; ?> (<?php echo $station->station_profile_name; ?>)</option>
<?php } ?>
</select>
<br>
<br>
<label for="from"><?php echo lang('gen_from_date') . ": " ?></label>
<input name="from" id="from" type="date" class="form-control w-auto">
<br>
@@ -218,7 +218,7 @@
<?php } ?>
</select>
<p><span class="badge text-bg-warning"><?php echo lang('general_word_warning') ?></span> <?php echo lang('adif_lotw_export_if_selected') ?></p>
<br>
<br>
<label for="from"><?php echo lang('gen_from_date') . ": " ?></label>
<input name="from" id="from" type="date" class="form-control w-auto">
<br>

View File

@@ -66,6 +66,10 @@
<input class="form-check-input" type="checkbox" name="qrz" value="1" id="qrz" <?php if ($this->input->post('qrz')) echo ' checked="checked"'; ?> >
<label class="form-check-label" for="qrz">QRZ.com</label>
</div>
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="clublog" value="1" id="clublog" <?php if ($this->input->post('clublog')) echo ' checked="checked"'; ?> >
<label class="form-check-label" for="clublog">Clublog</label>
</div>
</div>
</div>

Some files were not shown because too many files have changed in this diff Show More