tag 2.7.1
这个提交包含在:
当前提交
407792800b
共有 90 个文件被更改,包括 1527 次插入 和 12340 次删除
|
|
@ -22,7 +22,7 @@ $config['migration_enabled'] = TRUE;
|
|||
|
|
||||
*/
|
||||
|
||||
$config['migration_version'] = 206;
|
||||
$config['migration_version'] = 210;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -22,18 +22,49 @@ class Components extends CI_Controller {
|
|||
$data['user_hamsat_key']='';
|
||||
}
|
||||
$url = 'https://hams.at/api/alerts/upcoming';
|
||||
if ($data['user_hamsat_key'] ?? '' != '') {
|
||||
$options = array(
|
||||
'http' => array(
|
||||
'method' => 'GET',
|
||||
'header' => "Authorization: Bearer ".$data['user_hamsat_key']."\r\n"
|
||||
)
|
||||
);
|
||||
$context = stream_context_create($options);
|
||||
$json = file_get_contents($url, false, $context);
|
||||
} else {
|
||||
$json = file_get_contents($url);
|
||||
|
||||
// Initialize error state
|
||||
$data['error'] = false;
|
||||
$data['error_message'] = '';
|
||||
|
||||
try {
|
||||
if ($data['user_hamsat_key'] ?? '' != '') {
|
||||
$options = array(
|
||||
'http' => array(
|
||||
'method' => 'GET',
|
||||
'header' => "Authorization: Bearer ".$data['user_hamsat_key']."\r\n",
|
||||
'timeout' => 10 // Add timeout to prevent long hangs
|
||||
)
|
||||
);
|
||||
$context = stream_context_create($options);
|
||||
$json = @file_get_contents($url, false, $context);
|
||||
} else {
|
||||
$json = @file_get_contents($url, false, stream_context_create(array(
|
||||
'http' => array('timeout' => 10)
|
||||
)));
|
||||
}
|
||||
|
||||
// Check if the request failed
|
||||
if ($json === false) {
|
||||
$data['error'] = true;
|
||||
$data['error_message'] = 'Unable to connect to hams.at service. Please check your internet connection or try again later.';
|
||||
$data['rovedata'] = null;
|
||||
} else {
|
||||
$decoded_data = json_decode($json, true);
|
||||
if ($decoded_data === null && json_last_error() !== JSON_ERROR_NONE) {
|
||||
$data['error'] = true;
|
||||
$data['error_message'] = 'Invalid response received from hams.at service. Please try again later.';
|
||||
$data['rovedata'] = null;
|
||||
} else {
|
||||
$data['rovedata'] = $decoded_data;
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$data['error'] = true;
|
||||
$data['error_message'] = 'An error occurred while fetching satellite data. Please try again later.';
|
||||
$data['rovedata'] = null;
|
||||
}
|
||||
|
||||
$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;
|
||||
|
|
@ -42,7 +73,6 @@ class Components extends CI_Controller {
|
|||
}
|
||||
|
||||
$this->load->model('stations');
|
||||
$data['rovedata'] = json_decode($json, true);
|
||||
$data['gridsquare'] = strtoupper($this->stations->find_gridsquare());
|
||||
|
||||
// load view
|
||||
|
|
|
|||
|
|
@ -131,8 +131,18 @@ class Logbooks extends CI_Controller {
|
|||
|
||||
public function save_publicsearch() {
|
||||
$this->load->model('logbooks_model');
|
||||
$returndata = $this->logbooks_model->save_public_search($this->input->post('public_search'), $this->input->post('logbook_id'));
|
||||
echo "<div class=\"alert alert-success\" role=\"alert\">Public Search Settings Saved</div>";
|
||||
// Handle checkbox - if not checked, it won't be sent, so default to 0
|
||||
$public_search = $this->input->post('public_search') ? 1 : 0;
|
||||
$returndata = $this->logbooks_model->save_public_search($public_search, $this->input->post('logbook_id'));
|
||||
echo "<div class=\"alert alert-success\" role=\"alert\">Public Search Settings Saved</div>";
|
||||
}
|
||||
|
||||
public function save_publicradiostatus() {
|
||||
$this->load->model('logbooks_model');
|
||||
// Handle checkbox - if not checked, it won't be sent, so default to 0
|
||||
$public_radio_status = $this->input->post('public_radio_status') ? 1 : 0;
|
||||
$returndata = $this->logbooks_model->save_public_radio_status($public_radio_status, $this->input->post('logbook_id'));
|
||||
echo "<div class=\"alert alert-success\" role=\"alert\">Public Radio Status Settings Saved</div>";
|
||||
}
|
||||
|
||||
public function save_publicslug() {
|
||||
|
|
|
|||
|
|
@ -378,6 +378,31 @@ class Lotw extends CI_Controller {
|
|||
redirect('/lotw/');
|
||||
}
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Function: toggle_archive_cert
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Toggles the archive status of a LoTW certificate
|
||||
|
|
||||
*/
|
||||
public function toggle_archive_cert($cert_id) {
|
||||
$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'); }
|
||||
|
||||
$this->load->model('LotwCert');
|
||||
|
||||
$result = $this->LotwCert->toggle_archive_certificate($this->session->userdata('user_id'), $cert_id);
|
||||
|
||||
if($result['archived']) {
|
||||
$this->session->set_flashdata('Success', 'Certificate Archived.');
|
||||
} else {
|
||||
$this->session->set_flashdata('Success', 'Certificate Unarchived.');
|
||||
}
|
||||
|
||||
redirect('/lotw/');
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Mostworked 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'); }
|
||||
|
||||
// Load language files
|
||||
$this->lang->load('most_worked');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
// Check if users logged in
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
// user is not logged in
|
||||
redirect('user/login');
|
||||
}
|
||||
|
||||
$this->load->model('mostworked_model');
|
||||
$this->load->model('logbooks_model');
|
||||
|
||||
// Get filter parameters
|
||||
$filters = array(
|
||||
'band' => $this->input->post('band') ?: 'all',
|
||||
'mode' => $this->input->post('mode') ?: 'all',
|
||||
'satellite' => $this->input->post('satellite') ?: 'all',
|
||||
'fromdate' => $this->input->post('fromdate') ?: '',
|
||||
'todate' => $this->input->post('todate') ?: '',
|
||||
'min_qsos' => $this->input->post('min_qsos') ?: 5
|
||||
);
|
||||
|
||||
// Get active station logbook
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
|
||||
|
||||
if (!$logbooks_locations_array) {
|
||||
$data['mostworked_callsigns'] = array();
|
||||
} else {
|
||||
$data['mostworked_callsigns'] = $this->mostworked_model->get_most_worked_callsigns($filters);
|
||||
}
|
||||
|
||||
// Get filter dropdown data
|
||||
$data['bands'] = $this->mostworked_model->get_bands();
|
||||
$data['modes'] = $this->mostworked_model->get_modes();
|
||||
$data['satellites'] = $this->mostworked_model->get_satellites();
|
||||
$data['filters'] = $filters;
|
||||
|
||||
$data['page_title'] = "Most Worked Callsigns";
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('mostworked/index', $data);
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
}
|
||||
|
|
@ -83,44 +83,42 @@ class Options extends CI_Controller {
|
|||
}
|
||||
else
|
||||
{
|
||||
// Track if any updates were successful
|
||||
$any_update_successful = FALSE;
|
||||
|
||||
// Update theme choice within the options system
|
||||
$theme_update_status = $this->optionslib->update('theme', $this->input->post('theme'), 'yes');
|
||||
|
||||
// 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'));
|
||||
$any_update_successful = TRUE;
|
||||
}
|
||||
|
||||
// Update theme choice within the options system
|
||||
// Update global search choice within the options system
|
||||
$search_update_status = $this->optionslib->update('global_search', $this->input->post('globalSearch'));
|
||||
|
||||
// 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'));
|
||||
$any_update_successful = TRUE;
|
||||
}
|
||||
|
||||
// Update dashboard banner within the options system
|
||||
$dasboard_banner_update_status = $this->optionslib->update('dashboard_banner', $this->input->post('dashboardBanner'), 'yes');
|
||||
|
||||
// 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'));
|
||||
$any_update_successful = TRUE;
|
||||
}
|
||||
|
||||
// Update dashboard map within the options system
|
||||
$dashboard_map_update_status = $this->optionslib->update('dashboard_map', $this->input->post('dashboardMap'), 'yes');
|
||||
|
||||
// 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'));
|
||||
$any_update_successful = TRUE;
|
||||
}
|
||||
|
||||
// Update logbook map within the options system
|
||||
$logbook_map_update_status = $this->optionslib->update('logbook_map', $this->input->post('logbookMap'), 'yes');
|
||||
|
||||
// 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'));
|
||||
$any_update_successful = TRUE;
|
||||
}
|
||||
|
||||
// If any update was successful, show a single success message
|
||||
if($any_update_successful == TRUE) {
|
||||
$this->session->set_flashdata('success', $this->lang->line('options_appearance_settings_saved'));
|
||||
}
|
||||
|
||||
// Update Lang choice within the options system
|
||||
|
|
|
|||
|
|
@ -20,6 +20,9 @@ class Visitor extends CI_Controller {
|
|||
elseif($method == "satellites") {
|
||||
$this->satellites($method);
|
||||
}
|
||||
elseif($method == "getGridsjs") {
|
||||
$this->getGridsjs();
|
||||
}
|
||||
elseif($method == "search") {
|
||||
$this->search($method);
|
||||
}
|
||||
|
|
@ -64,6 +67,10 @@ class Visitor extends CI_Controller {
|
|||
{
|
||||
// Get associated station locations for mysql queries
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
|
||||
|
||||
// Get logbook details to check public settings
|
||||
$logbook_details = $this->logbooks_model->logbook($logbook_id);
|
||||
$data['logbook_settings'] = $logbook_details->row();
|
||||
|
||||
if (!$logbooks_locations_array) {
|
||||
show_404('Empty Logbook');
|
||||
|
|
@ -177,6 +184,7 @@ class Visitor extends CI_Controller {
|
|||
$this->load->library('qra');
|
||||
|
||||
$slug = $this->security->xss_clean($this->uri->segment(3));
|
||||
$offset = $this->security->xss_clean($this->uri->segment(4));
|
||||
|
||||
$this->load->model('logbooks_model');
|
||||
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($slug);
|
||||
|
|
@ -193,7 +201,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('18', $offset, $logbooks_locations_array);
|
||||
// [PLOT] ADD plot //
|
||||
$plot_array = $this->logbook_model->get_plot_array_for_map($qsos->result());
|
||||
|
||||
|
|
@ -226,36 +234,88 @@ class Visitor extends CI_Controller {
|
|||
|
||||
$this->load->model('gridmap_model');
|
||||
|
||||
$data['page_title'] = "Satellite Gridsquare Map";
|
||||
$data['page_title'] = "Public Gridsquare Map";
|
||||
|
||||
// Get available bands for this logbook
|
||||
$location_list = "'".implode("','",$logbooks_locations_array)."'";
|
||||
|
||||
// Get bands (excluding satellites)
|
||||
$bands_query = $this->db->query(
|
||||
"SELECT distinct LOWER(`COL_BAND`) as `COL_BAND` FROM `".$this->config->item('table_name')."` WHERE station_id in (" . $location_list . ") AND COL_PROP_MODE != \"SAT\" ORDER BY COL_BAND"
|
||||
);
|
||||
$bands = array();
|
||||
foreach($bands_query->result() as $row){
|
||||
array_push($bands, strtoupper($row->COL_BAND));
|
||||
}
|
||||
|
||||
// Check if satellites exist and add SAT band
|
||||
$sat_query = $this->db->query(
|
||||
"SELECT distinct LOWER(`COL_PROP_MODE`) as `COL_PROP_MODE` FROM `".$this->config->item('table_name')."` WHERE station_id in (" . $location_list . ") AND COL_PROP_MODE = \"SAT\""
|
||||
);
|
||||
if ($sat_query->num_rows() > 0) {
|
||||
array_push($bands, 'SAT');
|
||||
}
|
||||
|
||||
// Get available satellites
|
||||
$sats_query = $this->db->query(
|
||||
"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"
|
||||
);
|
||||
$sats_available = array();
|
||||
foreach($sats_query->result() as $row){
|
||||
array_push($sats_available, $row->col_sat_name);
|
||||
}
|
||||
|
||||
// Get available modes
|
||||
$modes_query = $this->db->query(
|
||||
"SELECT distinct col_mode FROM ".$this->config->item('table_name')." WHERE station_id in (" . $location_list . ") and coalesce(col_mode, '') <> '' ORDER BY col_mode"
|
||||
);
|
||||
$modes = array();
|
||||
foreach($modes_query->result() as $row){
|
||||
if (!in_array($row->col_mode, $modes)) {
|
||||
array_push($modes, $row->col_mode);
|
||||
}
|
||||
}
|
||||
|
||||
// Get submodes as well
|
||||
$submodes_query = $this->db->query(
|
||||
"SELECT distinct col_submode FROM ".$this->config->item('table_name')." WHERE station_id in (" . $location_list . ") and coalesce(col_submode, '') <> '' ORDER BY col_submode"
|
||||
);
|
||||
foreach($submodes_query->result() as $row){
|
||||
if (!in_array($row->col_submode, $modes)) {
|
||||
array_push($modes, $row->col_submode);
|
||||
}
|
||||
}
|
||||
asort($modes);
|
||||
|
||||
$data['bands'] = $bands;
|
||||
$data['sats_available'] = $sats_available;
|
||||
$data['modes'] = $modes;
|
||||
|
||||
// Set default values for visitor (no user preferences)
|
||||
$data['user_default_band'] = 'All';
|
||||
$data['user_default_confirmation'] = '';
|
||||
|
||||
|
||||
// Generate initial grid data (default to showing all bands)
|
||||
$default_band = 'All';
|
||||
$default_mode = 'All';
|
||||
$default_sat = 'All';
|
||||
|
||||
$array_grid_2char = array();
|
||||
$array_grid_4char = array();
|
||||
$array_grid_6char = array();
|
||||
|
||||
|
||||
$array_confirmed_grid_2char = array();
|
||||
$array_confirmed_grid_4char = array();
|
||||
$array_confirmed_grid_6char = array();
|
||||
|
||||
$grid_2char = "";
|
||||
$grid_4char = "";
|
||||
$grid_6char = "";
|
||||
|
||||
$grid_2char_confirmed = "";
|
||||
$grid_4char_confirmed = "";
|
||||
$grid_6char_confirmed = "";
|
||||
|
||||
|
||||
// Get Confirmed LoTW & Paper Squares (non VUCC)
|
||||
$query = $this->gridmap_model->get_band_confirmed('SAT', 'All', 'true', 'true', 'false', 'false', 'All', $logbooks_locations_array);
|
||||
|
||||
// Get initial data for "All" bands
|
||||
$query = $this->gridmap_model->get_band_confirmed($default_band, $default_mode, 'false', 'false', 'false', 'false', $default_sat, $logbooks_locations_array);
|
||||
|
||||
if ($query && $query->num_rows() > 0)
|
||||
{
|
||||
foreach ($query->result() as $row)
|
||||
{
|
||||
|
||||
$grid_2char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,2));
|
||||
$grid_4char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,4));
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
|
|
@ -267,30 +327,25 @@ class Visitor extends CI_Controller {
|
|||
array_push($array_confirmed_grid_2char, $grid_2char_confirmed);
|
||||
}
|
||||
|
||||
|
||||
if(!in_array($grid_4char_confirmed, $array_confirmed_grid_4char)){
|
||||
array_push($array_confirmed_grid_4char, $grid_4char_confirmed);
|
||||
}
|
||||
|
||||
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
if(!in_array($grid_6char_confirmed, $array_confirmed_grid_6char)){
|
||||
array_push($array_confirmed_grid_6char, $grid_6char_confirmed);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Get worked squares
|
||||
$query = $this->gridmap_model->get_band('SAT', 'All', 'false', 'true', 'false', 'false', 'All', $logbooks_locations_array);
|
||||
// Get worked squares (all bands by default)
|
||||
$query = $this->gridmap_model->get_band($default_band, $default_mode, 'false', 'false', 'false', 'false', $default_sat, $logbooks_locations_array);
|
||||
|
||||
if ($query && $query->num_rows() > 0)
|
||||
{
|
||||
foreach ($query->result() as $row)
|
||||
{
|
||||
|
||||
$grid_two = strtoupper(substr($row->GRID_SQUARES,0,2));
|
||||
$grid_four = strtoupper(substr($row->GRID_SQUARES,0,4));
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
|
|
@ -302,29 +357,25 @@ class Visitor extends CI_Controller {
|
|||
array_push($array_grid_2char, $grid_two);
|
||||
}
|
||||
|
||||
|
||||
if(!in_array($grid_four, $array_grid_4char)){
|
||||
array_push($array_grid_4char, $grid_four);
|
||||
}
|
||||
|
||||
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
if(!in_array($grid_six, $array_grid_6char)){
|
||||
array_push($array_grid_6char, $grid_six);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$query_vucc = $this->gridmap_model->get_band_worked_vucc_squares('SAT', 'All', 'false', 'true', 'false', 'false', 'All', $logbooks_locations_array);
|
||||
// Get VUCC squares (worked)
|
||||
$query_vucc = $this->gridmap_model->get_band_worked_vucc_squares($default_band, $default_mode, 'false', 'false', 'false', 'false', $default_sat, $logbooks_locations_array);
|
||||
|
||||
if ($query && $query_vucc->num_rows() > 0)
|
||||
if ($query_vucc && $query_vucc->num_rows() > 0)
|
||||
{
|
||||
foreach ($query_vucc->result() as $row)
|
||||
{
|
||||
|
||||
$grids = explode(",", $row->COL_VUCC_GRIDS);
|
||||
|
||||
foreach($grids as $key) {
|
||||
|
|
@ -336,7 +387,6 @@ class Visitor extends CI_Controller {
|
|||
array_push($array_grid_2char, $grid_two);
|
||||
}
|
||||
|
||||
|
||||
if(!in_array($grid_four, $array_grid_4char)){
|
||||
array_push($array_grid_4char, $grid_four);
|
||||
}
|
||||
|
|
@ -344,14 +394,13 @@ class Visitor extends CI_Controller {
|
|||
}
|
||||
}
|
||||
|
||||
// Confirmed Squares
|
||||
$query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares('SAT', 'All', 'true', 'true', 'false', 'false', 'All', $logbooks_locations_array);
|
||||
// Confirmed VUCC Squares
|
||||
$query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares($default_band, $default_mode, 'false', 'false', 'false', 'false', $default_sat, $logbooks_locations_array);
|
||||
|
||||
if ($query && $query_vucc->num_rows() > 0)
|
||||
if ($query_vucc && $query_vucc->num_rows() > 0)
|
||||
{
|
||||
foreach ($query_vucc->result() as $row)
|
||||
{
|
||||
|
||||
$grids = explode(",", $row->COL_VUCC_GRIDS);
|
||||
|
||||
foreach($grids as $key) {
|
||||
|
|
@ -363,7 +412,6 @@ class Visitor extends CI_Controller {
|
|||
array_push($array_confirmed_grid_2char, $grid_2char_confirmed);
|
||||
}
|
||||
|
||||
|
||||
if(!in_array($grid_4char_confirmed, $array_confirmed_grid_4char)){
|
||||
array_push($array_confirmed_grid_4char, $grid_4char_confirmed);
|
||||
}
|
||||
|
|
@ -450,4 +498,159 @@ class Visitor extends CI_Controller {
|
|||
}
|
||||
}
|
||||
|
||||
public function getGridsjs()
|
||||
{
|
||||
$slug = $this->security->xss_clean($this->input->post('slug'));
|
||||
$band = $this->security->xss_clean($this->input->post('band'));
|
||||
$mode = $this->security->xss_clean($this->input->post('mode'));
|
||||
$sat = $this->security->xss_clean($this->input->post('sat'));
|
||||
|
||||
if (!$slug) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(array('error' => 'No slug provided'));
|
||||
return;
|
||||
}
|
||||
|
||||
$this->load->model('logbooks_model');
|
||||
if(!$this->logbooks_model->public_slug_exists($slug)) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(array('error' => 'Invalid slug'));
|
||||
return;
|
||||
}
|
||||
|
||||
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($slug);
|
||||
if($logbook_id == false) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(array('error' => 'Invalid logbook'));
|
||||
return;
|
||||
}
|
||||
|
||||
// Get associated station locations for mysql queries
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
|
||||
|
||||
if (!$logbooks_locations_array) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(array('error' => 'No station locations'));
|
||||
return;
|
||||
}
|
||||
|
||||
$this->load->model('gridmap_model');
|
||||
|
||||
$array_grid_2char = array();
|
||||
$array_grid_4char = array();
|
||||
$array_grid_6char = array();
|
||||
|
||||
$array_grid_2char_confirmed = array();
|
||||
$array_grid_4char_confirmed = array();
|
||||
$array_grid_6char_confirmed = array();
|
||||
|
||||
// For public visitor, we don't show QSL confirmations, so set all to false
|
||||
$query = $this->gridmap_model->get_band_confirmed($band, $mode, 'false', 'false', 'false', 'false', $sat, $logbooks_locations_array);
|
||||
|
||||
if ($query && $query->num_rows() > 0) {
|
||||
foreach ($query->result() as $row) {
|
||||
$grid_2char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,2));
|
||||
$grid_4char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,4));
|
||||
$grid_6char_confirmed = strtoupper(substr($row->GRID_SQUARES,0,6));
|
||||
|
||||
// Check if 2 Char is in array
|
||||
if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
|
||||
array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
|
||||
}
|
||||
|
||||
if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
|
||||
array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
|
||||
}
|
||||
|
||||
if(!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)){
|
||||
array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$query = $this->gridmap_model->get_band($band, $mode, 'false', 'false', 'false', 'false', $sat, $logbooks_locations_array);
|
||||
|
||||
if ($query && $query->num_rows() > 0) {
|
||||
foreach ($query->result() as $row) {
|
||||
|
||||
$grid_two = strtoupper(substr($row->GRID_SQUARES,0,2));
|
||||
$grid_four = strtoupper(substr($row->GRID_SQUARES,0,4));
|
||||
$grid_six = strtoupper(substr($row->GRID_SQUARES,0,6));
|
||||
|
||||
// Check if 2 Char is in array
|
||||
if(!in_array($grid_two, $array_grid_2char)){
|
||||
array_push($array_grid_2char, $grid_two);
|
||||
}
|
||||
|
||||
if(!in_array($grid_four, $array_grid_4char)){
|
||||
array_push($array_grid_4char, $grid_four);
|
||||
}
|
||||
|
||||
if(!in_array($grid_six, $array_grid_6char)){
|
||||
array_push($array_grid_6char, $grid_six);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
$query_vucc = $this->gridmap_model->get_band_worked_vucc_squares($band, $mode, 'false', 'false', 'false', 'false', $sat, $logbooks_locations_array);
|
||||
|
||||
if ($query_vucc && $query_vucc->num_rows() > 0) {
|
||||
foreach ($query_vucc->result() as $row) {
|
||||
|
||||
$grids = explode(",", $row->COL_VUCC_GRIDS);
|
||||
|
||||
foreach($grids as $key) {
|
||||
$grid_two = strtoupper(substr($key,0,2));
|
||||
$grid_four = strtoupper(substr($key,0,4));
|
||||
|
||||
// Check if 2 Char is in array
|
||||
if(!in_array($grid_two, $array_grid_2char)){
|
||||
array_push($array_grid_2char, $grid_two);
|
||||
}
|
||||
|
||||
|
||||
if(!in_array($grid_four, $array_grid_4char)){
|
||||
array_push($array_grid_4char, $grid_four);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// // Confirmed Squares
|
||||
$query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares($band, $mode, 'false', 'false', 'false', 'false', $sat, $logbooks_locations_array);
|
||||
|
||||
if ($query_vucc && $query_vucc->num_rows() > 0) {
|
||||
foreach ($query_vucc->result() as $row) {
|
||||
|
||||
$grids = explode(",", $row->COL_VUCC_GRIDS);
|
||||
|
||||
foreach($grids as $key) {
|
||||
$grid_2char_confirmed = strtoupper(substr($key,0,2));
|
||||
$grid_4char_confirmed = strtoupper(substr($key,0,4));
|
||||
|
||||
// Check if 2 Char is in array
|
||||
if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
|
||||
array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
|
||||
}
|
||||
|
||||
|
||||
if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
|
||||
array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$data['grid_2char_confirmed'] = ($array_grid_2char_confirmed);
|
||||
$data['grid_4char_confirmed'] = ($array_grid_4char_confirmed);
|
||||
$data['grid_6char_confirmed'] = ($array_grid_6char_confirmed);
|
||||
|
||||
$data['grid_2char'] = ($array_grid_2char);
|
||||
$data['grid_4char'] = ($array_grid_4char);
|
||||
$data['grid_6char'] = ($array_grid_6char);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($data);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Days with QSOs';
|
|||
$lang['menu_timeline'] = 'Timeline';
|
||||
$lang['menu_accumulated_statistics'] = 'Accumulated Statistics';
|
||||
$lang['menu_timeplotter'] = 'Timeplotter';
|
||||
$lang['menu_most_worked'] = 'Най-Работени';
|
||||
$lang['menu_custom_maps'] = 'Custom Maps';
|
||||
$lang['menu_continents'] = 'Continents';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Най-Работени Позивни';
|
||||
$lang['most_worked_description'] = 'Тази страница показва позивните, с които сте работили най-често от вашия активен дневник.';
|
||||
$lang['most_worked_rank'] = 'Ранг';
|
||||
$lang['most_worked_callsign'] = 'Позивен';
|
||||
$lang['most_worked_contacts'] = 'Контакти';
|
||||
$lang['most_worked_first_qso'] = 'Първо QSO';
|
||||
$lang['most_worked_last_qso'] = 'Последно QSO';
|
||||
$lang['most_worked_bands'] = 'Ленти';
|
||||
$lang['most_worked_modes'] = 'Режими';
|
||||
$lang['most_worked_no_data'] = 'Няма намерени QSO! Уверете се, че имате избран активен дневник и записани QSO.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequency for CW QRG in band (must be in H
|
|||
$lang['options_bands_name_band'] = "Name of Band (E.g. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Name of bandgroup (E.g. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Warning! Are you sure you want to delete the following band: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Настройките за външен вид са запазени успешно.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = '天数';
|
|||
$lang['menu_timeline'] = '时间线';
|
||||
$lang['menu_accumulated_statistics'] = '累积统计';
|
||||
$lang['menu_timeplotter'] = '时间图';
|
||||
$lang['menu_most_worked'] = '最常工作';
|
||||
$lang['menu_custom_maps'] = '自定义地图';
|
||||
$lang['menu_continents'] = '大陆';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = '最常工作的呼号';
|
||||
$lang['most_worked_description'] = '此页面显示您从活动日志簿中最频繁工作的呼号。';
|
||||
$lang['most_worked_rank'] = '排名';
|
||||
$lang['most_worked_callsign'] = '呼号';
|
||||
$lang['most_worked_contacts'] = '联系';
|
||||
$lang['most_worked_first_qso'] = '首次QSO';
|
||||
$lang['most_worked_last_qso'] = '最后QSO';
|
||||
$lang['most_worked_bands'] = '频段';
|
||||
$lang['most_worked_modes'] = '模式';
|
||||
$lang['most_worked_no_data'] = '未找到QSO!请确保您已选择活动日志簿并记录了QSO。';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "波段中 CW 的频率(以Hz为单位)
|
|||
$lang['options_bands_name_band'] = "波段名称(例如:20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "频段名称(例如:HF、VHF、UHF、SHF)";
|
||||
$lang['options_bands_delete_warning'] = "警告! 您确定要删除以下波段:";
|
||||
$lang['options_appearance_settings_saved'] = '外观设置已成功保存。';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $lang['station_logbooks_public_slug_input'] = "输入公共日志选项";
|
|||
$lang['station_logbooks_public_slug_visit'] = "访问公开日志页面";
|
||||
$lang['station_logbooks_public_search_hint'] = "启用公共搜索功能可在通过公共 slug 访问的公共日志页面上提供搜索输入框。 搜索仅涵盖此日志。";
|
||||
$lang['station_logbooks_public_search_enabled'] = "启用公共搜索";
|
||||
$lang['station_logbooks_public_radio_status_hint'] = "启用公共电台状态将在通过公共 slug 访问的公共日志页面上显示当前电台状态信息。";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "启用公共电台状态";
|
||||
$lang['station_logbooks_select_avail_loc'] = "选择可用的台站位置";
|
||||
$lang['station_logbooks_link_loc'] = "链接的台站位置";
|
||||
$lang['station_logbooks_linked_loc'] = "已链接的台站位置";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Dny s QSO';
|
|||
$lang['menu_timeline'] = 'Časová osa';
|
||||
$lang['menu_accumulated_statistics'] = 'Kumulativní statistiky';
|
||||
$lang['menu_timeplotter'] = 'Graf času';
|
||||
$lang['menu_most_worked'] = 'Nejvíce Pracované';
|
||||
$lang['menu_custom_maps'] = 'Vlastní mapy';
|
||||
$lang['menu_continents'] = 'Kontinenty';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Nejvíce Pracované Značky';
|
||||
$lang['most_worked_description'] = 'Tato stránka zobrazuje značky, se kterými jste pracovali nejčastěji z vašeho aktivního deníku.';
|
||||
$lang['most_worked_rank'] = 'Pořadí';
|
||||
$lang['most_worked_callsign'] = 'Značka';
|
||||
$lang['most_worked_contacts'] = 'Kontakty';
|
||||
$lang['most_worked_first_qso'] = 'První QSO';
|
||||
$lang['most_worked_last_qso'] = 'Poslední QSO';
|
||||
$lang['most_worked_bands'] = 'Pásma';
|
||||
$lang['most_worked_modes'] = 'Režimy';
|
||||
$lang['most_worked_no_data'] = 'Nebyly nalezeny žádné QSO! Ujistěte se, že máte vybraný aktivní deník a zaznamenané QSO.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequency for CW QRG in band (must be in H
|
|||
$lang['options_bands_name_band'] = "Name of Band (E.g. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Name of bandgroup (E.g. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Warning! Are you sure you want to delete the following band: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Nastavení vzhledu byla úspěšně uložena.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $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_public_radio_status_hint'] = "Enabling public radio status will display current radio status information on the public logbook page accessed via public slug.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Public radio status enabled";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Select Available Station Locations";
|
||||
$lang['station_logbooks_link_loc'] = "Link Location";
|
||||
$lang['station_logbooks_linked_loc'] = "Linked Locations";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Days with QSOs';
|
|||
$lang['menu_timeline'] = 'Timeline';
|
||||
$lang['menu_accumulated_statistics'] = 'Accumulated Statistics';
|
||||
$lang['menu_timeplotter'] = 'Timeplotter';
|
||||
$lang['menu_most_worked'] = 'Meest Gewerkt';
|
||||
$lang['menu_custom_maps'] = 'Custom Maps';
|
||||
$lang['menu_continents'] = 'Continents';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Meest Gewerkte Roepletters';
|
||||
$lang['most_worked_description'] = 'Deze pagina toont de roepletters waarmee u het vaakst heeft gewerkt vanuit uw actieve logboek.';
|
||||
$lang['most_worked_rank'] = 'Rang';
|
||||
$lang['most_worked_callsign'] = 'Roepletter';
|
||||
$lang['most_worked_contacts'] = 'Contacten';
|
||||
$lang['most_worked_first_qso'] = 'Eerste QSO';
|
||||
$lang['most_worked_last_qso'] = 'Laatste QSO';
|
||||
$lang['most_worked_bands'] = 'Banden';
|
||||
$lang['most_worked_modes'] = 'Modi';
|
||||
$lang['most_worked_no_data'] = 'Geen QSO\'s gevonden! Zorg ervoor dat u een actief logboek hebt geselecteerd en QSO\'s hebt gelogd.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequency for CW QRG in band (must be in H
|
|||
$lang['options_bands_name_band'] = "Name of Band (E.g. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Name of bandgroup (E.g. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Warning! Are you sure you want to delete the following band: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Weergave-instellingen zijn succesvol opgeslagen.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $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_public_radio_status_hint'] = "Enabling public radio status will display current radio status information on the public logbook page accessed via public slug.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Public radio status enabled";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Select Available Station Locations";
|
||||
$lang['station_logbooks_link_loc'] = "Link Location";
|
||||
$lang['station_logbooks_linked_loc'] = "Linked Locations";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Days with QSOs';
|
|||
$lang['menu_timeline'] = 'Timeline';
|
||||
$lang['menu_accumulated_statistics'] = 'Accumulated Statistics';
|
||||
$lang['menu_timeplotter'] = 'Timeplotter';
|
||||
$lang['menu_most_worked'] = 'Most Worked';
|
||||
$lang['menu_custom_maps'] = 'Custom Maps';
|
||||
$lang['menu_continents'] = 'Continents';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Most Worked Callsigns';
|
||||
$lang['most_worked_description'] = 'This page shows the callsigns you have worked most frequently from your active logbook.';
|
||||
$lang['most_worked_rank'] = 'Rank';
|
||||
$lang['most_worked_callsign'] = 'Callsign';
|
||||
$lang['most_worked_contacts'] = 'Contacts';
|
||||
$lang['most_worked_first_qso'] = 'First QSO';
|
||||
$lang['most_worked_last_qso'] = 'Last QSO';
|
||||
$lang['most_worked_bands'] = 'Bands';
|
||||
$lang['most_worked_modes'] = 'Modes';
|
||||
$lang['most_worked_no_data'] = 'No QSOs found! Make sure you have an active logbook selected and QSOs logged.';
|
||||
|
|
@ -101,6 +101,7 @@ $lang['options_version_dialog_show_all_hint'] = "This will show the version dial
|
|||
$lang['options_version_dialog_hide_all_hint'] = "This will deactivate the automatic popup of the version dialog for all users.";
|
||||
|
||||
$lang['options_save'] = 'Save';
|
||||
$lang['options_appearance_settings_saved'] = 'Appearance settings have been saved successfully.';
|
||||
|
||||
// Bands
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $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_public_radio_status_hint'] = "Enabling public radio status will display current radio status information on the public logbook page accessed via public slug.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Public radio status enabled";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Select Available Station Locations";
|
||||
$lang['station_logbooks_link_loc'] = "Link Location";
|
||||
$lang['station_logbooks_linked_loc'] = "Linked Locations";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'QSO:llsia päiviä';
|
|||
$lang['menu_timeline'] = 'Aikajana';
|
||||
$lang['menu_accumulated_statistics'] = 'Kertyneet tilastot';
|
||||
$lang['menu_timeplotter'] = 'Aikajana';
|
||||
$lang['menu_most_worked'] = 'Eniten Työskennellyt';
|
||||
$lang['menu_custom_maps'] = 'Custom Maps';
|
||||
$lang['menu_continents'] = 'Mantereet';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Eniten Työskennellyt Kutsumerkit';
|
||||
$lang['most_worked_description'] = 'Tämä sivu näyttää kutsumerkit, joiden kanssa olet työskennellyt useimmin aktiivisesta lokikirjastasi.';
|
||||
$lang['most_worked_rank'] = 'Sijoitus';
|
||||
$lang['most_worked_callsign'] = 'Kutsumerkki';
|
||||
$lang['most_worked_contacts'] = 'Yhteydet';
|
||||
$lang['most_worked_first_qso'] = 'Ensimmäinen QSO';
|
||||
$lang['most_worked_last_qso'] = 'Viimeinen QSO';
|
||||
$lang['most_worked_bands'] = 'Kaistat';
|
||||
$lang['most_worked_modes'] = 'Tilat';
|
||||
$lang['most_worked_no_data'] = 'QSO:ja ei löytynyt! Varmista, että sinulla on aktiivinen lokikirja valittuna ja QSO:ja kirjattuna.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequency for CW QRG in band (must be in H
|
|||
$lang['options_bands_name_band'] = "Name of Band (E.g. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Name of bandgroup (E.g. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Warning! Are you sure you want to delete the following band: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Ulkoasuasetukset on tallennettu onnistuneesti.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $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_public_radio_status_hint'] = "Enabling public radio status will display current radio status information on the public logbook page accessed via public slug.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Public radio status enabled";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Select Available Station Locations";
|
||||
$lang['station_logbooks_link_loc'] = "Link Location";
|
||||
$lang['station_logbooks_linked_loc'] = "Linked Locations";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Days with QSOs';
|
|||
$lang['menu_timeline'] = 'Timeline';
|
||||
$lang['menu_accumulated_statistics'] = 'Accumulated Statistics';
|
||||
$lang['menu_timeplotter'] = 'Timeplotter';
|
||||
$lang['menu_most_worked'] = 'Plus Travaillé';
|
||||
$lang['menu_custom_maps'] = 'Custom Maps';
|
||||
$lang['menu_continents'] = 'Continents';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Indicatifs les Plus Travaillés';
|
||||
$lang['most_worked_description'] = 'Cette page affiche les indicatifs que vous avez travaillés le plus fréquemment de votre carnet de trafic actif.';
|
||||
$lang['most_worked_rank'] = 'Rang';
|
||||
$lang['most_worked_callsign'] = 'Indicatif';
|
||||
$lang['most_worked_contacts'] = 'Contacts';
|
||||
$lang['most_worked_first_qso'] = 'Premier QSO';
|
||||
$lang['most_worked_last_qso'] = 'Dernier QSO';
|
||||
$lang['most_worked_bands'] = 'Bandes';
|
||||
$lang['most_worked_modes'] = 'Modes';
|
||||
$lang['most_worked_no_data'] = 'Aucun QSO trouvé ! Assurez-vous d\'avoir un carnet de trafic actif sélectionné et des QSO enregistrés.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequency for CW QRG in band (must be in H
|
|||
$lang['options_bands_name_band'] = "Name of Band (E.g. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Name of bandgroup (E.g. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Warning! Are you sure you want to delete the following band: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Les paramètres d\'apparence ont été enregistrés avec succès.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $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_public_radio_status_hint'] = "Enabling public radio status will display current radio status information on the public logbook page accessed via public slug.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Public radio status enabled";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Select Available Station Locations";
|
||||
$lang['station_logbooks_link_loc'] = "Link Location";
|
||||
$lang['station_logbooks_linked_loc'] = "Linked Locations";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Tage mit QSOs';
|
|||
$lang['menu_timeline'] = 'Zeitleiste';
|
||||
$lang['menu_accumulated_statistics'] = 'Kumulierte Statistiken';
|
||||
$lang['menu_timeplotter'] = 'Zeitplotter';
|
||||
$lang['menu_most_worked'] = 'Meist Gearbeitet';
|
||||
$lang['menu_custom_maps'] = 'Benutzerdefinierte Karte';
|
||||
$lang['menu_continents'] = 'Kontinente';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Meist Gearbeitete Rufzeichen';
|
||||
$lang['most_worked_description'] = 'Diese Seite zeigt die Rufzeichen, die Sie am häufigsten aus Ihrem aktiven Logbuch gearbeitet haben.';
|
||||
$lang['most_worked_rank'] = 'Rang';
|
||||
$lang['most_worked_callsign'] = 'Rufzeichen';
|
||||
$lang['most_worked_contacts'] = 'Kontakte';
|
||||
$lang['most_worked_first_qso'] = 'Erstes QSO';
|
||||
$lang['most_worked_last_qso'] = 'Letztes QSO';
|
||||
$lang['most_worked_bands'] = 'Bänder';
|
||||
$lang['most_worked_modes'] = 'Modi';
|
||||
$lang['most_worked_no_data'] = 'Keine QSOs gefunden! Stellen Sie sicher, dass Sie ein aktives Logbuch ausgewählt haben und QSOs protokolliert sind.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequenz für die CW QRG auf dem Band (Mus
|
|||
$lang['options_bands_name_band'] = "Name des Bandes (z.B. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Name der Bandgruppe (z.B. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Warnung! Bist du dir sicher, dass du das folgende Band löschen willst: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Erscheinungseinstellungen wurden erfolgreich gespeichert.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $lang['station_logbooks_public_slug_input'] = "Gib ein, wie der öffentliche Lin
|
|||
$lang['station_logbooks_public_slug_visit'] = "Besuche die öffentl. Seite";
|
||||
$lang['station_logbooks_public_search_hint'] = "Einschalten der Suchfunktion gibt Besuchern deiner öffentlichen Logbuch Seite die Möglichkeit über ein Suchfeld Einträge zu suchen. Die Suche deckt dabei nur dieses Logbuch ab.";
|
||||
$lang['station_logbooks_public_search_enabled'] = "Öffentliche Suche eingeschaltet";
|
||||
$lang['station_logbooks_public_radio_status_hint'] = "Einschalten des Radio Status zeigt Besuchern der öffentlichen Logbuch Seite aktuelle Radio Status Informationen an.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Öffentlicher Radio Status eingeschaltet";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Wähle verfügbare Stationsstandorte";
|
||||
$lang['station_logbooks_link_loc'] = "Verknüpfe Standort";
|
||||
$lang['station_logbooks_linked_loc'] = "Verknüpfte Standorte";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Days with QSOs';
|
|||
$lang['menu_timeline'] = 'Timeline';
|
||||
$lang['menu_accumulated_statistics'] = 'Accumulated Statistics';
|
||||
$lang['menu_timeplotter'] = 'Timeplotter';
|
||||
$lang['menu_most_worked'] = 'Περισσότερα Εργασμένα';
|
||||
$lang['menu_custom_maps'] = 'Custom Maps';
|
||||
$lang['menu_continents'] = 'Continents';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Περισσότερα Εργασμένα Διακριτικά';
|
||||
$lang['most_worked_description'] = 'Αυτή η σελίδα δείχνει τα διακριτικά που έχετε εργαστεί πιο συχνά από το ενεργό σας ημερολόγιο.';
|
||||
$lang['most_worked_rank'] = 'Κατάταξη';
|
||||
$lang['most_worked_callsign'] = 'Διακριτικό';
|
||||
$lang['most_worked_contacts'] = 'Επαφές';
|
||||
$lang['most_worked_first_qso'] = 'Πρώτο QSO';
|
||||
$lang['most_worked_last_qso'] = 'Τελευταίο QSO';
|
||||
$lang['most_worked_bands'] = 'Ζώνες';
|
||||
$lang['most_worked_modes'] = 'Τρόποι';
|
||||
$lang['most_worked_no_data'] = 'Δεν βρέθηκαν QSO! Βεβαιωθείτε ότι έχετε επιλέξει ενεργό ημερολόγιο και καταγεγραμμένα QSO.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequency for CW QRG in band (must be in H
|
|||
$lang['options_bands_name_band'] = "Name of Band (E.g. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Name of bandgroup (E.g. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Warning! Are you sure you want to delete the following band: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Οι ρυθμίσεις εμφάνισης αποθηκεύτηκαν με επιτυχία.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Giorni con QSO';
|
|||
$lang['menu_timeline'] = 'Cronologia';
|
||||
$lang['menu_accumulated_statistics'] = 'Statistiche accumulate';
|
||||
$lang['menu_timeplotter'] = 'Plotter temporale';
|
||||
$lang['menu_most_worked'] = 'Più Lavorato';
|
||||
$lang['menu_custom_maps'] = 'Mappe personalizzate';
|
||||
$lang['menu_continents'] = 'Continenti';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Nominativi Più Lavorati';
|
||||
$lang['most_worked_description'] = 'Questa pagina mostra i nominativi con cui hai lavorato più frequentemente dal tuo logbook attivo.';
|
||||
$lang['most_worked_rank'] = 'Posizione';
|
||||
$lang['most_worked_callsign'] = 'Nominativo';
|
||||
$lang['most_worked_contacts'] = 'Contatti';
|
||||
$lang['most_worked_first_qso'] = 'Primo QSO';
|
||||
$lang['most_worked_last_qso'] = 'Ultimo QSO';
|
||||
$lang['most_worked_bands'] = 'Bande';
|
||||
$lang['most_worked_modes'] = 'Modi';
|
||||
$lang['most_worked_no_data'] = 'Nessun QSO trovato! Assicurati di aver selezionato un logbook attivo e di aver registrato dei QSO.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequenza per CW QRG in banda (deve essere
|
|||
$lang['options_bands_name_band'] = "Nome della banda (es. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Nome del gruppo di banda (es. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Attenzione! Sei sicuro di voler eliminare la seguente banda: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Le impostazioni di aspetto sono state salvate con successo.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Dni z QSO';
|
|||
$lang['menu_timeline'] = 'Oś czasu';
|
||||
$lang['menu_accumulated_statistics'] = 'Skumulowane statystyki';
|
||||
$lang['menu_timeplotter'] = 'Ploter czasu';
|
||||
$lang['menu_most_worked'] = 'Najczęściej Pracowane';
|
||||
$lang['menu_custom_maps'] = 'Niestandardowe mapy';
|
||||
$lang['menu_continents'] = 'Kontynenty';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Najczęściej Pracowane Znaki';
|
||||
$lang['most_worked_description'] = 'Ta strona pokazuje znaki, z którymi pracowałeś najczęściej z twojego aktywnego dziennika.';
|
||||
$lang['most_worked_rank'] = 'Pozycja';
|
||||
$lang['most_worked_callsign'] = 'Znak';
|
||||
$lang['most_worked_contacts'] = 'Kontakty';
|
||||
$lang['most_worked_first_qso'] = 'Pierwsze QSO';
|
||||
$lang['most_worked_last_qso'] = 'Ostatnie QSO';
|
||||
$lang['most_worked_bands'] = 'Pasma';
|
||||
$lang['most_worked_modes'] = 'Tryby';
|
||||
$lang['most_worked_no_data'] = 'Nie znaleziono QSO! Upewnij się, że masz wybrany aktywny dziennik i zarejestrowane QSO.';
|
||||
|
|
@ -133,4 +133,5 @@ $lang['options_bands_cw_qrg_hint'] = "Częstotliwość dla CW QRG w paśmie (mus
|
|||
$lang['options_bands_name_band'] = "Nazwa pasma (np. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Nazwa grupy pasm (np. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Ostrzeżenie! Czy na pewno chcesz usunąć następujące pasmo: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Ustawienia wyglądu zostały pomyślnie zapisane.';
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ $lang['menu_days_with_qsos'] = 'Dias com QSOs';
|
|||
$lang['menu_timeline'] = 'Linha do Tempo';
|
||||
$lang['menu_accumulated_statistics'] = 'Estatísticas Acumuladas';
|
||||
$lang['menu_timeplotter'] = 'Gráfico Temporal';
|
||||
$lang['menu_most_worked'] = 'Mais Trabalhado';
|
||||
$lang['menu_custom_maps'] = 'Mapas Personalizados';
|
||||
$lang['menu_continents'] = 'Continentes';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Indicativos Mais Trabalhados';
|
||||
$lang['most_worked_description'] = 'Esta página mostra os indicativos com os quais você trabalhou com mais frequência a partir do seu livro de registro ativo.';
|
||||
$lang['most_worked_rank'] = 'Posição';
|
||||
$lang['most_worked_callsign'] = 'Indicativo';
|
||||
$lang['most_worked_contacts'] = 'Contatos';
|
||||
$lang['most_worked_first_qso'] = 'Primeiro QSO';
|
||||
$lang['most_worked_last_qso'] = 'Último QSO';
|
||||
$lang['most_worked_bands'] = 'Bandas';
|
||||
$lang['most_worked_modes'] = 'Modos';
|
||||
$lang['most_worked_no_data'] = 'Nenhum QSO encontrado! Certifique-se de ter um livro de registro ativo selecionado e QSOs registrados.';
|
||||
|
|
@ -122,3 +122,4 @@ $lang['options_bands_cw_qrg_hint'] = "Frequência CW da banda (em Hz)";
|
|||
$lang['options_bands_name_band'] = "Nome da Banda (ex: 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Nome do grupo da banda (ex: hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Atenção! Deseja mesmo excluir a banda: ";
|
||||
$lang['options_appearance_settings_saved'] = 'As configurações de aparência foram salvas com sucesso.';
|
||||
|
|
|
|||
|
|
@ -1,6 +1,13 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
Station Logbooks
|
||||
___________________________________________________________________________________________
|
||||
*/
|
||||
|
||||
$lang['station_logbooks'] = "Livros de Estação";
|
||||
$lang['station_logbooks_description_header'] = "O que são Livros de Estação";
|
||||
$lang['station_logbooks_description_text'] = "Livros de Estação permitem agrupar Locais de Estação, possibilitando visualizar todos os locais em uma única sessão, tanto no logbook quanto nas análises. Ideal para operações em múltiplos locais pertencentes ao mesmo DXCC ou círculo VUCC.";
|
||||
|
|
@ -25,6 +32,8 @@ $lang['station_logbooks_public_slug_input'] = "Digite o slug público desejado";
|
|||
$lang['station_logbooks_public_slug_visit'] = "Visitar Página Pública";
|
||||
$lang['station_logbooks_public_search_hint'] = "Habilitar a busca pública permite uma caixa de busca na página pública do livro de estação, acessível via slug. A busca cobre apenas este livro.";
|
||||
$lang['station_logbooks_public_search_enabled'] = "Busca pública ativada";
|
||||
$lang['station_logbooks_public_radio_status_hint'] = "Ativar o status de rádio público exibirá informações atuais do status do rádio na página pública do livro de registro acessada via slug público.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Status de rádio público ativado";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Selecionar Locais de Estação Disponíveis";
|
||||
$lang['station_logbooks_link_loc'] = "Vincular Local";
|
||||
$lang['station_logbooks_linked_loc'] = "Locais Vinculados";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Дней с QSO';
|
|||
$lang['menu_timeline'] = 'Лента событий';
|
||||
$lang['menu_accumulated_statistics'] = 'Объединённая статистика';
|
||||
$lang['menu_timeplotter'] = 'Графики';
|
||||
$lang['menu_most_worked'] = 'Самые Работанные';
|
||||
$lang['menu_custom_maps'] = 'Карты';
|
||||
$lang['menu_continents'] = 'Континенты';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Самые Работанные Позывные';
|
||||
$lang['most_worked_description'] = 'Эта страница показывает позывные, с которыми вы работали чаще всего из вашего активного журнала.';
|
||||
$lang['most_worked_rank'] = 'Ранг';
|
||||
$lang['most_worked_callsign'] = 'Позывной';
|
||||
$lang['most_worked_contacts'] = 'Контакты';
|
||||
$lang['most_worked_first_qso'] = 'Первое QSO';
|
||||
$lang['most_worked_last_qso'] = 'Последнее QSO';
|
||||
$lang['most_worked_bands'] = 'Диапазоны';
|
||||
$lang['most_worked_modes'] = 'Режимы';
|
||||
$lang['most_worked_no_data'] = 'QSO не найдены! Убедитесь, что у вас выбран активный журнал и записаны QSO.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Частота CW QRG в диапазон
|
|||
$lang['options_bands_name_band'] = "Название диапазона (к прмиеру, 20м)";
|
||||
$lang['options_bands_name_bandgroup'] = "Название группы диапазонов (к примеру, hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Предупреждение! Вы уверены в том, что хотите удалить следующий диапазон: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Настройки внешнего вида успешно сохранены.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $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_public_radio_status_hint'] = "Включение публичного статуса радио будет отображать текущую информацию о статусе радио на публичной странице журнала, доступной через публичную метку.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Публичный статус радио включен";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Выберите доступное местоположение станции";
|
||||
$lang['station_logbooks_link_loc'] = "Привяжите местоположение станции";
|
||||
$lang['station_logbooks_linked_loc'] = "Привязанные местоположения станции";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Días con QSOs';
|
|||
$lang['menu_timeline'] = 'Línea de Tiempo';
|
||||
$lang['menu_accumulated_statistics'] = 'Estadísticas Acumuladas';
|
||||
$lang['menu_timeplotter'] = 'Gráfico de Tiempo';
|
||||
$lang['menu_most_worked'] = 'Más Trabajado';
|
||||
$lang['menu_custom_maps'] = 'Mapas Personalizados';
|
||||
$lang['menu_continents'] = 'Continentes';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Indicativos Más Trabajados';
|
||||
$lang['most_worked_description'] = 'Esta página muestra los indicativos que has trabajado con más frecuencia desde tu libro de guardia activo.';
|
||||
$lang['most_worked_rank'] = 'Rango';
|
||||
$lang['most_worked_callsign'] = 'Indicativo';
|
||||
$lang['most_worked_contacts'] = 'Contactos';
|
||||
$lang['most_worked_first_qso'] = 'Primer QSO';
|
||||
$lang['most_worked_last_qso'] = 'Último QSO';
|
||||
$lang['most_worked_bands'] = 'Bandas';
|
||||
$lang['most_worked_modes'] = 'Modos';
|
||||
$lang['most_worked_no_data'] = '¡No se encontraron QSOs! Asegúrate de tener un libro de guardia activo seleccionado y QSOs registrados.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frecuencia para el QRG de CW en la banda (
|
|||
$lang['options_bands_name_band'] = "Nombre de la Banda (ej. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Nombre del grupo de bandas (ej. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "¡Advertencia! ¿Está seguro que desea eliminar la banda a continuación: ";
|
||||
$lang['options_appearance_settings_saved'] = 'La configuración de apariencia se ha guardado correctamente.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $lang['station_logbooks_public_slug_input'] = "Introduzca la elección de Abrevi
|
|||
$lang['station_logbooks_public_slug_visit'] = "Visitar Página Pública";
|
||||
$lang['station_logbooks_public_search_hint'] = "El permitir la función de búsqueda pública le permite poner una casilla de búsqueda en la página pública del libro de guardia que sea accedida por una abreviatura pública. La búsqueda solo cubre este libro de guardia.";
|
||||
$lang['station_logbooks_public_search_enabled'] = "Activar búsqueda pública";
|
||||
$lang['station_logbooks_public_radio_status_hint'] = "El permitir el estado de radio público mostrará información actual del estado del radio en la página pública del libro de guardia accedida por abreviatura pública.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Activar estado de radio público";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Seleccionar Localizaciones de Estación Disponibles";
|
||||
$lang['station_logbooks_link_loc'] = "Enlazar Localización";
|
||||
$lang['station_logbooks_linked_loc'] = "Localizaciones Enlazadas";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = 'Dagar med QSOs';
|
|||
$lang['menu_timeline'] = 'Tidslinje';
|
||||
$lang['menu_accumulated_statistics'] = 'Ackumulerad statistik';
|
||||
$lang['menu_timeplotter'] = 'Tidplotter';
|
||||
$lang['menu_most_worked'] = 'Mest Arbetade';
|
||||
$lang['menu_custom_maps'] = 'Anpassade kartor';
|
||||
$lang['menu_continents'] = 'Kontinenter';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'Mest Arbetade Anropssignaler';
|
||||
$lang['most_worked_description'] = 'Den här sidan visar de anropssignaler du har arbetat med oftast från din aktiva loggbok.';
|
||||
$lang['most_worked_rank'] = 'Rang';
|
||||
$lang['most_worked_callsign'] = 'Anropssignal';
|
||||
$lang['most_worked_contacts'] = 'Kontakter';
|
||||
$lang['most_worked_first_qso'] = 'Första QSO';
|
||||
$lang['most_worked_last_qso'] = 'Senaste QSO';
|
||||
$lang['most_worked_bands'] = 'Band';
|
||||
$lang['most_worked_modes'] = 'Lägen';
|
||||
$lang['most_worked_no_data'] = 'Inga QSO hittades! Se till att du har en aktiv loggbok vald och QSO loggade.';
|
||||
|
|
@ -123,4 +123,5 @@ $lang['options_bands_cw_qrg_hint'] = "Frequency for CW QRG in band (must be in H
|
|||
$lang['options_bands_name_band'] = "Name of Band (E.g. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Name of bandgroup (E.g. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Warning! Are you sure you want to delete the following band: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Utseendeinställningar har sparats framgångsrikt.';
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ $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_public_radio_status_hint'] = "Enabling public radio status will display current radio status information on the public logbook page accessed via public slug.";
|
||||
$lang['station_logbooks_public_radio_status_enabled'] = "Public radio status enabled";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Select Available Station Locations";
|
||||
$lang['station_logbooks_link_loc'] = "Link Location";
|
||||
$lang['station_logbooks_linked_loc'] = "Linked Locations";
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ $lang['menu_days_with_qsos'] = "QSO'lu Günler";
|
|||
$lang['menu_timeline'] = 'Zaman Çizelgesi';
|
||||
$lang['menu_accumulated_statistics'] = 'Birikmiş İstatistikler';
|
||||
$lang['menu_timeplotter'] = 'Zaman Çizici';
|
||||
$lang['menu_most_worked'] = 'En Çok Çalışılan';
|
||||
$lang['menu_custom_maps'] = 'Özel Haritalar';
|
||||
$lang['menu_continents'] = 'Kıtalar';
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
|
||||
$lang['most_worked_title'] = 'En Çok Çalışılan Çağrı İşaretleri';
|
||||
$lang['most_worked_description'] = 'Bu sayfa, aktif günlük defterinizden en sık çalıştığınız çağrı işaretlerini gösterir.';
|
||||
$lang['most_worked_rank'] = 'Sıra';
|
||||
$lang['most_worked_callsign'] = 'Çağrı İşareti';
|
||||
$lang['most_worked_contacts'] = 'İletişimler';
|
||||
$lang['most_worked_first_qso'] = 'İlk QSO';
|
||||
$lang['most_worked_last_qso'] = 'Son QSO';
|
||||
$lang['most_worked_bands'] = 'Bantlar';
|
||||
$lang['most_worked_modes'] = 'Modlar';
|
||||
$lang['most_worked_no_data'] = 'QSO bulunamadı! Aktif bir günlük defteri seçtiğinizden ve QSO\'lar kaydettiğinizden emin olun.';
|
||||
|
|
@ -121,3 +121,4 @@ $lang['options_bands_cw_qrg_hint'] = "Banttaki CW QRG frekansı (Hz cinsinden ol
|
|||
$lang['options_bands_name_band'] = "Bant Adı (Örn. 20m)";
|
||||
$lang['options_bands_name_bandgroup'] = "Bant grubunun adı (Örn. hf, vhf, uhf, shf)";
|
||||
$lang['options_bands_delete_warning'] = "Uyarı! Aşağıdaki bandı silmek istediğinizden emin misiniz: ";
|
||||
$lang['options_appearance_settings_saved'] = 'Görünüm ayarları başarıyla kaydedildi.';
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
<?php defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
<?php defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
class Migration_add_lotw_credentials extends CI_Migration {
|
||||
class Migration_add_lotw_credentials extends CI_Migration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
$fields = array(
|
||||
'user_lotw_name VARCHAR(32) DEFAULT NULL',
|
||||
'user_lotw_password VARCHAR(64) DEFAULT NULL'
|
||||
);
|
||||
|
||||
$this->dbforge->add_column('users', $fields);
|
||||
'user_lotw_name VARCHAR(32) DEFAULT NULL',
|
||||
'user_lotw_password VARCHAR(64) DEFAULT NULL'
|
||||
);
|
||||
|
||||
$this->dbforge->add_column('users', $fields);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->dbforge->drop_column('users', 'user_lotw_name');
|
||||
$this->dbforge->drop_column('users', 'user_lotw_password');
|
||||
$this->dbforge->drop_column('users', 'user_lotw_password');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
<?php defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
<?php defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
class Migration_add_config_table extends CI_Migration {
|
||||
class Migration_add_config_table extends CI_Migration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
$this->dbforge->add_field('id');
|
||||
|
||||
$this->dbforge->add_field('id');
|
||||
|
||||
$this->dbforge->add_field(array(
|
||||
'lotw_download_url' => array(
|
||||
'type' => 'VARCHAR',
|
||||
|
|
@ -15,22 +16,22 @@ class Migration_add_config_table extends CI_Migration {
|
|||
'type' => 'VARCHAR',
|
||||
'constraint' => 255,
|
||||
),
|
||||
'lotw_rcvd_mark' => array(
|
||||
'lotw_rcvd_mark' => array(
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 1,
|
||||
),
|
||||
));
|
||||
|
||||
|
||||
$this->dbforge->create_table('config');
|
||||
|
||||
$data = array(
|
||||
'lotw_download_url' => 'https://p1k.arrl.org/lotwuser/lotwreport.adi',
|
||||
'lotw_upload_url' => 'https://p1k.arrl.org/lotwuser/upload',
|
||||
'lotw_rcvd_mark' => 'Y'
|
||||
);
|
||||
|
||||
$this->db->insert('config', $data);
|
||||
|
||||
$this->dbforge->create_table('config');
|
||||
|
||||
$data = array(
|
||||
'lotw_download_url' => 'https://p1k.arrl.org/lotwuser/lotwreport.adi',
|
||||
'lotw_upload_url' => 'https://p1k.arrl.org/lotwuser/upload',
|
||||
'lotw_rcvd_mark' => 'Y'
|
||||
);
|
||||
|
||||
$this->db->insert('config', $data);
|
||||
}
|
||||
|
||||
public function down()
|
||||
|
|
@ -38,4 +39,3 @@ class Migration_add_config_table extends CI_Migration {
|
|||
$this->dbforge->drop_table('config');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -1,13 +1,14 @@
|
|||
<?php defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
<?php defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
class Migration_add_lotw_login_url extends CI_Migration {
|
||||
class Migration_add_lotw_login_url extends CI_Migration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
$fields = array('lotw_login_url VARCHAR(244) DEFAULT NULL');
|
||||
|
||||
$this->dbforge->add_column('config', $fields);
|
||||
|
||||
|
||||
$this->dbforge->add_column('config', $fields);
|
||||
|
||||
$sql = "UPDATE config SET lotw_login_url = 'https://p1k.arrl.org/lotwuser/default' WHERE id=1";
|
||||
|
||||
$this->db->query($sql);
|
||||
|
|
@ -15,7 +16,6 @@ class Migration_add_lotw_login_url extends CI_Migration {
|
|||
|
||||
public function down()
|
||||
{
|
||||
$this->dbforge->drop_column('config', 'lotw_login_url');
|
||||
$this->dbforge->drop_column('config', 'lotw_login_url');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,49 +1,50 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
class Migration_add_workable_dxcc_indexes extends CI_Migration {
|
||||
class Migration_add_workable_dxcc_indexes extends CI_Migration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
// Add composite index for workable DXCC queries
|
||||
// This will greatly improve performance for COL_COUNTRY + station_id + COL_PROP_MODE queries
|
||||
$this->db->db_debug = false;
|
||||
|
||||
|
||||
// Check if index already exists
|
||||
$index_exists = $this->db->query("SHOW INDEX FROM ".$this->config->item('table_name')." WHERE Key_name = 'idx_workable_dxcc'")->num_rows();
|
||||
|
||||
$index_exists = $this->db->query("SHOW INDEX FROM " . $this->config->item('table_name') . " WHERE Key_name = 'idx_workable_dxcc'")->num_rows();
|
||||
|
||||
if ($index_exists == 0) {
|
||||
$sql = "ALTER TABLE ".$this->config->item('table_name')." ADD INDEX `idx_workable_dxcc` (`COL_COUNTRY`, `station_id`, `COL_PROP_MODE`)";
|
||||
$sql = "ALTER TABLE " . $this->config->item('table_name') . " ADD INDEX `idx_workable_dxcc` (`COL_COUNTRY`, `station_id`, `COL_PROP_MODE`)";
|
||||
$this->db->query($sql);
|
||||
}
|
||||
|
||||
|
||||
// Add index for confirmation status columns
|
||||
$conf_index_exists = $this->db->query("SHOW INDEX FROM ".$this->config->item('table_name')." WHERE Key_name = 'idx_qsl_confirmations'")->num_rows();
|
||||
|
||||
$conf_index_exists = $this->db->query("SHOW INDEX FROM " . $this->config->item('table_name') . " WHERE Key_name = 'idx_qsl_confirmations'")->num_rows();
|
||||
|
||||
if ($conf_index_exists == 0) {
|
||||
$sql = "ALTER TABLE ".$this->config->item('table_name')." ADD INDEX `idx_qsl_confirmations` (`COL_QSL_RCVD`, `COL_LOTW_QSL_RCVD`, `COL_EQSL_QSL_RCVD`, `COL_QRZCOM_QSO_DOWNLOAD_STATUS`)";
|
||||
$sql = "ALTER TABLE " . $this->config->item('table_name') . " ADD INDEX `idx_qsl_confirmations` (`COL_QSL_RCVD`, `COL_LOTW_QSL_RCVD`, `COL_EQSL_QSL_RCVD`, `COL_QRZCOM_QSO_DOWNLOAD_STATUS`)";
|
||||
$this->db->query($sql);
|
||||
}
|
||||
|
||||
|
||||
$this->db->db_debug = true;
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->db->db_debug = false;
|
||||
|
||||
|
||||
// Drop the indexes if they exist
|
||||
$index_exists = $this->db->query("SHOW INDEX FROM ".$this->config->item('table_name')." WHERE Key_name = 'idx_workable_dxcc'")->num_rows();
|
||||
$index_exists = $this->db->query("SHOW INDEX FROM " . $this->config->item('table_name') . " WHERE Key_name = 'idx_workable_dxcc'")->num_rows();
|
||||
if ($index_exists > 0) {
|
||||
$this->db->query("ALTER TABLE ".$this->config->item('table_name')." DROP INDEX `idx_workable_dxcc`");
|
||||
$this->db->query("ALTER TABLE " . $this->config->item('table_name') . " DROP INDEX `idx_workable_dxcc`");
|
||||
}
|
||||
|
||||
$conf_index_exists = $this->db->query("SHOW INDEX FROM ".$this->config->item('table_name')." WHERE Key_name = 'idx_qsl_confirmations'")->num_rows();
|
||||
|
||||
$conf_index_exists = $this->db->query("SHOW INDEX FROM " . $this->config->item('table_name') . " WHERE Key_name = 'idx_qsl_confirmations'")->num_rows();
|
||||
if ($conf_index_exists > 0) {
|
||||
$this->db->query("ALTER TABLE ".$this->config->item('table_name')." DROP INDEX `idx_qsl_confirmations`");
|
||||
$this->db->query("ALTER TABLE " . $this->config->item('table_name') . " DROP INDEX `idx_qsl_confirmations`");
|
||||
}
|
||||
|
||||
|
||||
$this->db->db_debug = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
/*
|
||||
* This adds an option to enable/disable Radio Status panel on public logbook displays
|
||||
*/
|
||||
|
||||
class Migration_add_radio_panel_option_to_logbook extends CI_Migration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
if (!$this->db->field_exists('public_radio_status', 'station_logbooks')) {
|
||||
$fields = array(
|
||||
'public_radio_status integer DEFAULT 0 AFTER public_search',
|
||||
);
|
||||
|
||||
$this->dbforge->add_column('station_logbooks', $fields);
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
if ($this->db->field_exists('public_radio_status', 'station_logbooks')) {
|
||||
$this->dbforge->drop_column('station_logbooks', 'public_radio_status');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
class Migration_add_indexes_lotw_users extends CI_Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
if ($this->db->table_exists('lotw_users')) {
|
||||
// add an index on callsign if no index exists on that column
|
||||
$callsignIndex = $this->db->query("SHOW INDEX FROM lotw_users WHERE Column_name = 'callsign'");
|
||||
if ($callsignIndex->num_rows() == 0) {
|
||||
$this->db->query("ALTER TABLE lotw_users ADD INDEX `callsign` (`callsign`)");
|
||||
}
|
||||
|
||||
// add an index on lastupload if it doesn't exist
|
||||
$lastuploadIndex = $this->db->query("SHOW INDEX FROM lotw_users WHERE Column_name = 'lastupload'");
|
||||
if ($lastuploadIndex->num_rows() == 0) {
|
||||
$this->db->query("ALTER TABLE lotw_users ADD INDEX `lastupload` (`lastupload`)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
if ($this->db->table_exists('lotw_users')) {
|
||||
// drop the indexes we might have created (only if the index name matches)
|
||||
$li = $this->db->query("SHOW INDEX FROM lotw_users WHERE Key_name = 'lastupload'");
|
||||
if ($li->num_rows() > 0) {
|
||||
$this->db->query("ALTER TABLE lotw_users DROP INDEX `lastupload`");
|
||||
}
|
||||
|
||||
$ci = $this->db->query("SHOW INDEX FROM lotw_users WHERE Key_name = 'callsign'");
|
||||
if ($ci->num_rows() > 0) {
|
||||
$this->db->query("ALTER TABLE lotw_users DROP INDEX `callsign`");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Class Migration_lotw_cert_archive_status
|
||||
*
|
||||
* Adds a simple boolean `archived` column to the `lotw_certs` table so
|
||||
* certificates can be marked as archived.
|
||||
*/
|
||||
class Migration_lotw_cert_archive_status extends CI_Migration {
|
||||
|
||||
public function up()
|
||||
{
|
||||
if (! $this->db->field_exists('archived', 'lotw_certs')) {
|
||||
$fields = array(
|
||||
'archived BOOLEAN DEFAULT FALSE',
|
||||
);
|
||||
|
||||
$this->dbforge->add_column('lotw_certs', $fields);
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
if ($this->db->field_exists('archived', 'lotw_certs')) {
|
||||
$this->dbforge->drop_column('lotw_certs', 'archived');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
/*
|
||||
* Tag Cloudlog as 2.7.1
|
||||
*/
|
||||
|
||||
class Migration_tag_2_7_1 extends CI_Migration {
|
||||
|
||||
public function up()
|
||||
{
|
||||
|
||||
// Tag Cloudlog 2.7.1
|
||||
$this->db->where('option_name', 'version');
|
||||
$this->db->update('options', array('option_value' => '2.7.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'));
|
||||
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->db->where('option_name', 'version');
|
||||
$this->db->update('options', array('option_value' => '2.7.0'));
|
||||
}
|
||||
}
|
||||
|
|
@ -99,10 +99,13 @@ class Logbook_model extends CI_Model
|
|||
if ($this->input->post('country') == "") {
|
||||
$dxcc = $this->check_dxcc_table(strtoupper(trim($callsign)), $datetime);
|
||||
$country = ucwords(strtolower($dxcc[1]), "- (/");
|
||||
$dxcc_id = $dxcc[0];
|
||||
} else {
|
||||
$country = $this->input->post('country');
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ($this->input->post('cqz') == "") {
|
||||
$dxcc = $this->check_dxcc_table(strtoupper(trim($callsign)), $datetime);
|
||||
if (empty($dxcc[2])) {
|
||||
|
|
@ -115,7 +118,6 @@ class Logbook_model extends CI_Model
|
|||
}
|
||||
|
||||
if ($this->input->post('dxcc_id') == "") {
|
||||
|
||||
$dxcc = $this->check_dxcc_table(strtoupper(trim($callsign)), $datetime);
|
||||
if (empty($dxcc[0])) {
|
||||
$dxcc_id = null;
|
||||
|
|
@ -123,7 +125,12 @@ class Logbook_model extends CI_Model
|
|||
$dxcc_id = $dxcc[0];
|
||||
}
|
||||
} else {
|
||||
$dxcc_id = $this->input->post('dxcc_id');
|
||||
// if $country isn't empty and dxcc_id is 0 use the DXCC ID from the callsign lookup
|
||||
if (!empty($country) && $this->input->post('dxcc_id') == "0") {
|
||||
$dxcc_id = $dxcc_id;
|
||||
} else {
|
||||
$dxcc_id = $this->input->post('dxcc_id');
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->input->post('continent') == "") {
|
||||
|
|
@ -185,13 +192,13 @@ class Logbook_model extends CI_Model
|
|||
case 'power':
|
||||
$qso_rx_power = $srx_string;
|
||||
break;
|
||||
// Example for more sophisticated exchanges and their split into the db:
|
||||
//case 'name/power':
|
||||
// if (strlen($srx_string) == 0) break;
|
||||
// $exch_pt = explode(" ",$srx_string);
|
||||
// $qso_name = $exch_pt[0];
|
||||
// if (count($exch_pt)>1) $qso_power = $exch_pt[1];
|
||||
// break;
|
||||
// Example for more sophisticated exchanges and their split into the db:
|
||||
//case 'name/power':
|
||||
// if (strlen($srx_string) == 0) break;
|
||||
// $exch_pt = explode(" ",$srx_string);
|
||||
// $qso_name = $exch_pt[0];
|
||||
// if (count($exch_pt)>1) $qso_power = $exch_pt[1];
|
||||
// break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
|
@ -1087,7 +1094,15 @@ class Logbook_model extends CI_Model
|
|||
|
||||
$entity = $this->get_entity($this->input->post('dxcc_id'));
|
||||
$stationId = $this->input->post('station_profile');
|
||||
$country = ucwords(strtolower($entity['name']), "- (/");
|
||||
|
||||
if (is_array($entity)) {
|
||||
$rawCountry = $entity['name'] ?? '';
|
||||
} elseif (is_object($entity)) {
|
||||
$rawCountry = $entity->name ?? '';
|
||||
} else {
|
||||
$rawCountry = (string)$entity;
|
||||
}
|
||||
$country = ucwords(strtolower($rawCountry), "- (/");
|
||||
|
||||
// be sure that station belongs to user
|
||||
$CI = &get_instance();
|
||||
|
|
@ -2623,7 +2638,7 @@ class Logbook_model extends CI_Model
|
|||
if (!empty($logbooks_locations_array)) {
|
||||
// Pre-calculate today's date for better performance
|
||||
$today_date = date('Y-m-d');
|
||||
|
||||
|
||||
$this->db->select("
|
||||
COUNT(IF(COL_QSL_SENT='Y',COL_QSL_SENT,null)) as QSL_Sent,
|
||||
COUNT(IF(COL_QSL_RCVD='Y',COL_QSL_RCVD,null)) as QSL_Received,
|
||||
|
|
@ -2991,7 +3006,8 @@ class Logbook_model extends CI_Model
|
|||
}
|
||||
|
||||
// Consolidated method to get all country statistics in one query
|
||||
function get_countries_statistics_consolidated($StationLocationsArray = null) {
|
||||
function get_countries_statistics_consolidated($StationLocationsArray = null)
|
||||
{
|
||||
if ($StationLocationsArray == null) {
|
||||
$CI = &get_instance();
|
||||
$CI->load->model('logbooks_model');
|
||||
|
|
@ -3027,7 +3043,7 @@ class Logbook_model extends CI_Model
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return array(
|
||||
'Countries_Worked' => 0,
|
||||
'Countries_Worked_QSL' => 0,
|
||||
|
|
@ -4393,13 +4409,13 @@ class Logbook_model extends CI_Model
|
|||
|
||||
public function get_entity($dxcc)
|
||||
{
|
||||
$sql = "SELECT name, cqz, lat, `long` FROM dxcc_entities WHERE adif = ?";
|
||||
$query = $this->db->query($sql, array($dxcc));
|
||||
|
||||
if ($query->num_rows() > 0) {
|
||||
return $query->row_array();
|
||||
}
|
||||
return '';
|
||||
$sql = "SELECT name, cqz, lat, `long` FROM dxcc_entities WHERE adif = ?";
|
||||
$query = $this->db->query($sql, array($dxcc));
|
||||
|
||||
if ($query->num_rows() > 0) {
|
||||
return $query->row_array();
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -4490,37 +4506,37 @@ class Logbook_model extends CI_Model
|
|||
foreach ($r->result_array() as $row) {
|
||||
$callsign = $row['COL_CALL'];
|
||||
if ($this->session->userdata('callbook_type') == "QRZ") {
|
||||
// Lookup using QRZ
|
||||
$this->load->library('qrz');
|
||||
// Lookup using QRZ
|
||||
$this->load->library('qrz');
|
||||
|
||||
// Load the encryption library
|
||||
$this->load->library('encryption');
|
||||
// Load the encryption library
|
||||
$this->load->library('encryption');
|
||||
|
||||
// Decrypt the password
|
||||
$decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password'));
|
||||
// Decrypt the password
|
||||
$decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password'));
|
||||
|
||||
if(!$this->session->userdata('qrz_session_key')) {
|
||||
$qrz_session_key = $this->qrz->session($this->session->userdata('callbook_username'), $decrypted_password);
|
||||
$this->session->set_userdata('qrz_session_key', $qrz_session_key);
|
||||
}
|
||||
if (!$this->session->userdata('qrz_session_key')) {
|
||||
$qrz_session_key = $this->qrz->session($this->session->userdata('callbook_username'), $decrypted_password);
|
||||
$this->session->set_userdata('qrz_session_key', $qrz_session_key);
|
||||
}
|
||||
|
||||
$callbook = $this->qrz->search($callsign, $this->session->userdata('qrz_session_key'));
|
||||
}
|
||||
|
||||
if ($this->session->userdata('callbook_type') == "HamQTH") {
|
||||
// Load the HamQTH library
|
||||
$this->load->library('hamqth');
|
||||
// Load the HamQTH library
|
||||
$this->load->library('hamqth');
|
||||
|
||||
// Load the encryption library
|
||||
$this->load->library('encryption');
|
||||
// Load the encryption library
|
||||
$this->load->library('encryption');
|
||||
|
||||
// Decrypt the password
|
||||
$decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password'));
|
||||
|
||||
if(!$this->session->userdata('hamqth_session_key')) {
|
||||
$hamqth_session_key = $this->hamqth->session($this->session->userdata('callbook_username'), $decrypted_password);
|
||||
$this->session->set_userdata('hamqth_session_key', $hamqth_session_key);
|
||||
}
|
||||
// Decrypt the password
|
||||
$decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password'));
|
||||
|
||||
if (!$this->session->userdata('hamqth_session_key')) {
|
||||
$hamqth_session_key = $this->hamqth->session($this->session->userdata('callbook_username'), $decrypted_password);
|
||||
$this->session->set_userdata('hamqth_session_key', $hamqth_session_key);
|
||||
}
|
||||
|
||||
$callbook = $this->hamqth->search($callsign, $this->session->userdata('hamqth_session_key'));
|
||||
|
||||
|
|
@ -4642,7 +4658,7 @@ class Logbook_model extends CI_Model
|
|||
// Decrypt the password
|
||||
$decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password'));
|
||||
|
||||
if(!$this->session->userdata('qrz_session_key')) {
|
||||
if (!$this->session->userdata('qrz_session_key')) {
|
||||
$qrz_session_key = $this->qrz->session($this->session->userdata('callbook_username'), $decrypted_password);
|
||||
$this->session->set_userdata('qrz_session_key', $qrz_session_key);
|
||||
}
|
||||
|
|
@ -4670,8 +4686,8 @@ class Logbook_model extends CI_Model
|
|||
|
||||
// Decrypt the password
|
||||
$decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password'));
|
||||
|
||||
if(!$this->session->userdata('hamqth_session_key')) {
|
||||
|
||||
if (!$this->session->userdata('hamqth_session_key')) {
|
||||
$hamqth_session_key = $this->hamqth->session($this->session->userdata('callbook_username'), $decrypted_password);
|
||||
$this->session->set_userdata('hamqth_session_key', $hamqth_session_key);
|
||||
}
|
||||
|
|
@ -4846,20 +4862,20 @@ class Logbook_model extends CI_Model
|
|||
|
||||
// [JSON PLOT] return array for plot qso for map //
|
||||
public function get_plot_array_for_map($qsos_result, $isVisitor = false)
|
||||
{
|
||||
{
|
||||
$this->load->library('qra');
|
||||
$CI = &get_instance();
|
||||
$CI->load->library('DxccFlag');
|
||||
|
||||
|
||||
$json["markers"] = array();
|
||||
|
||||
|
||||
foreach ($qsos_result as $row) {
|
||||
$plot = array('lat' => 0, 'lng' => 0, 'html' => '', 'label' => '', 'flag' => '', 'confirmed' => 'N');
|
||||
|
||||
|
||||
$plot['label'] = $row->COL_CALL;
|
||||
$plot['callsign'] = $row->COL_CALL;
|
||||
$flag = strtolower($CI->dxccflag->getISO($row->COL_DXCC));
|
||||
$plot['flag'] = '<span data-bs-toggle="tooltip" title="' . ucwords(strtolower(($row->name==null?"- NONE -":$row->name))) . '"><span class="fi fi-' . $flag .'"></span></span> ';
|
||||
$plot['flag'] = '<span data-bs-toggle="tooltip" title="' . ucwords(strtolower(($row->name == null ? "- NONE -" : $row->name))) . '"><span class="fi fi-' . $flag . '"></span></span> ';
|
||||
$plot['html'] = ($row->COL_GRIDSQUARE != null ? "<b>Grid:</b> " . $row->COL_GRIDSQUARE . "<br />" : "");
|
||||
$plot['html'] .= "<b>Date/Time:</b> " . $row->COL_TIME_ON . "<br />";
|
||||
$plot['html'] .= ($row->COL_SAT_NAME != null) ? ("<b>SAT:</b> " . $row->COL_SAT_NAME . "<br />") : ("<b>Band:</b> " . $row->COL_BAND . " ");
|
||||
|
|
@ -4920,12 +4936,13 @@ class Logbook_model extends CI_Model
|
|||
}
|
||||
|
||||
/**
|
||||
* Processes a batch of QRZ ADIF records for efficient database updates.
|
||||
*
|
||||
* @param array $batch_data Array of records from the ADIF file.
|
||||
* @return string HTML table rows for the processed batch.
|
||||
*/
|
||||
public function process_qrz_batch($batch_data) {
|
||||
* Processes a batch of QRZ ADIF records for efficient database updates.
|
||||
*
|
||||
* @param array $batch_data Array of records from the ADIF file.
|
||||
* @return string HTML table rows for the processed batch.
|
||||
*/
|
||||
public function process_qrz_batch($batch_data)
|
||||
{
|
||||
$table = "";
|
||||
$update_batch_data = [];
|
||||
$this->load->model('Stations');
|
||||
|
|
@ -4935,14 +4952,14 @@ class Logbook_model extends CI_Model
|
|||
}
|
||||
|
||||
// Step 1: Build WHERE clause for fetching potential matches
|
||||
$this->db->select($this->config->item('table_name').'.COL_PRIMARY_KEY, '.$this->config->item('table_name').'.COL_CALL, '.$this->config->item('table_name').'.COL_TIME_ON, '.$this->config->item('table_name').'.COL_BAND, '.$this->config->item('table_name').'.COL_MODE, ');
|
||||
$this->db->select($this->config->item('table_name') . '.COL_PRIMARY_KEY, ' . $this->config->item('table_name') . '.COL_CALL, ' . $this->config->item('table_name') . '.COL_TIME_ON, ' . $this->config->item('table_name') . '.COL_BAND, ' . $this->config->item('table_name') . '.COL_MODE, ');
|
||||
$this->db->from($this->config->item('table_name'));
|
||||
$this->db->group_start(); // Start grouping OR conditions
|
||||
foreach ($batch_data as $record) {
|
||||
$this->db->or_group_start(); // Start group for this record's AND conditions
|
||||
$this->db->where($this->config->item('table_name').'.COL_CALL', $record['call']);
|
||||
$this->db->like($this->config->item('table_name').'.COL_TIME_ON', $record['time_on'], 'after');
|
||||
$this->db->where($this->config->item('table_name').'.COL_BAND', $record['band']);
|
||||
$this->db->where($this->config->item('table_name') . '.COL_CALL', $record['call']);
|
||||
$this->db->like($this->config->item('table_name') . '.COL_TIME_ON', $record['time_on'], 'after');
|
||||
$this->db->where($this->config->item('table_name') . '.COL_BAND', $record['band']);
|
||||
$this->db->group_end(); // End group for this record's AND conditions
|
||||
}
|
||||
$this->db->group_end(); // End grouping OR conditions
|
||||
|
|
@ -4954,7 +4971,7 @@ class Logbook_model extends CI_Model
|
|||
// Index DB results for faster lookup
|
||||
$indexed_results = [];
|
||||
foreach ($db_results as $row) {
|
||||
$time = substr($row['COL_TIME_ON'], 0, 16);
|
||||
$time = substr($row['COL_TIME_ON'], 0, 16);
|
||||
$key = $row['COL_CALL'] . '|' . $time . '|' . $row['COL_BAND'];
|
||||
$indexed_results[$key] = $row['COL_PRIMARY_KEY'];
|
||||
}
|
||||
|
|
@ -5003,11 +5020,12 @@ class Logbook_model extends CI_Model
|
|||
* @param string $user_format The user's preferred date format (e.g., 'd/m/Y', 'Y-m-d')
|
||||
* @return string Returns date in Y-m-d format for database storage, or original input if parsing fails
|
||||
*/
|
||||
private function parse_user_date($date_input, $user_format = null) {
|
||||
private function parse_user_date($date_input, $user_format = null)
|
||||
{
|
||||
if (empty($date_input)) {
|
||||
return $date_input;
|
||||
}
|
||||
|
||||
|
||||
// If no user format provided, try to get it from session or config
|
||||
if ($user_format === null) {
|
||||
if ($this->session->userdata('user_date_format')) {
|
||||
|
|
@ -5016,19 +5034,19 @@ class Logbook_model extends CI_Model
|
|||
$user_format = $this->config->item('qso_date_format');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Try to parse with the user's format first
|
||||
$date = DateTime::createFromFormat($user_format, $date_input);
|
||||
if ($date !== false) {
|
||||
return $date->format('Y-m-d');
|
||||
}
|
||||
|
||||
|
||||
// Fallback to strtotime for formats it can handle (mostly Y-m-d, m/d/Y, etc.)
|
||||
$timestamp = strtotime($date_input);
|
||||
if ($timestamp !== false) {
|
||||
return date('Y-m-d', $timestamp);
|
||||
}
|
||||
|
||||
|
||||
// If all parsing fails, return the original input and let the database handle it
|
||||
return $date_input;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -220,6 +220,16 @@ class Logbooks_model extends CI_Model {
|
|||
$this->db->update('station_logbooks', $data);
|
||||
}
|
||||
|
||||
function save_public_radio_status($public_radio_status, $logbook_id) {
|
||||
$data = array(
|
||||
'public_radio_status' => xss_clean($public_radio_status),
|
||||
);
|
||||
|
||||
$this->db->where('user_id', $this->session->userdata('user_id'));
|
||||
$this->db->where('logbook_id', xss_clean($logbook_id));
|
||||
$this->db->update('station_logbooks', $data);
|
||||
}
|
||||
|
||||
function save_public_slug($public_slug, $logbook_id) {
|
||||
$data = array(
|
||||
'public_slug' => xss_clean($public_slug),
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class LotwCert extends CI_Model {
|
|||
*/
|
||||
function lotw_certs($user_id) {
|
||||
|
||||
$this->db->select('lotw_certs.lotw_cert_id as lotw_cert_id, lotw_certs.callsign as callsign, dxcc_entities.name as cert_dxcc, dxcc_entities.end as cert_dxcc_end, lotw_certs.qso_start_date as qso_start_date, lotw_certs.qso_end_date as qso_end_date, lotw_certs.date_created as date_created, lotw_certs.date_expires as date_expires, lotw_certs.last_upload as last_upload');
|
||||
$this->db->select('lotw_certs.lotw_cert_id as lotw_cert_id, lotw_certs.callsign as callsign, dxcc_entities.name as cert_dxcc, dxcc_entities.end as cert_dxcc_end, lotw_certs.qso_start_date as qso_start_date, lotw_certs.qso_end_date as qso_end_date, lotw_certs.date_created as date_created, lotw_certs.date_expires as date_expires, lotw_certs.last_upload as last_upload, lotw_certs.archived as archived');
|
||||
$this->db->where('user_id', $user_id);
|
||||
$this->db->join('dxcc_entities','lotw_certs.cert_dxcc_id = dxcc_entities.adif','left');
|
||||
$this->db->order_by('cert_dxcc', 'ASC');
|
||||
|
|
@ -77,6 +77,29 @@ class LotwCert extends CI_Model {
|
|||
$this->db->delete('lotw_certs');
|
||||
}
|
||||
|
||||
function toggle_archive_certificate($user_id, $lotw_cert_id) {
|
||||
// First get current archive status
|
||||
$this->db->select('archived');
|
||||
$this->db->where('lotw_cert_id', $lotw_cert_id);
|
||||
$this->db->where('user_id', $user_id);
|
||||
$query = $this->db->get('lotw_certs');
|
||||
|
||||
if($query->num_rows() == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$current_status = $query->row()->archived;
|
||||
$new_status = $current_status ? 0 : 1;
|
||||
|
||||
// Update the archive status
|
||||
$data = array('archived' => $new_status);
|
||||
$this->db->where('lotw_cert_id', $lotw_cert_id);
|
||||
$this->db->where('user_id', $user_id);
|
||||
$this->db->update('lotw_certs', $data);
|
||||
|
||||
return array('archived' => $new_status);
|
||||
}
|
||||
|
||||
function last_upload($certID) {
|
||||
|
||||
$data = array(
|
||||
|
|
@ -96,7 +119,7 @@ class LotwCert extends CI_Model {
|
|||
}
|
||||
|
||||
function lotw_cert_expired($user_id, $date) {
|
||||
$array = array('user_id' => $user_id, 'date_expires <' => $date);
|
||||
$array = array('user_id' => $user_id, 'date_expires <' => $date, 'archived' => 0);
|
||||
$this->db->where($array);
|
||||
$query = $this->db->get('lotw_certs');
|
||||
|
||||
|
|
@ -108,7 +131,7 @@ class LotwCert extends CI_Model {
|
|||
}
|
||||
|
||||
function lotw_cert_expiring($user_id, $date) {
|
||||
$array = array('user_id' => $user_id, 'DATE_SUB(date_expires, INTERVAL 30 DAY) <' => $date, 'date_expires >' => $date);
|
||||
$array = array('user_id' => $user_id, 'DATE_SUB(date_expires, INTERVAL 30 DAY) <' => $date, 'date_expires >' => $date, 'archived' => 0);
|
||||
$this->db->where($array);
|
||||
$query = $this->db->get('lotw_certs');
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,216 @@
|
|||
<?php
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Mostworked_model extends CI_Model
|
||||
{
|
||||
/*
|
||||
* Get callsigns worked more than a minimum number of times from the active logbook
|
||||
*/
|
||||
function get_most_worked_callsigns($filters = array())
|
||||
{
|
||||
$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 array();
|
||||
}
|
||||
|
||||
$location_list = "'" . implode("','", $logbooks_locations_array) . "'";
|
||||
|
||||
// Set defaults
|
||||
$min_qsos = isset($filters['min_qsos']) ? intval($filters['min_qsos']) : 5;
|
||||
$band = isset($filters['band']) ? $filters['band'] : 'all';
|
||||
$mode = isset($filters['mode']) ? $filters['mode'] : 'all';
|
||||
$satellite = isset($filters['satellite']) ? $filters['satellite'] : 'all';
|
||||
$fromdate = isset($filters['fromdate']) ? $filters['fromdate'] : '';
|
||||
$todate = isset($filters['todate']) ? $filters['todate'] : '';
|
||||
|
||||
$sql = "SELECT
|
||||
CASE
|
||||
WHEN col_call REGEXP '/[PMAQLBR]$|/MM$|/AM$|/QRP$|/LH$|/BCN$' THEN
|
||||
SUBSTRING(col_call, 1, LOCATE('/', col_call) - 1)
|
||||
ELSE
|
||||
col_call
|
||||
END as callsign,
|
||||
COUNT(*) as contact_count,
|
||||
MIN(col_time_on) as first_qso,
|
||||
MAX(col_time_on) as last_qso,
|
||||
GROUP_CONCAT(DISTINCT col_band ORDER BY col_band) as bands,
|
||||
GROUP_CONCAT(DISTINCT COALESCE(col_submode, col_mode) ORDER BY col_mode) as modes
|
||||
FROM " . $this->config->item('table_name') . "
|
||||
WHERE station_id IN (" . $location_list . ")
|
||||
AND col_call IS NOT NULL
|
||||
AND col_call != ''";
|
||||
|
||||
// Apply filters
|
||||
if ($band != 'all') {
|
||||
if ($band == 'SAT') {
|
||||
$sql .= " AND col_prop_mode = 'SAT'";
|
||||
} else {
|
||||
$sql .= " AND col_band = '" . $this->db->escape_str($band) . "'";
|
||||
$sql .= " AND (col_prop_mode != 'SAT' OR col_prop_mode IS NULL)";
|
||||
}
|
||||
}
|
||||
|
||||
if ($mode != 'all') {
|
||||
$sql .= " AND (col_mode = '" . $this->db->escape_str($mode) . "' OR col_submode = '" . $this->db->escape_str($mode) . "')";
|
||||
}
|
||||
|
||||
if ($satellite != 'all') {
|
||||
$sql .= " AND col_sat_name = '" . $this->db->escape_str($satellite) . "'";
|
||||
}
|
||||
|
||||
if (!empty($fromdate)) {
|
||||
$sql .= " AND DATE(col_time_on) >= '" . $this->db->escape_str($fromdate) . "'";
|
||||
}
|
||||
|
||||
if (!empty($todate)) {
|
||||
$sql .= " AND DATE(col_time_on) <= '" . $this->db->escape_str($todate) . "'";
|
||||
}
|
||||
|
||||
$sql .= " GROUP BY CASE
|
||||
WHEN col_call REGEXP '/[PMAQLBR]$|/MM$|/AM$|/QRP$|/LH$|/BCN$' THEN
|
||||
SUBSTRING(col_call, 1, LOCATE('/', col_call) - 1)
|
||||
ELSE
|
||||
col_call
|
||||
END
|
||||
HAVING contact_count >= " . $min_qsos . "
|
||||
ORDER BY contact_count DESC, callsign ASC";
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
return $query->result();
|
||||
}
|
||||
|
||||
/*
|
||||
* Get list of modes from the active logbook
|
||||
*/
|
||||
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) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$location_list = "'" . implode("','", $logbooks_locations_array) . "'";
|
||||
|
||||
$sql = "SELECT DISTINCT COALESCE(col_submode, col_mode) as mode
|
||||
FROM " . $this->config->item('table_name') . "
|
||||
WHERE station_id IN (" . $location_list . ")
|
||||
AND COALESCE(col_submode, col_mode) IS NOT NULL
|
||||
AND COALESCE(col_submode, col_mode) != ''
|
||||
ORDER BY mode";
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
return $query->result();
|
||||
}
|
||||
|
||||
/*
|
||||
* Get list of satellites from the active logbook
|
||||
*/
|
||||
function get_satellites()
|
||||
{
|
||||
$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 array();
|
||||
}
|
||||
|
||||
$location_list = "'" . implode("','", $logbooks_locations_array) . "'";
|
||||
|
||||
$sql = "SELECT DISTINCT col_sat_name as satellite
|
||||
FROM " . $this->config->item('table_name') . "
|
||||
WHERE station_id IN (" . $location_list . ")
|
||||
AND col_sat_name IS NOT NULL
|
||||
AND col_sat_name != ''
|
||||
ORDER BY col_sat_name";
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
return $query->result();
|
||||
}
|
||||
|
||||
/*
|
||||
* Get list of bands from the active logbook
|
||||
*/
|
||||
function get_bands()
|
||||
{
|
||||
$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 array();
|
||||
}
|
||||
|
||||
$location_list = "'" . implode("','", $logbooks_locations_array) . "'";
|
||||
|
||||
$sql = "SELECT DISTINCT col_band as band
|
||||
FROM " . $this->config->item('table_name') . "
|
||||
WHERE station_id IN (" . $location_list . ")
|
||||
AND col_band IS NOT NULL
|
||||
AND col_band != ''
|
||||
AND (col_prop_mode != 'SAT' OR col_prop_mode IS NULL)
|
||||
ORDER BY
|
||||
CASE col_band
|
||||
WHEN '160m' THEN 1
|
||||
WHEN '80m' THEN 2
|
||||
WHEN '60m' THEN 3
|
||||
WHEN '40m' THEN 4
|
||||
WHEN '30m' THEN 5
|
||||
WHEN '20m' THEN 6
|
||||
WHEN '17m' THEN 7
|
||||
WHEN '15m' THEN 8
|
||||
WHEN '12m' THEN 9
|
||||
WHEN '10m' THEN 10
|
||||
WHEN '6m' THEN 11
|
||||
WHEN '4m' THEN 12
|
||||
WHEN '2m' THEN 13
|
||||
WHEN '1.25m' THEN 14
|
||||
WHEN '70cm' THEN 15
|
||||
ELSE 999
|
||||
END, col_band";
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
$results = array();
|
||||
foreach($query->result() as $row) {
|
||||
$results[] = $row->band;
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get detailed contact information for a specific callsign
|
||||
*/
|
||||
function get_callsign_details($callsign)
|
||||
{
|
||||
$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 array();
|
||||
}
|
||||
|
||||
$location_list = "'" . implode("','", $logbooks_locations_array) . "'";
|
||||
|
||||
$this->db->select('col_time_on, col_band, col_mode, col_submode, col_rst_sent, col_rst_rcvd, col_country, col_qsl_sent, col_qsl_rcvd');
|
||||
$this->db->from($this->config->item('table_name'));
|
||||
$this->db->where('station_id IN (' . $location_list . ')', NULL, FALSE);
|
||||
$this->db->where('col_call', $callsign);
|
||||
$this->db->order_by('col_time_on', 'DESC');
|
||||
|
||||
$query = $this->db->get();
|
||||
|
||||
return $query->result();
|
||||
}
|
||||
}
|
||||
|
|
@ -12,12 +12,19 @@
|
|||
<div class="alert alert-warning" role="warning">
|
||||
Private feed key empty. Please set the feed key in your profile.
|
||||
</div>
|
||||
<?php } elseif ($error) { ?>
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<strong>Connection Error:</strong> <?php echo htmlspecialchars($error_message); ?>
|
||||
</div>
|
||||
<?php } elseif ($rovedata === null || !isset($rovedata['data'])) { ?>
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<strong>Data Error:</strong> Unable to retrieve satellite data. Please try refreshing the page or check back later.
|
||||
</div>
|
||||
<?php } elseif ($rovedata['data'] == []) { ?>
|
||||
<div class="alert alert-warning" role="warning">
|
||||
<?php echo lang('hams_at_no_activations_found'); ?>
|
||||
</div>
|
||||
<?php } else { ?>
|
||||
<?php if ($rovedata['data'] == []) { ?>
|
||||
<div class="alert alert-warning" role="warning">
|
||||
<?php echo lang('hams_at_no_activations_found'); ?>
|
||||
</div>
|
||||
<?php } else { ?>
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -152,6 +159,5 @@
|
|||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
|
@ -46,7 +46,6 @@
|
|||
|
||||
<h2><?php echo $page_title; ?></h2>
|
||||
|
||||
<?php if ($visitor == false) { ?>
|
||||
<form class="d-flex align-items-center">
|
||||
<label class="my-1 me-2" for="band"><?php echo lang('gridsquares_band'); ?></label>
|
||||
<select class="form-select my-1 me-sm-2 w-auto" id="band">
|
||||
|
|
@ -75,12 +74,19 @@
|
|||
<option value="All"><?php echo lang('general_word_all')?></option>
|
||||
<?php
|
||||
foreach($modes as $mode){
|
||||
if ($mode->submode ?? '' == '') {
|
||||
if (is_object($mode)) {
|
||||
// Handle object format (from gridmap_model->get_worked_modes())
|
||||
if ($mode->submode ?? '' == '') {
|
||||
echo '<option value="' . $mode->mode . '">' . strtoupper($mode->mode) . '</option>'."\n";
|
||||
}
|
||||
} else {
|
||||
// Handle simple string format (from visitor implementation)
|
||||
echo '<option value="' . $mode . '">' . strtoupper($mode) . '</option>'."\n";
|
||||
}
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<?php if ($visitor == false) { ?>
|
||||
<label class="my-1 me-2"><?php echo lang('gridsquares_confirmation'); ?></label>
|
||||
<div>
|
||||
<div class="form-check-inline">
|
||||
|
|
@ -116,11 +122,11 @@
|
|||
<label class="form-check-label" for="qrz">QRZ.com</label>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<button id="plot" type="button" name="plot" class="btn btn-primary me-1 ld-ext-right ld-ext-right-plot" onclick="gridPlot(this.form,<?php echo $visitor == true ? "true" : "false"; ?>)"><?php echo lang('gridsquares_button_plot'); ?><div class="ld ld-ring ld-spin"></div></button>
|
||||
<button id="clear" type="button" name="clear" class="btn btn-primary me-1 ld-ext-right ld-ext-right-clear" onclick="clearMarkers()"><?php echo lang('gridsquares_button_clear_markers'); ?><div class="ld ld-ring ld-spin"></div></button>
|
||||
</form>
|
||||
<?php } ?>
|
||||
|
||||
<?php if($this->session->flashdata('message')) { ?>
|
||||
<!-- Display Message -->
|
||||
|
|
|
|||
|
|
@ -158,6 +158,31 @@ if ($this->session->userdata('user_id') != null) {
|
|||
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/buttons.html5.min.js"></script>
|
||||
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/selectize.js"></script>
|
||||
|
||||
<?php if ($this->uri->segment(1) == "mostworked") { ?>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#mostworked_table').DataTable({
|
||||
"pageLength": 25,
|
||||
"responsive": true,
|
||||
"order": [[ 0, "asc" ]],
|
||||
"columnDefs": [
|
||||
{ "orderable": false, "targets": 0 },
|
||||
{ "type": "num", "targets": 2 }
|
||||
],
|
||||
"language": {
|
||||
url: getDataTablesLanguageUrl()
|
||||
}
|
||||
});
|
||||
|
||||
// Clear filters button
|
||||
$('#clear_filters').click(function() {
|
||||
$('#mostworked_filter_form')[0].reset();
|
||||
$('#mostworked_filter_form').submit();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($this->uri->segment(1) == "station") { ?>
|
||||
<script language="javascript" src="<?php echo base_url(); ?>assets/js/HamGridSquare.js"></script>
|
||||
<script src="<?php echo base_url(); ?>assets/js/sections/station_locations.js"></script>
|
||||
|
|
|
|||
|
|
@ -133,6 +133,8 @@
|
|||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="<?php echo site_url('timeplotter'); ?>" title="View time when worked"><i class="fas fa-chart-bar"></i> <?php echo lang('menu_timeplotter'); ?></a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="<?php echo site_url('mostworked'); ?>" title="Most Worked Callsigns"><i class="fas fa-address-book"></i> <?php echo lang('menu_most_worked'); ?></a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="<?php echo site_url('map/custom'); ?>" title="Custom Maps of QSOs"><i class="fas fa-map"></i> <?php echo lang('menu_custom_maps'); ?></a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="<?php echo site_url('continents'); ?>" title="Continents"><i class="fas fa-globe-europe"></i> <?php echo lang('menu_continents'); ?></a>
|
||||
|
|
|
|||
|
|
@ -73,15 +73,40 @@
|
|||
<form style="display: inline;">
|
||||
<input type="hidden" name="logbook_id" value="<?php echo $station_logbook_details->logbook_id; ?>">
|
||||
<p style="margin-top: 15px;"><?php echo lang('station_logbooks_public_search_hint'); ?></p>
|
||||
<label for="public_search"><?php echo lang('station_logbooks_public_search_enabled'); ?></label>
|
||||
<select class="form-select" id="public_search" name="public_search" hx-post="<?php echo site_url('logbooks/save_publicsearch/'); ?>" hx-target="#publicSearchForm" hx-trigger="change">
|
||||
<option value="1" <?php if ($station_logbook_details->public_search == 1) { echo " selected =\"selected\""; } ?>><?php echo lang('general_word_yes'); ?></option>
|
||||
<option value="0" <?php if ($station_logbook_details->public_search == 0) { echo " selected =\"selected\""; } ?>><?php echo lang('general_word_no'); ?></option>
|
||||
</select>
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="public_search" name="public_search" value="1"
|
||||
<?php if ($station_logbook_details->public_search == 1) { echo " checked"; } ?>
|
||||
hx-post="<?php echo site_url('logbooks/save_publicsearch/'); ?>"
|
||||
hx-target="#publicSearchForm"
|
||||
hx-trigger="change"
|
||||
hx-vals='{"logbook_id": "<?php echo $station_logbook_details->logbook_id; ?>"}'>
|
||||
<label class="form-check-label" for="public_search">
|
||||
<?php echo lang('station_logbooks_public_search_enabled'); ?>
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
<p>
|
||||
<div id="publicSearchForm">
|
||||
</div>
|
||||
|
||||
<form style="display: inline;">
|
||||
<input type="hidden" name="logbook_id" value="<?php echo $station_logbook_details->logbook_id; ?>">
|
||||
<p style="margin-top: 15px;"><?php echo lang('station_logbooks_public_radio_status_hint'); ?></p>
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="public_radio_status" name="public_radio_status" value="1"
|
||||
<?php if (isset($station_logbook_details->public_radio_status) && $station_logbook_details->public_radio_status == 1) { echo " checked"; } ?>
|
||||
hx-post="<?php echo site_url('logbooks/save_publicradiostatus/'); ?>"
|
||||
hx-target="#publicRadioStatusForm"
|
||||
hx-trigger="change"
|
||||
hx-vals='{"logbook_id": "<?php echo $station_logbook_details->logbook_id; ?>"}'>
|
||||
<label class="form-check-label" for="public_radio_status">
|
||||
<?php echo lang('station_logbooks_public_radio_status_enabled'); ?>
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
<p>
|
||||
<div id="publicRadioStatusForm">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -78,12 +78,16 @@
|
|||
<?php $current_date = date('Y-m-d H:i:s'); ?>
|
||||
<?php $warning_date = date('Y-m-d H:i:s', strtotime($row->date_expires.'-30 days')); ?>
|
||||
|
||||
<?php if ($current_date > $row->date_expires) { ?>
|
||||
<span class="badge text-bg-danger"><?php echo lang('lotw_expired'); ?></span>
|
||||
<?php } else if ($current_date <= $row->date_expires && $current_date > $warning_date) { ?>
|
||||
<span class="badge text-bg-warning"><?php echo lang('lotw_expiring'); ?></span>
|
||||
<?php if ($row->archived) { ?>
|
||||
<span class="badge text-bg-secondary"><?php echo 'Archived'; ?></span>
|
||||
<?php } else { ?>
|
||||
<span class="badge text-bg-success"><?php echo lang('lotw_valid'); ?></span>
|
||||
<?php if ($current_date > $row->date_expires) { ?>
|
||||
<span class="badge text-bg-danger"><?php echo lang('lotw_expired'); ?></span>
|
||||
<?php } else if ($current_date <= $row->date_expires && $current_date > $warning_date) { ?>
|
||||
<span class="badge text-bg-warning"><?php echo lang('lotw_expiring'); ?></span>
|
||||
<?php } else { ?>
|
||||
<span class="badge text-bg-success"><?php echo lang('lotw_valid'); ?></span>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($row->last_upload) {
|
||||
|
|
@ -94,6 +98,15 @@
|
|||
<?php } ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if ($row->archived) { ?>
|
||||
<a class="btn btn-outline-info btn-sm me-1" href="<?php echo site_url('lotw/toggle_archive_cert/'.$row->lotw_cert_id); ?>" role="button">
|
||||
<i class="fas fa-box-open"></i> Unarchive
|
||||
</a>
|
||||
<?php } else { ?>
|
||||
<a class="btn btn-outline-secondary btn-sm me-1" href="<?php echo site_url('lotw/toggle_archive_cert/'.$row->lotw_cert_id); ?>" role="button">
|
||||
<i class="fas fa-archive"></i> Archive
|
||||
</a>
|
||||
<?php } ?>
|
||||
<a class="btn btn-outline-danger btn-sm" href="<?php echo site_url('lotw/delete_cert/'.$row->lotw_cert_id); ?>" role="button"><i class="far fa-trash-alt"></i> <?php echo lang('lotw_btn_delete'); ?></a>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,137 @@
|
|||
<div class="container" style="padding-top: 10px;">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h2 class="card-title">Most Worked Callsigns</h2>
|
||||
<p class="card-text">Callsigns worked multiple times from your active logbook, showing contact frequency and other details.</p>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- Filter Form -->
|
||||
<form method="post" id="mostworked_filter_form">
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-2">
|
||||
<label for="band" class="form-label">Band:</label>
|
||||
<select class="form-select form-select-sm" name="band" id="band">
|
||||
<option value="all" <?php echo ($filters['band'] == 'all') ? 'selected' : ''; ?>>All Bands</option>
|
||||
<option value="SAT" <?php echo ($filters['band'] == 'SAT') ? 'selected' : ''; ?>>Satellites</option>
|
||||
<?php foreach($bands as $band) { ?>
|
||||
<option value="<?php echo $band; ?>" <?php echo ($filters['band'] == $band) ? 'selected' : ''; ?>><?php echo $band; ?></option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="mode" class="form-label">Mode:</label>
|
||||
<select class="form-select form-select-sm" name="mode" id="mode">
|
||||
<option value="all" <?php echo ($filters['mode'] == 'all') ? 'selected' : ''; ?>>All Modes</option>
|
||||
<?php foreach($modes as $mode) { ?>
|
||||
<option value="<?php echo $mode->mode; ?>" <?php echo ($filters['mode'] == $mode->mode) ? 'selected' : ''; ?>><?php echo $mode->mode; ?></option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="satellite" class="form-label">Satellite:</label>
|
||||
<select class="form-select form-select-sm" name="satellite" id="satellite">
|
||||
<option value="all" <?php echo ($filters['satellite'] == 'all') ? 'selected' : ''; ?>>All Satellites</option>
|
||||
<?php foreach($satellites as $sat) { ?>
|
||||
<option value="<?php echo $sat->satellite; ?>" <?php echo ($filters['satellite'] == $sat->satellite) ? 'selected' : ''; ?>><?php echo $sat->satellite; ?></option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="fromdate" class="form-label">From Date:</label>
|
||||
<input type="date" class="form-control form-control-sm" name="fromdate" id="fromdate" value="<?php echo $filters['fromdate']; ?>">
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="todate" class="form-label">To Date:</label>
|
||||
<input type="date" class="form-control form-control-sm" name="todate" id="todate" value="<?php echo $filters['todate']; ?>">
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label for="min_qsos" class="form-label">Min QSOs:</label>
|
||||
<select class="form-select form-select-sm" name="min_qsos" id="min_qsos">
|
||||
<option value="2" <?php echo ($filters['min_qsos'] == 2) ? 'selected' : ''; ?>>2+</option>
|
||||
<option value="3" <?php echo ($filters['min_qsos'] == 3) ? 'selected' : ''; ?>>3+</option>
|
||||
<option value="5" <?php echo ($filters['min_qsos'] == 5) ? 'selected' : ''; ?>>5+</option>
|
||||
<option value="10" <?php echo ($filters['min_qsos'] == 10) ? 'selected' : ''; ?>>10+</option>
|
||||
<option value="20" <?php echo ($filters['min_qsos'] == 20) ? 'selected' : ''; ?>>20+</option>
|
||||
<option value="50" <?php echo ($filters['min_qsos'] == 50) ? 'selected' : ''; ?>>50+</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-12">
|
||||
<button type="submit" class="btn btn-primary btn-sm">Apply Filters</button>
|
||||
<button type="button" class="btn btn-secondary btn-sm" id="clear_filters">Clear Filters</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<?php if (empty($mostworked_callsigns)) { ?>
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<strong>No QSOs found!</strong> Make sure you have an active logbook selected and QSOs logged, or try adjusting your filters.
|
||||
</div>
|
||||
<?php } else { ?>
|
||||
<div class="alert alert-info" role="alert">
|
||||
<strong><?php echo count($mostworked_callsigns); ?> callsigns</strong> worked <?php echo $filters['min_qsos']; ?>+ times with current filters.
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table id="mostworked_table" class="table table-striped table-hover">
|
||||
<thead class="table-dark">
|
||||
<tr>
|
||||
<th class="text-center" style="width: 80px;">Rank</th>
|
||||
<th style="width: 150px;">Callsign</th>
|
||||
<th class="text-center" style="width: 100px;">Contacts</th>
|
||||
<th class="text-center" style="width: 120px;">First QSO</th>
|
||||
<th class="text-center" style="width: 120px;">Last QSO</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $rank = 1; ?>
|
||||
<?php
|
||||
// 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/cloudlog.php
|
||||
$custom_date_format = $this->config->item('qso_date_format');
|
||||
}
|
||||
|
||||
foreach ($mostworked_callsigns as $row) { ?>
|
||||
<tr>
|
||||
<td class="text-center align-middle">
|
||||
<span class="badge bg-secondary"><?php echo $rank++; ?></span>
|
||||
</td>
|
||||
<td class="align-middle">
|
||||
<strong class="text-primary fs-6"><?php echo str_replace("0","Ø",strtoupper($row->callsign)); ?></strong>
|
||||
</td>
|
||||
<td class="text-center align-middle">
|
||||
<span class="badge bg-primary fs-6"><?php echo $row->contact_count; ?></span>
|
||||
</td>
|
||||
<td class="text-center align-middle">
|
||||
<small class="text-muted">
|
||||
<?php
|
||||
$timestamp = strtotime($row->first_qso);
|
||||
echo date($custom_date_format, $timestamp);
|
||||
?>
|
||||
</small>
|
||||
</td>
|
||||
<td class="text-center align-middle">
|
||||
<small class="text-muted">
|
||||
<?php
|
||||
$timestamp = strtotime($row->last_qso);
|
||||
echo date($custom_date_format, $timestamp);
|
||||
?>
|
||||
</small>
|
||||
</td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -129,7 +129,9 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
|
|||
<div class="col-sm-4">
|
||||
<div class="table-responsive">
|
||||
|
||||
<div id="radio_display" hx-get="<?php echo site_url('visitor/radio_display_component'); ?>" hx-trigger="load, every 5s"></div>
|
||||
<?php if (isset($logbook_settings->public_radio_status) && $logbook_settings->public_radio_status == 1) { ?>
|
||||
<div id="radio_display" hx-get="<?php echo site_url('visitor/radio_display_component'); ?>" hx-trigger="load, every 30s"></div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<table class="table table-striped">
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@
|
|||
var q_lng = -32.695312;
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($slug)) { ?>
|
||||
var qso_loc = '<?php echo site_url('visitor/map/'.$slug);?>';
|
||||
<?php if(isset($slug)) {
|
||||
$offset = $this->uri->segment(4);
|
||||
?>
|
||||
|
||||
|
||||
var qso_loc = '<?php echo site_url('visitor/map/'.$slug.'/'.$offset);?>';
|
||||
<?php } ?>
|
||||
var q_zoom = 3;
|
||||
|
||||
|
|
@ -57,53 +61,37 @@
|
|||
|
||||
<?php if ($this->uri->segment(2) == "satellites") { ?>
|
||||
|
||||
<script type="text/javascript" src="<?php echo base_url();?>assets/js/leaflet/L.MaidenheadColoured.js"></script>
|
||||
<script type="text/javascript" src="<?php echo base_url();?>assets/js/leaflet/geocoding.js"></script>
|
||||
<script type="text/javascript" src="<?php echo base_url();?>assets/js/leaflet/L.MaidenheadColouredGridMap.js"></script>
|
||||
<script type="text/javascript" src="<?php echo base_url();?>assets/js/sections/gridmap.js?"></script>
|
||||
|
||||
<script>
|
||||
|
||||
var layer = L.tileLayer('<?php echo $this->optionslib->get_option('option_map_tile_server');?>', {
|
||||
maxZoom: 18,
|
||||
attribution: '<?php echo $this->optionslib->get_option('option_map_tile_server_copyright');?>',
|
||||
id: 'mapbox.streets'
|
||||
});
|
||||
|
||||
var map = L.map('gridsquare_map', {
|
||||
layers: [layer],
|
||||
center: [19, 0],
|
||||
zoom: 2,
|
||||
fullscreenControl: true,
|
||||
fullscreenControlOptions: {
|
||||
position: 'topleft'
|
||||
},
|
||||
});
|
||||
|
||||
var printer = L.easyPrint({
|
||||
tileLayer: layer,
|
||||
sizeModes: ['Current'],
|
||||
filename: 'myMap',
|
||||
exportOnly: true,
|
||||
hideControlContainer: true
|
||||
}).addTo(map);
|
||||
|
||||
// Set up global variables for gridmap functionality
|
||||
var grid_two = <?php echo $grid_2char; ?>;
|
||||
var grid_four = <?php echo $grid_4char; ?>;
|
||||
var grid_six = <?php echo $grid_6char; ?>;
|
||||
|
||||
var grid_two_count = grid_two.length;
|
||||
var grid_four_count = grid_four.length;
|
||||
var grid_six_count = grid_six.length;
|
||||
|
||||
|
||||
var grid_two_confirmed = <?php echo $grid_2char_confirmed; ?>;
|
||||
var grid_four_confirmed = <?php echo $grid_4char_confirmed; ?>;
|
||||
var grid_six_confirmed = <?php echo $grid_6char_confirmed; ?>;
|
||||
|
||||
var grid_two_confirmed_count = grid_two_confirmed.length;
|
||||
var grid_four_confirmed_count = grid_four_confirmed.length;
|
||||
var grid_six_confirmed_count = grid_six_confirmed.length;
|
||||
// Set up other required global variables
|
||||
var jslayer = '<?php echo $this->optionslib->get_option('option_map_tile_server');?>';
|
||||
var jsattribution = '<?php echo $this->optionslib->get_option('option_map_tile_server_copyright');?>';
|
||||
var gridsquares_gridsquares = "<?php echo lang('gridsquares_gridsquares'); ?>";
|
||||
var gridsquares_gridsquares_confirmed = "<?php echo lang('gridsquares_gridsquares_confirmed'); ?>";
|
||||
var gridsquares_gridsquares_not_confirmed = "<?php echo lang('gridsquares_gridsquares_not_confirmed'); ?>";
|
||||
var gridsquares_gridsquares_total_worked = "<?php echo lang('gridsquares_gridsquares_total_worked'); ?>";
|
||||
|
||||
var visitor = true;
|
||||
var type = "worked";
|
||||
|
||||
var maidenhead = L.maidenhead().addTo(map);
|
||||
// Initialize the map when document is ready
|
||||
$(document).ready(function() {
|
||||
// Use the plot function from gridmap.js to render the initial map
|
||||
plot(visitor, grid_two, grid_four, grid_six, grid_two_confirmed, grid_four_confirmed, grid_six_confirmed);
|
||||
});
|
||||
|
||||
<?php if ($this->uri->segment(1) == "gridsquares" && $this->uri->segment(2) == "band") { ?>
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,16 @@ function gridPlot(form, visitor=true) {
|
|||
ajax_url = site_url + '/gridmap/getGridsjs';
|
||||
}
|
||||
|
||||
// If visitor context, get the slug from the URL and use visitor endpoint
|
||||
if (visitor === true) {
|
||||
var pathParts = window.location.pathname.split('/');
|
||||
var slugIndex = pathParts.indexOf('satellites');
|
||||
if (slugIndex !== -1 && pathParts[slugIndex + 1]) {
|
||||
var slug = pathParts[slugIndex + 1];
|
||||
ajax_url = site_url + '/visitor/getGridsjs';
|
||||
}
|
||||
}
|
||||
|
||||
if (visitor != true) {
|
||||
$.ajax({
|
||||
url: ajax_url,
|
||||
|
|
@ -73,7 +83,42 @@ function gridPlot(form, visitor=true) {
|
|||
},
|
||||
});
|
||||
} else {
|
||||
plot(visitor, grid_two, grid_four, grid_six, grid_two_confirmed, grid_four_confirmed, grid_six_confirmed);
|
||||
// Visitor context - use AJAX to get filtered data
|
||||
var pathParts = window.location.pathname.split('/');
|
||||
var slugIndex = pathParts.indexOf('satellites');
|
||||
if (slugIndex !== -1 && pathParts[slugIndex + 1]) {
|
||||
var slug = pathParts[slugIndex + 1];
|
||||
$.ajax({
|
||||
url: ajax_url,
|
||||
type: 'post',
|
||||
data: {
|
||||
slug: slug,
|
||||
band: $("#band").val(),
|
||||
mode: $("#mode").val(),
|
||||
sat: $("#sats").val(),
|
||||
},
|
||||
success: function (data) {
|
||||
console.log(data);
|
||||
$('.cohidden').show();
|
||||
$(".ld-ext-right-plot").removeClass('running');
|
||||
$(".ld-ext-right-plot").prop('disabled', false);
|
||||
$('#plot').prop("disabled", false);
|
||||
grid_two = data.grid_2char;
|
||||
grid_four = data.grid_4char;
|
||||
grid_six = data.grid_6char;
|
||||
grid_two_confirmed = data.grid_2char_confirmed;
|
||||
grid_four_confirmed = data.grid_4char_confirmed;
|
||||
grid_six_confirmed = data.grid_6char_confirmed;
|
||||
plot(visitor, grid_two, grid_four, grid_six, grid_two_confirmed, grid_four_confirmed, grid_six_confirmed);
|
||||
},
|
||||
error: function (data) {
|
||||
console.error('Error loading visitor grid data:', data);
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// Fallback: use predefined grid data if available
|
||||
plot(visitor, grid_two, grid_four, grid_six, grid_two_confirmed, grid_four_confirmed, grid_six_confirmed);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -348,13 +348,54 @@ var favs={};
|
|||
});
|
||||
|
||||
// Test Consistency value on submit form //
|
||||
$("#qso_input").off('submit').on('submit', function(){
|
||||
var isSubmitting = false;
|
||||
$("#qso_input").off('submit').on('submit', function(e){
|
||||
// Prevent double submission
|
||||
if (isSubmitting) {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
var _submit = true;
|
||||
if ((typeof qso_manual !== "undefined")&&(qso_manual == "1")) {
|
||||
if ($('#qso_input input[name="end_time"]').length == 1) { _submit = testTimeOffConsistency(); }
|
||||
}
|
||||
|
||||
if (_submit) {
|
||||
// Mark as submitting and disable the submit button
|
||||
isSubmitting = true;
|
||||
var submitBtn = $(this).find('button[type="submit"]');
|
||||
var originalText = submitBtn.data('original-text');
|
||||
if (!originalText) {
|
||||
// Store original text first time
|
||||
originalText = submitBtn.html();
|
||||
submitBtn.data('original-text', originalText);
|
||||
}
|
||||
submitBtn.prop('disabled', true);
|
||||
submitBtn.html('<i class="fas fa-spinner fa-spin"></i> Saving...');
|
||||
}
|
||||
|
||||
return _submit;
|
||||
})
|
||||
|
||||
// Prevent Enter key from causing double submissions
|
||||
$("#qso_input").on('keydown', function(e) {
|
||||
if (e.key === 'Enter' && e.target.type !== 'textarea') {
|
||||
if (isSubmitting) {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Reset submission state when page becomes visible again (handles cases where submission gets stuck)
|
||||
document.addEventListener('visibilitychange', function() {
|
||||
if (!document.hidden && typeof isSubmitting !== 'undefined' && isSubmitting) {
|
||||
setTimeout(function() {
|
||||
resetSubmissionState();
|
||||
}, 1000); // Wait 1 second before resetting to avoid interfering with legitimate submissions
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var selected_sat;
|
||||
|
|
@ -477,8 +518,29 @@ function changebadge(entityname) {
|
|||
}
|
||||
}
|
||||
|
||||
/* Function: resetSubmissionState resets the form submission state */
|
||||
function resetSubmissionState() {
|
||||
if (typeof isSubmitting !== 'undefined') {
|
||||
isSubmitting = false;
|
||||
}
|
||||
var submitBtn = $('#qso_input button[type="submit"]');
|
||||
if (submitBtn.length > 0) {
|
||||
submitBtn.prop('disabled', false);
|
||||
// Get the original text from the button or use a fallback
|
||||
var originalText = submitBtn.data('original-text');
|
||||
if (!originalText) {
|
||||
// Store original text first time
|
||||
originalText = submitBtn.html();
|
||||
submitBtn.data('original-text', originalText);
|
||||
}
|
||||
submitBtn.html(originalText);
|
||||
}
|
||||
}
|
||||
|
||||
/* Function: reset_fields is used to reset the fields on the QSO page */
|
||||
function reset_fields() {
|
||||
// Reset submission state
|
||||
resetSubmissionState();
|
||||
|
||||
$('#locator_info').text("");
|
||||
$('#country').val("");
|
||||
|
|
|
|||
文件差异因一行或多行过长而隐藏
正在加载…
在新工单中引用