Files
wavelog/application/controllers/Logbookadvanced.php
2025-06-07 07:20:53 +02:00

701 lines
29 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');
}
}
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);
}
public function search() {
$this->load->model('logbookadvanced_model');
$searchCriteria = 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')),
'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')),
'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')),
);
$qsos = [];
foreach ($this->logbookadvanced_model->searchQsos($searchCriteria) as $qso) {
$qsos[] = $qso->toArray();
}
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);
header("Content-Type: application/json");
echo json_encode($qsoObj->toArray());
}
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->input->post();
$postdata['user_id'] = (int)$this->session->userdata('user_id');
$postdata['qsoresults'] = 'All';
$postdata['de'] = explode(',', $postdata['de']);
$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) {
$q[] = $qso->toArray();
}
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) {
$q[] = $qso->toArray();
}
header("Content-Type: application/json");
print json_encode($q);
}
public function startAtLabel() {
$this->load->view('logbookadvanced/startatform');
}
public function qslSlideshow() {
$cleanids = $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' => '*',
'cqzone' => '',
'ituzone' => '',
'qsoresults' => count($this->input->post('ids')),
'sats' => '',
'orbits' => '',
'lotwSent' => '',
'lotwReceived' => '',
'eqslSent' => '',
'eqslReceived' => '',
'clublogSent' => '',
'clublogReceived' => '',
'qslvia' => '*',
'sota' => '*',
'pota' => '*',
'wwff' => '*',
'qslimages' => '',
'operator' => '*',
'contest' => '*',
'continent' => '',
'comment' => '*',
'ids' => xss_clean($this->input->post('ids'))
);
$result = $this->logbookadvanced_model->getSearchResultArray($searchCriteria);
$this->prepareMappedQSos($result);
}
public function mapQsos() {
$this->load->model('logbookadvanced_model');
$searchCriteria = 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')),
'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')),
'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')),
'operator' => xss_clean($this->input->post('operator')),
'contest' => xss_clean($this->input->post('contest')),
'qslimages' => xss_clean($this->input->post('qslimages')),
'continent' => xss_clean($this->input->post('continent')),
'comment' => xss_clean($this->input->post('comment')),
);
$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');
if(!$this->load->is_loaded('DxccFlag')) {
$this->load->library('DxccFlag');
}
$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']) . "&#186;";
$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');
if(!$this->load->is_loaded('DxccFlag')) {
$this->load->library('DxccFlag');
}
$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'));
$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) {
$q[] = $qso->toArray();
}
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');
}
}