tag 2.7.1

这个提交包含在:
Peter Goodhall 2025-08-25 13:16:55 +01:00 提交者 GitHub
当前提交 407792800b
找不到此签名对应的密钥
GPG 密钥 ID: B5690EEEBB952194
共有 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","&Oslash;",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("");

文件差异因一行或多行过长而隐藏