比较提交
2 提交
master
...
callsign-h
| 作者 | SHA1 | 提交日期 | |
|---|---|---|---|
|
|
809b2ded83 | ||
|
|
6ab41895ef |
共有 3323 个文件被更改,包括 79241 次插入 和 551483 次删除
|
|
@ -1,9 +0,0 @@
|
|||
MYSQL_ROOT_PASSWORD=rootpassword
|
||||
MYSQL_DATABASE=cloudlog
|
||||
MYSQL_USER=cloudlog
|
||||
MYSQL_PASSWORD=cloudlogpassword
|
||||
MYSQL_HOST=db
|
||||
MYSQL_PORT=3306
|
||||
BASE_LOCATOR=IO91WM
|
||||
WEBSITE_URL=http://localhost
|
||||
DIRECTORY=/var/www/html
|
||||
74
.github/workflows/cypress-tests.yml
vendored
74
.github/workflows/cypress-tests.yml
vendored
|
|
@ -1,74 +0,0 @@
|
|||
on: [pull_request, workflow_dispatch]
|
||||
jobs:
|
||||
cypress-e2e-tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Cache Node modules
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: npm-${{ hashFiles('package-lock.json') }}
|
||||
restore-keys: |
|
||||
npm-
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Cache Cypress
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.cache/Cypress
|
||||
key: cypress-${{ hashFiles('package-lock.json') }}
|
||||
restore-keys: |
|
||||
cypress-
|
||||
|
||||
- name: Install Cypress
|
||||
run: npm install cypress
|
||||
|
||||
- name: Cache .env
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: .env
|
||||
key: .env-${{ hashFiles('.env.sample') }}
|
||||
restore-keys: |
|
||||
.env-
|
||||
|
||||
- name: Setup .env
|
||||
run: |
|
||||
if [ ! -f .env ]; then
|
||||
cp .env.sample .env
|
||||
fi
|
||||
|
||||
- name: Install Docker Compose
|
||||
run: |
|
||||
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
sudo chmod +x /usr/local/bin/docker-compose
|
||||
|
||||
- name: Build Docker services
|
||||
run: docker-compose up -d
|
||||
|
||||
- name: Wait for services to start
|
||||
run: |
|
||||
for i in `seq 1 30`; do
|
||||
curl -s http://localhost:80 > /dev/null && break
|
||||
echo "Waiting for services to start..."
|
||||
sleep 5
|
||||
done
|
||||
|
||||
- name: Populate dxcc_entities table
|
||||
run: |
|
||||
for i in `seq 1 10`; do
|
||||
if curl -f "http://localhost/index.php/update/dxcc"; then
|
||||
echo "DXCC entities populated successfully"
|
||||
break
|
||||
else
|
||||
echo "Failed to populate DXCC entities, retrying in 10 seconds... (attempt $i/10)"
|
||||
sleep 10
|
||||
fi
|
||||
done
|
||||
|
||||
- name: Run Cypress tests
|
||||
run: npx cypress run
|
||||
7
.gitignore
vendored
7
.gitignore
vendored
|
|
@ -11,16 +11,9 @@
|
|||
/images/eqsl_card_images/*.jpg
|
||||
/updates/clublog_scp.txt
|
||||
/assets/qslcard/*
|
||||
/assets/sstvimages/*
|
||||
/assets/js/sections/custom.js
|
||||
/cypress/screenshots
|
||||
/node_modules/
|
||||
.idea/*
|
||||
.DS_Store
|
||||
sync.sh
|
||||
*.p12
|
||||
*.swp
|
||||
.env
|
||||
/node_modules
|
||||
/.vs
|
||||
.vscode/sftp.json
|
||||
|
|
|
|||
13
.vscode/settings.json
vendored
13
.vscode/settings.json
vendored
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
"cSpell.words": [
|
||||
"callsign",
|
||||
"cloudlog",
|
||||
"hamradio",
|
||||
"qslcard",
|
||||
"sstv",
|
||||
"sstvimages",
|
||||
"sstvtable",
|
||||
"SUBMODE",
|
||||
"userdata"
|
||||
]
|
||||
}
|
||||
39
Dockerfile
39
Dockerfile
|
|
@ -1,39 +0,0 @@
|
|||
# Use the official image for PHP and Apache
|
||||
FROM php:7.4-apache
|
||||
|
||||
# Set the working directory to /var/www/html
|
||||
WORKDIR /var/www/html
|
||||
|
||||
# Install system dependencies, including git and libxml2
|
||||
RUN apt-get update && apt-get install -y \
|
||||
libcurl4-openssl-dev \
|
||||
libxml2-dev \
|
||||
libzip-dev \
|
||||
zlib1g-dev \
|
||||
libpng-dev \
|
||||
libonig-dev \
|
||||
default-mysql-client \
|
||||
curl \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& docker-php-ext-install pdo_mysql \
|
||||
&& docker-php-ext-install mysqli \
|
||||
&& docker-php-ext-install gd \
|
||||
&& docker-php-ext-install mbstring \
|
||||
&& docker-php-ext-install zip \
|
||||
&& docker-php-ext-install xml \
|
||||
&& a2enmod rewrite
|
||||
|
||||
# Copy script.sh and make it executable
|
||||
COPY script.sh /usr/local/bin/startup.sh
|
||||
RUN sed -i 's/\r$//' /usr/local/bin/startup.sh && chmod +x /usr/local/bin/startup.sh
|
||||
|
||||
# Configure PHP for larger file uploads (30MB)
|
||||
RUN echo "upload_max_filesize = 30M" >> /usr/local/etc/php/conf.d/uploads.ini \
|
||||
&& echo "post_max_size = 35M" >> /usr/local/etc/php/conf.d/uploads.ini \
|
||||
&& echo "memory_limit = 64M" >> /usr/local/etc/php/conf.d/uploads.ini \
|
||||
&& echo "max_execution_time = 300" >> /usr/local/etc/php/conf.d/uploads.ini \
|
||||
&& echo "max_input_time = 300" >> /usr/local/etc/php/conf.d/uploads.ini
|
||||
|
||||
# Expose port 80
|
||||
EXPOSE 80
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
# Dockerfile-db
|
||||
FROM mariadb:latest
|
||||
|
||||
# Add the install.sql file to the docker image
|
||||
ADD install/assets/install.sql /docker-entrypoint-initdb.d
|
||||
|
||||
# Create a healthcheck script that uses mariadb-admin
|
||||
RUN echo '#!/bin/bash\nmariadb-admin ping -h "localhost" --silent' > /usr/local/bin/healthcheck.sh \
|
||||
&& chmod +x /usr/local/bin/healthcheck.sh
|
||||
|
||||
# Expose port 3306
|
||||
EXPOSE 3306
|
||||
104
README.md
104
README.md
|
|
@ -1,108 +1,34 @@
|
|||
[](https://github.com/magicbug/Cloudlog/actions/workflows/cypress-tests.yml)
|
||||
|
||||
# Cloudlog
|
||||
|
||||
> Important: Only accepting PRs on the "dev" branch.
|
||||
|
||||
Cloudlog is a self-hosted PHP application that allows you to log your amateur radio contacts anywhere. All you need is a web browser and active internet connection.
|
||||
|
||||
While Cloudlog as started by Peter Goodhall, 2M0SQL, although since has received a lot of community code contributions. If you would like to contribute to Cloudlog please see the [Contributing](#contributing) section below.
|
||||
While Cloudlog as started by Peter Goodhall, 2M0SQL, it is has gained a core group of contributors these are listed below. If you would like to contribute to Cloudlog please see the [Contributing](#contributing) section below.
|
||||
|
||||
Core Contributors: 2M0SQL ([@magicbug](https://github.com/magicbug)), LA8AJA ([@AndreasK79](https://github.com/AndreasK79)), DF2ET ([@phl0](https://github.com/phl0)), HB9HIL ([@HB9HIL](https://github.com/HB9HIL)), DJ7NT ([@int2001](https://github.com/int2001))
|
||||
|
||||
Website: [http://www.cloudlog.co.uk](http://www.cloudlog.co.uk)
|
||||
|
||||
## Requirements
|
||||
|
||||
- Linux based Operating System
|
||||
- Apache (Nginx should work)
|
||||
- PHP Version 7.4 (PHP 8.2 works)
|
||||
- MySQL (MySQL 5.7 or higher)
|
||||
* Linux based Operating System
|
||||
* Apache (Nginx should work)
|
||||
* PHP Version 7.4 (PHP 8.2 works)
|
||||
* MySQL (MySQL 5.7 or higher)
|
||||
|
||||
Notes
|
||||
|
||||
- If you want to log microwave QSOs you will need to use a 64bit operating system.
|
||||
- We do not provide Docker support, however you are free to use it if you wish but we will not handle support.
|
||||
* If you want to log microwave QSOs you will need to use a 64bit operating system.
|
||||
* We do not provide Docker support, however you are free to use it if you wish but we will not handle support.
|
||||
|
||||
## Setup
|
||||
|
||||
Installation information can be found on the [wiki](https://github.com/magicbug/Cloudlog/wiki).
|
||||
|
||||
# Docker Development Environment
|
||||
|
||||
This guide provides instructions for setting up a local development environment using Docker and Docker Compose. Please note that this setup is not recommended for production use.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before you begin, you need to install Docker and Docker Compose. You can download them using the following links:
|
||||
|
||||
- [Docker](https://docs.docker.com/get-docker/)
|
||||
- [Docker Compose](https://docs.docker.com/compose/install/)
|
||||
|
||||
## Configuration
|
||||
|
||||
1. Copy the `.env.sample` file to `.env`:
|
||||
|
||||
```bash
|
||||
cp .env.sample .env
|
||||
```
|
||||
|
||||
2. Open the `.env` file and update the values to match your setup. The values from the `.env` file will be used to populate the database connection details on the install page. You should not need to change these unless your setup requires different values.
|
||||
|
||||
**Note:** Docker Compose creates a network for your application, and each service (container) in the Docker Compose file can reach each other via the service name. This is why the `DB_HOST` value in the `.env` file and on the install page should match the service name of the database in the `docker-compose.yml` file. For example, if the database service in `docker-compose.yml` is defined as `db`, then `DB_HOST` should be set as 'db'. This allows the application to communicate with the database service on its internal docker network.
|
||||
|
||||
## Starting the Development Environment
|
||||
|
||||
To start the development environment, run the following command in your terminal:
|
||||
|
||||
```bash
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
# Running Cypress Tests Locally
|
||||
|
||||
Follow these steps to run the Cypress tests locally on your machine:
|
||||
|
||||
1. **Clone the repository**
|
||||
|
||||
If you haven't already, clone the repository to your local machine
|
||||
|
||||
2. **Setup .env file**
|
||||
|
||||
Copy the sample `.env` file and adjust it to your local environment:
|
||||
|
||||
```bash
|
||||
cd your-repo
|
||||
cp .env.sample .env
|
||||
```
|
||||
|
||||
3. **Build Docker services**
|
||||
|
||||
Build and start the Docker services:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
4. **Install Cypress**
|
||||
|
||||
Navigate into the project directory and install Cypress:
|
||||
|
||||
```bash
|
||||
npm install cypress
|
||||
```
|
||||
|
||||
5. **Run the Cypress tests**
|
||||
|
||||
After the installation is complete, you can run the Cypress tests:
|
||||
|
||||
```bash
|
||||
npx cypress run
|
||||
```
|
||||
|
||||
## Support
|
||||
|
||||
Cloudlog has two support systems for code issues use Github issues, however if you have general issues with setting up your server please use our general discussion forum [https://github.com/magicbug/Cloudlog/discussions](https://github.com/magicbug/Cloudlog/discussions).
|
||||
|
||||
## Security Vulnerabilities
|
||||
|
||||
If you discover a security vulnerability within Cloudlog, please send an e-mail to Peter Goodhall, 2M0SQL via [peter@magicbug.co.uk](mailto:peter@magicbug.co.uk). All security vulnerabilities will be promptly addressed.
|
||||
|
||||
## Want Cloudlog Hosting?
|
||||
|
|
@ -113,17 +39,13 @@ If you would prefer not to setup Cloudlog yourself [magicbug](https://magicbug.c
|
|||
|
||||
If you would like to contribute in any way to Cloudlog, it is most appreciated. This has been developed in free time, help coding new features or writing documentation is always useful.
|
||||
|
||||
Please note that Cloudlog was built using [Codeigniter](https://www.codeigniter.com/userguide3/) version 3 and uses [Bootstrap 5](https://getbootstrap.com/docs/5.3/getting-started/introduction/) as the frontend toolkit.
|
||||
|
||||
We also [HTMX](https://htmx.org/) for AJAX requests and [jQuery](https://jquery.com/) for some of the frontend functionality. We use [Font Awesome](https://fontawesome.com/) for icons.
|
||||
|
||||
At the moment we use [Cypress](https://www.cypress.io/) for end-to-end testing.
|
||||
Please note that Cloudlog was built using [Codeigniter](https://www.codeigniter.com/docs) version 3 and uses Bootstrap 4 for the user CSS framework documentation is available for this when building components.
|
||||
|
||||
When submitting PRs please make sure code is commented and includes one feature only, multiple features or bug fixes will not be accepted. Please include a description of what your PR does and why it is needed.
|
||||
|
||||
## Credits
|
||||
|
||||
Thanks to Andy (VE7CXZ), Gavin (M1BXF), Graham (W5ISP), Robert (M0VFC), Corby (K0SKW), Andy (GI0VGV), Sarah (DM4NA), Tony (G0WFV), Kim (DG9VH), Michael (G7VJR), Andreas (LA8AJA), Matthias (DL9MJ), Thomas (DO2TWE), Pat (KT3PJ), Flo (DF2ET), Joerg (DJ7NT) and Fabian (HB9HIL) for contributing code or help to Cloudlog.
|
||||
Thanks to Andy (VE7CXZ), Gavin (M1BXF), Graham (W5ISP), Robert (M0VFC), Corby (K0SKW), Andy (GI0VGV), Tobias (DL4TMA), Tony (G0WFV), Kim (DG9VH), Michael (G7VJR), Andreas (LA8AJA), Matthias (DL9MJ), Thomas (DO2TWE), Pat (KT3PJ), Flo (DF2ET), Joerg (DJ7NT) and Fabian (HB9HIL) for contributing code or help to Cloudlog.
|
||||
|
||||
## Patreons & Donors
|
||||
|
||||
|
|
@ -131,4 +53,4 @@ Cloudlog is supported by Patreon and donations via PayPal, thanks to the followi
|
|||
|
||||
Paul (M0TZO), Tim (G4VXE), Paul (N8HM), Michelle (W5NYV), Mitchell (AD0HJ), Dan (M0TCB), Martin (DK3ML), Juan Carlos (EA5WA), Iain (M0PCB), Charlie (GM1TGY), Ondrej (OK1CDJ), Trystan (G0KAY), Oliver (DL6KBG), Volkmar Schirmer, Jordan (M0PIR), Thomas Ziegler, Mathis (DB9MAT), Ken (VE3HLS), Tyler (WL7T), Jeremy Taylor, Ben Kuhn, Eric Thresher, Michael Cullen, Juuso (OH1JW), Anthony Castiglia, Fernando Ramirez-Ferrer, Robert Dixon, Mark Percival, Julia (KV1V), Timo Tomasini, Ant (NU1U), Christopher Williams, Danny Barnes, Vic, Tom (M0LTE), smurphboy, Lars (SM0TGU), Theo (PD9DP), Stefan (SM0RGM). Peter (G0ABI), Lou (KI5FTY), Michael (DG3NAB), Dragan (4O4A), minorsecond, Emily (W7AYQ), Steve (M0SKM), Rob (M0VFC), Doug (WA6L), Petr (OK1PKR), Fabian (HB9HIL), Daniel (OK2VLK), John (M5JFS).
|
||||
|
||||
If you'd like to donate to Cloudlog to help allow @magicbug spend less time doing commercial work and more time coding Cloudlog then you can donate via [PayPal](https://paypal.me/PGoodhall), [Github Sponsor](https://github.com/sponsors/magicbug) or become a [Patreon](https://www.patreon.com/2m0sql)
|
||||
If you'd like to donate to Cloudlog to help allow @magicbug spend less time doing commercial work and more time coding Cloudlog then you can donate via [PayPal](https://paypal.me/PGoodhall), [Github Sponsor](https://github.com/sponsors/magicbug) or become a [Patreon](https://www.patreon.com/2m0sql)
|
||||
|
|
|
|||
|
|
@ -198,9 +198,6 @@ case 'finnish':
|
|||
case 'russian':
|
||||
$config['language'] = $lang;
|
||||
break;
|
||||
case 'portuguese':
|
||||
$config['language'] = $lang;
|
||||
break;
|
||||
case 'english':
|
||||
$config['language'] = $lang;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ $config['migration_enabled'] = TRUE;
|
|||
|
|
||||
*/
|
||||
|
||||
$config['migration_version'] = 210;
|
||||
$config['migration_version'] = 169;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -1,19 +1,16 @@
|
|||
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Activated_gridmap extends CI_Controller
|
||||
{
|
||||
class Activated_gridmap extends CI_Controller {
|
||||
|
||||
function __construct()
|
||||
{
|
||||
function __construct() {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
public function index() {
|
||||
$data['page_title'] = "Activated Gridsquare Map";
|
||||
|
||||
$this->load->model('bands');
|
||||
$this->load->model('activated_gridmap_model');
|
||||
$this->load->model('bands');
|
||||
$this->load->model('activated_gridmap_model');
|
||||
$this->load->model('stations');
|
||||
|
||||
$data['visitor'] = false;
|
||||
|
|
@ -35,26 +32,25 @@ class Activated_gridmap extends CI_Controller
|
|||
$data['gridsquares_gridsquares_not_confirmed'] = lang('gridsquares_gridsquares_not_confirmed');
|
||||
$data['gridsquares_gridsquares_total_activated'] = lang('gridsquares_gridsquares_total_activated');
|
||||
|
||||
$footerData = [];
|
||||
$footerData = [];
|
||||
$footerData['scripts'] = [
|
||||
'assets/js/leaflet/geocoding.js',
|
||||
'assets/js/leaflet/L.MaidenheadColouredGridMap.js',
|
||||
'assets/js/sections/gridmap.js?'
|
||||
];
|
||||
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('activated_gridmap/index');
|
||||
$this->load->view('interface_assets/footer', $footerData);
|
||||
}
|
||||
}
|
||||
|
||||
public function getGridsjs()
|
||||
{
|
||||
$band = $this->security->xss_clean($this->input->post('band'));
|
||||
$mode = $this->security->xss_clean($this->input->post('mode'));
|
||||
$qsl = $this->security->xss_clean($this->input->post('qsl'));
|
||||
$lotw = $this->security->xss_clean($this->input->post('lotw'));
|
||||
$eqsl = $this->security->xss_clean($this->input->post('eqsl'));
|
||||
$qrz = $this->security->xss_clean($this->input->post('qrz'));
|
||||
public function getGridsjs() {
|
||||
$band = $this->security->xss_clean($this->input->post('band'));
|
||||
$mode = $this->security->xss_clean($this->input->post('mode'));
|
||||
$qsl = $this->security->xss_clean($this->input->post('qsl'));
|
||||
$lotw = $this->security->xss_clean($this->input->post('lotw'));
|
||||
$eqsl = $this->security->xss_clean($this->input->post('eqsl'));
|
||||
$qrz = $this->security->xss_clean($this->input->post('qrz'));
|
||||
$sat = $this->security->xss_clean($this->input->post('sat'));
|
||||
$this->load->model('activated_gridmap_model');
|
||||
|
||||
|
|
@ -77,27 +73,27 @@ class Activated_gridmap extends CI_Controller
|
|||
$query = $this->activated_gridmap_model->get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl, $qrz, $sat);
|
||||
|
||||
if ($query && $query->num_rows() > 0) {
|
||||
foreach ($query->result() as $row) {
|
||||
foreach ($query->result() as $row) {
|
||||
$gridlist = explode(',', $row->GRID_SQUARES);
|
||||
foreach ($gridlist as $grid) {
|
||||
$grid_2char_confirmed = strtoupper(substr($grid, 0, 2));
|
||||
$grid_4char_confirmed = strtoupper(substr($grid, 0, 4));
|
||||
$grid_2char_confirmed = strtoupper(substr($grid,0,2));
|
||||
$grid_4char_confirmed = strtoupper(substr($grid,0,4));
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
$grid_6char_confirmed = strtoupper(substr($grid, 0, 6));
|
||||
$grid_6char_confirmed = strtoupper(substr($grid,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_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_4char_confirmed, $array_grid_4char_confirmed)){
|
||||
array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
|
||||
}
|
||||
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
if (!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)) {
|
||||
array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
|
||||
if(!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)){
|
||||
array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -111,24 +107,24 @@ class Activated_gridmap extends CI_Controller
|
|||
|
||||
$gridlist = explode(',', $row->GRID_SQUARES);
|
||||
foreach ($gridlist as $grid) {
|
||||
$grid_two = strtoupper(substr($grid, 0, 2));
|
||||
$grid_four = strtoupper(substr($grid, 0, 4));
|
||||
$grid_two = strtoupper(substr($grid,0,2));
|
||||
$grid_four = strtoupper(substr($grid,0,4));
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
$grid_six = strtoupper(substr($grid, 0, 6));
|
||||
$grid_six = strtoupper(substr($grid,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_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_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);
|
||||
if(!in_array($grid_six, $array_grid_6char)){
|
||||
array_push($array_grid_6char, $grid_six);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -141,18 +137,18 @@ class Activated_gridmap extends CI_Controller
|
|||
|
||||
$grids = explode(",", $row->COL_VUCC_GRIDS);
|
||||
|
||||
foreach ($grids as $key) {
|
||||
$grid_two = strtoupper(substr($key, 0, 2));
|
||||
$grid_four = strtoupper(substr($key, 0, 4));
|
||||
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_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_four, $array_grid_4char)){
|
||||
array_push($array_grid_4char, $grid_four);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -162,28 +158,28 @@ class Activated_gridmap extends CI_Controller
|
|||
$query_vucc = $this->activated_gridmap_model->get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $qrz, $sat);
|
||||
|
||||
if ($query_vucc && $query_vucc->num_rows() > 0) {
|
||||
foreach ($query_vucc->result() as $row) {
|
||||
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));
|
||||
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_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_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_2char_confirmed'] = ($array_grid_2char_confirmed);
|
||||
$data['grid_4char_confirmed'] = ($array_grid_4char_confirmed);
|
||||
$data['grid_6char_confirmed'] = ($array_grid_6char_confirmed);
|
||||
|
||||
|
|
@ -191,7 +187,7 @@ class Activated_gridmap extends CI_Controller
|
|||
$data['grid_4char'] = ($array_grid_4char);
|
||||
$data['grid_6char'] = ($array_grid_6char);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($data);
|
||||
}
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($data);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class adif extends CI_Controller
|
||||
{
|
||||
class adif extends CI_Controller {
|
||||
|
||||
/* Controls ADIF Import/Export Functions */
|
||||
|
||||
|
|
@ -11,15 +10,21 @@ class adif extends CI_Controller
|
|||
$this->load->helper(array('form', 'url'));
|
||||
|
||||
$this->load->model('user_model');
|
||||
if (!$this->user_model->authorize(2)) {
|
||||
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
|
||||
redirect('dashboard');
|
||||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
}
|
||||
|
||||
public function test() {
|
||||
if(validateADIFDate('20120228') == true){
|
||||
echo "valid date";
|
||||
} else {
|
||||
echo "date incorrect";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* Shows Export Views */
|
||||
public function export()
|
||||
{
|
||||
public function export() {
|
||||
|
||||
$data['page_title'] = "ADIF Export";
|
||||
|
||||
|
|
@ -70,8 +75,7 @@ class adif extends CI_Controller
|
|||
$this->load->view('adif/data/exportsat', $data);
|
||||
}
|
||||
|
||||
public function export_custom()
|
||||
{
|
||||
public function export_custom() {
|
||||
// Set memory limit to unlimited to allow heavy usage
|
||||
ini_set('memory_limit', '-1');
|
||||
|
||||
|
|
@ -80,10 +84,10 @@ class adif extends CI_Controller
|
|||
$station_id = $this->security->xss_clean($this->input->post('station_profile'));
|
||||
|
||||
// Used for exporting QSOs not previously exported to LoTW
|
||||
if ($this->input->post('exportLotw') == 1) {
|
||||
$exportLotw = true;
|
||||
} else {
|
||||
$exportLotw = false;
|
||||
if ($this->input->post('exportLotw') == 1) {
|
||||
$exportLotw = true;
|
||||
} else {
|
||||
$exportLotw = false;
|
||||
}
|
||||
|
||||
$data['qsos'] = $this->adif_data->export_custom($this->input->post('from'), $this->input->post('to'), $station_id, $exportLotw);
|
||||
|
|
@ -93,28 +97,29 @@ class adif extends CI_Controller
|
|||
|
||||
|
||||
if ($this->input->post('markLotw') == 1) {
|
||||
foreach ($data['qsos']->result() as $qso) {
|
||||
$this->adif_data->mark_lotw_sent($qso->COL_PRIMARY_KEY);
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($data['qsos']->result() as $qso)
|
||||
{
|
||||
$this->adif_data->mark_lotw_sent($qso->COL_PRIMARY_KEY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function mark_lotw()
|
||||
{
|
||||
// Set memory limit to unlimited to allow heavy usage
|
||||
ini_set('memory_limit', '-1');
|
||||
public function mark_lotw() {
|
||||
// Set memory limit to unlimited to allow heavy usage
|
||||
ini_set('memory_limit', '-1');
|
||||
|
||||
$station_id = $this->security->xss_clean($this->input->post('station_profile'));
|
||||
$this->load->model('adif_data');
|
||||
$this->load->model('adif_data');
|
||||
|
||||
$data['qsos'] = $this->adif_data->export_custom($this->input->post('from'), $this->input->post('to'), $station_id);
|
||||
$data['qsos'] = $this->adif_data->export_custom($this->input->post('from'), $this->input->post('to'), $station_id);
|
||||
|
||||
foreach ($data['qsos']->result() as $qso) {
|
||||
$this->adif_data->mark_lotw_sent($qso->COL_PRIMARY_KEY);
|
||||
}
|
||||
foreach ($data['qsos']->result() as $qso)
|
||||
{
|
||||
$this->adif_data->mark_lotw_sent($qso->COL_PRIMARY_KEY);
|
||||
}
|
||||
|
||||
$this->load->view('adif/mark_lotw', $data);
|
||||
}
|
||||
$this->load->view('adif/mark_lotw', $data);
|
||||
}
|
||||
|
||||
public function export_lotw()
|
||||
{
|
||||
|
|
@ -127,21 +132,21 @@ class adif extends CI_Controller
|
|||
|
||||
$this->load->view('adif/data/exportall', $data);
|
||||
|
||||
foreach ($data['qsos']->result() as $qso) {
|
||||
foreach ($data['qsos']->result() as $qso)
|
||||
{
|
||||
$this->adif_data->mark_lotw_sent($qso->COL_PRIMARY_KEY);
|
||||
}
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
public function index() {
|
||||
$this->load->model('stations');
|
||||
|
||||
$data['page_title'] = "ADIF Import / Export";
|
||||
$data['max_upload'] = ini_get('upload_max_filesize');
|
||||
|
||||
$data['station_profile'] = $this->stations->all_of_user();
|
||||
$active_station_id = $this->stations->find_active();
|
||||
$station_profile = $this->stations->profile($active_station_id);
|
||||
$active_station_id = $this->stations->find_active();
|
||||
$station_profile = $this->stations->profile($active_station_id);
|
||||
|
||||
$data['active_station_info'] = $station_profile->row();
|
||||
|
||||
|
|
@ -150,14 +155,13 @@ class adif extends CI_Controller
|
|||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
|
||||
public function import()
|
||||
{
|
||||
public function import() {
|
||||
$this->load->model('stations');
|
||||
$data['station_profile'] = $this->stations->all_of_user();
|
||||
log_message("debug", "Started ADIF Import");
|
||||
log_message("debug","Started ADIF Import");
|
||||
|
||||
$active_station_id = $this->stations->find_active();
|
||||
$station_profile = $this->stations->profile($active_station_id);
|
||||
$active_station_id = $this->stations->find_active();
|
||||
$station_profile = $this->stations->profile($active_station_id);
|
||||
|
||||
$data['active_station_info'] = $station_profile->row();
|
||||
|
||||
|
|
@ -169,7 +173,7 @@ class adif extends CI_Controller
|
|||
|
||||
$this->load->library('upload', $config);
|
||||
|
||||
if (! $this->upload->do_upload()) {
|
||||
if ( ! $this->upload->do_upload()) {
|
||||
$data['error'] = $this->upload->display_errors();
|
||||
|
||||
$data['max_upload'] = ini_get('upload_max_filesize');
|
||||
|
|
@ -187,38 +191,39 @@ class adif extends CI_Controller
|
|||
|
||||
$this->load->library('adif_parser');
|
||||
|
||||
$this->adif_parser->load_from_file('./uploads/' . $data['upload_data']['file_name']);
|
||||
unlink('./uploads/' . $data['upload_data']['file_name']);
|
||||
$data['upload_data'] = ''; // free memory
|
||||
$this->adif_parser->load_from_file('./uploads/'.$data['upload_data']['file_name']);
|
||||
unlink('./uploads/'.$data['upload_data']['file_name']);
|
||||
$data['upload_data']=''; // free memory
|
||||
|
||||
$this->adif_parser->initialize();
|
||||
$custom_errors = "";
|
||||
$alladif = [];
|
||||
while ($record = $this->adif_parser->get_record()) {
|
||||
if (count($record) == 0) {
|
||||
$alladif=[];
|
||||
while($record = $this->adif_parser->get_record())
|
||||
{
|
||||
if(count($record) == 0) {
|
||||
break;
|
||||
};
|
||||
array_push($alladif, $record);
|
||||
array_push($alladif,$record);
|
||||
};
|
||||
$record = ''; // free memory
|
||||
$custom_errors = $this->logbook_model->import_bulk($alladif, $this->input->post('station_profile'), $this->input->post('skipDuplicate'), $this->input->post('markClublog'), $this->input->post('markLotw'), $this->input->post('dxccAdif'), $this->input->post('markQrz'), $this->input->post('markHrd'), true, $this->input->post('operatorName'), false, $this->input->post('skipStationCheck'));
|
||||
$record=''; // free memory
|
||||
$custom_errors = $this->logbook_model->import_bulk($alladif, $this->input->post('station_profile'), $this->input->post('skipDuplicate'), $this->input->post('markClublog'),$this->input->post('markLotw'), $this->input->post('dxccAdif'), $this->input->post('markQrz'), $this->input->post('markHrd'), true, $this->input->post('operatorName'), false, $this->input->post('skipStationCheck'));
|
||||
} else {
|
||||
$custom_errors = 'Station Profile not valid for User';
|
||||
$custom_errors='Station Profile not valid for User';
|
||||
}
|
||||
|
||||
$data['adif_errors'] = $custom_errors;
|
||||
$data['skip_dupes'] = $this->input->post('skipDuplicate');
|
||||
|
||||
log_message("debug", "Finished ADIF Import");
|
||||
log_message("debug","Finished ADIF Import");
|
||||
$data['page_title'] = "ADIF Imported";
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('adif/import_success');
|
||||
$this->load->view('interface_assets/footer');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function dcl()
|
||||
{
|
||||
public function dcl() {
|
||||
$this->load->model('stations');
|
||||
$data['station_profile'] = $this->stations->all_of_user();
|
||||
|
||||
|
|
@ -230,7 +235,7 @@ class adif extends CI_Controller
|
|||
|
||||
$this->load->library('upload', $config);
|
||||
|
||||
if (! $this->upload->do_upload()) {
|
||||
if ( ! $this->upload->do_upload()) {
|
||||
$data['error'] = $this->upload->display_errors();
|
||||
|
||||
$data['max_upload'] = ini_get('upload_max_filesize');
|
||||
|
|
@ -248,33 +253,34 @@ class adif extends CI_Controller
|
|||
|
||||
$this->load->library('adif_parser');
|
||||
|
||||
$this->adif_parser->load_from_file('./uploads/' . $data['upload_data']['file_name']);
|
||||
$this->adif_parser->load_from_file('./uploads/'.$data['upload_data']['file_name']);
|
||||
|
||||
$this->adif_parser->initialize();
|
||||
$error_count = array(0, 0, 0);
|
||||
$custom_errors = "";
|
||||
while ($record = $this->adif_parser->get_record()) {
|
||||
if (count($record) == 0) {
|
||||
while($record = $this->adif_parser->get_record())
|
||||
{
|
||||
if(count($record) == 0) {
|
||||
break;
|
||||
};
|
||||
|
||||
$dok_result = $this->logbook_model->update_dok($record, $this->input->post('ignoreAmbiguous'), $this->input->post('onlyConfirmed'), $this->input->post('overwriteDok'));
|
||||
if (!empty($dok_result)) {
|
||||
switch ($dok_result[0]) {
|
||||
case 0:
|
||||
$error_count[0]++;
|
||||
break;
|
||||
case 1:
|
||||
$custom_errors .= $dok_result[1];
|
||||
$error_count[1]++;
|
||||
break;
|
||||
case 2:
|
||||
$custom_errors .= $dok_result[1];
|
||||
$error_count[2]++;
|
||||
case 0:
|
||||
$error_count[0]++;
|
||||
break;
|
||||
case 1:
|
||||
$custom_errors .= $dok_result[1];
|
||||
$error_count[1]++;
|
||||
break;
|
||||
case 2:
|
||||
$custom_errors .= $dok_result[1];
|
||||
$error_count[2]++;
|
||||
}
|
||||
}
|
||||
};
|
||||
unlink('./uploads/' . $data['upload_data']['file_name']);
|
||||
unlink('./uploads/'.$data['upload_data']['file_name']);
|
||||
$data['dcl_error_count'] = $error_count;
|
||||
$data['dcl_errors'] = $custom_errors;
|
||||
$data['page_title'] = "DCL Data Imported";
|
||||
|
|
@ -282,7 +288,7 @@ class adif extends CI_Controller
|
|||
$this->load->view('adif/dcl_success');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* End of file adif.php */
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class API extends CI_Controller
|
||||
{
|
||||
class API extends CI_Controller {
|
||||
|
||||
// Do absolutely nothing
|
||||
function index()
|
||||
|
|
@ -15,7 +14,7 @@ class API extends CI_Controller
|
|||
|
||||
// Check if users logged in
|
||||
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
if($this->user_model->validate_session() == 0) {
|
||||
// user is not logged in
|
||||
redirect('user/login');
|
||||
}
|
||||
|
|
@ -32,13 +31,12 @@ class API extends CI_Controller
|
|||
}
|
||||
|
||||
|
||||
function edit($key)
|
||||
{
|
||||
function edit($key) {
|
||||
$this->load->model('user_model');
|
||||
|
||||
// Check if users logged in
|
||||
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
if($this->user_model->validate_session() == 0) {
|
||||
// user is not logged in
|
||||
redirect('user/login');
|
||||
}
|
||||
|
|
@ -47,37 +45,40 @@ class API extends CI_Controller
|
|||
|
||||
$this->load->helper(array('form', 'url'));
|
||||
|
||||
$this->load->library('form_validation');
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('api_desc', 'API Description', 'required');
|
||||
$this->form_validation->set_rules('api_key', 'API Key is required do not change this field', 'required');
|
||||
$this->form_validation->set_rules('api_desc', 'API Description', 'required');
|
||||
$this->form_validation->set_rules('api_key', 'API Key is required do not change this field', 'required');
|
||||
|
||||
$data['api_info'] = $this->api_model->key_description($key);
|
||||
$data['api_info'] = $this->api_model->key_description($key);
|
||||
|
||||
if ($this->form_validation->run() == FALSE) {
|
||||
$data['page_title'] = "Edit API Description";
|
||||
if ($this->form_validation->run() == FALSE)
|
||||
{
|
||||
$data['page_title'] = "Edit API Description";
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('api/description');
|
||||
$this->load->view('interface_assets/footer');
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// Success!
|
||||
|
||||
$this->api_model->update_key_description($this->input->post('api_key'), $this->input->post('api_desc'));
|
||||
|
||||
$this->session->set_flashdata('notice', 'API Key <b>' . $this->input->post('api_key') . "</b> description has been updated.");
|
||||
$this->session->set_flashdata('notice', 'API Key <b>'.$this->input->post('api_key')."</b> description has been updated.");
|
||||
|
||||
redirect('api/help');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function generate($rights)
|
||||
{
|
||||
function generate($rights) {
|
||||
$this->load->model('user_model');
|
||||
|
||||
// Check if users logged in
|
||||
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
if($this->user_model->validate_session() == 0) {
|
||||
// user is not logged in
|
||||
redirect('user/login');
|
||||
}
|
||||
|
|
@ -90,13 +91,12 @@ class API extends CI_Controller
|
|||
redirect('api/help');
|
||||
}
|
||||
|
||||
function delete($key)
|
||||
{
|
||||
function delete($key) {
|
||||
$this->load->model('user_model');
|
||||
|
||||
// Check if users logged in
|
||||
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
if($this->user_model->validate_session() == 0) {
|
||||
// user is not logged in
|
||||
redirect('user/login');
|
||||
}
|
||||
|
|
@ -106,70 +106,44 @@ class API extends CI_Controller
|
|||
|
||||
$this->api_model->delete_key($key);
|
||||
|
||||
$this->session->set_flashdata('notice', 'API Key <b>' . $key . "</b> has been deleted");
|
||||
$this->session->set_flashdata('notice', 'API Key <b>'.$key."</b> has been deleted");
|
||||
|
||||
redirect('api/help');
|
||||
}
|
||||
|
||||
// Example of authing
|
||||
function auth($key)
|
||||
{
|
||||
function auth($key) {
|
||||
$this->load->model('api_model');
|
||||
header("Content-type: text/xml");
|
||||
if ($this->api_model->access($key) == "No Key Found" || $this->api_model->access($key) == "Key Disabled") {
|
||||
header("Content-type: text/xml");
|
||||
if($this->api_model->access($key) == "No Key Found" || $this->api_model->access($key) == "Key Disabled") {
|
||||
echo "<auth>";
|
||||
echo "<message>Key Invalid - either not found or disabled</message>";
|
||||
echo "</auth>";
|
||||
} else {
|
||||
echo "<auth>";
|
||||
echo "<status>Valid</status>";
|
||||
echo "<rights>" . $this->api_model->access($key) . "</rights>";
|
||||
echo "<rights>".$this->api_model->access($key)."</rights>";
|
||||
echo "</auth>";
|
||||
}
|
||||
}
|
||||
|
||||
function check_auth($key)
|
||||
{
|
||||
$this->load->model('api_model');
|
||||
header("Content-type: text/xml");
|
||||
if ($this->api_model->access($key) == "No Key Found" || $this->api_model->access($key) == "Key Disabled") {
|
||||
// set the content type as json
|
||||
header("Content-type: application/json");
|
||||
|
||||
// set the http response code to 401
|
||||
http_response_code(401);
|
||||
|
||||
// return the json with the status as failed
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing or invalid api key"]);
|
||||
} else {
|
||||
// set the content type as json
|
||||
header("Content-type: application/json");
|
||||
|
||||
// set the http response code to 200
|
||||
http_response_code(200);
|
||||
// return the json
|
||||
echo json_encode(['status' => 'valid', 'rights' => $this->api_model->access($key)]);
|
||||
}
|
||||
}
|
||||
|
||||
function station_info($key)
|
||||
{
|
||||
function station_info($key) {
|
||||
$this->load->model('api_model');
|
||||
$this->load->model('stations');
|
||||
header("Content-type: application/json");
|
||||
if (substr($this->api_model->access($key), 0, 1) == 'r') { /* Checkpermission for _r_eading */
|
||||
if(substr($this->api_model->access($key),0,1) == 'r') { /* Checkpermission for _r_eading */
|
||||
$this->api_model->update_last_used($key);
|
||||
$userid = $this->api_model->key_userid($key);
|
||||
$station_ids = array();
|
||||
$stations = $this->stations->all_of_user($userid);
|
||||
foreach ($stations->result() as $row) {
|
||||
$result['station_id'] = $row->station_id;
|
||||
$result['station_profile_name'] = $row->station_profile_name;
|
||||
$result['station_gridsquare'] = $row->station_gridsquare;
|
||||
$result['station_callsign'] = $row->station_callsign;;
|
||||
$result['station_active'] = $row->station_active;
|
||||
array_push($station_ids, $result);
|
||||
}
|
||||
$station_ids = array();
|
||||
$stations=$this->stations->all_of_user($userid);
|
||||
foreach ($stations->result() as $row) {
|
||||
$result['station_id']=$row->station_id;
|
||||
$result['station_profile_name']=$row->station_profile_name;
|
||||
$result['station_gridsquare']=$row->station_gridsquare;
|
||||
$result['station_callsign']=$row->station_callsign;;
|
||||
$result['station_active']=$row->station_active;
|
||||
array_push($station_ids, $result);
|
||||
}
|
||||
echo json_encode($station_ids);
|
||||
} else {
|
||||
http_response_code(401);
|
||||
|
|
@ -178,13 +152,12 @@ class API extends CI_Controller
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
/*
|
||||
*
|
||||
* Function: QSO
|
||||
* Task: allows passing of ADIF data to Cloudlog
|
||||
*/
|
||||
function qso()
|
||||
{
|
||||
function qso() {
|
||||
header('Content-type: application/json');
|
||||
|
||||
$this->load->model('api_model');
|
||||
|
|
@ -197,30 +170,25 @@ class API extends CI_Controller
|
|||
// Decode JSON and store
|
||||
$obj = json_decode(file_get_contents("php://input"), true);
|
||||
if ($obj === NULL) {
|
||||
// Decoding not valid try simple www-x-form-urlencoded
|
||||
$objTmp = file_get_contents("php://input");
|
||||
parse_str($objTmp, $obj);
|
||||
if ($obj === NULL) {
|
||||
echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]);
|
||||
die();
|
||||
}
|
||||
echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]);
|
||||
die();
|
||||
}
|
||||
|
||||
if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
|
||||
die();
|
||||
if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
|
||||
die();
|
||||
}
|
||||
|
||||
$userid = $this->api_model->key_userid($obj['key']);
|
||||
|
||||
if (!isset($obj['station_profile_id']) || $this->stations->check_station_against_user($obj['station_profile_id'], $userid) == false) {
|
||||
if(!isset($obj['station_profile_id']) || $this->stations->check_station_against_user($obj['station_profile_id'], $userid) == false) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "station id does not belong to the API key owner."]);
|
||||
die();
|
||||
}
|
||||
|
||||
if ($obj['type'] == "adif" && $obj['string'] != "") {
|
||||
if($obj['type'] == "adif" && $obj['string'] != "") {
|
||||
// Load the logbook model for adding QSO records
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
|
|
@ -231,20 +199,22 @@ class API extends CI_Controller
|
|||
$this->adif_parser->feed($obj['string']);
|
||||
|
||||
// Create QSO Record
|
||||
while ($record = $this->adif_parser->get_record()) {
|
||||
if (count($record) == 0) {
|
||||
while($record = $this->adif_parser->get_record())
|
||||
{
|
||||
if(count($record) == 0)
|
||||
{
|
||||
break;
|
||||
};
|
||||
|
||||
|
||||
if (isset($obj['station_profile_id'])) {
|
||||
if (isset($record['station_callsign']) && $this->stations->check_station_against_callsign($obj['station_profile_id'], $record['station_callsign']) == false) {
|
||||
if(isset($obj['station_profile_id'])) {
|
||||
if(isset($record['station_callsign']) && $this->stations->check_station_against_callsign($obj['station_profile_id'], $record['station_callsign']) == false) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "station callsign does not match station callsign in station profile."]);
|
||||
die();
|
||||
}
|
||||
|
||||
if (!(isset($record['call'])) || (trim($record['call']) == '')) {
|
||||
if(!(isset($record['call'])) || (trim($record['call']) == '')) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "QSO Call is empty."]);
|
||||
die();
|
||||
|
|
@ -254,21 +224,23 @@ class API extends CI_Controller
|
|||
|
||||
$msg = $this->logbook_model->import($record, $obj['station_profile_id'], NULL, NULL, NULL, NULL, NULL, NULL, false, false, true);
|
||||
|
||||
if ($msg == "") {
|
||||
if ( $msg == "" ) {
|
||||
$return_count++;
|
||||
} else {
|
||||
$return_msg[] = $msg;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
http_response_code(201);
|
||||
echo json_encode(['status' => 'created', 'type' => $obj['type'], 'string' => $obj['string'], 'imported_count' => $return_count, 'messages' => $return_msg]);
|
||||
echo json_encode(['status' => 'created', 'type' => $obj['type'], 'string' => $obj['string'], 'imported_count' => $return_count, 'messages' => $return_msg ]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// API function to check if a callsign is in the logbook already
|
||||
function logbook_check_callsign()
|
||||
{
|
||||
function logbook_check_callsign() {
|
||||
header('Content-type: application/json');
|
||||
|
||||
$this->load->model('api_model');
|
||||
|
|
@ -276,29 +248,29 @@ class API extends CI_Controller
|
|||
// Decode JSON and store
|
||||
$obj = json_decode(file_get_contents("php://input"), true);
|
||||
if ($obj === NULL) {
|
||||
echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
|
||||
if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isset($obj['logbook_public_slug']) || !isset($obj['callsign'])) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing fields"]);
|
||||
if(!isset($obj['logbook_public_slug']) || !isset($obj['callsign'])) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing fields"]);
|
||||
return;
|
||||
}
|
||||
|
||||
if ($obj['logbook_public_slug'] != "" && $obj['callsign'] != "") {
|
||||
if($obj['logbook_public_slug'] != "" && $obj['callsign'] != "") {
|
||||
|
||||
$logbook_slug = $obj['logbook_public_slug'];
|
||||
$callsign = $obj['callsign'];
|
||||
|
||||
// If $obj['band'] exists
|
||||
if (isset($obj['band'])) {
|
||||
if(isset($obj['band'])) {
|
||||
$band = $obj['band'];
|
||||
} else {
|
||||
$band = null;
|
||||
|
|
@ -306,12 +278,13 @@ class API extends CI_Controller
|
|||
|
||||
$this->load->model('logbooks_model');
|
||||
|
||||
if ($this->logbooks_model->public_slug_exists($logbook_slug)) {
|
||||
if($this->logbooks_model->public_slug_exists($logbook_slug)) {
|
||||
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($logbook_slug);
|
||||
if ($logbook_id != false) {
|
||||
if($logbook_id != false)
|
||||
{
|
||||
// Get associated station locations for mysql queries
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
|
||||
|
||||
|
||||
if (!$logbooks_locations_array) {
|
||||
// Logbook not found
|
||||
http_response_code(404);
|
||||
|
|
@ -321,7 +294,7 @@ class API extends CI_Controller
|
|||
} else {
|
||||
// Logbook not found
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => $logbook_slug . " has no associated station locations"]);
|
||||
echo json_encode(['status' => 'failed', 'reason' => $logbook_slug." has no associated station locations"]);
|
||||
die();
|
||||
}
|
||||
// Search Logbook for callsign
|
||||
|
|
@ -330,7 +303,8 @@ class API extends CI_Controller
|
|||
$result = $this->logbook_model->check_if_callsign_worked_in_logbook($callsign, $logbooks_locations_array, $band);
|
||||
|
||||
http_response_code(201);
|
||||
if ($result > 0) {
|
||||
if($result > 0)
|
||||
{
|
||||
echo json_encode(['callsign' => $callsign, 'result' => 'Found']);
|
||||
} else {
|
||||
echo json_encode(['callsign' => $callsign, 'result' => 'Not Found']);
|
||||
|
|
@ -341,12 +315,13 @@ class API extends CI_Controller
|
|||
echo json_encode(['status' => 'failed', 'reason' => "logbook not found"]);
|
||||
die();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// API function to check if a grid is in the logbook already
|
||||
function logbook_check_grid()
|
||||
{
|
||||
function logbook_check_grid() {
|
||||
header('Content-type: application/json');
|
||||
|
||||
$this->load->model('api_model');
|
||||
|
|
@ -354,27 +329,27 @@ class API extends CI_Controller
|
|||
// Decode JSON and store
|
||||
$obj = json_decode(file_get_contents("php://input"), true);
|
||||
if ($obj === NULL) {
|
||||
echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]);
|
||||
}
|
||||
|
||||
if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
|
||||
if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
|
||||
}
|
||||
|
||||
if (!isset($obj['logbook_public_slug']) || !isset($obj['grid'])) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing fields"]);
|
||||
if(!isset($obj['logbook_public_slug']) || !isset($obj['grid'])) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing fields"]);
|
||||
return;
|
||||
}
|
||||
|
||||
if ($obj['logbook_public_slug'] != "" && $obj['grid'] != "") {
|
||||
if($obj['logbook_public_slug'] != "" && $obj['grid'] != "") {
|
||||
|
||||
$logbook_slug = $obj['logbook_public_slug'];
|
||||
$grid = $obj['grid'];
|
||||
|
||||
// If $obj['band'] exists
|
||||
if (isset($obj['band'])) {
|
||||
if(isset($obj['band'])) {
|
||||
$band = $obj['band'];
|
||||
} else {
|
||||
$band = null;
|
||||
|
|
@ -382,12 +357,13 @@ class API extends CI_Controller
|
|||
|
||||
$this->load->model('logbooks_model');
|
||||
|
||||
if ($this->logbooks_model->public_slug_exists($logbook_slug)) {
|
||||
if($this->logbooks_model->public_slug_exists($logbook_slug)) {
|
||||
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($logbook_slug);
|
||||
if ($logbook_id != false) {
|
||||
if($logbook_id != false)
|
||||
{
|
||||
// Get associated station locations for mysql queries
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
|
||||
|
||||
|
||||
if (!$logbooks_locations_array) {
|
||||
// Logbook not found
|
||||
http_response_code(404);
|
||||
|
|
@ -397,7 +373,7 @@ class API extends CI_Controller
|
|||
} else {
|
||||
// Logbook not found
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => $logbook_slug . " has no associated station locations"]);
|
||||
echo json_encode(['status' => 'failed', 'reason' => $logbook_slug." has no associated station locations"]);
|
||||
die();
|
||||
}
|
||||
// Search Logbook for callsign
|
||||
|
|
@ -406,7 +382,8 @@ class API extends CI_Controller
|
|||
$result = $this->logbook_model->check_if_grid_worked_in_logbook($grid, $logbooks_locations_array, $band);
|
||||
|
||||
http_response_code(201);
|
||||
if ($result > 0) {
|
||||
if($result > 0)
|
||||
{
|
||||
echo json_encode(['gridsquare' => strtoupper($grid), 'result' => 'Found']);
|
||||
} else {
|
||||
echo json_encode(['gridsquare' => strtoupper($grid), 'result' => 'Not Found']);
|
||||
|
|
@ -417,187 +394,14 @@ class API extends CI_Controller
|
|||
echo json_encode(['status' => 'failed', 'reason' => "logbook not found"]);
|
||||
die();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if a country has been worked before and confirmed in various ways
|
||||
*
|
||||
* This API endpoint checks if a specific country (derived from callsign) has been
|
||||
* worked before in a given logbook, and whether it has been confirmed via different
|
||||
* confirmation methods (QSL, LoTW, eQSL, QRZ).
|
||||
*
|
||||
* @api POST /api/logbook_check_country
|
||||
* @header Content-Type application/json
|
||||
*
|
||||
* @param string key Required. API authentication key
|
||||
* @param string logbook_public_slug Required. Public slug identifier for the logbook
|
||||
* @param string callsign Required. Callsign to lookup country for
|
||||
* @param string type Optional. Type of contact ("sat" for satellite, empty for regular)
|
||||
* @param string band Optional. Amateur radio band (required for non-satellite contacts)
|
||||
* @param string mode Optional. Amateur radio mode (required for non-satellite contacts)
|
||||
*
|
||||
* @return json Returns JSON object with:
|
||||
* - workedBefore: boolean indicating if country was worked before
|
||||
* - confirmed: object with confirmation status for qsl, lotw, eqsl, qrz
|
||||
*
|
||||
* @throws 401 Unauthorized - Missing or invalid API key, missing required fields
|
||||
* @throws 404 Not Found - Logbook not found or empty logbook
|
||||
* @throws 400 Bad Request - Invalid JSON format
|
||||
*
|
||||
* @example
|
||||
* Request:
|
||||
* {
|
||||
* "key": "your-api-key",
|
||||
* "logbook_public_slug": "my-logbook",
|
||||
* "callsign": "W1AW",
|
||||
* "band": "20M",
|
||||
* "mode": "SSB"
|
||||
* }
|
||||
*
|
||||
* Response:
|
||||
* {
|
||||
* "workedBefore": true,
|
||||
* "confirmed": {
|
||||
* "qsl": true,
|
||||
* "lotw": false,
|
||||
* "eqsl": false,
|
||||
* "qrz": false
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
function logbook_check_country()
|
||||
{
|
||||
header('Content-type: application/json');
|
||||
|
||||
$this->load->model('api_model');
|
||||
|
||||
// Decode JSON and store
|
||||
$obj = json_decode(file_get_contents("php://input"), true);
|
||||
if ($obj === NULL) {
|
||||
echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isset($obj['logbook_public_slug']) || !isset($obj['callsign'])) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing fields"]);
|
||||
return;
|
||||
}
|
||||
|
||||
// Load models
|
||||
$this->load->model('logbook_model');
|
||||
$this->load->model('logbooks_model');
|
||||
|
||||
$date = date("Y-m-d");
|
||||
$callsign = $obj['callsign'];
|
||||
$logbook_slug = $obj['logbook_public_slug'];
|
||||
$type = isset($obj['type']) ? $obj['type'] : '';
|
||||
$band = isset($obj['band']) ? $obj['band'] : '';
|
||||
$mode = isset($obj['mode']) ? $obj['mode'] : '';
|
||||
|
||||
$callsign_dxcc_lookup = $this->logbook_model->dxcc_lookup($callsign, $date);
|
||||
$country = $callsign_dxcc_lookup['entity'];
|
||||
|
||||
$return = [
|
||||
"workedBefore" => false,
|
||||
"confirmed" => [
|
||||
"qsl" => false,
|
||||
"lotw" => false,
|
||||
"eqsl" => false,
|
||||
"qrz" => false
|
||||
]
|
||||
];
|
||||
|
||||
if ($this->logbooks_model->public_slug_exists($logbook_slug)) {
|
||||
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($logbook_slug);
|
||||
if ($logbook_id != false) {
|
||||
// Get associated station locations for mysql queries
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
|
||||
|
||||
if (!$logbooks_locations_array) {
|
||||
// Logbook not found
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "Empty Logbook"]);
|
||||
die();
|
||||
}
|
||||
} else {
|
||||
// Logbook not found
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => $logbook_slug . " has no associated station locations"]);
|
||||
die();
|
||||
}
|
||||
|
||||
if (!empty($logbooks_locations_array)) {
|
||||
if ($type == "sat") {
|
||||
$this->db->where('COL_PROP_MODE', 'SAT');
|
||||
} else {
|
||||
$this->db->where('COL_MODE', $this->logbook_model->get_main_mode_from_mode($mode));
|
||||
$this->db->where('COL_BAND', $band);
|
||||
$this->db->where('COL_PROP_MODE !=', 'SAT');
|
||||
}
|
||||
|
||||
$this->db->where_in('station_id', $logbooks_locations_array);
|
||||
$this->db->where('COL_COUNTRY', urldecode($country));
|
||||
|
||||
$query = $this->db->get($this->config->item('table_name'), 1, 0);
|
||||
foreach ($query->result() as $workedBeforeRow) {
|
||||
$return['workedBefore'] = true;
|
||||
}
|
||||
|
||||
// Check each confirmation type separately
|
||||
$confirmation_types = [
|
||||
'qsl' => "COL_QSL_RCVD='Y'",
|
||||
'lotw' => "COL_LOTW_QSL_RCVD='Y'",
|
||||
'eqsl' => "COL_EQSL_QSL_RCVD='Y'",
|
||||
'qrz' => "COL_QRZCOM_QSO_DOWNLOAD_STATUS='Y'"
|
||||
];
|
||||
|
||||
foreach ($confirmation_types as $type_key => $where_clause) {
|
||||
if ($type == "SAT") {
|
||||
$this->db->where('COL_PROP_MODE', 'SAT');
|
||||
} else {
|
||||
$this->db->where('COL_MODE', $this->logbook_model->get_main_mode_from_mode($mode));
|
||||
$this->db->where('COL_BAND', $band);
|
||||
$this->db->where('COL_PROP_MODE !=', 'SAT');
|
||||
}
|
||||
|
||||
$this->db->where_in('station_id', $logbooks_locations_array);
|
||||
$this->db->where('COL_COUNTRY', urldecode($country));
|
||||
$this->db->where($where_clause);
|
||||
|
||||
$query = $this->db->get($this->config->item('table_name'), 1, 0);
|
||||
|
||||
if ($query->num_rows() > 0) {
|
||||
$return['confirmed'][$type_key] = true;
|
||||
}
|
||||
}
|
||||
|
||||
http_response_code(201);
|
||||
echo json_encode($return, JSON_PRETTY_PRINT);
|
||||
} else {
|
||||
http_response_code(201);
|
||||
echo json_encode($return, JSON_PRETTY_PRINT);
|
||||
}
|
||||
} else {
|
||||
// Logbook not found
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "logbook not found"]);
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
/* ENDPOINT for Rig Control */
|
||||
|
||||
function radio()
|
||||
{
|
||||
function radio() {
|
||||
header('Content-type: application/json');
|
||||
|
||||
$this->load->model('api_model');
|
||||
|
|
@ -611,7 +415,7 @@ class API extends CI_Controller
|
|||
// Decode JSON and store
|
||||
$obj = json_decode(file_get_contents("php://input"), true);
|
||||
|
||||
if (!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
|
||||
die();
|
||||
|
|
@ -629,6 +433,7 @@ class API extends CI_Controller
|
|||
$arr = array('status' => 'success');
|
||||
|
||||
echo json_encode($arr);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -637,8 +442,7 @@ class API extends CI_Controller
|
|||
*
|
||||
*/
|
||||
|
||||
function statistics($key = null)
|
||||
{
|
||||
function statistics($key = null) {
|
||||
header('Content-type: application/json');
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
|
|
@ -649,10 +453,10 @@ class API extends CI_Controller
|
|||
|
||||
http_response_code(201);
|
||||
echo json_encode(['Today' => $data['todays_qsos'], 'total_qsos' => $data['total_qsos'], 'month_qsos' => $data['month_qsos'], 'year_qsos' => $data['year_qsos']]);
|
||||
|
||||
}
|
||||
|
||||
function lookup()
|
||||
{
|
||||
function lookup() {
|
||||
// start benchmarking
|
||||
$this->output->enable_profiler(TRUE);
|
||||
/*
|
||||
|
|
@ -672,9 +476,7 @@ class API extends CI_Controller
|
|||
|
||||
// Make sure users logged in
|
||||
$this->load->model('user_model');
|
||||
if (!$this->user_model->authorize($this->config->item('auth_mode'))) {
|
||||
return;
|
||||
}
|
||||
if(!$this->user_model->authorize($this->config->item('auth_mode'))) { return; }
|
||||
|
||||
|
||||
$this->load->model("logbook_model");
|
||||
|
|
@ -706,9 +508,9 @@ class API extends CI_Controller
|
|||
* Handle POST data being sent to check lookups
|
||||
*
|
||||
*/
|
||||
$raw_input = json_decode(file_get_contents("php://input"), true);
|
||||
$raw_input = json_decode(file_get_contents("php://input"), true);
|
||||
|
||||
$lookup_callsign = strtoupper($raw_input['callsign']);
|
||||
$lookup_callsign = strtoupper($raw_input['callsign']);
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -716,7 +518,7 @@ class API extends CI_Controller
|
|||
* Handle Callsign field
|
||||
*
|
||||
*/
|
||||
$return['callsign'] = $lookup_callsign;
|
||||
$return['callsign'] = $lookup_callsign;
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
@ -724,63 +526,65 @@ class API extends CI_Controller
|
|||
*
|
||||
*/
|
||||
|
||||
$callsign_dxcc_lookup = $this->logbook_model->dxcc_lookup($lookup_callsign, $date);
|
||||
$callsign_dxcc_lookup = $this->logbook_model->dxcc_lookup($lookup_callsign, $date);
|
||||
|
||||
$last_slash_pos = strrpos($lookup_callsign, '/');
|
||||
$last_slash_pos = strrpos($lookup_callsign, '/');
|
||||
|
||||
if (isset($last_slash_pos) && $last_slash_pos > 4) {
|
||||
$suffix_slash = $last_slash_pos === false ? $lookup_callsign : substr($lookup_callsign, $last_slash_pos + 1);
|
||||
switch ($suffix_slash) {
|
||||
case "P":
|
||||
$suffix_slash_item = "Portable";
|
||||
break;
|
||||
case "M":
|
||||
$suffix_slash_item = "Mobile";
|
||||
case "MM":
|
||||
$suffix_slash_item = "Maritime Mobile";
|
||||
break;
|
||||
default:
|
||||
// If its not one of the above suffix slashes its likely dxcc
|
||||
$ans2 = $this->logbook_model->dxcc_lookup($suffix_slash, $date);
|
||||
$suffix_slash_item = null;
|
||||
if(isset($last_slash_pos) && $last_slash_pos > 4) {
|
||||
$suffix_slash = $last_slash_pos === false ? $lookup_callsign : substr($lookup_callsign, $last_slash_pos + 1);
|
||||
switch ($suffix_slash) {
|
||||
case "P":
|
||||
$suffix_slash_item = "Portable";
|
||||
break;
|
||||
case "M":
|
||||
$suffix_slash_item = "Mobile";
|
||||
case "MM":
|
||||
$suffix_slash_item = "Maritime Mobile";
|
||||
break;
|
||||
default:
|
||||
// If its not one of the above suffix slashes its likely dxcc
|
||||
$ans2 = $this->logbook_model->dxcc_lookup($suffix_slash, $date);
|
||||
$suffix_slash_item = null;
|
||||
}
|
||||
|
||||
$return['suffix_slash'] = $suffix_slash_item;
|
||||
}
|
||||
|
||||
$return['suffix_slash'] = $suffix_slash_item;
|
||||
}
|
||||
|
||||
// If the final slash is a DXCC then find it!
|
||||
if (isset($ans2['call'])) {
|
||||
$return['dxcc'] = $ans2['entity'];
|
||||
$return['dxcc_lat'] = $ans2['lat'];
|
||||
$return['dxcc_long'] = $ans2['long'];
|
||||
$return['dxcc_cqz'] = $ans2['cqz'];
|
||||
} else {
|
||||
$return['dxcc'] = $callsign_dxcc_lookup['entity'];
|
||||
$return['dxcc_lat'] = $callsign_dxcc_lookup['lat'];
|
||||
$return['dxcc_long'] = $callsign_dxcc_lookup['long'];
|
||||
$return['dxcc_cqz'] = $callsign_dxcc_lookup['cqz'];
|
||||
}
|
||||
// If the final slash is a DXCC then find it!
|
||||
if (isset($ans2['call'])) {
|
||||
$return['dxcc'] = $ans2['entity'];
|
||||
$return['dxcc_lat'] = $ans2['lat'];
|
||||
$return['dxcc_long'] = $ans2['long'];
|
||||
$return['dxcc_cqz'] = $ans2['cqz'];
|
||||
} else {
|
||||
$return['dxcc'] = $callsign_dxcc_lookup['entity'];
|
||||
$return['dxcc_lat'] = $callsign_dxcc_lookup['lat'];
|
||||
$return['dxcc_long'] = $callsign_dxcc_lookup['long'];
|
||||
$return['dxcc_cqz'] = $callsign_dxcc_lookup['cqz'];
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* Pool any local data we have for a callsign
|
||||
*
|
||||
*/
|
||||
$call_lookup_results = $this->logbook_model->call_lookup_result($lookup_callsign);
|
||||
$call_lookup_results = $this->logbook_model->call_lookup_result($lookup_callsign);
|
||||
|
||||
if ($call_lookup_results != null) {
|
||||
$return['name'] = $call_lookup_results->COL_NAME;
|
||||
$return['gridsquare'] = $call_lookup_results->COL_GRIDSQUARE;
|
||||
$return['location'] = $call_lookup_results->COL_QTH;
|
||||
$return['iota_ref'] = $call_lookup_results->COL_IOTA;
|
||||
$return['qsl_manager'] = $call_lookup_results->COL_QSL_VIA;
|
||||
$return['state'] = $call_lookup_results->COL_STATE;
|
||||
$return['us_county'] = $call_lookup_results->COL_CNTY;
|
||||
if($call_lookup_results != null)
|
||||
{
|
||||
$return['name'] = $call_lookup_results->COL_NAME;
|
||||
$return['gridsquare'] = $call_lookup_results->COL_GRIDSQUARE;
|
||||
$return['location'] = $call_lookup_results->COL_QTH;
|
||||
$return['iota_ref'] = $call_lookup_results->COL_IOTA;
|
||||
$return['qsl_manager'] = $call_lookup_results->COL_QSL_VIA;
|
||||
$return['state'] = $call_lookup_results->COL_STATE;
|
||||
$return['us_county'] = $call_lookup_results->COL_CNTY;
|
||||
|
||||
if ($return['gridsquare'] != "") {
|
||||
$return['latlng'] = $this->qralatlng($return['gridsquare']);
|
||||
}
|
||||
|
||||
if ($return['gridsquare'] != "") {
|
||||
$return['latlng'] = $this->qralatlng($return['gridsquare']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -802,147 +606,9 @@ class API extends CI_Controller
|
|||
$this->output->enable_profiler(FALSE);
|
||||
}
|
||||
|
||||
function qralatlng($qra)
|
||||
{
|
||||
function qralatlng($qra) {
|
||||
$this->load->library('Qra');
|
||||
$latlng = $this->qra->qra2latlong($qra);
|
||||
return $latlng;
|
||||
}
|
||||
|
||||
/**
|
||||
* API endpoint to get recent QSOs from a public logbook
|
||||
*
|
||||
* @api GET /api/recent_qsos/{public_slug}/{limit}
|
||||
*
|
||||
* @param string public_slug Required. Public slug identifier for the logbook
|
||||
* @param int limit Optional. Number of QSOs to return (default: 10, max: 50)
|
||||
*
|
||||
* @return json Returns JSON array with recent QSO data or error message
|
||||
*
|
||||
* @throws 404 Not Found - Logbook not found or empty logbook
|
||||
* @throws 400 Bad Request - Invalid limit parameter
|
||||
*
|
||||
* @example
|
||||
* Request: GET /api/recent_qsos/my-public-logbook/5
|
||||
*
|
||||
* Response:
|
||||
* {
|
||||
* "qsos": [
|
||||
* {
|
||||
* "date": "2024-01-15",
|
||||
* "time": "14:30",
|
||||
* "callsign": "W1AW",
|
||||
* "mode": "SSB",
|
||||
* "band": "20M",
|
||||
* "rst_sent": "59",
|
||||
* "rst_rcvd": "59"
|
||||
* }
|
||||
* ],
|
||||
* "count": 1,
|
||||
* "logbook_slug": "my-public-logbook"
|
||||
* }
|
||||
*/
|
||||
function recent_qsos($public_slug = null, $limit = 10)
|
||||
{
|
||||
header('Content-type: application/json');
|
||||
|
||||
// Validate and sanitize $limit
|
||||
if (!is_numeric($limit)) {
|
||||
$limit = 10; // Default to 10 if not numeric
|
||||
} else {
|
||||
$limit = intval($limit);
|
||||
if ($limit < 1) {
|
||||
$limit = 1; // Minimum limit of 1
|
||||
} elseif ($limit > 50) {
|
||||
$limit = 50; // Maximum limit of 50
|
||||
}
|
||||
}
|
||||
|
||||
if ($public_slug == null) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['status' => 'failed', 'reason' => 'missing public_slug parameter']);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->load->model('logbooks_model');
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
if ($this->logbooks_model->public_slug_exists($public_slug)) {
|
||||
$logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($public_slug);
|
||||
if ($logbook_id != false) {
|
||||
// Get associated station locations for mysql queries
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id);
|
||||
|
||||
if (!$logbooks_locations_array) {
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => 'Empty Logbook']);
|
||||
return;
|
||||
}
|
||||
|
||||
// Get recent QSOs using existing method
|
||||
$recent_qsos_query = $this->logbook_model->get_last_qsos($limit, $logbooks_locations_array);
|
||||
|
||||
if ($recent_qsos_query == null) {
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => 'No QSOs found']);
|
||||
return;
|
||||
}
|
||||
|
||||
// Format the data for JSON response
|
||||
$qsos = array();
|
||||
foreach ($recent_qsos_query->result() as $row) {
|
||||
$qso = array(
|
||||
'date' => date('Y-m-d', strtotime($row->COL_TIME_ON)),
|
||||
'time' => date('H:i', strtotime($row->COL_TIME_ON)),
|
||||
'callsign' => strtoupper($row->COL_CALL),
|
||||
'mode' => $row->COL_SUBMODE ? $row->COL_SUBMODE : $row->COL_MODE,
|
||||
'band' => $row->COL_SAT_NAME ? $row->COL_SAT_NAME : $row->COL_BAND,
|
||||
'rst_sent' => $row->COL_RST_SENT,
|
||||
'rst_rcvd' => $row->COL_RST_RCVD
|
||||
);
|
||||
|
||||
// Add optional fields if they exist
|
||||
if ($row->COL_STX_STRING) {
|
||||
$qso['stx_string'] = $row->COL_STX_STRING;
|
||||
}
|
||||
if ($row->COL_SRX_STRING) {
|
||||
$qso['srx_string'] = $row->COL_SRX_STRING;
|
||||
}
|
||||
if ($row->COL_GRIDSQUARE) {
|
||||
$qso['gridsquare'] = $row->COL_GRIDSQUARE;
|
||||
}
|
||||
if ($row->COL_QTH) {
|
||||
$qso['qth'] = $row->COL_QTH;
|
||||
}
|
||||
if ($row->COL_NAME) {
|
||||
$qso['name'] = $row->COL_NAME;
|
||||
}
|
||||
|
||||
$dxcc = $this->logbook_model->check_dxcc_table(strtoupper(trim(strtoupper($row->COL_CALL))), $row->COL_TIME_ON);
|
||||
if (empty($dxcc[0])) {
|
||||
$dxcc_id = null;
|
||||
} else {
|
||||
$qso['country'] = $dxcc[1];
|
||||
$qso['lat'] = $dxcc[4];
|
||||
$qso['long'] = $dxcc[5];
|
||||
}
|
||||
|
||||
$qsos[] = $qso;
|
||||
}
|
||||
|
||||
http_response_code(200);
|
||||
echo json_encode([
|
||||
'qsos' => $qsos,
|
||||
'count' => count($qsos),
|
||||
'logbook_slug' => $public_slug
|
||||
], JSON_PRETTY_PRINT);
|
||||
} else {
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => $public_slug . ' has no associated station locations']);
|
||||
}
|
||||
} else {
|
||||
http_response_code(404);
|
||||
echo json_encode(['status' => 'failed', 'reason' => 'logbook not found']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
文件差异内容过多而无法显示
加载差异
|
|
@ -37,33 +37,27 @@ class Clublog extends CI_Controller {
|
|||
|
||||
$this->load->model('clublog_model');
|
||||
|
||||
// Retrieve all station profiles for the user with their QSO counts
|
||||
$station_profiles = $this->clublog_model->all_with_count($clean_userid);
|
||||
|
||||
if($station_profiles->num_rows()){
|
||||
foreach ($station_profiles->result() as $station_row)
|
||||
{
|
||||
// Only process stations that have QSOs to upload
|
||||
if($station_row->qso_total > 0) {
|
||||
// Get QSOs for this station that haven't been uploaded to Clublog yet
|
||||
$data['qsos'] = $this->clublog_model->get_clublog_qsos($station_row->station_id);
|
||||
|
||||
if($data['qsos']->num_rows()){
|
||||
// Generate ADIF file content from the view template
|
||||
$string = $this->load->view('adif/data/clublog', $data, TRUE);
|
||||
|
||||
// Generate a unique ID for the temporary file
|
||||
$ranid = uniqid();
|
||||
|
||||
// Write the ADIF data to a temporary file
|
||||
if ( ! write_file('uploads/clublog'.$ranid.$station_row->station_id.'.adi', $string)) {
|
||||
echo 'Unable to write the file - Make the folder Upload folder has write permissions.';
|
||||
}
|
||||
else {
|
||||
// Get details of the created ADIF file
|
||||
|
||||
$file_info = get_file_info('uploads/clublog'.$ranid.$station_row->station_id.'.adi');
|
||||
|
||||
// Initialize the CURL request to Clublog's API endpoint
|
||||
// initialise the curl request
|
||||
$request = curl_init('https://clublog.org/putlogs.php');
|
||||
|
||||
if($this->config->item('directory') != "") {
|
||||
|
|
@ -113,14 +107,6 @@ class Clublog extends CI_Controller {
|
|||
} else {
|
||||
echo "Error ".$response;
|
||||
log_message('error', 'Clublog upload for '.$station_row->station_callsign.' failed reason '.$response);
|
||||
|
||||
// If Clublog responds with a 403
|
||||
if ($info['http_code'] == 403) {
|
||||
$this->load->model('clublog_model');
|
||||
echo "Clublog API access denied for ".$station_row->station_callsign."<br>";
|
||||
log_message('error', 'Clublog API access denied for '.$station_row->station_callsign);
|
||||
$this->clublog_model->reset_clublog_user_fields($station_row->user_id);
|
||||
}
|
||||
}
|
||||
|
||||
// Delete the ADIF file used for clublog
|
||||
|
|
@ -144,12 +130,13 @@ class Clublog extends CI_Controller {
|
|||
$this->clublog_model->mark_qsos_sent($clean_station_id);
|
||||
}
|
||||
|
||||
function markallnotsent($station_id) {
|
||||
function markallnotsent() {
|
||||
$clean_station_id = $this->security->xss_clean($station_id);
|
||||
$this->load->model('clublog_model');
|
||||
$this->clublog_model->mark_all_qsos_notsent($clean_station_id);
|
||||
}
|
||||
|
||||
|
||||
// Find DXCC
|
||||
function find_dxcc($callsign) {
|
||||
$clean_callsign = $this->security->xss_clean($callsign);
|
||||
|
|
|
|||
|
|
@ -13,69 +13,14 @@ class Components extends CI_Controller {
|
|||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
}
|
||||
|
||||
public function index() {
|
||||
$this->load->model("user_options_model");
|
||||
$hkey_opt=$this->user_options_model->get_options('hamsat',array('option_name'=>'hamsat_key','option_key'=>'api'))->result();
|
||||
if (count($hkey_opt)>0) {
|
||||
$data['user_hamsat_key'] = $hkey_opt[0]->option_value;
|
||||
} else {
|
||||
$data['user_hamsat_key']='';
|
||||
}
|
||||
$url = 'https://hams.at/api/alerts/upcoming';
|
||||
|
||||
// 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;
|
||||
} else {
|
||||
$data['user_hamsat_workable_only'] = 0;
|
||||
}
|
||||
|
||||
$this->load->model('stations');
|
||||
$data['gridsquare'] = strtoupper($this->stations->find_gridsquare());
|
||||
|
||||
// load view
|
||||
$this->load->view('components/hamsat/table', $data);
|
||||
}
|
||||
public function index() {
|
||||
$this->load->model('stations');
|
||||
$url = 'https://oscarwatch.org/scripts/hamsat_json.php';
|
||||
$json = file_get_contents($url);
|
||||
$data['rovedata'] = json_decode($json, true);
|
||||
$data['gridsquare'] = strtoupper($this->stations->find_gridsquare());
|
||||
|
||||
// load view
|
||||
$this->load->view('components/hamsat/table', $data);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,15 +50,6 @@ class Contesting extends CI_Controller {
|
|||
echo json_encode($this->Contesting_model->getSessionQsos($qso));
|
||||
}
|
||||
|
||||
public function getSessionFreshQsos() {
|
||||
$this->load->model('Contesting_model');
|
||||
|
||||
$contest_id = $this->input->post('contest_id');
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($this->Contesting_model->getSessionFreshQsos($contest_id));
|
||||
}
|
||||
|
||||
public function getSession() {
|
||||
$this->load->model('Contesting_model');
|
||||
|
||||
|
|
@ -202,8 +193,6 @@ class Contesting extends CI_Controller {
|
|||
$custom_date_format = $this->session->userdata('user_date_format');
|
||||
$abstimeb4=date($custom_date_format, strtotime($result->row()->COL_TIME_OFF)).' '.date('H:i',strtotime($result->row()->COL_TIME_OFF));
|
||||
echo json_encode(array('message' => 'Worked at '.$abstimeb4.' ('.$timeb4.' ago) before'));
|
||||
} else {
|
||||
echo json_encode(array('message' => 'OKAY'));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,84 +1,66 @@
|
|||
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Dashboard extends CI_Controller
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Load common models that are used across multiple methods
|
||||
$this->load->model('user_model');
|
||||
$this->load->model('logbook_model');
|
||||
$this->load->model('logbooks_model');
|
||||
}
|
||||
class Dashboard extends CI_Controller {
|
||||
|
||||
public function index()
|
||||
{
|
||||
// If environment is set to development then show the debug toolbar
|
||||
if (ENVIRONMENT == 'development') {
|
||||
$this->output->enable_profiler(TRUE);
|
||||
}
|
||||
if(ENVIRONMENT == 'development') {
|
||||
$this->output->enable_profiler(TRUE);
|
||||
}
|
||||
|
||||
// Load language files
|
||||
$this->lang->load('lotw');
|
||||
|
||||
// Database connections
|
||||
$this->load->model('logbook_model');
|
||||
$this->load->model('user_model');
|
||||
|
||||
// LoTW infos
|
||||
$this->load->model('LotwCert');
|
||||
|
||||
if ($this->optionslib->get_option('version2_trigger') == "false") {
|
||||
if($this->optionslib->get_option('version2_trigger') == "false") {
|
||||
redirect('welcome');
|
||||
}
|
||||
|
||||
// Check if users logged in
|
||||
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
if($this->user_model->validate_session() == 0) {
|
||||
// user is not logged in
|
||||
redirect('user/login');
|
||||
}
|
||||
|
||||
$this->load->model('logbooks_model');
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
|
||||
|
||||
/*
|
||||
Setup Code
|
||||
// Check if the user has any logbook locations if not its setup time
|
||||
if (empty($logbooks_locations_array)) {
|
||||
// user has no locations
|
||||
$this->session->set_flashdata('notice', 'You have no locations, please add one to continue.');
|
||||
redirect('information/welcome');
|
||||
}
|
||||
*/
|
||||
|
||||
// Calculate Lat/Lng from Locator to use on Maps
|
||||
if ($this->session->userdata('user_locator')) {
|
||||
$this->load->library('qra');
|
||||
if($this->session->userdata('user_locator')) {
|
||||
$this->load->library('qra');
|
||||
|
||||
$qra_position = $this->qra->qra2latlong($this->session->userdata('user_locator'));
|
||||
if ($qra_position) {
|
||||
$data['qra'] = "set";
|
||||
$data['qra_lat'] = $qra_position[0];
|
||||
$data['qra_lng'] = $qra_position[1];
|
||||
} else {
|
||||
$data['qra'] = "none";
|
||||
}
|
||||
$qra_position = $this->qra->qra2latlong($this->session->userdata('user_locator'));
|
||||
if ($qra_position) {
|
||||
$data['qra'] = "set";
|
||||
$data['qra_lat'] = $qra_position[0];
|
||||
$data['qra_lng'] = $qra_position[1];
|
||||
} else {
|
||||
$data['qra'] = "none";
|
||||
}
|
||||
} else {
|
||||
$data['qra'] = "none";
|
||||
$data['qra'] = "none";
|
||||
}
|
||||
|
||||
$this->load->model('stations');
|
||||
$this->load->model('setup_model');
|
||||
|
||||
// Use consolidated setup counts instead of 3 separate queries
|
||||
$setup_counts = $this->setup_model->getAllSetupCounts();
|
||||
$data['countryCount'] = $setup_counts['country_count'];
|
||||
$data['logbookCount'] = $setup_counts['logbook_count'];
|
||||
$data['locationCount'] = $setup_counts['location_count'];
|
||||
$data['countryCount'] = $this->setup_model->getCountryCount();
|
||||
$data['logbookCount'] = $this->setup_model->getLogbookCount();
|
||||
$data['locationCount'] = $this->setup_model->getLocationCount();
|
||||
|
||||
$data['current_active'] = $this->stations->find_active();
|
||||
|
||||
$setup_required = false;
|
||||
|
||||
if ($setup_required) {
|
||||
if($setup_required) {
|
||||
$data['page_title'] = "Cloudlog Setup Checklist";
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
|
|
@ -92,51 +74,21 @@ class Dashboard extends CI_Controller
|
|||
|
||||
$data['radio_status'] = $this->cat->recent_status();
|
||||
|
||||
// Store info - Use consolidated query for QSO statistics
|
||||
$qso_stats = $this->logbook_model->get_qso_statistics_consolidated($logbooks_locations_array);
|
||||
$data['todays_qsos'] = $qso_stats['todays_qsos'];
|
||||
$data['total_qsos'] = $qso_stats['total_qsos'];
|
||||
$data['month_qsos'] = $qso_stats['month_qsos'];
|
||||
$data['year_qsos'] = $qso_stats['year_qsos'];
|
||||
// Store info
|
||||
$data['todays_qsos'] = $this->logbook_model->todays_qsos($logbooks_locations_array);
|
||||
$data['total_qsos'] = $this->logbook_model->total_qsos($logbooks_locations_array);
|
||||
$data['month_qsos'] = $this->logbook_model->month_qsos($logbooks_locations_array);
|
||||
$data['year_qsos'] = $this->logbook_model->year_qsos($logbooks_locations_array);
|
||||
|
||||
// Use consolidated countries statistics instead of separate queries
|
||||
$countries_stats = $this->logbook_model->get_countries_statistics_consolidated($logbooks_locations_array);
|
||||
|
||||
$data['total_countries'] = $countries_stats['Countries_Worked'];
|
||||
$data['total_countries_confirmed_paper'] = $countries_stats['Countries_Worked_QSL'];
|
||||
$data['total_countries_confirmed_eqsl'] = $countries_stats['Countries_Worked_EQSL'];
|
||||
$data['total_countries_confirmed_lotw'] = $countries_stats['Countries_Worked_LOTW'];
|
||||
$current_countries = $countries_stats['Countries_Current'];
|
||||
// Load Countries Breakdown data into array
|
||||
$CountriesBreakdown = $this->logbook_model->total_countries_confirmed($logbooks_locations_array);
|
||||
|
||||
$data['dashboard_upcoming_dx_card'] = false;
|
||||
$data['dashboard_qslcard_card'] = false;
|
||||
$data['dashboard_eqslcard_card'] = false;
|
||||
$data['dashboard_lotw_card'] = false;
|
||||
$data['dashboard_vuccgrids_card'] = false;
|
||||
$data['total_countries'] = $CountriesBreakdown['Countries_Worked'];
|
||||
$data['total_countries_confirmed_paper'] = $CountriesBreakdown['Countries_Worked_QSL'];
|
||||
$data['total_countries_confirmed_eqsl'] = $CountriesBreakdown['Countries_Worked_EQSL'];
|
||||
$data['total_countries_confirmed_lotw'] = $CountriesBreakdown['Countries_Worked_LOTW'];
|
||||
|
||||
$dashboard_options = $this->user_options_model->get_options('dashboard')->result();
|
||||
|
||||
// Optimize options processing - convert to associative array for O(1) lookup
|
||||
$options_map = array();
|
||||
foreach ($dashboard_options as $item) {
|
||||
$options_map[$item->option_name][$item->option_key] = $item->option_value;
|
||||
}
|
||||
|
||||
// Quick lookups instead of nested loops
|
||||
$data['dashboard_upcoming_dx_card'] = isset($options_map['dashboard_upcoming_dx_card']['enabled']) && $options_map['dashboard_upcoming_dx_card']['enabled'] == 'true';
|
||||
$data['dashboard_qslcard_card'] = isset($options_map['dashboard_qslcards_card']['enabled']) && $options_map['dashboard_qslcards_card']['enabled'] == 'true';
|
||||
$data['dashboard_eqslcard_card'] = isset($options_map['dashboard_eqslcards_card']['enabled']) && $options_map['dashboard_eqslcards_card']['enabled'] == 'true';
|
||||
$data['dashboard_lotw_card'] = isset($options_map['dashboard_lotw_card']['enabled']) && $options_map['dashboard_lotw_card']['enabled'] == 'true';
|
||||
$data['dashboard_vuccgrids_card'] = isset($options_map['dashboard_vuccgrids_card']['enabled']) && $options_map['dashboard_vuccgrids_card']['enabled'] == 'true';
|
||||
|
||||
// Only load VUCC data if the card is actually enabled
|
||||
if ($data['dashboard_vuccgrids_card']) {
|
||||
$data['vucc'] = $this->vucc->fetchVuccSummary();
|
||||
$data['vuccSAT'] = $this->vucc->fetchVuccSummary('SAT');
|
||||
}
|
||||
|
||||
|
||||
$QSLStatsBreakdownArray = $this->logbook_model->get_QSLStats($logbooks_locations_array);
|
||||
$QSLStatsBreakdownArray =$this->logbook_model->get_QSLStats($logbooks_locations_array);
|
||||
|
||||
$data['total_qsl_sent'] = $QSLStatsBreakdownArray['QSL_Sent'];
|
||||
$data['total_qsl_rcvd'] = $QSLStatsBreakdownArray['QSL_Received'];
|
||||
|
|
@ -162,77 +114,31 @@ class Dashboard extends CI_Controller
|
|||
|
||||
$data['last_five_qsos'] = $this->logbook_model->get_last_qsos('18', $logbooks_locations_array);
|
||||
|
||||
$data['vucc'] = $this->vucc->fetchVuccSummary();
|
||||
$data['vuccSAT'] = $this->vucc->fetchVuccSummary('SAT');
|
||||
|
||||
$data['page_title'] = "Dashboard";
|
||||
|
||||
// Optimize DXCC calculation - get count directly instead of loading all records
|
||||
$this->load->model('dxcc');
|
||||
$total_dxcc_count = $this->dxcc->get_total_dxcc_count();
|
||||
$data['total_countries_needed'] = $total_dxcc_count - $current_countries;
|
||||
$dxcc = $this->dxcc->list_current();
|
||||
|
||||
$current = $this->logbook_model->total_countries_current($logbooks_locations_array);
|
||||
|
||||
$data['total_countries_needed'] = count($dxcc->result()) - $current;
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('dashboard/index');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function todays_qso_component() {
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
// User is not logged in
|
||||
return;
|
||||
}
|
||||
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
|
||||
|
||||
// Use consolidated query instead of individual todays_qsos call
|
||||
$qso_stats = $this->logbook_model->get_qso_statistics_consolidated($logbooks_locations_array);
|
||||
$data['todays_qsos'] = $qso_stats['todays_qsos'];
|
||||
$this->load->view('components/dashboard_todays_qsos', $data);
|
||||
}
|
||||
|
||||
public function logbook_display_component() {
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
// User is not logged in
|
||||
return;
|
||||
}
|
||||
|
||||
// Get Logbook Locations
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
|
||||
|
||||
// Get the last 20 QSOs
|
||||
$data['last_five_qsos'] = $this->logbook_model->get_last_qsos('20', $logbooks_locations_array);
|
||||
$this->load->view('components/dashboard_logbook_table', $data);
|
||||
}
|
||||
|
||||
function radio_display_component()
|
||||
{
|
||||
function radio_display_component() {
|
||||
$this->load->model('cat');
|
||||
|
||||
$data['radio_status'] = $this->cat->recent_status();
|
||||
$this->load->view('components/radio_display_table', $data);
|
||||
}
|
||||
|
||||
function upcoming_dxcc_component()
|
||||
{
|
||||
|
||||
$this->load->model('Workabledxcc_model');
|
||||
|
||||
$this->load->driver('cache', array('adapter' => 'file', 'backup' => 'file'));
|
||||
|
||||
// Get the user ID from the session data
|
||||
$userID = $this->session->userdata('user_id');
|
||||
|
||||
|
||||
$thisWeekRecords = $this->Workabledxcc_model->GetThisWeek();
|
||||
|
||||
|
||||
$data['thisWeekRecords'] = $thisWeekRecords;
|
||||
|
||||
usort($data['thisWeekRecords'], function ($a, $b) {
|
||||
$dateA = new DateTime($a['1']);
|
||||
$dateB = new DateTime($b['1']);
|
||||
return $dateA <=> $dateB;
|
||||
});
|
||||
|
||||
$this->load->view('components/upcoming_dxccs', $data);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ class Dayswithqso extends CI_Controller {
|
|||
$data['streaks'] = $this->dayswithqso_model->getLongestStreak();
|
||||
$data['currentstreak'] = $this->dayswithqso_model->getCurrentStreak();
|
||||
$data['almostcurrentstreak'] = $this->dayswithqso_model->getAlmostCurrentStreak();
|
||||
$data['daysofweek'] = $this->dayswithqso_model->getDaysOfWeek();
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('dayswithqso/index');
|
||||
|
|
@ -39,26 +38,4 @@ class Dayswithqso extends CI_Controller {
|
|||
echo json_encode($data);
|
||||
}
|
||||
|
||||
public function get_weekdays(){
|
||||
|
||||
//load model
|
||||
$this->load->model('dayswithqso_model');
|
||||
|
||||
// get data
|
||||
$data = $this->dayswithqso_model->getDaysOfWeek();
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($data);
|
||||
}
|
||||
|
||||
public function get_historydays(){
|
||||
|
||||
//load model
|
||||
$this->load->model('dayswithqso_model');
|
||||
|
||||
// get data
|
||||
$data = $this->dayswithqso_model->getHistoryDays();
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($data);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -64,15 +64,4 @@ class Debug extends CI_Controller {
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function flags() {
|
||||
|
||||
// load library called DxccFlag
|
||||
$this->load->library('DxccFlag');
|
||||
|
||||
// Call getISO function from DxccFlag library
|
||||
$data['flags'] = $this->dxccflag->getISO('33');
|
||||
|
||||
print_r($data['flags']);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,12 +17,8 @@ class Distances extends CI_Controller {
|
|||
$data['page_title'] = "Distances Worked";
|
||||
|
||||
$this->load->model('bands');
|
||||
$this->load->model('gridmap_model');
|
||||
|
||||
$data['bands_available'] = $this->bands->get_worked_bands_distances();
|
||||
$data['sats_available'] = $this->bands->get_worked_sats();
|
||||
$data['modes'] = $this->gridmap_model->get_worked_modes();
|
||||
$data['powers'] = $this->bands->get_worked_powers();
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('distances/index');
|
||||
|
|
@ -76,39 +72,12 @@ class Distances extends CI_Controller {
|
|||
$distance = $this->security->xss_clean($this->input->post('distance'));
|
||||
$band = $this->security->xss_clean($this->input->post('band'));
|
||||
$sat = $this->security->xss_clean($this->input->post('sat'));
|
||||
$mode = $this->security->xss_clean($this->input->post('mode'));
|
||||
$power = $this->security->xss_clean($this->input->post('pwr'));
|
||||
$propag = $this->security->xss_clean($this->input->post('propag'));
|
||||
|
||||
$data['results'] = $this->distances_model->qso_details($distance, $band, $sat, $mode, $power, $propag);
|
||||
|
||||
// Render Page
|
||||
if (strtolower($band) == 'all') $band = lang('statistics_distances_bands_all');
|
||||
(strtolower($mode) == 'all') ? $mode = lang('statistics_distances_modes_all') : $mode = strtoupper($mode);
|
||||
switch (strtolower($power)) {
|
||||
case 'all':
|
||||
$power = lang('statistics_distances_bands_all');
|
||||
break;
|
||||
case '':
|
||||
$power = lang('general_word_undefined');
|
||||
break;
|
||||
default:
|
||||
$power .= 'W';
|
||||
}
|
||||
|
||||
switch (strtolower($propag)) {
|
||||
case 'all':
|
||||
$propag = lang('general_word_all');
|
||||
break;
|
||||
case '':
|
||||
$propag = lang('general_word_undefined');
|
||||
break;
|
||||
default:
|
||||
$propag = lang("gen_hamradio_propagation_$propag");
|
||||
}
|
||||
$data['results'] = $this->distances_model->qso_details($distance, $band, $sat);
|
||||
|
||||
// Render Page
|
||||
$data['page_title'] = "Log View - " . $distance;
|
||||
$data['filter'] = lang('statistics_distances_qsos_with') . " " . $distance . lang('statistics_distances_and_band') . " " . $band . lang('statistics_distances_and_mode') . $mode . lang('statistics_distances_and_power') . $power . lang('statistics_distances_and_propagation') . $propag;
|
||||
$data['filter'] = lang('statistics_distances_qsos_with') . " " . $distance . " " . lang('statistics_distances_and_band'). " " . $band;
|
||||
$this->load->view('awards/details', $data);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,54 +1,47 @@
|
|||
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class eqsl extends CI_Controller
|
||||
{
|
||||
class eqsl extends CI_Controller {
|
||||
|
||||
/* Controls who can access the controller and its functions */
|
||||
function __construct()
|
||||
{
|
||||
function __construct() {
|
||||
parent::__construct();
|
||||
$this->load->helper(array('form', 'url'));
|
||||
}
|
||||
|
||||
// Default view when loading controller.
|
||||
public function index()
|
||||
{
|
||||
// Default view when loading controller.
|
||||
public function index() {
|
||||
|
||||
$this->lang->load('qslcard');
|
||||
$this->load->helper('storage');
|
||||
$folder_name = "images/eqsl_card_images";
|
||||
$data['storage_used'] = sizeFormat(folderSize($folder_name));
|
||||
$this->lang->load('qslcard');
|
||||
$folder_name = "images/eqsl_card_images";
|
||||
$data['storage_used'] = $this->sizeFormat($this->folderSize($folder_name));
|
||||
|
||||
|
||||
// Render Page
|
||||
$data['page_title'] = "eQSL Cards";
|
||||
// Render Page
|
||||
$data['page_title'] = "eQSL Cards";
|
||||
|
||||
$this->load->model('eqsl_images');
|
||||
$data['qslarray'] = $this->eqsl_images->eqsl_qso_list();
|
||||
$this->load->model('eqsl_images');
|
||||
$data['qslarray'] = $this->eqsl_images->eqsl_qso_list();
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('eqslcard/index');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
public function import()
|
||||
{
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('eqslcard/index');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
public function import() {
|
||||
$this->load->model('user_model');
|
||||
if (!$this->user_model->authorize(2)) {
|
||||
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
|
||||
redirect('dashboard');
|
||||
}
|
||||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
|
||||
$this->load->model('stations');
|
||||
$data['station_profile'] = $this->stations->all_of_user();
|
||||
$active_station_id = $this->stations->find_active();
|
||||
$station_profile = $this->stations->profile($active_station_id);
|
||||
$active_station_id = $this->stations->find_active();
|
||||
$station_profile = $this->stations->profile($active_station_id);
|
||||
$data['active_station_info'] = $station_profile->row();
|
||||
|
||||
// Check if eQSL Nicknames have been defined
|
||||
$this->load->model('eqslmethods_model');
|
||||
$eqsl_locations = $this->eqslmethods_model->all_of_user_with_eqsl_nick_defined();
|
||||
if ($eqsl_locations->num_rows() == 0) {
|
||||
$this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
|
||||
if($eqsl_locations->num_rows() == 0) {
|
||||
show_error("eQSL Nicknames in Station Profiles aren't defined");
|
||||
exit;
|
||||
}
|
||||
|
||||
ini_set('memory_limit', '-1');
|
||||
|
|
@ -60,7 +53,8 @@ class eqsl extends CI_Controller
|
|||
$this->load->library('upload', $config);
|
||||
|
||||
$eqsl_results = array();
|
||||
if ($this->input->post('eqslimport') == 'fetch') {
|
||||
if ($this->input->post('eqslimport') == 'fetch')
|
||||
{
|
||||
$this->load->library('EqslImporter');
|
||||
|
||||
// Get credentials for eQSL
|
||||
|
|
@ -69,27 +63,28 @@ class eqsl extends CI_Controller
|
|||
$eqsl_password = $q->user_eqsl_password;
|
||||
|
||||
// Validate that eQSL credentials are not empty
|
||||
if ($eqsl_password == '') {
|
||||
if ($eqsl_password == '')
|
||||
{
|
||||
$this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!');
|
||||
redirect('eqsl/import');
|
||||
}
|
||||
|
||||
$eqsl_force_from_date = (!$this->input->post('eqsl_force_from_date') == "") ? $this->input->post('eqsl_force_from_date') : "";
|
||||
$eqsl_force_from_date = (!$this->input->post('eqsl_force_from_date')=="")?$this->input->post('eqsl_force_from_date'):"";
|
||||
foreach ($eqsl_locations->result_array() as $eqsl_location) {
|
||||
$this->eqslimporter->from_callsign_and_QTH(
|
||||
$eqsl_location['station_callsign'],
|
||||
$eqsl_location['eqslqthnickname'],
|
||||
$config['upload_path'],
|
||||
$eqsl_location['station_id']
|
||||
$config['upload_path']
|
||||
);
|
||||
|
||||
$eqsl_results[] = $this->eqslimporter->fetch($eqsl_password, $eqsl_force_from_date);
|
||||
$eqsl_results[] = $this->eqslimporter->fetch($eqsl_password,$eqsl_force_from_date);
|
||||
}
|
||||
} elseif ($this->input->post('eqslimport') == 'upload') {
|
||||
$station_id4upload = $this->input->post('station_profile');
|
||||
$station_id4upload=$this->input->post('station_profile');
|
||||
if ($this->stations->check_station_is_accessible($station_id4upload)) {
|
||||
$station_callsign = $this->stations->profile($station_id4upload)->row()->station_callsign;
|
||||
if (!$this->upload->do_upload()) {
|
||||
$station_callsign=$this->stations->profile($station_id4upload)->row()->station_callsign;
|
||||
if ( ! $this->upload->do_upload())
|
||||
{
|
||||
$data['page_title'] = "eQSL Import";
|
||||
$data['error'] = $this->upload->display_errors();
|
||||
|
||||
|
|
@ -102,12 +97,12 @@ class eqsl extends CI_Controller
|
|||
$data = array('upload_data' => $this->upload->data());
|
||||
|
||||
$this->load->library('EqslImporter');
|
||||
$this->eqslimporter->from_file('./uploads/' . $data['upload_data']['file_name'], $station_callsign, $station_id4upload);
|
||||
$this->eqslimporter->from_file('./uploads/'.$data['upload_data']['file_name'],$station_callsign);
|
||||
|
||||
$eqsl_results[] = $this->eqslimporter->import();
|
||||
}
|
||||
} else {
|
||||
log_message('error', $station_id4upload . " is not valid for user!");
|
||||
log_message('error',$station_id4upload." is not valid for user!");
|
||||
}
|
||||
} else {
|
||||
$data['page_title'] = "eQSL Import";
|
||||
|
|
@ -127,45 +122,42 @@ class eqsl extends CI_Controller
|
|||
$this->load->view('interface_assets/footer');
|
||||
} // end function
|
||||
|
||||
public function export()
|
||||
{
|
||||
public function export() {
|
||||
$this->load->model('user_model');
|
||||
if (!$this->user_model->authorize(2)) {
|
||||
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
|
||||
redirect('dashboard');
|
||||
}
|
||||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
|
||||
// Check if eQSL Nicknames have been defined
|
||||
$this->load->model('stations');
|
||||
if ($this->stations->are_eqsl_nicks_defined() == 0) {
|
||||
$this->session->set_flashdata('error', 'eQSL Nicknames in Station Profiles aren\'t defined!');
|
||||
}
|
||||
$this->load->model('stations');
|
||||
if($this->stations->are_eqsl_nicks_defined() == 0) {
|
||||
show_error('eQSL Nicknames in Station Profiles arent defined');
|
||||
exit;
|
||||
}
|
||||
|
||||
ini_set('memory_limit', '-1');
|
||||
set_time_limit(0);
|
||||
$this->load->model('eqslmethods_model');
|
||||
|
||||
|
||||
$data['page_title'] = "eQSL QSO Upload";
|
||||
$custom_date_format = $this->session->userdata('user_date_format');
|
||||
|
||||
|
||||
if ($this->input->post('eqslexport') == "export") {
|
||||
// Get credentials for eQSL
|
||||
$query = $this->user_model->get_by_id($this->session->userdata('user_id'));
|
||||
$q = $query->row();
|
||||
$data['user_eqsl_name'] = $q->user_eqsl_name;
|
||||
$data['user_eqsl_password'] = $q->user_eqsl_password;
|
||||
|
||||
|
||||
// Validate that eQSL credentials are not empty
|
||||
if ($data['user_eqsl_name'] == '' || $data['user_eqsl_password'] == '') {
|
||||
$this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!');
|
||||
redirect('eqsl/import');
|
||||
if ($data['user_eqsl_name'] == '' || $data['user_eqsl_password'] == '')
|
||||
{
|
||||
$this->session->set_flashdata('warning', 'You have not defined your eQSL.cc credentials!'); redirect('eqsl/import');
|
||||
}
|
||||
|
||||
$rows = '';
|
||||
// Grab the list of QSOs to send information about
|
||||
// perform an HTTP get on each one, and grab the status back
|
||||
$qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent();
|
||||
|
||||
|
||||
foreach ($qslsnotsent->result_array() as $qsl) {
|
||||
$rows .= "<tr>";
|
||||
// eQSL username changes for linked account.
|
||||
|
|
@ -173,21 +165,21 @@ class eqsl extends CI_Controller
|
|||
// the password, however, is always the same as the main account
|
||||
$data['user_eqsl_name'] = $qsl['station_callsign'];
|
||||
$adif = $this->generateAdif($qsl, $data);
|
||||
|
||||
|
||||
$status = $this->uploadQso($adif, $qsl);
|
||||
|
||||
|
||||
$timestamp = strtotime($qsl['COL_TIME_ON']);
|
||||
$rows .= "<td>" . date($custom_date_format, $timestamp) . "</td>";
|
||||
$rows .= "<td>" . date('H:i', $timestamp) . "</td>";
|
||||
$rows .= "<td>" . str_replace("0", "Ø", $qsl['COL_CALL']) . "</td>";
|
||||
$rows .= "<td>" . $qsl['COL_MODE'] . "</td>";
|
||||
if (isset($qsl['COL_SUBMODE'])) {
|
||||
$rows .= "<td>" . $qsl['COL_SUBMODE'] . "</td>";
|
||||
$rows .= "<td>".date($custom_date_format, $timestamp)."</td>";
|
||||
$rows .= "<td>".date('H:i', $timestamp)."</td>";
|
||||
$rows .= "<td>".str_replace("0","Ø",$qsl['COL_CALL'])."</td>";
|
||||
$rows .= "<td>".$qsl['COL_MODE']."</td>";
|
||||
if(isset($qsl['COL_SUBMODE'])) {
|
||||
$rows .= "<td>".$qsl['COL_SUBMODE']."</td>";
|
||||
} else {
|
||||
$rows .= "<td></td>";
|
||||
}
|
||||
$rows .= "<td>" . $qsl['COL_BAND'] . "</td>";
|
||||
$rows .= "<td>" . $status . "</td>";
|
||||
$rows .= "<td>".$qsl['COL_BAND']."</td>";
|
||||
$rows .= "<td>".$status."</td>";
|
||||
}
|
||||
$rows .= "</tr>";
|
||||
$data['eqsl_table'] = $this->generateResultTable($custom_date_format, $rows);
|
||||
|
|
@ -197,27 +189,26 @@ class eqsl extends CI_Controller
|
|||
$data['eqsl_table'] = $this->writeEqslNotSent($qslsnotsent->result_array(), $custom_date_format);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('eqsl/export');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
|
||||
function uploadQso($adif, $qsl)
|
||||
{
|
||||
function uploadQso($adif, $qsl) {
|
||||
$this->load->model('eqslmethods_model');
|
||||
$status = "";
|
||||
|
||||
|
||||
// begin script
|
||||
$ch = curl_init();
|
||||
|
||||
// basic curl options for all requests
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_HEADER, 1);
|
||||
|
||||
|
||||
// use the URL we built
|
||||
curl_setopt($ch, CURLOPT_URL, $adif);
|
||||
|
||||
|
||||
$result = curl_exec($ch);
|
||||
$chi = curl_getinfo($ch);
|
||||
curl_close($ch);
|
||||
|
|
@ -230,23 +221,21 @@ class eqsl extends CI_Controller
|
|||
Warning: Y=2013 M=08 D=11 F6ARS 15M JT65 Bad record: Duplicate
|
||||
Result: 0 out of 1 records added -> Dupe, OM!
|
||||
*/
|
||||
|
||||
|
||||
if ($chi['http_code'] == "200") {
|
||||
if (stristr($result, "Result: 1 out of 1 records added")) {
|
||||
$status = "Sent";
|
||||
$this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
|
||||
} else {
|
||||
if (stristr($result, "Error: No match on eQSL_User/eQSL_Pswd")) {
|
||||
$this->session->set_flashdata('warning', 'Your eQSL username and/or password is incorrect.');
|
||||
redirect('eqsl/export');
|
||||
$this->session->set_flashdata('warning', 'Your eQSL username and/or password is incorrect.'); redirect('eqsl/export');
|
||||
} else {
|
||||
if (stristr($result, "Result: 0 out of 0 records added")) {
|
||||
$this->session->set_flashdata('warning', 'Something went wrong with eQSL.cc!');
|
||||
redirect('eqsl/export');
|
||||
$this->session->set_flashdata('warning', 'Something went wrong with eQSL.cc!'); redirect('eqsl/export');
|
||||
} else {
|
||||
if (stristr($result, "Bad record: Duplicate")) {
|
||||
$status = "Duplicate";
|
||||
|
||||
|
||||
# Mark the QSL as sent if this is a dupe.
|
||||
$this->eqslmethods_model->eqsl_mark_sent($qsl['COL_PRIMARY_KEY']);
|
||||
}
|
||||
|
|
@ -255,17 +244,14 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
} else {
|
||||
if ($chi['http_code'] == "500") {
|
||||
$this->session->set_flashdata('warning', 'eQSL.cc is experiencing issues. Please try exporting QSOs later.');
|
||||
redirect('eqsl/export');
|
||||
$this->session->set_flashdata('warning', 'eQSL.cc is experiencing issues. Please try exporting QSOs later.'); redirect('eqsl/export');
|
||||
} else {
|
||||
if ($chi['http_code'] == "400") {
|
||||
$this->session->set_flashdata('warning', 'There was an error in one of the QSOs. You might want to manually upload them.');
|
||||
redirect('eqsl/export');
|
||||
$this->session->set_flashdata('warning', 'There was an error in one of the QSOs. You might want to manually upload them.'); redirect('eqsl/export');
|
||||
$status = "Error";
|
||||
} else {
|
||||
if ($chi['http_code'] == "404") {
|
||||
$this->session->set_flashdata('warning', 'It seems that the eQSL site has changed. Please open up an issue on GitHub.');
|
||||
redirect('eqsl/export');
|
||||
$this->session->set_flashdata('warning', 'It seems that the eQSL site has changed. Please open up an issue on GitHub.'); redirect('eqsl/export');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -274,19 +260,18 @@ class eqsl extends CI_Controller
|
|||
return $status;
|
||||
}
|
||||
|
||||
function generateResultTable($custom_date_format, $rows)
|
||||
{
|
||||
function generateResultTable($custom_date_format, $rows) {
|
||||
$table = '<table = style="width:100%" class="table-sm table table-bordered table-hover table-striped table-condensed text-center">';
|
||||
$table .= "<thead><tr class=\"titles\">";
|
||||
$table .= "<th>Date</th>";
|
||||
$table .= "<th>Time</th>";
|
||||
$table .= "<th>Call</th>";
|
||||
$table .= "<th>Mode</th>";
|
||||
$table .= "<th>Submode</th>";
|
||||
$table .= "<th>Band</th>";
|
||||
$table .= "<th>Status</th>";
|
||||
$table .= "</tr></thead><tbody>";
|
||||
|
||||
$table .= "<thead><tr class=\"titles\">";
|
||||
$table .= "<th>Date</th>";
|
||||
$table .= "<th>Time</th>";
|
||||
$table .= "<th>Call</th>";
|
||||
$table .= "<th>Mode</th>";
|
||||
$table .= "<th>Submode</th>";
|
||||
$table .= "<th>Band</th>";
|
||||
$table .= "<th>Status</th>";
|
||||
$table .= "</tr></thead><tbody>";
|
||||
|
||||
$table .= $rows;
|
||||
$table .= "</tbody></table>";
|
||||
|
||||
|
|
@ -294,15 +279,14 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
|
||||
// Build out the ADIF info string according to specs https://eqsl.cc/qslcard/ADIFContentSpecs.cfm
|
||||
function generateAdif($qsl, $data)
|
||||
{
|
||||
$COL_QSO_DATE = date('Ymd', strtotime($qsl['COL_TIME_ON']));
|
||||
$COL_TIME_ON = date('Hi', strtotime($qsl['COL_TIME_ON']));
|
||||
|
||||
function generateAdif($qsl, $data) {
|
||||
$COL_QSO_DATE = date('Ymd',strtotime($qsl['COL_TIME_ON']));
|
||||
$COL_TIME_ON = date('Hi',strtotime($qsl['COL_TIME_ON']));
|
||||
|
||||
# Set up the single record file
|
||||
$adif = "https://www.eqsl.cc/qslcard/importADIF.cfm?";
|
||||
$adif .= "ADIFData=CloudlogUpload%20";
|
||||
|
||||
|
||||
/* Handy reference of escaping chars
|
||||
"<" = 3C
|
||||
">" = 3E
|
||||
|
|
@ -313,7 +297,7 @@ class eqsl extends CI_Controller
|
|||
"." = 2E
|
||||
"&" = 26
|
||||
*/
|
||||
|
||||
|
||||
$adif .= "%3C";
|
||||
$adif .= "ADIF%5FVER";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -321,7 +305,7 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3E";
|
||||
$adif .= "1%2E00 ";
|
||||
$adif .= "%20";
|
||||
|
||||
|
||||
$adif .= "%3C";
|
||||
$adif .= "EQSL%5FUSER";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -329,7 +313,7 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3E";
|
||||
$adif .= $data['user_eqsl_name'];
|
||||
$adif .= "%20";
|
||||
|
||||
|
||||
$adif .= "%3C";
|
||||
$adif .= "EQSL%5FPSWD";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -337,11 +321,11 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3E";
|
||||
$adif .= urlencode($data['user_eqsl_password']);
|
||||
$adif .= "%20";
|
||||
|
||||
|
||||
$adif .= "%3C";
|
||||
$adif .= "EOH";
|
||||
$adif .= "%3E";
|
||||
|
||||
|
||||
# Lay out the required fields
|
||||
$adif .= "%3C";
|
||||
$adif .= "QSO%5FDATE";
|
||||
|
|
@ -350,7 +334,7 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3E";
|
||||
$adif .= $COL_QSO_DATE;
|
||||
$adif .= "%20";
|
||||
|
||||
|
||||
$adif .= "%3C";
|
||||
$adif .= "TIME%5FON";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -358,7 +342,7 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3E";
|
||||
$adif .= $COL_TIME_ON;
|
||||
$adif .= "%20";
|
||||
|
||||
|
||||
$adif .= "%3C";
|
||||
$adif .= "CALL";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -366,7 +350,7 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3E";
|
||||
$adif .= $qsl['COL_CALL'];
|
||||
$adif .= "%20";
|
||||
|
||||
|
||||
$adif .= "%3C";
|
||||
$adif .= "MODE";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -374,15 +358,15 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3E";
|
||||
$adif .= $qsl['COL_MODE'];
|
||||
$adif .= "%20";
|
||||
|
||||
if (isset($qsl['COL_SUBMODE'])) {
|
||||
$adif .= "%3C";
|
||||
$adif .= "SUBMODE";
|
||||
$adif .= "%3A";
|
||||
$adif .= strlen($qsl['COL_SUBMODE']);
|
||||
$adif .= "%3E";
|
||||
$adif .= $qsl['COL_SUBMODE'];
|
||||
$adif .= "%20";
|
||||
|
||||
if(isset($qsl['COL_SUBMODE'])) {
|
||||
$adif .= "%3C";
|
||||
$adif .= "SUBMODE";
|
||||
$adif .= "%3A";
|
||||
$adif .= strlen($qsl['COL_SUBMODE']);
|
||||
$adif .= "%3E";
|
||||
$adif .= $qsl['COL_SUBMODE'];
|
||||
$adif .= "%20";
|
||||
}
|
||||
|
||||
$adif .= "%3C";
|
||||
|
|
@ -392,9 +376,9 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3E";
|
||||
$adif .= $qsl['COL_BAND'];
|
||||
$adif .= "%20";
|
||||
|
||||
|
||||
# End all the required fields
|
||||
|
||||
|
||||
// adding RST_Sent
|
||||
$adif .= "%3C";
|
||||
$adif .= "RST%5FSENT";
|
||||
|
|
@ -405,7 +389,7 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%20";
|
||||
|
||||
// adding prop mode if it isn't blank
|
||||
if ($qsl['COL_PROP_MODE']) {
|
||||
if ($qsl['COL_PROP_MODE']){
|
||||
$adif .= "%3C";
|
||||
$adif .= "PROP%5FMODE";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -416,7 +400,7 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
|
||||
// adding sat name if it isn't blank
|
||||
if ($qsl['COL_SAT_NAME'] != '') {
|
||||
if ($qsl['COL_SAT_NAME'] != ''){
|
||||
$adif .= "%3C";
|
||||
$adif .= "SAT%5FNAME";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -427,7 +411,7 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
|
||||
// adding sat mode if it isn't blank
|
||||
if ($qsl['COL_SAT_MODE'] != '') {
|
||||
if ($qsl['COL_SAT_MODE'] != ''){
|
||||
$adif .= "%3C";
|
||||
$adif .= "SAT%5FMODE";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -438,18 +422,18 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
|
||||
// adding qslmsg if it isn't blank
|
||||
if ($qsl['COL_QSLMSG'] != '') {
|
||||
$qsl['COL_QSLMSG'] = str_replace(array(chr(10), chr(13)), array(' ', ' '), $qsl['COL_QSLMSG']);
|
||||
if ($qsl['COL_QSLMSG'] != ''){
|
||||
$qsl['COL_QSLMSG'] = str_replace(array(chr(10),chr(13)),array(' ',' '),$qsl['COL_QSLMSG']);
|
||||
$adif .= "%3C";
|
||||
$adif .= "QSLMSG";
|
||||
$adif .= "%3A";
|
||||
$adif .= strlen($qsl['COL_QSLMSG']);
|
||||
$adif .= "%3E";
|
||||
$adif .= str_replace('&', '%26', $qsl['COL_QSLMSG']);
|
||||
$adif .= str_replace('&','%26',$qsl['COL_QSLMSG']);
|
||||
$adif .= "%20";
|
||||
}
|
||||
|
||||
if ($qsl['eqslqthnickname'] != '') {
|
||||
if ($qsl['eqslqthnickname'] != ''){
|
||||
$adif .= "%3C";
|
||||
$adif .= "APP%5FEQSL%5FQTH%5FNICKNAME";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -460,7 +444,7 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
|
||||
// adding sat mode if it isn't blank
|
||||
if ($qsl['station_gridsquare'] != '') {
|
||||
if ($qsl['station_gridsquare'] != ''){
|
||||
$adif .= "%3C";
|
||||
$adif .= "MY%5FGRIDSQUARE";
|
||||
$adif .= "%3A";
|
||||
|
|
@ -474,41 +458,41 @@ class eqsl extends CI_Controller
|
|||
$adif .= "%3C";
|
||||
$adif .= "EOR";
|
||||
$adif .= "%3E";
|
||||
|
||||
|
||||
# Make sure we don't have any spaces
|
||||
$adif = str_replace(" ", '%20', $adif);
|
||||
|
||||
return $adif;
|
||||
}
|
||||
|
||||
function writeEqslNotSent($qslsnotsent, $custom_date_format)
|
||||
{
|
||||
function writeEqslNotSent($qslsnotsent, $custom_date_format) {
|
||||
$table = '<table = style="width:100%" class="table-sm table qsotable table-bordered table-hover table-striped table-condensed text-center">';
|
||||
$table .= "<thead><tr class=\"titles\">";
|
||||
$table .= "<th>Date</th>";
|
||||
$table .= "<th>Time</th>";
|
||||
$table .= "<th>Call</th>";
|
||||
$table .= "<th>Mode</th>";
|
||||
$table .= "<th>Submode</th>";
|
||||
$table .= "<th>Band</th>";
|
||||
$table .= "<th>eQSL QTH Nickname</th>";
|
||||
$table .= "</tr></thead><tbody>";
|
||||
|
||||
foreach ($qslsnotsent as $qsl) {
|
||||
$table .= "<thead><tr class=\"titles\">";
|
||||
$table .= "<th>Date</th>";
|
||||
$table .= "<th>Time</th>";
|
||||
$table .= "<th>Call</th>";
|
||||
$table .= "<th>Mode</th>";
|
||||
$table .= "<th>Submode</th>";
|
||||
$table .= "<th>Band</th>";
|
||||
$table .= "<th>eQSL QTH Nickname</th>";
|
||||
$table .= "</tr></thead><tbody>";
|
||||
|
||||
foreach ($qslsnotsent as $qsl)
|
||||
{
|
||||
$table .= "<tr>";
|
||||
$timestamp = strtotime($qsl['COL_TIME_ON']);
|
||||
$table .= "<td>" . date($custom_date_format, $timestamp) . "</td>";
|
||||
$table .= "<td>" . date('H:i', $timestamp) . "</td>";
|
||||
$table .= "<td><a href=\"javascript:displayQso(" . $qsl['COL_PRIMARY_KEY'] . ")\">" . str_replace("0", "Ø", strtoupper($qsl['COL_CALL'])) . "</a></td>";
|
||||
$table .= "<td>" . $qsl['COL_MODE'] . "</td>";
|
||||
|
||||
if (isset($qsl['COL_SUBMODE'])) {
|
||||
$table .= "<td>" . $qsl['COL_SUBMODE'] . "</td>";
|
||||
} else {
|
||||
$table .= "<td></td>";
|
||||
}
|
||||
$table .= "<td>" . $qsl['COL_BAND'] . "</td>";
|
||||
$table .= "<td>" . $qsl['eqslqthnickname'] . "</td>";
|
||||
$timestamp = strtotime($qsl['COL_TIME_ON']);
|
||||
$table .= "<td>".date($custom_date_format, $timestamp)."</td>";
|
||||
$table .= "<td>".date('H:i', $timestamp)."</td>";
|
||||
$table .= "<td><a href=\"javascript:displayQso(" . $qsl['COL_PRIMARY_KEY'] . ")\">" . str_replace("0","Ø",strtoupper($qsl['COL_CALL'])) . "</a></td>";
|
||||
$table .= "<td>".$qsl['COL_MODE']."</td>";
|
||||
|
||||
if(isset($qsl['COL_SUBMODE'])) {
|
||||
$table .= "<td>".$qsl['COL_SUBMODE']."</td>";
|
||||
} else {
|
||||
$table .= "<td></td>";
|
||||
}
|
||||
$table .= "<td>".$qsl['COL_BAND']."</td>";
|
||||
$table .= "<td>".$qsl['eqslqthnickname']."</td>";
|
||||
$table .= "</tr>";
|
||||
}
|
||||
$table .= "</tbody></table>";
|
||||
|
|
@ -516,12 +500,11 @@ class eqsl extends CI_Controller
|
|||
return $table;
|
||||
}
|
||||
|
||||
function image($id)
|
||||
{
|
||||
function image($id) {
|
||||
$this->load->library('electronicqsl');
|
||||
$this->load->model('Eqsl_images');
|
||||
|
||||
if ($this->Eqsl_images->get_image($id) == "No Image") {
|
||||
if($this->Eqsl_images->get_image($id) == "No Image") {
|
||||
$this->load->model('logbook_model');
|
||||
$this->load->model('user_model');
|
||||
$qso_query = $this->logbook_model->get_qso($id);
|
||||
|
|
@ -549,33 +532,34 @@ class eqsl extends CI_Controller
|
|||
$dom->preserveWhiteSpace = false;
|
||||
$images = $dom->getElementsByTagName('img');
|
||||
|
||||
if (!isset($images) || count($images) == 0) {
|
||||
if(!isset($images) || count($images) == 0) {
|
||||
echo "Rate Limited";
|
||||
exit;
|
||||
}
|
||||
|
||||
foreach ($images as $image) {
|
||||
foreach ($images as $image)
|
||||
{
|
||||
header('Content-Type: image/jpg');
|
||||
$content = file_get_contents("https://www.eqsl.cc" . $image->getAttribute('src'));
|
||||
$content = file_get_contents("https://www.eqsl.cc".$image->getAttribute('src'));
|
||||
if ($content === false) {
|
||||
echo "No response";
|
||||
exit;
|
||||
}
|
||||
echo $content;
|
||||
$filename = uniqid() . '.jpg';
|
||||
if (file_put_contents('images/eqsl_card_images/' . '/' . $filename, $content) !== false) {
|
||||
$filename = uniqid().'.jpg';
|
||||
if (file_put_contents('images/eqsl_card_images/' . '/'.$filename, $content) !== false) {
|
||||
$this->Eqsl_images->save_image($id, $filename);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
header('Content-Type: image/jpg');
|
||||
$image_url = base_url('images/eqsl_card_images/' . $this->Eqsl_images->get_image($id));
|
||||
$image_url = base_url('images/eqsl_card_images/'.$this->Eqsl_images->get_image($id));
|
||||
header('Location: ' . $image_url);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function bulk_download_image($id)
|
||||
{
|
||||
function bulk_download_image($id) {
|
||||
$this->load->library('electronicqsl');
|
||||
$this->load->model('Eqsl_images');
|
||||
|
||||
|
|
@ -611,33 +595,31 @@ class eqsl extends CI_Controller
|
|||
$dom->preserveWhiteSpace = false;
|
||||
$images = $dom->getElementsByTagName('img');
|
||||
|
||||
if (!isset($images) || count($images) == 0) {
|
||||
if(!isset($images) || count($images) == 0) {
|
||||
$error = "Rate Limited";
|
||||
return $error;
|
||||
}
|
||||
|
||||
foreach ($images as $image) {
|
||||
$content = file_get_contents("https://www.eqsl.cc" . $image->getAttribute('src'));
|
||||
foreach ($images as $image)
|
||||
{
|
||||
$content = file_get_contents("https://www.eqsl.cc".$image->getAttribute('src'));
|
||||
if ($content === false) {
|
||||
$error = "No response";
|
||||
return $error;
|
||||
}
|
||||
$filename = uniqid() . '.jpg';
|
||||
if (file_put_contents('images/eqsl_card_images/' . '/' . $filename, $content) !== false) {
|
||||
$filename = uniqid().'.jpg';
|
||||
if (file_put_contents('images/eqsl_card_images/' . '/'.$filename, $content) !== false) {
|
||||
$this->Eqsl_images->save_image($id, $filename);
|
||||
}
|
||||
}
|
||||
return $error;
|
||||
|
||||
}
|
||||
|
||||
public function tools()
|
||||
{
|
||||
public function tools() {
|
||||
// Check logged in
|
||||
$this->load->model('user_model');
|
||||
if (!$this->user_model->authorize(2)) {
|
||||
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
|
||||
redirect('dashboard');
|
||||
}
|
||||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
|
||||
$data['page_title'] = "eQSL Tools";
|
||||
|
||||
|
|
@ -647,15 +629,11 @@ class eqsl extends CI_Controller
|
|||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
|
||||
public function download()
|
||||
{
|
||||
public function download() {
|
||||
// Check logged in
|
||||
$this->load->model('user_model');
|
||||
if (!$this->user_model->authorize(2)) {
|
||||
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
|
||||
redirect('dashboard');
|
||||
}
|
||||
$errors = 0;
|
||||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
$errors=0;
|
||||
|
||||
if ($this->input->post('eqsldownload') == 'download') {
|
||||
$i = 0;
|
||||
|
|
@ -687,7 +665,7 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
}
|
||||
$data['eqsl_results'] = $eqsl_results;
|
||||
$data['eqsl_stats'] = "Successfully downloaded: " . $i . " / Errors: " . count($eqsl_results);
|
||||
$data['eqsl_stats'] = "Successfully downloaded: ".$i." / Errors: ".count($eqsl_results);
|
||||
$data['page_title'] = "eQSL Download Information";
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
|
|
@ -707,15 +685,11 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
}
|
||||
|
||||
public function mark_all_sent()
|
||||
{
|
||||
public function mark_all_sent() {
|
||||
// Check logged in
|
||||
$this->load->model('user_model');
|
||||
if (!$this->user_model->authorize(2)) {
|
||||
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!');
|
||||
redirect('dashboard');
|
||||
}
|
||||
|
||||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
|
||||
// mark all eqsls as sent
|
||||
$this->load->model('eqslmethods_model');
|
||||
$this->eqslmethods_model->mark_all_as_sent();
|
||||
|
|
@ -728,8 +702,7 @@ class eqsl extends CI_Controller
|
|||
/*
|
||||
* Used for CRON job
|
||||
*/
|
||||
public function sync()
|
||||
{
|
||||
public function sync() {
|
||||
ini_set('memory_limit', '-1');
|
||||
set_time_limit(0);
|
||||
$this->load->model('eqslmethods_model');
|
||||
|
|
@ -742,8 +715,7 @@ class eqsl extends CI_Controller
|
|||
}
|
||||
}
|
||||
|
||||
public function downloadUser($userid, $username, $password)
|
||||
{
|
||||
public function downloadUser($userid, $username, $password) {
|
||||
$this->load->library('EqslImporter');
|
||||
$this->load->model('eqslmethods_model');
|
||||
|
||||
|
|
@ -756,27 +728,70 @@ class eqsl extends CI_Controller
|
|||
$this->eqslimporter->from_callsign_and_QTH(
|
||||
$eqsl_location['station_callsign'],
|
||||
$eqsl_location['eqslqthnickname'],
|
||||
$config['upload_path'],
|
||||
$eqsl_location['station_id']
|
||||
$config['upload_path']
|
||||
);
|
||||
|
||||
$eqsl_results[] = $this->eqslimporter->fetch($password);
|
||||
}
|
||||
}
|
||||
|
||||
function uploadUser($userid, $username, $password)
|
||||
{
|
||||
function uploadUser($userid, $username, $password) {
|
||||
$data['user_eqsl_name'] = $this->security->xss_clean($username);
|
||||
$data['user_eqsl_password'] = $this->security->xss_clean($password);
|
||||
$clean_userid = $this->security->xss_clean($userid);
|
||||
|
||||
|
||||
$qslsnotsent = $this->eqslmethods_model->eqsl_not_yet_sent($clean_userid);
|
||||
|
||||
foreach ($qslsnotsent->result_array() as $qsl) {
|
||||
$data['user_eqsl_name'] = $qsl['station_callsign'];
|
||||
$adif = $this->generateAdif($qsl, $data);
|
||||
|
||||
|
||||
$status = $this->uploadQso($adif, $qsl);
|
||||
}
|
||||
}
|
||||
|
||||
// Functions for storage, these need shifted to a libary to use across Cloudlog
|
||||
function folderSize($dir){
|
||||
$count_size = 0;
|
||||
$count = 0;
|
||||
$dir_array = scandir($dir);
|
||||
foreach($dir_array as $key=>$filename){
|
||||
if($filename!=".." && $filename!="."){
|
||||
if(is_dir($dir."/".$filename)){
|
||||
$new_foldersize = $this->foldersize($dir."/".$filename);
|
||||
$count_size = $count_size+ $new_foldersize;
|
||||
}else if(is_file($dir."/".$filename)){
|
||||
$count_size = $count_size + filesize($dir."/".$filename);
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $count_size;
|
||||
}
|
||||
|
||||
function sizeFormat($bytes){
|
||||
$kb = 1024;
|
||||
$mb = $kb * 1024;
|
||||
$gb = $mb * 1024;
|
||||
$tb = $gb * 1024;
|
||||
|
||||
if (($bytes >= 0) && ($bytes < $kb)) {
|
||||
return $bytes . ' B';
|
||||
|
||||
} elseif (($bytes >= $kb) && ($bytes < $mb)) {
|
||||
return ceil($bytes / $kb) . ' KB';
|
||||
|
||||
} elseif (($bytes >= $mb) && ($bytes < $gb)) {
|
||||
return ceil($bytes / $mb) . ' MB';
|
||||
|
||||
} elseif (($bytes >= $gb) && ($bytes < $tb)) {
|
||||
return ceil($bytes / $gb) . ' GB';
|
||||
|
||||
} elseif ($bytes >= $tb) {
|
||||
return ceil($bytes / $tb) . ' TB';
|
||||
} else {
|
||||
return $bytes . ' B';
|
||||
}
|
||||
}
|
||||
|
||||
} // end class
|
||||
|
|
|
|||
|
|
@ -76,7 +76,9 @@ class Gridmap extends CI_Controller {
|
|||
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));
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
$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)){
|
||||
|
|
@ -87,8 +89,10 @@ class Gridmap extends CI_Controller {
|
|||
array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
|
||||
}
|
||||
|
||||
if(!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)){
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
if(!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)){
|
||||
array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -100,7 +104,9 @@ class Gridmap extends CI_Controller {
|
|||
|
||||
$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));
|
||||
if ($this->config->item('map_6digit_grids')) {
|
||||
$grid_six = strtoupper(substr($row->GRID_SQUARES,0,6));
|
||||
}
|
||||
|
||||
// Check if 2 Char is in array
|
||||
if(!in_array($grid_two, $array_grid_2char)){
|
||||
|
|
@ -110,11 +116,12 @@ class Gridmap extends CI_Controller {
|
|||
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);
|
||||
}
|
||||
|
||||
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($band, $mode, $qsl, $lotw, $eqsl, $qrz, $sat);
|
||||
|
|
|
|||
|
|
@ -1,39 +0,0 @@
|
|||
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Information extends CI_Controller
|
||||
{
|
||||
|
||||
public function welcome()
|
||||
{
|
||||
$this->load->model('user_model');
|
||||
// Make sure users logged in
|
||||
if ($this->user_model->validate_session() == 0) {
|
||||
// user is not logged in
|
||||
redirect('user/login');
|
||||
}
|
||||
$this->load->model('logbooks_model');
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
|
||||
|
||||
echo "welcome to cloudlog";
|
||||
|
||||
// check if user has any station logbooks
|
||||
|
||||
// if user has no logbooks create a General Logbook
|
||||
|
||||
// If logbooks_locations_array is empty
|
||||
if (empty($logbooks_locations_array)) {
|
||||
// user has no locations
|
||||
echo "You have no locations, please add one to continue.";
|
||||
}
|
||||
|
||||
// Check if they have provided a valid grid locator
|
||||
|
||||
// Check if Callbook information is provided
|
||||
|
||||
// Check country files are present
|
||||
|
||||
// Information about Cloudlog Aurora
|
||||
|
||||
// If all is present welcome the user and redirect to the dashboard
|
||||
}
|
||||
}
|
||||
|
|
@ -135,11 +135,10 @@ class Labels extends CI_Controller {
|
|||
$offset = xss_clean($this->input->post('startat'));
|
||||
$grid = $this->input->post('grid') === "true" ? 1 : 0;
|
||||
$via = $this->input->post('via') === "true" ? 1 : 0;
|
||||
$awards = $this->input->post('awards') === "true" ? 1 : 0;
|
||||
$this->load->model('labels_model');
|
||||
$result = $this->labels_model->export_printrequestedids($ids);
|
||||
|
||||
$this->prepareLabel($result, true, $offset, $grid, $via, $awards);
|
||||
$this->prepareLabel($result, true, $offset, $grid, $via);
|
||||
}
|
||||
|
||||
public function print($station_id) {
|
||||
|
|
@ -147,19 +146,18 @@ class Labels extends CI_Controller {
|
|||
$offset = xss_clean($this->input->post('startat'));
|
||||
$grid = xss_clean($this->input->post('grid') ?? 0);
|
||||
$via = xss_clean($this->input->post('via') ?? 0);
|
||||
$awards = xss_clean($this->input->post('awards') ?? 0);
|
||||
$this->load->model('stations');
|
||||
if ($this->stations->check_station_is_accessible($station_id)) {
|
||||
$this->load->model('labels_model');
|
||||
$result = $this->labels_model->export_printrequested($clean_id);
|
||||
|
||||
$this->prepareLabel($result, false, $offset, $grid, $via, $awards);
|
||||
$this->prepareLabel($result, false, $offset, $grid, $via);
|
||||
} else {
|
||||
redirect('labels');
|
||||
}
|
||||
}
|
||||
|
||||
function prepareLabel($qsos, $jscall = false, $offset = 1, $grid = false, $via = false, $awards = false) {
|
||||
function prepareLabel($qsos, $jscall = false, $offset = 1, $grid = false, $via = false) {
|
||||
$this->load->model('labels_model');
|
||||
$label = $this->labels_model->getDefaultLabel();
|
||||
|
||||
|
|
@ -234,7 +232,11 @@ class Labels extends CI_Controller {
|
|||
}
|
||||
|
||||
if ($qsos->num_rows() > 0) {
|
||||
$this->makeMultiQsoLabel($qsos->result(), $pdf, $label->qsos, $offset, $ptype->orientation, $grid, $via, $awards);
|
||||
if ($label->qsos == 1) {
|
||||
$this->makeMultiQsoLabel($qsos->result(), $pdf, 1, $offset, $ptype->orientation, $grid, $via);
|
||||
} else {
|
||||
$this->makeMultiQsoLabel($qsos->result(), $pdf, $label->qsos, $offset, $ptype->orientation, $grid, $via);
|
||||
}
|
||||
} else {
|
||||
$this->session->set_flashdata('message', '0 QSOs found for print!');
|
||||
redirect('labels');
|
||||
|
|
@ -242,7 +244,7 @@ class Labels extends CI_Controller {
|
|||
$pdf->Output();
|
||||
}
|
||||
|
||||
function makeMultiQsoLabel($qsos, $pdf, $numberofqsos, $offset, $orientation, $grid, $via, $awards) {
|
||||
function makeMultiQsoLabel($qsos, $pdf, $numberofqsos, $offset, $orientation, $grid, $via) {
|
||||
$text = '';
|
||||
$current_callsign = '';
|
||||
$current_sat = '';
|
||||
|
|
@ -259,7 +261,7 @@ class Labels extends CI_Controller {
|
|||
( ($qso->COL_BAND_RX !== $current_sat_bandrx) && ($this->pretty_sat_mode($qso->COL_SAT_MODE) !== '')) ) {
|
||||
// ((($qso->COL_SAT_NAME ?? '' !== $current_sat) || ($qso->COL_CALL !== $current_callsign)) && ($qso->COL_SAT_NAME ?? '' !== '') && ($col->COL_BAND_RX ?? '' !== $current_sat_bandrx))) {
|
||||
if (!empty($qso_data)) {
|
||||
$this->finalizeData($pdf, $current_callsign, $qso_data, $numberofqsos, $orientation, $grid, $via, $awards);
|
||||
$this->finalizeData($pdf, $current_callsign, $qso_data, $numberofqsos, $orientation, $grid, $via);
|
||||
$qso_data = [];
|
||||
}
|
||||
$current_callsign = $qso->COL_CALL;
|
||||
|
|
@ -271,7 +273,7 @@ class Labels extends CI_Controller {
|
|||
$qso_data[] = [
|
||||
'time' => $qso->COL_TIME_ON,
|
||||
'band' => $qso->COL_BAND,
|
||||
'mode' => (($qso->COL_SUBMODE ?? '') == '') ? $qso->COL_MODE : $qso->COL_SUBMODE,
|
||||
'mode' => $qso->COL_MODE,
|
||||
'rst' => $qso->COL_RST_SENT,
|
||||
'mygrid' => $qso->station_gridsquare,
|
||||
'via' => $qso->COL_QSL_VIA,
|
||||
|
|
@ -279,46 +281,19 @@ class Labels extends CI_Controller {
|
|||
'sat_mode' => $this->pretty_sat_mode($qso->COL_SAT_MODE ?? ''),
|
||||
'sat_band_rx' => ($qso->COL_BAND_RX ?? ''),
|
||||
'qsl_recvd' => $qso->COL_QSL_RCVD,
|
||||
'mycall' => $qso->COL_STATION_CALLSIGN,
|
||||
'awards' => $this->stationAwardsList($qso)
|
||||
'mycall' => $qso->COL_STATION_CALLSIGN
|
||||
];
|
||||
}
|
||||
if (!empty($qso_data)) {
|
||||
$this->finalizeData($pdf, $current_callsign, $qso_data, $numberofqsos, $orientation, $grid, $via, $awards);
|
||||
$this->finalizeData($pdf, $current_callsign, $qso_data, $numberofqsos, $orientation, $grid, $via);
|
||||
}
|
||||
}
|
||||
|
||||
function stationAwardsList($station_profile) {
|
||||
$awards = "";
|
||||
if (trim($station_profile->station_iota) !== '') {
|
||||
$awards .= "IOTA:" . $station_profile->station_iota . " ";
|
||||
}
|
||||
|
||||
if (trim($station_profile->station_sota) !== '') {
|
||||
$awards .= "SOTA:" . $station_profile->station_sota . " ";
|
||||
}
|
||||
|
||||
if (trim($station_profile->station_wwff) !== '') {
|
||||
$awards .= "WWFF:" . $station_profile->station_wwff . " ";
|
||||
}
|
||||
|
||||
if (trim($station_profile->station_pota) !== '') {
|
||||
$awards .= "POTA:" . $station_profile->station_pota . " ";
|
||||
}
|
||||
|
||||
if (trim($station_profile->station_sig) !== '' && trim($station_profile->station_sig_info) !== '') {
|
||||
$awards .= $station_profile->station_sig . ":" . $station_profile->station_sig_info;
|
||||
}
|
||||
|
||||
return $awards;
|
||||
}
|
||||
|
||||
// New begin
|
||||
function pretty_sat_mode($sat_mode) {
|
||||
return(strlen($sat_mode ?? '') == 2 ? (strtoupper($sat_mode[0]).'/'.strtoupper($sat_mode[1])) : strtoupper($sat_mode ?? ''));
|
||||
}
|
||||
|
||||
function finalizeData($pdf, $current_callsign, &$preliminaryData, $qso_per_label,$orientation, $grid, $via, $awards) {
|
||||
function finalizeData($pdf, $current_callsign, &$preliminaryData, $qso_per_label,$orientation, $grid, $via) {
|
||||
|
||||
$tableData = [];
|
||||
$count_qso = 0;
|
||||
|
|
@ -338,7 +313,7 @@ class Labels extends CI_Controller {
|
|||
|
||||
|
||||
if($count_qso == $qso_per_label){
|
||||
$this->generateLabel($pdf, $current_callsign, $tableData,$count_qso,$qso,$orientation, $grid, $via, $awards);
|
||||
$this->generateLabel($pdf, $current_callsign, $tableData,$count_qso,$qso,$orientation, $grid, $via);
|
||||
$tableData = []; // reset the data
|
||||
$count_qso = 0; // reset the counter
|
||||
}
|
||||
|
|
@ -346,12 +321,12 @@ class Labels extends CI_Controller {
|
|||
}
|
||||
// generate label for remaining QSOs
|
||||
if($count_qso > 0){
|
||||
$this->generateLabel($pdf, $current_callsign, $tableData,$count_qso,$qso,$orientation, $grid, $via, $awards);
|
||||
$this->generateLabel($pdf, $current_callsign, $tableData,$count_qso,$qso,$orientation, $grid, $via);
|
||||
$preliminaryData = []; // reset the data
|
||||
}
|
||||
}
|
||||
|
||||
function generateLabel($pdf, $current_callsign, $tableData,$numofqsos,$qso,$orientation,$grid=true, $via=false, $awards=false){
|
||||
function generateLabel($pdf, $current_callsign, $tableData,$numofqsos,$qso,$orientation,$grid=true, $via=false){
|
||||
$builder = new \AsciiTable\Builder();
|
||||
$builder->addRows($tableData);
|
||||
$text = "Confirming QSO".($numofqsos>1 ? 's' : '')." with ";
|
||||
|
|
@ -372,7 +347,6 @@ class Labels extends CI_Controller {
|
|||
}
|
||||
$text.="\n";
|
||||
if ($grid) { $text .= "My call: ".$qso['mycall']." Grid: ".$qso['mygrid']."\n"; }
|
||||
if ($awards) { $text .= $qso['awards']."\n"; }
|
||||
$text .= "Thanks for the QSO".($numofqsos>1 ? 's' : '');
|
||||
$text .= " | ".($qso['qsl_recvd'] == 'Y' ? 'TNX' : 'PSE')." QSL";
|
||||
$pdf->Add_Label($text,$orientation);
|
||||
|
|
|
|||
文件差异内容过多而无法显示
加载差异
|
|
@ -131,18 +131,8 @@ class Logbooks extends CI_Controller {
|
|||
|
||||
public function save_publicsearch() {
|
||||
$this->load->model('logbooks_model');
|
||||
// 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>";
|
||||
$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>";
|
||||
}
|
||||
|
||||
public function save_publicslug() {
|
||||
|
|
|
|||
|
|
@ -17,6 +17,28 @@ class Lookup extends CI_Controller {
|
|||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
}
|
||||
|
||||
public function membership($callsign) {
|
||||
$this->load->library('MembershipList');
|
||||
$data['results'] = $this->membershiplist->searchFilesForCallsign($callsign);
|
||||
|
||||
print_r($data['results']);
|
||||
|
||||
foreach ($data['results'] as $key => $value) {
|
||||
echo "Key: " . $key . "\n";
|
||||
foreach ($value as $subKey => $subValue) {
|
||||
echo "Sub-key: " . $subKey . "\n";
|
||||
if (is_array($subValue)) {
|
||||
foreach ($subValue as $innerKey => $innerValue) {
|
||||
echo "Inner key: " . $innerKey . "\n";
|
||||
echo "Inner value: " . $innerValue . "\n";
|
||||
}
|
||||
} else {
|
||||
echo "Sub-value: " . $subValue . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$data['page_title'] = "Quick Lookup";
|
||||
|
|
|
|||
|
|
@ -297,13 +297,23 @@ class Lotw extends CI_Controller {
|
|||
//Tell cURL to return the output as a string.
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
|
||||
//Use the recommended way, creating a CURLFile object.
|
||||
$uploadfile = curl_file_create($filePath);
|
||||
$uploadfile->setPostFilename(basename($filePath));
|
||||
//If the function curl_file_create exists
|
||||
if(function_exists('curl_file_create')){
|
||||
//Use the recommended way, creating a CURLFile object.
|
||||
$filePath = curl_file_create($filePath);
|
||||
} else{
|
||||
//Otherwise, do it the old way.
|
||||
//Get the canonicalized pathname of our file and prepend
|
||||
//the @ character.
|
||||
$filePath = '@' . realpath($filePath);
|
||||
//Turn off SAFE UPLOAD so that it accepts files
|
||||
//starting with an @
|
||||
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
|
||||
}
|
||||
|
||||
//Setup our POST fields
|
||||
$postFields = array(
|
||||
$uploadFieldName => $uploadfile
|
||||
$uploadFieldName => $filePath
|
||||
);
|
||||
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
|
||||
|
|
@ -315,12 +325,9 @@ class Lotw extends CI_Controller {
|
|||
//with the error message.
|
||||
if(curl_errno($ch)){
|
||||
throw new Exception(curl_error($ch));
|
||||
|
||||
// Upload of TQ8 Failed for unknown reason
|
||||
echo $station_profile->station_callsign." (".$station_profile->station_profile_name.") Upload Failed"."<br>";
|
||||
}
|
||||
|
||||
$pos = strpos($result, "<!-- .UPL. accepted -->");
|
||||
$pos = strpos($result, "<!-- .UPL. accepted -->");
|
||||
|
||||
if ($pos === false) {
|
||||
// Upload of TQ8 Failed for unknown reason
|
||||
|
|
@ -378,31 +385,6 @@ 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/');
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -985,7 +967,7 @@ class Lotw extends CI_Controller {
|
|||
openssl_free_key($pkeyid);
|
||||
}
|
||||
$signature_b64 = base64_encode($signature);
|
||||
return $signature_b64."\n";
|
||||
return $signature_b64;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1018,9 +1000,6 @@ class Lotw extends CI_Controller {
|
|||
"TEVEL7" => "TEVEL-7",
|
||||
"TEVEL8" => "TEVEL-8",
|
||||
"INSPR7" => "INSPIRE-SAT 7",
|
||||
"SONATE" => "SONATE-2",
|
||||
'AO-123' => "ASRTU-1",
|
||||
'TEV2-3' => "TEVEL2-3",
|
||||
);
|
||||
|
||||
return array_search(strtoupper($satname),$arr,true);
|
||||
|
|
@ -1035,9 +1014,6 @@ class Lotw extends CI_Controller {
|
|||
case "QC":
|
||||
return "PQ";
|
||||
break;
|
||||
case "NL":
|
||||
return "NF";
|
||||
break;
|
||||
default:
|
||||
return $ca_prov;
|
||||
endswitch;
|
||||
|
|
@ -1070,33 +1046,6 @@ class Lotw extends CI_Controller {
|
|||
} elseif ($submode == "Q65") {
|
||||
return "Q65";
|
||||
break;
|
||||
} elseif ($submode == "FSQCALL") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "JS8") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "MFSK11") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "MFSK128") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "MFSK22") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "MFSK31") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "MFSK32") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "MFSK4") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "MFSK64") {
|
||||
return "DATA";
|
||||
break;
|
||||
} else {
|
||||
return "DATA";
|
||||
break;
|
||||
|
|
@ -1127,7 +1076,7 @@ class Lotw extends CI_Controller {
|
|||
return "PSK125";
|
||||
break;
|
||||
} elseif ($submode == "PSK500") {
|
||||
return "DATA";
|
||||
return "PSK500";
|
||||
break;
|
||||
} elseif ($submode == "PSK63F") {
|
||||
return "PSK63F";
|
||||
|
|
@ -1156,325 +1105,10 @@ class Lotw extends CI_Controller {
|
|||
} elseif ($submode == "PSK2K") {
|
||||
return "PSK2K";
|
||||
break;
|
||||
} elseif ($submode == "PSK1000") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "PSK250") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "QPSK250") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "QPSK500") {
|
||||
return "DATA";
|
||||
break;
|
||||
} elseif ($submode == "SIM31") {
|
||||
return "DATA";
|
||||
break;
|
||||
} else {
|
||||
return "DATA";
|
||||
break;
|
||||
}
|
||||
case "JT65":
|
||||
if ($submode == "JT65A") {
|
||||
return "JT65";
|
||||
break;
|
||||
} elseif ($submode == "JT65B") {
|
||||
return "JT65";
|
||||
break;
|
||||
} elseif ($submode == "JT65B2") {
|
||||
return "JT65";
|
||||
break;
|
||||
} elseif ($submode == "JT65C") {
|
||||
return "JT65";
|
||||
break;
|
||||
} elseif ($submode == "JT65C2") {
|
||||
return "JT65";
|
||||
break;
|
||||
} else {
|
||||
return "JT65";
|
||||
break;
|
||||
}
|
||||
case "JT4":
|
||||
if ($submode == "JT4A") {
|
||||
return "JT4";
|
||||
break;
|
||||
} elseif ($submode == "JT4B") {
|
||||
return "JT4";
|
||||
break;
|
||||
} elseif ($submode == "JT4C") {
|
||||
return "JT4";
|
||||
break;
|
||||
} elseif ($submode == "JT4D") {
|
||||
return "JT4";
|
||||
break;
|
||||
} elseif ($submode == "JT4E") {
|
||||
return "JT4";
|
||||
break;
|
||||
} elseif ($submode == "JT4F") {
|
||||
return "JT4";
|
||||
break;
|
||||
} elseif ($submode == "JT4G") {
|
||||
return "JT4";
|
||||
break;
|
||||
} else {
|
||||
return "JT4";
|
||||
break;
|
||||
}
|
||||
case "JT9":
|
||||
if ($submode == "JT9-1") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9-10") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9-2") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9-30") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9-5") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9A") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9B") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9C") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9D") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9E") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9E FAST") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9F") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9F FAST") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9G") {
|
||||
return "JT9G";
|
||||
break;
|
||||
} elseif ($submode == "JT9G FAST") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9H") {
|
||||
return "JT9";
|
||||
break;
|
||||
} elseif ($submode == "JT9H FAST") {
|
||||
return "JT9";
|
||||
break;
|
||||
} else {
|
||||
return "JT9";
|
||||
break;
|
||||
}
|
||||
case "QRA64":
|
||||
if ($submode == "QRA64A") {
|
||||
return "QRA64";
|
||||
break;
|
||||
} elseif ($submode == "QRA64B") {
|
||||
return "QRA64";
|
||||
break;
|
||||
} elseif ($submode == "QRA64C") {
|
||||
return "QRA64";
|
||||
break;
|
||||
} elseif ($submode == "QRA64D") {
|
||||
return "QRA64";
|
||||
break;
|
||||
} elseif ($submode == "QRA64E") {
|
||||
return "QRA64";
|
||||
break;
|
||||
} else {
|
||||
return "QRA64";
|
||||
break;
|
||||
}
|
||||
case "ISCAT":
|
||||
if ($submode == "ISCAT-A") {
|
||||
return "ISCAT";
|
||||
break;
|
||||
} elseif ($submode == "ISCAT-B") {
|
||||
return "ISCAT";
|
||||
break;
|
||||
} else {
|
||||
return "ISCAT";
|
||||
break;
|
||||
}
|
||||
case "OLIVIA":
|
||||
if ($submode == "OLIVIA 16/1000") {
|
||||
return "OLIVIA";
|
||||
break;
|
||||
} elseif ($submode == "OLIVIA 16/500") {
|
||||
return "OLIVIA";
|
||||
break;
|
||||
} elseif ($submode == "OLIVIA 32/1000") {
|
||||
return "OLIVIA";
|
||||
break;
|
||||
} elseif ($submode == "OLIVIA 4/125") {
|
||||
return "OLIVIA";
|
||||
break;
|
||||
} elseif ($submode == "OLIVIA 4/250") {
|
||||
return "OLIVIA";
|
||||
break;
|
||||
} elseif ($submode == "OLIVIA 8/250") {
|
||||
return "OLIVIA";
|
||||
break;
|
||||
} elseif ($submode == "OLIVIA 8/500") {
|
||||
return "OLIVIA";
|
||||
break;
|
||||
} else {
|
||||
return "OLIVIA";
|
||||
break;
|
||||
}
|
||||
case "OPERA":
|
||||
if ($submode == "OPERA-BEACON") {
|
||||
return "OPERA";
|
||||
break;
|
||||
} elseif ($submode == "OPERA-QSO") {
|
||||
return "OPERA";
|
||||
break;
|
||||
} else {
|
||||
return "OPERA";
|
||||
break;
|
||||
}
|
||||
case "ROS":
|
||||
if ($submode == "ROS-EME") {
|
||||
return "ROS";
|
||||
break;
|
||||
} elseif ($submode == "ROS-HF") {
|
||||
return "ROS";
|
||||
break;
|
||||
} elseif ($submode == "ROS-MF") {
|
||||
return "ROS";
|
||||
break;
|
||||
} else {
|
||||
return "ROS";
|
||||
break;
|
||||
}
|
||||
case "HELL":
|
||||
if ($submode == "FMHELL") {
|
||||
return "HELL";
|
||||
break;
|
||||
} elseif ($submode == "FSKHELL") {
|
||||
return "HELL";
|
||||
break;
|
||||
} elseif ($submode == "HELL80") {
|
||||
return "HELL";
|
||||
break;
|
||||
} elseif ($submode == "HFSK") {
|
||||
return "HFSK";
|
||||
break;
|
||||
} elseif ($submode == "PSKHELL") {
|
||||
return "HELL";
|
||||
break;
|
||||
} else {
|
||||
return "HELL";
|
||||
break;
|
||||
}
|
||||
case "DOMINO":
|
||||
if ($submode == "DOMINOEX") {
|
||||
return "DOMINO";
|
||||
break;
|
||||
} elseif ($submode == "DOMINOF") {
|
||||
return "DOMINO";
|
||||
break;
|
||||
} else {
|
||||
return "DOMINO";
|
||||
break;
|
||||
}
|
||||
case "CHIP":
|
||||
if ($submode == "CHIP128") {
|
||||
return "CHIP";
|
||||
break;
|
||||
} elseif ($submode == "CHIP64") {
|
||||
return "CHIP";
|
||||
break;
|
||||
} else {
|
||||
return "CHIP";
|
||||
break;
|
||||
}
|
||||
case "PAC":
|
||||
if ($submode == "PAC2") {
|
||||
return "PACTOR";
|
||||
break;
|
||||
} elseif ($submode == "PAC3") {
|
||||
return "PACTOR";
|
||||
break;
|
||||
} elseif ($submode == "PAC4") {
|
||||
return "PACTOR";
|
||||
break;
|
||||
} else {
|
||||
return "PACTOR";
|
||||
break;
|
||||
}
|
||||
case "PAX":
|
||||
if ($submode == "PAX2") {
|
||||
return "PAX";
|
||||
break;
|
||||
} else {
|
||||
return "PAX";
|
||||
break;
|
||||
}
|
||||
case "TOR":
|
||||
if ($submode == "AMTORFEC") {
|
||||
return "AMTOR";
|
||||
break;
|
||||
} elseif ($submode == "GTOR") {
|
||||
return "GTOR";
|
||||
break;
|
||||
} else {
|
||||
return "AMTOR";
|
||||
break;
|
||||
}
|
||||
case "THRB":
|
||||
if ($submode == "THRBX") {
|
||||
return "THROB";
|
||||
break;
|
||||
} else {
|
||||
return "THROB";
|
||||
break;
|
||||
}
|
||||
case "SSB":
|
||||
if ($submode == "LSB") {
|
||||
return "SSB";
|
||||
break;
|
||||
} elseif ($submode == "USB") {
|
||||
return "SSB";
|
||||
break;
|
||||
} else {
|
||||
return "SSB";
|
||||
break;
|
||||
}
|
||||
case "RTTY":
|
||||
if ($submode == "ASCI") {
|
||||
return "RTTY";
|
||||
break;
|
||||
} else {
|
||||
return "RTTY";
|
||||
break;
|
||||
}
|
||||
case "CW":
|
||||
if ($submode == "PCW") {
|
||||
return "CW";
|
||||
break;
|
||||
} else {
|
||||
return "CW";
|
||||
break;
|
||||
}
|
||||
case "CLO":
|
||||
return "CLOVER";
|
||||
break;
|
||||
case "V4":
|
||||
return "DATA";
|
||||
break;
|
||||
default:
|
||||
return $mode;
|
||||
endswitch;
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@ class Map extends CI_Controller {
|
|||
function custom()
|
||||
{
|
||||
$this->load->model('bands');
|
||||
$this->load->model('gridmap_model');
|
||||
$this->load->model('modes');
|
||||
|
||||
$data['worked_bands'] = $this->bands->get_worked_bands(); // Used in the view for band select
|
||||
$data['modes'] = $this->gridmap_model->get_worked_modes(); // Used in the view for mode select
|
||||
$data['worked_bands'] = $this->bands->get_worked_bands(); // Used in the view for band select
|
||||
$data['modes'] = $this->modes->active(); // Used in the view for mode select
|
||||
|
||||
if ($this->input->post('band') != NULL) { // Band is not set when page first loads.
|
||||
if ($this->input->post('band') == 'All') { // Did the user specify a band? If not, use all bands
|
||||
|
|
@ -80,30 +80,13 @@ class Map extends CI_Controller {
|
|||
$offset = (intval($this->input->post('offset'))>0)?xss_clean($this->input->post('offset')):null;
|
||||
$qsos = $this->logbook_model->get_qsos($nb_qso, $offset);
|
||||
}
|
||||
// [PLOT] ADD plot //
|
||||
$plot_array = $this->logbook_model->get_plot_array_for_map($qsos->result());
|
||||
// [MAP Custom] ADD Station //
|
||||
$station_array = $this->Stations->get_station_array_for_map();
|
||||
|
||||
if(empty($qsos)) {
|
||||
// Handle the case where $qsos is empty
|
||||
|
||||
// return json with error "No QSOs found"
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode(array('error' => 'No QSOs found'));
|
||||
} else {
|
||||
// Handle the case where $qsos is not empty
|
||||
// [PLOT] ADD plot //
|
||||
$plot_array = $this->logbook_model->get_plot_array_for_map($qsos->result());
|
||||
// [MAP Custom] ADD Station //
|
||||
$station_array = $this->Stations->get_station_array_for_map();
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode(array_merge($plot_array, $station_array));
|
||||
}
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode(array_merge($plot_array, $station_array));
|
||||
}
|
||||
|
||||
// Function to fetch the date of the oldest QSO in the log
|
||||
public function get_oldest_qso_date() {
|
||||
$this->load->model('logbook_model');
|
||||
$oldestQSOdate = $this->logbook_model->get_oldest_qso_date();
|
||||
echo $oldestQSOdate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,58 +0,0 @@
|
|||
<?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,42 +83,44 @@ 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) {
|
||||
$any_update_successful = TRUE;
|
||||
$this->session->set_flashdata('success', $this->lang->line('options_theme_changed_to').$this->input->post('theme'));
|
||||
}
|
||||
|
||||
// Update global search choice within the options system
|
||||
// Update theme 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) {
|
||||
$any_update_successful = TRUE;
|
||||
$this->session->set_flashdata('success', $this->lang->line('options_global_search_changed_to').$this->input->post('globalSearch'));
|
||||
}
|
||||
|
||||
// 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) {
|
||||
$any_update_successful = TRUE;
|
||||
$this->session->set_flashdata('success', $this->lang->line('options_dashboard_banner_changed_to').$this->input->post('dashboardBanner'));
|
||||
}
|
||||
|
||||
// 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) {
|
||||
$any_update_successful = TRUE;
|
||||
$this->session->set_flashdata('success', $this->lang->line('options_dashboard_map_changed_to').$this->input->post('dashboardMap'));
|
||||
}
|
||||
|
||||
// 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_status == TRUE) {
|
||||
$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'));
|
||||
// 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'));
|
||||
}
|
||||
|
||||
// Update Lang choice within the options system
|
||||
|
|
|
|||
|
|
@ -195,249 +195,89 @@ class Qrz extends CI_Controller {
|
|||
// Query the logbook to determine when the last LoTW confirmation was
|
||||
$qrz_last_date = null;
|
||||
}
|
||||
$this->download($this->session->userdata('user_id'),true);
|
||||
$this->download($this->session->userdata('user_id'),$qrz_last_date,true);
|
||||
} // end function
|
||||
|
||||
function download($user_id_to_load = null, $show_views = false) { // Remove $lastqrz parameter
|
||||
function download($user_id_to_load = null, $lastqrz = null, $show_views = false) {
|
||||
$this->load->model('user_model');
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
|
||||
$api_keys = $this->logbook_model->get_qrz_apikeys();
|
||||
$total_processed_count = 0; // Initialize total count here
|
||||
$data = []; // Initialize data array
|
||||
|
||||
if ($api_keys) {
|
||||
foreach ($api_keys as $station) {
|
||||
if ((($user_id_to_load != null) && ($user_id_to_load != $station->user_id))) { // Skip User if we're called with a specific user_id
|
||||
continue;
|
||||
}
|
||||
if ($lastqrz == null) {
|
||||
$lastqrz = $this->logbook_model->qrz_last_qsl_date($station->user_id);
|
||||
}
|
||||
|
||||
// Remove the block checking for $lastqrz == null and fetching the date
|
||||
$qrz_api_key = $station->qrzapikey;
|
||||
$result = $this->mass_download_qsos($qrz_api_key); // mass_download_qsos returns ['table_data' => ..., 'processed_count' => ...] or ['status' => 'error', 'message' => ...]
|
||||
|
||||
|
||||
if ($result !== false && isset($result['processed_count'])) {
|
||||
$total_processed_count += $result['processed_count']; // Accumulate count
|
||||
$table_data = $result['table_data'];
|
||||
|
||||
if (isset($table_data['tableheaders'])) {
|
||||
// Ensure headers are set only once
|
||||
if (!isset($data['tableheaders'])) {
|
||||
$data['tableheaders'] = $table_data['tableheaders'];
|
||||
}
|
||||
if (isset($table_data['table']) && $table_data['table'] != '') {
|
||||
if (isset($data['table'])) {
|
||||
$data['table'] .= $table_data['table'];
|
||||
} else {
|
||||
$data['table'] = $table_data['table'];
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (is_array($result) && isset($result['status']) && $result['status'] === 'error') {
|
||||
// Handle specific error structure returned by mass_download_qsos
|
||||
log_message('error', "Error during QRZ download for user_id: " . $station->user_id . ". Message: " . $result['message']);
|
||||
// Optionally echo error to user if $show_views is true, or add to $data['error']
|
||||
if ($show_views) {
|
||||
$data['errors'][] = "Error for user ID " . $station->user_id . ": " . $result['message'];
|
||||
}
|
||||
} else {
|
||||
// Catch-all for unexpected return values (like the old boolean false or other issues)
|
||||
log_message('error', "Unexpected error or empty result returned from mass_download_qsos for API key associated with user_id: " . $station->user_id);
|
||||
if ($show_views) {
|
||||
$data['errors'][] = "Unexpected error during download for user ID " . $station->user_id . ". Check system logs.";
|
||||
$result=($this->mass_download_qsos($qrz_api_key, $lastqrz));
|
||||
if (isset($result['tableheaders'])) {
|
||||
$data['tableheaders']=$result['tableheaders'];
|
||||
if (isset($data['table'])) {
|
||||
$data['table'].=$result['table'];
|
||||
} else {
|
||||
$data['table']=$result['table'];
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo "No station profiles with a QRZ API Key found.";
|
||||
log_message('error', "No station profiles with a QRZ API Key found.");
|
||||
// If no keys, we can exit early if showing views, or just let it fall through if not.
|
||||
if ($show_views) {
|
||||
$data['page_title'] = "QRZ ADIF Information";
|
||||
$data['error'] = "No station profiles with a QRZ API Key found.";
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('qrz/analysis', $data); // Assuming view can show $error
|
||||
$this->load->view('interface_assets/footer');
|
||||
return; // Stop further processing
|
||||
} else {
|
||||
return ''; // Return empty if not showing views and no keys found
|
||||
}
|
||||
}
|
||||
|
||||
$this->load->model('user_model');
|
||||
if ($this->user_model->authorize(2)) { // Only Output results if authorized User
|
||||
// Pass potential errors to the view
|
||||
if (isset($data['errors'])) {
|
||||
$view_data['errors'] = $data['errors'];
|
||||
}
|
||||
|
||||
$has_matches_to_display = (isset($data['tableheaders']) && isset($data['table']) && $data['table'] != '');
|
||||
$message = "Downloaded and processed " . $total_processed_count . " QSOs from QRZ.";
|
||||
|
||||
if ($has_matches_to_display) {
|
||||
$message .= " Matching QSOs found and updated.";
|
||||
if ($show_views == TRUE) {
|
||||
$view_data['tableheaders'] = $data['tableheaders'];
|
||||
$view_data['table'] = $data['table'] . '</table>';
|
||||
$view_data['page_title'] = "QRZ ADIF Information";
|
||||
$this->load->view('interface_assets/header', $view_data);
|
||||
$this->load->view('qrz/analysis', $view_data); // Pass $view_data containing table headers, rows, and errors
|
||||
if(isset($data['tableheaders'])) {
|
||||
if ($data['table'] != '') {
|
||||
$data['table'].='</table>';
|
||||
}
|
||||
if($show_views == TRUE) {
|
||||
$data['page_title'] = "QRZ ADIF Information";
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('qrz/analysis');
|
||||
$this->load->view('interface_assets/footer');
|
||||
} else {
|
||||
echo $message; // Echo message when not showing views but matches were found
|
||||
// Optionally echo errors if any occurred
|
||||
if (isset($data['errors'])) {
|
||||
echo " Errors encountered: " . implode("; ", $data['errors']);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
} else {
|
||||
// No matches found in the logbook
|
||||
$message .= " No matching QSOs found in your logbook to update.";
|
||||
if ($show_views == TRUE) {
|
||||
$view_data['page_title'] = "QRZ ADIF Information";
|
||||
$view_data['info_message'] = $message; // Pass the info message to the view
|
||||
// Errors are already in $view_data if they exist
|
||||
$this->load->view('interface_assets/header', $view_data);
|
||||
$this->load->view('qrz/analysis', $view_data); // Load view, assuming it checks for $info_message and $errors
|
||||
$this->load->view('interface_assets/footer');
|
||||
} else {
|
||||
echo $message; // Echo message when not showing views and no matches found
|
||||
// Optionally echo errors if any occurred
|
||||
if (isset($data['errors'])) {
|
||||
echo " Errors encountered: " . implode("; ", $data['errors']);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
echo "Downloaded QRZ report contains no matches.";
|
||||
}
|
||||
} // End authorize check
|
||||
}
|
||||
}
|
||||
|
||||
function mass_download_qsos($qrz_api_key = '', $trusted = false) { // Remove $lastqrz parameter
|
||||
function mass_download_qsos($qrz_api_key = '', $lastqrz = '1900-01-01', $trusted = false) {
|
||||
$config['upload_path'] = './uploads/';
|
||||
$file = $config['upload_path'] . 'qrzcom_download_report.adi';
|
||||
if (file_exists($file) && ! is_writable($file)) {
|
||||
// This part is fine - checks local file writability
|
||||
$error_message = "Temporary download file ".$file." is not writable. Aborting!";
|
||||
// Return the structured error array here too for consistency
|
||||
return ['status' => 'error', 'message' => $error_message];
|
||||
$result = "Temporary download file ".$file." is not writable. Aborting!";
|
||||
return false;
|
||||
}
|
||||
$url = 'https://logbook.qrz.com/api'; // Correct URL
|
||||
$url = 'http://logbook.qrz.com/api';
|
||||
|
||||
$post_data['KEY'] = $qrz_api_key; // Correct parameter
|
||||
$post_data['ACTION'] = 'FETCH'; // Correct parameter
|
||||
$post_data['OPTION'] = 'TYPE:ADIF'; // Correct parameter for fetching all confirmed in ADIF
|
||||
$post_data['KEY'] = $qrz_api_key;
|
||||
$post_data['ACTION'] = 'FETCH';
|
||||
$post_data['OPTION'] = 'MODSINCE:'.$lastqrz.';STATUS:CONFIRMED;TYPE:ADIF';
|
||||
|
||||
$ch = curl_init( $url );
|
||||
curl_setopt( $ch, CURLOPT_POST, true); // Correct method
|
||||
curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_data); // Correct data
|
||||
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1); // Okay
|
||||
curl_setopt( $ch, CURLOPT_HEADER, 0); // Correct - don't need response headers
|
||||
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true); // Correct - get response as string
|
||||
curl_setopt( $ch, CURLOPT_TIMEOUT, 300); // 5 minute timeout
|
||||
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 30); // 30 second connection timeout
|
||||
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
|
||||
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128000);
|
||||
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
|
||||
curl_setopt( $ch, CURLOPT_POST, true);
|
||||
curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_data);
|
||||
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
|
||||
curl_setopt( $ch, CURLOPT_HEADER, 0);
|
||||
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
|
||||
|
||||
$content = curl_exec($ch); // Get raw content
|
||||
$curl_error = curl_error($ch); // Check for cURL errors
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Get HTTP response code
|
||||
curl_close($ch);
|
||||
|
||||
if ($curl_error) { // Check for cURL level errors first
|
||||
$error_message = "QRZ download cURL error: " . $curl_error;
|
||||
log_message('error', $error_message . ' API Key used: ' . $qrz_api_key);
|
||||
return ['status' => 'error', 'message' => $error_message];
|
||||
$content = htmlspecialchars_decode(curl_exec($ch));
|
||||
file_put_contents($file, $content);
|
||||
if (strlen(file_get_contents($file, false, null, 0, 100))!=100) {
|
||||
$result = "QRZ downloading failed, either due to it being down or incorrect logins.";
|
||||
return "false";
|
||||
}
|
||||
|
||||
if ($http_code !== 200) {
|
||||
$error_message = "QRZ download HTTP error: HTTP " . $http_code;
|
||||
log_message('error', $error_message . ' API Key used: ' . $qrz_api_key);
|
||||
return ['status' => 'error', 'message' => $error_message];
|
||||
}
|
||||
|
||||
if ($content === false || $content === '') { // Check if curl_exec failed or returned empty
|
||||
$error_message = "QRZ download failed: No content received from QRZ.com.";
|
||||
log_message('error', $error_message . ' API Key used: ' . $qrz_api_key);
|
||||
return ['status' => 'error', 'message' => $error_message];
|
||||
}
|
||||
|
||||
// Find the start of the ADIF data after "ADIF="
|
||||
$adif_start_pos = strpos($content, 'ADIF=');
|
||||
if ($adif_start_pos !== false) {
|
||||
// Extract the content starting after "ADIF="
|
||||
$content = substr($content, $adif_start_pos + 5);
|
||||
} else {
|
||||
// If "ADIF=" is not found, check for potential errors before assuming it's just ADIF
|
||||
if (strpos($content, 'STATUS=FAIL') !== false || strpos($content, 'STATUS=AUTH') !== false) {
|
||||
// Handle API errors even if ADIF= is missing
|
||||
$reason = $content;
|
||||
if (preg_match('/REASON=([^&]+)/', $content, $matches)) {
|
||||
$reason = urldecode($matches[1]); // Decode URL encoded reason
|
||||
}
|
||||
$error_message = "QRZ API Error: " . $reason;
|
||||
log_message('error', $error_message . ' API Key used: ' . $qrz_api_key . ' Raw Response: ' . $content);
|
||||
return ['status' => 'error', 'message' => $error_message];
|
||||
}
|
||||
// If no error status and no ADIF=, maybe it's just ADIF? Or an unknown error.
|
||||
// Log a warning if content seems unusual but doesn't match known error patterns.
|
||||
if (trim($content) === '' || strlen(trim($content)) < 10) { // Arbitrary small length check
|
||||
log_message('error', 'QRZ download: Received unexpected content without ADIF= prefix or known error status. Content: ' . $content);
|
||||
// Decide if this should be treated as an error or empty ADIF
|
||||
// For now, let's treat it as potentially empty/invalid ADIF and let loadFromFile handle it.
|
||||
}
|
||||
}
|
||||
|
||||
// Also remove the trailing metadata like &RESULT=OK&COUNT=... or just &COUNT=...
|
||||
$result_pos = strpos($content, '&RESULT=');
|
||||
$count_pos = strpos($content, '&COUNT=');
|
||||
|
||||
$truncate_pos = false;
|
||||
|
||||
if ($result_pos !== false && $count_pos !== false) {
|
||||
// Both found, take the earlier one
|
||||
$truncate_pos = min($result_pos, $count_pos);
|
||||
} elseif ($result_pos !== false) {
|
||||
// Only RESULT found
|
||||
$truncate_pos = $result_pos;
|
||||
} elseif ($count_pos !== false) {
|
||||
// Only COUNT found
|
||||
$truncate_pos = $count_pos;
|
||||
}
|
||||
|
||||
if ($truncate_pos !== false) {
|
||||
$content = substr($content, 0, $truncate_pos);
|
||||
}
|
||||
|
||||
// Check for QRZ API specific error messages
|
||||
if (strpos($content, 'STATUS=FAIL') !== false || strpos($content, 'STATUS=AUTH') !== false) {
|
||||
// Extract reason if possible, otherwise use full content
|
||||
$reason = $content;
|
||||
if (preg_match('/REASON=([^&]+)/', $content, $matches)) {
|
||||
$reason = urldecode($matches[1]); // Decode URL encoded reason
|
||||
}
|
||||
$error_message = "QRZ API Error: " . $reason;
|
||||
log_message('error', $error_message . ' API Key used: ' . $qrz_api_key . ' Raw Response: ' . $content);
|
||||
return ['status' => 'error', 'message' => $error_message];
|
||||
}
|
||||
|
||||
$content = html_entity_decode($content, ENT_QUOTES | ENT_HTML5, 'UTF-8');
|
||||
|
||||
// Save the potentially valid content
|
||||
if (file_put_contents($file, $content) === false) {
|
||||
$error_message = "Failed to write downloaded QRZ data to temporary file: " . $file;
|
||||
log_message('error', $error_message);
|
||||
return ['status' => 'error', 'message' => $error_message];
|
||||
} else {
|
||||
// echo "Downloaded QRZ data to temporary file: " . $file;
|
||||
}
|
||||
|
||||
// Proceed to load from the file
|
||||
ini_set('memory_limit', '-1');
|
||||
$result = $this->loadFromFile($file); // loadFromFile returns ['table_data' => ..., 'processed_count' => ...]
|
||||
$result = $this->loadFromFile($file);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
|
@ -458,21 +298,13 @@ class Qrz extends CI_Controller {
|
|||
$config['qrz_rcvd_mark'] = 'Y';
|
||||
|
||||
ini_set('memory_limit', '-1');
|
||||
set_time_limit(1800); // 30 minutes max execution time instead of unlimited
|
||||
set_time_limit(0);
|
||||
|
||||
$this->load->library('adif_parser');
|
||||
|
||||
// Load the data from the file into the parser object
|
||||
$this->adif_parser->load_from_file($filepath); // <-- ADD THIS LINE
|
||||
|
||||
// Now initialize the parser with the loaded data
|
||||
if (!$this->adif_parser->initialize()) { // Check return value of initialize
|
||||
// Handle initialization error (e.g., log it, return error structure)
|
||||
log_message('error', 'ADIF Parser initialization failed for file: ' . $filepath);
|
||||
// Return an error structure consistent with mass_download_qsos
|
||||
return ['status' => 'error', 'message' => 'ADIF Parser initialization failed. Check logs.'];
|
||||
}
|
||||
$this->adif_parser->load_from_file($filepath);
|
||||
|
||||
$this->adif_parser->initialize();
|
||||
$tableheaders = "<table width=\"100%\">";
|
||||
$tableheaders .= "<tr class=\"titles\">";
|
||||
$tableheaders .= "<td>Station Callsign</td>";
|
||||
|
|
@ -481,80 +313,57 @@ class Qrz extends CI_Controller {
|
|||
$tableheaders .= "<td>Mode</td>";
|
||||
$tableheaders .= "<td>QRZ QSL Received</td>";
|
||||
$tableheaders .= "<td>QRZ Confirmed</td>";
|
||||
$tableheaders .= "<td>Log Status</td>";
|
||||
$tableheaders .= "</tr>";
|
||||
|
||||
$table = "";
|
||||
$batch_data = [];
|
||||
$batch_size = 500; // Process 500 records at a time
|
||||
$record_count = 0; // Initialize record counter
|
||||
$max_records = 50000; // Safety limit to prevent runaway processing
|
||||
$start_time = time(); // Track processing time
|
||||
$max_processing_time = 1200; // 20 minutes max for processing
|
||||
|
||||
while ($record = $this->adif_parser->get_record()) {
|
||||
$record_count++; // Increment counter for each record read
|
||||
|
||||
// Safety checks to prevent runaway processing
|
||||
if ($record_count > $max_records) {
|
||||
log_message('error', 'QRZ download: Exceeded maximum record limit of ' . $max_records . ' records. Processing stopped.');
|
||||
break;
|
||||
}
|
||||
|
||||
if ((time() - $start_time) > $max_processing_time) {
|
||||
log_message('error', 'QRZ download: Exceeded maximum processing time of ' . $max_processing_time . ' seconds. Processing stopped at record ' . $record_count . '.');
|
||||
break;
|
||||
}
|
||||
|
||||
while($record = $this->adif_parser->get_record()) {
|
||||
if ((!(isset($record['app_qrzlog_qsldate']))) || (!(isset($record['qso_date'])))) {
|
||||
continue;
|
||||
}
|
||||
$time_on = date('Y-m-d', strtotime($record['qso_date'])) ." ".date('H:i', strtotime($record['time_on']));
|
||||
|
||||
$qsl_date = date('Y-m-d', strtotime($record['app_qrzlog_qsldate']));
|
||||
|
||||
if (isset($record['time_off'])) {
|
||||
$time_off = date('Y-m-d', strtotime($record['qso_date'])) ." ".date('H:i', strtotime($record['time_off']));
|
||||
} else {
|
||||
$time_off = date('Y-m-d', strtotime($record['qso_date'])) ." ".date('H:i', strtotime($record['time_on']));
|
||||
}
|
||||
|
||||
// If we have a positive match from LoTW, record it in the DB according to the user's preferences
|
||||
$qsl_rcvd = ''; // Default empty
|
||||
if (isset($record['app_qrzlog_status']) && $record['app_qrzlog_status'] == "C") {
|
||||
$qsl_rcvd = $config['qrz_rcvd_mark'];
|
||||
if ($record['app_qrzlog_status'] == "C") {
|
||||
$record['qsl_rcvd'] = $config['qrz_rcvd_mark'];
|
||||
}
|
||||
|
||||
$call = str_replace("_","/",$record['call']);
|
||||
$station_callsign = str_replace("_","/",$record['station_callsign']);
|
||||
$band = $record['band'] ?? ''; // Ensure band exists
|
||||
$mode = $record['mode'] ?? ''; // Ensure mode exists
|
||||
$record['call']=str_replace("_","/",$record['call']);
|
||||
$record['station_callsign']=str_replace("_","/",$record['station_callsign']);
|
||||
$status = $this->logbook_model->import_check($time_on, $record['call'], $record['band'], $record['mode'], $record['station_callsign']);
|
||||
|
||||
// Add record data to batch
|
||||
$batch_data[] = [
|
||||
'time_on' => $time_on,
|
||||
'call' => $call,
|
||||
'band' => $band,
|
||||
'mode' => $mode,
|
||||
'station_callsign' => $station_callsign,
|
||||
'qsl_date' => $qsl_date,
|
||||
'qsl_rcvd' => $qsl_rcvd
|
||||
];
|
||||
if($status[0] == "Found") {
|
||||
$qrz_status = $this->logbook_model->qrz_update($time_on, $record['call'], $record['band'], $qsl_date, $record['qsl_rcvd'],$record['station_callsign']);
|
||||
|
||||
// If batch size reached, process it
|
||||
if (count($batch_data) >= $batch_size) {
|
||||
$table .= $this->logbook_model->process_qrz_batch($batch_data);
|
||||
$batch_data = []; // Reset batch
|
||||
|
||||
// Log progress every 1000 records to help monitor long-running processes
|
||||
if ($record_count % 1000 == 0) {
|
||||
$elapsed_time = time() - $start_time;
|
||||
log_message('info', 'QRZ download progress: ' . $record_count . ' records processed in ' . $elapsed_time . ' seconds.');
|
||||
}
|
||||
$table .= "<tr>";
|
||||
$table .= "<td>".$record['station_callsign']."</td>";
|
||||
$table .= "<td>".$time_on."</td>";
|
||||
$table .= "<td>".$record['call']."</td>";
|
||||
$table .= "<td>".$record['mode']."</td>";
|
||||
$table .= "<td>".$record['qsl_rcvd']."</td>";
|
||||
$table .= "<td>".$qsl_date."</td>";
|
||||
$table .= "<td>QSO Record: ".$status[0]."</td>";
|
||||
$table .= "</tr>";
|
||||
} else {
|
||||
$table .= "<tr>";
|
||||
$table .= "<td>".$record['station_callsign']."</td>";
|
||||
$table .= "<td>".$time_on."</td>";
|
||||
$table .= "<td>".$record['call']."</td>";
|
||||
$table .= "<td>".$record['mode']."</td>";
|
||||
$table .= "<td>".$record['qsl_rcvd']."</td>";
|
||||
$table .= "<td>QSO Record: ".$status[0]."</td>";
|
||||
$table .= "</tr>";
|
||||
}
|
||||
}
|
||||
|
||||
// Process any remaining records in the last batch
|
||||
if (!empty($batch_data)) {
|
||||
$table .= $this->logbook_model->process_qrz_batch($batch_data);
|
||||
}
|
||||
|
||||
// Log successful completion with statistics
|
||||
$processing_time = time() - $start_time;
|
||||
log_message('info', 'QRZ download completed successfully. Processed ' . $record_count . ' records in ' . $processing_time . ' seconds.');
|
||||
|
||||
if ($table != "") {
|
||||
$data['tableheaders'] = $tableheaders;
|
||||
$data['table'] = $table;
|
||||
|
|
@ -563,7 +372,8 @@ class Qrz extends CI_Controller {
|
|||
}
|
||||
|
||||
unlink($filepath);
|
||||
// Return both table data and the count of processed records
|
||||
return ['table_data' => $data, 'processed_count' => $record_count];
|
||||
return $data;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class Qsl extends CI_Controller {
|
|||
|
||||
// Default view when loading controller.
|
||||
public function index() {
|
||||
$this->load->helper('storage'); // Load the storage helper
|
||||
|
||||
$folder_name = "assets/qslcard";
|
||||
$data['storage_used'] = sizeFormat(folderSize($folder_name));
|
||||
|
||||
|
|
@ -181,4 +181,48 @@ class Qsl extends CI_Controller {
|
|||
$this->load->view('qslcard/qslcarousel', $data);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Functions for storage, these need shifted to a libary to use across Cloudlog
|
||||
function folderSize($dir){
|
||||
$count_size = 0;
|
||||
$count = 0;
|
||||
$dir_array = scandir($dir);
|
||||
foreach($dir_array as $key=>$filename){
|
||||
if($filename!=".." && $filename!="."){
|
||||
if(is_dir($dir."/".$filename)){
|
||||
$new_foldersize = foldersize($dir."/".$filename);
|
||||
$count_size = $count_size+ $new_foldersize;
|
||||
}else if(is_file($dir."/".$filename)){
|
||||
$count_size = $count_size + filesize($dir."/".$filename);
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $count_size;
|
||||
}
|
||||
|
||||
function sizeFormat($bytes){
|
||||
$kb = 1024;
|
||||
$mb = $kb * 1024;
|
||||
$gb = $mb * 1024;
|
||||
$tb = $gb * 1024;
|
||||
|
||||
if (($bytes >= 0) && ($bytes < $kb)) {
|
||||
return $bytes . ' B';
|
||||
|
||||
} elseif (($bytes >= $kb) && ($bytes < $mb)) {
|
||||
return ceil($bytes / $kb) . ' KB';
|
||||
|
||||
} elseif (($bytes >= $mb) && ($bytes < $gb)) {
|
||||
return ceil($bytes / $mb) . ' MB';
|
||||
|
||||
} elseif (($bytes >= $gb) && ($bytes < $tb)) {
|
||||
return ceil($bytes / $gb) . ' GB';
|
||||
|
||||
} elseif ($bytes >= $tb) {
|
||||
return ceil($bytes / $tb) . ' TB';
|
||||
} else {
|
||||
return $bytes . ' B';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,13 +40,6 @@ class QSO extends CI_Controller {
|
|||
$data['bands'] = $this->bands->get_user_bands_for_qso_entry();
|
||||
$data['user_default_band'] = $this->session->userdata('user_default_band');
|
||||
$data['sat_active'] = array_search("SAT", $this->bands->get_user_bands(), true);
|
||||
|
||||
// Set user's preferred date format
|
||||
if($this->session->userdata('user_date_format')) {
|
||||
$data['user_date_format'] = $this->session->userdata('user_date_format');
|
||||
} else {
|
||||
$data['user_date_format'] = $this->config->item('qso_date_format');
|
||||
}
|
||||
|
||||
$this->load->library('form_validation');
|
||||
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@ class Sattimers extends CI_Controller {
|
|||
$footerData['scripts'] = [
|
||||
'assets/js/sections/sattimers.js?'
|
||||
];
|
||||
$data['gridsquare'] = substr(strtoupper($this->stations->find_gridsquare()), 0, 6);
|
||||
$url = 'https://www.df2et.de/tevel/api2.php?grid=' . $data['gridsquare'];
|
||||
$url = 'https://www.df2et.de/tevel/api2.php?grid='.strtoupper($this->stations->find_gridsquare());
|
||||
$json = file_get_contents($url);
|
||||
$data['activations'] = json_decode($json, true)['data'];
|
||||
$data['gridsquare'] = strtoupper($this->stations->find_gridsquare());
|
||||
|
||||
$data['page_title'] = "Satellite Timers";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,111 +0,0 @@
|
|||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/*
|
||||
Controller for SSTV Images
|
||||
*/
|
||||
|
||||
class Sstv extends CI_Controller {
|
||||
|
||||
function __construct() {
|
||||
parent::__construct();
|
||||
$this->lang->load('sstv');
|
||||
$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'); }
|
||||
}
|
||||
|
||||
public function index() {
|
||||
$this->load->helper('storage');
|
||||
$folder_name = "assets/sstvimages";
|
||||
$data['storage_used'] = sizeFormat(folderSize($folder_name));
|
||||
|
||||
// Render Page
|
||||
$data['page_title'] = "SSTV Images";
|
||||
|
||||
$this->load->model('sstv_model');
|
||||
$data['sstvArray'] = $this->sstv_model->getQsoWithSstvImageList();
|
||||
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('sstv/index');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
|
||||
public function uploadSSTV() {
|
||||
$this->load->model('user_model');
|
||||
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
|
||||
|
||||
if (!file_exists('./assets/sstvimages')) {
|
||||
mkdir('./assets/sstvimages', 0755, true);
|
||||
}
|
||||
$qsoid = $this->input->post('qsoid');
|
||||
|
||||
$results = array();
|
||||
if (isset($_FILES['sstvimages']) && $_FILES['sstvimages']['error'][0] == 0)
|
||||
{
|
||||
for($i=0; $i<count($_FILES['sstvimages']['name']); $i++) {
|
||||
$file = array(
|
||||
'name' => $_FILES['sstvimages']['name'][$i],
|
||||
'type' => $_FILES['sstvimages']['type'][$i],
|
||||
'tmp_name' => $_FILES['sstvimages']['tmp_name'][$i],
|
||||
'error' => $_FILES['sstvimages']['error'][$i],
|
||||
'size' => $_FILES['sstvimages']['size'][$i]
|
||||
);
|
||||
$result = $this->uploadSSTVImage($qsoid, $file);
|
||||
array_push($results, $result);
|
||||
}
|
||||
}
|
||||
|
||||
header("Content-type: application/json");
|
||||
echo json_encode($results);
|
||||
}
|
||||
|
||||
function uploadSSTVImage($qsoid, $file) {
|
||||
$config['upload_path'] = './assets/sstvimages';
|
||||
$config['allowed_types'] = 'jpg|gif|png|jpeg|JPG|PNG|bmp';
|
||||
$array = explode(".", $file['name']);
|
||||
$ext = end($array);
|
||||
$config['file_name'] = $qsoid . '.sstv.' . '_' . time() . '.' . $ext;
|
||||
|
||||
$this->load->library('upload', $config);
|
||||
|
||||
$_FILES['sstvimage'] = $file;
|
||||
if ( ! $this->upload->do_upload('sstvimage')) {
|
||||
// Upload of SSTV image Failed
|
||||
$error = array('error' => $this->upload->display_errors());
|
||||
|
||||
return $error;
|
||||
}
|
||||
else {
|
||||
// Load database queries
|
||||
$this->load->model('Sstv_model');
|
||||
|
||||
//Upload of SSTV image was successful
|
||||
$data = $this->upload->data();
|
||||
|
||||
// Now we need to insert info into database about file
|
||||
$filename = $data['file_name'];
|
||||
$insertid = $this->Sstv_model->saveSstvImages($qsoid, $filename);
|
||||
|
||||
$result['status'] = 'Success';
|
||||
$result['insertid'] = $insertid;
|
||||
$result['filename'] = $filename;
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Deletes SSTV Image
|
||||
public function delete() {
|
||||
$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'); }
|
||||
|
||||
$id = $this->input->post('id');
|
||||
$this->load->model('Sstv_model');
|
||||
|
||||
$path = './assets/sstvimages/';
|
||||
$file = $this->Sstv_model->getSSTVFilename($id)->row();
|
||||
$filename = $file->filename;
|
||||
unlink($path.$filename);
|
||||
|
||||
$this->Sstv_model->deleteSstv($id);
|
||||
}
|
||||
}
|
||||
|
|
@ -83,8 +83,6 @@ class Station extends CI_Controller {
|
|||
$this->load->view('station_profile/edit');
|
||||
$this->load->view('interface_assets/footer');
|
||||
} else {
|
||||
// Get all the posted data from the form and save it to log file
|
||||
|
||||
if ($this->stations->edit() !== false) {
|
||||
// [eQSL default msg] ADD to user options (option_type='eqsl_default_qslmsg'; option_name='key_station_id'; option_key=station_id; option_value=value) //
|
||||
$eqsl_default_qslmsg = xss_clean($this->input->post('eqsl_default_qslmsg', true));
|
||||
|
|
|
|||
|
|
@ -219,16 +219,6 @@ class Update extends CI_Controller {
|
|||
$this->update_status("DONE");
|
||||
}
|
||||
|
||||
public function get_status() {
|
||||
$status_file = $this->make_update_path("status.html");
|
||||
if (file_exists($status_file)) {
|
||||
$content = file_get_contents($status_file);
|
||||
echo $content;
|
||||
} else {
|
||||
echo "No status available";
|
||||
}
|
||||
}
|
||||
|
||||
public function update_status($done=""){
|
||||
|
||||
if ($done != "Downloading file"){
|
||||
|
|
@ -244,16 +234,7 @@ class Update extends CI_Controller {
|
|||
$html = $done."....<br/>";
|
||||
}
|
||||
|
||||
$status_file = $this->make_update_path("status.html");
|
||||
if (file_put_contents($status_file, $html) === FALSE) {
|
||||
log_message('error', 'Failed to write status file: ' . $status_file);
|
||||
// Try to create the directory if it doesn't exist
|
||||
$dir = dirname($status_file);
|
||||
if (!is_dir($dir)) {
|
||||
mkdir($dir, 0755, true);
|
||||
file_put_contents($status_file, $html);
|
||||
}
|
||||
}
|
||||
file_put_contents($this->make_update_path("status.html"), $html);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
文件差异内容过多而无法显示
加载差异
|
|
@ -59,10 +59,6 @@ class User_Options extends CI_Controller {
|
|||
echo json_encode($jsonout);
|
||||
}
|
||||
|
||||
public function enableVersionDialog() {
|
||||
$this->user_options_model->set_option('version_dialog', 'confirmed', array('boolean' => 'false'));
|
||||
}
|
||||
|
||||
public function dismissVersionDialog() {
|
||||
$this->user_options_model->set_option('version_dialog', 'confirmed', array('boolean' => 'true'));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,6 @@ class Visitor extends CI_Controller {
|
|||
elseif($method == "satellites") {
|
||||
$this->satellites($method);
|
||||
}
|
||||
elseif($method == "getGridsjs") {
|
||||
$this->getGridsjs();
|
||||
}
|
||||
elseif($method == "search") {
|
||||
$this->search($method);
|
||||
}
|
||||
|
|
@ -67,10 +64,6 @@ 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');
|
||||
|
|
@ -82,37 +75,6 @@ class Visitor extends CI_Controller {
|
|||
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
// load config and init pagination
|
||||
$this->load->library('pagination');
|
||||
|
||||
//Pagination config
|
||||
$config['base_url'] = base_url().'index.php/visitor/'. $public_slug . '/index';
|
||||
$config['total_rows'] = $this->logbook_model->total_qsos($logbooks_locations_array);
|
||||
$config['per_page'] = '25';
|
||||
$config['num_links'] = 6;
|
||||
$config['full_tag_open'] = '<ul class="pagination">';
|
||||
$config['full_tag_close'] = '</ul>';
|
||||
$config['attributes'] = ['class' => 'page-link'];
|
||||
$config['first_link'] = false;
|
||||
$config['last_link'] = false;
|
||||
$config['first_tag_open'] = '<li class="page-item">';
|
||||
$config['first_tag_close'] = '</li>';
|
||||
$config['prev_link'] = '«';
|
||||
$config['prev_tag_open'] = '<li class="page-item">';
|
||||
$config['prev_tag_close'] = '</li>';
|
||||
$config['next_link'] = '»';
|
||||
$config['next_tag_open'] = '<li class="page-item">';
|
||||
$config['next_tag_close'] = '</li>';
|
||||
$config['last_tag_open'] = '<li class="page-item">';
|
||||
$config['last_tag_close'] = '</li>';
|
||||
$config['cur_tag_open'] = '<li class="page-item active"><a href="#" class="page-link">';
|
||||
$config['cur_tag_close'] = '<span class="visually-hidden">(current)</span></a></li>';
|
||||
$config['num_tag_open'] = '<li class="page-item">';
|
||||
$config['num_tag_close'] = '</li>';
|
||||
|
||||
$this->pagination->initialize($config);
|
||||
|
||||
|
||||
// Public visitor so no QRA to setup
|
||||
$data['qra'] = "none";
|
||||
|
||||
|
|
@ -145,9 +107,8 @@ class Visitor extends CI_Controller {
|
|||
|
||||
$data['total_lotw_sent'] = $QSLStatsBreakdownArray['LoTW_Sent'];
|
||||
$data['total_lotw_rcvd'] = $QSLStatsBreakdownArray['LoTW_Received'];
|
||||
|
||||
// Show paginated results
|
||||
$data['results'] = $this->logbook_model->get_qsos($config['per_page'], $this->uri->segment(4), $logbooks_locations_array);
|
||||
|
||||
$data['last_five_qsos'] = $this->logbook_model->get_last_qsos('18', $logbooks_locations_array);
|
||||
|
||||
$data['page_title'] = "Dashboard";
|
||||
$data['slug'] = $public_slug;
|
||||
|
|
@ -184,7 +145,6 @@ 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);
|
||||
|
|
@ -201,7 +161,7 @@ class Visitor extends CI_Controller {
|
|||
show_404('Unknown Public Page.');
|
||||
}
|
||||
|
||||
$qsos = $this->logbook_model->get_qsos('18', $offset, $logbooks_locations_array);
|
||||
$qsos = $this->logbook_model->get_qsos('18', null, $logbooks_locations_array);
|
||||
// [PLOT] ADD plot //
|
||||
$plot_array = $this->logbook_model->get_plot_array_for_map($qsos->result());
|
||||
|
||||
|
|
@ -234,88 +194,36 @@ class Visitor extends CI_Controller {
|
|||
|
||||
$this->load->model('gridmap_model');
|
||||
|
||||
$data['page_title'] = "Public Gridsquare Map";
|
||||
$data['page_title'] = "Satellite 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();
|
||||
|
||||
// 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);
|
||||
$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', 'false', 'true', 'false', 'All', $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')) {
|
||||
|
|
@ -327,25 +235,30 @@ 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 (all bands by default)
|
||||
$query = $this->gridmap_model->get_band($default_band, $default_mode, 'false', 'false', 'false', 'false', $default_sat, $logbooks_locations_array);
|
||||
// Get worked squares
|
||||
$query = $this->gridmap_model->get_band('SAT', 'All', 'false', 'true', 'false', 'All', $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')) {
|
||||
|
|
@ -357,25 +270,29 @@ 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// 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);
|
||||
$query_vucc = $this->gridmap_model->get_band_worked_vucc_squares('SAT', 'All', 'false', 'true', 'false', 'All', $logbooks_locations_array);
|
||||
|
||||
if ($query_vucc && $query_vucc->num_rows() > 0)
|
||||
if ($query && $query_vucc->num_rows() > 0)
|
||||
{
|
||||
foreach ($query_vucc->result() as $row)
|
||||
{
|
||||
|
||||
$grids = explode(",", $row->COL_VUCC_GRIDS);
|
||||
|
||||
foreach($grids as $key) {
|
||||
|
|
@ -387,20 +304,22 @@ 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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);
|
||||
// Confirmed Squares
|
||||
$query_vucc = $this->gridmap_model->get_band_confirmed_vucc_squares('SAT', 'All', 'false', 'true', 'false', 'All', $logbooks_locations_array);
|
||||
|
||||
if ($query_vucc && $query_vucc->num_rows() > 0)
|
||||
if ($query && $query_vucc->num_rows() > 0)
|
||||
{
|
||||
foreach ($query_vucc->result() as $row)
|
||||
{
|
||||
|
||||
$grids = explode(",", $row->COL_VUCC_GRIDS);
|
||||
|
||||
foreach($grids as $key) {
|
||||
|
|
@ -412,6 +331,7 @@ 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);
|
||||
}
|
||||
|
|
@ -498,159 +418,4 @@ 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,200 +0,0 @@
|
|||
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/*
|
||||
Controller to interact with the Cloudlog DXPed Aggregator
|
||||
*/
|
||||
|
||||
class Workabledxcc 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');
|
||||
}
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
// Load public view
|
||||
$data['page_title'] = "Upcoming DXPeditions";
|
||||
$this->load->view('interface_assets/header', $data);
|
||||
$this->load->view('/workabledxcc/index');
|
||||
$this->load->view('interface_assets/footer');
|
||||
}
|
||||
|
||||
public function dxcclist()
|
||||
{
|
||||
$json = file_get_contents($this->optionslib->get_option('dxped_url'));
|
||||
$dataResult = json_decode($json, true);
|
||||
|
||||
if (empty($dataResult)) {
|
||||
$data['dxcclist'] = array();
|
||||
$this->load->view('/workabledxcc/components/dxcclist', $data);
|
||||
return;
|
||||
}
|
||||
|
||||
// Get Date format
|
||||
if ($this->session->userdata('user_date_format')) {
|
||||
$custom_date_format = $this->session->userdata('user_date_format');
|
||||
} else {
|
||||
$custom_date_format = $this->config->item('qso_date_format');
|
||||
}
|
||||
|
||||
// Load models once
|
||||
$this->load->model('logbook_model');
|
||||
$this->load->model('Workabledxcc_model');
|
||||
|
||||
// Get all DXCC entities for all callsigns in one batch
|
||||
$callsigns = array_column($dataResult, 'callsign');
|
||||
$dates = array_column($dataResult, '0');
|
||||
$dxccEntities = $this->Workabledxcc_model->batchDxccLookup($callsigns, $dates);
|
||||
|
||||
// Get worked/confirmed status for all entities in batch
|
||||
$uniqueEntities = array_unique(array_filter($dxccEntities));
|
||||
$dxccStatus = $this->Workabledxcc_model->batchDxccWorkedStatus($uniqueEntities);
|
||||
|
||||
// If JSON contains iota fields, batch process IOTA status
|
||||
$iotas = [];
|
||||
foreach ($dataResult as $item) {
|
||||
if (!empty($item['iota'])) {
|
||||
$iotas[] = $item['iota'];
|
||||
}
|
||||
}
|
||||
$uniqueIotas = array_unique($iotas);
|
||||
$iotaStatus = [];
|
||||
if (!empty($uniqueIotas)) {
|
||||
$iotaStatus = $this->Workabledxcc_model->batchIotaWorkedStatus($uniqueIotas);
|
||||
}
|
||||
|
||||
// Process results
|
||||
$requiredData = array();
|
||||
foreach ($dataResult as $index => $item) {
|
||||
$oldStartDate = DateTime::createFromFormat('Y-m-d', $item['0']);
|
||||
$StartDate = $oldStartDate->format($custom_date_format);
|
||||
|
||||
$oldEndDate = DateTime::createFromFormat('Y-m-d', $item['1']);
|
||||
$EndDate = $oldEndDate->format($custom_date_format);
|
||||
|
||||
// Get DXCC status for this callsign
|
||||
$entity = $dxccEntities[$index] ?? null;
|
||||
$worked = $entity && isset($dxccStatus[$entity]) ? $dxccStatus[$entity] : [
|
||||
'workedBefore' => false,
|
||||
'confirmed' => false,
|
||||
'workedViaSatellite' => false
|
||||
];
|
||||
|
||||
$requiredData[] = array(
|
||||
'clean_date' => $item['0'],
|
||||
'start_date' => $StartDate,
|
||||
'end_date' => $EndDate,
|
||||
'country' => $item['2'],
|
||||
'iota' => isset($item['iota']) ? $item['iota'] : null,
|
||||
'iota_status' => (isset($item['iota']) && isset($iotaStatus[$item['iota']])) ? $iotaStatus[$item['iota']] : null,
|
||||
'notes' => $item['6'],
|
||||
'callsign' => $item['callsign'],
|
||||
'workedBefore' => $worked['workedBefore'],
|
||||
'confirmed' => $worked['confirmed'],
|
||||
'workedViaSatellite' => $worked['workedViaSatellite'],
|
||||
);
|
||||
}
|
||||
|
||||
$data['dxcclist'] = $requiredData;
|
||||
$this->load->view('/workabledxcc/components/dxcclist', $data);
|
||||
}
|
||||
|
||||
function dxccWorked($country)
|
||||
{
|
||||
|
||||
$return = [
|
||||
"workedBefore" => false,
|
||||
"confirmed" => false,
|
||||
"workedViaSatellite" => false,
|
||||
];
|
||||
|
||||
$user_default_confirmation = $this->session->userdata('user_default_confirmation');
|
||||
$this->load->model('logbooks_model');
|
||||
$logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
|
||||
$this->load->model('logbook_model');
|
||||
|
||||
if (!empty($logbooks_locations_array)) {
|
||||
// Check terrestrial contacts
|
||||
$this->db->where('COL_PROP_MODE !=', 'SAT');
|
||||
|
||||
$this->db->where_in('station_id', $logbooks_locations_array);
|
||||
// Fix case sensitivity issue for DXCC country matching
|
||||
$this->db->where('UPPER(COL_COUNTRY) = UPPER(?)', urldecode($country));
|
||||
|
||||
$query = $this->db->get($this->config->item('table_name'), 1, 0);
|
||||
foreach ($query->result() as $workedBeforeRow) {
|
||||
$return['workedBefore'] = true;
|
||||
}
|
||||
|
||||
// Check satellite contacts
|
||||
$this->db->where('COL_PROP_MODE', 'SAT');
|
||||
$this->db->where_in('station_id', $logbooks_locations_array);
|
||||
$this->db->where('UPPER(COL_COUNTRY) = UPPER(?)', urldecode($country));
|
||||
|
||||
$query = $this->db->get($this->config->item('table_name'), 1, 0);
|
||||
foreach ($query->result() as $satelliteRow) {
|
||||
$return['workedViaSatellite'] = true;
|
||||
}
|
||||
|
||||
$extrawhere = '';
|
||||
if (isset($user_default_confirmation) && strpos($user_default_confirmation, 'Q') !== false) {
|
||||
$extrawhere = "COL_QSL_RCVD='Y'";
|
||||
}
|
||||
if (isset($user_default_confirmation) && strpos($user_default_confirmation, 'L') !== false) {
|
||||
if ($extrawhere != '') {
|
||||
$extrawhere .= " OR";
|
||||
}
|
||||
$extrawhere .= " COL_LOTW_QSL_RCVD='Y'";
|
||||
}
|
||||
if (isset($user_default_confirmation) && strpos($user_default_confirmation, 'E') !== false) {
|
||||
if ($extrawhere != '') {
|
||||
$extrawhere .= " OR";
|
||||
}
|
||||
$extrawhere .= " COL_EQSL_QSL_RCVD='Y'";
|
||||
}
|
||||
|
||||
if (isset($user_default_confirmation) && strpos($user_default_confirmation, 'Z') !== false) {
|
||||
if ($extrawhere != '') {
|
||||
$extrawhere .= " OR";
|
||||
}
|
||||
$extrawhere .= " COL_QRZCOM_QSO_DOWNLOAD_STATUS='Y'";
|
||||
}
|
||||
|
||||
|
||||
$this->load->model('logbook_model');
|
||||
$this->db->where('COL_PROP_MODE !=', 'SAT');
|
||||
if ($extrawhere != '') {
|
||||
$this->db->where('(' . $extrawhere . ')');
|
||||
} else {
|
||||
$this->db->where("1=0");
|
||||
}
|
||||
|
||||
|
||||
$this->db->where_in('station_id', $logbooks_locations_array);
|
||||
// Fix case sensitivity issue for DXCC country matching
|
||||
$this->db->where('UPPER(COL_COUNTRY) = UPPER(?)', urldecode($country));
|
||||
|
||||
$query = $this->db->get($this->config->item('table_name'), 1, 0);
|
||||
foreach ($query->result() as $workedBeforeRow) {
|
||||
$return['confirmed'] = true;
|
||||
}
|
||||
|
||||
return $return;
|
||||
} else {
|
||||
$return['workedBefore'] = false;
|
||||
$return['confirmed'] = false;
|
||||
|
||||
|
||||
return $return;;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
<?php
|
||||
|
||||
if (!function_exists('folderSize')) {
|
||||
function folderSize($dir){
|
||||
if (is_dir($dir)) {
|
||||
$count_size = 0;
|
||||
$count = 0;
|
||||
$dir_array = scandir($dir);
|
||||
foreach($dir_array as $key=>$filename){
|
||||
if($filename!=".." && $filename!="."){
|
||||
if(is_dir($dir."/".$filename)){
|
||||
$new_foldersize = folderSize($dir."/".$filename);
|
||||
$count_size = $count_size+ $new_foldersize;
|
||||
}else if(is_file($dir."/".$filename)){
|
||||
$count_size = $count_size + filesize($dir."/".$filename);
|
||||
$count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $count_size;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('sizeFormat')) {
|
||||
function sizeFormat($bytes){
|
||||
$kb = 1024;
|
||||
$mb = $kb * 1024;
|
||||
$gb = $mb * 1024;
|
||||
$tb = $gb * 1024;
|
||||
|
||||
if (($bytes >= 0) && ($bytes < $kb)) {
|
||||
return $bytes . ' B';
|
||||
} elseif (($bytes >= $kb) && ($bytes < $mb)) {
|
||||
return ceil($bytes / $kb) . ' KB';
|
||||
} elseif (($bytes >= $mb) && ($bytes < $gb)) {
|
||||
return ceil($bytes / $mb) . ' MB';
|
||||
} elseif (($bytes >= $gb) && ($bytes < $tb)) {
|
||||
return ceil($bytes / $gb) . ' GB';
|
||||
} elseif ($bytes >= $tb) {
|
||||
return ceil($bytes / $tb) . ' TB';
|
||||
} else {
|
||||
return $bytes . ' B';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -11,7 +11,6 @@ $lang['account_column5_text'] = 'Избор за колона 5 (само за
|
|||
|
||||
$lang['account_create_user_account'] = 'Create User Account';
|
||||
$lang['account_edit_account'] = 'Edit Account';
|
||||
$lang['account_remember_me'] = 'Remember me';
|
||||
|
||||
$lang['account_account_information'] = "Account";
|
||||
$lang['account_user'] = "User";
|
||||
|
|
@ -127,9 +126,4 @@ $lang['account_general_information'] = "General Information";
|
|||
$lang['account_qso_logging_options'] = "QSO Logging Options";
|
||||
$lang['account_third_party_services'] = "Third Party Services";
|
||||
$lang['account_default_values'] = "Default Values";
|
||||
$lang['account_miscellaneous'] = "Miscellaneous";
|
||||
|
||||
$lang['account_hamsat'] = "Hams.at";
|
||||
$lang['account_hamsat_private_feed_key'] = "Private Feed Key";
|
||||
$lang['account_hamsat_hint'] = "See your profile at <a href='https://hams.at/users/settings' target='_blank'>https://hams.at/users/settings</a>.";
|
||||
$lang['account_hamsat_workable_only'] = "Show Workable Passes Only";
|
||||
$lang['account_miscellaneous'] = "Miscellaneous";
|
||||
|
|
@ -193,13 +193,3 @@ $lang['awards_waja_description_ln1'] = "WAJA - Worked All Japan prefectures Awar
|
|||
$lang['awards_waja_description_ln2'] = "WAJA, Worked All Japan prefectures in Amateur Radio, encourages licensed ham radio operators to work all the prefectures in Japan.";
|
||||
$lang['awards_waja_description_ln3'] = "May be claimed for having contacted (heard) and received a QSL card from an amateur station located in each of the 47 prefectures of Japan. A list of QSL cards should be arranged in order of WAJA (HAJA) reference number, however names of prefectures may be omitted.";
|
||||
$lang['awards_waja_description_ln4'] = "For more information, please visit: <a href='https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm' target='_blank'>https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm</a>.";
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
WAB -- Use all 4 Lines of Text
|
||||
___________________________________________________________________________________________
|
||||
*/
|
||||
$lang['awards_wab_description_ln1'] = "WAB - Worked All Britain Award";
|
||||
$lang['awards_wab_description_ln2'] = "The Amateur Radio Worked All Britain (WAB) Award is a prestigious recognition program within the amateur radio community that celebrates communication achievements across the United Kingdom. The WAB Award scheme encourages radio operators to establish contact with stations located in different regions of Britain, fostering camaraderie and promoting radio communication skills. To earn the WAB Award, participants must make successful radio contacts with stations located in specific WAB areas, which are defined by Ordnance Survey grid squares. These grid squares cover the entirety of Great Britain, including England, Scotland, Wales, and some offshore islands.";
|
||||
$lang['awards_wab_description_ln3'] = "Participants in the WAB Award program exchange information such as their location, signal strength, and WAB square reference during radio contacts. Points are awarded based on the location of the contacted station, with different point values assigned to contacts made within different WAB areas. By accumulating points from successful contacts, radio operators can progress through various award levels, each representing a significant milestone in their amateur radio journey. The WAB Award not only recognizes the dedication and skill of radio operators but also promotes geographic diversity and encourages exploration of the rich tapestry of locations across Britain through the medium of amateur radio.";
|
||||
$lang['awards_wab_description_ln4'] = "For more information, please visit: <a href='https://wab.intermip.net/default.php' target='_blank'>https://wab.intermip.net/default.php</a>.";
|
||||
|
|
|
|||
|
|
@ -28,11 +28,5 @@ $lang['contesting_title_callsign_suggestions'] = 'Предложения за и
|
|||
$lang['contesting_title_contest_logbook'] = 'Дневник на състезанието';
|
||||
|
||||
$lang['contesting_copy_exch_to_dok'] = 'Copy received exchange to DOK field in the database!';
|
||||
$lang['contesting_copy_exch_to_none'] = 'Copy received exchange to no additional field in the database!';
|
||||
$lang['contesting_copy_exch_to_power'] = 'Copy received exchange to RX-Power field in the database!';
|
||||
$lang['contesting_copy_exch_to_state'] = 'Copy received exchange to US-State field in the database!';
|
||||
$lang['contesting_copy_exch_to_age'] = 'Copy received exchange to Age field in the database!';
|
||||
$lang['contesting_copy_exch_to_name'] = 'Copy received exchange to Name field in the database!';
|
||||
$lang['contesting_copy_exch_to_locator'] = 'Copy received exchange to Locator field in the database!';
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ $lang['general_word_filtering_on'] = "Filtering on";
|
|||
$lang['general_word_not_display'] = "Not display";
|
||||
$lang['general_word_icon'] = "Icon";
|
||||
$lang['general_word_never'] = "Never";
|
||||
$lang['general_word_undefined'] = "Undefined";
|
||||
|
||||
$lang['general_word_date'] = 'Дата';
|
||||
$lang['general_word_startdate'] = "Start Date";
|
||||
|
|
@ -37,7 +36,6 @@ $lang['general_word_time_off'] = 'Time off';
|
|||
$lang['general_word_datetime'] = 'Дата/Час';
|
||||
$lang['general_word_none'] = 'Нито едно';
|
||||
$lang['general_word_name'] = 'Име';
|
||||
$lang['general_word_flag'] = 'знаме';
|
||||
$lang['general_word_location'] = 'Местоположение';
|
||||
$lang['general_word_comment'] = 'Коментар';
|
||||
$lang['general_word_general'] = 'Общи';
|
||||
|
|
@ -83,10 +81,6 @@ $lang['general_word_qslcard_manager'] = 'Manager';
|
|||
$lang['general_word_qslcard_via'] = 'Чрез';
|
||||
$lang['general_word_eqslcard'] = 'eQSL Card';
|
||||
$lang['general_word_eqslcards'] = 'eQSL Cards';
|
||||
$lang['general_word_sstv_management'] = 'SSTV Management';
|
||||
$lang['general_word_sstvimages'] = 'SSTV Images';
|
||||
$lang['general_sstv_upload'] = 'Uploaded SSTV images';
|
||||
$lang['general_sstv_upload_button'] = 'Upload SSTV image(s)';
|
||||
$lang['general_word_lotw'] = 'Logbook of the World';
|
||||
$lang['general_word_lotw_short'] = 'LoTW';
|
||||
|
||||
|
|
@ -130,8 +124,6 @@ $lang['gen_hamradio_suffix'] = "Suffix";
|
|||
$lang['gen_hamradio_de'] = 'De';
|
||||
$lang['gen_hamradio_dx'] = 'Dx';
|
||||
$lang['gen_hamradio_mode'] = 'Режим';
|
||||
$lang['gen_hamradio_ant_az'] = 'Antenna Azimuth';
|
||||
$lang['gen_hamradio_ant_el'] = 'Antenna Elevation';
|
||||
$lang['gen_hamradio_rst_sent'] = 'Sent';
|
||||
$lang['gen_hamradio_rst_rcvd'] = 'Recv\'d';
|
||||
$lang['gen_hamradio_band'] = 'Обхват';
|
||||
|
|
@ -153,24 +145,6 @@ $lang['gen_hamradio_qslmsg'] = 'QSL Msg';
|
|||
$lang['gen_hamradio_locator'] = 'Локатор';
|
||||
$lang['gen_hamradio_transmit_power'] = 'Мощност на предавателя (W)';
|
||||
$lang['gen_hamradio_propagation_mode'] = 'Propagation Mode';
|
||||
$lang['gen_hamradio_propagation_AS'] = "Aircraft Scatter";
|
||||
$lang['gen_hamradio_propagation_AUR'] = "Aurora";
|
||||
$lang['gen_hamradio_propagation_AUE'] = "Aurora-E";
|
||||
$lang['gen_hamradio_propagation_BS'] = "Back scatter";
|
||||
$lang['gen_hamradio_propagation_ECH'] = "EchoLink";
|
||||
$lang['gen_hamradio_propagation_EME'] = "Earth-Moon-Earth";
|
||||
$lang['gen_hamradio_propagation_ES'] = "Sporadic E";
|
||||
$lang['gen_hamradio_propagation_FAI'] = "Field Aligned Irregularities";
|
||||
$lang['gen_hamradio_propagation_F2'] = "F2 Reflection";
|
||||
$lang['gen_hamradio_propagation_INTERNET'] = "Internet-assisted";
|
||||
$lang['gen_hamradio_propagation_ION'] = "Ionoscatter";
|
||||
$lang['gen_hamradio_propagation_IRL'] = "IRLP";
|
||||
$lang['gen_hamradio_propagation_MS'] = "Meteor scatter";
|
||||
$lang['gen_hamradio_propagation_RPT'] = "Terrestrial or atmospheric repeater or transponder";
|
||||
$lang['gen_hamradio_propagation_RS'] = "Rain scatter";
|
||||
$lang['gen_hamradio_propagation_SAT'] = "Satellite";
|
||||
$lang['gen_hamradio_propagation_TEP'] = "Trans-equatorial";
|
||||
$lang['gen_hamradio_propagation_TR'] = "Tropospheric ducting";
|
||||
|
||||
$lang['gen_hamradio_satellite_name'] = 'Име на сателита';
|
||||
$lang['gen_hamradio_satellite_mode'] = 'Режим на сателита';
|
||||
|
|
@ -248,5 +222,3 @@ $lang['dashboard_logbooks_warning'] = 'You have no station logbook. Go <a href="
|
|||
$lang['hams_at_no_activations_found'] = 'No upcoming activations found. Please check back later.';
|
||||
|
||||
$lang['datatables_language'] = "en-GB";
|
||||
|
||||
$lang['set_log_to_full_dates'] = "Set log to full dates";
|
||||
|
|
@ -17,7 +17,6 @@ $lang['menu_post_contest_logging'] = 'Post Contest Logging';
|
|||
$lang['menu_bandmap'] = 'Bandmap';
|
||||
$lang['menu_view_qsl'] = 'View QSL Cards';
|
||||
$lang['menu_view_eqsl'] = 'View eQSL Cards';
|
||||
$lang['menu_view_sstv'] = 'View SSTV Images';
|
||||
|
||||
$lang['menu_notes'] = 'Notes';
|
||||
|
||||
|
|
@ -32,7 +31,6 @@ $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';
|
||||
|
||||
|
|
@ -96,4 +94,3 @@ $lang['menu_logout'] = 'Logout';
|
|||
$lang['menu_ffma'] = "Fred Fish Memorial Award";
|
||||
$lang['menu_ja_gridmaster'] = 'JA Gridmaster';
|
||||
$lang['menu_maintenance']='Maintenance';
|
||||
$lang['menu_uk_gridmaster'] = 'UK Gridmaster';
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
<?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.';
|
||||
|
|
@ -87,7 +87,7 @@ $lang['options_version_dialog_mode_release_notes'] = "Only Release Notes";
|
|||
$lang['options_version_dialog_mode_custom_text'] = "Only Custom Text";
|
||||
$lang['options_version_dialog_mode_both'] = "Release Notes and Custom Text";
|
||||
$lang['options_version_dialog_mode_disabled'] = "Disabled";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after they read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after he read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_custom_text'] = "Version Info Custom Text";
|
||||
$lang['options_version_dialog_custom_text_hint'] = "This is the custom text which is shown in the dialog.";
|
||||
$lang['options_version_dialog_mode_changed_to'] = "Version Info Mode changed to";
|
||||
|
|
@ -123,5 +123,4 @@ $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'] = 'Настройките за външен вид са запазени успешно.';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['sstv_string_disk_space'] = 'of disk space to store SSTV image assets';
|
||||
|
|
@ -25,21 +25,14 @@ $lang['statistics_number_of_qso_worked'] = "# of QSO's worked";
|
|||
*
|
||||
*/
|
||||
|
||||
$lang['statistics_distances_bands_all'] = "All";
|
||||
$lang['statistics_distances_modes_all'] = "All";
|
||||
$lang['statistics_distances_worked'] = "Distances Worked";
|
||||
$lang['statistics_distances_part1_contacts_were_plotted_furthest'] = "contacts were plotted.<br /> Your furthest contact was with";
|
||||
$lang['statistics_distances_part2_contacts_were_plotted_furthest'] = "in gridsquare";
|
||||
$lang['statistics_distances_part3_contacts_were_plotted_furthest'] = "The distance was";
|
||||
$lang['statistics_distances_part4_contacts_were_plotted_furthest'] = "The average distance is";
|
||||
$lang['statistics_distances_part3_contacts_were_plotted_furthest'] = "the distance was";
|
||||
$lang['statistics_distances_number_of_qsos'] = "Number of QSOs";
|
||||
$lang['statistics_distances_callsigns_worked'] = "Callsign(s) worked (max 5 shown)";
|
||||
$lang['statistics_distances_qsos_with'] = "QSOs with distance : ";
|
||||
$lang['statistics_distances_and_band'] = ", band : ";
|
||||
$lang['statistics_distances_and_mode'] = ", mode : ";
|
||||
$lang['statistics_distances_and_power'] = ", power : ";
|
||||
$lang['statistics_distances_and_propagation'] = ", propagation : ";
|
||||
$lang['statistics_distances_no_qsos_to_plot'] = "No QSOs found to plot.";
|
||||
$lang['statistics_distances_qsos_with'] = "QSOs with";
|
||||
$lang['statistics_distances_and_band'] = "and band";
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
@ -55,16 +48,8 @@ $lang['statistics_timeline'] = "Timeline";
|
|||
*
|
||||
*/
|
||||
|
||||
$lang['statistics_tab_yearly'] = "Yearly";
|
||||
$lang['statistics_tab_streaks'] = "Streaks";
|
||||
$lang['statistics_tab_weekdays'] = "Days of the week";
|
||||
$lang['statistics_tab_daily'] = "Daily";
|
||||
$lang['statistics_days_yearly'] = "Number of days with QSOs each year";
|
||||
$lang['statistics_days_with_qso'] = "Days with QSOs";
|
||||
$lang['statistics_qsos_each_day'] = "Number of QSOs each day";
|
||||
$lang['statistics_weekdays_with_qso'] = "QSOs breakdown by day of the week";
|
||||
$lang['statistics_number_of_qsos_this_day'] = "Number of QSOs this day";
|
||||
$lang['statistics_number_of_qsos_this_weekday'] = "Number of QSOs for this day of the week";
|
||||
$lang['statistics_days_with_qso'] = "Number of days with QSOs each year";
|
||||
$lang['statistics_days_with_qso_short'] = "Days with QSOs";
|
||||
$lang['statistics_dwq_longest_streak_in_log'] = "Longest streak with QSOs in the log";
|
||||
$lang['statistics_dwq_longest_streak_in_log_hint'] = "A maximum of the 10 longest streaks are shown!";
|
||||
$lang['statistics_dwq_streak_continuous_days'] = "Streak (continuous days with QSOs)";
|
||||
|
|
@ -72,3 +57,4 @@ $lang['statistics_dwq_current_streak_in_log'] = "Current streak with QSOs in the
|
|||
$lang['statistics_dwq_current_streak_continuous_days'] = "Current streak (continuous days with QSOs)";
|
||||
$lang['statistics_dwq_make_qso_to_extend_streak'] = "If you make a QSO today, you can continue to extend your streak... or else your current streak will be broken!";
|
||||
$lang['statistics_dwq_no_current_streak'] = "No current streak found!";
|
||||
|
||||
|
|
|
|||
|
|
@ -2,16 +2,15 @@
|
|||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['account_logbook_fields'] = '日志显示内容';
|
||||
$lang['account_logbook_fields'] = '日志簿显示内容';
|
||||
$lang['account_column1_text'] = '第1列';
|
||||
$lang['account_column2_text'] = '第2列';
|
||||
$lang['account_column3_text'] = '第3列';
|
||||
$lang['account_column4_text'] = '第4列';
|
||||
$lang['account_column5_text'] = '第5列(仅日志页面展示)';
|
||||
$lang['account_column5_text'] = '第5列(仅日志簿页面展示)';
|
||||
|
||||
$lang['account_create_user_account'] = '创建账户';
|
||||
$lang['account_create_user_account'] = '创建用户账户';
|
||||
$lang['account_edit_account'] = '编辑账户';
|
||||
$lang['account_remember_me'] = 'Remember me';
|
||||
|
||||
$lang['account_account_information'] = '账户信息';
|
||||
$lang['account_user'] = "用户";
|
||||
|
|
@ -31,57 +30,57 @@ $lang['account_personal_information'] = '个人信息';
|
|||
$lang['account_first_name'] = '姓';
|
||||
$lang['account_last_name'] = '名';
|
||||
|
||||
$lang['account_hamradio_information'] = "HAM信息";
|
||||
$lang['account_hamradio_information'] = "Ham Radio";
|
||||
$lang['account_callsign'] = '呼号';
|
||||
$lang['account_gridsquare'] = '网格坐标';
|
||||
$lang['account_gridsquare'] = '梅登海德网格';
|
||||
|
||||
$lang['account_cloudlog_preferences'] = '偏好';
|
||||
$lang['account_cloudlog_preferences'] = '偏好选项';
|
||||
$lang['account_timezone'] = '时区';
|
||||
$lang['account_date_format'] = '日期格式';
|
||||
$lang['account_log_end_time'] = '单独记录QSO结束时间';
|
||||
$lang['account_log_end_time_hint'] = '如果想分别记录QSO的开始和结束时间,选择\'是\',若选择\'否\'则QSO开始与结束时间相同';
|
||||
$lang['account_quicklog_feature'] = "快速日志";
|
||||
$lang['account_quicklog_feature_hint'] = "快速日志功能可以使用标题栏中的搜索字段来记录呼号";
|
||||
$lang['account_quicklog_enter'] = "快速日志 - 回车键操作";
|
||||
$lang['account_quicklog_enter_hint'] = "在快速日志字段中按 '回车键' 后应执行的操作";
|
||||
$lang['account_log_end_time_hint'] = '如果想分别记录QSO的开始和结束时间,选择\'是\',若选择\'否\'则QSO开始与结束时间相同。';
|
||||
$lang['account_quicklog_feature'] = "快速日志功能";
|
||||
$lang['account_quicklog_feature_hint'] = "快速日志功能可以使用标题栏中的搜索字段来记录呼号。";
|
||||
$lang['account_quicklog_enter'] = "快速日志 - 回车键行为";
|
||||
$lang['account_quicklog_enter_hint'] = "在快速日志字段中按 回车键 后应执行什么操作?";
|
||||
$lang['account_quicklog_enter_log'] = "记录呼号";
|
||||
$lang['account_quicklog_enter_search'] = "查询呼号";
|
||||
$lang['account_measurement_preferences'] = '距离单位选择';
|
||||
$lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = '选择您登录账户时显示偏好的日期格式';
|
||||
$lang['account_measurement_preferences'] = '距离单位偏好';
|
||||
$lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = '选择您登录账户时要显示的日期格式';
|
||||
$lang['account_choose_which_unit_distances_will_be_shown_in'] = '选择距离单位';
|
||||
$lang['account_cloudlog_language'] = 'Cloudlog语言';
|
||||
$lang['account_choose_cloudlog_language'] = '选择Cloudlog语言';
|
||||
$lang['account_choose_cloudlog_language'] = '选择Cloudlog语言。';
|
||||
|
||||
$lang['account_main_menu'] = '主菜单';
|
||||
$lang['account_show_notes_in_the_main_menu'] = '在主菜单显示便签';
|
||||
$lang['account_show_notes_in_the_main_menu'] = '在主菜单显示便签栏';
|
||||
|
||||
$lang['account_gridsquare_and_location_autocomplete'] = '自动填写网格坐标和位置';
|
||||
$lang['account_gridsquare_and_location_autocomplete'] = '自动填写梅登海德网格和位置';
|
||||
$lang['account_location_auto_lookup'] = '自动查找位置';
|
||||
$lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = '如果开启本选项,将根据位置名称获取网格坐标';
|
||||
$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = '根据 SOTA 编号自动查找网格坐标和山峰';
|
||||
$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = '根据 WWFF 编号自动查找网格坐标和保护区';
|
||||
$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = '根据 POTA 编号自动查找网格坐标和公园';
|
||||
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = '开启此项设置,将会通过API获取名称和网格坐标,并填写位置和网格定位';
|
||||
$lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = '如果开启本选项,将根据位置名称获取梅登海德网格。';
|
||||
$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = '根据 SOTA 编号自动查找梅登海德网格和峰名。';
|
||||
$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = '根据 WWFF 编号自动查找梅登海德网格和名称。';
|
||||
$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = '根据 POTA 编号自动查找梅登海德网格和名称。';
|
||||
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = '如果开启此项设置,将从API获取名称和梅登海德网格,并填写位置和定位器。';
|
||||
|
||||
$lang['account_previous_qsl_type'] = '上一个QSL方式';
|
||||
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = '选择要在上一个QSO部分中显示的QSL方式';
|
||||
$lang['account_previous_qsl_type'] = '上一个QSL类型';
|
||||
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = '选择要在上一个QSO部分中显示的QSL类型。';
|
||||
|
||||
$lang['account_qrzcom_hamqthcom_images'] = 'qrz.com/hamqth.com 图片';
|
||||
$lang['account_show_profile_picture_of_qso_partner_from_qrzcom_hamqthcom_profile_in_the_log_qso_section'] = '在日志QSO部分中显示由 qrz.com 中 hamqth.com 配置文件所获得的对方个人资料图片';
|
||||
$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = '请在 general_config.php 中设置 qrz.com/hamqth.com 的凭据';
|
||||
$lang['account_qrzcom_hamqthcom_images'] = 'qrz.com/hamqth.com Images';
|
||||
$lang['account_show_profile_picture_of_qso_partner_from_qrzcom_hamqthcom_profile_in_the_log_qso_section'] = '在日志QSO部分中显示qrz.com/hamqth.com配置文件的QSO合作伙伴的个人资料图片。';
|
||||
$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = '请在general_config.php文件中设置qrz.com/hamqth.com凭据。';
|
||||
|
||||
$lang['account_amsat_status_upload'] = '上传AMSAT';
|
||||
$lang['account_upload_status_of_sat_qsos_to'] = '上传卫星状态到';
|
||||
$lang['account_amsat_status_upload'] = '上传到AMSAT';
|
||||
$lang['account_upload_status_of_sat_qsos_to'] = '上传卫星QSO到';
|
||||
|
||||
$lang['account_logbook_of_the_world'] = 'Logbook of the World(LoTW)';
|
||||
$lang['account_logbook_of_the_world_lotw_username'] = 'Logbook of The World (LoTW) 用户名';
|
||||
$lang['account_logbook_of_the_world_lotw_password'] = 'Logbook of The World (LoTW) 密码';
|
||||
$lang['account_leave_blank_to_keep_existing_password'] = '留空以保留现有密码';
|
||||
|
||||
$lang['account_clublog'] = 'Clublog';
|
||||
$lang['account_clublog_email_callsign'] = 'Clublog 邮件地址/呼号';
|
||||
$lang['account_clublog_password'] = 'Clublog 密码';
|
||||
$lang['account_the_email_or_callsign_you_use_to_login_to_club_log'] = '登录Clublog的电子邮件或呼号';
|
||||
$lang['account_clublog'] = 'Club Log(俱乐部日志)';
|
||||
$lang['account_clublog_email_callsign'] = 'Club Log 邮件地址/呼号';
|
||||
$lang['account_clublog_password'] = 'Club Log 密码';
|
||||
$lang['account_the_email_or_callsign_you_use_to_login_to_club_log'] = '您用于登录Club Log的电子邮件或呼号。';
|
||||
|
||||
$lang['account_eqsl'] = 'eQSL';
|
||||
$lang['account_eqslcc_username'] = 'eQSL.cc 用户名';
|
||||
|
|
@ -91,14 +90,14 @@ $lang['account_save_account_changes'] = '保存账户更改';
|
|||
$lang['account_create_account'] = '创建账户';
|
||||
|
||||
$lang['account_delete_user_account'] = '删除用户账户';
|
||||
$lang['account_are_you_sure_you_want_to_delete_the_user_account'] = '是否删除此用户账户';
|
||||
$lang['account_yes_delete_this_user'] = '是,删除';
|
||||
$lang['account_no_do_not_delete_this_user'] = '不,保留';
|
||||
$lang['account_are_you_sure_you_want_to_delete_the_user_account'] = '您确定要删除用户账户吗?';
|
||||
$lang['account_yes_delete_this_user'] = '是的,删除此用户';
|
||||
$lang['account_no_do_not_delete_this_user'] = '不,不要删除此用户';
|
||||
|
||||
$lang['account_forgot_password'] = '忘记密码';
|
||||
$lang['account_you_can_reset_your_password_here'] = '在此处重置密码';
|
||||
$lang['account_you_can_reset_your_password_here'] = '您可以在此处重置密码。';
|
||||
$lang['account_reset_password'] = '重置密码';
|
||||
$lang['account_the_email_field_is_required'] = '电子邮件(必填)';
|
||||
$lang['account_the_email_field_is_required'] = '电子邮件必填';
|
||||
$lang['account_confirm_password'] = '确认密码';
|
||||
|
||||
$lang['account_forgot_your_password'] = '忘记密码?';
|
||||
|
|
@ -115,21 +114,16 @@ $lang['account_gridmap_default_band'] = '默认波段';
|
|||
$lang['account_qsl_settings'] = '默认QSL方式';
|
||||
|
||||
$lang['account_winkeyer'] = 'Winkeyer';
|
||||
$lang['account_winkeyer_hint'] = "Cloudlog 中对 Winkeyer 的支持是实验性的,请在使用前先阅读 <a href='https://github.com/magicbug/Cloudlog/wiki/Winkey' target='_blank'>https://github.com/magicbug/Cloudlog/wiki/Winkey</a>";
|
||||
$lang['account_winkeyer_hint'] = "Cloudlog 中对 Winkeyer 的支持是实验性的,请在开启前先阅读 <a href='https://github.com/magicbug/Cloudlog/wiki/Winkey' target='_blank'>https://github.com/magicbug/Cloudlog/wiki/Winkey</a>。";
|
||||
$lang['account_winkeyer_enabled'] = "启用 Winkeyer 功能";
|
||||
|
||||
$lang['account_map_params'] = "地图设置";
|
||||
$lang['account_map_qso_by_default'] = "QSO (默认)";
|
||||
$lang['account_map_qso_confirm'] = "QSO (已确认)";
|
||||
$lang['account_map_qso_confirm_same_qso'] = "(如果选择'不',则显示 ".$lang['account_map_qso_by_default'].")";
|
||||
$lang['account_map_params'] = "Map Settings";
|
||||
$lang['account_map_qso_by_default'] = "QSO (by default)";
|
||||
$lang['account_map_qso_confirm'] = "QSO (confirmed)";
|
||||
$lang['account_map_qso_confirm_same_qso'] = "(If 'No', displayed as ".$lang['account_map_qso_by_default'].")";
|
||||
|
||||
$lang['account_general_information'] = "基本信息";
|
||||
$lang['account_qso_logging_options'] = "QSO录入选项";
|
||||
$lang['account_third_party_services'] = "第三方服务";
|
||||
$lang['account_default_values'] = "默认值";
|
||||
$lang['account_miscellaneous'] = "其他";
|
||||
|
||||
$lang['account_hamsat'] = "Hams.at";
|
||||
$lang['account_hamsat_private_feed_key'] = "Private Feed Key";
|
||||
$lang['account_hamsat_hint'] = "See your profile at <a href='https://hams.at/users/settings' target='_blank'>https://hams.at/users/settings</a>.";
|
||||
$lang['account_hamsat_workable_only'] = "Show Workable Passes Only";
|
||||
$lang['account_general_information'] = "General Information";
|
||||
$lang['account_qso_logging_options'] = "QSO Logging Options";
|
||||
$lang['account_third_party_services'] = "Third Party Services";
|
||||
$lang['account_default_values'] = "Default Values";
|
||||
$lang['account_miscellaneous'] = "Miscellaneous";
|
||||
|
|
@ -22,31 +22,31 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
// $lang['general_word_important'] --> application/language/english/general_words_lang.php
|
||||
$lang['adif_alert_log_files_type'] = "日志文件的后缀必须是.adi";
|
||||
$lang['adif_alert_log_files_type'] = "Log文件的拓展名必须是.adi";
|
||||
// $lang['general_word_warning'] --> application/language/english/general_words_lang.php "PHP Upload Warning"
|
||||
// $lang['gen_max_file_upload_size'] --> application/language/english/general_words_lang.php "PHP Upload Warning"
|
||||
|
||||
$lang['adif_select_stationlocation'] = "选择台站位置";
|
||||
$lang['adif_select_stationlocation'] = "选择站点位置";
|
||||
// $lang['gen_hamradio_callsign'] --> application/language/english/general_words_lang.php
|
||||
|
||||
// The File Input is translated by the Browser
|
||||
$lang['adif_file_label'] = "ADIF 文件";
|
||||
|
||||
$lang['adif_hint_no_info_in_file'] = "如果导入的ADIF文件不包含此信息,选择此项";
|
||||
$lang['adif_hint_no_info_in_file'] = "如果导入的ADIF文件不包含此信息,选择此项。";
|
||||
|
||||
$lang['adif_import_dup'] = "导入重复的QSO";
|
||||
$lang['adif_mark_imported_lotw'] = "标记导入的QSO为已上传至 LoTW";
|
||||
$lang['adif_mark_imported_hrdlog'] = "标记导入的QSO为已上传至 HRDLog Logbook";
|
||||
$lang['adif_mark_imported_hrdlog'] = "标记导入的QSO为已上传至 HRDLog.net Logbook";
|
||||
$lang['adif_mark_imported_qrz'] = "标记导入的QSO为已上传至 QRZ Logbook";
|
||||
$lang['adif_mark_imported_clublog'] = "标记导入的QSO为已上传至 Clublog Logbook";
|
||||
|
||||
$lang['adif_dxcc_from_adif'] = "使用ADIF文件中的DXCC信息";
|
||||
$lang['adif_dxcc_from_adif_hint'] = "如果不选择,Cloudlog将会自动判断QSO的DXCC";
|
||||
$lang['adif_dxcc_from_adif_hint'] = "如果不选择,Cloudlog会尝试自动确定DXCC信息。";
|
||||
|
||||
$lang['adif_always_use_login_call_as_op'] = "总是在导入时使用登录的呼号作为操作者名称";
|
||||
|
||||
$lang['adif_ignore_station_call'] = "导入时忽略台站的呼号";
|
||||
$lang['adif_ignore_station_call_hint'] = "如果选择,Cloudlog会尝试导入ADIF文件中的 <b>所有</b> QSO,而不判断是否与所选台站位置匹配";
|
||||
$lang['adif_ignore_station_call_hint'] = "如果选择,Cloudlog会尝试导入ADIF文件中的 <b>所有</b> QSO,无论他们是否与所选台站位置匹配。";
|
||||
|
||||
$lang['adif_upload'] = "上传";
|
||||
|
||||
|
|
@ -56,12 +56,12 @@ ADIF Export
|
|||
___________________________________________________________________________________________
|
||||
*/
|
||||
|
||||
$lang['adif_export_take_it_anywhere'] = "导出日志";
|
||||
$lang['adif_export_take_it_anywhere_hint'] = "导出 ADIF 方便您将日志导入到 LoTW 等第三方应用程序或备份日志";
|
||||
$lang['adif_export_take_it_anywhere'] = "导出你的日志!";
|
||||
$lang['adif_export_take_it_anywhere_hint'] = "导出 ADIF 允许您将日志导入到 LoTW 等第三方应用程序或只是为了保留备份。";
|
||||
|
||||
|
||||
$lang['adif_mark_exported_lotw'] = "将导出的 QSO 标记为已上传到 LoTW";
|
||||
$lang['adif_mark_exported_no_lotw'] = "导出没有上传到 LoTW 的 QSO";
|
||||
$lang['adif_mark_exported_no_lotw'] = "导出没有上传到 LoTw 的 QSO";
|
||||
|
||||
$lang['adif_export_qso'] = "导出 QSO";
|
||||
|
||||
|
|
@ -75,12 +75,12 @@ Logbook of the World
|
|||
___________________________________________________________________________________________
|
||||
*/
|
||||
|
||||
$lang['adif_lotw_export_if_selected'] = "如果未选择日期范围,则所有 QSO 都将被标记";
|
||||
$lang['adif_lotw_export_if_selected'] = "如果未选择日期范围,则所有 QSO 都将被标记!";
|
||||
$lang['adif_mark_qso_as_exported_to_lotw'] = "将 QSO 标记为导出到 LoTW";
|
||||
|
||||
$lang['adif_qso_marked'] = "QSO 已标记";
|
||||
$lang['adif_yay_its_done'] = "导出成功";
|
||||
$lang['adif_qso_lotw_marked_confirm'] = "这些 QSO 已经被标记为已导出到 LoTW";
|
||||
$lang['adif_yay_its_done'] = "耶, 完事儿了!";
|
||||
$lang['adif_qso_lotw_marked_confirm'] = "这些 QSO 已经被标记为已导出到 LoTW。";
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
|
|
@ -88,16 +88,16 @@ DARC DCL
|
|||
___________________________________________________________________________________________
|
||||
*/
|
||||
$lang['adif_dcl_text_pre'] = "前往";
|
||||
$lang['adif_dcl_text_post'] = "并导出包含已确认 DOK 的日志。为了加快该过程,您可以仅选择 DL QSO 进行下载(即将'DL'放入前缀列表中)。可以在此处上传已下载的 ADIF 文件,以便使用 DOK 信息更新 QSO";
|
||||
$lang['adif_dcl_text_post'] = "并导出包含已确认 DOK 的日志。为了加快该过程,您可以仅选择 DL QSO 进行下载(即将“DL”放入前缀列表中)。可以在此处上传下载的 ADIF 文件,以便使用 DOK 信息更新 QSO。";
|
||||
|
||||
$lang['only_confirmed_qsos'] = "仅导入在 DCL 上确认的 QSO 的 DOK 数据";
|
||||
$lang['only_confirmed_qsos_hint'] = "如果您还想使用 DCL 中未经确认的 QSO 的数据更新 DOK,请取消选中";
|
||||
$lang['only_confirmed_qsos'] = "仅导入在 DCL 上确认的 QSO 的 DOK 数据。";
|
||||
$lang['only_confirmed_qsos_hint'] = "如果您还想使用 DCL 中未经确认的 QSO 的数据更新 DOK,请取消选中。";
|
||||
|
||||
$lang['overwrite_by_dcl'] = "用 DCL 覆盖日志中现有的 DOC(如果不同)";
|
||||
$lang['overwrite_by_dcl_hint'] = "如果选中,Cloudlog 将使用 DCL 日志中的 DOK 强制覆盖现有的 DOK 信息。";
|
||||
|
||||
$lang['ignore_ambiguous'] = "忽略无法匹配的 QSO";
|
||||
$lang['ignore_ambiguous_hint'] = "如果不勾选,会显示 Cloudlog 中无法匹配的 QSO 信息";
|
||||
$lang['ignore_ambiguous_hint'] = "如果不勾选,会显示 Cloudlog 中找不到的 QSO 信息。";
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
|
|
@ -106,14 +106,14 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['adif_imported'] = "ADIF 已导入";
|
||||
$lang['adif_yay_its_imported'] = "导入成功";
|
||||
$lang['adif_yay_its_imported'] = "耶,导入成功!";
|
||||
$lang['adif_import_confirm'] = "ADIF 文件已成功导入";
|
||||
|
||||
$lang['adif_import_dupes_inserted'] = " <b>重复的QSO已导入</b>";
|
||||
$lang['adif_import_dupes_skipped'] = " 已跳过重复的QSO";
|
||||
$lang['adif_import_dupes_inserted'] = " <b>重复条目已导入!</b>";
|
||||
$lang['adif_import_dupes_skipped'] = " 重复条目已跳过。";
|
||||
|
||||
$lang['adif_import_errors'] = "ADIF 文件错误";
|
||||
$lang['adif_import_errors_hint'] = "ADIF 文件错误,QSO 虽然已添加,但以下字段尚未填充。";
|
||||
$lang['adif_import_errors'] = "ADIF 错误";
|
||||
$lang['adif_import_errors_hint'] = "ADIF 错误,QSO 虽然已添加,但以下字段尚未填充。";
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
|
|
@ -125,13 +125,13 @@ $lang['dcl_results'] = "DCL DOK 更新结果";
|
|||
$lang['dcl_info_updated'] = "DOK 的 DCL 信息已更新。";
|
||||
$lang['dcl_qsos_updated'] = "已更新的QSO";
|
||||
$lang['dcl_qsos_ignored'] = "已忽略的QSO";
|
||||
$lang['dcl_qsos_unmatched'] = "无法匹配的QSO";
|
||||
$lang['dcl_qsos_unmatched'] = "不匹配的QSO";
|
||||
$lang['dcl_no_qsos_updated'] = "未找到可以更新的 QSO。";
|
||||
$lang['dcl_dok_errors'] = "DOK 错误";
|
||||
$lang['dcl_dok_errors_details'] = "与 DCL 相比,日志中 DOK 的数据不同";
|
||||
$lang['dcl_dok_errors_details'] = "与 DCL 相比,您的日志中 DOK 的数据不同";
|
||||
$lang['dcl_qsl_status'] = "DCL QSL 状态";
|
||||
$lang['dcl_qsl_status_c'] = "已经通过 LoTW/Clublog/eQSL/竞赛 确认";
|
||||
$lang['dcl_qsl_status_mno'] = "已经通过奖项管理员确认";
|
||||
$lang['dcl_qsl_status_c'] = "已经通过 LoTW/Clublog/eQSL/Contest 确认";
|
||||
$lang['dcl_qsl_status_mno'] = "已经通过 award manager 确认";
|
||||
$lang['dcl_qsl_status_i'] = "已经通过 DCL 数据交叉检查确认";
|
||||
$lang['dcl_qsl_status_w'] = "等待确认";
|
||||
$lang['dcl_qsl_status_x'] = "未确认";
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
$lang['admin_user_line1'] = 'Cloudlog至少需要配置一个用户才能运行。';
|
||||
$lang['admin_user_line2'] = '用户可以被分配不同的角色,这些角色赋予他们不同的权限,例如向日志簿添加 QSO 和访问Cloudlog API。';
|
||||
$lang['admin_user_line3'] = '页面右上方显示当前登录的用户。';
|
||||
$lang['admin_user_line4'] = "通过'重置密码'按钮,你可以向用户发送一封带有重置密码链接的邮件。您需要确保全局设定中的邮件设置配置正确";
|
||||
$lang['admin_user_line4'] = "With the password reset button, you can send a user an email containing a link to reset their password. To achieve this, ensure that the email settings in the global options are configured correctly.";
|
||||
|
||||
$lang['admin_user_list'] = '用户列表';
|
||||
|
||||
$lang['admin_user'] = '用户名';
|
||||
$lang['admin_email'] = '电子邮件';
|
||||
$lang['admin_type'] = '用户类型';
|
||||
$lang['admin_last_login'] = "最后登录";
|
||||
$lang['admin_last_login'] = "Last Login";
|
||||
$lang['admin_options'] = '设置';
|
||||
|
||||
$lang['admin_create_user'] = '创建用户';
|
||||
|
|
@ -25,18 +25,18 @@ $lang['admin_copy'] = '复制';
|
|||
$lang['admin_save'] = '保存';
|
||||
$lang['admin_close'] = '关闭';
|
||||
$lang['admin_user_accounts'] = '用户账户';
|
||||
$lang['admin_danger'] = '危险';
|
||||
$lang['admin_danger'] = '危险!';
|
||||
$lang['admin_experimental'] = "实验性功能";
|
||||
$lang['admin_password_reset'] = "重置密码";
|
||||
$lang['admin_password_reset'] = "Password Reset";
|
||||
|
||||
$lang['admin_email_settings_incorrect'] = "邮件设定出现错误";
|
||||
$lang['admin_password_reset_processed'] = "密码重置邮件已发送";
|
||||
$lang['admin_email_settings_incorrect'] = "Email settings are incorrect.";
|
||||
$lang['admin_password_reset_processed'] = "Password Reset E-Mail sent.";
|
||||
|
||||
|
||||
// Contest Menu
|
||||
// 将Conetest统一翻译为竞赛,去除中英文混用
|
||||
$lang['admin_contest_menu_line_1'] = '使用竞赛列表,您可以控制在比赛中记录 QSO 时显示哪些竞赛';
|
||||
$lang['admin_contest_menu_line_2'] = '启用的竞赛将显示在竞赛名称下拉列表中,而停用的竞赛将被隐藏且无法选择';
|
||||
$lang['admin_contest_menu_line_1'] = '使用竞赛列表,您可以控制在比赛中记录 QSO 时显示哪些竞赛。';
|
||||
$lang['admin_contest_menu_line_2'] = '启用的竞赛将显示在竞赛名称下拉列表中,而停用的竞赛将被隐藏且无法选择。';
|
||||
$lang['admin_contest_menu_name'] = '名称';
|
||||
$lang['admin_contest_menu_adif'] = 'ADIF 名称';
|
||||
$lang['admin_contest_menu_active'] = '启用';
|
||||
|
|
@ -44,7 +44,7 @@ $lang['admin_contest_menu_n_active'] = '停用';
|
|||
$lang['admin_contest_menu_activate'] = '启用';
|
||||
$lang['admin_contest_menu_deactivate'] = '停用';
|
||||
|
||||
$lang['admin_contest_add_contest'] = '添加竞赛';
|
||||
$lang['admin_contest_add_contest'] = '添加 Contest';
|
||||
$lang["admin_contest_create"] = "创建";
|
||||
$lang['admin_contest_all_active'] = '启用所有';
|
||||
$lang['admin_contest_all_deactive'] = '停用所有';
|
||||
|
|
@ -54,7 +54,7 @@ $lang['admin_contest_name_of_contest'] = '竞赛 名称';
|
|||
$lang['admin_contest_name_of_adif'] = '竞赛 在 ADIF 中的名称';
|
||||
$lang['admin_contest_edit_active_hint'] = '如果要列在竞赛列表中,则设置为启用';
|
||||
$lang['admin_contest_edit_update_contest'] = '更新竞赛';
|
||||
$lang['admin_contest_deletion_warning'] = '警告!您确定要删除以下竞赛吗:';
|
||||
$lang['admin_contest_active_all_warning'] = '警告!您确定要启用所有竞赛吗?';
|
||||
$lang['admin_contest_deactive_all_warning'] = '警告!您确定要停用所有竞赛吗?';
|
||||
$lang['admin_contest_deletion_warning'] = '注意!您确定要删除以下竞赛吗:';
|
||||
$lang['admin_contest_active_all_warning'] = '注意!您确定要启用所有竞赛吗?';
|
||||
$lang['admin_contest_deactive_all_warning'] = '注意!您确定要停用所有竞赛吗?';
|
||||
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_cq_description_ln1'] = "CQ 杂志 WAZ 奖状";
|
||||
$lang['awards_cq_description_ln2'] = "CQ 杂志来自美国,是世界上最受欢迎的业余无线电杂志之一 该杂志于 1945 年 1 月首次出版,重点关注业余无线电的奖项和实用方面";
|
||||
$lang['awards_cq_description_ln3'] = "WAZ 奖代表“Worked All Zones”,需要与所有 40 个 CQ 分区进行QSO并提供相应的确认";
|
||||
$lang['awards_cq_description_ln4'] = "您可以在<a href='https://cq-amateur-radio.com/cq_awards/cq_waz_awards/index_cq_waz_award.html' target='_blank'>CQ杂志</a>网站上,或查看童效勇和陈方老师编纂的《业余无线电通信》了解更多相关信息";
|
||||
$lang['awards_cq_description_ln2'] = "CQ 杂志位于美国,是世界上最受欢迎的业余无线电杂志之一。 该杂志于 1945 年 1 月首次出版,重点关注业余无线电的奖项和实用方面。";
|
||||
$lang['awards_cq_description_ln3'] = "WAZ 奖代表“Worked All Zones”,需要与所有 40 个 CQ 区域进行QSO并提供相应的确认。";
|
||||
$lang['awards_cq_description_ln4'] = "您可以在<a href='https://cq-amateur-radio.com/cq_awards/cq_waz_awards/index_cq_waz_award.html' target='_blank'>CQ杂志</a>网站上,或查看童效勇和陈方老师编纂的《业余无线电通信》了解更多相关信息。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -35,9 +35,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_dok_description_ln1'] = "DOK 奖状";
|
||||
$lang['awards_dok_description_ln2'] = "德国从东到西绵延 630 多公里,从北到南绵延近 900 公里 德国 8200 万居民中约有 70,000 人是有执照的HAM,其中 40,000 多人是 DARC 的成员 DOK 是一个为各个地方分会提供标识符的系统,其意思是“Deutscher Ortsverband Kenner”(英语:“德国地方协会标识符”)";
|
||||
$lang['awards_dok_description_ln3'] = "DOK 由代表地区的字母和代表地方分会的两位数字组成,例如 P03 Friedrichshafen(“Hamradio 展览”所在城市)或 F41 Baunatal(DARC 总部所在地) 注意:DOK 中的零是一个常见错误,通常被记录为字母 O";
|
||||
$lang['awards_dok_description_ln4'] = "此信息来自于<a href='https://www.darc.de/der-club/referate/conteste/wag-contest/en/service/districtsdoks/' target='_blank'>DARC 网站</ a>. 有关 DOK 奖项及其规则的信息,请参见 <a href='https://www.darc.de/der-club/referate/conteste/wag-contest/en/service/award-check/' target=' _blank'>此处</a>";
|
||||
$lang['awards_dok_description_ln2'] = "德国从东到西绵延 630 多公里,从北到南绵延近 900 公里。 德国 8200 万居民中约有 70,000 人是有执照的HAM,其中 40,000 多人是 DARC 的成员。 DOK 是一个为各个地方分会提供标识符的系统,其意思是“Deutscher Ortsverband Kenner”(英语:“德国地方协会标识符”)。";
|
||||
$lang['awards_dok_description_ln3'] = "DOK 由代表地区的字母和代表地方分会的两位数字组成,例如 P03 Friedrichshafen(“Hamradio 展览”所在城市)或 F41 Baunatal(DARC 总部所在地)。 注意:DOK 中的零是一个常见错误,通常被记录为字母 O。";
|
||||
$lang['awards_dok_description_ln4'] = "此信息来自于<a href='https://www.darc.de/der-club/referate/conteste/wag-contest/en/service/districtsdoks/' target='_blank'>DARC 网站</ a>. 有关 DOK 奖项及其规则的信息,请参见 <a href='https://www.darc.de/der-club/referate/conteste/wag-contest/en/service/award-check/' target=' _blank'>此处</a>。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -47,9 +47,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_dxcc_description_ln1'] = "DXCC 奖状";
|
||||
$lang['awards_dxcc_description_ln2'] = "DXCC 代表“DX Century Club”,这是一个基于通联国家/地区的奖项 DXCC 列表基于 W1CBD 的 Clinton B. DeSoto 于 1935 编写的一篇文章,标题为<a href='http://www.arrl.org/desoto' target='_blank'>“如何计算通联过的国家/地区, 新的 DX 评分系统'</a>";
|
||||
$lang['awards_dxcc_description_ln3'] = "您可以在 <a href='https://www.arrl.org/dxcc-rules' target='_blank'>ARRL 网站</a>上找到有关 DXCC 奖的所有信息";
|
||||
$lang['awards_dxcc_description_ln4'] = "重要提示:随着时间的推移,DXCC 列表的标准已经发生变化 该列表将保持不变,直到实体不再满足添加该实体时所依据的标准,此时该实体将被移至“已删除列表” 您还会在 Cloudlog 的列表中找到已删除的 DXCC 实体 请注意,这些 DXCC 实体已过时且不再有效(如 伪满洲国曾经也是一个合法的DXCC实体)";
|
||||
$lang['awards_dxcc_description_ln2'] = "DXCC 代表“DX Century Club”,这是一个基于通联国家/地区的奖项。 DXCC 列表基于 W1CBD 的 Clinton B. DeSoto 于 1935 年创建的一篇文章,标题为<a href='http://www.arrl.org/desoto' target='_blank'>“如何计算通联过的国家/地区, 新的 DX 评分系统'</a>。";
|
||||
$lang['awards_dxcc_description_ln3'] = "您可以在 <a href='https://www.arrl.org/dxcc-rules' target='_blank'>ARRL 网站</a>上找到有关 DXCC 奖的所有信息。";
|
||||
$lang['awards_dxcc_description_ln4'] = "重要提示:随着时间的推移,DXCC 列表的标准已经发生变化。 该列表将保持不变,直到实体不再满足添加该实体时所依据的标准,此时该实体将被移至“已删除列表”。 您还会在 Cloudlog 的列表中找到已删除的 DXCC 实体。 请注意,这些 DXCC 实体已过时且不再有效。(如 伪满洲国曾经也是一个合法的DXCC实体)";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -59,9 +59,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_ffma_description_ln1'] = "弗雷德·菲什纪念奖";
|
||||
$lang['awards_ffma_description_ln2'] = "Fred Fish 纪念奖是为了纪念 Fred Fish, W5FF (SK) 而设立,他是第一个在 6 米波段上通联并确认了美国 48 个邻近地区的所有 488 个网格的业余爱好者";
|
||||
$lang['awards_ffma_description_ln3'] = "该奖项将颁发给任何能够再次做到 W5FF 成就的业余爱好者";
|
||||
$lang['awards_ffma_description_ln4'] = "如需了解更多信息,您可以访问此链接:<a href='https://www.arrl.org/ffma' target='_blank'>https://www.arrl.org/ffma</a>";
|
||||
$lang['awards_ffma_description_ln2'] = "Fred Fish 纪念奖是为了纪念 Fred Fish, W5FF (SK) 而设立,他是第一个在 6 米波段上通联并确认了美国 48 个邻近地区的所有 488 个梅登黑德网格方格的业余爱好者。";
|
||||
$lang['awards_ffma_description_ln3'] = "该奖项将颁发给任何能够复制 W5FF 成就的业余爱好者。";
|
||||
$lang['awards_ffma_description_ln4'] = "如需了解更多信息,您可以访问此链接:<a href='https://www.arrl.org/ffma' target='_blank'>https://www.arrl.org/ffma</a>。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -71,9 +71,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_iota_description_ln1'] = "IOTA 奖状";
|
||||
$lang['awards_iota_description_ln2'] = "IOTA 是一项令人兴奋且创新的活动,吸引了全球数千名无线电爱好者的兴趣 它成立于 1964 年,致力于促进与世界各地岛屿电台的无线电联系,以增强所有活跃在业余频段的用户的体验 为了实现这一目标,它利用了岛屿周围普遍存在的神秘感";
|
||||
$lang['awards_iota_description_ln3'] = "它由Islands On The Air (IOTA) Ltd(简称IOTA Management)与英国无线电协会(RSGB)合作管理 IOTA管理层将世界上的岛屿分为大约1200个“IOTA组”,每个组都有不同数量的“counters”,这些“counters”都是合格的岛屿 这些列表发布在 IOTA 目录和 IOTA 网站上 IOTA Island Chaser 的目标是与尽可能多的这些组中的至少一个进行无线电通联 该计划有一套明确的规则,通过在荣誉榜和年度名单中公布参与者的表现,并通过证书和享有盛誉的奖项来认可,鼓励追逐者之间的友好竞争";
|
||||
$lang['awards_iota_description_ln4'] = "您还可以在 <a href='https://www.iota-world.org/' target='_blank'>IOTA WORLD 网站</a>上找到此信息";
|
||||
$lang['awards_iota_description_ln2'] = "IOTA 是一项令人兴奋且创新的活动,吸引了全球数千名无线电爱好者的兴趣。 它成立于 1964 年,致力于促进与世界各地岛屿电台的无线电联系,以增强所有活跃在业余频段的用户的体验。 为了实现这一目标,它利用了岛屿周围普遍存在的神秘感。";
|
||||
$lang['awards_iota_description_ln3'] = "它由Islands On The Air (IOTA) Ltd(简称IOTA Management)与英国无线电协会(RSGB)合作管理。 IOTA管理层将世界上的岛屿分为大约1200个“IOTA组”,每个组都有不同数量的“counters”,这些“counters”都是合格的岛屿。 这些列表发布在 IOTA 目录和 IOTA 网站上。 IOTA Island Chaser 的目标是与尽可能多的这些组中的至少一个进行无线电通联。 该计划有一套明确的规则,通过在荣誉榜和年度名单中公布参与者的表现,并通过证书和享有盛誉的奖项来认可,鼓励追逐者之间的友好竞争。";
|
||||
$lang['awards_iota_description_ln4'] = "您还可以在 <a href='https://www.iota-world.org/' target='_blank'>IOTA WORLD 网站</a>上找到此信息。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -83,9 +83,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_pota_description_ln1'] = "POTA 奖状";
|
||||
$lang['awards_pota_description_ln2'] = "Parks on the Air® (POTA 中文又名 空中花园) 于 2017 年初启动,当时 ARRL 的 National Parks on the Air 特别活动结束后 一群爱好者希望在一年的活动之后继续享受乐趣,因此,POTA 诞生了";
|
||||
$lang['awards_pota_description_ln3'] = "POTA 的工作原理与 SOTA 类似,都有激活者和猎人 奖项根据公园数量、地理区域等分为多个类别";
|
||||
$lang['awards_pota_description_ln4'] = "有关可用奖项和类别的更多信息,请访问<a href='https://parksontheair.com/pota-awards/' target='_blank'>Parks on the Air® 网站</a>(译者注:目前POTA中国由BH3XZT负责维护,POTA中国群聊:837917197)";
|
||||
$lang['awards_pota_description_ln2'] = "Parks on the Air® (POTA 中文又名 空中花园) 于 2017 年初启动,当时 ARRL 的 National Parks on the Air 特别活动结束后。 一群爱好者希望在一年的活动之后继续享受乐趣,因此,POTA 诞生了。";
|
||||
$lang['awards_pota_description_ln3'] = "POTA 的工作原理与 SOTA 类似,都有激活者和猎人。 奖项根据公园数量、地理区域等分为多个类别。";
|
||||
$lang['awards_pota_description_ln4'] = "有关可用奖项和类别的更多信息,请访问<a href='https://parksontheair.com/pota-awards/' target='_blank'>Parks on the Air® 网站</a>。(译者注:目前POTA中国由BH3XZT负责维护,POTA中国群聊:837917197)";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -95,9 +95,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_sig_description_ln1'] = "SIG 信息";
|
||||
$lang['awards_sig_description_ln2'] = "SIG 或签名类别提供了对 Cloudlog 中未实施的奖励使用任何类型的“奖励签名”的可能";
|
||||
$lang['awards_sig_description_ln3'] = "其原因是常见的 ADIF 格式仅为某些奖项提供了几个专用字段 SIG 仍然可以使用和评估所有其他类型的签名标记";
|
||||
$lang['awards_sig_description_ln4'] = "在 QSO 处理中,您会发现两个字段:“SIG”包含实际标记,在奖励评估中也可见,“SIG INFO”包含签名的描述 这两个字段都可以自由定制";
|
||||
$lang['awards_sig_description_ln2'] = "SIG 或签名类别提供了对 Cloudlog 中未实施的奖励使用任何类型的“奖励签名”的可能。";
|
||||
$lang['awards_sig_description_ln3'] = "其原因是常见的 ADIF 格式仅为某些奖项提供了几个专用字段。 SIG 仍然可以使用和评估所有其他类型的签名标记。";
|
||||
$lang['awards_sig_description_ln4'] = "在 QSO 处理中,您会发现两个字段:“SIG”包含实际标记,在奖励评估中也可见,“SIG INFO”包含签名的描述。 这两个字段都可以自由定制。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -107,8 +107,8 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_sota_description_ln1'] = "SOTA 奖状";
|
||||
$lang['awards_sota_description_ln2'] = "SOTA(空中山峰)是一项针对无线电业余爱好者的奖励计划,鼓励在山区进行便携式操作";
|
||||
$lang['awards_sota_description_ln3'] = "它在全球近百个国家全面运营 每个国家/地区都有自己的协会,该协会定义了该协会内公认的 SOTA 峰会 每次登顶都会为激活者和追逐者赢得与峰顶高度相关的分数 各种分数均可获得证书,最终获得著名的“山羊”和“棚屋树懒”奖杯 激活者和追赶者的荣誉榜保存在 SOTA 在线数据库中";
|
||||
$lang['awards_sota_description_ln2'] = "SOTA(空中山峰)是一项针对无线电业余爱好者的奖励计划,鼓励在山区进行便携式操作。";
|
||||
$lang['awards_sota_description_ln3'] = "它在全球近百个国家全面运营。 每个国家/地区都有自己的协会,该协会定义了该协会内公认的 SOTA 峰会。 每次登顶都会为激活者和追逐者赢得与峰顶高度相关的分数。 各种分数均可获得证书,最终获得著名的“山羊”和“棚屋树懒”奖杯。 激活者和追赶者的荣誉榜保存在 SOTA 在线数据库中。";
|
||||
$lang['awards_sota_description_ln4'] = "如需了解更多信息,请访问:<a href='https://www.sota.org.uk/' target='_blank'>https://www.sota.org.uk/</a>.";
|
||||
|
||||
|
||||
|
|
@ -119,9 +119,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_counties_description_ln1'] = "US County 奖状";
|
||||
$lang['awards_counties_description_ln2'] = "美国县奖 (USA-CA) 由 CQ 杂志赞助,颁发给与指定数量的美国县进行确认的双向无线电联络,其规则和条件可参见 <a href='https://cq -amateur-radio.com/cq_awards/cq_usa_ca_awards/cq_usa_ca_awards.html' target='_blank'>此处</a>";
|
||||
$lang['awards_counties_description_ln3'] = "USA-CA 可供全世界所有获得许可的业余爱好者使用,并颁发给所有县联络人的个人,无论使用的呼号、操作地点或日期如何";
|
||||
$lang['awards_counties_description_ln4'] = "美国-加拿大还可以获得 SWL 奖项";
|
||||
$lang['awards_counties_description_ln2'] = "美国县奖 (USA-CA) 由 CQ 杂志赞助,颁发给与指定数量的美国县进行确认的双向无线电联络,其规则和条件可参见 <a href='https://cq -amateur-radio.com/cq_awards/cq_usa_ca_awards/cq_usa_ca_awards.html' target='_blank'>此处</a>。";
|
||||
$lang['awards_counties_description_ln3'] = "USA-CA 可供全世界所有获得许可的业余爱好者使用,并颁发给所有县联络人的个人,无论使用的呼号、操作地点或日期如何。";
|
||||
$lang['awards_counties_description_ln4'] = "美国-加拿大还可以获得 SWL 奖项。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -131,9 +131,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_us_gridmaster_description_ln1'] = "美国网格大师奖状";
|
||||
$lang['awards_us_gridmaster_description_ln2'] = "GridMaster 奖是最负盛名的 AMSAT 奖项,由 Star Comm Group 于 2014 年首次推出 全球所有业余无线电操作员都可以使用它,他们可以通过卫星在美国所有 488 个网格方格通联,并且可以为每个通联到的人提供 QSL 确认";
|
||||
$lang['awards_us_gridmaster_description_ln3'] = "来自<a href='https://www.amsat.org/gridmaster/' target='_blank'>网站</a>的官方信息:必须通过业余卫星与每个网格建立双向通信 没有最低信号报告要求 联系必须在同一地点或两个地点相距不超过 200 公里 申请人在奖励申请中的证明作为对遵守距离规则的确认 当个人在另一个 200 公里圈内的另一个地点获得奖项时,可以申请并获得多个 GridMaster 奖项";
|
||||
$lang['awards_us_gridmaster_description_ln4'] = "该地图仅显示了 SAT 上有效的 QSO";
|
||||
$lang['awards_us_gridmaster_description_ln2'] = "GridMaster 奖是最负盛名的 AMSAT 奖项,由 Star Comm Group 于 2014 年首次推出。 全球所有业余无线电操作员都可以使用它,他们可以通过卫星在美国所有 488 个网格方格通联,并且可以为每个通联到的人提供 QSL 确认。";
|
||||
$lang['awards_us_gridmaster_description_ln3'] = "来自<a href='https://www.amsat.org/gridmaster/' target='_blank'>网站</a>的官方信息:必须通过业余卫星与每个网格建立双向通信。 没有最低信号报告要求。 联系必须在同一地点或两个地点相距不超过 200 公里。 申请人在奖励申请中的证明作为对遵守距离规则的确认。 当个人在另一个 200 公里圈内的另一个地点获得奖项时,可以申请并获得多个 GridMaster 奖项。";
|
||||
$lang['awards_us_gridmaster_description_ln4'] = "该地图仅显示了 SAT 上有效的 QSO。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -143,8 +143,8 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_ja_gridmaster_description_ln1'] = "日本网格大师奖";
|
||||
$lang['awards_ja_gridmaster_description_ln2'] = "正如美国网格大师一样,该奖项是基于日本所有网格通联的奖项";
|
||||
$lang['awards_ja_gridmaster_description_ln3'] = "有关该奖项的更多信息和规则仍有待确定";
|
||||
$lang['awards_ja_gridmaster_description_ln2'] = "正如美国网格大师一样,该奖项是基于日本所有网格通联的奖项。";
|
||||
$lang['awards_ja_gridmaster_description_ln3'] = "有关该奖项的更多信息和规则仍有待确定。";
|
||||
$lang['awards_ja_gridmaster_description_ln4'] = "";
|
||||
|
||||
|
||||
|
|
@ -155,9 +155,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_vucc_description_ln1'] = "VUCC - VHF/UHF 世纪俱乐部奖";
|
||||
$lang['awards_vucc_description_ln2'] = "VHF/UHF 世纪俱乐部奖颁发给在所需频段上工作和确认的最小数量的网格";
|
||||
$lang['awards_vucc_description_ln3'] = "官方信息和规则可以在本文档中找到:<a href='https://www.amsat.org/gridmaster/' target='_blank'>点击此处</a>";
|
||||
$lang['awards_vucc_description_ln4'] = "仅 VHF/UHF 频段";
|
||||
$lang['awards_vucc_description_ln2'] = "VHF/UHF 世纪俱乐部奖颁发给在所需频段上工作和确认的最小数量的网格。";
|
||||
$lang['awards_vucc_description_ln3'] = "官方信息和规则可以在本文档中找到:<a href='https://www.amsat.org/gridmaster/' target='_blank'>点击此处</a>。";
|
||||
$lang['awards_vucc_description_ln4'] = "仅 VHF/UHF 频段。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -167,9 +167,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_was_description_ln1'] = "WAS 奖状";
|
||||
$lang['awards_was_description_ln2'] = "ARRL 最受欢迎的奖项是“Worked All States Award” 已向世界各地的HAM颁发了数以千计的奖项 在ARRL成立101周年之际,他们重新设计了证书和项目,希望能够精简和完善奖励项目";
|
||||
$lang['awards_was_description_ln3'] = "WAS(在所有州通联过)奖面向全世界所有提交证明并书面确认与美利坚合众国 50 个州联系的业余爱好者 美国及其属地的业余爱好者必须是 ARRL 的成员才能申请 WAS 来自美国境外的申请人不受此要求的约束";
|
||||
$lang['awards_was_description_ln4'] = "ARRL WAS 奖的所有信息和规则均可在<a href='https://www.arrl.org/was' target='_blank'>此处</a>找到";
|
||||
$lang['awards_was_description_ln2'] = "ARRL 最受欢迎的奖项是“Worked All States Award”。 已向世界各地的HAM颁发了数以千计的奖项。 在ARRL成立101周年之际,他们重新设计了证书和项目,希望能够精简和完善奖励项目。";
|
||||
$lang['awards_was_description_ln3'] = "WAS(在所有州通联过)奖面向全世界所有提交证明并书面确认与美利坚合众国 50 个州联系的业余爱好者。 美国及其属地的业余爱好者必须是 ARRL 的成员才能申请 WAS。 来自美国境外的申请人不受此要求的约束。";
|
||||
$lang['awards_was_description_ln4'] = "ARRL WAS 奖的所有信息和规则均可在<a href='https://www.arrl.org/was' target='_blank'>此处</a>找到。";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -179,9 +179,9 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['awards_wwff_description_ln1'] = "WWFF - 世界动植物奖";
|
||||
$lang['awards_wwff_description_ln2'] = "WWFF,即“业余无线电世界动植物群”,鼓励获得许可的业余无线电操作员离开棚屋,在全球动植物保护区 (PFF) 进行便携式操作";
|
||||
$lang['awards_wwff_description_ln3'] = "全球已有超过 26,000 个动植物保护区 (PFF) 已在 WWFF 名录中注册 猎人和激活者可以申请全球和国内的丰富多彩的奖项";
|
||||
$lang['awards_wwff_description_ln4'] = "如需了解更多信息,请访问:<a href='https://wwff.co/awards/' target='_blank'>https://wwff.co/awards/</a>";
|
||||
$lang['awards_wwff_description_ln2'] = "WWFF,即“业余无线电世界动植物群”,鼓励获得许可的业余无线电操作员离开棚屋,在全球动植物保护区 (PFF) 进行便携式操作。";
|
||||
$lang['awards_wwff_description_ln3'] = "全球已有超过 26,000 个动植物保护区 (PFF) 已在 WWFF 名录中注册。 猎人和激活者可以申请全球和国内的丰富多彩的奖项。";
|
||||
$lang['awards_wwff_description_ln4'] = "如需了解更多信息,请访问:<a href='https://wwff.co/awards/' target='_blank'>https://wwff.co/awards/</a>。";
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
|
|
@ -189,17 +189,7 @@ WAJA -- Use all 4 Lines of Text
|
|||
___________________________________________________________________________________________
|
||||
*/
|
||||
|
||||
$lang['awards_waja_description_ln1'] = "WAJA - 通联全日本都道府县奖状";
|
||||
$lang['awards_waja_description_ln2'] = "WAJA,通联全日本都道府县奖状,鼓励许可的业余无线电操作者与所有日本都道府县的电台通联";
|
||||
$lang['awards_waja_description_ln3'] = "也许可以通过展示出已经通联(或收听)过来自日本47个都道府县的电台发来的QSL卡片,并按照WAJA(HAJA)的顺序进行排列,都道府县的名称可以忽略";
|
||||
$lang['awards_waja_description_ln4'] = "请访问 <a href='https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm' target='_blank'>https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm</a> 获得更多信息";
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
WAB -- Use all 4 Lines of Text
|
||||
___________________________________________________________________________________________
|
||||
*/
|
||||
$lang['awards_wab_description_ln1'] = "WAB - Worked All Britain Award";
|
||||
$lang['awards_wab_description_ln2'] = "The Amateur Radio Worked All Britain (WAB) Award is a prestigious recognition program within the amateur radio community that celebrates communication achievements across the United Kingdom. The WAB Award scheme encourages radio operators to establish contact with stations located in different regions of Britain, fostering camaraderie and promoting radio communication skills. To earn the WAB Award, participants must make successful radio contacts with stations located in specific WAB areas, which are defined by Ordnance Survey grid squares. These grid squares cover the entirety of Great Britain, including England, Scotland, Wales, and some offshore islands.";
|
||||
$lang['awards_wab_description_ln3'] = "Participants in the WAB Award program exchange information such as their location, signal strength, and WAB square reference during radio contacts. Points are awarded based on the location of the contacted station, with different point values assigned to contacts made within different WAB areas. By accumulating points from successful contacts, radio operators can progress through various award levels, each representing a significant milestone in their amateur radio journey. The WAB Award not only recognizes the dedication and skill of radio operators but also promotes geographic diversity and encourages exploration of the rich tapestry of locations across Britain through the medium of amateur radio.";
|
||||
$lang['awards_wab_description_ln4'] = "For more information, please visit: <a href='https://wab.intermip.net/default.php' target='_blank'>https://wab.intermip.net/default.php</a>.";
|
||||
$lang['awards_waja_description_ln1'] = "WAJA - Worked All Japan prefectures Award";
|
||||
$lang['awards_waja_description_ln2'] = "WAJA, Worked All Japan prefectures in Amateur Radio, encourages licensed ham radio operators to work all the prefectures in Japan.";
|
||||
$lang['awards_waja_description_ln3'] = "May be claimed for having contacted (heard) and received a QSL card from an amateur station located in each of the 47 prefectures of Japan. A list of QSL cards should be arranged in order of WAJA (HAJA) reference number, however names of prefectures may be omitted.";
|
||||
$lang['awards_waja_description_ln4'] = "For more information, please visit: <a href='https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm' target='_blank'>https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm</a>.";
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['contesting_page_title'] = '竞赛日志';
|
||||
$lang['contesting_button_reset_contest_session'] = '重置竞赛';
|
||||
$lang['contesting_button_reset_contest_session'] = '重置竞赛会话';
|
||||
$lang['contesting_operator_callsign'] = '操作员呼号';
|
||||
|
||||
$lang['contesting_exchange_type'] = '信息交换类型';
|
||||
|
|
@ -14,10 +14,10 @@ $lang['contesting_exchange_type_gridsquare'] = '网格座标';
|
|||
$lang['contesting_exchange_type_other'] = '其他';
|
||||
$lang['contesting_exchange_type_serial_exchange'] = '序列编号 + 交换信息';
|
||||
$lang['contesting_exchange_type_serial_gridsquare'] = '序列编号 + 网格座标';
|
||||
$lang['contesting_exchange_serial_s'] = '序列编号 (发)';
|
||||
$lang['contesting_exchange_serial_r'] = '序列编号 (收)';
|
||||
$lang['contesting_exchange_gridsquare_s'] = '网格座标 (发)';
|
||||
$lang['contesting_exchange_gridsquare_r'] = '网格座标 (收)';
|
||||
$lang['contesting_exchange_serial_s'] = '序列编号 (S)';
|
||||
$lang['contesting_exchange_serial_r'] = '序列编号 (R)';
|
||||
$lang['contesting_exchange_gridsquare_s'] = '网格座标 (S)';
|
||||
$lang['contesting_exchange_gridsquare_r'] = '网格座标 (R)';
|
||||
|
||||
$lang['contesting_contest_name'] = '竞赛名称';
|
||||
|
||||
|
|
@ -28,11 +28,5 @@ $lang['contesting_title_callsign_suggestions'] = '呼号建议';
|
|||
$lang['contesting_title_contest_logbook'] = '竞赛日志簿';
|
||||
|
||||
$lang['contesting_copy_exch_to_dok'] = '将收到的交换信息复制到数据库中的 DOK 字段!';
|
||||
$lang['contesting_copy_exch_to_none'] = '将收到的交换信息复制到数据库中的 no additional 字段!';
|
||||
$lang['contesting_copy_exch_to_power'] = '将收到的交换信息复制到数据库中的 RX-Power 字段!';
|
||||
$lang['contesting_copy_exch_to_state'] = '将收到的交换信息复制到数据库中的 US-State 字段!';
|
||||
$lang['contesting_copy_exch_to_age'] = '将收到的交换信息复制到数据库中的 Age 字段!';
|
||||
$lang['contesting_copy_exch_to_name'] = '将收到的交换信息复制到数据库中的 Name 字段!';
|
||||
$lang['contesting_copy_exch_to_locator'] = '将收到的交换信息复制到数据库中的 Locator 字段!';
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['export_kml_header'] = "KML 导出";
|
||||
$lang['export_kml_description'] = "将日志导出为 KML 文件以在 Google 地球中使用";
|
||||
$lang['export_kml_grisquare_warning'] = "只有有网格座标的 QSO 才会被导出";
|
||||
$lang['export_kml_description'] = "将日志导出为 KML 文件以在 Google 地球中使用。";
|
||||
$lang['export_kml_grisquare_warning'] = "只有定义了 网格座标 的 QSO 才会被导出!";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -20,8 +20,8 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['export_dxatlas_header'] = "DX Atlas 导出";
|
||||
$lang['export_dxatlas_description'] = "导出您的日志以在 DX Atlas 中使用以显示已工作/已确认的网格座标";
|
||||
$lang['export_dxatlas_gridsquare_warning'] = "只有有网格座标的 QSO 才会被导出!";
|
||||
$lang['export_dxatlas_description'] = "导出您的日志以在 DX Atlas 中使用以显示已工作/已确认的网格座标。";
|
||||
$lang['export_dxatlas_gridsquare_warning'] = "只有定义了 网格座标 的 QSO 才会被导出!";
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -31,7 +31,7 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['export_sota_header'] = "SOTA CSV 导出";
|
||||
$lang['export_sota_description'] = "导出您的日志以进行 SOTA 上传";
|
||||
$lang['export_sota_description'] = "导出您的日志以进行 SOTA 上传。";
|
||||
$lang['export_sota_info_warning'] = "只有具有 SOTA 信息的 QSO 才会被导出!";
|
||||
|
||||
/*
|
||||
|
|
@ -56,20 +56,20 @@ $lang['export_cabrillo_cat_assisted'] = "辅助类型(Assisted)";
|
|||
$lang['export_cabrillo_cat_assisted_not_ass'] = "无辅助(Not Assisted)";
|
||||
$lang['export_cabrillo_cat_assisted_ass'] = "有辅助(Assisted)";
|
||||
$lang['export_cabrillo_cat_band'] = "波段类型(Band)";
|
||||
$lang['export_cabrillo_cat_band_arrl_vhf'] = "VHF-3-BAND 和 VHF-FM-ONLY (仅限 ARRL VHF 竞赛)";
|
||||
$lang['export_cabrillo_cat_band_arrl_vhf'] = "VHF-3-BAND and VHF-FM-ONLY (仅限 ARRL VHF 竞赛)";
|
||||
$lang['export_cabrillo_cat_mode'] = "模式类型(Mode)";
|
||||
$lang['export_cabrillo_cat_power'] = "功率类型(Power)";
|
||||
$lang['export_cabrillo_cat_station'] = "台站类型(Station)";
|
||||
$lang['export_cabrillo_cat_transmitter'] = "发射机类型(Transmitter)";
|
||||
$lang['export_cabrillo_cat_overlay'] = "Overlay类型";
|
||||
$lang['export_cabrillo_operators'] = "操作员";
|
||||
$lang['export_cabrillo_soapbox'] = "Soapbox(附加信息)";
|
||||
$lang['export_cabrillo_soapbox'] = "Soapbox";
|
||||
$lang['export_cabrillo_address'] = "地址";
|
||||
$lang['export_cabrillo_address_city'] = "城市";
|
||||
$lang['export_cabrillo_address_state_province'] = "州/省";
|
||||
$lang['export_cabrillo_address_postalcode'] = "邮政编码";
|
||||
$lang['export_cabrillo_address_country'] = "国家";
|
||||
$lang['export_cabrillo_no_contests_in_log'] = "在日志中未发现任何竞赛";
|
||||
$lang['export_cabrillo_no_contests_for_stationlocation'] = "没有找到该台站位置的竞赛";
|
||||
$lang['export_cabrillo_no_contests_in_log'] = "在您的日志中未发现任何竞赛。";
|
||||
$lang['export_cabrillo_no_contests_for_stationlocation'] = "没有找到该台站位置的竞赛!";
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['filter_quickfilters'] = '快速过滤';
|
||||
$lang['filter_qsl_filters'] = '过滤 QSL';
|
||||
$lang['filter_qsl_filters'] = 'QSL 过滤';
|
||||
$lang['filter_filters'] = '过滤器';
|
||||
$lang['filter_actions'] = '操作';
|
||||
$lang['filter_results'] = '每页结果数';
|
||||
|
|
@ -27,7 +27,7 @@ ________________________________________________________________________________
|
|||
*/
|
||||
|
||||
$lang['filter_quicksearch_w_sel'] = '用选中行的条件进行快速搜索:';
|
||||
$lang['filter_search_callsign'] = '搜索呼号';
|
||||
$lang['filter_search_callsign'] = '搜索 呼号';
|
||||
$lang['filter_search_dxcc'] = '搜索 DXCC';
|
||||
$lang['filter_search_state'] = '搜索 州/省';
|
||||
$lang['filter_search_gridsquare'] = '搜索 网格';
|
||||
|
|
@ -45,15 +45,15 @@ QSL Filters
|
|||
___________________________________________________________________________________________
|
||||
*/
|
||||
|
||||
$lang['filter_qsl_sent'] = 'QSL 发送状态';
|
||||
$lang['filter_qsl_recv'] = 'QSL 接收状态';
|
||||
$lang['filter_qsl_sent'] = 'QSL 发送';
|
||||
$lang['filter_qsl_recv'] = 'QSL 接收';
|
||||
$lang['filter_qsl_sent_method'] = 'QSL 发送方式';
|
||||
$lang['filter_qsl_recv_method'] = 'QSL 接收方式';
|
||||
$lang['filter_lotw_sent'] = 'LoTW 发送状态';
|
||||
$lang['filter_lotw_recv'] = 'LoTW 接收状态';
|
||||
$lang['filter_eqsl_sent'] = 'eQSL 发送状态';
|
||||
$lang['filter_eqsl_recv'] = 'eQSL 接收状态';
|
||||
$lang['filter_qsl_via'] = '通过(via)……发送QSL';
|
||||
$lang['filter_lotw_sent'] = 'LoTW 发送';
|
||||
$lang['filter_lotw_recv'] = 'LoTW 接收';
|
||||
$lang['filter_eqsl_sent'] = 'eQSL 发送';
|
||||
$lang['filter_eqsl_recv'] = 'eQSL 接收';
|
||||
$lang['filter_qsl_via'] = 'QSL 通过';
|
||||
$lang['filter_qsl_images'] = 'QSL 图片';
|
||||
|
||||
// $lang['general_word_all'] --> application/language/english/general_words_lang.php
|
||||
|
|
@ -156,5 +156,5 @@ $lang['filter_options_show'] = '显示';
|
|||
// $lang['gen_hamradio_wwff'] --> application/language/english/general_words_lang.php
|
||||
// $lang['gen_hamradio_pota'] --> application/language/english/general_words_lang.php
|
||||
// $lang['options_save'] --> application/language/english/options_lang.php
|
||||
$lang['filter_search_operator']='搜素操作员';
|
||||
$lang['filter_options_close'] = '关闭';
|
||||
$lang['filter_search_operator']='Search Operator';
|
||||
$lang['filter_options_close'] = '关闭';
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['error_no_active_station_profile'] = '注意:你需要设置一个活动的电台站地址';
|
||||
$lang['error_no_active_station_profile'] = '注意:你需要设置一个活动的电台站地址。';
|
||||
|
||||
$lang['notice_turn_the_radio_on'] = '你今天还没进行QSO,是时候打开你的电台开始通联了!';
|
||||
|
||||
|
|
@ -23,10 +23,9 @@ $lang['general_word_export'] = "导出";
|
|||
$lang['general_word_import'] = "导入";
|
||||
$lang['general_word_count'] = "数量";
|
||||
$lang['general_word_filtering_on'] = "筛选打开";
|
||||
$lang['general_word_not_display'] = "不显示";
|
||||
$lang['general_word_icon'] = "图标";
|
||||
$lang['general_word_never'] = "从不";
|
||||
$lang['general_word_undefined'] = "Undefined";
|
||||
$lang['general_word_not_display'] = "Not display";
|
||||
$lang['general_word_icon'] = "Icon";
|
||||
$lang['general_word_never'] = "Never";
|
||||
|
||||
$lang['general_word_date'] = '日期';
|
||||
$lang['general_word_startdate'] = "开始时间";
|
||||
|
|
@ -37,7 +36,6 @@ $lang['general_word_time_off'] = '关闭时间';
|
|||
$lang['general_word_datetime'] = '日期/时间';
|
||||
$lang['general_word_none'] = '无';
|
||||
$lang['general_word_name'] = '名称';
|
||||
$lang['general_word_flag'] = '旗帜';
|
||||
$lang['general_word_location'] = '位置';
|
||||
$lang['general_word_comment'] = '备注';
|
||||
$lang['general_word_general'] = '通用';
|
||||
|
|
@ -50,11 +48,11 @@ $lang['general_word_city'] = '城市';
|
|||
$lang['general_word_total'] = '总计';
|
||||
$lang['general_word_year'] = '年';
|
||||
$lang['general_word_month'] = '月';
|
||||
$lang['general_word_day'] = "日";
|
||||
$lang['general_word_days'] = "天";
|
||||
$lang['general_word_day'] = "Day";
|
||||
$lang['general_word_days'] = "Days";
|
||||
|
||||
$lang['general_word_colors'] = "颜色";
|
||||
$lang['general_word_light'] = "浅色/高光";
|
||||
$lang['general_word_light'] = "浅色/激光";
|
||||
$lang['general_word_worked'] = '已通联';
|
||||
$lang['general_word_worked_not_confirmed'] = "已通联未确认";
|
||||
$lang['general_word_not_worked'] = "未通联";
|
||||
|
|
@ -78,20 +76,16 @@ $lang['general_word_qslcard_management'] = 'QSL 管理';
|
|||
$lang['general_word_qslcards'] = 'QSL 卡片';
|
||||
$lang['general_word_qslcard_direct'] = '直邮';
|
||||
$lang['general_word_qslcard_bureau'] = '卡片局';
|
||||
$lang['general_word_qslcard_electronic'] = '电子卡片';
|
||||
$lang['general_word_qslcard_manager'] = '卡片管理员';
|
||||
$lang['general_word_qslcard_via'] = '通过(via)';
|
||||
$lang['general_word_sstv_management'] = 'SSTV Management';
|
||||
$lang['general_word_sstvimages'] = 'SSTV Images';
|
||||
$lang['general_sstv_upload'] = 'Uploaded SSTV images';
|
||||
$lang['general_sstv_upload_button'] = 'Upload SSTV image(s)';
|
||||
$lang['general_word_qslcard_electronic'] = '电子';
|
||||
$lang['general_word_qslcard_manager'] = '管理员';
|
||||
$lang['general_word_qslcard_via'] = '通过';
|
||||
$lang['general_word_eqslcard'] = '电子 QSL 卡片';
|
||||
$lang['general_word_eqslcards'] = 'eQSL 卡片';
|
||||
$lang['general_word_lotw'] = 'Logbook of the World(LoTW)';
|
||||
$lang['general_word_lotw_short'] = 'LoTW';
|
||||
|
||||
$lang['general_word_details'] = '详细信息';
|
||||
$lang['general_word_qso_data'] = 'QSO 信息';
|
||||
$lang['general_word_details'] = '详细';
|
||||
$lang['general_word_qso_data'] = 'QSO 数据';
|
||||
|
||||
$lang['general_edit_qso'] = '编辑 QSO';
|
||||
$lang['general_mark_qsl_rx_bureau'] = '标记 已收到的QSL (卡片局)';
|
||||
|
|
@ -128,49 +122,29 @@ $lang['gen_hamradio_callsign'] = '呼号';
|
|||
$lang['gen_hamradio_prefix'] = "前缀";
|
||||
$lang['gen_hamradio_suffix'] = "后缀";
|
||||
$lang['gen_hamradio_mode'] = '模式';
|
||||
$lang['gen_hamradio_ant_az'] = 'Antenna Azimuth';
|
||||
$lang['gen_hamradio_ant_el'] = 'Antenna Elevation';
|
||||
$lang['gen_hamradio_de'] = '本台呼号(De)';
|
||||
$lang['gen_hamradio_dx'] = '对方呼号(Dx)';
|
||||
$lang['gen_hamradio_rst_sent'] = '发送 信号报告(RST)';
|
||||
$lang['gen_hamradio_rst_rcvd'] = '接收 信号报告(RST)';
|
||||
$lang['gen_hamradio_rst_sent'] = '发';
|
||||
$lang['gen_hamradio_rst_rcvd'] = '收';
|
||||
$lang['gen_hamradio_band'] = '频段';
|
||||
$lang['gen_hamradio_bandgroup'] = "波段";
|
||||
$lang['gen_hamradio_band_rx'] = '接收频段 (RX)';
|
||||
$lang['gen_hamradio_band_rx'] = '频段 (RX)';
|
||||
$lang['gen_hamradio_frequency'] = '频率';
|
||||
$lang['gen_hamradio_frequency_rx'] = '接收频率 (RX)';
|
||||
$lang['gen_hamradio_frequency_rx'] = '频率 (RX)';
|
||||
$lang['gen_hamradio_radio'] = '电台';
|
||||
$lang['gen_hamradio_rsts'] = '信号报告 (发)';
|
||||
$lang['gen_hamradio_rstr'] = '信号报告 (收)';
|
||||
$lang['gen_hamradio_refs'] = '对方网格';
|
||||
$lang['gen_hamradio_myrefs'] = '我的网格';
|
||||
$lang['gen_hamradio_exchange_sent_short'] = '信号报告交换 (发)';
|
||||
$lang['gen_hamradio_exchange_rcvd_short'] = '信号报告交换 (收)';
|
||||
$lang['gen_hamradio_refs'] = 'Refs';
|
||||
$lang['gen_hamradio_myrefs'] = 'My Refs';
|
||||
$lang['gen_hamradio_exchange_sent_short'] = '信号交换 (发)';
|
||||
$lang['gen_hamradio_exchange_rcvd_short'] = '信号交换 (收)';
|
||||
$lang['gen_hamradio_qsl'] = 'QSL';
|
||||
$lang['gen_hamradio_qsltype'] = "QSL 类型";
|
||||
$lang['gen_hamradio_qslvia'] = 'QSL via';
|
||||
$lang['gen_hamradio_qslmsg'] = 'QSL 信息';
|
||||
$lang['gen_hamradio_locator'] = '定位地图';
|
||||
$lang['gen_hamradio_locator'] = '定位器';
|
||||
$lang['gen_hamradio_transmit_power'] = '发射功率 (W)';
|
||||
$lang['gen_hamradio_propagation_mode'] = '传播模式';
|
||||
$lang['gen_hamradio_propagation_AS'] = "Aircraft Scatter";
|
||||
$lang['gen_hamradio_propagation_AUR'] = "Aurora";
|
||||
$lang['gen_hamradio_propagation_AUE'] = "Aurora-E";
|
||||
$lang['gen_hamradio_propagation_BS'] = "Back scatter";
|
||||
$lang['gen_hamradio_propagation_ECH'] = "EchoLink";
|
||||
$lang['gen_hamradio_propagation_EME'] = "Earth-Moon-Earth";
|
||||
$lang['gen_hamradio_propagation_ES'] = "Sporadic E";
|
||||
$lang['gen_hamradio_propagation_FAI'] = "Field Aligned Irregularities";
|
||||
$lang['gen_hamradio_propagation_F2'] = "F2 Reflection";
|
||||
$lang['gen_hamradio_propagation_INTERNET'] = "Internet-assisted";
|
||||
$lang['gen_hamradio_propagation_ION'] = "Ionoscatter";
|
||||
$lang['gen_hamradio_propagation_IRL'] = "IRLP";
|
||||
$lang['gen_hamradio_propagation_MS'] = "Meteor scatter";
|
||||
$lang['gen_hamradio_propagation_RPT'] = "Terrestrial or atmospheric repeater or transponder";
|
||||
$lang['gen_hamradio_propagation_RS'] = "Rain scatter";
|
||||
$lang['gen_hamradio_propagation_SAT'] = "Satellite";
|
||||
$lang['gen_hamradio_propagation_TEP'] = "Trans-equatorial";
|
||||
$lang['gen_hamradio_propagation_TR'] = "Tropospheric ducting";
|
||||
|
||||
$lang['gen_hamradio_satellite_name'] = '卫星名称';
|
||||
$lang['gen_hamradio_satellite_mode'] = '卫星模式';
|
||||
|
|
@ -198,7 +172,7 @@ $lang['gen_hamradio_wwff'] = 'WWFF';
|
|||
$lang['gen_hamradio_pota'] = 'POTA';
|
||||
$lang['gen_hamradio_gridsquare'] = '网格';
|
||||
$lang['gen_hamradio_get_gridsquare'] = '获取网格座标';
|
||||
$lang['gen_hamradio_gridsquare_show'] = "显示定位地图";
|
||||
$lang['gen_hamradio_gridsquare_show'] = "Show Locator";
|
||||
$lang['gen_hamradio_latitude'] = "纬度";
|
||||
$lang['gen_hamradio_longitude'] = "经度";
|
||||
$lang['gen_hamradio_bearing'] = "方位角";
|
||||
|
|
@ -212,7 +186,7 @@ $lang['gen_hamradio_sig_info'] = 'Sig 属性';
|
|||
$lang['gen_find_zone_cq_part1'] = "如果您不知道自己的 CQ 分区";
|
||||
$lang['gen_find_zone_itu_part1'] = "如果您不知道自己的 ITU 分区";
|
||||
$lang['gen_find_zone_part2'] = "点击此处";
|
||||
$lang['gen_find_zone_part3'] = "来查询";
|
||||
$lang['gen_find_zone_part3'] = "来查询!";
|
||||
|
||||
// Dashboard Words
|
||||
$lang['dashboard_you_have_had'] = '今天你有';
|
||||
|
|
@ -248,5 +222,3 @@ $lang['dashboard_logbooks_warning'] = '你没有电台日志。 请前往<a href
|
|||
$lang['hams_at_no_activations_found'] = '未找到即将进行的激活。 请稍后再回来查看。';
|
||||
|
||||
$lang['datatables_language'] = "en-GB";
|
||||
|
||||
$lang['set_log_to_full_dates'] = "Set log to full dates";
|
||||
|
|
@ -10,13 +10,13 @@ $lang['gridsquares_confirmed_is_green'] = '已确认的网格是绿色';
|
|||
$lang['gridsquares_worked_but_not_confirmed_is_red'] = '已通联但未确认的网格是红色';
|
||||
$lang['gridsquares_activated_but_not_confirmed_is_red'] = '已激活但未确认的网格是红色';
|
||||
|
||||
$lang['gridsquares_this_map_does_not_include_satellite_internet_or_repeater_qsos'] = '此地图不包括通过卫星,互联网或中继的QSO';
|
||||
$lang['gridsquares_this_map_does_not_include_satellite_internet_or_repeater_qsos'] = '此地图不包括通过卫星,互联网或中继达成的QSO';
|
||||
|
||||
$lang['gridsquares_grid_squares'] = '网格';
|
||||
$lang['gridsquares_total_count'] = '总数';
|
||||
|
||||
$lang['gridsquares_minimum_count'] = "最低数量";
|
||||
$lang['gridsquares_show_qsos'] = "显示 QSO";
|
||||
$lang['gridsquares_show_qsos'] = "显示 QSO's";
|
||||
$lang['gridsquares_show_map'] = "显示地图";
|
||||
$lang['gridsquares_band'] = '频率';
|
||||
$lang['gridsquares_mode'] = '模式';
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ $lang['lotw_title_export_p12_file_instruction'] = '导出 .p12 文件流程';
|
|||
$lang['lotw_title_adif_import'] = 'ADIF 导入';
|
||||
$lang['lotw_title_adif_import_options'] = '导入选项';
|
||||
|
||||
$lang['lotw_beta_warning'] = '请明确 LoTW 同步处于 BETA 测试阶段, 请查看 wiki 寻求帮助';
|
||||
$lang['lotw_no_certs_uploaded'] = '你需要上传 LoTW p12 证书以使用该功能';
|
||||
$lang['lotw_beta_warning'] = '请明确 LoTW 同步处于 BETA 测试阶段, 请查看 wiki 寻求帮助。';
|
||||
$lang['lotw_no_certs_uploaded'] = '你需要上传 LoTW p12 证书以使用该功能。';
|
||||
|
||||
$lang['lotw_date_created'] = '创建日期';
|
||||
$lang['lotw_date_expires'] = '过期日期';
|
||||
|
|
@ -26,17 +26,17 @@ $lang['lotw_expiring'] = '即将到期';
|
|||
$lang['lotw_not_synced'] = '未同步';
|
||||
|
||||
$lang['lotw_certificate_dxcc'] = '证书 DXCC';
|
||||
$lang['lotw_certificate_dxcc_help_text'] = '证书的 DXCC 实体例如: Scotland';
|
||||
$lang['lotw_certificate_dxcc_help_text'] = '证书的 DXCC 实体。例如: Scotland';
|
||||
|
||||
$lang['lotw_input_a_file'] = '上传文件';
|
||||
|
||||
$lang['lotw_upload_exported_adif_file_from_lotw'] = '下载从 LoTW <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> 中导出的 ADIF 文件,并且标记在 LoTW上已得到确认的QSO';
|
||||
$lang['lotw_upload_exported_adif_file_from_lotw'] = '下载从 LoTW <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> 中导出的 ADIF 文件,并且标记在 LoTW上已得到确认的QSO。';
|
||||
$lang['lotw_upload_type_must_be_adi'] = '日志文件的类型必须为 .adi';
|
||||
|
||||
$lang['lotw_pull_lotw_data_for_me'] = '为我拉取 LoTW 数据';
|
||||
$lang['lotw_select_callsign'] = '选择呼号以获取 LoTW 确认';
|
||||
|
||||
$lang['lotw_report_download_overview_helptext'] ='Cloudlog 将会使用储存在你个人用户信息当中的 LoTW 用户名和密码从 LoTW 上为你下载报告Cloudlog 下载的这份报告将会包括自你所选之日以来的或者你最后的 LoTW 确认信息(目前日志当中)以来的所有确认';
|
||||
$lang['lotw_report_download_overview_helptext'] ='Cloudlog 将会使用储存在你个人用户信息当中的 LoTW 用户名和密码从 LoTW 上为你下载报告。Cloudlog 下载的这份报告将会包括自你所选之日以来的或者你最后的 LoTW 确认信息(目前日志当中)以来的所有确认。';
|
||||
|
||||
// Buttons
|
||||
$lang['lotw_btn_lotw_import'] = 'LoTW 导入';
|
||||
|
|
@ -50,7 +50,7 @@ $lang['lotw_btn_import_matches'] = '导入 LoTW 匹配';
|
|||
$lang['lotw_p12_export_step_one'] = '打开 TQSL & 选择 呼号证书 选项';
|
||||
$lang['lotw_p12_export_step_two'] = '右键选择目标呼号';
|
||||
$lang['lotw_p12_export_step_three'] = '单击 "保存呼号证书文件" 并不要指定密码';
|
||||
$lang['lotw_p12_export_step_four'] = '在下方上传文件';
|
||||
$lang['lotw_p12_export_step_four'] = '在下方上传文件。';
|
||||
|
||||
$lang['lotw_confirmed'] = '该 QSO 已在 LoTW 确认';
|
||||
|
||||
|
|
@ -59,5 +59,5 @@ $lang['lotw_cert_expiring'] = '至少有一个LoTW证书即将过期!';
|
|||
$lang['lotw_cert_expired'] = '至少有一个LoTW证书已经过期!';
|
||||
|
||||
// Lotw User
|
||||
$lang['lotw_user'] = '这个电台使用 LOTW';
|
||||
$lang['lotw_user'] = '这个电台使用 LOTW。';
|
||||
$lang['lotw_last_upload'] = '最后一次上传是';
|
||||
|
|
|
|||
|
|
@ -2,22 +2,21 @@
|
|||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['menu_badge_developer_mode'] = '开发者模式';
|
||||
$lang['menu_badge_developer_mode'] = '开发模式';
|
||||
|
||||
$lang['menu_logbook'] = '日志簿';
|
||||
$lang['menu_overview'] = '概览';
|
||||
$lang['menu_advanced'] = '详细信息';
|
||||
|
||||
$lang['menu_qso'] = 'QSO';
|
||||
$lang['menu_live_qso'] = '添加QSO(实时)';
|
||||
$lang['menu_post_qso'] = '添加QSO(手动)';
|
||||
$lang['menu_fast_log_entry'] = "快速记录QSO";
|
||||
$lang['menu_live_contest_logging'] = '比赛日志(实时)';
|
||||
$lang['menu_post_contest_logging'] = '比赛日志(手动)';
|
||||
$lang['menu_bandmap'] = '波段地图';
|
||||
$lang['menu_live_qso'] = '添加QSO(从电台获取信息)';
|
||||
$lang['menu_post_qso'] = '添加QSO(手动输入信息)';
|
||||
$lang['menu_fast_log_entry'] = "简单快速记录Log";
|
||||
$lang['menu_live_contest_logging'] = '比赛日志(从电台获取信息)';
|
||||
$lang['menu_post_contest_logging'] = '比赛日志(手动输入信息)';
|
||||
$lang['menu_bandmap'] = 'Bandmap';
|
||||
$lang['menu_view_qsl'] = '浏览QSL卡片';
|
||||
$lang['menu_view_eqsl'] = '浏览eQSL卡片';
|
||||
$lang['menu_view_sstv'] = 'View SSTV Images';
|
||||
$lang['menu_view_eqsl'] = '浏览电子QSL卡片';
|
||||
|
||||
$lang['menu_notes'] = '笔记';
|
||||
|
||||
|
|
@ -32,7 +31,6 @@ $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'] = '大陆';
|
||||
|
||||
|
|
@ -79,7 +77,7 @@ $lang['menu_kml_export'] = 'KML 导出';
|
|||
$lang['menu_dx_atlas_gridsquare_export'] = 'DX Atlas Gridsquare 导出';
|
||||
$lang['menu_sota_csv_export'] = 'SOTA CSV 导出';
|
||||
$lang['menu_cabrillo_export'] = 'Cabrillo 导出';
|
||||
$lang['menu_oqrs_requests'] = 'OQRS';
|
||||
$lang['menu_oqrs_requests'] = 'OQRS 请求';
|
||||
$lang['menu_print_requested_qsls'] = '打印请求的QSL卡片';
|
||||
$lang['menu_labels'] = '标签';
|
||||
$lang['menu_logbook_of_the_world'] = 'Logbook of the World';
|
||||
|
|
@ -96,4 +94,3 @@ $lang['menu_logout'] = '注销';
|
|||
$lang['menu_ffma'] = "弗雷德·菲什纪念奖";
|
||||
$lang['menu_ja_gridmaster'] = 'JA Gridmaster';
|
||||
$lang['menu_maintenance']='维护';
|
||||
$lang['menu_uk_gridmaster'] = 'UK Gridmaster';
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
<?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。';
|
||||
|
|
@ -6,7 +6,7 @@ $lang['notes_menu_notes'] = '笔记';
|
|||
$lang['notes_edit_note'] = '编辑笔记';
|
||||
$lang['notes_your_notes'] = '你的笔记';
|
||||
|
||||
$lang['notes_welcome'] = "你目前没有任何笔记,这里特别适合用来储存一些诸如 ATU 设置,信标和电台笔记等信息。同时,他们不会像纸片那样容易丢失";
|
||||
$lang['notes_welcome'] = "你目前没有任何笔记,这里特别适合用来储存一些诸如 ATU 设置,信标和通用电台笔记等信息。同时,他们不会像纸片那样容易丢失。";
|
||||
|
||||
$lang['notes_create_note'] = '创建笔记';
|
||||
|
||||
|
|
@ -17,6 +17,6 @@ $lang['notes_input_btn_save_note'] = '保存笔记';
|
|||
$lang['notes_input_btn_edit_note'] = '编辑笔记';
|
||||
$lang['notes_input_btn_delete_note'] = '删除笔记';
|
||||
|
||||
$lang['notes_selection_general'] = '一般';
|
||||
$lang['notes_selection_general'] = '通用';
|
||||
$lang['notes_selection_antennas'] = '天线';
|
||||
$lang['notes_selection_satellites'] = '卫星';
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ $lang['options_logbook_map_changed_to'] = '日志地图更改为 ';
|
|||
|
||||
$lang['options_radios'] = '电台';
|
||||
$lang['options_radio_settings'] = '电台设置';
|
||||
$lang['options_radio_timeout_warning'] = '电台连接超时警告';
|
||||
$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = '在QSO输入面板上使用电台连接超时警告,提醒您无线电接口断开。';
|
||||
$lang['options_radio_timeout_warning'] = '电台超时警告';
|
||||
$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = '在QSO输入面板上使用无线电超时警告,提醒您无线电接口断开。';
|
||||
$lang['options_this_number_is_in_seconds'] = '此数字以秒为单位。';
|
||||
$lang['options_radio_timeout_warning_changed_to'] = '无线电超时警告更改为 ';
|
||||
|
||||
|
|
@ -38,73 +38,73 @@ $lang['options_smtp_host'] = 'SMTP 主机';
|
|||
$lang['options_smtp_port'] = 'SMTP 端口';
|
||||
$lang['options_smtp_username'] = 'SMTP 用户名';
|
||||
$lang['options_smtp_password'] = 'SMTP 密码';
|
||||
$lang['options_mail_settings_saved'] = "设置已保存";
|
||||
$lang['options_mail_settings_failed'] = "保存时出现问题,请重试";
|
||||
$lang['options_outgoing_protocol_hint'] = "发送邮件时使用的协议";
|
||||
$lang['options_smtp_encryption_hint'] = "选择邮件将会通过TLS还是SSL发送";
|
||||
$lang['options_email_address_hint'] = "发送邮件的邮箱地址,例如:'cloudlog@example.com'";
|
||||
$lang['options_email_sender_name_hint'] = "发送者的名字,例如:'Cloudlog'";
|
||||
$lang['options_smtp_host_hint'] = "邮件服务器的域名,例如:'mail.example.com' (不带'ssl://'或'tls://')";
|
||||
$lang['options_smtp_port_hint'] = "邮件服务器的SMTP端口,例如:如果使用了TLS -> '587',如果使用了SSL -> '465'";
|
||||
$lang['options_smtp_username_hint'] = "登录邮件服务器的用户名,通常情况下,这和发送邮件的邮箱地址相同";
|
||||
$lang['options_smtp_password_hint'] = "登录邮件服务器的密码";
|
||||
$lang['options_send_testmail'] = "发送测试邮件";
|
||||
$lang['options_send_testmail_hint'] = "邮件将会发送到填写在个人信息中的邮箱中";
|
||||
$lang['options_send_testmail_failed'] = "测试邮件发送失败,请检查设置";
|
||||
$lang['options_send_testmail_success'] = "测试邮件发送成功,设置正常";
|
||||
$lang['options_mail_settings_saved'] = "The settings were saved successfully.";
|
||||
$lang['options_mail_settings_failed'] = "Something went wrong with saving the settings. Try again.";
|
||||
$lang['options_outgoing_protocol_hint'] = "The protocol that will be used to send out emails.";
|
||||
$lang['options_smtp_encryption_hint'] = "Choose whether emails should be sent with TLS or SSL.";
|
||||
$lang['options_email_address_hint'] = "The email address from which the emails are sent, e.g. 'cloudlog@example.com'";
|
||||
$lang['options_email_sender_name_hint'] = "The email sender name, e.g. 'Cloudlog'";
|
||||
$lang['options_smtp_host_hint'] = "The hostname of the mail server, e.g. 'mail.example.com' (without 'ssl://' or 'tls://')";
|
||||
$lang['options_smtp_port_hint'] = "The SMTP port of the mail server, e.g. if TLS is used -> '587', if SSL is used -> '465'";
|
||||
$lang['options_smtp_username_hint'] = "The username to log in to the mail server, usually this is the email address that is used.";
|
||||
$lang['options_smtp_password_hint'] = "The password to log in to the mail server.";
|
||||
$lang['options_send_testmail'] = "Send Test-Mail";
|
||||
$lang['options_send_testmail_hint'] = "The email will be sent to the address defined in your account settings.";
|
||||
$lang['options_send_testmail_failed'] = "Testmail failed. Something went wrong.";
|
||||
$lang['options_send_testmail_success'] = "Testmail sent. Email settings seem to be correct.";
|
||||
|
||||
$lang['options_oqrs'] = 'OQRS设置';
|
||||
$lang['options_global_text'] = '全局文本';
|
||||
$lang['options_this_text_is_an_optional_text_that_can_be_displayed_on_top_of_the_oqrs_page'] = '该文本是一个可选文本,可以显示在OQRS页面的顶部。';
|
||||
$lang['options_grouped_search'] = '分组搜索';
|
||||
$lang['options_when_this_is_on_all_station_locations_with_oqrs_active_will_be_searched_at_once'] = '当此选项打开时,所有具有OQRS活动的电台位置将同时搜索';
|
||||
$lang['options_grouped_search_show_station_name'] = "在分组搜索结果中显示台站名称";
|
||||
$lang['options_grouped_search_show_station_name_hint'] = "如果分组搜索被启用,台站名称将会显示在表格当中";
|
||||
$lang['options_when_this_is_on_all_station_locations_with_oqrs_active_will_be_searched_at_once'] = '当此选项打开时,所有具有OQRS活动的电台位置将同时搜索。';
|
||||
$lang['options_grouped_search_show_station_name'] = "Show station location name in grouped search results";
|
||||
$lang['options_grouped_search_show_station_name_hint'] = "If grouped search is ON, you can decide if the name of the station location shall be shown in the results table.";
|
||||
$lang['options_oqrs_options_have_been_saved'] = 'OQRS选项已保存';
|
||||
|
||||
$lang['options_save'] = '保存';
|
||||
$lang['options_dxcluster_provider'] = 'DXClusterCache 的信息来源';
|
||||
$lang['options_dxcluster_longtext'] = 'DXClusterCache 的信息来源,您可以通过 <a href="https://github.com/int2001/DXClusterAPI">DXClusterAPI</a> 来设置自己的来源或使用公共来源';
|
||||
$lang['options_dxcluster_hint'] = 'DXClusterCache 来源,例如:https://dxc.jo30.de/dxcache';
|
||||
$lang['options_dxcluster_provider'] = 'Provider of DXClusterCache';
|
||||
$lang['options_dxcluster_longtext'] = 'The Provider of the DXCluster-Cache. You can set up your own Cache with <a href="https://github.com/int2001/DXClusterAPI">DXClusterAPI</a> or use a public one';
|
||||
$lang['options_dxcluster_hint'] = 'URL of the DXCluster-Cache. e.g. https://dxc.jo30.de/dxcache';
|
||||
$lang['options_dxcluster_settings'] = 'DXCluster';
|
||||
$lang['options_dxcache_url_changed_to'] = 'DXCluster Cache 的网址已更换为: ';
|
||||
$lang['options_dxcluster_maxage'] = '最多关心的报告数量';
|
||||
$lang['options_dxcluster_maxage_hint'] = '报告的时长(分钟为单位)将会在‘频段/查找’中进行处理';
|
||||
$lang['options_dxcluster_decont'] = '显示来自以下大洲的报告';
|
||||
$lang['options_dxcluster_maxage_changed_to']='最多关心的报告数量已被更新为 ';
|
||||
$lang['options_dxcluster_decont_changed_to']='大洲已被更新为 ';
|
||||
$lang['options_dxcluster_decont_hint']='只有来自这个大洲的报告才会被显示';
|
||||
$lang['options_dxcache_url_changed_to'] = 'DXCluster Cache URL changed to ';
|
||||
$lang['options_dxcluster_maxage'] = 'Maximum Age of spots taken care of';
|
||||
$lang['options_dxcluster_maxage_hint'] = 'The Age in Minutes of spots, that will be taken care at bandplan/lookup';
|
||||
$lang['options_dxcluster_decont'] = 'Show spots which are spotted from following continent';
|
||||
$lang['options_dxcluster_maxage_changed_to']='Maximum age of spots changed to ';
|
||||
$lang['options_dxcluster_decont_changed_to']='de continent changed to ';
|
||||
$lang['options_dxcluster_decont_hint']='Only spots by spotters from this continent are shown';
|
||||
|
||||
$lang['options_version_dialog'] = "版本信息";
|
||||
$lang['options_version_dialog_close'] = "关闭";
|
||||
$lang['options_version_dialog_dismiss'] = "不再显示";
|
||||
$lang['options_version_dialog_settings'] = "版本设置";
|
||||
$lang['options_version_dialog_header'] = "版本信息标题";
|
||||
$lang['options_version_dialog_header_hint'] = "你可以更改版本信息的标题";
|
||||
$lang['options_version_dialog_header_changed_to'] = "版本信息的标题被更换为 ";
|
||||
$lang['options_version_dialog_mode'] = "版本信息模式";
|
||||
$lang['options_version_dialog_mode_release_notes'] = "只有发布版的更新内容";
|
||||
$lang['options_version_dialog_mode_custom_text'] = "只有自定义文字";
|
||||
$lang['options_version_dialog_mode_both'] = "发布版的更新内容和自定义文字";
|
||||
$lang['options_version_dialog_mode_disabled'] = "禁用";
|
||||
$lang['options_version_dialog_mode_hint'] = "版本信息将会对所有用户显示. 用户可以选择在阅读后关闭对话框,选择是否显示GitHub上发布版的更新内容还是自定义文字,或者两者";
|
||||
$lang['options_version_dialog_custom_text'] = "版本信息————自定义文字";
|
||||
$lang['options_version_dialog_custom_text_hint'] = "自定义文字将会在对话框中显示";
|
||||
$lang['options_version_dialog_mode_changed_to'] = "版本信息模式切换为";
|
||||
$lang['options_version_dialog_custom_text_saved'] = "版本信息自定义文字已保存";
|
||||
$lang['options_version_dialog_success_show_all'] = "版本信息将会重新向用户显示";
|
||||
$lang['options_version_dialog_success_hide_all'] = "版本信息不再会向用户显示";
|
||||
$lang['options_version_dialog_show_hide'] = "显示/隐藏版本信息对话框";
|
||||
$lang['options_version_dialog_show_all'] = "对所有用户显示";
|
||||
$lang['options_version_dialog_hide_all'] = "对所有用户隐藏";
|
||||
$lang['options_version_dialog_show_all_hint'] = "这将会在用户刷新页面时重新显示版本信息对话框";
|
||||
$lang['options_version_dialog_hide_all_hint'] = "这将会关闭对用户显示版本信息对话框";
|
||||
$lang['options_version_dialog'] = "Version Info";
|
||||
$lang['options_version_dialog_close'] = "Close";
|
||||
$lang['options_version_dialog_dismiss'] = "Don't show again";
|
||||
$lang['options_version_dialog_settings'] = "Version Info Settings";
|
||||
$lang['options_version_dialog_header'] = "Version Info Header";
|
||||
$lang['options_version_dialog_header_hint'] = "You can change the header of the version info dialog.";
|
||||
$lang['options_version_dialog_header_changed_to'] = "Version Info Header changed to";
|
||||
$lang['options_version_dialog_mode'] = "Version Info Mode";
|
||||
$lang['options_version_dialog_mode_release_notes'] = "Only Release Notes";
|
||||
$lang['options_version_dialog_mode_custom_text'] = "Only Custom Text";
|
||||
$lang['options_version_dialog_mode_both'] = "Release Notes and Custom Text";
|
||||
$lang['options_version_dialog_mode_disabled'] = "Disabled";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after he read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_custom_text'] = "Version Info Custom Text";
|
||||
$lang['options_version_dialog_custom_text_hint'] = "This is the custom text which is shown in the dialog.";
|
||||
$lang['options_version_dialog_mode_changed_to'] = "Version Info Mode changed to";
|
||||
$lang['options_version_dialog_custom_text_saved'] = "Version Info Custom Text saved!";
|
||||
$lang['options_version_dialog_success_show_all'] = "Version Info will be shown to all users again";
|
||||
$lang['options_version_dialog_success_hide_all'] = "Version Info will not be shown to any user";
|
||||
$lang['options_version_dialog_show_hide'] = "Show/Hide Version Info Dialog for all Users";
|
||||
$lang['options_version_dialog_show_all'] = "Show for all Users";
|
||||
$lang['options_version_dialog_hide_all'] = "Hide for all Users";
|
||||
$lang['options_version_dialog_show_all_hint'] = "This will show the version dialog automatically to all users on their next page reload.";
|
||||
$lang['options_version_dialog_hide_all_hint'] = "This will deactivate the automatic popup of the version dialog for all users.";
|
||||
|
||||
$lang['options_save'] = '保存';
|
||||
|
||||
// Bands
|
||||
|
||||
$lang['options_bands'] = "波段设置";
|
||||
$lang['options_bands'] = "波段";
|
||||
$lang['options_bands_text_ln1'] = "使用波段列表,您可以控制创建新 QSO 时显示哪些波段。";
|
||||
$lang['options_bands_text_ln2'] = "启用的波段将显示在 QSO“波段”下拉列表中,而停用的频段将被隐藏且无法选择。";
|
||||
$lang['options_bands_create'] = "创建波段";
|
||||
|
|
@ -123,5 +123,4 @@ $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'] = '外观设置已成功保存。';
|
||||
|
||||
|
|
|
|||
|
|
@ -10,30 +10,30 @@ $lang['qslcard_info'] = 'QSL 信息';
|
|||
$lang['qslcard_sent'] = 'QSL 卡片已经发出';
|
||||
$lang['qslcard_sent_bureau'] = 'QSL 卡片已由卡片局发出';
|
||||
$lang['qslcard_sent_direct'] = 'QSL 卡片已直邮发出';
|
||||
$lang['qslcard_sent_electronic'] = 'eQSL 卡片已经发送';
|
||||
$lang['qslcard_sent_electronic'] = 'QSL 卡片已经发送电子版';
|
||||
$lang['qslcard_sent_manager'] = 'QSL 卡片已经由卡片管理员发出';
|
||||
$lang['qslcard_rcvd'] = 'QSL Card 已被接收';
|
||||
$lang['qslcard_rcvd_bureau'] = 'QSL 卡片已由卡片局收妥';
|
||||
$lang['qslcard_rcvd_direct'] = 'QSL 卡片已直邮收妥';
|
||||
$lang['qslcard_rcvd_electronic'] = 'eQSL 卡片已经收妥';
|
||||
$lang['qslcard_rcvd_manager'] = 'QSL 卡片已经由卡片管理员收妥';
|
||||
$lang['qslcard_rcvd_bureau'] = 'QSL 卡片已由卡片局接收';
|
||||
$lang['qslcard_rcvd_direct'] = 'QSL 卡片已直邮接收';
|
||||
$lang['qslcard_rcvd_electronic'] = 'QSL 卡片已经接收电子版';
|
||||
$lang['qslcard_rcvd_manager'] = 'QSL 卡片已经由卡片管理员接收';
|
||||
|
||||
$lang['qslcard_upload_front'] = '上传 QSL 卡片正面图像';
|
||||
$lang['qslcard_upload_back'] = '上传 QSL 卡片背面图像';
|
||||
|
||||
$lang['qslcard_upload_button'] = '上传 QSL 卡片图像';
|
||||
|
||||
$lang['qslcard_qslprint_header'] = "导出用于打印的QSL请求";
|
||||
$lang['qslcard_qslprint_text_line1'] = "在这里,你可以导出QSL请求为 CSV 或 ADIF 文件用于打印,或者标记为已寄出";
|
||||
$lang['qslcard_qslprint_text_line2'] = "QSL请求是指'已请求'或'已排队'的QSL信息";
|
||||
$lang['qslcard_qslprint_send_method'] = "发送方式";
|
||||
$lang['qslcard_qslprint_mark_as_sent'] = "标记为'已发送’";
|
||||
$lang['qslcard_qslprint_mark_selected_as_printed'] = "标记选中的QSL信息为'已打印'";
|
||||
$lang['qslcard_qslprint_remove_selected_from_queue'] = "从队列中删除选中的QSL信息";
|
||||
$lang['qslcard_qslprint_export_csv'] = "导出QSL请求为 CSV 文件";
|
||||
$lang['qslcard_qslprint_export_adif'] = "导出QSL请求为 ADIF 文件";
|
||||
$lang['qslcard_qslprint_mark_requested_as_sent'] = "标记QSL请求为'已发送'";
|
||||
$lang['qslcard_qslprint_no_qsls_found'] = "没有找到需要打印的QSL信息";
|
||||
$lang['qslcard_qslprint_add_to_queue'] = "添加到打印队列中";
|
||||
$lang['qslcard_qslprint_no_additional_qso_found'] = "没有找到附加的QSL信息,可能它们已经被添加到打印队列中";
|
||||
$lang['qslcard_qslprint_header'] = "Export Requested QSLs for Printing";
|
||||
$lang['qslcard_qslprint_text_line1'] = "Here you can export requested QSLs as CSV or ADIF files for printing and, optionally, mark them as sent.";
|
||||
$lang['qslcard_qslprint_text_line2'] = "Requested QSLs are any QSOs with a value of 'Requested' or 'Queued' in their 'QSL Sent' field.";
|
||||
$lang['qslcard_qslprint_send_method'] = "Send Method";
|
||||
$lang['qslcard_qslprint_mark_as_sent'] = "Mark as sent";
|
||||
$lang['qslcard_qslprint_mark_selected_as_printed'] = "Mark selected QSOs as printed";
|
||||
$lang['qslcard_qslprint_remove_selected_from_queue'] = "Remove selected QSOs from the queue";
|
||||
$lang['qslcard_qslprint_export_csv'] = "Export requested QSLs to CSV-file";
|
||||
$lang['qslcard_qslprint_export_adif'] = "Export requested QSLs to ADIF-file";
|
||||
$lang['qslcard_qslprint_mark_requested_as_sent'] = "Mark requested QSLs as sent";
|
||||
$lang['qslcard_qslprint_no_qsls_found'] = "No QSLs to print were found!";
|
||||
$lang['qslcard_qslprint_add_to_queue'] = "Add to print queue";
|
||||
$lang['qslcard_qslprint_no_additional_qso_found'] = "No additional QSO's were found. That means they are probably already in the queue.";
|
||||
|
||||
|
|
|
|||
|
|
@ -6,15 +6,15 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
|||
$lang['qso_title_qso_map'] = 'QSO 地图';
|
||||
$lang['qso_title_suggestions'] = '建议';
|
||||
$lang['qso_title_previous_contacts'] = '先前通联';
|
||||
$lang['qso_title_times_worked_before'] = "先前通联的次数";
|
||||
$lang['qso_title_times_worked_before'] = "times worked before";
|
||||
$lang['qso_title_image'] = '操作员照片';
|
||||
$lang['qso_previous_max_shown'] = "最多五次先前通联将会被显示";
|
||||
$lang['qso_previous_max_shown'] = "Max. 5 previous contacts are shown";
|
||||
|
||||
// Quicklog on Dashboard
|
||||
$lang['qso_quicklog_enter_callsign'] = '快速记录QSO输入呼号';
|
||||
$lang['qso_quicklog_enter_callsign'] = 'QUICKLOG 输入呼号';
|
||||
|
||||
// Input Help Text on the /QSO Display
|
||||
$lang['qso_transmit_power_helptext'] = '以W为单位设置功率值。在输入中仅填写数值';
|
||||
$lang['qso_transmit_power_helptext'] = '以瓦特为单位设置功率值。在输入中仅填写数值。';
|
||||
|
||||
$lang['qso_sota_ref_helptext'] = '例如: GM/NS-001.';
|
||||
$lang['qso_wwff_ref_helptext'] = '例如: DLFF-0069.';
|
||||
|
|
@ -31,14 +31,14 @@ $lang['qsl_notes_helptext'] = '此笔记内容被导出到QSL服务,如 eqsl.c
|
|||
$lang['qso_eqsl_qslmsg_helptext'] = "获取该站的 eQSL 默认消息。";
|
||||
|
||||
// error text //
|
||||
$lang['qso_error_timeoff_less_timeon'] = "结束时间小于开始时间";
|
||||
$lang['qso_error_timeoff_less_timeon'] = "TimeOff is less than TimeOn";
|
||||
|
||||
// Button Text on /qso Display
|
||||
|
||||
$lang['qso_btn_reset_qso'] = '重置';
|
||||
$lang['qso_btn_save_qso'] = '保存 QSO';
|
||||
$lang['qso_btn_edit_qso'] = '编辑 QSO';
|
||||
$lang['qso_delete_warning'] = "警告!您确定要删除 QSO 和 ";
|
||||
$lang['qso_delete_warning'] = "警告!您确定要删除 QSO 与 ";
|
||||
|
||||
// QSO Details
|
||||
|
||||
|
|
@ -90,10 +90,10 @@ $lang['qso_simplefle_syntax_help_title'] = "FLE 语法帮助";
|
|||
$lang['qso_simplefle_syntax_help_ln1'] = "FLE 语法是一种简单的语法,用于快速记录 QSO。它的工作原理是,您只需输入每个 QSO 的更改部分。";
|
||||
$lang['qso_simplefle_syntax_help_ln2'] = "在每一行上,只写与上一个 QSO 不同的数据。";
|
||||
$lang['qso_simplefle_syntax_help_ln3'] = "例如,如果您在 20m 上与 DF3CB 进行了两次 QSO,您可以这样写:";
|
||||
$lang['qso_simplefle_syntax_help_ln4'] = "";
|
||||
$lang['qso_simplefle_syntax_help_ln5'] = "如果您不提供任何 RST 信息,语法将使用 59 (599 用于数据)。我们的下一个 QSO 不是双方都是 59,所以我们首先提供发送的 RST 信息。它比第一个 QSO 晚了 2 分钟。";
|
||||
$lang['qso_simplefle_syntax_help_ln6'] = "第一个 QSO 是在 21:34,第二个 QSO 在 21:36,比第一个 QSO 晚了 2 分钟。我们写下 6,因为这是这里唯一改变的数据。关于波段和模式的信息没有改变,因此省略了这些数据。";
|
||||
$lang['qso_simplefle_syntax_help_ln7'] = "";
|
||||
$lang['qso_simplefle_syntax_help_ln8'] = "我们的下一个 QSO 是在 2021 年 5 月 14 日的 21:40,我们将波段更改为 40m,但仍然在 SSB 上。如果没有给出 RST 信息,语法将为每个新的 QSO 使用 59。因此,我们可以添加另一个 QSO,它在两天后的同一时间发生。日期必须是 YYYY-MM-DD 格式。";
|
||||
$lang['qso_simplefle_syntax_help_ln9'] = "有关语法的更多信息,请查看 DF3CB 的网站<a href='https://df3cb.com/fle/documentation/' target='_blank'>此处</a>。";
|
||||
$lang['qso_simplefle_syntax_help_ln4'] = "如果您不提供任何 RST 信息,语法将使用 59 (599 用于数据)。我们的下一个 QSO 不是双方都是 59,所以我们首先提供发送的 RST 信息。它比第一个 QSO 晚了 2 分钟。";
|
||||
$lang['qso_simplefle_syntax_help_ln5'] = "第一个 QSO 是在 21:34,第二个 QSO 在 21:36,比第一个 QSO 晚了 2 分钟。我们写下 6,因为这是这里唯一改变的数据。关于波段和模式的信息没有改变,因此省略了这些数据。";
|
||||
$lang['qso_simplefle_syntax_help_ln6'] = "我们的下一个 QSO 是在 2021 年 5 月 14 日的 21:40,我们将波段更改为 40m,但仍然在 SSB 上。如果没有给出 RST 信息,语法将为每个新的 QSO 使用 59。因此,我们可以添加另一个 QSO,它在两天后的同一时间发生。日期必须是 YYYY-MM-DD 格式。";
|
||||
$lang['qso_simplefle_syntax_help_ln7'] = "有关语法的更多信息,请查看 DF3CB 的网站<a href='https://df3cb.com/fle/documentation/' target='_blank'>此处</a>。";
|
||||
$lang['qso_simplefle_syntax_help_ln8'] = "";
|
||||
$lang['qso_simplefle_syntax_help_ln9'] = "";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['sstv_string_disk_space'] = 'of disk space to store SSTV image assets';
|
||||
|
|
@ -8,37 +8,35 @@ Station Logbooks
|
|||
___________________________________________________________________________________________
|
||||
*/
|
||||
|
||||
$lang['station_logbooks'] = "台站日志";
|
||||
$lang['station_logbooks_description_header'] = "什么是台站日志";
|
||||
$lang['station_logbooks_description_text'] = "台站日志可以让您对自己的台站位置进行分组,这对在同一DXCC或VUCC下的不同站点位置非常方便";
|
||||
$lang['station_logbooks_create'] = "新建台站日志";
|
||||
$lang['station_logbooks_status'] = "状态";
|
||||
$lang['station_logbooks_link'] = "链接";
|
||||
$lang['station_logbooks_public_search'] = "公开搜索";
|
||||
$lang['station_logbooks_set_active'] = "设置为正在使用的日志";
|
||||
$lang['station_logbooks_active_logbook'] = "正在使用的日志";
|
||||
$lang['station_logbooks_edit_logbook'] = "编辑台站日志"; // Full sentence will be generated 'Edit Station Logbook: [Logbook Name]'
|
||||
$lang['station_logbooks_confirm_delete'] = "确定删除此台站日志?你可能需要重新将台站位置链接到其他台站日志中: ";
|
||||
$lang['station_logbooks_view_public'] = "浏览日志公开页: ";
|
||||
$lang['station_logbooks_create_name'] = "台站日志名称";
|
||||
$lang['station_logbooks_create_name_hint'] = "你可以随意称呼你的台站日志";
|
||||
$lang['station_logbooks_edit_name_hint'] = "台站位置简称,例如:Home Log (IO87IP)";
|
||||
$lang['station_logbooks_edit_name_update'] = "更新台站日志名称";
|
||||
$lang['station_logbooks_public_slug'] = "自定义日志链接";
|
||||
$lang['station_logbooks_public_slug_hint'] = "通过自定义日志链接,你可以通过此链接让别人访问你的日志";
|
||||
$lang['station_logbooks_public_slug_format1'] = "他将会看起来像这样:";
|
||||
$lang['station_logbooks_public_slug_format2'] = "[你的日志]";
|
||||
$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'] = "已链接的台站位置";
|
||||
$lang['station_logbooks_no_linked_loc'] = "未链接的台站位置";
|
||||
$lang['station_logbooks_unlink_station_location'] = "取消链接的台站位置";
|
||||
$lang['station_logbooks'] = "Station Logbooks";
|
||||
$lang['station_logbooks_description_header'] = "What are Station Logbooks";
|
||||
$lang['station_logbooks_description_text'] = "Station Logbooks allow you to group Station Locations, this allows you to see all the locations across one session from the logbook areas to the analytics. Great for when your operating in multiple locations but they are part of the same DXCC or VUCC Circle.";
|
||||
$lang['station_logbooks_create'] = "Create Station Logbook";
|
||||
$lang['station_logbooks_status'] = "Status";
|
||||
$lang['station_logbooks_link'] = "Link";
|
||||
$lang['station_logbooks_public_search'] = "Public Search";
|
||||
$lang['station_logbooks_set_active'] = "Set as Active Logbook";
|
||||
$lang['station_logbooks_active_logbook'] = "Active Logbook";
|
||||
$lang['station_logbooks_edit_logbook'] = "Edit Station Logbook"; // Full sentence will be generated 'Edit Station Logbook: [Logbook Name]'
|
||||
$lang['station_logbooks_confirm_delete'] = "Are you sure you want to delete the following station logbook? You must re-link any locations linked here to another logbook.: ";
|
||||
$lang['station_logbooks_view_public'] = "View Public Page for Logbook: ";
|
||||
$lang['station_logbooks_create_name'] = "Station Logbook Name";
|
||||
$lang['station_logbooks_create_name_hint'] = "You can call a station logbook anything.";
|
||||
$lang['station_logbooks_edit_name_hint'] = "Shortname for the station logbook. For example: Home Log (IO87IP)";
|
||||
$lang['station_logbooks_edit_name_update'] = "Update Station Logbook Name";
|
||||
$lang['station_logbooks_public_slug'] = "Public Slug";
|
||||
$lang['station_logbooks_public_slug_hint'] = "Setting a public slug allows you to share your logbook with anyone via a custom website address, this slug can contain letters & numbers only.";
|
||||
$lang['station_logbooks_public_slug_format1'] = "Later it looks like this:";
|
||||
$lang['station_logbooks_public_slug_format2'] = "[your slug]";
|
||||
$lang['station_logbooks_public_slug_input'] = "Type in Public Slug choice";
|
||||
$lang['station_logbooks_public_slug_visit'] = "Visit Public Page";
|
||||
$lang['station_logbooks_public_search_hint'] = "Enabling public search function offers a search input box on the public logbook page accessed via public slug. Search only covers this logbook.";
|
||||
$lang['station_logbooks_public_search_enabled'] = "Public search enabled";
|
||||
$lang['station_logbooks_select_avail_loc'] = "Select Available Station Locations";
|
||||
$lang['station_logbooks_link_loc'] = "Link Location";
|
||||
$lang['station_logbooks_linked_loc'] = "Linked Locations";
|
||||
$lang['station_logbooks_no_linked_loc'] = "No Linked Locations";
|
||||
$lang['station_logbooks_unlink_station_location'] = "Unlink Station Location";
|
||||
|
||||
|
||||
|
||||
|
|
@ -48,72 +46,72 @@ Station Locations
|
|||
___________________________________________________________________________________________
|
||||
*/
|
||||
|
||||
$lang['station_location'] = '台站地址';
|
||||
$lang['station_location_plural'] = "台站地址";
|
||||
$lang['station_location_header_ln1'] = '台站地址定义的是操作位置,例如您的 QTH、朋友的 QTH 或野外架台的地址。';
|
||||
$lang['station_location_header_ln2'] = '与日志类似,台站地址配置将一组 QSO 保存在一起。';
|
||||
$lang['station_location_header_ln3'] = '一次只能有一个台站地址处于活动状态。 在下表中,这显示为带有“活动站”("Active Station")标识。';
|
||||
$lang['station_location_create_header'] = '创建台站地址';
|
||||
$lang['station_location_create'] = '新建台站地址';
|
||||
$lang['station_location_edit'] = '编辑台站地址';
|
||||
$lang['station_location_updated_suff'] = '已更新';
|
||||
$lang['station_location_warning'] = '注意:您需要设置活动的电台站位置(QTH)。 前往呼号->电台位置选择一个。';
|
||||
$lang['station_location_reassign_at'] = '请在这里重新分配:';
|
||||
$lang['station_location_warning_reassign'] = '由于 Cloudlog 中最近发生的变化,您需要将 QSO 重新分配给您的电台站配置文件。';
|
||||
$lang['station_location_name'] = '个人资料名称';
|
||||
$lang['station_location_name_hint'] = '台站位置的简称。 例如:学校(PN35GT)';
|
||||
$lang['station_location_callsign'] = '电台站的呼号';
|
||||
$lang['station_location_callsign_hint'] = '电台的呼号。 例如:B1/BG2FFJ';
|
||||
$lang['station_location_power'] = '电台功率';
|
||||
$lang['station_location_power_hint'] = '默认的电台功率(以瓦特为单位)。 这个设置会被从电台 CAT 读取到的数据所覆盖。';
|
||||
$lang['station_location_emptylog'] = '空日志';
|
||||
$lang['station_location_confirm_active'] = '您确定要将以下电台站位置设为活动的(在用的)电台站位置吗:';
|
||||
$lang['station_location_set_active'] = '设置为活动电台站位置';
|
||||
$lang['station_location_active'] = '活动的电台站';
|
||||
$lang['station_location_claim_ownership'] = '认领所有权';
|
||||
$lang['station_location_confirm_del_qso'] = '您确定要删除此电台配置文件中的所有 QSO 吗?';
|
||||
$lang['station_location_confirm_del_stationlocation'] = '您确定要删除电台配置文件吗 ';
|
||||
$lang['station_location_confirm_del_stationlocation_qso'] = '这将会删除该电台配置文件中的所有 QSO,确定删除 ?';
|
||||
$lang['station_location_dxcc'] = '电台站的 DXCC 实体';
|
||||
$lang['station_location_dxcc_hint'] = '电台站的 DXCC 实体。 例如:中国大陆';
|
||||
$lang['station_location_dxcc_warning'] = "等一下。 您选择的 DXCC 已过时并且不再有效。 检查一下您要选择的位置所属的 DXCC 哪一个是正确的。 如果您确定没选错,我就要选这个,请忽略此警告。";
|
||||
$lang['station_location_city'] = '电台站的城市';
|
||||
$lang['station_location_city_hint'] = '电台站的城市。 例如:长春';
|
||||
$lang['station_location_state'] = '电台站的州/省份';
|
||||
$lang['station_location_state_hint'] = '电台站的省份。 仅适用于某些国家。,如果不适用则留空。如:吉林';
|
||||
$lang['station_location_county'] = '电台站的县/区';
|
||||
$lang['station_location_county_hint'] = '电台站的县/区。(仅用于美国/阿拉斯加/夏威夷)。';
|
||||
$lang['station_location_gridsquare'] = '电台站的网格方格(梅登海德网格)';
|
||||
$lang['station_location_gridsquare_hint_ln1'] = "电台站所属的网格。 例如:PN35GT。 如果您不知道自己的网格,请<a href='https://zone-check.eu/?m=loc' target='_blank'>点击此处</a>!";
|
||||
$lang['station_location_gridsquare_hint_ln2'] = "如果您正好位于网格线上,请输入多个网格方块,并用逗号分隔。 例如:PN24、PN34、PN23、PN33。";
|
||||
$lang['station_location_iota_hint_ln1'] = "电台站的IOTA编号。 例如:BY-001";
|
||||
$lang['station_location_iota_hint_ln2'] = "您可以在 <a target='_blank' href='https://www.iota-world.org/iota-directory/annex-f-short-title-iota-reference-number-list.html'>IOTA World</a> 网站查找 IOTA 编号。";
|
||||
$lang['station_location_sota_hint_ln1'] = "电台站内的 SOTA 编号. 您可以在 <a target='_blank' href='https://www.sotamaps.org/'>SOTA 地图</a> 网站查找 SOTA 编号。";
|
||||
$lang['station_location_wwff_hint_ln1'] = "电台站内的 WWFF 编号. 您可以在 <a target='_blank' href='https://www.cqgma.org/mvs/'>GMA 地图</a> 网站查找 WWFF 编号。";
|
||||
$lang['station_location_pota_hint_ln1'] = "电台站内的 POTA 编号. 您可以在 <a target='_blank' href='https://pota.app/#/map/'>POTA 地图</a> 网站查找 POTA 编号。";
|
||||
$lang['station_location_signature'] = "签名";
|
||||
$lang['station_location_signature_name'] = "签名名称";
|
||||
$lang['station_location_signature_name_hint'] = "电台签名(例如 GMA)..";
|
||||
$lang['station_location_signature_info'] = "签名信息";
|
||||
$lang['station_location_signature_info_hint'] = "电台签名信息(例如 DA/NW-357)。";
|
||||
$lang['station_location_eqsl_hint'] = '在您的 eQSL 配置文件中配置的 QTH 昵称';
|
||||
$lang['station_location_eqsl_defaultqslmsg'] = "默认的QSL信息";
|
||||
$lang['station_location_eqsl_defaultqslmsg_hint'] = "该设置将为此电台站站位置的每个 QSO 设置一个默认填充和发送的消息。";
|
||||
$lang['station_location_qrz_subscription'] = '需要 QRZ.com 的订阅';
|
||||
$lang['station_location_qrz_hint'] = "在 <a href='https://logbook.qrz.com/logbook' target='_blank'>QRZ.com的日志簿界面查找您的API KEY。";
|
||||
$lang['station_location_qrz_realtime_upload'] = 'QRZ.com 日志簿实时上传';
|
||||
$lang['station_location_hrdlog_username'] = "HRDLog.net 用户名";
|
||||
$lang['station_location_hrdlog_username_hint'] = "您在 HRDlog.net 注册时使用的用户名(通常是您的呼号)。";
|
||||
$lang['station_location'] = 'Station Location';
|
||||
$lang['station_location_plural'] = "Station Locations";
|
||||
$lang['station_location_header_ln1'] = 'Station Locations define operating locations, such as your QTH, a friends QTH, or a portable station.';
|
||||
$lang['station_location_header_ln2'] = 'Similar to logbooks, a station profile keeps a set of QSOs together.';
|
||||
$lang['station_location_header_ln3'] = 'Only one station may be active at a time. In the table below this is shown with the -Active Station- badge.';
|
||||
$lang['station_location_create_header'] = 'Create Station Location';
|
||||
$lang['station_location_create'] = 'Create a Station Location';
|
||||
$lang['station_location_edit'] = 'Edit Station Location: ';
|
||||
$lang['station_location_updated_suff'] = ' Updated.';
|
||||
$lang['station_location_warning'] = 'Attention: You need to set an active station location. Go to Callsign->Station Location to select one.';
|
||||
$lang['station_location_reassign_at'] = 'Please reassign them at ';
|
||||
$lang['station_location_warning_reassign'] = 'Due to recent changes within Cloudlog you need to reassign QSOs to your station profiles.';
|
||||
$lang['station_location_name'] = 'Profile Name';
|
||||
$lang['station_location_name_hint'] = 'Shortname for the station location. For example: Home (IO87IP)';
|
||||
$lang['station_location_callsign'] = 'Station Callsign';
|
||||
$lang['station_location_callsign_hint'] = 'Station callsign. For example: 2M0SQL/P';
|
||||
$lang['station_location_power'] = 'Station Power (W)';
|
||||
$lang['station_location_power_hint'] = 'Default station power in Watt. Overwritten by CAT.';
|
||||
$lang['station_location_emptylog'] = 'Empty Log';
|
||||
$lang['station_location_confirm_active'] = 'Are you sure you want to make the following station the active station: ';
|
||||
$lang['station_location_set_active'] = 'Set Active';
|
||||
$lang['station_location_active'] = 'Active Station';
|
||||
$lang['station_location_claim_ownership'] = 'Claim Ownership';
|
||||
$lang['station_location_confirm_del_qso'] = 'Are you sure you want to delete all QSOs within this station profile?';
|
||||
$lang['station_location_confirm_del_stationlocation'] = 'Are you sure you want delete station profile ';
|
||||
$lang['station_location_confirm_del_stationlocation_qso'] = 'This will delete all QSOs within this station profile?';
|
||||
$lang['station_location_dxcc'] = 'Station DXCC';
|
||||
$lang['station_location_dxcc_hint'] = 'Station DXCC entity. For example: Scotland';
|
||||
$lang['station_location_dxcc_warning'] = "Stop here for a Moment. Your chosen DXCC is outdated and not valid anymore. Check which DXCC for this particular location is the correct one. If you are sure, ignore this warning.";
|
||||
$lang['station_location_city'] = 'Station City';
|
||||
$lang['station_location_city_hint'] = 'Station city. For example: Inverness';
|
||||
$lang['station_location_state'] = 'Station State';
|
||||
$lang['station_location_state_hint'] = 'Station state. Applies to certain countries only. Leave blank if not applicable.';
|
||||
$lang['station_location_county'] = 'Station County';
|
||||
$lang['station_location_county_hint'] = 'Station County (Only used for USA/Alaska/Hawaii).';
|
||||
$lang['station_location_gridsquare'] = 'Station Gridsquare';
|
||||
$lang['station_location_gridsquare_hint_ln1'] = "Station gridsquare. For example: IO87IP. If you don't know your grid square then <a href='https://zone-check.eu/?m=loc' target='_blank'>click here</a>!";
|
||||
$lang['station_location_gridsquare_hint_ln2'] = "If you are located on a grid line, enter multiple grid squares separated with commas. For example: IO77,IO78,IO87,IO88.";
|
||||
$lang['station_location_iota_hint_ln1'] = "Station IOTA reference. For example: EU-005";
|
||||
$lang['station_location_iota_hint_ln2'] = "You can look up IOTA references at the <a target='_blank' href='https://www.iota-world.org/iota-directory/annex-f-short-title-iota-reference-number-list.html'>IOTA World</a> website.";
|
||||
$lang['station_location_sota_hint_ln1'] = "Station SOTA reference. You can look up SOTA references at the <a target='_blank' href='https://www.sotamaps.org/'>SOTA Maps</a> website.";
|
||||
$lang['station_location_wwff_hint_ln1'] = "Station WWFF reference. You can look up WWFF references at the <a target='_blank' href='https://www.cqgma.org/mvs/'>GMA Map</a> website.";
|
||||
$lang['station_location_pota_hint_ln1'] = "Station POTA reference. You can look up POTA references at the <a target='_blank' href='https://pota.app/#/map/'>POTA Map</a> website.";
|
||||
$lang['station_location_signature'] = "Signature";
|
||||
$lang['station_location_signature_name'] = "Signature Name";
|
||||
$lang['station_location_signature_name_hint'] = "Station Signature (e.g. GMA)..";
|
||||
$lang['station_location_signature_info'] = "Signature Information";
|
||||
$lang['station_location_signature_info_hint'] = "Station Signature Info (e.g. DA/NW-357).";
|
||||
$lang['station_location_eqsl_hint'] = 'The QTH Nickname which is configured in your eQSL Profile';
|
||||
$lang['station_location_eqsl_defaultqslmsg'] = "Default QSLMSG";
|
||||
$lang['station_location_eqsl_defaultqslmsg_hint'] = "Define a default message that will be populated and sent for each QSO for this station location.";
|
||||
$lang['station_location_qrz_subscription'] = 'Subscription Required';
|
||||
$lang['station_location_qrz_hint'] = "Find your API key on <a href='https://logbook.qrz.com/logbook' target='_blank'>the QRZ.com Logbook settings page";
|
||||
$lang['station_location_qrz_realtime_upload'] = 'QRZ.com Logbook Realtime Upload';
|
||||
$lang['station_location_hrdlog_username'] = "HRDLog.net Username";
|
||||
$lang['station_location_hrdlog_username_hint'] = "The username you are registered with at HRDlog.net (usually your callsign).";
|
||||
$lang['station_location_hrdlog_code'] = "HRDLog.net API Key";
|
||||
$lang['station_location_hrdlog_realtime_upload'] = "HRDLog.net 日志簿实时上传";
|
||||
$lang['station_location_hrdlog_code_hint'] = "在 <a href='http://www.hrdlog.net/EditUser.aspx' target='_blank'>hrdlog.net的用户资料页面创建你的API key。";
|
||||
$lang['station_location_qo100_hint'] = "在 <a href='https://qo100dx.club' target='_blank'>qo100dx.club的用户资料页面创建你的API key";
|
||||
$lang['station_location_qo100_realtime_upload'] = "QO-100 DX Club 实时上传";
|
||||
$lang['station_location_oqrs_enabled'] = "OQRS 启用";
|
||||
$lang['station_location_oqrs_email_alert'] = "OQRS 邮件提醒";
|
||||
$lang['station_location_oqrs_email_hint'] = "请确保已经和在管理-全局选项下设置了电子邮件。";
|
||||
$lang['station_location_oqrs_text'] = "OQRS 提示文本";
|
||||
$lang['station_location_oqrs_text_hint'] = "您想要的添加一些有关 QSL'ing 的信息。";
|
||||
$lang['station_location_clublog_realtime_upload']='ClubLog 日志实时上传';
|
||||
$lang['station_location_hrdlog_realtime_upload'] = "HRDLog.net Logbook Realtime Upload";
|
||||
$lang['station_location_hrdlog_code_hint'] = "Create your API Code on <a href='http://www.hrdlog.net/EditUser.aspx' target='_blank'>HRDLog.net Userprofile page";
|
||||
$lang['station_location_qo100_hint'] = "Create your API key on <a href='https://qo100dx.club' target='_blank'>your QO-100 Dx Club's profile page";
|
||||
$lang['station_location_qo100_realtime_upload'] = "QO-100 Dx Club Realtime Upload";
|
||||
$lang['station_location_oqrs_enabled'] = "OQRS Enabled";
|
||||
$lang['station_location_oqrs_email_alert'] = "OQRS Email alert";
|
||||
$lang['station_location_oqrs_email_hint'] = "Make sure email is set up under admin and global options.";
|
||||
$lang['station_location_oqrs_text'] = "OQRS Text";
|
||||
$lang['station_location_oqrs_text_hint'] = "Some info you want to add regarding QSL'ing.";
|
||||
$lang['station_location_clublog_realtime_upload']='ClubLog Realtime Upload';
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -25,21 +25,14 @@ $lang['statistics_number_of_qso_worked'] = "通联的 QSO 数量";
|
|||
*
|
||||
*/
|
||||
|
||||
$lang['statistics_distances_bands_all'] = "全部";
|
||||
$lang['statistics_distances_modes_all'] = "全部";
|
||||
$lang['statistics_distances_worked'] = "通联距离";
|
||||
$lang['statistics_distances_part1_contacts_were_plotted_furthest'] = "次通联<br /> 您最远的通联是与";
|
||||
$lang['statistics_distances_part2_contacts_were_plotted_furthest'] = "在网格";
|
||||
$lang['statistics_distances_part3_contacts_were_plotted_furthest'] = "距离是";
|
||||
$lang['statistics_distances_part4_contacts_were_plotted_furthest'] = "平均距离是";
|
||||
$lang['statistics_distances_number_of_qsos'] = "QSO 数量";
|
||||
$lang['statistics_distances_callsigns_worked'] = "通联的呼号(最多显示5个):";
|
||||
$lang['statistics_distances_qsos_with'] = "QSO 与";
|
||||
$lang['statistics_distances_and_band'] = "和波段";
|
||||
$lang['statistics_distances_and_mode'] = ", 模式 : ";
|
||||
$lang['statistics_distances_and_power'] = ", 发射功率 : ";
|
||||
$lang['statistics_distances_and_propagation'] = ", 传播模式 : ";
|
||||
$lang['statistics_distances_no_qsos_to_plot'] = "No QSOs found to plot.";
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
@ -55,20 +48,13 @@ $lang['statistics_timeline'] = "时间线";
|
|||
*
|
||||
*/
|
||||
|
||||
$lang['statistics_tab_yearly'] = "Yearly";
|
||||
$lang['statistics_tab_streaks'] = "Streaks";
|
||||
$lang['statistics_tab_weekdays'] = "Days of the week";
|
||||
$lang['statistics_tab_daily'] = "Daily";
|
||||
$lang['statistics_days_yearly'] = "Number of days with QSOs each year";
|
||||
$lang['statistics_days_with_qso'] = "QSO的日期";
|
||||
$lang['statistics_qsos_each_day'] = "Number of QSOs each day";
|
||||
$lang['statistics_weekdays_with_qso'] = "QSOs breakdown by day of the week";
|
||||
$lang['statistics_number_of_qsos_this_day'] = "Number of QSOs this day";
|
||||
$lang['statistics_number_of_qsos_this_weekday'] = "Number of QSOs for this day of the week";
|
||||
$lang['statistics_dwq_longest_streak_in_log'] = "日志中最长QSO连续记录";
|
||||
$lang['statistics_dwq_longest_streak_in_log_hint'] = "最多显示10条最长QSO连续记录";
|
||||
$lang['statistics_dwq_streak_continuous_days'] = "最长QSO连续记录";
|
||||
$lang['statistics_dwq_current_streak_in_log'] = "目前的QSO连续记录";
|
||||
$lang['statistics_dwq_current_streak_continuous_days'] = "当前连续天数";
|
||||
$lang['statistics_dwq_make_qso_to_extend_streak'] = "如果你今天进行了QSO,那么就能延长你的连续天数,否则将会被打破清零";
|
||||
$lang['statistics_dwq_no_current_streak'] = "没有找到连续的天数";
|
||||
$lang['statistics_days_with_qso'] = "Number of days with QSOs each year";
|
||||
$lang['statistics_days_with_qso_short'] = "Days with QSOs";
|
||||
$lang['statistics_dwq_longest_streak_in_log'] = "Longest streak with QSOs in the log";
|
||||
$lang['statistics_dwq_longest_streak_in_log_hint'] = "A maximum of the 10 longest streaks are shown!";
|
||||
$lang['statistics_dwq_streak_continuous_days'] = "Streak (continuous days with QSOs)";
|
||||
$lang['statistics_dwq_current_streak_in_log'] = "Current streak with QSOs in the log";
|
||||
$lang['statistics_dwq_current_streak_continuous_days'] = "Current streak (continuous days with QSOs)";
|
||||
$lang['statistics_dwq_make_qso_to_extend_streak'] = "If you make a QSO today, you can continue to extend your streak... or else your current streak will be broken!";
|
||||
$lang['statistics_dwq_no_current_streak'] = "No current streak found!";
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ $lang['account_column5_text'] = 'Vybrat sloupec 5 (pouze pro deník)';
|
|||
|
||||
$lang['account_create_user_account'] = 'Vytvořit uživatelský účet';
|
||||
$lang['account_edit_account'] = 'Upravit účet';
|
||||
$lang['account_remember_me'] = 'Remember me';
|
||||
|
||||
$lang['account_account_information'] = 'Informace o účtu';
|
||||
$lang['account_user'] = "User";
|
||||
$lang['account_word_edited'] = "edited";
|
||||
|
|
@ -127,8 +127,3 @@ $lang['account_qso_logging_options'] = "QSO Logging Options";
|
|||
$lang['account_third_party_services'] = "Third Party Services";
|
||||
$lang['account_default_values'] = "Default Values";
|
||||
$lang['account_miscellaneous'] = "Miscellaneous";
|
||||
|
||||
$lang['account_hamsat'] = "Hams.at";
|
||||
$lang['account_hamsat_private_feed_key'] = "Private Feed Key";
|
||||
$lang['account_hamsat_hint'] = "See your profile at <a href='https://hams.at/users/settings' target='_blank'>https://hams.at/users/settings</a>.";
|
||||
$lang['account_hamsat_workable_only'] = "Show Workable Passes Only";
|
||||
|
|
|
|||
|
|
@ -193,12 +193,3 @@ $lang['awards_waja_description_ln1'] = "WAJA - Worked All Japan prefectures Awar
|
|||
$lang['awards_waja_description_ln2'] = "WAJA, Worked All Japan prefectures in Amateur Radio, encourages licensed ham radio operators to work all the prefectures in Japan.";
|
||||
$lang['awards_waja_description_ln3'] = "May be claimed for having contacted (heard) and received a QSL card from an amateur station located in each of the 47 prefectures of Japan. A list of QSL cards should be arranged in order of WAJA (HAJA) reference number, however names of prefectures may be omitted.";
|
||||
$lang['awards_waja_description_ln4'] = "For more information, please visit: <a href='https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm' target='_blank'>https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm</a>.";
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
WAB -- Use all 4 Lines of Text
|
||||
___________________________________________________________________________________________
|
||||
*/
|
||||
$lang['awards_wab_description_ln1'] = "WAB - Worked All Britain Award";
|
||||
$lang['awards_wab_description_ln2'] = "The Amateur Radio Worked All Britain (WAB) Award is a prestigious recognition program within the amateur radio community that celebrates communication achievements across the United Kingdom. The WAB Award scheme encourages radio operators to establish contact with stations located in different regions of Britain, fostering camaraderie and promoting radio communication skills. To earn the WAB Award, participants must make successful radio contacts with stations located in specific WAB areas, which are defined by Ordnance Survey grid squares. These grid squares cover the entirety of Great Britain, including England, Scotland, Wales, and some offshore islands.";
|
||||
$lang['awards_wab_description_ln3'] = "Participants in the WAB Award program exchange information such as their location, signal strength, and WAB square reference during radio contacts. Points are awarded based on the location of the contacted station, with different point values assigned to contacts made within different WAB areas. By accumulating points from successful contacts, radio operators can progress through various award levels, each representing a significant milestone in their amateur radio journey. The WAB Award not only recognizes the dedication and skill of radio operators but also promotes geographic diversity and encourages exploration of the rich tapestry of locations across Britain through the medium of amateur radio.";
|
||||
$lang['awards_wab_description_ln4'] = "For more information, please visit: <a href='https://wab.intermip.net/default.php' target='_blank'>https://wab.intermip.net/default.php</a>.";
|
||||
|
|
|
|||
|
|
@ -28,11 +28,5 @@ $lang['contesting_title_callsign_suggestions'] = 'Našeptávač značek';
|
|||
$lang['contesting_title_contest_logbook'] = 'Závodní deník';
|
||||
|
||||
$lang['contesting_copy_exch_to_dok'] = 'Copy received exchange to DOK field in the database!';
|
||||
$lang['contesting_copy_exch_to_none'] = 'Copy received exchange to no additional field in the database!';
|
||||
$lang['contesting_copy_exch_to_power'] = 'Copy received exchange to RX-Power field in the database!';
|
||||
$lang['contesting_copy_exch_to_state'] = 'Copy received exchange to US-State field in the database!';
|
||||
$lang['contesting_copy_exch_to_age'] = 'Copy received exchange to Age field in the database!';
|
||||
$lang['contesting_copy_exch_to_name'] = 'Copy received exchange to Name field in the database!';
|
||||
$lang['contesting_copy_exch_to_locator'] = 'Copy received exchange to Locator field in the database!';
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ $lang['general_word_filtering_on'] = "Filtering on";
|
|||
$lang['general_word_not_display'] = "Not display";
|
||||
$lang['general_word_icon'] = "Icon";
|
||||
$lang['general_word_never'] = "Never";
|
||||
$lang['general_word_undefined'] = "Undefined";
|
||||
|
||||
$lang['general_word_date'] = 'Datum';
|
||||
$lang['general_word_startdate'] = "Start Date";
|
||||
|
|
@ -37,7 +36,6 @@ $lang['general_word_time_off'] = 'Time off';
|
|||
$lang['general_word_datetime'] = 'Datum/čas';
|
||||
$lang['general_word_none'] = 'Žádné';
|
||||
$lang['general_word_name'] = 'Jméno';
|
||||
$lang['general_word_flag'] = 'Vlajka';
|
||||
$lang['general_word_location'] = 'Místo';
|
||||
$lang['general_word_comment'] = 'Komentář';
|
||||
$lang['general_word_general'] = 'Obecné';
|
||||
|
|
@ -83,10 +81,6 @@ $lang['general_word_qslcard_manager'] = 'Správce';
|
|||
$lang['general_word_qslcard_via'] = 'Přes';
|
||||
$lang['general_word_eqslcard'] = 'eQSL karta';
|
||||
$lang['general_word_eqslcards'] = 'eQSL karty';
|
||||
$lang['general_word_sstv_management'] = 'SSTV Management';
|
||||
$lang['general_word_sstvimages'] = 'SSTV Images';
|
||||
$lang['general_sstv_upload'] = 'Uploaded SSTV images';
|
||||
$lang['general_sstv_upload_button'] = 'Upload SSTV image(s)';
|
||||
$lang['general_word_lotw'] = 'Logbook of the World';
|
||||
$lang['general_word_lotw_short'] = 'LoTW';
|
||||
|
||||
|
|
@ -130,8 +124,6 @@ $lang['gen_hamradio_suffix'] = "Suffix";
|
|||
$lang['gen_hamradio_de'] = 'De';
|
||||
$lang['gen_hamradio_dx'] = 'Dx';
|
||||
$lang['gen_hamradio_mode'] = 'Režim';
|
||||
$lang['gen_hamradio_ant_az'] = 'Antenna Azimuth';
|
||||
$lang['gen_hamradio_ant_el'] = 'Antenna Elevation';
|
||||
$lang['gen_hamradio_rst_sent'] = 'Odesláno';
|
||||
$lang['gen_hamradio_rst_rcvd'] = 'Přijato';
|
||||
$lang['gen_hamradio_band'] = 'Pásmo';
|
||||
|
|
@ -153,24 +145,6 @@ $lang['gen_hamradio_qslmsg'] = 'QSL Msg';
|
|||
$lang['gen_hamradio_locator'] = 'Lokátor';
|
||||
$lang['gen_hamradio_transmit_power'] = 'Vysílací výkon (W)';
|
||||
$lang['gen_hamradio_propagation_mode'] = 'Šíření signálu';
|
||||
$lang['gen_hamradio_propagation_AS'] = "Aircraft Scatter";
|
||||
$lang['gen_hamradio_propagation_AUR'] = "Aurora";
|
||||
$lang['gen_hamradio_propagation_AUE'] = "Aurora-E";
|
||||
$lang['gen_hamradio_propagation_BS'] = "Back scatter";
|
||||
$lang['gen_hamradio_propagation_ECH'] = "EchoLink";
|
||||
$lang['gen_hamradio_propagation_EME'] = "Earth-Moon-Earth";
|
||||
$lang['gen_hamradio_propagation_ES'] = "Sporadic E";
|
||||
$lang['gen_hamradio_propagation_FAI'] = "Field Aligned Irregularities";
|
||||
$lang['gen_hamradio_propagation_F2'] = "F2 Reflection";
|
||||
$lang['gen_hamradio_propagation_INTERNET'] = "Internet-assisted";
|
||||
$lang['gen_hamradio_propagation_ION'] = "Ionoscatter";
|
||||
$lang['gen_hamradio_propagation_IRL'] = "IRLP";
|
||||
$lang['gen_hamradio_propagation_MS'] = "Meteor scatter";
|
||||
$lang['gen_hamradio_propagation_RPT'] = "Terrestrial or atmospheric repeater or transponder";
|
||||
$lang['gen_hamradio_propagation_RS'] = "Rain scatter";
|
||||
$lang['gen_hamradio_propagation_SAT'] = "Satellite";
|
||||
$lang['gen_hamradio_propagation_TEP'] = "Trans-equatorial";
|
||||
$lang['gen_hamradio_propagation_TR'] = "Tropospheric ducting";
|
||||
|
||||
$lang['gen_hamradio_satellite_name'] = 'Název satelitu';
|
||||
$lang['gen_hamradio_satellite_mode'] = 'Režim satelitu';
|
||||
|
|
@ -243,5 +217,3 @@ $lang['general_word_today'] = 'Dnes';
|
|||
$lang['hams_at_no_activations_found'] = 'No upcoming activations found. Please check back later.';
|
||||
|
||||
$lang['datatables_language'] = "en-GB";
|
||||
|
||||
$lang['set_log_to_full_dates'] = "Set log to full dates";
|
||||
|
|
@ -17,7 +17,6 @@ $lang['menu_post_contest_logging'] = 'Uložit závodní log';
|
|||
$lang['menu_bandmap'] = 'Bandmap';
|
||||
$lang['menu_view_qsl'] = 'Zobrazit QSL';
|
||||
$lang['menu_view_eqsl'] = 'Zobrazit eQSL';
|
||||
$lang['menu_view_sstv'] = 'View SSTV Images';
|
||||
|
||||
$lang['menu_notes'] = 'Poznámky';
|
||||
|
||||
|
|
@ -32,7 +31,6 @@ $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';
|
||||
|
||||
|
|
@ -96,4 +94,3 @@ $lang['menu_logout'] = 'Odhlásit se';
|
|||
$lang['menu_ffma'] = "Fred Fish Memorial Award";
|
||||
$lang['menu_ja_gridmaster'] = 'JA Gridmaster';
|
||||
$lang['menu_maintenance']='Maintenance';
|
||||
$lang['menu_uk_gridmaster'] = 'UK Gridmaster';
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
<?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.';
|
||||
|
|
@ -87,7 +87,7 @@ $lang['options_version_dialog_mode_release_notes'] = "Only Release Notes";
|
|||
$lang['options_version_dialog_mode_custom_text'] = "Only Custom Text";
|
||||
$lang['options_version_dialog_mode_both'] = "Release Notes and Custom Text";
|
||||
$lang['options_version_dialog_mode_disabled'] = "Disabled";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after they read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after he read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_custom_text'] = "Version Info Custom Text";
|
||||
$lang['options_version_dialog_custom_text_hint'] = "This is the custom text which is shown in the dialog.";
|
||||
$lang['options_version_dialog_mode_changed_to'] = "Version Info Mode changed to";
|
||||
|
|
@ -123,5 +123,4 @@ $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.';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['sstv_string_disk_space'] = 'of disk space to store SSTV image assets';
|
||||
|
|
@ -32,8 +32,6 @@ $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";
|
||||
|
|
|
|||
|
|
@ -25,21 +25,14 @@ $lang['statistics_number_of_qso_worked'] = "# of QSO's worked";
|
|||
*
|
||||
*/
|
||||
|
||||
$lang['statistics_distances_bands_all'] = "All";
|
||||
$lang['statistics_distances_modes_all'] = "All";
|
||||
$lang['statistics_distances_worked'] = "Distances Worked";
|
||||
$lang['statistics_distances_part1_contacts_were_plotted_furthest'] = "contacts were plotted.<br /> Your furthest contact was with";
|
||||
$lang['statistics_distances_part2_contacts_were_plotted_furthest'] = "in gridsquare";
|
||||
$lang['statistics_distances_part3_contacts_were_plotted_furthest'] = "The distance was";
|
||||
$lang['statistics_distances_part4_contacts_were_plotted_furthest'] = "The average distance is";
|
||||
$lang['statistics_distances_part3_contacts_were_plotted_furthest'] = "the distance was";
|
||||
$lang['statistics_distances_number_of_qsos'] = "Number of QSOs";
|
||||
$lang['statistics_distances_callsigns_worked'] = "Callsign(s) worked (max 5 shown)";
|
||||
$lang['statistics_distances_qsos_with'] = "QSOs with distance : ";
|
||||
$lang['statistics_distances_and_band'] = ", band : ";
|
||||
$lang['statistics_distances_and_mode'] = ", mode : ";
|
||||
$lang['statistics_distances_and_power'] = ", power : ";
|
||||
$lang['statistics_distances_and_propagation'] = ", propagation : ";
|
||||
$lang['statistics_distances_no_qsos_to_plot'] = "No QSOs found to plot.";
|
||||
$lang['statistics_distances_qsos_with'] = "QSOs with";
|
||||
$lang['statistics_distances_and_band'] = "and band";
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
@ -55,16 +48,8 @@ $lang['statistics_timeline'] = "Timeline";
|
|||
*
|
||||
*/
|
||||
|
||||
$lang['statistics_tab_yearly'] = "Yearly";
|
||||
$lang['statistics_tab_streaks'] = "Streaks";
|
||||
$lang['statistics_tab_weekdays'] = "Days of the week";
|
||||
$lang['statistics_tab_daily'] = "Daily";
|
||||
$lang['statistics_days_yearly'] = "Number of days with QSOs each year";
|
||||
$lang['statistics_days_with_qso'] = "Days with QSOs";
|
||||
$lang['statistics_qsos_each_day'] = "Number of QSOs each day";
|
||||
$lang['statistics_weekdays_with_qso'] = "QSOs breakdown by day of the week";
|
||||
$lang['statistics_number_of_qsos_this_day'] = "Number of QSOs this day";
|
||||
$lang['statistics_number_of_qsos_this_weekday'] = "Number of QSOs for this day of the week";
|
||||
$lang['statistics_days_with_qso'] = "Number of days with QSOs each year";
|
||||
$lang['statistics_days_with_qso_short'] = "Days with QSOs";
|
||||
$lang['statistics_dwq_longest_streak_in_log'] = "Longest streak with QSOs in the log";
|
||||
$lang['statistics_dwq_longest_streak_in_log_hint'] = "A maximum of the 10 longest streaks are shown!";
|
||||
$lang['statistics_dwq_streak_continuous_days'] = "Streak (continuous days with QSOs)";
|
||||
|
|
@ -72,3 +57,4 @@ $lang['statistics_dwq_current_streak_in_log'] = "Current streak with QSOs in the
|
|||
$lang['statistics_dwq_current_streak_continuous_days'] = "Current streak (continuous days with QSOs)";
|
||||
$lang['statistics_dwq_make_qso_to_extend_streak'] = "If you make a QSO today, you can continue to extend your streak... or else your current streak will be broken!";
|
||||
$lang['statistics_dwq_no_current_streak'] = "No current streak found!";
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ $lang['account_column5_text'] = 'Choose column 5 (only for logbook)';
|
|||
|
||||
$lang['account_create_user_account'] = 'Create User Account';
|
||||
$lang['account_edit_account'] = 'Edit Account';
|
||||
$lang['account_remember_me'] = 'Remember me';
|
||||
|
||||
$lang['account_account_information'] = "Account";
|
||||
$lang['account_user'] = "User";
|
||||
|
|
@ -127,9 +126,4 @@ $lang['account_general_information'] = "General Information";
|
|||
$lang['account_qso_logging_options'] = "QSO Logging Options";
|
||||
$lang['account_third_party_services'] = "Third Party Services";
|
||||
$lang['account_default_values'] = "Default Values";
|
||||
$lang['account_miscellaneous'] = "Miscellaneous";
|
||||
|
||||
$lang['account_hamsat'] = "Hams.at";
|
||||
$lang['account_hamsat_private_feed_key'] = "Private Feed Key";
|
||||
$lang['account_hamsat_hint'] = "See your profile at <a href='https://hams.at/users/settings' target='_blank'>https://hams.at/users/settings</a>.";
|
||||
$lang['account_hamsat_workable_only'] = "Show Workable Passes Only";
|
||||
$lang['account_miscellaneous'] = "Miscellaneous";
|
||||
|
|
@ -193,13 +193,3 @@ $lang['awards_waja_description_ln1'] = "WAJA - Worked All Japan prefectures Awar
|
|||
$lang['awards_waja_description_ln2'] = "WAJA, Worked All Japan prefectures in Amateur Radio, encourages licensed ham radio operators to work all the prefectures in Japan.";
|
||||
$lang['awards_waja_description_ln3'] = "May be claimed for having contacted (heard) and received a QSL card from an amateur station located in each of the 47 prefectures of Japan. A list of QSL cards should be arranged in order of WAJA (HAJA) reference number, however names of prefectures may be omitted.";
|
||||
$lang['awards_waja_description_ln4'] = "For more information, please visit: <a href='https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm' target='_blank'>https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm</a>.";
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
WAB -- Use all 4 Lines of Text
|
||||
___________________________________________________________________________________________
|
||||
*/
|
||||
$lang['awards_wab_description_ln1'] = "WAB - Worked All Britain Award";
|
||||
$lang['awards_wab_description_ln2'] = "The Amateur Radio Worked All Britain (WAB) Award is a prestigious recognition program within the amateur radio community that celebrates communication achievements across the United Kingdom. The WAB Award scheme encourages radio operators to establish contact with stations located in different regions of Britain, fostering camaraderie and promoting radio communication skills. To earn the WAB Award, participants must make successful radio contacts with stations located in specific WAB areas, which are defined by Ordnance Survey grid squares. These grid squares cover the entirety of Great Britain, including England, Scotland, Wales, and some offshore islands.";
|
||||
$lang['awards_wab_description_ln3'] = "Participants in the WAB Award program exchange information such as their location, signal strength, and WAB square reference during radio contacts. Points are awarded based on the location of the contacted station, with different point values assigned to contacts made within different WAB areas. By accumulating points from successful contacts, radio operators can progress through various award levels, each representing a significant milestone in their amateur radio journey. The WAB Award not only recognizes the dedication and skill of radio operators but also promotes geographic diversity and encourages exploration of the rich tapestry of locations across Britain through the medium of amateur radio.";
|
||||
$lang['awards_wab_description_ln4'] = "For more information, please visit: <a href='https://wab.intermip.net/default.php' target='_blank'>https://wab.intermip.net/default.php</a>.";
|
||||
|
|
|
|||
|
|
@ -28,11 +28,5 @@ $lang['contesting_title_callsign_suggestions'] = 'Roepnaam suggesties';
|
|||
$lang['contesting_title_contest_logbook'] = 'Contest Logboek';
|
||||
|
||||
$lang['contesting_copy_exch_to_dok'] = 'Copy received exchange to DOK field in the database!';
|
||||
$lang['contesting_copy_exch_to_none'] = 'Copy received exchange to no additional field in the database!';
|
||||
$lang['contesting_copy_exch_to_power'] = 'Copy received exchange to RX-Power field in the database!';
|
||||
$lang['contesting_copy_exch_to_state'] = 'Copy received exchange to US-State field in the database!';
|
||||
$lang['contesting_copy_exch_to_age'] = 'Copy received exchange to Age field in the database!';
|
||||
$lang['contesting_copy_exch_to_name'] = 'Copy received exchange to Name field in the database!';
|
||||
$lang['contesting_copy_exch_to_locator'] = 'Copy received exchange to Locator field in the database!';
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ $lang['general_word_filtering_on'] = "Filtering on";
|
|||
$lang['general_word_not_display'] = "Not display";
|
||||
$lang['general_word_icon'] = "Icon";
|
||||
$lang['general_word_never'] = "Never";
|
||||
$lang['general_word_undefined'] = "Undefined";
|
||||
|
||||
$lang['general_word_date'] = 'Datum';
|
||||
$lang['general_word_startdate'] = "Start Date";
|
||||
|
|
@ -37,7 +36,6 @@ $lang['general_word_time_off'] = 'Time off';
|
|||
$lang['general_word_datetime'] = 'Date/Time';
|
||||
$lang['general_word_none'] = 'Geen';
|
||||
$lang['general_word_name'] = 'Naam';
|
||||
$lang['general_word_flag'] = 'Flag';
|
||||
$lang['general_word_location'] = 'Locatie';
|
||||
$lang['general_word_comment'] = 'Opmerking';
|
||||
$lang['general_word_general'] = 'Algemeen';
|
||||
|
|
@ -83,10 +81,6 @@ $lang['general_word_qslcard_manager'] = 'Manager';
|
|||
$lang['general_word_qslcard_via'] = 'Via';
|
||||
$lang['general_word_eqslcard'] = 'eQSL Card';
|
||||
$lang['general_word_eqslcards'] = 'eQSL Cards';
|
||||
$lang['general_word_sstv_management'] = 'SSTV Management';
|
||||
$lang['general_word_sstvimages'] = 'SSTV Images';
|
||||
$lang['general_sstv_upload'] = 'Uploaded SSTV images';
|
||||
$lang['general_sstv_upload_button'] = 'Upload SSTV image(s)';
|
||||
$lang['general_word_lotw'] = 'Logbook of the World';
|
||||
$lang['general_word_lotw_short'] = 'LoTW';
|
||||
|
||||
|
|
@ -130,8 +124,6 @@ $lang['gen_hamradio_suffix'] = "Suffix";
|
|||
$lang['gen_hamradio_de'] = 'De';
|
||||
$lang['gen_hamradio_dx'] = 'Dx';
|
||||
$lang['gen_hamradio_mode'] = 'Mode';
|
||||
$lang['gen_hamradio_ant_az'] = 'Antenna Azimuth';
|
||||
$lang['gen_hamradio_ant_el'] = 'Antenna Elevation';
|
||||
$lang['gen_hamradio_rst_sent'] = 'Verzonden';
|
||||
$lang['gen_hamradio_rst_rcvd'] = 'Ontvangen';
|
||||
$lang['gen_hamradio_band'] = 'Band';
|
||||
|
|
@ -153,24 +145,6 @@ $lang['gen_hamradio_qslmsg'] = 'QSL Msg';
|
|||
$lang['gen_hamradio_locator'] = 'Locator';
|
||||
$lang['gen_hamradio_transmit_power'] = 'Vermogen (W)';
|
||||
$lang['gen_hamradio_propagation_mode'] = 'Propagattie Mode';
|
||||
$lang['gen_hamradio_propagation_AS'] = "Aircraft Scatter";
|
||||
$lang['gen_hamradio_propagation_AUR'] = "Aurora";
|
||||
$lang['gen_hamradio_propagation_AUE'] = "Aurora-E";
|
||||
$lang['gen_hamradio_propagation_BS'] = "Back scatter";
|
||||
$lang['gen_hamradio_propagation_ECH'] = "EchoLink";
|
||||
$lang['gen_hamradio_propagation_EME'] = "Earth-Moon-Earth";
|
||||
$lang['gen_hamradio_propagation_ES'] = "Sporadic E";
|
||||
$lang['gen_hamradio_propagation_FAI'] = "Field Aligned Irregularities";
|
||||
$lang['gen_hamradio_propagation_F2'] = "F2 Reflection";
|
||||
$lang['gen_hamradio_propagation_INTERNET'] = "Internet-assisted";
|
||||
$lang['gen_hamradio_propagation_ION'] = "Ionoscatter";
|
||||
$lang['gen_hamradio_propagation_IRL'] = "IRLP";
|
||||
$lang['gen_hamradio_propagation_MS'] = "Meteor scatter";
|
||||
$lang['gen_hamradio_propagation_RPT'] = "Terrestrial or atmospheric repeater or transponder";
|
||||
$lang['gen_hamradio_propagation_RS'] = "Rain scatter";
|
||||
$lang['gen_hamradio_propagation_SAT'] = "Satellite";
|
||||
$lang['gen_hamradio_propagation_TEP'] = "Trans-equatorial";
|
||||
$lang['gen_hamradio_propagation_TR'] = "Tropospheric ducting";
|
||||
|
||||
$lang['gen_hamradio_satellite_name'] = 'Satelliet Naam';
|
||||
$lang['gen_hamradio_satellite_mode'] = 'Satelliet Mode';
|
||||
|
|
@ -248,5 +222,3 @@ $lang['dashboard_logbooks_warning'] = 'You have no station logbook. Go <a href="
|
|||
$lang['hams_at_no_activations_found'] = 'No upcoming activations found. Please check back later.';
|
||||
|
||||
$lang['datatables_language'] = "en-GB";
|
||||
|
||||
$lang['set_log_to_full_dates'] = "Set log to full dates";
|
||||
|
|
@ -17,7 +17,6 @@ $lang['menu_post_contest_logging'] = 'Post Contest Logging';
|
|||
$lang['menu_bandmap'] = 'Bandmap';
|
||||
$lang['menu_view_qsl'] = 'View QSL Cards';
|
||||
$lang['menu_view_eqsl'] = 'View eQSL Cards';
|
||||
$lang['menu_view_sstv'] = 'View SSTV Images';
|
||||
|
||||
$lang['menu_notes'] = 'Notes';
|
||||
|
||||
|
|
@ -32,7 +31,6 @@ $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';
|
||||
|
||||
|
|
@ -96,4 +94,3 @@ $lang['menu_logout'] = 'Logout';
|
|||
$lang['menu_ffma'] = "Fred Fish Memorial Award";
|
||||
$lang['menu_ja_gridmaster'] = 'JA Gridmaster';
|
||||
$lang['menu_maintenance']='Maintenance';
|
||||
$lang['menu_uk_gridmaster'] = 'UK Gridmaster';
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
<?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.';
|
||||
|
|
@ -87,7 +87,7 @@ $lang['options_version_dialog_mode_release_notes'] = "Only Release Notes";
|
|||
$lang['options_version_dialog_mode_custom_text'] = "Only Custom Text";
|
||||
$lang['options_version_dialog_mode_both'] = "Release Notes and Custom Text";
|
||||
$lang['options_version_dialog_mode_disabled'] = "Disabled";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after they read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after he read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_custom_text'] = "Version Info Custom Text";
|
||||
$lang['options_version_dialog_custom_text_hint'] = "This is the custom text which is shown in the dialog.";
|
||||
$lang['options_version_dialog_mode_changed_to'] = "Version Info Mode changed to";
|
||||
|
|
@ -123,5 +123,4 @@ $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.';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['sstv_string_disk_space'] = 'of disk space to store SSTV image assets';
|
||||
|
|
@ -32,8 +32,6 @@ $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";
|
||||
|
|
|
|||
|
|
@ -25,21 +25,14 @@ $lang['statistics_number_of_qso_worked'] = "# of QSO's worked";
|
|||
*
|
||||
*/
|
||||
|
||||
$lang['statistics_distances_bands_all'] = "All";
|
||||
$lang['statistics_distances_modes_all'] = "All";
|
||||
$lang['statistics_distances_worked'] = "Distances Worked";
|
||||
$lang['statistics_distances_part1_contacts_were_plotted_furthest'] = "contacts were plotted.<br /> Your furthest contact was with";
|
||||
$lang['statistics_distances_part2_contacts_were_plotted_furthest'] = "in gridsquare";
|
||||
$lang['statistics_distances_part3_contacts_were_plotted_furthest'] = "The distance was";
|
||||
$lang['statistics_distances_part4_contacts_were_plotted_furthest'] = "The average distance is";
|
||||
$lang['statistics_distances_part3_contacts_were_plotted_furthest'] = "the distance was";
|
||||
$lang['statistics_distances_number_of_qsos'] = "Number of QSOs";
|
||||
$lang['statistics_distances_callsigns_worked'] = "Callsign(s) worked (max 5 shown)";
|
||||
$lang['statistics_distances_qsos_with'] = "QSOs with distance : ";
|
||||
$lang['statistics_distances_and_band'] = ", band : ";
|
||||
$lang['statistics_distances_and_mode'] = ", mode : ";
|
||||
$lang['statistics_distances_and_power'] = ", power : ";
|
||||
$lang['statistics_distances_and_propagation'] = ", propagation : ";
|
||||
$lang['statistics_distances_no_qsos_to_plot'] = "No QSOs found to plot.";
|
||||
$lang['statistics_distances_qsos_with'] = "QSOs with";
|
||||
$lang['statistics_distances_and_band'] = "and band";
|
||||
|
||||
/*
|
||||
*
|
||||
|
|
@ -55,16 +48,8 @@ $lang['statistics_timeline'] = "Timeline";
|
|||
*
|
||||
*/
|
||||
|
||||
$lang['statistics_tab_yearly'] = "Yearly";
|
||||
$lang['statistics_tab_streaks'] = "Streaks";
|
||||
$lang['statistics_tab_weekdays'] = "Days of the week";
|
||||
$lang['statistics_tab_daily'] = "Daily";
|
||||
$lang['statistics_days_yearly'] = "Number of days with QSOs each year";
|
||||
$lang['statistics_days_with_qso'] = "Days with QSOs";
|
||||
$lang['statistics_qsos_each_day'] = "Number of QSOs each day";
|
||||
$lang['statistics_weekdays_with_qso'] = "QSOs breakdown by day of the week";
|
||||
$lang['statistics_number_of_qsos_this_day'] = "Number of QSOs this day";
|
||||
$lang['statistics_number_of_qsos_this_weekday'] = "Number of QSOs for this day of the week";
|
||||
$lang['statistics_days_with_qso'] = "Number of days with QSOs each year";
|
||||
$lang['statistics_days_with_qso_short'] = "Days with QSOs";
|
||||
$lang['statistics_dwq_longest_streak_in_log'] = "Longest streak with QSOs in the log";
|
||||
$lang['statistics_dwq_longest_streak_in_log_hint'] = "A maximum of the 10 longest streaks are shown!";
|
||||
$lang['statistics_dwq_streak_continuous_days'] = "Streak (continuous days with QSOs)";
|
||||
|
|
@ -72,3 +57,4 @@ $lang['statistics_dwq_current_streak_in_log'] = "Current streak with QSOs in the
|
|||
$lang['statistics_dwq_current_streak_continuous_days'] = "Current streak (continuous days with QSOs)";
|
||||
$lang['statistics_dwq_make_qso_to_extend_streak'] = "If you make a QSO today, you can continue to extend your streak... or else your current streak will be broken!";
|
||||
$lang['statistics_dwq_no_current_streak'] = "No current streak found!";
|
||||
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ $lang['account_gridmap_default_band'] = 'Default Band';
|
|||
$lang['account_qsl_settings'] = 'Default QSL-Methods';
|
||||
|
||||
$lang['account_winkeyer'] = 'Winkeyer';
|
||||
$lang['account_winkeyer_hint'] = "Winkeyer support in Cloudlog is very experimental.<br><br>Read the wiki first at <a href='https://github.com/magicbug/Cloudlog/wiki/Winkey' target='_blank'>https://github.com/magicbug/Cloudlog/wiki/Winkey</a> before enabling.";
|
||||
$lang['account_winkeyer_hint'] = "Winkeyer support in Cloudlog is very experimental read the wiki first at <a href='https://github.com/magicbug/Cloudlog/wiki/Winkey' target='_blank'>https://github.com/magicbug/Cloudlog/wiki/Winkey</a> before enabling.";
|
||||
$lang['account_winkeyer_enabled'] = "Winkeyer Features Enabled";
|
||||
|
||||
$lang['account_map_params'] = "Map Settings";
|
||||
|
|
@ -127,11 +127,3 @@ $lang['account_qso_logging_options'] = "QSO Logging Options";
|
|||
$lang['account_third_party_services'] = "Third Party Services";
|
||||
$lang['account_default_values'] = "Default Values";
|
||||
$lang['account_miscellaneous'] = "Miscellaneous";
|
||||
|
||||
$lang['account_hamsat'] = "Hams.at";
|
||||
$lang['account_hamsat_private_feed_key'] = "Private Feed Key";
|
||||
$lang['account_hamsat_hint'] = "See your profile at <a href='https://hams.at/users/settings' target='_blank'>https://hams.at/users/settings</a>.";
|
||||
$lang['account_hamsat_workable_only'] = "Show Workable Passes Only";
|
||||
$lang['account_hamsat_workable_only_hint'] = "If enabled shows only workable passes based on the gridsquare set in your hams.at account. Requires private feed key to be set.";
|
||||
|
||||
$lang['account_remember_me'] = 'Remember me';
|
||||
|
|
@ -193,13 +193,3 @@ $lang['awards_waja_description_ln1'] = "WAJA - Worked All Japan prefectures Awar
|
|||
$lang['awards_waja_description_ln2'] = "WAJA, Worked All Japan prefectures in Amateur Radio, encourages licensed ham radio operators to work all the prefectures in Japan.";
|
||||
$lang['awards_waja_description_ln3'] = "May be claimed for having contacted (heard) and received a QSL card from an amateur station located in each of the 47 prefectures of Japan. A list of QSL cards should be arranged in order of WAJA (HAJA) reference number, however names of prefectures may be omitted.";
|
||||
$lang['awards_waja_description_ln4'] = "For more information, please visit: <a href='https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm' target='_blank'>https://www.jarl.org/English/4_Library/A-4-2_Awards/Award_Main.htm</a>.";
|
||||
|
||||
/*
|
||||
___________________________________________________________________________________________
|
||||
WAB -- Use all 4 Lines of Text
|
||||
___________________________________________________________________________________________
|
||||
*/
|
||||
$lang['awards_wab_description_ln1'] = "WAB - Worked All Britain Award";
|
||||
$lang['awards_wab_description_ln2'] = "The Amateur Radio Worked All Britain (WAB) Award is a prestigious recognition program within the amateur radio community that celebrates communication achievements across the United Kingdom. The WAB Award scheme encourages radio operators to establish contact with stations located in different regions of Britain, fostering camaraderie and promoting radio communication skills. To earn the WAB Award, participants must make successful radio contacts with stations located in specific WAB areas, which are defined by Ordnance Survey grid squares. These grid squares cover the entirety of Great Britain, including England, Scotland, Wales, and some offshore islands.";
|
||||
$lang['awards_wab_description_ln3'] = "Participants in the WAB Award program exchange information such as their location, signal strength, and WAB square reference during radio contacts. Points are awarded based on the location of the contacted station, with different point values assigned to contacts made within different WAB areas. By accumulating points from successful contacts, radio operators can progress through various award levels, each representing a significant milestone in their amateur radio journey. The WAB Award not only recognizes the dedication and skill of radio operators but also promotes geographic diversity and encourages exploration of the rich tapestry of locations across Britain through the medium of amateur radio.";
|
||||
$lang['awards_wab_description_ln4'] = "For more information, please visit: <a href='https://wab.intermip.net/default.php' target='_blank'>https://wab.intermip.net/default.php</a>.";
|
||||
|
|
|
|||
|
|
@ -28,11 +28,5 @@ $lang['contesting_title_callsign_suggestions'] = 'Callsign Suggestions';
|
|||
$lang['contesting_title_contest_logbook'] = 'Contest Logbook';
|
||||
|
||||
$lang['contesting_copy_exch_to_dok'] = 'Copy received exchange to DOK field in the database!';
|
||||
$lang['contesting_copy_exch_to_none'] = 'Copy received exchange to no additional field in the database!';
|
||||
$lang['contesting_copy_exch_to_power'] = 'Copy received exchange to RX-Power field in the database!';
|
||||
$lang['contesting_copy_exch_to_state'] = 'Copy received exchange to US-State field in the database!';
|
||||
$lang['contesting_copy_exch_to_age'] = 'Copy received exchange to Age field in the database!';
|
||||
$lang['contesting_copy_exch_to_name'] = 'Copy received exchange to Name field in the database!';
|
||||
$lang['contesting_copy_exch_to_locator'] = 'Copy received exchange to Locator field in the database!';
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -23,10 +23,9 @@ $lang['general_word_export'] = "Export";
|
|||
$lang['general_word_import'] = "Import";
|
||||
$lang['general_word_count'] = "Count";
|
||||
$lang['general_word_filtering_on'] = "Filtering on";
|
||||
$lang['general_word_not_display'] = "Not displayed";
|
||||
$lang['general_word_not_display'] = "Not display";
|
||||
$lang['general_word_icon'] = "Icon";
|
||||
$lang['general_word_never'] = "Never";
|
||||
$lang['general_word_undefined'] = "Undefined";
|
||||
|
||||
$lang['general_word_date'] = 'Date';
|
||||
$lang['general_word_startdate'] = "Start Date";
|
||||
|
|
@ -37,7 +36,6 @@ $lang['general_word_time_off'] = 'Time off';
|
|||
$lang['general_word_datetime'] = 'Date/Time';
|
||||
$lang['general_word_none'] = 'None';
|
||||
$lang['general_word_name'] = 'Name';
|
||||
$lang['general_word_flag'] = 'Flag';
|
||||
$lang['general_word_location'] = 'Location';
|
||||
$lang['general_word_comment'] = 'Comment';
|
||||
$lang['general_word_general'] = 'General';
|
||||
|
|
@ -76,10 +74,6 @@ $lang['general_word_invalid_ignore'] = 'Invalid (Ignore)';
|
|||
$lang['general_word_qslcard'] = 'QSL Card';
|
||||
$lang['general_word_qslcard_management'] = 'QSL Management';
|
||||
$lang['general_word_qslcards'] = 'QSL Cards';
|
||||
$lang['general_word_sstv_management'] = 'SSTV Management';
|
||||
$lang['general_word_sstvimages'] = 'SSTV Images';
|
||||
$lang['general_sstv_upload'] = 'Uploaded SSTV images';
|
||||
$lang['general_sstv_upload_button'] = 'Upload SSTV image(s)';
|
||||
$lang['general_word_qslcard_direct'] = 'Direct';
|
||||
$lang['general_word_qslcard_bureau'] = 'Bureau';
|
||||
$lang['general_word_qslcard_electronic'] = 'Electronic';
|
||||
|
|
@ -130,8 +124,6 @@ $lang['gen_hamradio_suffix'] = "Suffix";
|
|||
$lang['gen_hamradio_de'] = 'De';
|
||||
$lang['gen_hamradio_dx'] = 'Dx';
|
||||
$lang['gen_hamradio_mode'] = 'Mode';
|
||||
$lang['gen_hamradio_ant_az'] = 'Antenna Azimuth';
|
||||
$lang['gen_hamradio_ant_el'] = 'Antenna Elevation';
|
||||
$lang['gen_hamradio_rst_sent'] = 'Sent';
|
||||
$lang['gen_hamradio_rst_rcvd'] = 'Recv\'d';
|
||||
$lang['gen_hamradio_band'] = 'Band';
|
||||
|
|
@ -153,24 +145,6 @@ $lang['gen_hamradio_qslmsg'] = 'QSL Msg';
|
|||
$lang['gen_hamradio_locator'] = 'Locator';
|
||||
$lang['gen_hamradio_transmit_power'] = 'Transmit Power (W)';
|
||||
$lang['gen_hamradio_propagation_mode'] = 'Propagation Mode';
|
||||
$lang['gen_hamradio_propagation_AS'] = "Aircraft Scatter";
|
||||
$lang['gen_hamradio_propagation_AUR'] = "Aurora";
|
||||
$lang['gen_hamradio_propagation_AUE'] = "Aurora-E";
|
||||
$lang['gen_hamradio_propagation_BS'] = "Back scatter";
|
||||
$lang['gen_hamradio_propagation_ECH'] = "EchoLink";
|
||||
$lang['gen_hamradio_propagation_EME'] = "Earth-Moon-Earth";
|
||||
$lang['gen_hamradio_propagation_ES'] = "Sporadic E";
|
||||
$lang['gen_hamradio_propagation_FAI'] = "Field Aligned Irregularities";
|
||||
$lang['gen_hamradio_propagation_F2'] = "F2 Reflection";
|
||||
$lang['gen_hamradio_propagation_INTERNET'] = "Internet-assisted";
|
||||
$lang['gen_hamradio_propagation_ION'] = "Ionoscatter";
|
||||
$lang['gen_hamradio_propagation_IRL'] = "IRLP";
|
||||
$lang['gen_hamradio_propagation_MS'] = "Meteor scatter";
|
||||
$lang['gen_hamradio_propagation_RPT'] = "Terrestrial or atmospheric repeater or transponder";
|
||||
$lang['gen_hamradio_propagation_RS'] = "Rain scatter";
|
||||
$lang['gen_hamradio_propagation_SAT'] = "Satellite";
|
||||
$lang['gen_hamradio_propagation_TEP'] = "Trans-equatorial";
|
||||
$lang['gen_hamradio_propagation_TR'] = "Tropospheric ducting";
|
||||
|
||||
$lang['gen_hamradio_satellite_name'] = 'Satellite Name';
|
||||
$lang['gen_hamradio_satellite_mode'] = 'Satellite Mode';
|
||||
|
|
@ -248,5 +222,3 @@ $lang['dashboard_logbooks_warning'] = 'You have no station logbook. Go <a href="
|
|||
$lang['hams_at_no_activations_found'] = 'No upcoming activations found. Please check back later.';
|
||||
|
||||
$lang['datatables_language'] = "en-GB";
|
||||
|
||||
$lang['set_log_to_full_dates'] = "Set log to full dates";
|
||||
|
|
@ -17,7 +17,6 @@ $lang['menu_post_contest_logging'] = 'Post Contest Logging';
|
|||
$lang['menu_bandmap'] = 'Bandmap';
|
||||
$lang['menu_view_qsl'] = 'View QSL Cards';
|
||||
$lang['menu_view_eqsl'] = 'View eQSL Cards';
|
||||
$lang['menu_view_sstv'] = 'View SSTV Images';
|
||||
|
||||
$lang['menu_notes'] = 'Notes';
|
||||
|
||||
|
|
@ -32,7 +31,6 @@ $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';
|
||||
|
||||
|
|
@ -97,4 +95,3 @@ $lang['menu_forum'] = 'Forum';
|
|||
$lang['menu_logout'] = 'Logout';
|
||||
|
||||
$lang['menu_maintenance']='Maintenance';
|
||||
$lang['menu_uk_gridmaster'] = 'UK & Crown Dependencies Gridmaster';
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
<?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.';
|
||||
|
|
@ -87,7 +87,7 @@ $lang['options_version_dialog_mode_release_notes'] = "Only Release Notes";
|
|||
$lang['options_version_dialog_mode_custom_text'] = "Only Custom Text";
|
||||
$lang['options_version_dialog_mode_both'] = "Release Notes and Custom Text";
|
||||
$lang['options_version_dialog_mode_disabled'] = "Disabled";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after they read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_mode_hint'] = "The Version Info is shown to every user. The user has the option to dismiss the dialog after he read it. Select if you want to show only release notes (fetched from github), only custom text or both.";
|
||||
$lang['options_version_dialog_custom_text'] = "Version Info Custom Text";
|
||||
$lang['options_version_dialog_custom_text_hint'] = "This is the custom text which is shown in the dialog.";
|
||||
$lang['options_version_dialog_mode_changed_to'] = "Version Info Mode changed to";
|
||||
|
|
@ -101,7 +101,6 @@ $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
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
$lang['sstv_string_disk_space'] = 'of disk space to store SSTV image assets';
|
||||
|
|
@ -32,8 +32,6 @@ $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";
|
||||
|
|
|
|||
某些文件未显示,因为此 diff 中更改的文件太多 显示更多
正在加载…
在新工单中引用