mirror of
https://github.com/wavelog/wavelog.git
synced 2026-03-22 18:27:16 +00:00
829 lines
31 KiB
PHP
829 lines
31 KiB
PHP
<?php
|
|
|
|
use Wavelog\QSLManager\QSO;
|
|
|
|
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
class Logbookadvanced extends CI_Controller {
|
|
|
|
function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->load->helper(array('form', 'url', 'psr4_autoloader'));
|
|
|
|
$this->load->model('user_model');
|
|
if (!$this->user_model->authorize(2)) {
|
|
$this->session->set_flashdata('error', __("You're not allowed to do that!"));
|
|
redirect('dashboard');
|
|
}
|
|
if(!$this->load->is_loaded('DxccFlag')) {
|
|
$this->load->library('DxccFlag');
|
|
}
|
|
}
|
|
|
|
function index() {
|
|
$this->load->model('stations');
|
|
$this->load->model('logbookadvanced_model');
|
|
$this->load->model('logbook_model');
|
|
$this->load->model('bands');
|
|
$this->load->model('iota');
|
|
$this->load->model('dxcc');
|
|
$this->load->model('user_options_model');
|
|
|
|
$data = [];
|
|
$data['page_title'] = __("Advanced logbook");
|
|
$data['hasDatePicker'] = true;
|
|
|
|
$userOptions = $this->user_options_model->get_options('LogbookAdvanced')->result();
|
|
if (isset($userOptions[0])) {
|
|
$data['options'] = $userOptions[0]->option_value;
|
|
}
|
|
|
|
$mapoptions['gridsquare_layer'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'gridsquare_layer','option_key'=>'boolean'))->row();
|
|
$mapoptions['path_lines'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'path_lines','option_key'=>'boolean'))->row();
|
|
$mapoptions['cqzones_layer'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'cqzones_layer','option_key'=>'boolean'))->row();
|
|
$mapoptions['ituzones_layer'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'ituzones_layer','option_key'=>'boolean'))->row();
|
|
$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);
|
|
|
|
$pageData = [];
|
|
$pageData['datePlaceholder'] = 'DD/MM/YYYY';
|
|
$pageData['modes'] = $this->logbookadvanced_model->get_modes();
|
|
$pageData['dxccarray'] = $this->logbook_model->fetchDxcc();
|
|
$pageData['iotaarray'] = $this->logbook_model->fetchIota();
|
|
$pageData['sats'] = $this->logbookadvanced_model->get_worked_sats();
|
|
$pageData['orbits'] = $this->bands->get_worked_orbits();
|
|
$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->logbookadvanced_model->get_worked_bands();
|
|
|
|
// 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';
|
|
}
|
|
|
|
$footerData = [];
|
|
$footerData['scripts'] = [
|
|
'assets/js/moment.min.js',
|
|
'assets/js/datetime-moment.js',
|
|
'assets/js/sections/logbookadvanced.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/logbookadvanced.js")),
|
|
'assets/js/sections/logbookadvanced_edit.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/logbookadvanced_edit.js")),
|
|
'assets/js/sections/logbookadvanced_map.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/logbookadvanced_map.js")),
|
|
'assets/js/sections/cqmap_geojson.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/cqmap_geojson.js")),
|
|
'assets/js/sections/itumap_geojson.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/itumap_geojson.js")),
|
|
'assets/js/leaflet/L.Terminator.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/leaflet/L.Terminator.js")),
|
|
'assets/js/leaflet/geocoding.js',
|
|
'assets/js/globe/globe.gl.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/globe/globe.gl.js")),
|
|
'assets/js/bootstrap-multiselect.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/bootstrap-multiselect.js")),
|
|
];
|
|
|
|
$this->load->view('interface_assets/header', $data);
|
|
$this->load->view('logbookadvanced/index', $pageData);
|
|
$this->load->view('interface_assets/footer', $footerData);
|
|
}
|
|
|
|
function mapParameters() {
|
|
return array(
|
|
'user_id' => (int)$this->session->userdata('user_id'),
|
|
'dateFrom' => xss_clean($this->input->post('dateFrom')),
|
|
'dateTo' => xss_clean($this->input->post('dateTo')),
|
|
'de' => xss_clean($this->input->post('de')),
|
|
'dx' => xss_clean($this->input->post('dx')),
|
|
'mode' => xss_clean($this->input->post('mode')),
|
|
'band' => xss_clean($this->input->post('band')),
|
|
'qslSent' => xss_clean($this->input->post('qslSent')),
|
|
'qslReceived' => xss_clean($this->input->post('qslReceived')),
|
|
'qslSentMethod' => xss_clean($this->input->post('qslSentMethod')),
|
|
'qslReceivedMethod' => xss_clean($this->input->post('qslReceivedMethod')),
|
|
'iota' => xss_clean($this->input->post('iota')),
|
|
'dxcc' => xss_clean($this->input->post('dxcc')),
|
|
'propmode' => xss_clean($this->input->post('propmode')),
|
|
'gridsquare' => xss_clean($this->input->post('gridsquare')),
|
|
'state' => xss_clean($this->input->post('state')),
|
|
'county' => xss_clean($this->input->post('county')),
|
|
'cqzone' => xss_clean($this->input->post('cqzone')),
|
|
'ituzone' => xss_clean($this->input->post('ituzone')),
|
|
'qsoresults' => xss_clean($this->input->post('qsoresults')),
|
|
'sats' => xss_clean($this->input->post('sats')),
|
|
'orbits' => xss_clean($this->input->post('orbits')),
|
|
'lotwSent' => xss_clean($this->input->post('lotwSent')),
|
|
'lotwReceived' => xss_clean($this->input->post('lotwReceived')),
|
|
'eqslSent' => xss_clean($this->input->post('eqslSent')),
|
|
'eqslReceived' => xss_clean($this->input->post('eqslReceived')),
|
|
'dclSent' => xss_clean($this->input->post('dclSent')),
|
|
'dclReceived' => xss_clean($this->input->post('dclReceived')),
|
|
'clublogSent' => xss_clean($this->input->post('clublogSent')),
|
|
'clublogReceived' => xss_clean($this->input->post('clublogReceived')),
|
|
'qslvia' => xss_clean($this->input->post('qslvia')),
|
|
'sota' => xss_clean($this->input->post('sota')),
|
|
'pota' => xss_clean($this->input->post('pota')),
|
|
'wwff' => xss_clean($this->input->post('wwff')),
|
|
'qslimages' => xss_clean($this->input->post('qslimages')),
|
|
'dupes' => xss_clean($this->input->post('dupes')),
|
|
'operator' => xss_clean($this->input->post('operator')),
|
|
'contest' => xss_clean($this->input->post('contest')),
|
|
'invalid' => xss_clean($this->input->post('invalid')),
|
|
'continent' => xss_clean($this->input->post('continent')),
|
|
'comment' => xss_clean($this->input->post('comment')),
|
|
'qsoids' => xss_clean($this->input->post('qsoids')),
|
|
'dok' => xss_clean($this->input->post('dok')),
|
|
'qrzSent' => xss_clean($this->input->post('qrzSent')),
|
|
'qrzReceived' => xss_clean($this->input->post('qrzReceived')),
|
|
'distance' => xss_clean($this->input->post('distance')),
|
|
);
|
|
}
|
|
|
|
public function search() {
|
|
$this->load->model('logbookadvanced_model');
|
|
|
|
$searchCriteria = $this->mapParameters();
|
|
$qsos = [];
|
|
|
|
foreach ($this->logbookadvanced_model->searchQsos($searchCriteria) as $qso) {
|
|
$qsoArray = $qso->toArray();
|
|
$flag = $this->dxccflag->get($qso->getDXCCId());
|
|
if ($flag != null) {
|
|
$qsoArray['flag'] = ' '.$flag;
|
|
} else {
|
|
$qsoArray['flag'] = '';
|
|
}
|
|
$qsos[] = $qsoArray;
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($qsos);
|
|
}
|
|
|
|
public function updateFromCallbook() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$this->load->model('logbook_model');
|
|
$this->load->model('logbookadvanced_model');
|
|
|
|
$qsoID[] = xss_clean($this->input->post('qsoID'));
|
|
$qso = $this->logbookadvanced_model->getQsosForAdif(json_encode($qsoID), $this->session->userdata('user_id'))->row_array();
|
|
if ($qso === null) {
|
|
header("Content-Type: application/json");
|
|
echo json_encode([]);
|
|
return;
|
|
}
|
|
|
|
$callbook = $this->logbook_model->loadCallBook($qso['COL_CALL'], $this->config->item('use_fullname'));
|
|
|
|
if ($callbook['callsign'] ?? "" !== "") {
|
|
$this->load->model('stations');
|
|
$active_station_id = $this->stations->find_active();
|
|
$station_profile = $this->stations->profile($active_station_id)->row_array();
|
|
$this->logbookadvanced_model->updateQsoWithCallbookInfo($qso['COL_PRIMARY_KEY'], $qso, $callbook, $station_profile['station_gridsquare']);
|
|
$qso = $this->logbookadvanced_model->getQsosForAdif(json_encode($qsoID), $this->session->userdata('user_id'))->row_array();
|
|
}
|
|
|
|
$qsoObj = new QSO($qso); // Redirection via Object to clean/convert QSO (get rid of cols)
|
|
$cleaned_qso = $qsoObj->toArray(); // And back to Array for the JSON
|
|
|
|
$flag = $this->dxccflag->get($qsoObj->getDXCCId());
|
|
if ($flag != null) {
|
|
$cleaned_qso['flag'] = ' ' . $flag;
|
|
} else {
|
|
$cleaned_qso['flag'] = '';
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
echo json_encode($cleaned_qso);
|
|
}
|
|
|
|
function export_to_adif() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
ini_set('memory_limit', '-1');
|
|
set_time_limit(0);
|
|
$this->load->model('logbookadvanced_model');
|
|
|
|
$ids = xss_clean($this->input->post('id'));
|
|
$sortorder = xss_clean($this->input->post('sortorder'));
|
|
$user_id = (int)$this->session->userdata('user_id');
|
|
|
|
$data['qsos'] = $this->logbookadvanced_model->getQsosForAdif($ids, $user_id, $sortorder);
|
|
|
|
$this->load->view('adif/data/exportall', $data);
|
|
}
|
|
|
|
function export_to_adif_params() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
ini_set('memory_limit', '-1');
|
|
set_time_limit(0);
|
|
$this->load->model('logbookadvanced_model');
|
|
|
|
$postdata = $this->mapParameters();
|
|
$postdata['de'] = explode(',', $postdata['de']); // The reason for doing this different, is that the parameter is sent in differently than the regular search
|
|
$postdata['qsoresults'] = 'All'; // We want all the QSOs regardless of what is set in the qsoresults, to be able to export all QSOs with the filter critera
|
|
$data['qsos'] = $this->logbookadvanced_model->getSearchResult($postdata);
|
|
|
|
$this->load->view('adif/data/exportall', $data);
|
|
}
|
|
|
|
function update_qsl() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$this->load->model('logbookadvanced_model');
|
|
|
|
$ids = xss_clean($this->input->post('id'));
|
|
$user_id = (int)$this->session->userdata('user_id');
|
|
$method = xss_clean($this->input->post('method'));
|
|
$sent = xss_clean($this->input->post('sent'));
|
|
|
|
$status = $this->logbookadvanced_model->updateQsl($ids, $user_id, $method, $sent);
|
|
|
|
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $user_id);
|
|
|
|
$results = $data->result('array');
|
|
|
|
$qsos = [];
|
|
foreach ($results as $data) {
|
|
$qsos[] = new QSO($data);
|
|
}
|
|
|
|
$q = [];
|
|
foreach ($qsos as $qso) {
|
|
$singleQso = $qso->toArray();
|
|
$flag = $this->dxccflag->get($qso->getDXCCId());
|
|
if ($flag != null) {
|
|
$singleQso['flag'] = ' '.$flag;
|
|
} else {
|
|
$singleQso['flag'] = '';
|
|
}
|
|
$q[]=$singleQso;
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($q);
|
|
}
|
|
|
|
function update_qsl_received() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$this->load->model('logbookadvanced_model');
|
|
|
|
$ids = xss_clean($this->input->post('id'));
|
|
$user_id = (int)$this->session->userdata('user_id');
|
|
$method = xss_clean($this->input->post('method'));
|
|
$sent = xss_clean($this->input->post('sent'));
|
|
|
|
$status = $this->logbookadvanced_model->updateQslReceived($ids, $user_id, $method, $sent);
|
|
|
|
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $user_id);
|
|
|
|
$results = $data->result('array');
|
|
|
|
$qsos = [];
|
|
foreach ($results as $data) {
|
|
$qsos[] = new QSO($data);
|
|
}
|
|
|
|
$q = [];
|
|
foreach ($qsos as $qso) {
|
|
$singleQso = $qso->toArray();
|
|
$flag = $this->dxccflag->get($qso->getDXCCId());
|
|
if ($flag != null) {
|
|
$singleQso['flag'] = ' '.$flag;
|
|
} else {
|
|
$singleQso['flag'] = '';
|
|
}
|
|
$q[]=$singleQso;
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($q);
|
|
}
|
|
|
|
public function startAtLabel() {
|
|
$this->load->view('logbookadvanced/startatform');
|
|
}
|
|
|
|
public function qslSlideshow() {
|
|
$cleanids = json_decode($this->security->xss_clean($this->input->post('ids')));
|
|
$this->load->model('logbookadvanced_model');
|
|
$data['qslimages'] = $this->logbookadvanced_model->getQslsForQsoIds($cleanids);
|
|
$this->load->view('logbookadvanced/qslcarousel', $data);
|
|
}
|
|
|
|
public function mapSelectedQsos() {
|
|
$this->load->model('logbookadvanced_model');
|
|
|
|
$searchCriteria = array(
|
|
'user_id' => (int)$this->session->userdata('user_id'),
|
|
'dateFrom' => '',
|
|
'dateTo' => '',
|
|
'de' => $this->input->post('de'),
|
|
'dx' => '*',
|
|
'mode' => '',
|
|
'band' => '',
|
|
'qslSent' => '',
|
|
'qslReceived' => '',
|
|
'qslSentMethod' => '',
|
|
'qslReceivedMethod' => '',
|
|
'iota' => '',
|
|
'dxcc' => '',
|
|
'propmode' => '',
|
|
'gridsquare' => '*',
|
|
'state' => '*',
|
|
'county' => '*',
|
|
'cqzone' => 'All',
|
|
'ituzone' => 'All',
|
|
'qsoresults' => count(json_decode($this->input->post('ids',true))),
|
|
'sats' => '',
|
|
'orbits' => '',
|
|
'lotwSent' => '',
|
|
'lotwReceived' => '',
|
|
'eqslSent' => '',
|
|
'eqslReceived' => '',
|
|
'dclSent' => '',
|
|
'dclReceived' => '',
|
|
'clublogSent' => '',
|
|
'clublogReceived' => '',
|
|
'qslvia' => '*',
|
|
'sota' => '*',
|
|
'pota' => '*',
|
|
'wwff' => '*',
|
|
'qslimages' => '',
|
|
'operator' => '*',
|
|
'contest' => '*',
|
|
'continent' => '',
|
|
'comment' => '*',
|
|
'dok' => '*',
|
|
'qrzSent' => '',
|
|
'qrzReceived' => '',
|
|
'distance' => '*',
|
|
'qrzSent' => '',
|
|
'qrzReceived' => '',
|
|
'ids' => json_decode(xss_clean($this->input->post('ids'))),
|
|
'qsoids' => xss_clean($this->input->post('qsoids'))
|
|
);
|
|
|
|
$result = $this->logbookadvanced_model->getSearchResultArray($searchCriteria);
|
|
$this->prepareMappedQSos($result);
|
|
}
|
|
|
|
public function mapQsos() {
|
|
$this->load->model('logbookadvanced_model');
|
|
|
|
$searchCriteria = $this->mapParameters();
|
|
|
|
$result = $this->logbookadvanced_model->getSearchResultArray($searchCriteria);
|
|
$this->prepareMappedQSos($result);
|
|
}
|
|
|
|
public function prepareMappedQSos($qsos) {
|
|
if ($this->session->userdata('user_measurement_base') == NULL) {
|
|
$measurement_base = $this->config->item('measurement_base');
|
|
}
|
|
else {
|
|
$measurement_base = $this->session->userdata('user_measurement_base');
|
|
}
|
|
|
|
// Get 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 {
|
|
// Get Default date format from /config/wavelog.php
|
|
$custom_date_format = $this->config->item('qso_date_format');
|
|
}
|
|
|
|
switch ($measurement_base) {
|
|
case 'M':
|
|
$var_dist = " miles";
|
|
break;
|
|
case 'N':
|
|
$var_dist = " nautic miles";
|
|
break;
|
|
case 'K':
|
|
$var_dist = " kilometers";
|
|
break;
|
|
}
|
|
|
|
$mappedcoordinates = array();
|
|
foreach ($qsos as $qso) {
|
|
if (!empty($qso['station_gridsquare']) && $this->isValidMaidenheadGrid($qso['station_gridsquare'])) {
|
|
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'])) {
|
|
$mappedcoordinates[] = $this->calculateCoordinates($qso, $qso['lat'], $qso['long'], ($qso['station_gridsquare'] ?? ''), $measurement_base, $var_dist, $custom_date_format);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($mappedcoordinates);
|
|
}
|
|
|
|
function isValidMaidenheadGrid($grid) {
|
|
if (strlen($grid) == 4) $grid .= "LL"; // Only 4 Chars? Fill with center "LL" as only A-R allowed
|
|
if (strlen($grid) == 6) $grid .= "55"; // Only 6 Chars? Fill with center "55"
|
|
if (strlen($grid) == 8) $grid .= "LL"; // Only 8 Chars? Fill with center "LL" as only A-R allowed
|
|
// Regex pattern to match a single valid Maidenhead grid square (with optional extensions)
|
|
$singleGridPattern = '[A-R]{2}[0-9]{2}([A-X]{2})?([0-9]{2})?([A-X]{2})?';
|
|
|
|
// Regex to match VUCC grids, allowing multiple grids separated by commas
|
|
$compoundPattern = '/^(' . $singleGridPattern . ')(,' . $singleGridPattern . ')*$/i';
|
|
|
|
// Check if the overall format is valid
|
|
if (preg_match($compoundPattern, $grid) !== 1) {
|
|
return false;
|
|
}
|
|
|
|
// Split the string by commas to count the number of grid squares
|
|
$gridArray = explode(',', $grid);
|
|
$gridCount = count($gridArray);
|
|
|
|
// Validate if the count is 1, 2, or 4
|
|
if ($gridCount === 1 || $gridCount === 2 || $gridCount === 4) {
|
|
return true;
|
|
}
|
|
|
|
// Return false if it's not exactly 1, 2, or 4 grids
|
|
return false;
|
|
}
|
|
|
|
public function calculate($qso, $locator1, $locator2, $measurement_base, $var_dist, $custom_date_format) {
|
|
if(!$this->load->is_loaded('Qra')) {
|
|
$this->load->library('Qra');
|
|
}
|
|
|
|
$this->load->model('logbook_model');
|
|
|
|
|
|
$data['distance'] = $this->qra->distance($locator1, $locator2, $measurement_base, $qso['COL_ANT_PATH']) . $var_dist;
|
|
$data['bearing'] = $this->qra->get_bearing($locator1, $locator2, $qso['COL_ANT_PATH']) . "º";
|
|
$latlng1 = $this->qra->qra2latlong($locator1);
|
|
$latlng2 = $this->qra->qra2latlong($locator2);
|
|
$latlng1[0] = number_format((float)$latlng1[0], 3, '.', '');;
|
|
$latlng1[1] = number_format((float)$latlng1[1], 3, '.', '');;
|
|
$latlng2[0] = number_format((float)$latlng2[0], 3, '.', '');;
|
|
$latlng2[1] = number_format((float)$latlng2[1], 3, '.', '');;
|
|
|
|
$data['latlng1'] = $latlng1;
|
|
$data['latlng2'] = $latlng2;
|
|
|
|
$data['callsign'] = $qso['COL_CALL'];
|
|
$data['band'] = $qso['COL_BAND'];
|
|
$data['mode'] = $qso['COL_MODE'];
|
|
$data['gridsquare'] = $locator2;
|
|
$data['mygridsquare'] = $locator1;
|
|
$data['mycallsign'] = $qso['station_callsign'];
|
|
$data['datetime'] = date($custom_date_format, strtotime($qso['COL_TIME_ON'])). date(' H:i',strtotime($qso['COL_TIME_ON']));
|
|
$data['satname'] = $qso['COL_SAT_NAME'];
|
|
$data['orbit'] = $qso['orbit'];
|
|
$data['confirmed'] = ($this->logbook_model->qso_is_confirmed($qso)==true) ? true : false;
|
|
$data['dxccFlag'] = $this->dxccflag->get($qso['COL_DXCC']);
|
|
$data['id'] = $qso['COL_PRIMARY_KEY'];
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function calculateCoordinates($qso, $lat, $long, $mygrid, $measurement_base, $var_dist, $custom_date_format) {
|
|
if(!$this->load->is_loaded('Qra')) {
|
|
$this->load->library('Qra');
|
|
}
|
|
|
|
$this->load->model('logbook_model');
|
|
|
|
|
|
$latlng1 = $this->qra->qra2latlong($mygrid);
|
|
$latlng2[0] = $lat;
|
|
$latlng2[1] = $long;
|
|
$latlng1[0] = number_format((float)$latlng1[0], 3, '.', '');;
|
|
$latlng1[1] = number_format((float)$latlng1[1], 3, '.', '');;
|
|
$latlng2[0] = number_format((float)$latlng2[0], 3, '.', '');;
|
|
$latlng2[1] = number_format((float)$latlng2[1], 3, '.', '');;
|
|
|
|
$data['latlng1'] = $latlng1;
|
|
$data['latlng2'] = $latlng2;
|
|
$data['callsign'] = $qso['COL_CALL'];
|
|
$data['band'] = $qso['COL_BAND'];
|
|
$data['mode'] = $qso['COL_MODE'];
|
|
$data['mygridsquare'] = $mygrid;
|
|
$data['mycallsign'] = $qso['station_callsign'];
|
|
$data['datetime'] = date($custom_date_format, strtotime($qso['COL_TIME_ON'])). date(' H:i',strtotime($qso['COL_TIME_ON']));
|
|
$data['satname'] = $qso['COL_SAT_NAME'];
|
|
$data['orbit'] = $qso['orbit'];
|
|
$data['confirmed'] = ($this->logbook_model->qso_is_confirmed($qso)==true) ? true : false;
|
|
$data['dxccFlag'] = $this->dxccflag->get($qso['COL_DXCC']);
|
|
$data['id'] = $qso['COL_PRIMARY_KEY'];
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function userOptions() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$this->load->model('user_options_model');
|
|
$userOptions = $this->user_options_model->get_options('LogbookAdvanced')->result();
|
|
if (isset($userOptions[0])) {
|
|
$data['options'] = $options = json_decode($userOptions[0]->option_value);
|
|
} else {
|
|
$data['options'] = null;
|
|
}
|
|
|
|
$mapoptions['gridsquare_layer'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'gridsquare_layer','option_key'=>'boolean'))->row();
|
|
$mapoptions['path_lines'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'path_lines','option_key'=>'boolean'))->row();
|
|
$mapoptions['cqzones_layer'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'cqzones_layer','option_key'=>'boolean'))->row();
|
|
$mapoptions['ituzones_layer'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'ituzones_layer','option_key'=>'boolean'))->row();
|
|
$mapoptions['nightshadow_layer'] = $this->user_options_model->get_options('LogbookAdvancedMap',array('option_name'=>'nightshadow_layer','option_key'=>'boolean'))->row();
|
|
|
|
$data['mapoptions'] = $mapoptions;
|
|
|
|
$this->load->view('logbookadvanced/useroptions', $data);
|
|
}
|
|
|
|
public function setUserOptions() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$json_string['datetime']['show'] = $this->def_boolean($this->input->post('datetime'),'true');
|
|
$json_string['de']['show'] = $this->def_boolean($this->input->post('de'),'true');
|
|
$json_string['dx']['show'] = $this->def_boolean($this->input->post('dx'),'true');
|
|
$json_string['mode']['show'] = $this->def_boolean($this->input->post('mode'),'true');
|
|
$json_string['rstr']['show'] = $this->def_boolean($this->input->post('rstr'));
|
|
$json_string['rsts']['show'] = $this->def_boolean($this->input->post('rsts'));
|
|
$json_string['band']['show'] = $this->def_boolean($this->input->post('band'));
|
|
$json_string['myrefs']['show'] = $this->def_boolean($this->input->post('myrefs'));
|
|
$json_string['name']['show'] = $this->def_boolean($this->input->post('name'));
|
|
$json_string['qslvia']['show'] = $this->def_boolean($this->input->post('qslvia'));
|
|
$json_string['qsl']['show'] = $this->def_boolean($this->input->post('qsl'));
|
|
$json_string['lotw']['show'] = $this->def_boolean($this->input->post('lotw'));
|
|
$json_string['eqsl']['show'] = $this->def_boolean($this->input->post('eqsl'));
|
|
$json_string['clublog']['show'] = $this->def_boolean($this->input->post('clublog'));
|
|
$json_string['qslmsgs']['show'] = $this->def_boolean($this->input->post('qslmsgs'));
|
|
$json_string['qslmsgr']['show'] = $this->def_boolean($this->input->post('qslmsgr'));
|
|
$json_string['dxcc']['show'] = $this->def_boolean($this->input->post('dxcc'));
|
|
$json_string['state']['show'] = $this->def_boolean($this->input->post('state'));
|
|
$json_string['county']['show'] = $this->def_boolean($this->input->post('county'));
|
|
$json_string['cqzone']['show'] = $this->def_boolean($this->input->post('cqzone'));
|
|
$json_string['ituzone']['show'] = $this->def_boolean($this->input->post('ituzone'));
|
|
$json_string['iota']['show'] = $this->def_boolean($this->input->post('iota'));
|
|
$json_string['pota']['show'] = $this->def_boolean($this->input->post('pota'));
|
|
$json_string['operator']['show'] = $this->def_boolean($this->input->post('operator'));
|
|
$json_string['comment']['show'] = $this->def_boolean($this->input->post('comment'));
|
|
$json_string['propagation']['show'] = $this->def_boolean($this->input->post('propagation'));
|
|
$json_string['contest']['show'] = $this->def_boolean($this->input->post('contest'));
|
|
$json_string['gridsquare']['show'] = $this->def_boolean($this->input->post('gridsquare'));
|
|
$json_string['sota']['show'] = $this->def_boolean($this->input->post('sota'));
|
|
$json_string['dok']['show'] = $this->def_boolean($this->input->post('dok'));
|
|
$json_string['sig']['show'] = $this->def_boolean($this->input->post('sig'));
|
|
$json_string['wwff']['show'] = $this->def_boolean($this->input->post('wwff'));
|
|
$json_string['continent']['show'] = $this->def_boolean($this->input->post('continent'));
|
|
$json_string['qrz']['show'] = $this->def_boolean($this->input->post('qrz'));
|
|
$json_string['profilename']['show'] = $this->def_boolean($this->input->post('profilename'));
|
|
$json_string['stationpower']['show'] = $this->def_boolean($this->input->post('stationpower'));
|
|
$json_string['distance']['show'] = $this->def_boolean($this->input->post('distance'));
|
|
$json_string['antennaazimuth']['show'] = $this->def_boolean($this->input->post('antennaazimuth'));
|
|
$json_string['antennaelevation']['show'] = $this->def_boolean($this->input->post('antennaelevation'));
|
|
$json_string['region']['show'] = $this->def_boolean($this->input->post('region'));
|
|
$json_string['qth']['show'] = $this->def_boolean($this->input->post('qth'));
|
|
$json_string['frequency']['show'] = $this->def_boolean($this->input->post('frequency'));
|
|
$json_string['dcl']['show'] = $this->def_boolean($this->input->post('dcl'));
|
|
|
|
$obj['column_settings']= json_encode($json_string);
|
|
|
|
$this->load->model('user_options_model');
|
|
$this->user_options_model->set_option('LogbookAdvanced', 'LogbookAdvanced', $obj);
|
|
|
|
|
|
$this->user_options_model->set_option('LogbookAdvancedMap', 'gridsquare_layer', array('boolean' => $this->def_boolean(xss_clean($this->input->post('gridsquare_layer')))));
|
|
$this->user_options_model->set_option('LogbookAdvancedMap', 'path_lines', array('boolean' => $this->def_boolean(xss_clean($this->input->post('path_lines')))));
|
|
$this->user_options_model->set_option('LogbookAdvancedMap', 'cqzones_layer', array('boolean' => $this->def_boolean(xss_clean($this->input->post('cqzone_layer')))));
|
|
$this->user_options_model->set_option('LogbookAdvancedMap', 'ituzones_layer', array('boolean' => $this->def_boolean(xss_clean($this->input->post('ituzone_layer')))));
|
|
$this->user_options_model->set_option('LogbookAdvancedMap', 'nightshadow_layer', array('boolean' => $this->def_boolean(xss_clean($this->input->post('nightshadow_layer')))));
|
|
}
|
|
|
|
private function def_boolean($value, $default_value='false') {
|
|
if ((($value ?? '') == '') || (($value != 'false') && ($value != 'true'))) {
|
|
$value = $default_value;
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
public function editDialog() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$this->load->model('bands');
|
|
$this->load->model('modes');
|
|
$this->load->model('logbookadvanced_model');
|
|
$this->load->model('contesting_model');
|
|
|
|
$data['stateDxcc'] = $this->logbookadvanced_model->getPrimarySubdivisonsDxccs();
|
|
|
|
$data['modes'] = $this->modes->active();
|
|
$data['bands'] = $this->bands->get_user_bands_for_qso_entry();
|
|
$data['contests'] = $this->contesting_model->getActivecontests();
|
|
$this->load->view('logbookadvanced/edit', $data);
|
|
}
|
|
|
|
public function saveBatchEditQsos() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$ids = xss_clean($this->input->post('ids'));
|
|
$column = xss_clean($this->input->post('column'));
|
|
$value = xss_clean($this->input->post('value'));
|
|
$value2 = xss_clean($this->input->post('value2'));
|
|
$value3 = xss_clean($this->input->post('value3'));
|
|
$value4 = xss_clean($this->input->post('value4'));
|
|
|
|
$this->load->model('logbookadvanced_model');
|
|
$this->logbookadvanced_model->saveEditedQsos($ids, $column, $value, $value2, $value3, $value4);
|
|
|
|
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $this->session->userdata('user_id'));
|
|
|
|
$results = $data->result('array');
|
|
|
|
$qsos = [];
|
|
foreach ($results as $data) {
|
|
$qsos[] = new QSO($data);
|
|
}
|
|
|
|
$q = [];
|
|
// Get 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 {
|
|
// Get Default date format from /config/wavelog.php
|
|
$custom_date_format = $this->config->item('qso_date_format');
|
|
}
|
|
|
|
foreach ($qsos as $qso) {
|
|
$singleQso = $qso->toArray();
|
|
$flag = $this->dxccflag->get($qso->getDXCCId());
|
|
if ($flag != null) {
|
|
$singleQso['flag'] = ' '.$flag;
|
|
} else {
|
|
$singleQso['flag'] = '';
|
|
}
|
|
$q[]=$singleQso;
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($q);
|
|
}
|
|
|
|
public function batchDeleteQsos() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$ids = xss_clean($this->input->post('ids'));
|
|
|
|
$this->load->model('logbookadvanced_model');
|
|
$this->logbookadvanced_model->deleteQsos($ids);
|
|
}
|
|
|
|
public function getSubdivisionsForDxcc() {
|
|
$dxcc = xss_clean($this->input->post('dxcc'));
|
|
|
|
$this->load->model('logbookadvanced_model');
|
|
$result = $this->logbookadvanced_model->getSubdivisons($dxcc);
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($result);
|
|
}
|
|
|
|
public function helpDialog() {
|
|
$this->load->view('logbookadvanced/help');
|
|
}
|
|
|
|
public function continentDialog() {
|
|
$this->load->view('logbookadvanced/continentdialog');
|
|
}
|
|
|
|
public function distanceDialog() {
|
|
$this->load->view('logbookadvanced/distancedialog');
|
|
}
|
|
|
|
public function fixCqZones() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$ids = xss_clean($this->input->post('ids'));
|
|
|
|
$this->load->model('logbookadvanced_model');
|
|
$this->logbookadvanced_model->fixCqZones($ids);
|
|
|
|
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $this->session->userdata('user_id'));
|
|
|
|
$results = $data->result('array');
|
|
|
|
$qsos = [];
|
|
foreach ($results as $data) {
|
|
$qsos[] = new QSO($data);
|
|
}
|
|
|
|
$q = [];
|
|
// Get 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 {
|
|
// Get Default date format from /config/wavelog.php
|
|
$custom_date_format = $this->config->item('qso_date_format');
|
|
}
|
|
|
|
foreach ($qsos as $qso) {
|
|
$singleQso = $qso->toArray();
|
|
$flag = $this->dxccflag->get($qso->getDXCCId());
|
|
if ($flag != null) {
|
|
$singleQso['flag'] = ' '.$flag;
|
|
} else {
|
|
$singleQso['flag'] = '';
|
|
}
|
|
$q[]=$singleQso;
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($q);
|
|
|
|
}
|
|
|
|
public function fixItuZones() {
|
|
if(!clubaccess_check(9)) return;
|
|
|
|
$ids = xss_clean($this->input->post('ids'));
|
|
|
|
$this->load->model('logbookadvanced_model');
|
|
$this->logbookadvanced_model->fixItuZones($ids);
|
|
|
|
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $this->session->userdata('user_id'));
|
|
|
|
$results = $data->result('array');
|
|
|
|
$qsos = [];
|
|
foreach ($results as $data) {
|
|
$qsos[] = new QSO($data);
|
|
}
|
|
|
|
$q = [];
|
|
// Get 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 {
|
|
// Get Default date format from /config/wavelog.php
|
|
$custom_date_format = $this->config->item('qso_date_format');
|
|
}
|
|
|
|
foreach ($qsos as $qso) {
|
|
$singleQso = $qso->toArray();
|
|
$flag = $this->dxccflag->get($qso->getDXCCId());
|
|
if ($flag != null) {
|
|
$singleQso['flag'] = ' '.$flag;
|
|
} else {
|
|
$singleQso['flag'] = '';
|
|
}
|
|
$q[]=$singleQso;
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($q);
|
|
}
|
|
|
|
public function fixContinent() {
|
|
$this->load->model('logbookadvanced_model');
|
|
$result = $this->logbookadvanced_model->check_missing_continent();
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($result);
|
|
}
|
|
|
|
public function updateDistances() {
|
|
$this->load->model('logbookadvanced_model');
|
|
$result = $this->logbookadvanced_model->update_distances_batch();
|
|
|
|
header("Content-Type: application/json");
|
|
print json_encode($result);
|
|
}
|
|
}
|