Merge branch 'dev' into winkeytest

这个提交包含在:
Peter Goodhall 2023-08-01 16:24:33 +01:00 提交者 GitHub
当前提交 2f4107c1c2
找不到此签名对应的密钥
GPG 密钥 ID: 4AEE18F83AFDEB23
共有 336 个文件被更改,包括 25500 次插入2152 次删除

查看文件

@ -0,0 +1,26 @@
name: Accessibility-alt-text-bot
on:
issues:
types: [opened, edited]
pull_request:
types: [opened, edited]
issue_comment:
types: [created, edited]
discussion:
types: [created, edited]
discussion_comment:
types: [created, edited]
permissions:
issues: write
pull-requests: write
discussions: write
jobs:
accessibility_alt_text_bot:
name: Check alt text is set on issue or pull requests
runs-on: ubuntu-latest
if: ${{ github.event.issue || github.event.pull_request || github.event.discussion }}
steps:
- name: Get action 'github/accessibility-alt-text-bot'
uses: github/accessibility-alt-text-bot@v1.2.0 # Set to latest

37
.github/workflows/push-docker-hub.yml vendored 普通文件
查看文件

@ -0,0 +1,37 @@
name: Push Docker image to the Hub
on:
push:
# Pattern matched against refs/tags
tags:
- '*' # Push events to every tag not containing
workflow_dispatch:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: actions-ecosystem/action-get-latest-tag@v1
id: get-latest-tag
- name: Print latest tag
run: echo ${{ steps.get-latest-tag.outputs.tag }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: ./
file: ./docker/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ secrets.DOCKERHUB_IMAGENAME }}:${{ steps.get-latest-tag.outputs.tag }},${{ secrets.DOCKERHUB_IMAGENAME }}:latest

查看文件

@ -5,8 +5,10 @@
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/backup/$
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteRule ^(.*)$ /index.php?/$1 "[L,QSA,B= ?,BNP]"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteRule ^(.*)$ /index.php?/$1 "[L,QSA,B= ?,BNP]"
RedirectMatch 404 ^/\.git

查看文件

@ -40,12 +40,12 @@ When submitting PRs please make sure code is commented and includes one feature
## Credits
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) and Flo (DF2ET) 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) and Joerg (DJ7NT) for contributing code or help to Cloudlog.
## Patreons & Donors
Cloudlog is supported by Patreon and donations via PayPal, thanks to the following people:
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).
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).
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)

查看文件

@ -106,6 +106,7 @@ $autoload['language'] = array(
'notes',
'qslcard',
'qso',
'gridsquares'
);
/*

查看文件

@ -8,17 +8,15 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|--------------------------------------------------------------------------
|
| 'app_name' Name of the App 'Cloudlog'
| 'app_version' Set by the dev team.
| 'app_version' Set by the dev team.
| 'directory' directory where cloudlog is installed eg "logger"
| 'callbook' Selects which Callbook lookup to use defaults "hamqth" but supports "qrz"
*/
$config['app_name'] = "Cloudlog";
$config['app_version'] = "2.4.2";
$config['app_version'] = "2.4.5";
$config['directory'] = "logbook";
$config['callbook'] = "hamqth"; // Options are hamqth or qrz
$config['datadir'] = null; // default to install directory
/*
@ -27,8 +25,8 @@ $config['datadir'] = null; // default to install directory
|--------------------------------------------------------------------------
|
| 'table_name' SQL table where log can be found
| 'locator' Default locator used to calculate bearings/distance
| 'display_freq' Show or Hide frequnecy info
| 'locator' Default locator used to calculate bearings/distance
| 'display_freq' Show or Hide frequnecy info
*/
$config['table_name'] = "TABLE_HRD_CONTACTS_V01";
@ -42,11 +40,12 @@ $config['display_freq'] = true;
|
| 'qrz_username' QRZ.com user login
| 'qrz_password' QRZ.com user password
| 'use_fullname' Get full names from QRZ, may not be GDPR compliant
*/
$config['qrz_username'] = "";
$config['qrz_password'] = "";
$config['use_fullname'] = false;
/*
|--------------------------------------------------------------------------
@ -59,7 +58,6 @@ $config['qrz_password'] = "";
$config['hamqth_username'] = "";
$config['hamqth_password'] = "";
/*
|--------------------------------------------------------------------------
| Authentication
@ -67,7 +65,7 @@ $config['hamqth_password'] = "";
|
| 'use_auth' False turns all authentication off, best used when setting up
| 'auth_table' MySQL Database Table defaults "users"
| 'auth_mode' Minimum user level required 0 = anonymous, 1 = viewer,
| 'auth_mode' Minimum user level required 0 = anonymous, 1 = viewer,
| 2 = editor, 3 = api user, 99 = owner
| 'auth_level[]' Defines level titles
*/
@ -568,6 +566,7 @@ $config['compress_output'] = FALSE;
*/
$config['time_reference'] = 'UTC';
date_default_timezone_set($config['time_reference']);
/*
|--------------------------------------------------------------------------
| Rewrite PHP Short Tags

查看文件

@ -3,7 +3,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
/*
*
* Configuration file for all things relating to LOTW
* Configuration file for all things relating to LoTW
*
*/

查看文件

@ -21,6 +21,7 @@ $config['migration_enabled'] = TRUE;
| be upgraded / downgraded to.
|
*/
$config['migration_version'] = 132;
/*

查看文件

@ -1,9 +1,9 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
Activated_grids Controller
*/
class Activated_grids extends CI_Controller {
@ -14,6 +14,15 @@ class Activated_grids extends CI_Controller {
* - Band page provide a band dropdown list
* - Find somewhere in the main menu to add a button to it
*/
function __construct()
{
parent::__construct();
// Load language files
$this->lang->load(array(
'gridsquares',
));
}
public function index() {
@ -59,7 +68,7 @@ class Activated_grids extends CI_Controller {
$grid_6char_confirmed = "";
// Get Confirmed LOTW & Paper Activated Squares (non VUCC)
// Get Confirmed LoTW & Paper Activated Squares (non VUCC)
$query = $this->activated_grids_model->get_activated_confirmed_sat_squares();
@ -77,21 +86,19 @@ class Activated_grids extends CI_Controller {
if ($this->config->item('map_6digit_grids')) {
$grid_six = strtoupper(substr($subsquare,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_confirmed_grid_2char)){
array_push($array_confirmed_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_confirmed_grid_4char)){
array_push($array_confirmed_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_confirmed_grid_6char)){
array_push($array_confirmed_grid_6char, $grid_six);
}
}
}
@ -103,21 +110,19 @@ class Activated_grids extends CI_Controller {
if ($this->config->item('map_6digit_grids')) {
$grid_6char_confirmed = strtoupper(substr($row->SAT_SQUARE,0,6));
}
// Check if 2 Char is in array
if(!in_array($grid_2char_confirmed, $array_confirmed_grid_2char)){
array_push($array_confirmed_grid_2char, $grid_2char_confirmed);
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);
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);
array_push($array_confirmed_grid_6char, $grid_6char_confirmed);
}
}
@ -144,21 +149,19 @@ class Activated_grids extends CI_Controller {
if ($this->config->item('map_6digit_grids')) {
$grid_six = strtoupper(substr($subsquare,0,6));
}
// Check if 2 Char is in array
if(!in_array($grid_two, $array_grid_2char)){
array_push($array_grid_2char, $grid_two);
array_push($array_grid_2char, $grid_two);
}
if(!in_array($grid_four, $array_grid_4char)){
array_push($array_grid_4char, $grid_four);
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);
array_push($array_grid_6char, $grid_six);
}
}
}
@ -170,21 +173,19 @@ class Activated_grids extends CI_Controller {
if ($this->config->item('map_6digit_grids')) {
$grid_six = strtoupper(substr($row->SAT_SQUARE,0,6));
}
// Check if 2 Char is in array
if(!in_array($grid_two, $array_grid_2char)){
array_push($array_grid_2char, $grid_two);
array_push($array_grid_2char, $grid_two);
}
if(!in_array($grid_four, $array_grid_4char)){
array_push($array_grid_4char, $grid_four);
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);
array_push($array_grid_6char, $grid_six);
}
}
@ -205,7 +206,6 @@ class Activated_grids extends CI_Controller {
return '[' . implode(',', $temp) . ']';
}
$data['grid_2char_confirmed'] = js_array($array_confirmed_grid_2char);
$data['grid_4char_confirmed'] = js_array($array_confirmed_grid_4char);
$data['grid_6char_confirmed'] = js_array($array_confirmed_grid_6char);
@ -219,7 +219,6 @@ class Activated_grids extends CI_Controller {
$this->load->view('activated_grids/index.php');
$this->load->view('interface_assets/footer');
}
public function band($band)
{
@ -257,16 +256,16 @@ class Activated_grids extends CI_Controller {
// 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);
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);
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);
array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
}
}
}
@ -287,18 +286,18 @@ class Activated_grids extends CI_Controller {
// Check if 2 Char is in array
if(!in_array($grid_two, $array_grid_2char)){
array_push($array_grid_2char, $grid_two);
array_push($array_grid_2char, $grid_two);
}
if(!in_array($grid_four, $array_grid_4char)){
array_push($array_grid_4char, $grid_four);
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);
array_push($array_grid_6char, $grid_six);
}
}

查看文件

@ -171,8 +171,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');
@ -180,39 +179,39 @@ class adif extends CI_Controller {
$this->load->view('interface_assets/header', $data);
$this->load->view('adif/import');
$this->load->view('interface_assets/footer');
}
else
{
} else {
if ($this->stations->check_station_is_accessible($this->input->post('station_profile'))) {
$data = array('upload_data' => $this->upload->data());
$data = array('upload_data' => $this->upload->data());
ini_set('memory_limit', '-1');
set_time_limit(0);
ini_set('memory_limit', '-1');
set_time_limit(0);
$this->load->model('logbook_model');
$this->load->model('logbook_model');
$this->load->library('adif_parser');
$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();
$custom_errors = "";
while($record = $this->adif_parser->get_record())
{
if(count($record) == 0)
$this->adif_parser->initialize();
$custom_errors = "";
while($record = $this->adif_parser->get_record())
{
break;
if(count($record) == 0) {
break;
};
$one_error = $this->logbook_model->import($record, $this->input->post('station_profile'), $this->input->post('skipDuplicate'), $this->input->post('markLotw'), $this->input->post('dxccAdif'), $this->input->post('markQrz'), $this->input->post('markHrd'), true, $this->input->post('operatorName'));
if ($one_error != '') {
$custom_errors.=$one_error."<br/>";
}
};
$custom_errors .= $this->logbook_model->import($record, $this->input->post('station_profile'),
$this->input->post('skipDuplicate'), $this->input->post('markLotw'), $this->input->post('dxccAdif'), $this->input->post('markQrz'), true, $this->input->post('operatorName'));
};
unlink('./uploads/'.$data['upload_data']['file_name']);
} else {
$custom_errors='Station Profile not valid for User';
}
$data['adif_errors'] = $custom_errors;
unlink('./uploads/'.$data['upload_data']['file_name']);
$data['page_title'] = "ADIF Imported";
$this->load->view('interface_assets/header', $data);

查看文件

@ -5,38 +5,7 @@ class API extends CI_Controller {
// Do absolutely nothing
function index()
{
}
/*
TODOs
- Search Callsign (Return Json)
- Add QSO return json
*/
function search_callsign($callsign) {
$this->db->select('COL_PRIMARY_KEY, COL_CALL, COL_MODE, COL_SUBMODE, COL_BAND, COL_COUNTRY, COL_FREQ, COL_GRIDSQUARE, COL_RST_RCVD, COL_RST_SENT, COL_SAT_MODE, COL_SAT_NAME');
//$this->db->select("DATE_FORMAT(COL_TIME_ON, '%H:%i') AS time_on", FALSE );
//$this->db->select("DATE_FORMAT(COL_TIME_ON, '%d/%c/%Y') AS date_on", FALSE );
$this->db->like('COL_CALL', $callsign);
$this->db->or_like('COL_GRIDSQUARE', $callsign);
$query = $this->db->get($this->config->item('table_name'));
$results = array();
foreach ($query->result() as $result)
{
$results[] = $result;
}
header('Content-type: application/json');
//$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo $_GET['jsoncallback'].'('.json_encode($results).')'; //assign resulting code to $_GET['jsoncallback].
//echo json_encode($results);
echo "nothing to see";
}
function help()
@ -158,6 +127,30 @@ class API extends CI_Controller {
}
}
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 */
$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);
}
echo json_encode($station_ids);
} else {
http_response_code(401);
echo json_encode(['status' => 'failed', 'reason' => "missing or invalid api key"]);
}
}
// FUNCTION: search()
// Handle search requests
/*
@ -423,6 +416,8 @@ class API extends CI_Controller {
$this->load->model('api_model');
$this->load->model('stations');
// Decode JSON and store
$obj = json_decode(file_get_contents("php://input"), true);
if ($obj === NULL) {
@ -436,6 +431,14 @@ class API extends CI_Controller {
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) {
http_response_code(401);
echo json_encode(['status' => 'failed', 'reason' => "station id does not belong to the API key owner."]);
die();
}
$this->api_model->update_last_used($obj['key']);
if($obj['type'] == "adif" && $obj['string'] != "") {
@ -458,9 +461,7 @@ class API extends CI_Controller {
if(isset($obj['station_profile_id'])) {
$this->logbook_model->import($record, $obj['station_profile_id'], NULL, NULL, NULL, NULL, false, false, true);
} else {
$this->logbook_model->import($record, 0, NULL, NULL, NULL, NULL, false, false, true);
$this->logbook_model->import($record, $obj['station_profile_id'], NULL, NULL, NULL, NULL, NULL, false, false, true);
}
};
@ -617,19 +618,6 @@ class API extends CI_Controller {
}
function country_worked($dxcc_num, $band, $mode = NULL) {
$this->load->model('api_model');
echo $this->api_model->country_worked($dxcc_num, $band, $mode);
}
function gridsquare_worked($gridsquare, $band, $mode = NULL) {
$this->load->model('api_model');
echo $this->api_model->gridsquare_worked($gridsquare, $band, $mode);
}
/* ENDPOINT for Rig Control */
function radio() {
@ -647,8 +635,9 @@ class API extends CI_Controller {
$obj = json_decode(file_get_contents("php://input"), true);
if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) {
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
die();
http_response_code(401);
echo json_encode(['status' => 'failed', 'reason' => "missing api key"]);
die();
}
$this->api_model->update_last_used($obj['key']);
@ -819,7 +808,7 @@ class API extends CI_Controller {
/*
*
* Check if callsign is active on LOTW
* Check if callsign is active on LoTW
*
*/

查看文件

@ -41,7 +41,7 @@ class Awards extends CI_Controller {
$this->load->model('modes');
if($this->input->method() === 'post') {
$postdata['doks'] = $this->input->post('doks');
$postdata['doks'] = $this->security->xss_clean($this->input->post('doks'));
} else {
$postdata['doks'] = 'both';
}
@ -53,7 +53,7 @@ class Awards extends CI_Controller {
if ($this->input->post('band') == 'All') {
$bands = $data['worked_bands'];
} else {
$bands[] = $this->input->post('band');
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
} else {
$bands = $data['worked_bands'];
@ -62,13 +62,13 @@ class Awards extends CI_Controller {
$data['bands'] = $bands;
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->input->post('qsl');
$postdata['lotw'] = $this->input->post('lotw');
$postdata['eqsl'] = $this->input->post('eqsl');
$postdata['worked'] = $this->input->post('worked');
$postdata['confirmed'] = $this->input->post('confirmed');
$postdata['band'] = $this->input->post('band');
$postdata['mode'] = $this->input->post('mode');
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
} else {
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
@ -98,7 +98,7 @@ class Awards extends CI_Controller {
}
public function dok_details_ajax(){
$a = $this->input->post();
$a = $this->security->xss_clean($this->input->post());
$q = "";
foreach ($a as $key => $value) {
$q .= $key."=".$value.("&#40;and&#41;");
@ -141,7 +141,7 @@ class Awards extends CI_Controller {
$bands = $data['worked_bands'];
}
else {
$bands[] = $this->input->post('band');
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
}
else {
@ -151,22 +151,22 @@ class Awards extends CI_Controller {
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->input->post('qsl');
$postdata['lotw'] = $this->input->post('lotw');
$postdata['eqsl'] = $this->input->post('eqsl');
$postdata['worked'] = $this->input->post('worked');
$postdata['confirmed'] = $this->input->post('confirmed');
$postdata['notworked'] = $this->input->post('notworked');
$postdata['includedeleted'] = $this->input->post('includedeleted');
$postdata['Africa'] = $this->input->post('Africa');
$postdata['Asia'] = $this->input->post('Asia');
$postdata['Europe'] = $this->input->post('Europe');
$postdata['NorthAmerica'] = $this->input->post('NorthAmerica');
$postdata['SouthAmerica'] = $this->input->post('SouthAmerica');
$postdata['Oceania'] = $this->input->post('Oceania');
$postdata['Antarctica'] = $this->input->post('Antarctica');
$postdata['band'] = $this->input->post('band');
$postdata['mode'] = $this->input->post('mode');
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['includedeleted'] = $this->security->xss_clean($this->input->post('includedeleted'));
$postdata['Africa'] = $this->security->xss_clean($this->input->post('Africa'));
$postdata['Asia'] = $this->security->xss_clean($this->input->post('Asia'));
$postdata['Europe'] = $this->security->xss_clean($this->input->post('Europe'));
$postdata['NorthAmerica'] = $this->security->xss_clean($this->input->post('NorthAmerica'));
$postdata['SouthAmerica'] = $this->security->xss_clean($this->input->post('SouthAmerica'));
$postdata['Oceania'] = $this->security->xss_clean($this->input->post('Oceania'));
$postdata['Antarctica'] = $this->security->xss_clean($this->input->post('Antarctica'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
else { // Setting default values at first load of page
$postdata['qsl'] = 1;
@ -214,8 +214,8 @@ class Awards extends CI_Controller {
public function vucc_band(){
$this->load->model('vucc');
$band = str_replace('"', "", $this->input->get("Band"));
$type = str_replace('"', "", $this->input->get("Type"));
$band = str_replace('"', "", $this->security->xss_clean($this->input->get("Band")));
$type = str_replace('"', "", $this->security->xss_clean($this->input->get("Type")));
$data['vucc_array'] = $this->vucc->vucc_details($band, $type);
$data['type'] = $type;
@ -231,8 +231,8 @@ class Awards extends CI_Controller {
public function vucc_details_ajax(){
$this->load->model('logbook_model');
$gridsquare = str_replace('"', "", $this->input->post("Gridsquare"));
$band = str_replace('"', "", $this->input->post("Band"));
$gridsquare = str_replace('"', "", $this->security->xss_clean($this->input->post("Gridsquare")));
$band = str_replace('"', "", $this->security->xss_clean($this->input->post("Band")));
$data['results'] = $this->logbook_model->vucc_qso_details($gridsquare, $band);
// Render Page
@ -247,11 +247,11 @@ class Awards extends CI_Controller {
public function qso_details_ajax(){
$this->load->model('logbook_model');
$searchphrase = str_replace('"', "", $this->input->post("Searchphrase"));
$band = str_replace('"', "", $this->input->post("Band"));
$mode = str_replace('"', "", $this->input->post("Mode"));
$type = $this->input->post('Type');
$qsl = $this->input->post('QSL') == null ? '' : $this->input->post('QSL');
$searchphrase = str_replace('"', "", $this->security->xss_clean($this->input->post("Searchphrase")));
$band = str_replace('"', "", $this->security->xss_clean($this->input->post("Band")));
$mode = str_replace('"', "", $this->security->xss_clean($this->input->post("Mode")));
$type = $this->security->xss_clean($this->input->post('Type'));
$qsl = $this->input->post('QSL') == null ? '' : $this->security->xss_clean($this->input->post('QSL'));
$data['results'] = $this->logbook_model->qso_details($searchphrase, $band, $mode, $type, $qsl);
@ -361,14 +361,14 @@ class Awards extends CI_Controller {
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->input->post('qsl');
$postdata['lotw'] = $this->input->post('lotw');
$postdata['eqsl'] = $this->input->post('eqsl');
$postdata['worked'] = $this->input->post('worked');
$postdata['confirmed'] = $this->input->post('confirmed');
$postdata['notworked'] = $this->input->post('notworked');
$postdata['band'] = $this->input->post('band');
$postdata['mode'] = $this->input->post('mode');
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
else { // Setting default values at first load of page
$postdata['qsl'] = 1;
@ -411,7 +411,7 @@ class Awards extends CI_Controller {
$bands = $data['worked_bands'];
}
else {
$bands[] = $this->input->post('band');
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
}
else {
@ -421,14 +421,14 @@ class Awards extends CI_Controller {
$data['bands'] = $bands; // Used for displaying selected band(s) in the table in the view
if($this->input->method() === 'post') {
$postdata['qsl'] = $this->input->post('qsl');
$postdata['lotw'] = $this->input->post('lotw');
$postdata['eqsl'] = $this->input->post('eqsl');
$postdata['worked'] = $this->input->post('worked');
$postdata['confirmed'] = $this->input->post('confirmed');
$postdata['notworked'] = $this->input->post('notworked');
$postdata['band'] = $this->input->post('band');
$postdata['mode'] = $this->input->post('mode');
$postdata['qsl'] = $this->security->xss_clean($this->input->post('qsl'));
$postdata['lotw'] = $this->security->xss_clean($this->input->post('lotw'));
$postdata['eqsl'] = $this->security->xss_clean($this->input->post('eqsl'));
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
else { // Setting default values at first load of page
$postdata['qsl'] = 1;
@ -463,7 +463,7 @@ class Awards extends CI_Controller {
$bands = $data['worked_bands'];
}
else {
$bands[] = $this->input->post('band');
$bands[] = $this->security->xss_clean($this->input->post('band'));
}
}
else {
@ -474,19 +474,19 @@ class Awards extends CI_Controller {
$data['modes'] = $this->modes->active(); // Used in the view for mode select
if($this->input->method() === 'post') {
$postdata['worked'] = $this->input->post('worked');
$postdata['confirmed'] = $this->input->post('confirmed');
$postdata['notworked'] = $this->input->post('notworked');
$postdata['includedeleted'] = $this->input->post('includedeleted');
$postdata['Africa'] = $this->input->post('Africa');
$postdata['Asia'] = $this->input->post('Asia');
$postdata['Europe'] = $this->input->post('Europe');
$postdata['NorthAmerica'] = $this->input->post('NorthAmerica');
$postdata['SouthAmerica'] = $this->input->post('SouthAmerica');
$postdata['Oceania'] = $this->input->post('Oceania');
$postdata['Antarctica'] = $this->input->post('Antarctica');
$postdata['band'] = $this->input->post('band');
$postdata['mode'] = $this->input->post('mode');
$postdata['worked'] = $this->security->xss_clean($this->input->post('worked'));
$postdata['confirmed'] = $this->security->xss_clean($this->input->post('confirmed'));
$postdata['notworked'] = $this->security->xss_clean($this->input->post('notworked'));
$postdata['includedeleted'] = $this->security->xss_clean($this->input->post('includedeleted'));
$postdata['Africa'] = $this->security->xss_clean($this->input->post('Africa'));
$postdata['Asia'] = $this->security->xss_clean($this->input->post('Asia'));
$postdata['Europe'] = $this->security->xss_clean($this->input->post('Europe'));
$postdata['NorthAmerica'] = $this->security->xss_clean($this->input->post('NorthAmerica'));
$postdata['SouthAmerica'] = $this->security->xss_clean($this->input->post('SouthAmerica'));
$postdata['Oceania'] = $this->security->xss_clean($this->input->post('Oceania'));
$postdata['Antarctica'] = $this->security->xss_clean($this->input->post('Antarctica'));
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
}
else { // Setting default values at first load of page
$postdata['worked'] = 1;
@ -528,8 +528,8 @@ class Awards extends CI_Controller {
public function counties_details() {
$this->load->model('counties');
$state = str_replace('"', "", $this->input->get("State"));
$type = str_replace('"', "", $this->input->get("Type"));
$state = str_replace('"', "", $this->security->xss_clean($this->input->get("State")));
$type = str_replace('"', "", $this->security->xss_clean($this->input->get("Type")));
$data['counties_array'] = $this->counties->counties_details($state, $type);
$data['type'] = $type;
@ -544,8 +544,8 @@ class Awards extends CI_Controller {
public function counties_details_ajax(){
$this->load->model('logbook_model');
$state = str_replace('"', "", $this->input->post("State"));
$county = str_replace('"', "", $this->input->post("County"));
$state = str_replace('"', "", $this->security->xss_clean($this->input->post("State")));
$county = str_replace('"', "", $this->security->xss_clean($this->input->post("County")));
$data['results'] = $this->logbook_model->county_qso_details($state, $county);
// Render Page
@ -578,7 +578,7 @@ class Awards extends CI_Controller {
// Grab all worked sig stations
$this->load->model('sig');
$type = str_replace('"', "", $this->input->get("type"));
$type = str_replace('"', "", $this->security->xss_clean($this->input->get("type")));
$data['sig_all'] = $this->sig->get_all($type);
$data['type'] = $type;
@ -598,7 +598,7 @@ class Awards extends CI_Controller {
$this->load->model('adif_data');
$type = $this->uri->segment(3);
$type = $this->security->xss_clean($this->uri->segment(3));
$data['qsos'] = $this->adif_data->sig_all($type);
$this->load->view('adif/data/exportall', $data);
@ -652,8 +652,8 @@ class Awards extends CI_Controller {
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
$postdata['band'] = $this->input->post('band');
$postdata['mode'] = $this->input->post('mode');
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
if ($logbooks_locations_array) {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
@ -685,7 +685,7 @@ class Awards extends CI_Controller {
header('Content-Type: application/json');
echo json_encode($zones);
}
/*
function dxcc_map
This displays the DXCC map
@ -694,7 +694,7 @@ class Awards extends CI_Controller {
$this->load->model('dxcc');
$this->load->model('bands');
$bands[] = $this->input->post('band');
$bands[] = $this->security->xss_clean($this->input->post('band'));
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
@ -702,8 +702,8 @@ class Awards extends CI_Controller {
$postdata['worked'] = $this->input->post('worked') == 0 ? NULL: 1;
$postdata['confirmed'] = $this->input->post('confirmed') == 0 ? NULL: 1;
$postdata['notworked'] = $this->input->post('notworked') == 0 ? NULL: 1;
$postdata['band'] = $this->input->post('band');
$postdata['mode'] = $this->input->post('mode');
$postdata['band'] = $this->security->xss_clean($this->input->post('band'));
$postdata['mode'] = $this->security->xss_clean($this->input->post('mode'));
$postdata['includedeleted'] = $this->input->post('includedeleted') == 0 ? NULL: 1;
$postdata['Africa'] = $this->input->post('Africa') == 0 ? NULL: 1;
$postdata['Asia'] = $this->input->post('Asia') == 0 ? NULL: 1;
@ -743,7 +743,7 @@ class Awards extends CI_Controller {
$this->load->model('iota');
$this->load->model('bands');
$bands[] = $this->input->post('band');
$bands[] = $this->security->xss_clean($this->input->post('band'));
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;

查看文件

@ -10,7 +10,7 @@ class Backup extends CI_Controller {
public function index()
{
$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(99)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
$data['page_title'] = "Backup";
@ -23,7 +23,7 @@ class Backup extends CI_Controller {
public function adif($key = null){
if ($key == null) {
$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(99)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
}
$this->load->helper('file');
@ -58,7 +58,7 @@ class Backup extends CI_Controller {
public function notes($key = null) {
if ($key == null) {
$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(99)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
}
$this->load->helper('file');

查看文件

@ -0,0 +1,75 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Bandmap 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'); }
$this->load->model('bands');
}
function index() {
$this->load->model('cat');
$this->load->model('bands');
$data['radios'] = $this->cat->radios();
$data['bands'] = $this->bands->get_user_bands_for_qso_entry();
$footerData = [];
$footerData['scripts'] = [
'assets/js/highcharts/highcharts.js',
'assets/js/highcharts/timeline.js',
'assets/js/highcharts/exporting.js',
'assets/js/highcharts/accessibility.js',
'assets/js/sections/bandmap.js',
];
$data['page_title'] = "DXCluster";
$this->load->view('interface_assets/header', $data);
$this->load->view('bandmap/index');
$this->load->view('interface_assets/footer', $footerData);
}
function list() {
$this->load->model('cat');
$this->load->model('bands');
$data['radios'] = $this->cat->radios();
$data['bands'] = $this->bands->get_user_bands_for_qso_entry();
$footerData = [];
$footerData['scripts'] = [
'assets/js/moment.min.js',
'assets/js/datetime-moment.js',
'assets/js/sections/bandmap_list.js'
];
$CI =& get_instance();
// Get Date format
if($CI->session->userdata('user_date_format')) {
// If Logged in and session exists
$pageData['custom_date_format'] = $CI->session->userdata('user_date_format');
} else {
// Get Default date format from /config/cloudlog.php
$pageData['custom_date_format'] = $CI->config->item('qso_date_format');
}
switch ($pageData['custom_date_format']) {
case "d/m/y": $pageData['custom_date_format'] = 'DD/MM/YY'; break;
case "d/m/Y": $pageData['custom_date_format'] = 'DD/MM/YYYY'; break;
case "m/d/y": $pageData['custom_date_format'] = 'MM/DD/YY'; break;
case "m/d/Y": $pageData['custom_date_format'] = 'MM/DD/YYYY'; break;
case "d.m.Y": $pageData['custom_date_format'] = 'DD.MM.YYYY'; break;
case "y/m/d": $pageData['custom_date_format'] = 'YY/MM/DD'; break;
case "Y-m-d": $pageData['custom_date_format'] = 'YYYY-MM-DD'; break;
case "M d, Y": $pageData['custom_date_format'] = 'MMM DD, YYYY'; break;
case "M d, y": $pageData['custom_date_format'] = 'MMM DD, YY'; break;
default: $pageData['custom_date_format'] = 'DD/MM/YYYY';
}
$data['page_title'] = "DXCluster";
$this->load->view('interface_assets/header', $data);
$this->load->view('bandmap/list',$pageData);
$this->load->view('interface_assets/footer', $footerData);
}
}

查看文件

@ -16,15 +16,15 @@ class Cabrillo 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() {
$data['page_title'] = "Export Cabrillo";
public function index() {
$data['page_title'] = "Export Cabrillo";
$this->load->model('Contesting_model');
$this->load->model('stations');
$this->load->model('Contesting_model');
$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);
$data['station_profile'] = $this->stations->all_of_user();
$active_station_id = $this->stations->find_active();
$station_profile = $this->stations->profile($active_station_id);
$data['active_station_info'] = $station_profile->row();
@ -32,93 +32,107 @@ class Cabrillo extends CI_Controller {
$footerData['scripts'] = [
'assets/js/sections/cabrillo.js'
];
$this->load->view('interface_assets/header', $data);
$this->load->view('interface_assets/header', $data);
$this->load->view('cabrillo/index');
$this->load->view('interface_assets/footer', $footerData);
}
}
public function getContests() {
public function getContests() {
$this->load->model('Contesting_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$year = $this->security->xss_clean($this->input->post('year'));
$result = $this->Contesting_model->get_logged_contests($station_id, $year);
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($station_id)) {
$year = $this->security->xss_clean($this->input->post('year'));
$result = $this->Contesting_model->get_logged_contests($station_id, $year);
header('Content-Type: application/json');
echo json_encode($result);
}
header('Content-Type: application/json');
echo json_encode($result);
} else {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard');
}
}
public function getYears() {
public function getYears() {
$this->load->model('Contesting_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$result = $this->Contesting_model->get_logged_years($station_id);
header('Content-Type: application/json');
echo json_encode($result);
}
}
public function getContestDates() {
$this->load->model('Contesting_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$year = $this->security->xss_clean($this->input->post('year'));
$contestid = $this->security->xss_clean($this->input->post('contestid'));
public function getContestDates() {
$this->load->model('Contesting_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($station_id)) {
$year = $this->security->xss_clean($this->input->post('year'));
$contestid = $this->security->xss_clean($this->input->post('contestid'));
$result = $this->Contesting_model->get_contest_dates($station_id, $year, $contestid);
$result = $this->Contesting_model->get_contest_dates($station_id, $year, $contestid);
header('Content-Type: application/json');
echo json_encode($result);
}
header('Content-Type: application/json');
echo json_encode($result);
} else {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard');
}
}
public function export() {
// Set memory limit to unlimited to allow heavy usage
public function export() {
// Set memory limit to unlimited to allow heavy usage
ini_set('memory_limit', '-1');
$this->load->model('Contesting_model');
$this->load->model('Contesting_model');
$this->load->model('stations');
$this->load->model('stations');
$this->load->model('user_model');
$this->load->model('user_model');
$station_id = $this->security->xss_clean($this->input->post('station_id'));
$contest_id = $this->security->xss_clean($this->input->post('contestid'));
$station_id = $this->security->xss_clean($this->input->post('station_id'));
if ($this->stations->check_station_is_accessible($station_id)) {
$contest_id = $this->security->xss_clean($this->input->post('contestid'));
$from = $this->security->xss_clean($this->input->post('contestdatesfrom'));
$to = $this->security->xss_clean($this->input->post('contestdatesto'));
$from = $this->security->xss_clean($this->input->post('contestdatesfrom'));
$to = $this->security->xss_clean($this->input->post('contestdatesto'));
$station = $this->stations->profile($station_id);
$station = $this->stations->profile($station_id);
$station = $station->row();
$station = $station->row();
$userinfo = $this->user_model->get_by_id($this->session->userdata('user_id'));
$userinfo = $this->user_model->get_by_id($this->session->userdata('user_id'));
$userinfo = $userinfo->row();
$userinfo = $userinfo->row();
$data['qsos'] = $this->Contesting_model->export_custom($from, $to, $contest_id, $station_id);
$data['qsos'] = $this->Contesting_model->export_custom($from, $to, $contest_id, $station_id);
$data['contest_id'] = $contest_id;
$data['callsign'] = $station->station_callsign;
$data['claimed_score'] = '';
$data['categoryoperator'] = $this->security->xss_clean($this->input->post('categoryoperator'));
$data['categoryassisted'] = $this->security->xss_clean($this->input->post('categoryassisted'));
$data['categoryband'] = $this->security->xss_clean($this->input->post('categoryband'));
$data['categorymode'] = $this->security->xss_clean($this->input->post('categorymode'));
$data['categorypower'] = $this->security->xss_clean($this->input->post('categorypower'));
$data['categorystation'] = $this->security->xss_clean($this->input->post('categorystation'));
$data['categorytransmitter'] = $this->security->xss_clean($this->input->post('categorytransmitter'));
$data['categoryoverlay'] = $this->security->xss_clean($this->input->post('categoryoverlay'));
$data['operators'] = $this->security->xss_clean($this->input->post('operators'));
$data['club'] = $this->security->xss_clean($this->input->post('club'));
$data['name'] = $userinfo->user_firstname . ' ' . $userinfo->user_lastname;
$data['email'] = $userinfo->user_email;
$data['address'] = $this->security->xss_clean($this->input->post('address'));
$data['addresscity'] = $this->security->xss_clean($this->input->post('addresscity'));
$data['addressstateprovince'] = $this->security->xss_clean($this->input->post('addressstateprovince'));
$data['addresspostalcode'] = $this->security->xss_clean($this->input->post('addresspostalcode'));
$data['addresscountry'] = $this->security->xss_clean($this->input->post('addresscountry'));
$data['soapbox'] = $this->security->xss_clean($this->input->post('soapbox'));
$data['gridlocator'] = $station->station_gridsquare;
$data['contest_id'] = $contest_id;
$data['callsign'] = $station->station_callsign;
$data['claimed_score'] = '';
$data['categoryoperator'] = $this->security->xss_clean($this->input->post('categoryoperator'));
$data['categoryassisted'] = $this->security->xss_clean($this->input->post('categoryassisted'));
$data['categoryband'] = $this->security->xss_clean($this->input->post('categoryband'));
$data['categorymode'] = $this->security->xss_clean($this->input->post('categorymode'));
$data['categorypower'] = $this->security->xss_clean($this->input->post('categorypower'));
$data['categorystation'] = $this->security->xss_clean($this->input->post('categorystation'));
$data['categorytransmitter'] = $this->security->xss_clean($this->input->post('categorytransmitter'));
$data['categoryoverlay'] = $this->security->xss_clean($this->input->post('categoryoverlay'));
$data['operators'] = $this->security->xss_clean($this->input->post('operators'));
$data['club'] = $this->security->xss_clean($this->input->post('club'));
$data['name'] = $userinfo->user_firstname . ' ' . $userinfo->user_lastname;
$data['email'] = $userinfo->user_email;
$data['address'] = $this->security->xss_clean($this->input->post('address'));
$data['addresscity'] = $this->security->xss_clean($this->input->post('addresscity'));
$data['addressstateprovince'] = $this->security->xss_clean($this->input->post('addressstateprovince'));
$data['addresspostalcode'] = $this->security->xss_clean($this->input->post('addresspostalcode'));
$data['addresscountry'] = $this->security->xss_clean($this->input->post('addresscountry'));
$data['soapbox'] = $this->security->xss_clean($this->input->post('soapbox'));
$data['gridlocator'] = $station->station_gridsquare;
$this->load->view('cabrillo/export', $data);
}
}
$this->load->view('cabrillo/export', $data);
}else {
$this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard');
}
}
}

查看文件

@ -1,12 +1,23 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
<?php
use Cloudlog\Dxcc\Dxcc;
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Calltester extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model('user_model');
if(!$this->user_model->authorize(99)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
}
public function db() {
set_time_limit(3600);
// Starting clock time in seconds
$start_time = microtime(true);
$this->load->model('logbook_model');
$sql = 'select distinct col_country, col_call, col_dxcc, date(col_time_on) date from ' . $this->config->item('table_name');
@ -15,7 +26,7 @@ class Calltester extends CI_Controller {
$callarray = $query->result();
$result = array();
$i = 0;
foreach ($callarray as $call) {
@ -24,24 +35,24 @@ class Calltester extends CI_Controller {
$dxcc['adif'] = (isset($dxcc['adif'])) ? $dxcc['adif'] : 0;
$dxcc['entity'] = (isset($dxcc['entity'])) ? $dxcc['entity'] : 0;
if ($call->col_dxcc != $dxcc['adif']) {
$result[] = array(
'Callsign' => $call->col_call,
'Expected country' => $call->col_country,
'Expected adif' => $call->col_dxcc,
'Callsign' => $call->col_call,
'Expected country' => $call->col_country,
'Expected adif' => $call->col_dxcc,
'Result country' => ucwords(strtolower($dxcc['entity']), "- (/"),
'Result adif' => $dxcc['adif'],
);
}
}
// End clock time in seconds
$end_time = microtime(true);
// Calculate script execution time
$execution_time = ($end_time - $start_time);
echo " Execution time of script = ".$execution_time." sec <br/>";
echo $i . " calls tested. <br/>";
$count = 0;
@ -49,11 +60,11 @@ class Calltester extends CI_Controller {
if ($result) {
$this->array_to_table($result);
}
}
function array_to_table($table) {
function array_to_table($table) {
echo '<style>
table {
font-family: Arial, Helvetica, sans-serif;
@ -80,20 +91,20 @@ class Calltester extends CI_Controller {
</style> ';
echo '<table>';
// Table header
foreach ($table[0] as $key=>$value) {
echo "<th>".$key."</th>";
}
// Table body
foreach ($table as $value) {
echo "<tr>";
foreach ($value as $val) {
echo "<td>".$val."</td>";
}
}
echo "</tr>";
}
}
echo "</table>";
}
@ -102,17 +113,17 @@ class Calltester extends CI_Controller {
// Starting clock time in seconds
$start_time = microtime(true);
$this->load->model('logbook_model');
$file = 'uploads/calls.csv';
$handle = fopen($file,"r");
$data = fgetcsv($handle,1000,","); // Skips firsts line, usually that is the header
$data = fgetcsv($handle,1000,",");
$result = array();
$i = 0;
do {
@ -126,12 +137,12 @@ class Calltester extends CI_Controller {
$dxcc['entity'] = (isset($dxcc['entity'])) ? $dxcc['entity'] : 0;
$data[1] = $data[1] == "NULL" ? 0 : $data[1];
if ($data[1] != $dxcc['adif']) {
$result[] = array(
'Callsign' => $data[0],
'Expected country' => '',
'Expected adif' => $data[1],
'Callsign' => $data[0],
'Expected country' => '',
'Expected adif' => $data[1],
'Result country' => ucwords(strtolower($dxcc['entity']), "- (/"),
'Result adif' => $dxcc['adif'],
);
@ -144,7 +155,7 @@ class Calltester extends CI_Controller {
// Calculate script execution time
$execution_time = ($end_time - $start_time);
echo " Execution time of script = ".$execution_time." sec <br/>";
echo $i . " calls tested. <br/>";
$count = 0;
@ -162,17 +173,17 @@ class Calltester extends CI_Controller {
// Starting clock time in seconds
$start_time = microtime(true);
$this->load->model('logbook_model');
$file = 'uploads/calls.csv';
$handle = fopen($file,"r");
$data = fgetcsv($handle,1000,","); // Skips firsts line, usually that is the header
$data = fgetcsv($handle,1000,",");
$result = array();
$i = 0;
do {
@ -183,12 +194,12 @@ class Calltester extends CI_Controller {
$dxcc = $this->logbook_model->check_dxcc_table($data[0], $data[2]);
$data[1] = $data[1] == "NULL" ? 0 : $data[1];
if ($data[1] != $dxcc[0]) {
$result[] = array(
'Callsign' => $data[0],
'Expected country' => '',
'Expected adif' => $data[1],
'Callsign' => $data[0],
'Expected country' => '',
'Expected adif' => $data[1],
'Result country' => ucwords(strtolower($dxcc[1]), "- (/"),
'Result adif' => $dxcc[0],
);
@ -201,7 +212,7 @@ class Calltester extends CI_Controller {
// Calculate script execution time
$execution_time = ($end_time - $start_time);
echo " Execution time of script = ".$execution_time." sec <br/>";
echo $i . " calls tested. <br/>";
$count = 0;
@ -216,232 +227,253 @@ class Calltester extends CI_Controller {
$testarray[] = array(
'Callsign' => 'VE3EY/VP9',
'Country' => 'Bermuda',
'Adif' => 64,
'Country' => 'Bermuda',
'Adif' => 64,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'VP2MDG',
'Country' => 'Montserrat',
'Adif' => 96,
'Country' => 'Montserrat',
'Adif' => 96,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'VP2EY',
'Country' => 'Anguilla',
'Adif' => 12,
'Country' => 'Anguilla',
'Adif' => 12,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'VP2VI',
'Country' => 'British Virgin Islands.',
'Adif' => 65,
'Country' => 'British Virgin Islands.',
'Adif' => 65,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'VP2V/AA7V',
'Country' => 'British Virgin Islands',
'Adif' => 65,
'Country' => 'British Virgin Islands',
'Adif' => 65,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'W8LR/R',
'Country' => 'United States Of America',
'Adif' => 291,
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'SO1FH',
'Country' => 'Poland',
'Adif' => 269,
'Country' => 'Poland',
'Adif' => 269,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'KZ1H/PP',
'Country' => 'Brazil',
'Adif' => 108,
'Country' => 'Brazil',
'Adif' => 108,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'K1KW/AM',
'Country' => 'None',
'Adif' => 0,
'Country' => 'None',
'Adif' => 0,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'K1KW/MM',
'Country' => 'None',
'Adif' => 0,
'Country' => 'None',
'Adif' => 0,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'TF/DL2NWK/P',
'Country' => 'Iceland',
'Adif' => 242,
'Country' => 'Iceland',
'Adif' => 242,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'OZ1ALS/A',
'Country' => 'Denmark',
'Adif' => 221,
'Country' => 'Denmark',
'Adif' => 221,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'LA1K',
'Country' => 'Norway',
'Adif' => 266,
'Country' => 'Norway',
'Adif' => 266,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'K1KW/M',
'Country' => 'United States Of America',
'Adif' => 291,
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'TF/DL2NWK/M',
'Country' => 'Iceland',
'Adif' => 242,
'Country' => 'Iceland',
'Adif' => 242,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'TF/DL2NWK/MM',
'Country' => 'None',
'Adif' => 0,
'Country' => 'None',
'Adif' => 0,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'TF/DL2NWK/P',
'Country' => 'Iceland',
'Adif' => 242,
'Country' => 'Iceland',
'Adif' => 242,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => '2M0SQL/P',
'Country' => 'Scotland',
'Adif' => 279,
'Country' => 'Scotland',
'Adif' => 279,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'FT8WW',
'Country' => 'Crozet Island',
'Adif' => 41,
'Date' => $date = date('Ymd', time())
'Country' => 'Crozet Island',
'Adif' => 41,
'Date' => 20230314
);
$testarray[] = array(
'Callsign' => 'RV0AL/0/P',
'Country' => 'Asiatic Russia',
'Adif' => 15,
'Country' => 'Asiatic Russia',
'Adif' => 15,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'OH/DJ1YFK',
'Country' => 'Finland',
'Adif' => 224,
'Country' => 'Finland',
'Adif' => 224,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'N6TR/7',
'Country' => 'United States Of America',
'Adif' => 291,
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'KH0CW',
'Country' => 'United States Of America',
'Adif' => 291,
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'R2FM/P',
'Country' => 'kaliningrad',
'Adif' => 126,
'Country' => 'kaliningrad',
'Adif' => 126,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'R2FM',
'Country' => 'kaliningrad',
'Adif' => 126,
'Country' => 'kaliningrad',
'Adif' => 126,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'FT5XO',
'Country' => 'Kerguelen Island',
'Adif' => 131,
'Country' => 'Kerguelen Island',
'Adif' => 131,
'Date' => 20050320
);
$testarray[] = array(
'Callsign' => 'VP8CTR',
'Country' => 'Antarctica',
'Adif' => 13,
'Country' => 'Antarctica',
'Adif' => 13,
'Date' => 19970207
);
$testarray[] = array(
'Callsign' => 'FO0AAA',
'Country' => 'Clipperton',
'Adif' => 36,
'Country' => 'Clipperton',
'Adif' => 36,
'Date' => '20000302'
);
$testarray[] = array(
'Callsign' => 'CX/PR8KW',
'Country' => 'Uruguay',
'Adif' => 144,
'Country' => 'Uruguay',
'Adif' => 144,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'IQ3MV/LH',
'Country' => 'Italy',
'Adif' => 248,
'Country' => 'Italy',
'Adif' => 248,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'LA1K/QRP',
'Country' => 'Norway',
'Adif' => 266,
'Country' => 'Norway',
'Adif' => 266,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'LA1K/LGT',
'Country' => 'Norway',
'Adif' => 266,
'Country' => 'Norway',
'Adif' => 266,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'SM1K/LH',
'Country' => 'Sweden',
'Adif' => 284,
'Country' => 'Sweden',
'Adif' => 284,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'KG4W',
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'KG4WW',
'Country' => 'Guantanamo Bay',
'Adif' => 105,
'Date' => $date = date('Ymd', time())
);
$testarray[] = array(
'Callsign' => 'KG4WWW',
'Country' => 'United States Of America',
'Adif' => 291,
'Date' => $date = date('Ymd', time())
);
@ -449,11 +481,11 @@ class Calltester extends CI_Controller {
// Starting clock time in seconds
$start_time = microtime(true);
$this->load->model('logbook_model');
$result = array();
$i = 0;
foreach ($testarray as $call) {
@ -462,24 +494,24 @@ class Calltester extends CI_Controller {
$dxcc['adif'] = (isset($dxcc['adif'])) ? $dxcc['adif'] : 0;
$dxcc['entity'] = (isset($dxcc['entity'])) ? $dxcc['entity'] : 0;
if ($call['Adif'] != $dxcc['adif']) {
$result[] = array(
'Callsign' => $call['Callsign'],
'Expected country' => $call['Country'],
'Expected adif' => $call['Adif'],
'Callsign' => $call['Callsign'],
'Expected country' => $call['Country'],
'Expected adif' => $call['Adif'],
'Result country' => ucwords(strtolower($dxcc['entity']), "- (/"),
'Result adif' => $dxcc['adif'],
);
}
}
// End clock time in seconds
$end_time = microtime(true);
// Calculate script execution time
$execution_time = ($end_time - $start_time);
echo " Execution time of script = ".$execution_time." sec <br/>";
echo $i . " calls tested. <br/>";
$count = 0;
@ -488,4 +520,4 @@ class Calltester extends CI_Controller {
$this->array_to_table($result);
}
}
}
}

查看文件

@ -114,6 +114,13 @@ class Dashboard extends CI_Controller {
}
function radio_display_component() {
$this->load->model('cat');
$data['radio_status'] = $this->cat->recent_status();
$this->load->view('components/radio_display_table', $data);
}
function map() {
$this->load->model('logbook_model');
@ -205,42 +212,4 @@ class Dashboard extends CI_Controller {
}
function todays_map() {
$this->load->library('qra');
$this->load->model('logbook_model');
// TODO: Auth
$qsos = $this->logbook_model->get_todays_qsos('');
echo "{\"markers\": [";
foreach ($qsos->result() as $row) {
//print_r($row);
if($row->COL_GRIDSQUARE != null) {
$stn_loc = $this->qra->qra2latlong($row->COL_GRIDSQUARE);
echo "{\"point\":new GLatLng(".$stn_loc[0].",".$stn_loc[1]."), \"html\":\"Callsign: ".$row->COL_CALL."<br />Date/Time: ".$row->COL_TIME_ON."<br />Band: ".$row->COL_BAND."<br />Mode: ";
echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE;
echo "\",\"label\":\"".$row->COL_CALL."\"},";
} else {
$query = $this->db->query('
SELECT *
FROM dxcc_entities
WHERE prefix = SUBSTRING( \''.$row->COL_CALL.'\', 1, LENGTH( prefix ) )
ORDER BY LENGTH( prefix ) DESC
LIMIT 1
');
foreach ($query->result() as $dxcc) {
echo "{\"point\":new GLatLng(".$dxcc->lat.",".$dxcc->long."), \"html\":\"Callsign: ".$row->COL_CALL."<br />Date/Time: ".$row->COL_TIME_ON."<br />Band: ".$row->COL_BAND."<br />Mode: ";
echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE;
echo "\",\"label\":\"".$row->COL_CALL."\"},";
}
}
}
echo "]";
echo "}";
}
}

查看文件

@ -65,4 +65,19 @@ class Distances extends CI_Controller {
return json_encode($data);
}
}
public function getDistanceQsos(){
$this->load->model('distances_model');
$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'));
$data['results'] = $this->distances_model->qso_details($distance, $band, $sat);
// Render Page
$data['page_title'] = "Log View - " . $distance;
$data['filter'] = "Filtering on QSOs with " . $distance . " and band ".$band;
$this->load->view('awards/details', $data);
}
}

查看文件

@ -0,0 +1,53 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Dxcluster 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'); }
$this->load->model('dxcluster_model');
}
function spots($band,$age = '', $de = '') {
if ($age == '') {
$age = $this->optionslib->get_option('dxcluster_maxage');
}
if ($de == '') {
$de = $this->optionslib->get_option('dxcluster_decont');
}
$calls_found=$this->dxcluster_model->dxc_spotlist($band, $age, $de);
header('Content-Type: application/json');
if ($calls_found) {
echo json_encode($calls_found, JSON_PRETTY_PRINT);
} else {
echo '{ "error": "not found" }';
}
}
function qrg_lookup($qrg) {
$call_found=$this->dxcluster_model->dxc_qrg_lookup($this->security->xss_clean($qrg));
header('Content-Type: application/json');
if ($call_found) {
echo json_encode($call_found, JSON_PRETTY_PRINT);
} else {
echo '{ "error": "not found" }';
}
}
function call($call) {
$this->load->model('logbook_model');
$date = date('Ymd', time());
$dxcc = $this->logbook_model->dxcc_lookup($call, $date);
if ($dxcc) {
header('Content-Type: application/json');
echo json_encode($dxcc, JSON_PRETTY_PRINT);
} else {
echo '{ "error": "not found" }';
}
}
}

查看文件

@ -12,9 +12,10 @@ class eqsl extends CI_Controller {
public function index() {
$this->lang->load('qslcard');
$folder_name = "assets/qslcard";
$folder_name = "images/eqsl_card_images";
$data['storage_used'] = $this->sizeFormat($this->folderSize($folder_name));
// Render Page
$data['page_title'] = "eQSL Cards";
@ -29,6 +30,12 @@ class eqsl extends CI_Controller {
$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('stations');
$data['station_profile'] = $this->stations->all_of_user();
$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();
@ -71,29 +78,39 @@ class eqsl extends CI_Controller {
$eqsl_results[] = $this->eqslimporter->fetch($eqsl_password);
}
}
else
{
if ( ! $this->upload->do_upload())
{
$data['page_title'] = "eQSL Import";
$data['error'] = $this->upload->display_errors();
} elseif ($this->input->post('eqslimport') == 'upload') {
$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())
{
$data['page_title'] = "eQSL Import";
$data['error'] = $this->upload->display_errors();
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/import');
$this->load->view('interface_assets/footer');
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/import');
$this->load->view('interface_assets/footer');
return;
return;
} else {
$data = array('upload_data' => $this->upload->data());
$this->load->library('EqslImporter');
$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!");
}
else
{
$data = array('upload_data' => $this->upload->data());
} else {
$data['page_title'] = "eQSL Import";
$this->load->library('EqslImporter');
$this->eqslimporter->from_file('./uploads/'.$data['upload_data']['file_name']);
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/import');
$this->load->view('interface_assets/footer');
$eqsl_results[] = $this->eqslimporter->import();
}
return;
}
$data['eqsl_results'] = $eqsl_results;
@ -182,16 +199,16 @@ class eqsl extends CI_Controller {
$status = "";
// begin script
$ch = curl_init();
$ch = curl_init();
// basic curl options for all requests
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
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);
$result = curl_exec($ch);
$chi = curl_getinfo($ch);
curl_close($ch);
@ -501,14 +518,14 @@ class eqsl extends CI_Controller {
$query = $this->user_model->get_by_id($this->session->userdata('user_id'));
$q = $query->row();
$username = $q->user_eqsl_name;
$username = $qso->COL_STATION_CALLSIGN;
$password = $q->user_eqsl_password;
$image_url = $this->electronicqsl->card_image($username, urlencode($password), $callsign, $band, $mode, $year, $month, $day, $hour, $minute);
$file = file_get_contents($image_url, true);
$dom = new domDocument;
$dom->loadHTML($file);
$dom = new domDocument;
$dom->loadHTML($file);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
@ -517,7 +534,7 @@ class eqsl extends CI_Controller {
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'));
@ -539,6 +556,63 @@ class eqsl extends CI_Controller {
}
function bulk_download_image($id) {
$this->load->library('electronicqsl');
$this->load->model('Eqsl_images');
$this->load->model('logbook_model');
$this->load->model('user_model');
$qso_query = $this->logbook_model->get_qso($id);
$qso = $qso_query->row();
$qso_timestamp = strtotime($qso->COL_TIME_ON);
$callsign = $qso->COL_CALL;
$band = $qso->COL_BAND;
$mode = $qso->COL_MODE;
$year = date('Y', $qso_timestamp);
$month = date('m', $qso_timestamp);
$day = date('d', $qso_timestamp);
$hour = date('H', $qso_timestamp);
$minute = date('i', $qso_timestamp);
$query = $this->user_model->get_by_id($this->session->userdata('user_id'));
$q = $query->row();
$username = $qso->COL_STATION_CALLSIGN;
$password = $q->user_eqsl_password;
$error = '';
$image_url = $this->electronicqsl->card_image($username, urlencode($password), $callsign, $band, $mode, $year, $month, $day, $hour, $minute);
$file = file_get_contents($image_url, true);
if (strpos($file, 'Error') !== false) {
$error = rtrim(preg_replace('/^\s*Error: /', '', $file));
return $error;
}
$dom = new domDocument;
$dom->loadHTML($file);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
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'));
if ($content === false) {
$error = "No response";
return $error;
}
$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() {
// Check logged in
$this->load->model('user_model');
@ -556,16 +630,56 @@ class eqsl extends CI_Controller {
// 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;
$data['page_title'] = "eQSL Card Image Download";
$this->load->model('eqslmethods_model');
if ($this->input->post('eqsldownload') == 'download') {
$i = 0;
$this->load->model('eqslmethods_model');
$qslsnotdownloaded = $this->eqslmethods_model->eqsl_not_yet_downloaded();
$eqsl_results = array();
foreach ($qslsnotdownloaded->result_array() as $qsl) {
$result = $this->bulk_download_image($qsl['COL_PRIMARY_KEY']);
if ($result != '') {
$errors++;
if ($result == 'Rate Limited') {
break;
} else {
$eqsl_results[] = array(
'date' => $qsl['COL_TIME_ON'],
'call' => $qsl['COL_CALL'],
'mode' => $qsl['COL_MODE'],
'submode' => $qsl['COL_SUBMODE'],
'status' => $result,
'qsoid' => $qsl['COL_PRIMARY_KEY']
);
continue;
}
} else {
$i++;
}
if ($i > 0) {
sleep(15);
}
}
$data['eqsl_results'] = $eqsl_results;
$data['eqsl_stats'] = "Successfully downloaded: ".$i." / Errors: ".count($eqsl_results);
$data['page_title'] = "eQSL Download Information";
$data['custom_date_format'] = $this->session->userdata('user_date_format');
$data['qslsnotdownloaded'] = $this->eqslmethods_model->eqsl_not_yet_downloaded();
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/result');
$this->load->view('interface_assets/footer');
} else {
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/download');
$this->load->view('interface_assets/footer');
$data['page_title'] = "eQSL Card Image Download";
$this->load->model('eqslmethods_model');
$data['custom_date_format'] = $this->session->userdata('user_date_format');
$data['qslsnotdownloaded'] = $this->eqslmethods_model->eqsl_not_yet_downloaded();
$this->load->view('interface_assets/header', $data);
$this->load->view('eqsl/download');
$this->load->view('interface_assets/footer');
}
}
public function mark_all_sent() {

查看文件

@ -0,0 +1,185 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Gridmap extends CI_Controller {
function __construct() {
parent::__construct();
}
public function index() {
$data['page_title'] = lang('gridsquares_gridsquare_map');
$this->load->model('bands');
$this->load->model('gridmap_model');
$this->load->model('stations');
$data['homegrid'] = explode(',', $this->stations->find_gridsquare());
$data['modes'] = $this->gridmap_model->get_worked_modes();
$data['bands'] = $this->bands->get_worked_bands();
$data['sats_available'] = $this->bands->get_worked_sats();
$data['user_gridmap_default_band'] = $this->session->userdata('user_gridmap_default_band');
$data['user_gridmap_confirmation'] = $this->session->userdata('user_gridmap_confirmation');
$data['layer'] = $this->optionslib->get_option('option_map_tile_server');
$data['attribution'] = $this->optionslib->get_option('option_map_tile_server_copyright');
$data['gridsquares_gridsquares'] = lang('gridsquares_gridsquares');
$data['gridsquares_gridsquares_confirmed'] = lang('gridsquares_gridsquares_confirmed');
$data['gridsquares_gridsquares_not_confirmed'] = lang('gridsquares_gridsquares_not_confirmed');
$data['gridsquares_gridsquares_total_worked'] = lang('gridsquares_gridsquares_total_worked');
$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('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'));
$sat = $this->security->xss_clean($this->input->post('sat'));
$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();
$grid_2char = "";
$grid_4char = "";
$grid_6char = "";
$grid_2char_confirmed = "";
$grid_4char_confirmed = "";
$grid_6char_confirmed = "";
$query = $this->gridmap_model->get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl, $sat);
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')) {
$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 ($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);
}
}
}
}
$query = $this->gridmap_model->get_band($band, $mode, $qsl, $lotw, $eqsl, $sat);
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')) {
$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 ($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, $sat);
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, $qsl, $lotw, $eqsl, $sat);
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);
}
}

查看文件

@ -14,6 +14,15 @@ class Gridsquares extends CI_Controller {
* - Band page provide a band dropdown list
* - Find somewhere in the main menu to add a button to it
*/
function __construct()
{
parent::__construct();
// Load language files
$this->lang->load(array(
'gridsquares',
));
}
public function index() {
@ -59,7 +68,7 @@ class Gridsquares extends CI_Controller {
$grid_6char_confirmed = "";
// Get Confirmed LOTW & Paper Squares (non VUCC)
// Get Confirmed LoTW & Paper Squares (non VUCC)
$query = $this->gridsquares_model->get_confirmed_sat_squares();

查看文件

@ -0,0 +1,171 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
Controller to interact with the hrdlog.net API
*/
class Hrdlog extends CI_Controller {
/*
* Upload QSO to hrdlog.net
* When called from the url cloudlog/hrdlog/upload, the function loops through all station_id's with a hrdlog code defined.
* All QSOs not previously uploaded, will then be uploaded, one at a time
*/
public function upload() {
$this->setOptions();
$this->load->model('logbook_model');
$station_ids = $this->logbook_model->get_station_id_with_hrdlog_code();
if ($station_ids) {
foreach ($station_ids as $station) {
$hrdlog_code = $station->hrdlog_code;
if($this->mass_upload_qsos($station->station_id, $hrdlog_code)) {
echo "QSOs have been uploaded to hrdlog.net.";
log_message('info', 'QSOs have been uploaded to hrdlog.net.');
} else{
echo "No QSOs found for upload.";
log_message('info', 'No QSOs found for upload.');
}
}
} else {
echo "No station profiles with a hrdlog Code found.";
log_message('error', "No station profiles with a hrdlog Code found.");
}
}
function setOptions() {
$this->config->load('config');
ini_set('memory_limit', '-1');
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
}
/*
* Function gets all QSOs from given station_id, that are not previously uploaded to hrdlog.
* Adif is build for each qso, and then uploaded, one at a time
*/
function mass_upload_qsos($station_id, $hrdlog_code) {
$i = 0;
$data['qsos'] = $this->logbook_model->get_hrdlog_qsos($station_id);
$errormessages=array();
$CI =& get_instance();
$CI->load->library('AdifHelper');
if ($data['qsos']) {
foreach ($data['qsos']->result() as $qso) {
$adif = $CI->adifhelper->getAdifLine($qso);
if ($qso->COL_HRDLOG_QSO_UPLOAD_STATUS == 'M') {
$result = $this->logbook_model->push_qso_to_hrdlog($hrdlog_code, $qso->COL_STATION_CALLSIGN,$adif, true);
} else {
$result = $this->logbook_model->push_qso_to_hrdlog($hrdlog_code, $qso->COL_STATION_CALLSIGN,$adif);
}
if ( ($result['status'] == 'OK') || ( ($result['status'] == 'error') || ($result['status'] == 'duplicate')) ){
$this->markqso($qso->COL_PRIMARY_KEY);
$i++;
} elseif ((substr($result['status'],0,11) == 'auth_error')) {
log_message('error', 'hrdlog upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
log_message('error', 'hrdlog upload failed with the following message: ' .$result['message']);
log_message('error', 'hrdlog upload stopped for Station_ID: ' .$station_id);
$errormessages[] = $result['message'] . 'Invalid HRDLog-Code, stopped at Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
break; /* If key is invalid, immediate stop syncing for more QSOs of this station */
} else {
log_message('error', 'hrdlog upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
log_message('error', 'hrdlog upload failed with the following message: ' .$result['message']);
$errormessages[] = $result['message'] . ' Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
}
}
$result['status'] = 'OK';
$result['count'] = $i;
$result['errormessages'] = $errormessages;
return $result;
} else {
$result['status'] = 'Error';
$result['count'] = $i;
$result['errormessages'] = $errormessages;
return $result;
}
}
/*
* Function marks QSO with given primarykey as uploaded to hrdlog
*/
function markqso($primarykey) {
$this->logbook_model->mark_hrdlog_qsos_sent($primarykey);
}
/*
* Used for displaying the uid for manually selecting log for upload to hrdlog
*/
public function export() {
$this->load->model('stations');
$data['page_title'] = "HRDlog.net Logbook";
$data['station_profiles'] = $this->stations->all_of_user();
$data['station_profile'] = $this->stations->stations_with_hrdlog_code();
$this->load->view('interface_assets/header', $data);
$this->load->view('hrdlog/export');
$this->load->view('interface_assets/footer');
}
/*
* Used for ajax-function when selecting log for upload to hrdlog
*/
public function upload_station() {
$this->setOptions();
$this->load->model('stations');
$postData = $this->input->post();
$this->load->model('logbook_model');
$result = $this->logbook_model->exists_hrdlog_code($postData['station_id']);
$hrdlog_code = $result->hrdlog_code;
header('Content-type: application/json');
$result = $this->mass_upload_qsos($postData['station_id'], $hrdlog_code);
if ($result['status'] == 'OK') {
$stationinfo = $this->stations->stations_with_hrdlog_code();
$info = $stationinfo->result();
$data['status'] = 'OK';
$data['info'] = $info;
$data['infomessage'] = $result['count'] . " QSOs are now uploaded to hrdlog";
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
} else {
$data['status'] = 'Error';
$data['info'] = 'Error: No QSOs found to upload.';
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
}
}
public function mark_hrdlog() {
// 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');
$data['qsos'] = $this->adif_data->export_custom($this->input->post('from'), $this->input->post('to'), $station_id);
$this->load->model('logbook_model');
foreach ($data['qsos']->result() as $qso)
{
$this->logbook_model->mark_hrdlog_qsos_sent($qso->COL_PRIMARY_KEY);
}
$this->load->view('interface_assets/header', $data);
$this->load->view('hrdlog/mark_hrdlog', $data);
$this->load->view('interface_assets/footer');
}
}

查看文件

@ -0,0 +1,321 @@
<?php
require_once './src/Label/vendor/autoload.php';
use Cloudlog\Label\PDF_Label;
use Cloudlog\Label\tfpdf;
use Cloudlog\Label\font\unifont\ttfonts;
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Labels extends CI_Controller {
/*
|--------------------------------------------------------------------------
| Controller: Labels
|--------------------------------------------------------------------------
|
| This Controller handles all things Labels, creating, editing and printing
|
|
*/
function __construct() {
parent::__construct();
$this->load->helper(array('form', 'url', 'psr4_autoloader'));
$this->load->model('user_model');
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
}
/*
|--------------------------------------------------------------------------
| Function: index
|--------------------------------------------------------------------------
|
| Nothing fancy just shows the main display of how many labels are waiting
| to be printed per station profile.
|
*/
public function index() {
$data['page_title'] = "QSL Card Labels";
$this->load->model('labels_model');
$data['labels'] = $this->labels_model->fetchLabels($this->session->userdata('user_id'));
$data['qsos'] = $this->labels_model->fetchQsos($this->session->userdata('user_id'));
$footerData = [];
$footerData['scripts'] = [
'assets/js/sections/labels.js',
];
$this->load->view('interface_assets/header', $data);
$this->load->view('labels/index');
$this->load->view('interface_assets/footer', $footerData);
}
/*
|--------------------------------------------------------------------------
| Function: create
|--------------------------------------------------------------------------
|
| Shows the form used to create a label type.
|
*/
public function create() {
$data['page_title'] = "Create Label Type";
$this->load->library('form_validation');
$this->form_validation->set_rules('label_name', 'Label Name', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('interface_assets/header', $data);
$this->load->view('labels/create');
$this->load->view('interface_assets/footer');
}
else
{
$this->load->model('labels_model');
$this->labels_model->addLabel();
redirect('labels');
}
}
public function printids() {
$ids = xss_clean(json_decode($this->input->post('id')));
$offset = xss_clean($this->input->post('startat'));
$this->load->model('labels_model');
$result = $this->labels_model->export_printrequestedids($ids);
$this->prepareLabel($result, true, $offset);
}
public function print($station_id) {
$clean_id = xss_clean($station_id);
$offset = xss_clean($this->input->post('startat'));
$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);
} else {
redirect('labels');
}
}
function prepareLabel($qsos, $jscall = false, $offset = 1) {
$this->load->model('labels_model');
$label = $this->labels_model->getDefaultLabel();
$label->font='DejaVuSans'; // Fix font to DejaVuSans
try {
if ($label) {
$pdf = new PDF_Label(array(
'paper-size' => $label->paper_type,
'metric' => $label->metric,
'marginLeft' => $label->marginleft,
'marginTop' => $label->margintop,
'NX' => $label->nx,
'NY' => $label->ny,
'SpaceX' => $label->spacex,
'SpaceY' => $label->spacey,
'width' => $label->width,
'height' => $label->height,
'font-size' => $label->font_size
));
} else {
if ($jscall) {
header('Content-Type: application/json');
echo json_encode(array('message' => 'You need to create a label and set it to be used for print.'));
return;
} else {
$this->session->set_flashdata('error', 'You need to create a label and set it to be used for print.');
redirect('labels');
}
}
} catch (\Throwable $th) {
if ($jscall) {
header('Content-Type: application/json');
echo json_encode(array('message' => 'Something went wrong! The label could not be generated. Check label size and font size.'));
return;
} else {
$this->session->set_flashdata('error', 'Something went wrong! The label could not be generated. Check label size and font size.');
redirect('labels');
}
}
define('FPDF_FONTPATH', './src/Label/font/');
$pdf->AddPage();
if ($label->font == 'DejaVuSans') { // leave this here, for future Use
$pdf->AddFont($label->font,'','DejaVuSansMono.ttf',true);
$pdf->SetFont($label->font);
} else {
$pdf->AddFont($label->font);
$pdf->SetFont($label->font);
}
if ($qsos->num_rows() > 0) {
if ($label->qsos == 1) {
$this->makeMultiQsoLabel($qsos->result(), $pdf, 1, $offset);
} else {
$this->makeMultiQsoLabel($qsos->result(), $pdf, $label->qsos, $offset);
}
} else {
$this->session->set_flashdata('message', '0 QSOs found for print!');
redirect('labels');
}
$pdf->Output();
}
function makeMultiQsoLabel($qsos, $pdf, $numberofqsos, $offset) {
$text = '';
$current_callsign = '';
$current_sat = '';
$current_sat_mode = '';
$current_sat_bandrx = '';
$qso_data = [];
if ($offset !== 1) {
for ($i = 1; $i < $offset; $i++) {
$pdf->Add_Label('');
}
}
foreach($qsos as $qso) {
if (($this->pretty_sat_mode($qso->COL_SAT_MODE) !== $current_sat_mode) || ($qso->COL_SAT_NAME !== $current_sat) || ($qso->COL_CALL !== $current_callsign) || // Call, SAT or SAT-Mode differs?
( ($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);
$qso_data = [];
}
$current_callsign = $qso->COL_CALL;
$current_sat = $qso->COL_SAT_NAME;
$current_sat_mode = $this->pretty_sat_mode($qso->COL_SAT_MODE);
$current_sat_bandrx = $qso->COL_BAND_RX ?? '';
}
$qso_data[] = [
'time' => $qso->COL_TIME_ON,
'band' => $qso->COL_BAND,
'mode' => $qso->COL_MODE,
'rst' => $qso->COL_RST_SENT,
'mygrid' => $qso->station_gridsquare,
'sat' => $qso->COL_SAT_NAME,
'sat_mode' => $this->pretty_sat_mode($qso->COL_SAT_MODE ?? ''),
'sat_band_rx' => ($qso->COL_BAND_RX ?? ''),
'qsl_recvd' => $qso->COL_QSL_RCVD
];
}
if (!empty($qso_data)) {
$this->finalizeData($pdf, $current_callsign, $qso_data, $numberofqsos);
}
}
// 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) {
$tableData = [];
$count_qso = 0;
$qso=[];
foreach ($preliminaryData as $key => $row) {
$qso=$row;
$time = strtotime($qso['time']);
$myFormatForView = date("d.m.y H:i", $time);
$rowData = [
'Date/Time' => $myFormatForView,
'Band' => $row['band'],
'Mode' => $row['mode'],
'RST' => $row['rst'],
];
$tableData[] = $rowData;
$count_qso++;
if($count_qso == $qso_per_label){
$this->generateLabel($pdf, $current_callsign, $tableData,$count_qso,$qso);
$tableData = []; // reset the data
$count_qso = 0; // reset the counter
}
unset($preliminaryData[$key]);
}
// generate label for remaining QSOs
if($count_qso > 0){
$this->generateLabel($pdf, $current_callsign, $tableData,$count_qso,$qso);
$preliminaryData = []; // reset the data
}
}
function generateLabel($pdf, $current_callsign, $tableData,$numofqsos,$qso){
$builder = new \AsciiTable\Builder();
$builder->addRows($tableData);
$text = "Confirming QSO".($numofqsos>1 ? 's' : '')." with ";
$text .= $current_callsign;
$text .= "\n";
$text .= $builder->renderTable();
if($qso['sat'] != "") {
if (($qso['sat_mode'] == '') && ($qso['sat_band_rx'] !== '')) {
$text .= "\n".'Satellite: '.$qso['sat'].' Band RX: '.$qso['sat_band_rx'];
} elseif (($qso['sat_mode'] == '') && ($qso['sat_band_rx'] == '')) {
$text .= "\n".'Satellite: '.$qso['sat'];
} else {
$text .= "\n".'Satellite: '.$qso['sat'].' Mode: '.$qso['sat_mode'];
}
}
$text .= "\nThanks for the QSO".($numofqsos>1 ? 's' : '');
$text .= " | ".($qso['qsl_recvd'] == 'Y' ? 'TNX' : 'PSE')." QSL";
$pdf->Add_Label($text);
}
// New End
public function edit($id) {
$this->load->model('labels_model');
$cleanid = $this->security->xss_clean($id);
$data['label'] = $this->labels_model->getLabel($cleanid);
$data['page_title'] = "Edit Label";
$this->load->view('interface_assets/header', $data);
$this->load->view('labels/edit');
$this->load->view('interface_assets/footer');
}
public function updateLabel($id) {
$this->load->model('labels_model');
$this->labels_model->updateLabel($id);
$this->session->set_flashdata('message', 'Label was saved.');
redirect('labels');
}
public function delete($id) {
$this->load->model('labels_model');
$this->labels_model->deleteLabel($id);
$this->session->set_flashdata('warning', 'Label was deleted.');
redirect('labels');
}
public function saveDefaultLabel() {
$id = $this->input->post('id');
$this->load->model('labels_model');
$this->labels_model->saveDefaultLabel($id);
}
public function startAtLabel() {
$data['stationid'] = xss_clean($this->input->post('stationid'));
$this->load->view('labels/startatform', $data);
}
}

查看文件

@ -97,37 +97,23 @@ class Logbook extends CI_Controller {
// Convert - in Callsign to / Used for URL processing
$callsign = str_replace("-","/",$callsign);
// Check if callsign is an LOTW User
$lotw_member = "";
$lotw_file_name = "./updates/lotw_users.csv";
if (file_exists($lotw_file_name)) {
$f = fopen($lotw_file_name, "r");
$result = false;
while ($row = fgetcsv($f)) {
if ($row[0] == strtoupper($callsign)) {
$result = $row[0];
$lotw_member = "active";
break;
}
}
if($lotw_member != "active") {
$lotw_member = "not found";
}
fclose($f);
} else {
$lotw_member = "not found";
}
// Check if callsign is an LoTW User
// Check Database for all other data
$this->load->model('logbook_model');
$lotw_days=$this->logbook_model->check_last_lotw($callsign);
if ($lotw_days != null) {
$lotw_member="active";
} else {
$lotw_member="not found";
}
$return = [
"callsign" => strtoupper($callsign),
"dxcc" => false,
"callsign_name" => "",
"callsign_qra" => "",
"callsign_distance" => 0,
"callsign_qth" => "",
"callsign_iota" => "",
"callsign_state" => "",
@ -136,6 +122,7 @@ class Logbook extends CI_Controller {
"bearing" => "",
"workedBefore" => false,
"lotw_member" => $lotw_member,
"lotw_days" => $lotw_days,
"image" => "",
];
@ -155,6 +142,7 @@ class Logbook extends CI_Controller {
$return['callsign_name'] = $this->logbook_model->call_name($callsign);
$return['callsign_qra'] = $this->logbook_model->call_qra($callsign);
$return['callsign_distance'] = $this->distance($return['callsign_qra'], $station_id);
$return['callsign_qth'] = $this->logbook_model->call_qth($callsign);
$return['callsign_iota'] = $this->logbook_model->call_iota($callsign);
$return['qsl_manager'] = $this->logbook_model->call_qslvia($callsign);
@ -186,6 +174,7 @@ class Logbook extends CI_Controller {
{
$return['callsign_name'] = $callbook['name'];
$return['callsign_qra'] = $callbook['gridsquare'];
$return['callsign_distance'] = $this->distance($callbook['gridsquare'], $station_id);
$return['callsign_qth'] = $callbook['city'];
$return['callsign_iota'] = $callbook['iota'];
$return['callsign_state'] = $callbook['state'];
@ -233,7 +222,7 @@ class Logbook extends CI_Controller {
if($type == "SAT") {
$this->db->where('COL_PROP_MODE', 'SAT');
} else {
$this->db->where('COL_MODE', $mode);
$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');
@ -274,7 +263,7 @@ class Logbook extends CI_Controller {
if($type == "SAT") {
$this->db->where('COL_PROP_MODE', 'SAT');
} else {
$this->db->where('COL_MODE', $mode);
$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');
@ -304,12 +293,13 @@ class Logbook extends CI_Controller {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$CI->load->model('logbook_model');
if(!empty($logbooks_locations_array)) {
if($type == "SAT") {
$this->db->where('COL_PROP_MODE', 'SAT');
} else {
$this->db->where('COL_MODE', $mode);
$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');
@ -349,12 +339,13 @@ class Logbook extends CI_Controller {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$CI->load->model('logbook_model');
if(!empty($logbooks_locations_array)) {
if($type == "SAT") {
$this->db->where('COL_PROP_MODE', 'SAT');
} else {
$this->db->where('COL_MODE', $mode);
$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');
@ -769,7 +760,8 @@ class Logbook extends CI_Controller {
function querydb($id) {
$this->db->from($this->config->item('table_name'));
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
$this->db->join('dxcc_entities', 'dxcc_entities.adif = '.$this->config->item('table_name').'.COL_DXCC');
$this->db->join('dxcc_entities', 'dxcc_entities.adif = '.$this->config->item('table_name').'.COL_DXCC', 'left outer');
$this->db->join('lotw_users', 'lotw_users.callsign = '.$this->config->item('table_name').'.col_call', 'left outer');
$this->db->group_start();
$this->db->like(''.$this->config->item('table_name').'.COL_CALL', $id);
$this->db->or_like(''.$this->config->item('table_name').'.COL_GRIDSQUARE', $id);
@ -814,6 +806,42 @@ class Logbook extends CI_Controller {
}
function search_lotw_unconfirmed($station_id) {
$station_id = $this->security->xss_clean($station_id);
$this->load->model('user_model');
if(!$this->user_model->authorize($this->config->item('auth_mode'))) { return; }
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = 'select COL_CALL, COL_MODE, COL_SUBMODE, station_callsign, COL_SAT_NAME, COL_BAND, COL_TIME_ON, lotw_users.lastupload from ' . $this->config->item('table_name') .
' join station_profile on ' . $this->config->item('table_name') . '.station_id = station_profile.station_id
join lotw_users on ' . $this->config->item('table_name') . '.col_call = lotw_users.callsign
where ' . $this->config->item('table_name') .'.station_id in ('. $location_list . ')';
if ($station_id != 'All') {
$sql .= ' and station_profile.station_id = ' . $station_id;
}
$sql .= " and COL_LOTW_QSL_RCVD <> 'Y' and " . $this->config->item('table_name') . ".COL_TIME_ON < lotw_users.lastupload";
$query = $this->db->query($sql);
$data['qsos'] = $query;
$this->load->view('search/lotw_unconfirmed_result.php', $data);
}
function search_incorrect_cq_zones($station_id) {
$station_id = $this->security->xss_clean($station_id);
@ -913,6 +941,36 @@ class Logbook extends CI_Controller {
return "";
}
/* return distance */
function searchdistance($locator, $station_id = null) {
$this->load->library('Qra');
if($locator != null) {
if (isset($station_id)) {
// be sure that station belongs to user
$this->load->model('Stations');
if (!$this->Stations->check_station_is_accessible($station_id)) {
return 0;
}
// get station profile
$station_profile = $this->Stations->profile_clean($station_id);
// get locator
$mylocator = $station_profile->station_gridsquare;
} else if($this->session->userdata('user_locator') != null){
$mylocator = $this->session->userdata('user_locator');
} else {
$mylocator = $this->config->item('locator');
}
$distance = $this->qra->distance($mylocator, $locator, 'K');
echo $distance;
}
return 0;
}
/* return station bearing */
function bearing($locator, $unit = 'M', $station_id = null) {
$this->load->library('Qra');
@ -943,6 +1001,36 @@ class Logbook extends CI_Controller {
return "";
}
/* return distance */
function distance($locator, $station_id = null) {
$distance = 0;
$this->load->library('Qra');
if($locator != null) {
if (isset($station_id)) {
// be sure that station belongs to user
$this->load->model('Stations');
if (!$this->Stations->check_station_is_accessible($station_id)) {
return 0;
}
// get station profile
$station_profile = $this->Stations->profile_clean($station_id);
// get locator
$mylocator = $station_profile->station_gridsquare;
} else if($this->session->userdata('user_locator') != null){
$mylocator = $this->session->userdata('user_locator');
} else {
$mylocator = $this->config->item('locator');
}
$distance = $this->qra->distance($mylocator, $locator, 'K');
}
return $distance;
}
function qralatlng($qra) {
$this->load->library('Qra');
$latlng = $this->qra->qra2latlong($qra);

查看文件

@ -1,4 +1,4 @@
<?php
<?php
use Cloudlog\QSLManager\QSO;
@ -47,13 +47,37 @@ class Logbookadvanced extends CI_Controller {
$pageData['dxccarray'] = $this->logbook_model->fetchDxcc();
$pageData['iotaarray'] = $this->logbook_model->fetchIota();
$pageData['sats'] = $this->bands->get_worked_sats();
$pageData['bands'] = $this->bands->get_worked_bands();
$CI =& get_instance();
// Get Date format
if($CI->session->userdata('user_date_format')) {
// If Logged in and session exists
$pageData['custom_date_format'] = $CI->session->userdata('user_date_format');
} else {
// Get Default date format from /config/cloudlog.php
$pageData['custom_date_format'] = $CI->config->item('qso_date_format');
}
switch ($pageData['custom_date_format']) {
case "d/m/y": $pageData['custom_date_format'] = 'DD/MM/YY'; break;
case "d/m/Y": $pageData['custom_date_format'] = 'DD/MM/YYYY'; break;
case "m/d/y": $pageData['custom_date_format'] = 'MM/DD/YY'; break;
case "m/d/Y": $pageData['custom_date_format'] = 'MM/DD/YYYY'; break;
case "d.m.Y": $pageData['custom_date_format'] = 'DD.MM.YYYY'; break;
case "y/m/d": $pageData['custom_date_format'] = 'YY/MM/DD'; break;
case "Y-m-d": $pageData['custom_date_format'] = 'YYYY-MM-DD'; break;
case "M d, Y": $pageData['custom_date_format'] = 'MMM DD, YYYY'; break;
case "M d, y": $pageData['custom_date_format'] = 'MMM DD, YY'; break;
default: $pageData['custom_date_format'] = 'DD/MM/YYYY';
}
$footerData = [];
$footerData['scripts'] = [
'assets/js/moment.min.js',
'assets/js/tempusdominus-bootstrap-4.min.js',
'assets/js/datetime-moment.js',
'assets/js/sections/logbookadvanced.js?' . filemtime(realpath(__DIR__ . "/../../assets/js/sections/logbookadvanced.js"))
];
@ -80,8 +104,17 @@ class Logbookadvanced extends CI_Controller {
'propmode' => xss_clean($this->input->post('propmode')),
'gridsquare' => xss_clean($this->input->post('gridsquare')),
'state' => xss_clean($this->input->post('state')),
'cqzone' => xss_clean($this->input->post('cqzone')),
'qsoresults' => xss_clean($this->input->post('qsoresults')),
'sats' => xss_clean($this->input->post('sats')),
'lotwSent' => xss_clean($this->input->post('lotwSent')),
'lotwReceived' => xss_clean($this->input->post('lotwReceived')),
'eqslSent' => xss_clean($this->input->post('eqslSent')),
'eqslReceived' => xss_clean($this->input->post('eqslReceived')),
'qslvia' => xss_clean($this->input->post('qslvia')),
'sota' => xss_clean($this->input->post('sota')),
'pota' => xss_clean($this->input->post('pota')),
'wwff' => xss_clean($this->input->post('wwff')),
);
$qsos = [];
@ -146,7 +179,7 @@ class Logbookadvanced extends CI_Controller {
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $user_id);
$results = $data->result('array');
$qsos = [];
foreach ($results as $data) {
$qsos[] = new QSO($data);
@ -160,4 +193,36 @@ class Logbookadvanced extends CI_Controller {
header("Content-Type: application/json");
print json_encode($q);
}
}
function update_qsl_received() {
$this->load->model('logbookadvanced_model');
$ids = xss_clean($this->input->post('id'));
$user_id = (int)$this->session->userdata('user_id');
$method = xss_clean($this->input->post('method'));
$sent = xss_clean($this->input->post('sent'));
$status = $this->logbookadvanced_model->updateQslReceived($ids, $user_id, $method, $sent);
$data = $this->logbookadvanced_model->getQsosForAdif($ids, $user_id);
$results = $data->result('array');
$qsos = [];
foreach ($results as $data) {
$qsos[] = new QSO($data);
}
$q = [];
foreach ($qsos as $qso) {
$q[] = $qso->toArray();
}
header("Content-Type: application/json");
print json_encode($q);
}
public function startAtLabel() {
$this->load->view('logbookadvanced/startatform');
}
}

查看文件

@ -129,6 +129,12 @@ class Logbooks extends CI_Controller {
$this->load->view('logbooks/components/publicSlugInputValidation', $data);
}
public function save_publicsearch() {
$this->load->model('logbooks_model');
$returndata = $this->logbooks_model->save_public_search($this->input->post('public_search'), $this->input->post('logbook_id'));
echo "<div class=\"alert alert-success\" role=\"alert\">Public Search Setttings Saved</div>";
}
public function save_publicslug() {
$this->load->model('logbooks_model');

查看文件

@ -53,10 +53,9 @@ class Lookup extends CI_Controller {
$this->load->view('lookup/result', $data);
}
public function scp($call) {
if($call) {
$uppercase_callsign = strtoupper($call);
public function scp() {
if($_POST['callsign']) {
$uppercase_callsign = strtoupper($_POST['callsign']);
}
// SCP results from logbook

查看文件

@ -6,7 +6,7 @@ class Lotw extends CI_Controller {
| Controller: Lotw
|--------------------------------------------------------------------------
|
| This Controller handles all things LOTW, upload and download.
| This Controller handles all things LoTW, upload and download.
|
|
| Note:
@ -49,7 +49,7 @@ class Lotw extends CI_Controller {
// Load required models for page generation
$this->load->model('LotwCert');
// Get Array of the logged in users LOTW certs.
// Get Array of the logged in users LoTW certs.
$data['lotw_cert_results'] = $this->LotwCert->lotw_certs($this->session->userdata('user_id'));
// Set Page Title
@ -156,7 +156,7 @@ class Lotw extends CI_Controller {
} else {
// Certificate is in the system time to update
$this->LotwCert->update_certificate($this->session->userdata('user_id'), $info['issued_callsign'], $info['dxcc-id'], $info['validFrom'], $info['validTo_Date'], $info['pem_key'], $info['general_cert']);
$this->LotwCert->update_certificate($this->session->userdata('user_id'), $info['issued_callsign'], $info['dxcc-id'], $info['validFrom'], $info['validTo_Date'], $info['qso-first-date'], $info['qso-end-date'], $info['pem_key'], $info['general_cert']);
// Cert success flash message
$this->session->set_flashdata('Success', $info['issued_callsign'].' Certificate Updated.');
@ -166,7 +166,7 @@ class Lotw extends CI_Controller {
// p12 certificate processed time to delete the file
unlink($data['upload_data']['full_path']);
// Get Array of the logged in users LOTW certs.
// Get Array of the logged in users LoTW certs.
$data['lotw_cert_results'] = $this->LotwCert->lotw_certs($this->session->userdata('user_id'));
// Set Page Title
@ -187,11 +187,14 @@ class Lotw extends CI_Controller {
| Function: lotw_upload
|--------------------------------------------------------------------------
|
| This function Uploads to LOTW
| This function Uploads to LoTW
|
*/
public function lotw_upload() {
$this->load->model('user_model');
$this->user_model->authorize(2);
// Fire OpenSSL missing error if not found
if (!extension_loaded('openssl')) {
echo "You must install php OpenSSL for LoTW functions to work";
@ -200,154 +203,165 @@ class Lotw extends CI_Controller {
// Get Station Profile Data
$this->load->model('Stations');
$station_profiles = $this->Stations->all();
if ($this->user_model->authorize(2)) {
$station_profiles = $this->Stations->all_of_user($this->session->userdata('user_id'));
$sync_user_id=$this->session->userdata('user_id');
} else {
$station_profiles = $this->Stations->all();
$sync_user_id=null;
}
// Array of QSO IDs being Uploaded
$qso_id_array = array();
// Build TQ8 Outputs
if ($station_profiles->num_rows() >= 1) {
if ($station_profiles->num_rows() >= 1) {
foreach ($station_profiles->result() as $station_profile)
{
foreach ($station_profiles->result() as $station_profile) {
// Get Certificate Data
$this->load->model('LotwCert');
$data['station_profile'] = $station_profile;
$data['lotw_cert_info'] = $this->LotwCert->lotw_cert_details($station_profile->station_callsign, $station_profile->station_dxcc);
// Get Certificate Data
$this->load->model('LotwCert');
$data['station_profile'] = $station_profile;
$data['lotw_cert_info'] = $this->LotwCert->lotw_cert_details($station_profile->station_callsign, $station_profile->station_dxcc);
// If Station Profile has no LOTW Cert continue on.
if(!isset($data['lotw_cert_info']->cert_dxcc_id)) {
continue;
}
// Check if LoTW certificate itself is valid
// Validty of QSO dates will be checked later
$current_date = date('Y-m-d H:i:s');
if ($current_date <= $data['lotw_cert_info']->date_created) {
echo $data['lotw_cert_info']->callsign.": LoTW certificate not valid yet!";
continue;
}
if ($current_date >= $data['lotw_cert_info']->date_expires) {
echo $data['lotw_cert_info']->callsign.": LoTW certificate expired!";
continue;
}
// Get QSOs
$this->load->model('Logbook_model');
$data['qsos'] = $this->Logbook_model->get_lotw_qsos_to_upload($data['station_profile']->station_id, $data['lotw_cert_info']->qso_start_date, $data['lotw_cert_info']->qso_end_date);
// Nothing to upload
if(empty($data['qsos']->result())){
echo $station_profile->station_callsign." (".$station_profile->station_profile_name.") No QSOs to Upload <br>";
continue;
}
foreach ($data['qsos']->result() as $temp_qso) {
array_push($qso_id_array, $temp_qso->COL_PRIMARY_KEY);
}
// Build File to save
$adif_to_save = $this->load->view('lotw_views/adif_views/adif_export', $data, TRUE);
// create folder to store upload file
if (!file_exists('./uploads/lotw')) {
mkdir('./uploads/lotw', 0775, true);
}
// Build Filename
$filename_for_saving = './uploads/lotw/'.preg_replace('/[^a-z0-9]+/', '-', strtolower($data['lotw_cert_info']->callsign))."-".date("Y-m-d-H-i-s")."-cloudlog.tq8";
$gzdata = gzencode($adif_to_save, 9);
$fp = fopen($filename_for_saving, "w");
fwrite($fp, $gzdata);
fclose($fp);
//The URL that accepts the file upload.
$url = 'https://lotw.arrl.org/lotw/upload';
//The name of the field for the uploaded file.
$uploadFieldName = 'upfile';
//The full path to the file that you want to upload
$filePath = realpath($filename_for_saving);
//Initiate cURL
$ch = curl_init();
//Set the URL
curl_setopt($ch, CURLOPT_URL, $url);
//Set the HTTP request to POST
curl_setopt($ch, CURLOPT_POST, true);
//Tell cURL to return the output as a string.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//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 => $filePath
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
//Execute the request
$result = curl_exec($ch);
//If an error occured, throw an exception
//with the error message.
if(curl_errno($ch)){
throw new Exception(curl_error($ch));
}
$pos = strpos($result, "<!-- .UPL. accepted -->");
if ($pos === false) {
// Upload of TQ8 Failed for unknown reason
echo $station_profile->station_callsign." (".$station_profile->station_profile_name.") Upload Failed"."<br>";
} else {
// Upload of TQ8 was successfull
echo "Upload Successful - ".$filename_for_saving."<br>";
$this->LotwCert->last_upload($data['lotw_cert_info']->lotw_cert_id);
// Mark QSOs as Sent
foreach ($qso_id_array as $qso_number) {
$this->Logbook_model->mark_lotw_sent($qso_number);
}
}
// Delete TQ8 File - This is done regardless of whether upload was succcessful
unlink(realpath($filename_for_saving));
// If Station Profile has no LoTW Cert continue on.
if(!isset($data['lotw_cert_info']->cert_dxcc_id)) {
continue;
}
} else {
echo "No Station Profiles found to upload to LOTW";
// Check if LoTW certificate itself is valid
// Validty of QSO dates will be checked later
$current_date = date('Y-m-d H:i:s');
if ($current_date <= $data['lotw_cert_info']->date_created) {
echo $data['lotw_cert_info']->callsign.": LoTW certificate not valid yet!";
continue;
}
if ($current_date >= $data['lotw_cert_info']->date_expires) {
echo $data['lotw_cert_info']->callsign.": LoTW certificate expired!";
continue;
}
// Get QSOs
$this->load->model('Logbook_model');
$data['qsos'] = $this->Logbook_model->get_lotw_qsos_to_upload($data['station_profile']->station_id, $data['lotw_cert_info']->qso_start_date, $data['lotw_cert_info']->qso_end_date);
// Nothing to upload
if(empty($data['qsos']->result())){
if ($this->user_model->authorize(2)) { // Only be verbose if we have a session
echo $station_profile->station_callsign." (".$station_profile->station_profile_name.") No QSOs to Upload <br>";
}
continue;
}
foreach ($data['qsos']->result() as $temp_qso) {
array_push($qso_id_array, $temp_qso->COL_PRIMARY_KEY);
}
// Build File to save
$adif_to_save = $this->load->view('lotw_views/adif_views/adif_export', $data, TRUE);
// create folder to store upload file
if (!file_exists('./uploads/lotw')) {
mkdir('./uploads/lotw', 0775, true);
}
// Build Filename
$filename_for_saving = './uploads/lotw/'.preg_replace('/[^a-z0-9]+/', '-', strtolower($data['lotw_cert_info']->callsign))."-".date("Y-m-d-H-i-s")."-cloudlog.tq8";
$gzdata = gzencode($adif_to_save, 9);
$fp = fopen($filename_for_saving, "w");
fwrite($fp, $gzdata);
fclose($fp);
//The URL that accepts the file upload.
$url = 'https://lotw.arrl.org/lotw/upload';
//The name of the field for the uploaded file.
$uploadFieldName = 'upfile';
//The full path to the file that you want to upload
$filePath = realpath($filename_for_saving);
//Initiate cURL
$ch = curl_init();
//Set the URL
curl_setopt($ch, CURLOPT_URL, $url);
//Set the HTTP request to POST
curl_setopt($ch, CURLOPT_POST, true);
//Tell cURL to return the output as a string.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//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 => $filePath
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
//Execute the request
$result = curl_exec($ch);
//If an error occured, throw an exception
//with the error message.
if(curl_errno($ch)){
throw new Exception(curl_error($ch));
}
$pos = strpos($result, "<!-- .UPL. accepted -->");
if ($pos === false) {
// Upload of TQ8 Failed for unknown reason
echo $station_profile->station_callsign." (".$station_profile->station_profile_name.") Upload Failed"."<br>";
} else {
// Upload of TQ8 was successfull
echo "Upload Successful - ".$filename_for_saving."<br>";
$this->LotwCert->last_upload($data['lotw_cert_info']->lotw_cert_id);
// Mark QSOs as Sent
foreach ($qso_id_array as $qso_number) {
$this->Logbook_model->mark_lotw_sent($qso_number);
}
}
// Delete TQ8 File - This is done regardless of whether upload was succcessful
unlink(realpath($filename_for_saving));
}
} else {
echo "No Station Profiles found to upload to LoTW";
}
/*
| Download QSO Matches from LoTW
*/
*/
if ($this->user_model->authorize(2)) {
echo "<br><br>";
echo $this->lotw_download();
$sync_user_id=$this->session->userdata('user_id');
} else {
$sync_user_id=null;
}
echo $this->lotw_download($sync_user_id);
}
/*
@ -355,7 +369,7 @@ class Lotw extends CI_Controller {
| Function: delete_cert
|--------------------------------------------------------------------------
|
| Deletes LOTW certificate from the MySQL table
| Deletes LoTW certificate from the MySQL table
|
*/
public function delete_cert($cert_id) {
@ -378,7 +392,7 @@ class Lotw extends CI_Controller {
|--------------------------------------------------------------------------
|
| Accepts p12 file and optional password and encrypts the file returning
| the required fields for LOTW and the PEM Key
| the required fields for LoTW and the PEM Key
|
*/
public function decrypt_key($file, $password = "") {
@ -406,7 +420,7 @@ class Lotw extends CI_Controller {
// Error Log Error Message
log_message('error', openssl_error_string());
// Set warning message redirect to LOTW main page
// Set warning message redirect to LoTW main page
$this->session->set_flashdata('Warning', openssl_error_string());
redirect('/lotw/');
}
@ -414,7 +428,7 @@ class Lotw extends CI_Controller {
// Reading p12 failed log error message
log_message('error', openssl_error_string());
// Set warning message redirect to LOTW main page
// Set warning message redirect to LoTW main page
$this->session->set_flashdata('Warning', openssl_error_string());
redirect('/lotw/');
}
@ -497,23 +511,9 @@ class Lotw extends CI_Controller {
$record['qsl_rcvd'] = $config['lotw_rcvd_mark'];
}
$status = $this->logbook_model->import_check($time_on, $record['call'], $record['band']);
$skipNewQso = $this->input->post('importMissing'); // If import missing was checked
$status = $this->logbook_model->import_check($time_on, $record['call'], $record['band'], $record['mode'], $record['station_callsign']);
if($status[0] == "No Match" && $skipNewQso != NULL) {
$station_id = $this->logbook_model->find_correct_station_id($record['station_callsign'], $record['my_gridsquare']);
if ($station_id != NULL) {
$result = $this->logbook_model->import($record, $station_id, NULL, TRUE, NULL, NULL, true, false); // Create the Entry
if ($result == "") {
$lotw_status = 'QSO imported';
} else {
$lotw_status = $result;
}
}
} else {
if($status[0] == "Found") {
if (isset($record['state'])) {
$state = $record['state'];
} else {
@ -526,6 +526,12 @@ class Lotw extends CI_Controller {
$qsl_gridsquare = "";
}
if (isset($record['vucc_grids'])) {
$qsl_vucc_grids = $record['vucc_grids'];
} else {
$qsl_vucc_grids = "";
}
if (isset($record['iota'])) {
$iota = $record['iota'];
} else {
@ -538,23 +544,48 @@ class Lotw extends CI_Controller {
$cnty = "";
}
$lotw_status = $this->logbook_model->lotw_update($time_on, $record['call'], $record['band'], $qsl_date, $record['qsl_rcvd'], $state, $qsl_gridsquare, $iota, $cnty);
if (isset($record['cqz'])) {
$cqz = $record['cqz'];
} else {
$cqz = "";
}
if (isset($record['ituz'])) {
$ituz = $record['ituz'];
} else {
$ituz = "";
}
$lotw_status = $this->logbook_model->lotw_update($time_on, $record['call'], $record['band'], $qsl_date, $record['qsl_rcvd'], $state, $qsl_gridsquare, $qsl_vucc_grids, $iota, $cnty, $cqz, $ituz, $record['station_callsign']);
$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>".$state."</td>";
$table .= "<td>".($qsl_gridsquare != '' ? $qsl_gridsquare : $qsl_vucc_grids)."</td>";
$table .= "<td>".$iota."</td>";
$table .= "<td>QSO Record: ".$status[0]."</td>";
$table .= "<td>LoTW Record: ".$lotw_status."</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></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td></td>";
$table .= "<td>QSO Record: ".$status[0]."</td>";
$table .= "<td></td>";
$table .= "</tr>";
}
$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>".$state."</td>";
$table .= "<td>".$qsl_gridsquare."</td>";
$table .= "<td>".$iota."</td>";
$table .= "<td>QSO Record: ".$status[0]."</td>";
$table .= "<td>LoTW Record: ".$lotw_status."</td>";
$table .= "</tr>";
}
if ($table != "")
@ -566,18 +597,20 @@ class Lotw extends CI_Controller {
unlink($filepath);
if(isset($data['lotw_table_headers'])) {
echo "LoTW Matches<br>";
if($display_view == TRUE) {
$data['page_title'] = "LoTW ADIF Information";
$this->load->view('interface_assets/header', $data);
$this->load->view('lotw/analysis');
$this->load->view('interface_assets/footer');
$this->load->model('user_model');
if ($this->user_model->authorize(2)) { // Only Output results if authorized User
if(isset($data['lotw_table_headers'])) {
if($display_view == TRUE) {
$data['page_title'] = "LoTW ADIF Information";
$this->load->view('interface_assets/header', $data);
$this->load->view('lotw/analysis');
$this->load->view('interface_assets/footer');
} else {
return $tableheaders.$table;
}
} else {
return $tableheaders.$table;
echo "Downloaded LoTW report contains no matches.";
}
} else {
echo "Downloaded LoTW report contains no matches.";
}
}
@ -590,21 +623,21 @@ class Lotw extends CI_Controller {
| downloading matching QSOs.
|
*/
function lotw_download() {
function lotw_download($sync_user_id = null) {
$this->load->model('user_model');
$this->load->model('logbook_model');
$query = $this->user_model->get_all_lotw_users();
if ($query->num_rows() >= 1) {
foreach ($query->result() as $user)
{
$results='';
foreach ($query->result() as $user) {
if ( ($sync_user_id != null) && ($sync_user_id != $user->user_id) ) { continue; }
$config['upload_path'] = './uploads/';
$file = $config['upload_path'] . 'lotwreport_download.adi';
if (file_exists($file) && ! is_writable($file)) {
return "Temporary download file ".$file." is not writable. Aborting!";
$result.= "Temporary download file ".$file." is not writable. Aborting!";
}
// Get credentials for LoTW
@ -623,7 +656,7 @@ class Lotw extends CI_Controller {
echo "You have not defined your ARRL LoTW credentials!";
}
$lotw_last_qsl_date = date('Y-m-d', strtotime($this->logbook_model->lotw_last_qsl_date()));
$lotw_last_qsl_date = date('Y-m-d', strtotime($this->logbook_model->lotw_last_qsl_date($user->user_id)));
// Build URL for LoTW report file
$lotw_url .= "?";
@ -635,20 +668,21 @@ class Lotw extends CI_Controller {
$lotw_url .= "$lotw_last_qsl_date";
if (! is_writable(dirname($file))) {
return "Temporary download directory ".dirname($file)." is not writable. Aborting!";
$results.= "Temporary download directory ".dirname($file)." is not writable. Aborting!";
continue;
}
file_put_contents($file, file_get_contents($lotw_url));
if (file_get_contents($file, false, null, 0, 39) != "ARRL Logbook of the World Status Report") {
return "LoTW downloading failed either due to it being down or incorrect logins.";
$results.= "LoTW downloading failed for User ".$data['user_lotw_name']." either due to it being down or incorrect logins.";
continue;
}
ini_set('memory_limit', '-1');
$results = $this->loadFromFile($file, false);
return $results;
$results.= $this->loadFromFile($file, false);
}
return $results;
} else {
return "No LOTW User details found to carry out matches.";
return "No LoTW User details found to carry out matches.";
}
}
@ -696,7 +730,7 @@ class Lotw extends CI_Controller {
}
else {
// Query the logbook to determine when the last LoTW confirmation was
$lotw_last_qsl_date = date('Y-m-d', strtotime($this->logbook_model->lotw_last_qsl_date()));
$lotw_last_qsl_date = date('Y-m-d', strtotime($this->logbook_model->lotw_last_qsl_date($this->session->userdata['user_id'])));
}
// Build URL for LoTW report file
@ -864,7 +898,7 @@ class Lotw extends CI_Controller {
}
/*
Load the ARRL LOTW User Activity CSV and saves into uploads/lotw_users.csv
Load the ARRL LoTW User Activity CSV and saves into uploads/lotw_users.csv
*/
public function load_users() {
$contents = file_get_contents('https://lotw.arrl.org/lotw-user-activity.csv', true);
@ -883,7 +917,7 @@ class Lotw extends CI_Controller {
}
/*
Check if callsign is an active LOTW user and return whether its true or not
Check if callsign is an active LoTW user and return whether its true or not
*/
function lotw_usercheck($callsign) {
$f = fopen('./updates/lotw_users.csv', "r");
@ -927,7 +961,7 @@ class Lotw extends CI_Controller {
| Function: lotw_satellite_map
| Requires: OSCAR Satellite name $satname
|
| Outputs if LOTW uses a different satellite name
| Outputs if LoTW uses a different satellite name
|
*/
function lotw_satellite_map($satname) {
@ -941,6 +975,14 @@ class Lotw extends CI_Controller {
'UVSQ' => "UVSQ-SAT",
'CAS-3H' => "LILACSAT-2",
'IO-117' => "GREENCUBE",
"TEVEL1" => "TEVEL-1",
"TEVEL2" => "TEVEL-2",
"TEVEL3" => "TEVEL-3",
"TEVEL4" => "TEVEL-4",
"TEVEL5" => "TEVEL-5",
"TEVEL6" => "TEVEL-6",
"TEVEL7" => "TEVEL-7",
"TEVEL8" => "TEVEL-8",
);
return array_search(strtoupper($satname),$arr,true);

查看文件

@ -0,0 +1,56 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Maintenance extends CI_Controller {
function __construct()
{
parent::__construct();
}
/* User Facing Links to Maintenance URLs */
public function index() {
$this->load->model('user_model');
if(!$this->user_model->authorize(99)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
$this->load->model('Logbook_model');
$this->load->model('Stations');
$data['stations']=$this->Stations->all();
$data['page_title'] = "Maintenance";
$data['is_there_qsos_with_no_station_id'] = $this->Logbook_model->check_for_station_id();
if ($data['is_there_qsos_with_no_station_id']) {
$data['calls_wo_sid']=$this->Logbook_model->calls_without_station_id();
}
$this->load->view('interface_assets/header', $data);
$this->load->view('maintenance/main');
$this->load->view('interface_assets/footer');
}
public function reassign() {
$this->load->model('user_model');
if(!$this->user_model->authorize(99)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
$this->load->model('Logbook_model');
$this->load->model('Stations');
$call = xss_clean(($this->input->post('call')));
$station_profile_id = xss_clean(($this->input->post('station_id')));
// Check if target-station-id exists
$allowed=false;
$status=false;
$stations=$this->Stations->all();
foreach ($stations->result() as $station) {
if ($station->station_id == $station_profile_id) { $allowed=true; }
}
if ($allowed) {
log_message("error",$call." to ".$station_profile_id);
$status=$this->Logbook_model->update_all_station_ids($station_profile_id,$call);
} else {
$status=false;
}
header('Content-Type: application/json');
echo json_encode(array('status' => $status));
return;
}
}
/* End of file Backup.php */

查看文件

@ -13,9 +13,18 @@ class Options extends CI_Controller {
$this->load->model('user_model');
if(!$this->user_model->authorize(99)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
// Load language files
$this->lang->load(array(
'options',
));
}
// Default /options view just gives some text to explain the options area
function index() {
@ -24,7 +33,7 @@ class Options extends CI_Controller {
//echo $this->optionslib->get_option('theme');
$data['page_title'] = "Cloudlog Options";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$this->load->view('interface_assets/header', $data);
$this->load->view('options/index');
@ -38,8 +47,8 @@ class Options extends CI_Controller {
$directory = 'application/language';
$data['language_options'] = array_diff(scandir($directory), array('..', '.'));
$data['page_title'] = "Cloudlog Options";
$data['sub_heading'] = "Appearance";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_appearance');
$this->load->model('Themes_model');
@ -57,8 +66,8 @@ class Options extends CI_Controller {
$directory = 'application/language';
$data['language_options'] = array_diff(scandir($directory), array('..', '.'));
$data['page_title'] = "Cloudlog Options";
$data['sub_heading'] = "Appearance";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_appearance');
$this->load->helper(array('form', 'url'));
@ -79,7 +88,7 @@ class Options extends CI_Controller {
// If theme update is complete set a flashsession with a success note
if($theme_update_status == TRUE) {
$this->session->set_flashdata('success', 'Theme changed to '.$this->input->post('theme'));
$this->session->set_flashdata('success', $this->lang->line('options_theme_changed_to').$this->input->post('theme'));
}
// Update theme choice within the options system
@ -87,7 +96,7 @@ class Options extends CI_Controller {
// If theme update is complete set a flashsession with a success note
if($search_update_status == TRUE) {
$this->session->set_flashdata('success', 'Global Search changed to '.$this->input->post('globalSearch'));
$this->session->set_flashdata('success', $this->lang->line('options_global_search_changed_to').$this->input->post('globalSearch'));
}
// Update dashboard banner within the options system
@ -95,7 +104,7 @@ class Options extends CI_Controller {
// If dashboard banner update is complete set a flashsession with a success note
if($dasboard_banner_update_status == TRUE) {
$this->session->set_flashdata('success', 'Dashboard banner changed to '.$this->input->post('dashboardBanner'));
$this->session->set_flashdata('success', $this->lang->line('options_dashboard_banner_changed_to').$this->input->post('dashboardBanner'));
}
// Update dashboard map within the options system
@ -103,7 +112,7 @@ class Options extends CI_Controller {
// If dashboard map update is complete set a flashsession with a success note
if($ldashboard_map_update_status == TRUE) {
$this->session->set_flashdata('success', 'Dashboard map changed to '.$this->input->post('dashboardMap'));
$this->session->set_flashdata('success', $this->lang->line('options_dashboard_map_changed_to').$this->input->post('dashboardMap'));
}
// Update logbook map within the options system
@ -111,7 +120,7 @@ class Options extends CI_Controller {
// If logbook map update is complete set a flashsession with a success note
if($logbook_map_update_status == TRUE) {
$this->session->set_flashdata('success', 'Logbook map changed to '.$this->input->post('logbookMap'));
$this->session->set_flashdata('success', $this->lang->line('options_logbook_map_changed_to').$this->input->post('logbookMap'));
}
// Update Lang choice within the options system
@ -127,11 +136,60 @@ class Options extends CI_Controller {
}
}
// function used to display the /dxcluster url
function dxcluster() {
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_dxcluster_settings');
$this->load->view('interface_assets/header', $data);
$this->load->view('options/dxcluster');
$this->load->view('interface_assets/footer');
}
// Handles saving the DXCluster options to the options system.
function dxcluster_save() {
// Get Language Options
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_dxcluster_settings');
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('dxcache_url', 'URL of DXCache', 'valid_url');
$this->form_validation->set_rules('dxcluster_maxage', 'Max Age of Spots', 'required');
$this->form_validation->set_rules('dxcluster_decont', 'de continent', 'required');
if ($this->form_validation->run() == FALSE) {
$this->load->view('interface_assets/header', $data);
$this->load->view('options/dxcluster');
$this->load->view('interface_assets/footer');
} else {
$dxcluster_decont_update = $this->optionslib->update('dxcluster_decont', $this->input->post('dxcluster_decont'), 'yes');
if($dxcluster_decont_update == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_dxcluster_decont_changed_to').$this->input->post('dxcluster_decont'));
}
$dxcluster_maxage_update = $this->optionslib->update('dxcluster_maxage', $this->input->post('dxcluster_maxage'), 'yes');
if($dxcluster_maxage_update == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_dxcluster_maxage_changed_to').$this->input->post('dxcluster_maxage'));
}
$dxcache_url_update = $this->optionslib->update('dxcache_url', $this->input->post('dxcache_url'), 'yes');
if($dxcache_url_update == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_dxcache_url_changed_to').$this->input->post('dxcache_url'));
}
redirect('/options/dxcluster');
}
}
// function used to display the /radio url
function radio() {
$data['page_title'] = "Cloudlog Options";
$data['sub_heading'] = "Radio Settings";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_radio_settings');
$this->load->view('interface_assets/header', $data);
$this->load->view('options/radios');
@ -143,8 +201,8 @@ class Options extends CI_Controller {
// Get Language Options
$data['page_title'] = "Cloudlog Options";
$data['sub_heading'] = "Radio Settings";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_radio_settings');
$this->load->helper(array('form', 'url'));
@ -165,7 +223,7 @@ class Options extends CI_Controller {
// If theme update is complete set a flashsession with a success note
if($radioTimeout_update == TRUE) {
$this->session->set_flashdata('success', 'Radio Timeout Warning changed to '.$this->input->post('radioTimeout').' seconds');
$this->session->set_flashdata('success', $this->lang->line('options_radio_timeout_warning_changed_to').$this->input->post('radioTimeout').' seconds');
}
// Redirect back to /appearance
@ -176,8 +234,8 @@ class Options extends CI_Controller {
// function used to display the /appearance url
function email() {
$data['page_title'] = "Cloudlog Options";
$data['sub_heading'] = "Email";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_email');
$this->load->view('interface_assets/header', $data);
$this->load->view('options/email');
@ -189,8 +247,8 @@ class Options extends CI_Controller {
// Get Language Options
$data['page_title'] = "Cloudlog Options";
$data['sub_heading'] = "Email";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_email');
$this->load->helper(array('form', 'url'));
@ -212,7 +270,7 @@ class Options extends CI_Controller {
// If emailProtocolupdate update is complete set a flashsession with a success note
if($emailProtocolupdate == TRUE) {
$this->session->set_flashdata('success', 'Outgoing Email Protocol changed to '.$this->input->post('emailProtocol'));
$this->session->set_flashdata('success', $this->lang->line('options_outgoing_email_protocol_changed_to').$this->input->post('emailProtocol'));
}
// Update smtpEncryption choice within the options system
@ -220,7 +278,23 @@ class Options extends CI_Controller {
// If smtpEncryption update is complete set a flashsession with a success note
if($smtpEncryptionupdate == TRUE) {
$this->session->set_flashdata('success', 'SMTP Encryption changed to '.$this->input->post('smtpEncryption'));
$this->session->set_flashdata('success', $this->lang->line('options_smtp_encryption_changed_to').$this->input->post('smtpEncryption'));
}
// Update email sender name within the options system
$emailSenderNameupdate = $this->optionslib->update('emailSenderName', $this->input->post('emailSenderName'), 'yes');
// If email address update is complete set a flashsession with a success note
if($emailSenderNameupdate == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_email_sender_name_changed_to').$this->input->post('emailSenderName'));
}
// Update email address choice within the options system
$emailAddressupdate = $this->optionslib->update('emailAddress', $this->input->post('emailAddress'), 'yes');
// If email address update is complete set a flashsession with a success note
if($emailAddressupdate == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_email_address_changed_to').$this->input->post('emailAddress'));
}
// Update smtpHost choice within the options system
@ -228,7 +302,7 @@ class Options extends CI_Controller {
// If smtpHost update is complete set a flashsession with a success note
if($smtpHostupdate == TRUE) {
$this->session->set_flashdata('success', 'SMTP Host changed to '.$this->input->post('smtpHost'));
$this->session->set_flashdata('success', $this->lang->line('options_smtp_host_changed_to').$this->input->post('smtpHost'));
}
// Update smtpPort choice within the options system
@ -236,7 +310,7 @@ class Options extends CI_Controller {
// If smtpPort update is complete set a flashsession with a success note
if($smtpPortupdate == TRUE) {
$this->session->set_flashdata('success', 'SMTP Port changed to '.$this->input->post('smtpPort'));
$this->session->set_flashdata('success', $this->lang->line('options_smtp_port_changed_to').$this->input->post('smtpPort'));
}
// Update smtpUsername choice within the options system
@ -244,7 +318,7 @@ class Options extends CI_Controller {
// If smtpUsername update is complete set a flashsession with a success note
if($smtpUsernameupdate == TRUE) {
$this->session->set_flashdata('success', 'SMTP Username changed to '.$this->input->post('smtpUsername'));
$this->session->set_flashdata('success', $this->lang->line('options_smtp_username_changed_to').$this->input->post('smtpUsername'));
}
// Update smtpPassword choice within the options system
@ -252,7 +326,7 @@ class Options extends CI_Controller {
// If smtpPassword update is complete set a flashsession with a success note
if($smtpPasswordupdate == TRUE) {
$this->session->set_flashdata('success', 'SMTP Password changed to '.$this->input->post('smtpPassword'));
$this->session->set_flashdata('success', $this->lang->line('options_smtp_password_changed_to').$this->input->post('smtpPassword'));
}
// Update emailcrlf choice within the options system
@ -260,7 +334,7 @@ class Options extends CI_Controller {
// If emailcrlf update is complete set a flashsession with a success note
if($emailcrlfupdate == TRUE) {
$this->session->set_flashdata('success', 'Email CRLF changed to '.$this->input->post('emailcrlf'));
$this->session->set_flashdata('success', $this->lang->line('options_email_crlf_changed_to').$this->input->post('emailcrlf'));
}
// Update emailnewline choice within the options system
@ -268,7 +342,7 @@ class Options extends CI_Controller {
// If emailnewline update is complete set a flashsession with a success note
if($emailnewlineupdate == TRUE) {
$this->session->set_flashdata('success', 'Email Newline changed to '.$this->input->post('emailnewline'));
$this->session->set_flashdata('success', $this->lang->line('options_email_newline_changed_to').$this->input->post('emailnewline'));
}
// Redirect back to /appearance
@ -278,8 +352,8 @@ class Options extends CI_Controller {
function oqrs() {
$data['page_title'] = "Cloudlog Options";
$data['sub_heading'] = "OQRS Options";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_oqrs');
$this->load->view('interface_assets/header', $data);
$this->load->view('options/oqrs');
@ -288,8 +362,8 @@ class Options extends CI_Controller {
function oqrs_save() {
$data['page_title'] = "Cloudlog Options";
$data['sub_heading'] = "OQRS Options";
$data['page_title'] = $this->lang->line('options_cloudlog_options');
$data['sub_heading'] = $this->lang->line('options_oqrs');
$this->load->helper(array('form', 'url'));
@ -300,7 +374,7 @@ class Options extends CI_Controller {
$global_oqrs_text = $this->optionslib->update('groupedSearch', $this->input->post('groupedSearch'), null);
if($global_oqrs_text == TRUE) {
$this->session->set_flashdata('success', 'OQRS options have been saved.');
$this->session->set_flashdata('success', $this->lang->line('options_oqrs_options_have_been_saved'));
}
redirect('/options/oqrs');

查看文件

@ -181,8 +181,8 @@ class Oqrs extends CI_Controller {
$data['usermessage'] = $this->security->xss_clean($postdata['message']);
$message = $this->load->view('email/oqrs_request', $data, TRUE);
$this->email->from('noreply@cloudlog.co.uk', 'Cloudlog');
$this->email->from($this->optionslib->get_option('emailAddress'), $this->optionslib->get_option('emailSenderName'));
$this->email->to($email);
$this->email->reply_to($this->security->xss_clean($postdata['email']), strtoupper($data['callsign']));

查看文件

@ -26,7 +26,7 @@ class Qrz extends CI_Controller {
if ($station_ids) {
foreach ($station_ids as $station) {
$qrz_api_key = $station->qrzapikey;
if($this->mass_upload_qsos($station->station_id, $qrz_api_key)) {
if($this->mass_upload_qsos($station->station_id, $qrz_api_key, true)) {
echo "QSOs have been uploaded to QRZ.com.";
log_message('info', 'QSOs have been uploaded to QRZ.com.');
} else{
@ -53,9 +53,9 @@ class Qrz extends CI_Controller {
* Function gets all QSOs from given station_id, that are not previously uploaded to qrz.
* Adif is build for each qso, and then uploaded, one at a time
*/
function mass_upload_qsos($station_id, $qrz_api_key) {
function mass_upload_qsos($station_id, $qrz_api_key, $trusted = false) {
$i = 0;
$data['qsos'] = $this->logbook_model->get_qrz_qsos($station_id);
$data['qsos'] = $this->logbook_model->get_qrz_qsos($station_id, $trusted);
$errormessages=array();
$CI =& get_instance();
@ -71,9 +71,15 @@ class Qrz extends CI_Controller {
$result = $this->logbook_model->push_qso_to_qrz($qrz_api_key, $adif);
}
if ($result['status'] == 'OK') {
if ( ($result['status'] == 'OK') || ( ($result['status'] == 'error') && ($result['message'] == 'STATUS=FAIL&REASON=Unable to add QSO to database: duplicate&EXTENDED=')) ){
$this->markqso($qso->COL_PRIMARY_KEY);
$i++;
} elseif ( ($result['status']=='error') && (substr($result['message'],0,11) == 'STATUS=AUTH')) {
log_message('error', 'QRZ upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
log_message('error', 'QRZ upload failed with the following message: ' .$result['message']);
log_message('error', 'QRZ upload stopped for Station_ID: ' .$station_id);
$errormessages[] = $result['message'] . ' Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON;
break; /* If key is invalid, immediate stop syncing for more QSOs of this station */
} else {
log_message('error', 'QRZ upload failed for qso: Call: ' . $qso->COL_CALL . ' Band: ' . $qso->COL_BAND . ' Mode: ' . $qso->COL_MODE . ' Time: ' . $qso->COL_TIME_ON);
log_message('error', 'QRZ upload failed with the following message: ' .$result['message']);

查看文件

@ -66,11 +66,15 @@ class Qsl extends CI_Controller {
if (isset($_FILES['qslcardfront']) && $_FILES['qslcardfront']['name'] != "" && $_FILES['qslcardfront']['error'] == 0)
{
$result['front'] = $this->uploadQslCardFront($qsoid);
} else {
$result['front']['status'] = '';
}
if (isset($_FILES['qslcardback']) && $_FILES['qslcardback']['name'] != "" && $_FILES['qslcardback']['error'] == 0)
{
$result['back'] = $this->uploadQslCardBack($qsoid);
} else {
$result['back']['status'] = '';
}
header("Content-type: application/json");
@ -170,6 +174,13 @@ class Qsl extends CI_Controller {
echo json_encode($result);
}
function viewQsl() {
$cleanid = $this->security->xss_clean($this->input->post('id'));
$this->load->model('Qsl_model');
$data['qslimages'] = $this->Qsl_model->getQslForQsoId($cleanid);
$this->load->view('qslcard/qslcarousel', $data);
}
}
// Functions for storage, these need shifted to a libary to use across Cloudlog

查看文件

@ -356,13 +356,13 @@ class QSO extends CI_Controller {
function delete($id) {
$this->load->model('logbook_model');
$this->logbook_model->delete($id);
$this->session->set_flashdata('notice', 'QSO Deleted Successfully');
$data['message_title'] = "Deleted";
$data['message_contents'] = "QSO Deleted Successfully";
$this->load->view('messages/message', $data);
if ($this->logbook_model->check_qso_is_accessible($id)) {
$this->logbook_model->delete($id);
$this->session->set_flashdata('notice', 'QSO Deleted Successfully');
$data['message_title'] = "Deleted";
$data['message_contents'] = "QSO Deleted Successfully";
$this->load->view('messages/message', $data);
}
// If deletes from /logbook dropdown redirect
if (strpos($_SERVER['HTTP_REFERER'], '/logbook') !== false) {
@ -375,10 +375,14 @@ class QSO extends CI_Controller {
$id = str_replace('"', "", $this->input->post("id"));
$this->load->model('logbook_model');
$this->logbook_model->delete($id);
header('Content-Type: application/json');
echo json_encode(array('message' => 'OK'));
if ($this->logbook_model->check_qso_is_accessible($id)) {
$this->logbook_model->delete($id);
header('Content-Type: application/json');
echo json_encode(array('message' => 'OK'));
} else {
header('Content-Type: application/json');
echo json_encode(array('message' => 'not allowed'));
}
return;
}

查看文件

@ -78,82 +78,95 @@
}
function json($id)
{
function json($id) {
header('Content-Type: application/json');
$this->load->model('user_model');
$this->load->model('cat');
// Check if users logged in
$query = $this->cat->radio_status($id);
if($this->user_model->validate_session() == 0) {
// user is not logged in
// Return Json data
header('Content-Type: application/json');
echo json_encode(array(
"error" => "not_logged_in"
), JSON_PRETTY_PRINT);
} else {
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
header('Content-Type: application/json');
$this->load->model('cat');
$query = $this->cat->radio_status($id);
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
$frequency = $row->frequency;
$frequency = $row->frequency;
$frequency_rx = $row->frequency_rx;
$frequency_rx = $row->frequency_rx;
$power = $row->power;
$power = $row->power;
$prop_mode = $row->prop_mode;
$prop_mode = $row->prop_mode;
// Check Mode
$mode = strtoupper($row->mode);
if ($mode == "FMN") {
$mode = "FM";
}
if ($row->prop_mode == "SAT") {
// Get Satellite Name
if ($row->sat_name == "AO-07") {
$sat_name = "AO-7";
} elseif ($row->sat_name == "LILACSAT") {
$sat_name = "CAS-3H";
} else {
$sat_name = strtoupper($row->sat_name);
// Check Mode
$mode = strtoupper($row->mode);
if ($mode == "FMN") {
$mode = "FM";
}
// Get Satellite Mode
$sat_mode_uplink = $this->get_mode_designator($row->frequency);
$sat_mode_downlink = $this->get_mode_designator($row->frequency_rx);
if ($row->prop_mode == "SAT") {
// Get Satellite Name
if ($row->sat_name == "AO-07") {
$sat_name = "AO-7";
} elseif ($row->sat_name == "LILACSAT") {
$sat_name = "CAS-3H";
} else {
$sat_name = strtoupper($row->sat_name);
}
if (empty($sat_mode_uplink)) {
// Get Satellite Mode
$sat_mode_uplink = $this->get_mode_designator($row->frequency);
$sat_mode_downlink = $this->get_mode_designator($row->frequency_rx);
if (empty($sat_mode_uplink)) {
$sat_mode = "";
} elseif ($sat_mode_uplink !== $sat_mode_downlink) {
$sat_mode = $sat_mode_uplink."/".$sat_mode_downlink;
} else {
$sat_mode = $sat_mode_uplink;
}
} else {
$sat_name = "";
$sat_mode = "";
} elseif ($sat_mode_uplink !== $sat_mode_downlink) {
$sat_mode = $sat_mode_uplink."/".$sat_mode_downlink;
} else {
$sat_mode = $sat_mode_uplink;
}
} else {
$sat_name = "";
$sat_mode = "";
// Calculate how old the data is in minutes
$datetime1 = new DateTime("now", new DateTimeZone('UTC')); // Today's Date/Time
$datetime2 = new DateTime($row->timestamp, new DateTimeZone('UTC'));
$interval = $datetime1->diff($datetime2);
$minutes = $interval->days * 24 * 60;
$minutes += $interval->h * 60;
$minutes += $interval->i;
$updated_at = $minutes;
// Return Json data
echo json_encode(array(
"frequency" => $frequency,
"frequency_rx" => $frequency_rx,
"mode" => $mode,
"satmode" => $sat_mode,
"satname" => $sat_name,
"power" => $power,
"prop_mode" => $prop_mode,
"updated_minutes_ago" => $updated_at,
), JSON_PRETTY_PRINT);
}
// Calculate how old the data is in minutes
$datetime1 = new DateTime("now", new DateTimeZone('UTC')); // Today's Date/Time
$datetime2 = new DateTime($row->timestamp, new DateTimeZone('UTC'));
$interval = $datetime1->diff($datetime2);
$minutes = $interval->days * 24 * 60;
$minutes += $interval->h * 60;
$minutes += $interval->i;
$updated_at = $minutes;
// Return Json data
echo json_encode(array(
"frequency" => $frequency,
"frequency_rx" => $frequency_rx,
"mode" => $mode,
"satmode" => $sat_mode,
"satname" => $sat_name,
"power" => $power,
"prop_mode" => $prop_mode,
"updated_minutes_ago" => $updated_at,
), JSON_PRETTY_PRINT);
}
}
}

查看文件

@ -80,6 +80,18 @@ class Search extends CI_Controller {
$this->load->view('interface_assets/footer');
}
// Searches for unconfirmed Lotw QSOs where QSO partner has uploaded to LoTW after the QSO date
public function lotw_unconfirmed() {
$this->load->model('stations');
$data['station_profile'] = $this->stations->all_of_user();
$data['page_title'] = "QSOs unconfirmed on LoTW, but the callsign has uploaded to LoTW after QSO date";
$this->load->view('interface_assets/header', $data);
$this->load->view('search/lotw_unconfirmed');
$this->load->view('interface_assets/footer');
}
function json_result() {
if(isset($_POST['search'])) {
$result = $this->fetchQueryResult($_POST['search'], false);

查看文件

@ -19,6 +19,9 @@ class Station extends CI_Controller {
{
$this->load->model('stations');
$this->load->model('Logbook_model');
$this->load->model('user_model');
$data['is_admin'] = ($this->user_model->authorize(99));
$data['stations'] = $this->stations->all_with_count();
$data['current_active'] = $this->stations->find_active();
@ -31,14 +34,13 @@ class Station extends CI_Controller {
$this->load->view('interface_assets/footer');
}
public function create()
{
public function create() {
$this->load->model('stations');
$this->load->model('dxcc');
$data['dxcc_list'] = $this->dxcc->list();
$this->load->model('logbook_model');
$data['iota_list'] = $this->logbook_model->fetchIota();
$this->load->model('logbook_model');
$data['iota_list'] = $this->logbook_model->fetchIota();
$this->load->library('form_validation');
@ -59,50 +61,57 @@ class Station extends CI_Controller {
}
}
public function edit($id)
{
$data = $this->load_station_for_editing($id);
$data['page_title'] = "Edit Station Location: {$data['my_station_profile']->station_profile_name}";
public function edit($id) {
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($id)) {
$data = $this->load_station_for_editing($id);
$data['page_title'] = "Edit Station Location: {$data['my_station_profile']->station_profile_name}";
if ($this->form_validation->run() == FALSE) {
$this->load->view('interface_assets/header', $data);
$this->load->view('station_profile/edit');
$this->load->view('interface_assets/footer');
if ($this->form_validation->run() == FALSE) {
$this->load->view('interface_assets/header', $data);
$this->load->view('station_profile/edit');
$this->load->view('interface_assets/footer');
} else {
$this->stations->edit();
$data['notice'] = "Station Profile " . $this->security->xss_clean($this->input->post('station_profile_name', true)) . " Updated";
redirect('station');
}
} else {
$this->stations->edit();
$data['notice'] = "Station Profile " . $this->security->xss_clean($this->input->post('station_profile_name', true)) . " Updated";
redirect('station');
}
}
public function copy($id)
{
$data = $this->load_station_for_editing($id);
$data['page_title'] = "Duplicate Station Location: {$data['my_station_profile']->station_profile_name}";
public function copy($id) {
$this->load->model('stations');
if ($this->stations->check_station_is_accessible($id)) {
$data = $this->load_station_for_editing($id);
$data['page_title'] = "Duplicate Station Location: {$data['my_station_profile']->station_profile_name}";
// we NULLify station_id and station_profile_name to make sure we are creating a new station
$data['copy_from'] = $data['my_station_profile']->station_id;
$data['my_station_profile']->station_id = NULL;
$data['my_station_profile']->station_profile_name = '';
// we NULLify station_id and station_profile_name to make sure we are creating a new station
$data['copy_from'] = $data['my_station_profile']->station_id;
$data['my_station_profile']->station_id = NULL;
$data['my_station_profile']->station_profile_name = '';
if ($this->form_validation->run() == FALSE)
{
$this->load->view('interface_assets/header', $data);
$this->load->view('station_profile/edit');
$this->load->view('interface_assets/footer');
}
else
{
$this->stations->add();
if ($this->form_validation->run() == FALSE)
{
$this->load->view('interface_assets/header', $data);
$this->load->view('station_profile/edit');
$this->load->view('interface_assets/footer');
}
else
{
$this->stations->add();
redirect('station');
}
} else {
redirect('station');
}
}
function load_station_for_editing($id): array
{
function load_station_for_editing($id): array {
$this->load->library('form_validation');
$this->load->model('stations');
@ -150,24 +159,19 @@ class Station extends CI_Controller {
redirect('station');
}
function assign_all() {
$this->load->model('Logbook_model');
$this->Logbook_model->update_all_station_ids();
redirect('station');
}
public function delete($id) {
$this->load->model('stations');
$this->stations->delete($id);
if ($this->stations->check_station_is_accessible($id)) {
$this->stations->delete($id);
}
redirect('station');
}
public function deletelog($id) {
public function deletelog($id) {
$this->load->model('stations');
$this->stations->deletelog($id);
if ($this->stations->check_station_is_accessible($id)) {
$this->stations->deletelog($id);
}
redirect('station');
}

查看文件

@ -2,10 +2,22 @@
class Statistics extends CI_Controller {
function __construct()
{
parent::__construct();
// Load language files
$this->lang->load(array(
'statistics',
));
}
public function index()
{
$this->load->model('user_model');
$this->load->model('bands');
if(!$this->user_model->authorize($this->config->item('auth_mode'))) {
if($this->user_model->validate_session()) {
$this->user_model->clear_session();
@ -17,7 +29,7 @@ class Statistics extends CI_Controller {
// Render User Interface
// Set Page Title
$data['page_title'] = "Statistics";
$data['page_title'] = $this->lang->line('statistics_statistics');
$data['sat_active'] = array_search("SAT", $this->bands->get_user_bands(), true);
// Load Views

查看文件

@ -189,7 +189,7 @@ class Update extends CI_Controller {
gzclose($gz);
if (file_put_contents($this->make_update_path("cty.xml"), $data) === FALSE) {
$this->update_status("FAILED: Could not write to LoTW users file");
$this->update_status("FAILED: Could not write to cty.xml file");
return;
}
@ -251,6 +251,11 @@ class Update extends CI_Controller {
$this->logbook_model->check_missing_continent();
}
public function update_distances() {
$this->load->model('logbook_model');
$this->logbook_model->update_distances();
}
public function check_missing_grid($all = false){
$this->load->model('logbook_model');
$this->logbook_model->check_missing_grid_id($all);
@ -287,9 +292,6 @@ class Update extends CI_Controller {
}
public function download_lotw_users() {
$contents = file_get_contents('https://lotw.arrl.org/lotw-user-activity.csv', true);
if($contents === FALSE) {
@ -306,6 +308,47 @@ class Update extends CI_Controller {
}
public function lotw_users() {
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
$file = 'https://lotw.arrl.org/lotw-user-activity.csv';
$handle = fopen($file, "r");
if ($handle === FALSE) {
echo "Something went wrong with fetching the LoTW uses file";
return;
}
$this->db->empty_table("lotw_users");
$i = 0;
$data = fgetcsv($handle,1000,",");
do {
if ($data[0]) {
$lotwdata[$i]['callsign'] = $data[0];
$lotwdata[$i]['lastupload'] = $data[1] . ' ' . $data[2];
if (($i % 2000) == 0) {
$this->db->insert_batch('lotw_users', $lotwdata);
unset($lotwdata);
// echo 'Record ' . $i . '<br />';
}
$i++;
}
} while ($data = fgetcsv($handle,1000,","));
fclose($handle);
$this->db->insert_batch('lotw_users', $lotwdata);
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This page was created in ".$totaltime." seconds <br />";
echo "Records inserted: " . $i . " <br/>";
}
public function lotw_check() {
$f = fopen('./updates/lotw_users.csv', "r");
$result = false;

查看文件

@ -11,6 +11,7 @@ class User extends CI_Controller {
'account',
'lotw',
'eqsl',
'admin',
));
}
@ -21,7 +22,7 @@ class User extends CI_Controller {
$data['results'] = $this->user_model->users();
$data['page_title'] = "User Accounts";
$data['page_title'] = $this->lang->line('admin_user_accounts');
$this->load->view('interface_assets/header', $data);
$this->load->view('user/main');
@ -32,6 +33,7 @@ class User extends CI_Controller {
$this->load->model('user_model');
if(!$this->user_model->authorize(99)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
$this->load->model('bands');
$this->load->library('form_validation');
$this->form_validation->set_rules('user_name', 'Username', 'required');
@ -45,6 +47,8 @@ class User extends CI_Controller {
$this->form_validation->set_rules('user_locator', 'Locator', 'callback_check_locator');
$this->form_validation->set_rules('user_timezone', 'Timezone', 'required');
$data['bands'] = $this->bands->get_user_bands();
// Get themes list
$data['themes'] = $this->user_model->getThemes();
@ -68,8 +72,8 @@ class User extends CI_Controller {
$data['user_callsign'] = $this->input->post('user_callsign');
$data['user_locator'] = $this->input->post('user_locator');
$data['user_timezone'] = $this->input->post('user_timezone');
$data['user_measurement_base'] = $this->input->post('user_measurement_base');
$data['user_stylesheet'] = $this->input->post('user_stylesheet');
$data['user_measurement_base'] = $this->input->post('user_measurement_base');
$data['user_stylesheet'] = $this->input->post('user_stylesheet');
$data['user_qth_lookup'] = $this->input->post('user_qth_lookup');
$data['user_sota_lookup'] = $this->input->post('user_sota_lookup');
$data['user_wwff_lookup'] = $this->input->post('user_wwff_lookup');
@ -83,6 +87,9 @@ class User extends CI_Controller {
$data['user_show_profile_image'] = $this->input->post('user_show_profile_image');
$data['user_previous_qsl_type'] = $this->input->post('user_previous_qsl_type');
$data['user_amsat_status_upload'] = $this->input->post('user_amsat_status_upload');
$data['user_mastodon_url'] = $this->input->post('user_mastodon_url');
$data['user_gridmap_default_band'] = $this->input->post('user_gridmap_default_band');
$data['user_gridmap_confirmation'] = ($this->input->post('user_gridmap_confirmation_qsl') !== null ? 'Q' : '').($this->input->post('user_gridmap_confirmation_lotw') !== null ? 'L' : '').($this->input->post('user_gridmap_confirmation_eqsl') !== null ? 'E' : '');
$this->load->view('user/add', $data);
} else {
$this->load->view('user/add', $data);
@ -115,7 +122,10 @@ class User extends CI_Controller {
$this->input->post('user_column5'),
$this->input->post('user_show_profile_image'),
$this->input->post('user_previous_qsl_type'),
$this->input->post('user_amsat_status_upload'))) {
$this->input->post('user_amsat_status_upload'),
$this->input->post('user_mastodon_url'),
$this->input->post('user_gridmap_default_band'),
($this->input->post('user_gridmap_confirmation_qsl') !== null ? 'Q' : '').($this->input->post('user_gridmap_confirmation_lotw') !== null ? 'L' : '').($this->input->post('user_gridmap_confirmation_eqsl') !== null ? 'E' : ''))) {
// Check for errors
case EUSERNAMEEXISTS:
$data['username_error'] = 'Username <b>'.$this->input->post('user_name').'</b> already in use!';
@ -143,8 +153,8 @@ class User extends CI_Controller {
$data['user_lastname'] = $this->input->post('user_lastname');
$data['user_callsign'] = $this->input->post('user_callsign');
$data['user_locator'] = $this->input->post('user_locator');
$data['user_measurement_base'] = $this->input->post('user_measurement_base');
$data['user_stylesheet'] = $this->input->post('user_stylesheet');
$data['user_measurement_base'] = $this->input->post('user_measurement_base');
$data['user_stylesheet'] = $this->input->post('user_stylesheet');
$data['user_qth_lookup'] = $this->input->post('user_qth_lookup');
$data['user_sota_lookup'] = $this->input->post('user_sota_lookup');
$data['user_wwff_lookup'] = $this->input->post('user_wwff_lookup');
@ -158,6 +168,9 @@ class User extends CI_Controller {
$data['user_show_profile_image'] = $this->input->post('user_show_profile_image');
$data['user_previous_qsl_type'] = $this->input->post('user_previous_qsl_type');
$data['user_amsat_status_upload'] = $this->input->post('user_amsat_status_upload');
$data['user_mastodon_url'] = $this->input->post('user_mastodon_url');
$data['user_gridmap_default_band'] = $this->input->post('user_gridmap_default_band');
$data['user_gridmap_confirmation'] = ($this->input->post('user_gridmap_confirmation_qsl') !== null ? 'Q' : '').($this->input->post('user_gridmap_confirmation_lotw') !== null ? 'L' : '').($this->input->post('user_gridmap_confirmation_eqsl') !== null ? 'E' : '');
$this->load->view('user/add', $data);
$this->load->view('interface_assets/footer');
}
@ -165,9 +178,10 @@ class User extends CI_Controller {
function edit() {
$this->load->model('user_model');
if((!$this->user_model->authorize(99)) && ($this->session->userdata('user_id') != $this->uri->segment(3))) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
if ( ($this->session->userdata('user_id') == '') || ((!$this->user_model->authorize(99)) && ($this->session->userdata('user_id') != $this->uri->segment(3))) ) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
$query = $this->user_model->get_by_id($this->uri->segment(3));
$this->load->model('bands');
$this->load->library('form_validation');
$this->form_validation->set_rules('user_name', 'Username', 'required|xss_clean');
@ -182,6 +196,8 @@ class User extends CI_Controller {
$this->form_validation->set_rules('user_locator', 'Locator', 'callback_check_locator');
$this->form_validation->set_rules('user_timezone', 'Timezone', 'required');
$data['bands'] = $this->bands->get_user_bands();
// Get themes list
$data['themes'] = $this->user_model->getThemes();
@ -299,23 +315,23 @@ class User extends CI_Controller {
$data['user_eqsl_password'] = $q->user_eqsl_password;
}
if($this->input->post('user_measurement_base')) {
$data['user_measurement_base'] = $this->input->post('user_measurement_base', true);
} else {
$data['user_measurement_base'] = $q->user_measurement_base;
}
if($this->input->post('user_measurement_base')) {
$data['user_measurement_base'] = $this->input->post('user_measurement_base', true);
} else {
$data['user_measurement_base'] = $q->user_measurement_base;
}
if($this->input->post('user_date_format')) {
$data['user_date_format'] = $this->input->post('user_date_format', true);
} else {
$data['user_date_format'] = $q->user_date_format;
}
$data['user_date_format'] = $this->input->post('user_date_format', true);
} else {
$data['user_date_format'] = $q->user_date_format;
}
if($this->input->post('user_stylesheet')) {
$data['user_stylesheet'] = $this->input->post('user_stylesheet', true);
} else {
$data['user_stylesheet'] = $q->user_stylesheet;
}
if($this->input->post('user_stylesheet')) {
$data['user_stylesheet'] = $this->input->post('user_stylesheet', true);
} else {
$data['user_stylesheet'] = $q->user_stylesheet;
}
if($this->input->post('user_qth_lookup')) {
$data['user_qth_lookup'] = $this->input->post('user_qth_lookup', true);
@ -365,6 +381,24 @@ class User extends CI_Controller {
$data['user_amsat_status_upload'] = $q->user_amsat_status_upload;
}
if($this->input->post('user_mastodon_url')) {
$data['user_mastodon_url'] = $this->input->post('user_mastodon_url', false);
} else {
$data['user_mastodon_url'] = $q->user_mastodon_url;
}
if($this->input->post('user_gridmap_default_band')) {
$data['user_gridmap_default_band'] = $this->input->post('user_gridmap_default_band', false);
} else {
$data['user_gridmap_default_band'] = $q->user_gridmap_default_band;
}
if($this->input->post('user_gridmap_confirmation')) {
$data['user_gridmap_confirmation'] = ($this->input->post('user_gridmap_confirmation_qsl') !== null ? 'Q' : '').($this->input->post('user_gridmap_confirmation_lotw') !== null ? 'L' : '').($this->input->post('user_gridmap_confirmation_eqsl') !== null ? 'E' : '');
} else {
$data['user_gridmap_confirmation'] = $q->user_gridmap_confirmation;
}
if($this->input->post('user_column1')) {
$data['user_column1'] = $this->input->post('user_column1', true);
} else {
@ -435,7 +469,7 @@ class User extends CI_Controller {
$data['user_callsign'] = $this->input->post('user_callsign', true);
$data['user_locator'] = $this->input->post('user_locator', true);
$data['user_timezone'] = $this->input->post('user_timezone', true);
$data['user_stylesheet'] = $this->input->post('user_stylesheet');
$data['user_stylesheet'] = $this->input->post('user_stylesheet');
$data['user_qth_lookup'] = $this->input->post('user_qth_lookup');
$data['user_sota_lookup'] = $this->input->post('user_sota_lookup');
$data['user_wwff_lookup'] = $this->input->post('user_wwff_lookup');
@ -450,6 +484,9 @@ class User extends CI_Controller {
$data['user_show_profile_image'] = $this->input->post('user_show_profile_image');
$data['user_previous_qsl_type'] = $this->input->post('user_previous_qsl_type');
$data['user_amsat_status_upload'] = $this->input->post('user_amsat_status_upload');
$data['user_mastodon_url'] = $this->input->post('user_mastodon_url');
$data['user_gridmap_default_band'] = $this->input->post('user_gridmap_default_band');
$data['user_gridmap_confirmation'] = ($this->input->post('user_gridmap_confirmation_qsl') !== null ? 'Q' : '').($this->input->post('user_gridmap_confirmation_lotw') !== null ? 'L' : '').($this->input->post('user_gridmap_confirmation_eqsl') !== null ? 'E' : '');
$this->load->view('user/edit');
$this->load->view('interface_assets/footer');
}
@ -457,6 +494,7 @@ class User extends CI_Controller {
function profile() {
$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'); }
$query = $this->user_model->get_by_id($this->session->userdata('user_id'));
$q = $query->row();
$data['page_title'] = "Profile";
@ -607,7 +645,7 @@ class User extends CI_Controller {
$message = $this->load->view('email/forgot_password', $this->data, TRUE);
$this->email->from('noreply@cloudlog.co.uk', 'Cloudlog');
$this->email->from($this->optionslib->get_option('emailAddress'), $this->optionslib->get_option('emailSenderName'));
$this->email->to($this->input->post('email', true));
$this->email->subject('Cloudlog Account Password Reset');

查看文件

@ -1,21 +0,0 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Logbooks extends CI_Controller {
/* Controls ADIF Import/Export Functions */
function __construct()
{
parent::__construct();
$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'); }
}
public function index()
{
echo 'Functions to come';
}
}

查看文件

@ -11,12 +11,18 @@ class Visitor extends CI_Controller {
if($method == "config") {
$this->$method();
}
elseif($method == "map") {
elseif($method == "map") {
$this->map($method);
}
elseif($method == "radio_display_component") {
$this->radio_display_component($method);
}
elseif($method == "satellites") {
$this->satellites($method);
}
elseif($method == "search") {
$this->search($method);
}
else {
$this->index($method);
}
@ -126,6 +132,13 @@ class Visitor extends CI_Controller {
}
}
public function radio_display_component() {
$this->load->model('cat');
$data['radio_status'] = $this->cat->recent_status();
$this->load->view('components/radio_display_table', $data);
}
public function map() {
$this->load->model('logbook_model');
@ -281,7 +294,7 @@ class Visitor extends CI_Controller {
$grid_6char_confirmed = "";
// Get Confirmed LOTW & Paper Squares (non VUCC)
// Get Confirmed LoTW & Paper Squares (non VUCC)
$query = $this->gridsquares_model->get_confirmed_sat_squares($logbooks_locations_array);
@ -442,4 +455,37 @@ class Visitor extends CI_Controller {
return false;
}
}
public function public_search_enabled($slug) {
$this->load->model('Logbooks_model');
$logbook_id = $this->Logbooks_model->public_slug_exists_logbook_id($slug);
if ($this->Logbooks_model->public_search_enabled($logbook_id) == 1) {
return true;
} else {
return false;
}
}
public function search() {
$callsign = trim($this->security->xss_clean($this->input->post('callsign')));
$public_slug = $this->security->xss_clean($this->input->post('public_slug'));
$this->load->model('publicsearch');
$data['page_title'] = "Public Search";
$data['callsign'] = $callsign;
$data['slug'] = $public_slug;
if ($callsign != '') {
$result = $this->publicsearch->search($public_slug, $callsign);
}
if (!empty($result) && $result->num_rows() > 0) {
$data['results'] = $result;
$this->load->view('visitor/layout/header', $data);
$this->load->view('public_search/result.php', $data);
$this->load->view('visitor/layout/footer');
} else {
$this->load->view('visitor/layout/header', $data);
$this->load->view('public_search/empty.php', $data);
$this->load->view('visitor/layout/footer');
}
}
}

查看文件

@ -21,7 +21,7 @@ class Webadif extends CI_Controller {
foreach ($station_ids as $station) {
$webadif_api_key = $station->webadifapikey;
$webadif_api_url = $station->webadifapiurl;
if ($this->mass_upload_qsos($station->station_id, $webadif_api_key, $webadif_api_url)) {
if ($this->mass_upload_qsos($station->station_id, $webadif_api_key, $webadif_api_url, true)) { // When called via cron it is trusted
echo "QSOs have been uploaded to QO-100 Dx Club.";
log_message('info', 'QSOs have been uploaded to QO-100 Dx Club.');
} else {
@ -47,9 +47,9 @@ class Webadif extends CI_Controller {
* Function gets all QSOs from given station_id, that are not previously uploaded to webADIF consumer.
* Adif is build for each qso, and then uploaded, one at a time
*/
function mass_upload_qsos($station_id, $webadif_api_key, $webadif_api_url) {
function mass_upload_qsos($station_id, $webadif_api_key, $webadif_api_url, $trusted = false) {
$i = 0;
$data['qsos'] = $this->logbook_model->get_webadif_qsos($station_id);
$data['qsos'] = $this->logbook_model->get_webadif_qsos($station_id, null, null, $trusted);
$errormessages=array();
$CI =& get_instance();
@ -91,7 +91,7 @@ class Webadif extends CI_Controller {
$data['page_title'] = "QO-100 Dx Club Upload";
$data['station_profiles'] = $this->stations->stations_with_webadif_api_key();
$data['station_profiles'] = $this->stations->stations_with_webadif_api_key();
$data['station_profile'] = $this->stations->stations_with_webadif_api_key();
$this->load->view('interface_assets/header', $data);
@ -103,32 +103,34 @@ class Webadif extends CI_Controller {
* Used for ajax-function when selecting log for upload to webADIF consumer
*/
public function upload_station() {
$this->setOptions();
$this->load->model('stations');
$this->setOptions();
$postData = $this->input->post();
$this->load->model('stations');
if (!$this->stations->check_station_is_accessible($postData['station_id'])) {
return;
}
$postData = $this->input->post();
$this->load->model('logbook_model');
$result = $this->logbook_model->exists_webadif_api_key($postData['station_id']);
$webadif_api_key = $result->webadifapikey;
$webadif_api_url = $result->webadifapiurl;
header('Content-type: application/json');
$result = $this->mass_upload_qsos($postData['station_id'], $webadif_api_key, $webadif_api_url);
if ($result['status'] == 'OK') {
$stationinfo = $this->stations->stations_with_webadif_api_key();
$info = $stationinfo->result();
$this->load->model('logbook_model');
$result = $this->logbook_model->exists_webadif_api_key($postData['station_id']);
$webadif_api_key = $result->webadifapikey;
$webadif_api_url = $result->webadifapiurl;
header('Content-type: application/json');
$result = $this->mass_upload_qsos($postData['station_id'], $webadif_api_key, $webadif_api_url);
if ($result['status'] == 'OK') {
$stationinfo = $this->stations->stations_with_webadif_api_key();
$info = $stationinfo->result();
$data['status'] = 'OK';
$data['info'] = $info;
$data['infomessage'] = $result['count'] . " QSOs are now uploaded to QO-100 Dx Club";
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
} else {
$data['status'] = 'Error';
$data['info'] = 'Error: No QSOs found to upload.';
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
}
$data['status'] = 'OK';
$data['info'] = $info;
$data['infomessage'] = $result['count'] . " QSOs are now uploaded to QO-100 Dx Club";
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
} else {
$data['status'] = 'Error';
$data['info'] = 'Error: No QSOs found to upload.';
$data['errormessages'] = $result['errormessages'];
echo json_encode($data);
}
}
public function mark_webadif() {

查看文件

@ -8,9 +8,14 @@
class Welcome extends CI_Controller {
function __construct() {
parent::__construct();
public function index()
{
$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() {
if($this->optionslib->get_option('version2_trigger') == "false") {
$data['page_title'] = "Welcome to Cloudlog Version 2.0";
@ -96,4 +101,4 @@ class Welcome extends CI_Controller {
echo "Error claiming API Keys during Migration. See Logs for further information";
}
}
}
}

查看文件

@ -27,11 +27,10 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Certificate DXCC entity. Напри
$lang['lotw_input_a_file'] = 'Качете файл';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Upload the Exported ADIF file from LoTW from the <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> Area, to mark QSOs as confirmed on LOTW.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Upload the Exported ADIF file from LoTW from the <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> Area, to mark QSOs as confirmed on LoTW.';
$lang['lotw_upload_type_must_be_adi'] = 'Log files must have the file type .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Pull LoTW data for me';
$lang['lotw_import_missing_qsos_text'] = 'Import missing QSOs into the log. Call and gridsquare will be checked to try to find the correct profile to import the QSO into. If not found, the QSO will be skipped.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog will use the LoTW username and password stored in your user profile to download a report from LoTW for you. The report Cloudlog downloads will have all confirmations since chosen date, or since your last LoTW confirmation (fetched from your log), up until now.';

查看文件

@ -33,7 +33,6 @@ $lang['lotw_upload_exported_adif_file_from_lotw'] = '下载从 LoTW <a href="htt
$lang['lotw_upload_type_must_be_adi'] = '日志文件的类型必须为 .adi';
$lang['lotw_pull_lotw_data_for_me'] = '为我拉取 LoTW 数据';
$lang['lotw_import_missing_qsos_text'] = '从日志中导入缺失的 QSO。为了导入 QSO, 呼号和网格将会被用来查找正确的属性。 如果没有找到,该 QSO 将被跳过。';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog 将会使用储存在你个人用户信息当中的 LoTW 用户名和密码从 LoTW 上为你下载报告。Cloudlog 下载的这份报告将会包括自你所选之日以来的或者你最后的 LoTW 确认信息(目前日志当中)以来的所有确认。';

查看文件

@ -26,11 +26,10 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Certifikát zěmě DXCC. Například
$lang['lotw_input_a_file'] = 'Nahraj soubor';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Nahraj exportovaný soubor z LoTW z <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> Area, to mark QSOs as confirmed on LOTW.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Nahraj exportovaný soubor z LoTW z <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> Area, to mark QSOs as confirmed on LoTW.';
$lang['lotw_upload_type_must_be_adi'] = 'Deník musí být ve formátu .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Stáhni data z LoTW';
$lang['lotw_import_missing_qsos_text'] = 'Importovat chybějící spojení do deníku. Bude zkontrolována značka a lokátor pro nalezní správného profilu pro import. Pokud nebude nalezeno, spojení bude přeskočeno.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog použije uživatelské jméno a heslo LoTW uložené ve vašem uživatelském profilu, aby vám stáhl datz LoTW.Stažen budu data od nastaveného datumu nebo od posledního stažení až do teď.';

查看文件

@ -8,3 +8,90 @@ $lang['account_column2_text'] = 'Choose column 2';
$lang['account_column3_text'] = 'Choose column 3';
$lang['account_column4_text'] = 'Choose column 4';
$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_account_information'] = 'Account Information';
$lang['account_username'] = 'Username';
$lang['account_email_address'] = 'Email Address';
$lang['account_password'] = 'Password';
$lang['account_roles'] = 'Roles';
$lang['account_user_role'] = 'User Role';
$lang['account_theme'] = 'Theme';
$lang['account_stylesheet'] = 'Stylesheet';
$lang['account_personal_information'] = 'Personal Information';
$lang['account_first_name'] = 'First Name';
$lang['account_last_name'] = 'Last Name';
$lang['account_callsign'] = 'Callsign';
$lang['account_gridsquare'] = 'Gridsquare';
$lang['account_cloudlog_preferences'] = 'Cloudlog Preferences';
$lang['account_timezone'] = 'Timezone';
$lang['account_date_format'] = 'Date Format';
$lang['account_measurement_preferences'] = 'Measurement preference';
$lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = 'Select how you would like dates shown when logged into your account.';
$lang['account_choose_which_unit_distances_will_be_shown_in'] = 'Choose which unit distances will be shown in';
$lang['account_main_menu'] = 'Main Menu';
$lang['account_show_notes_in_the_main_menu'] = 'Show notes in the main menu.';
$lang['account_gridsquare_and_location_autocomplete'] = 'Gridsquare and Location Autocomplete';
$lang['account_location_auto_lookup'] = 'Location auto lookup.';
$lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = 'If set, gridsquare is fetched based on location name.';
$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = 'SOTA auto lookup gridsquare and name for summit.';
$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = 'WWFF auto lookup gridsquare and name for reference.';
$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = 'POTA auto lookup gridsquare and name for park.';
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = 'If set, name and gridsquare is fetched from the API and filled in location and locator.';
$lang['account_previous_qsl_type'] = 'Previous QSL Type';
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = 'Select the type of QSL to show in the previous QSOs section.';
$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'] = 'Show profile picture of QSO partner from qrz.com/hamqth.com profile in the log QSO section.';
$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = 'Please set your qrz.com/hamqth.com credentials in the general config file.';
$lang['account_amsat_status_upload'] = 'AMSAT Status Upload';
$lang['account_upload_status_of_sat_qsos_to'] = 'Upload status of SAT QSOs to';
$lang['account_logbook_of_the_world'] = 'Logbook of the World';
$lang['account_logbook_of_the_world_lotw_username'] = 'Logbook of The World (LoTW) Username';
$lang['account_logbook_of_the_world_lotw_password'] = 'Logbook of The World (LoTW) Password';
$lang['account_leave_blank_to_keep_existing_password'] = 'Leave blank to keep existing password';
$lang['account_clublog'] = 'Club Log';
$lang['account_clublog_email_callsign'] = 'Club Log Email/Callsign';
$lang['account_clublog_password'] = 'Club Log Password';
$lang['account_the_email_or_callsign_you_use_to_login_to_club_log'] = 'The Email or Callsign you use to login to Club Log';
$lang['account_eqsl'] = 'eQSL';
$lang['account_eqslcc_username'] = 'eQSL.cc Username';
$lang['account_eqslcc_password'] = 'eQSL.cc Password';
$lang['account_save_account_changes'] = 'Save Account Changes';
$lang['account_create_account'] = 'Create Account';
$lang['account_delete_user_account'] = 'Delete User Account';
$lang['account_are_you_sure_you_want_to_delete_the_user_account'] = 'Are you sure you want to delete the user account';
$lang['account_yes_delete_this_user'] = 'Yes, delete this user';
$lang['account_no_do_not_delete_this_user'] = 'No, do not delete this user';
$lang['account_forgot_password'] = 'Forgot Password?';
$lang['account_you_can_reset_your_password_here'] = 'You can reset your password here.';
$lang['account_reset_password'] = 'Reset Password';
$lang['account_the_email_field_is_required'] = 'The Email field is required';
$lang['account_confirm_password'] = 'Confirm Password';
$lang['account_forgot_your_password'] = 'Forgot your password?';
$lang['account_login_to_cloudlog'] = 'Login to Cloudlog';
$lang['account_login'] = 'Login';
$lang['account_mastodon'] = 'Mastodonserver';
$lang['account_user_mastodon'] = 'URL of Mastodonserver';
$lang['account_gridmap_settings'] = 'Settings for Gridsquare Map';
$lang['account_gridmap_default_band'] = 'Default Band';

查看文件

@ -0,0 +1,18 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['admin_user_line1'] = 'Cloudlog needs at least one user configured in order to operate.';
$lang['admin_user_line2'] = 'Users can be assigned roles which give them different permissions, such as adding QSOs to the logbook and accessing Cloudlog APIs.';
$lang['admin_user_line3'] = 'The currently logged-in user is displayed at the upper-right of each page.';
$lang['admin_user_list'] = 'User List';
$lang['admin_user'] = 'User';
$lang['admin_email'] = 'E-mail';
$lang['admin_type'] = 'Type';
$lang['admin_options'] = 'Options';
$lang['admin_create_user'] = 'Create user';
$lang['admin_delete'] = 'Delete';
$lang['admin_edit'] = 'Edit';

查看文件

@ -3,7 +3,7 @@
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['contesting_page_title'] = 'Contest Logging';
$lang['contesting_button_reset_contest_session'] = 'Reset Contest Session';
$lang['contesting_button_reset_contest_session'] = 'Start new Contest Session';
$lang['contesting_exchange_type'] = 'Exchange Type';
$lang['contesting_exchange_type_serial'] = 'Serial';
@ -15,4 +15,4 @@ $lang['contesting_btn_reset_qso'] = 'Reset QSO';
$lang['contesting_btn_save_qso'] = 'Save QSO';
$lang['contesting_title_callsign_suggestions'] = 'Callsign Suggestions';
$lang['contesting_title_contest_logbook'] = 'Contest Logbook';
$lang['contesting_title_contest_logbook'] = 'Contest Logbook';

查看文件

@ -55,6 +55,7 @@ $lang['general_word_lotw'] = 'Logbook of the World';
$lang['general_edit_qso'] = 'Edit QSO';
$lang['general_mark_qsl_rx_bureau'] = 'Mark QSL Received (Bureau)';
$lang['general_mark_qsl_rx_direct'] = 'Mark QSL Received (Direct)';
$lang['general_mark_qsl_rx_electronic'] = 'Mark QSL Received (Electronic)';
$lang['general_mark_qsl_tx_bureau'] = 'Mark QSL Sent (Bureau)';
$lang['general_mark_qsl_tx_direct'] = 'Mark QSL Sent (Direct)';
@ -110,6 +111,7 @@ $lang['gen_hamradio_sota'] = 'SOTA';
$lang['gen_hamradio_wwff'] = 'WWFF';
$lang['gen_hamradio_pota'] = 'POTA';
$lang['gen_hamradio_gridsquare'] = 'Gridsquare';
$lang['gen_hamradio_distance'] = 'Distance';
$lang['gen_hamradio_operator'] = 'Operator';
$lang['gen_hamradio_sig'] = 'Sig';
@ -136,3 +138,5 @@ $lang['europe'] = 'Europe';
$lang['northamerica'] = 'North America';
$lang['oceania'] = 'Oceania';
$lang['southamerica'] = 'South America';
$lang['gen_band_selection'] = 'Band selection';

查看文件

@ -0,0 +1,26 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['gridsquares_gridsquare_map'] = 'Gridsquare map';
$lang['gridsquares_confirmed_is_green'] = 'Confirmed is Green';
$lang['gridsquares_worked_but_not_confirmed_is_red'] = 'Worked but not confirmed is Red';
$lang['gridsquares_activated_but_not_confirmed_is_red'] = 'Activated but not confirmed is Red';
$lang['gridsquares_this_map_does_not_include_satellite_internet_or_repeater_qsos'] = 'This map does not include satellite, internet or repeater QSOs';
$lang['gridsquares_grid_squares'] = 'grid square';
$lang['gridsquares_total_count'] = 'Total count';
$lang['gridsquares_band'] = 'Band';
$lang['gridsquares_mode'] = 'Mode';
$lang['gridsquares_sat'] = 'Satellite';
$lang['gridsquares_confirmation'] = 'Confirmation';
$lang['gridsquares_button_plot'] = 'Plot';
$lang['gridsquares_gridsquares'] = 'Gridsquares';
$lang['gridsquares_gridsquares_confirmed'] = 'Gridsquares confirmed';
$lang['gridsquares_gridsquares_not_confirmed'] = 'Gridsquares not confirmed';
$lang['gridsquares_gridsquares_total_worked'] = 'Total gridsquares worked';

查看文件

@ -30,11 +30,10 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Certificate DXCC entity. For example
$lang['lotw_input_a_file'] = 'Upload a File';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Upload the Exported ADIF file from LoTW from the <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> Area, to mark QSOs as confirmed on LOTW.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Upload the Exported ADIF file from LoTW from the <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> Area, to mark QSOs as confirmed on LoTW.';
$lang['lotw_upload_type_must_be_adi'] = 'Log files must have the file type .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Pull LoTW data for me';
$lang['lotw_import_missing_qsos_text'] = 'Import missing QSOs into the log. Call and gridsquare will be checked to try to find the correct profile to import the QSO into. If not found, the QSO will be skipped.';
$lang['lotw_report_download_overview_helptext'] = 'Cloudlog will use the LoTW username and password stored in your user profile to download a report from LoTW for you. The report Cloudlog downloads will have all confirmations since chosen date, or since your last LoTW confirmation (fetched from your log), up until now.';
@ -57,3 +56,6 @@ $lang['lotw_confirmed'] = 'This QSO is confirmed on LoTW';
// LoTW Expiry
$lang['lotw_cert_expiring'] = 'At least one of your LoTW certificates is about to expire!';
$lang['lotw_cert_expired'] = 'At least one of your LoTW certificates is expired!';
// Lotw User
$lang['lotw_user'] = 'This station uses LoTW. The last upload was';

查看文件

@ -13,12 +13,16 @@ $lang['menu_live_qso'] = 'Live QSO';
$lang['menu_post_qso'] = 'Post QSO';
$lang['menu_live_contest_logging'] = 'Live Contest Logging';
$lang['menu_post_contest_logging'] = 'Post Contest Logging';
$lang['menu_bandmap'] = 'Bandmap';
$lang['menu_view_qsl'] = 'View QSL';
$lang['menu_view_eqsl'] = 'View eQSL';
$lang['menu_notes'] = 'Notes';
$lang['menu_analytics'] = 'Analytics';
$lang['menu_statistics'] = 'Statistics';
$lang['menu_gridsquares'] = 'Gridsquares';
$lang['menu_gridmap'] = 'Gridsquare Map';
$lang['menu_activated_gridsquares'] = 'Activated Gridsquares';
$lang['menu_gridsquare_activators'] = 'Gridsquare Activators';
$lang['menu_distances_worked'] = 'Distances Worked';
@ -68,12 +72,16 @@ $lang['menu_sota_csv_export'] = 'SOTA CSV Export';
$lang['menu_cabrillo_export'] = 'Cabrillo Export';
$lang['menu_oqrs_requests'] = 'OQRS Requests';
$lang['menu_print_requested_qsls'] = 'Print Requested QSLs';
$lang['menu_labels'] = 'Labels';
$lang['menu_logbook_of_the_world'] = 'Logbook of the World';
$lang['menu_eqsl_import_export'] = 'eQSL Import / Export';
$lang['menu_qrz_logbook'] = 'QRZ Logbook';
$lang['menu_hrd_logbook'] = 'HRDLog Logbook';
$lang['menu_qo_100_dx_club_upload'] = 'QO-100 Dx Club Upload';
$lang['menu_api_keys'] = 'API Keys';
$lang['menu_hardware_interfaces'] = 'Hardware Interfaces';
$lang['menu_help'] = 'Help';
$lang['menu_forum'] = 'Forum';
$lang['menu_logout'] = 'Logout';
$lang['menu_maintenance']='Maintenance';

查看文件

@ -0,0 +1,73 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['options_cloudlog_options'] = 'Cloudlog Options';
$lang['options_message1'] = 'Cloudlog Options are global settings used for all users of the installation, which are overridden if there\'s a setting on a user level.';
$lang['options_appearance'] = 'Appearance';
$lang['options_theme'] = 'Theme';
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Global Theme Choice, this is used when users arent logged in.';
$lang['options_public_search_bar'] = 'Public Search Bar';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'This allows non logged in users to access the search functions.';
$lang['options_dashboard_notification_banner'] = 'Dashboard Notification Banner';
$lang['options_this_allows_to_disable_the_global_notification_banner_on_the_dashboard'] = 'This allows to disable the global notification banner on the dashboard.';
$lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Theme changed to ';
$lang['options_global_search_changed_to'] = 'Global Search changed to ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_radios'] = 'Radios';
$lang['options_radio_settings'] = 'Radio Settings';
$lang['options_radio_timeout_warning'] = 'Radio Timeout Warning';
$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = 'The Radio Timeout Warning is used on the QSO entry panel to alert you to radio interface disconnects.';
$lang['options_this_number_is_in_seconds'] = 'This number is in seconds.';
$lang['options_radio_timeout_warning_changed_to'] = 'Radio Timeout Warning changed to ';
$lang['options_email'] = 'Email';
$lang['options_outgoing_protocol'] = 'Outgoing Protocol';
$lang['options_smtp_encryption'] = 'SMTP Encryption';
$lang['options_email_address'] = 'Email Address';
$lang['options_email_sender_name'] = 'Email Sender Name';
$lang['options_smtp_host'] = 'SMTP Host';
$lang['options_smtp_port'] = 'SMTP Port';
$lang['options_smtp_username'] = 'SMTP Username';
$lang['options_smtp_password'] = 'SMTP Password';
$lang['options_crlf'] = 'CRLF';
$lang['options_newline'] = 'Newline';
$lang['options_outgoing_email_protocol_changed_to'] = 'Outgoing Email Protocol changed to ';
$lang['options_smtp_encryption_changed_to'] = 'SMTP Encryption changed to ';
$lang['options_email_address_changed_to'] = 'Email Address changed to ';
$lang['options_email_sender_name_changed_to'] = 'Email Sender Name changed to ';
$lang['options_smtp_host_changed_to'] = 'SMTP Host changed to ';
$lang['options_smtp_port_changed_to'] = 'SMTP Post changed to ';
$lang['options_smtp_username_changed_to'] = 'SMTP Username changed to ';
$lang['options_smtp_password_changed_to'] = 'SMTP Password changed to ';
$lang['options_email_crlf_changed_to'] = 'Email CRLF changed to ';
$lang['options_email_newline_changed_to'] = 'Email Newline changed to ';
$lang['options_oqrs'] = 'OQRS Options';
$lang['options_global_text'] = 'Global text';
$lang['options_this_text_is_an_optional_text_that_can_be_displayed_on_top_of_the_oqrs_page'] = 'This text is an optional text that can be displayed on top of the OQRS page.';
$lang['options_grouped_search'] = 'Grouped search';
$lang['options_when_this_is_on_all_station_locations_with_oqrs_active_will_be_searched_at_once'] = 'When this is on, all station locations with OQRS active, will be searched at once.';
$lang['options_oqrs_options_have_been_saved'] = 'OQRS options have been saved.';
$lang['options_dxcluster'] = 'DXCluster';
$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 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_save'] = 'Save';

查看文件

@ -0,0 +1,17 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['statistics_statistics'] = 'Statistics';
$lang['statistics_explore_the_logbook'] = 'Explore the logbook.';
$lang['statistics_years'] = 'Years';
$lang['statistics_mode'] = 'Mode';
$lang['statistics_bands'] = 'Bands';
$lang['statistics_qsos'] = 'QSOs';
$lang['statistics_unique_callsigns'] = 'Unique callsigns';
$lang['statistics_total'] = 'Total';
$lang['statistics_year'] = 'Year';

查看文件

@ -8,3 +8,87 @@ $lang['account_column2_text'] = 'Sarake 2';
$lang['account_column3_text'] = 'Sarake 3';
$lang['account_column4_text'] = 'Sarake 4';
$lang['account_column5_text'] = 'Sarake 5 (vain lokikirjassa)';
$lang['account_create_user_account'] = 'Luo käyttäjätili';
$lang['account_edit_account'] = 'Muokkaa käyttäjätiliä';
$lang['account_account_information'] = 'Account Information';
$lang['account_username'] = 'käyttäjänimi';
$lang['account_email_address'] = 'Email';
$lang['account_password'] = 'Salasana';
$lang['account_roles'] = 'Roolit';
$lang['account_user_role'] = 'Käyttäjän rooli';
$lang['account_theme'] = 'Teema';
$lang['account_stylesheet'] = 'Tyylisivu';
$lang['account_personal_information'] = 'Henkilötiedot';
$lang['account_first_name'] = 'Etunimi';
$lang['account_last_name'] = 'Sukunimi';
$lang['account_callsign'] = 'Radioamatöörikutsu';
$lang['account_gridsquare'] = 'Gridsquare';
$lang['account_cloudlog_preferences'] = 'Cloudlog Asetukset';
$lang['account_timezone'] = 'Aikavyöhyke';
$lang['account_date_format'] = 'Päivämäärämuoto';
$lang['account_measurement_preferences'] = 'Mittayksikkömuoto';
$lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = 'Valitse, miten haluat päivämäärät näkyvän, kun olet kirjautunut tilillesi.';
$lang['account_choose_which_unit_distances_will_be_shown_in'] = 'Valitse, mitä mittayksikkömuotoa käytetään';
$lang['account_main_menu'] = 'Main Menu';
$lang['account_show_notes_in_the_main_menu'] = 'Näytä "Muistio" päävalikossa.';
$lang['account_gridsquare_and_location_autocomplete'] = 'Gridsquare and Location Autocomplete';
$lang['account_location_auto_lookup'] = 'Location auto lookup.';
$lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = 'If set, gridsquare is fetched based on location name.';
$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = 'SOTA auto lookup gridsquare and name for summit.';
$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = 'WWFF auto lookup gridsquare and name for reference.';
$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = 'POTA auto lookup gridsquare and name for park.';
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = 'If set, name and gridsquare is fetched from the API and filled in location and locator.';
$lang['account_previous_qsl_type'] = 'Previous QSL Type';
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = 'Select the type of QSL to show in the previous QSOs section.';
$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'] = 'Show profile picture of QSO partner from qrz.com/hamqth.com profile in the log QSO section.';
$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = 'Please set your qrz.com/hamqth.com credentials in the general config file.';
$lang['account_amsat_status_upload'] = 'AMSAT Status Upload';
$lang['account_upload_status_of_sat_qsos_to'] = 'Upload status of SAT QSOs to';
$lang['account_logbook_of_the_world'] = 'Logbook of the World';
$lang['account_logbook_of_the_world_lotw_username'] = 'Logbook of The World (LoTW) Käyttäjänimi';
$lang['account_logbook_of_the_world_lotw_password'] = 'Logbook of The World (LoTW) Salasana';
$lang['account_leave_blank_to_keep_existing_password'] = 'Jätä tyhjäksi säilyttääksesi tietokannan nykyisen salasanan';
$lang['account_clublog'] = 'Club Log';
$lang['account_clublog_email_callsign'] = 'Club Log Sähköposti/Kutsu';
$lang['account_clublog_password'] = 'Club Log Salasana';
$lang['account_the_email_or_callsign_you_use_to_login_to_club_log'] = 'Sähköposti tai kutsu, jota käytät kirjautuessasi Club Log:iin';
$lang['account_eqsl'] = 'eQSL';
$lang['account_eqslcc_username'] = 'eQSL.cc Käyttäjänimi';
$lang['account_eqslcc_password'] = 'eQSL.cc Salasana';
$lang['account_save_account_changes'] = 'Tallenna käyttäjätilin muutokset';
$lang['account_create_account'] = 'Luo käyttäjätili';
$lang['account_delete_user_account'] = 'Poista käyttäjätili';
$lang['account_are_you_sure_you_want_to_delete_the_user_account'] = 'Oletko varma, että haluat poistaa käyttäjätilin';
$lang['account_yes_delete_this_user'] = 'Kyllä, poista tämä käyttäjätili';
$lang['account_no_do_not_delete_this_user'] = 'En, älä poista tätä käyttäjätiliä';
$lang['account_forgot_password'] = 'Salasana unohtunut?';
$lang['account_you_can_reset_your_password_here'] = 'Voit resetoida salasanasi tästä';
$lang['account_reset_password'] = 'Resetoi salasana';
$lang['account_the_email_field_is_required'] = 'Sähköpostikenttä on pakollinen';
$lang['account_confirm_password'] = 'Vahvista salasana';
$lang['account_forgot_your_password'] = 'Salasana unohtunut?';
$lang['account_login_to_cloudlog'] = 'Kirjaudu Cloudlogiin';
$lang['account_login'] = 'Kirjaudu';
$lang['account_mastodon'] = 'Mastodonserver';
$lang['account_user_mastodon'] = 'URL of Mastodonserver';

查看文件

@ -0,0 +1,18 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['admin_user_line1'] = 'Cloudlog tarvitsee toimiakseen vähintään yhden luodun käyttäjän.';
$lang['admin_user_line2'] = 'Käyttäjille voidaan määrittää rooleja, jotka antavat heille erilaisia käyttöoikeuksia, kuten QSO:n lisääminen lokikirjaan ja pääsy Cloudlog-sovellusliittymiin (API).';
$lang['admin_user_line3'] = 'Tällä hetkellä kirjautunut käyttäjä näkyy jokaisen sivun oikeassa yläkulmassa.';
$lang['admin_user_list'] = 'Käyttäjälista';
$lang['admin_user'] = 'Käyttäjä';
$lang['admin_email'] = 'E-mail';
$lang['admin_type'] = 'Rooli';
$lang['admin_options'] = 'Valinnat';
$lang['admin_create_user'] = 'Luo käyttäjä';
$lang['admin_delete'] = 'Poista';
$lang['admin_edit'] = 'Muokkaa';

查看文件

@ -0,0 +1,5 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['eqsl_short'] = 'eQSL';

查看文件

@ -38,16 +38,25 @@ $lang['general_word_method'] = 'Method / tapa';
$lang['general_word_sent'] = 'Lähetetyt';
$lang['general_word_received'] = 'Vastaanotetut';
$lang['general_word_requested'] = 'Pyydetyt';
$lang['general_word_qslcard'] = 'QSL kortti';
$lang['general_word_qslcard_management'] = 'QSL manageri';
$lang['general_word_queued'] = 'Queued';
$lang['general_word_invalid_ignore'] = 'Virheellinen (Ohita)';
$lang['general_word_qslcard'] = 'QSL-kortti';
$lang['general_word_qslcard_management'] = 'QSL-manageri';
$lang['general_word_qslcards'] = 'QSL-kortit';
$lang['general_word_qslcard_direct'] = 'Direct';
$lang['general_word_qslcard_bureau'] = 'Bureau';
$lang['general_word_qslcard_electronic'] = 'Electronic';
$lang['general_word_qslcard_manager'] = 'Manageri';
$lang['general_word_qslcard_via'] = 'Via';
$lang['general_word_eqslcard'] = 'eQSL Card';
$lang['general_word_eqslcards'] = 'eQSL Cards';
$lang['general_word_lotw'] = 'Logbook of the World';
$lang['general_edit_qso'] = 'Muokkaa QSO:a';
$lang['general_mark_qsl_rx_bureau'] = 'Merkitse QSL vastaanotetuksi (Bureau)';
$lang['general_mark_qsl_rx_direct'] = 'Merkitse QSL vastaanotetuksi (Direct)';
$lang['general_mark_qsl_tx_bureau'] = 'Merkitse QSL lähetetyksi (Bureau)';
$lang['general_mark_qsl_tx_direct'] = 'Merkitse QSL lähetetyksi (Direct)';
$lang['general_delete_qso'] = 'Poista QSO';
@ -86,15 +95,22 @@ $lang['gen_hamradio_logbook'] = 'Lokikirja';
$lang['gen_hamradio_cq_zone'] = 'CQ Zone';
$lang['gen_hamradio_dxcc'] = 'DXCC';
$lang['gen_hamradio_deleted_dxcc'] = 'Poistettu DXCC';
$lang['gen_hamradio_continent'] = 'Continent';
$lang['gen_hamradio_usa_state'] = 'USA:n osavaltio';
$lang['gen_hamradio_county_reference'] = 'USA lääni';
$lang['gen_hamradio_iota_reference'] = 'IOTA ref.numero';
$lang['gen_hamradio_sota_reference'] = 'SOTA ref.numero';
$lang['gen_hamradio_iota_reference'] = 'IOTA ref.nro';
$lang['gen_hamradio_sota_reference'] = 'SOTA ref.nro';
$lang['gen_hamradio_wwff_reference'] = 'WWFF ref.nro';
$lang['gen_hamradio_pota_reference'] = 'POTA ref.nro';
$lang['gen_hamradio_dok'] = 'DOK';
$lang['gen_hamradio_state'] = 'osavaltio';
$lang['gen_hamradio_iota'] = 'IOTA';
$lang['gen_hamradio_sota'] = 'SOTA';
$lang['gen_hamradio_wwff'] = 'WWFF';
$lang['gen_hamradio_pota'] = 'POTA';
$lang['gen_hamradio_gridsquare'] = 'Gridsquare';
$lang['gen_hamradio_operator'] = 'Operator';
$lang['gen_hamradio_sig'] = 'Sig';
$lang['gen_hamradio_sig_info'] = 'Sig Info';
@ -108,3 +124,17 @@ $lang['dashboard_countries_breakdown'] = 'Maatilasto';
$lang['gen_from_date'] = 'päivämäärästä';
$lang['gen_this_qso_was_confirmed_on'] = 'Tämä QSO vahvistettiin';
$lang['error_no_logbook_found'] = 'No logbooks were found. You need to define a logbook under Station Logbooks! Do it here:';
$lang['copy_to_clipboard'] = 'Kopioi leikepöydälle';
$lang['africa'] = 'Afrikka';
$lang['antarctica'] = 'Antarktis';
$lang['asia'] = 'Aasia';
$lang['europe'] = 'Eurooppa';
$lang['northamerica'] = 'Pohjois-Amerikka';
$lang['oceania'] = 'Oseania';
$lang['southamerica'] = 'Etelä-Amerikka';
$lang['gen_band_selection'] = 'Bandin valinta';

查看文件

@ -0,0 +1,16 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['gridsquares_gridsquare_map'] = 'Gridsquare-kartta';
$lang['gridsquares_confirmed_is_green'] = 'Vahvistetut ovat vihreitä';
$lang['gridsquares_worked_but_not_confirmed_is_red'] = 'Workitut, mutta ei vahvistetut ovat punaisena';
$lang['gridsquares_activated_but_not_confirmed_is_red'] = 'Aktivoidut, mutta vahvistamatta ovat punaisena.';
$lang['gridsquares_this_map_does_not_include_satellite_internet_or_repeater_qsos'] = 'Tällä kartalla ei näy satelliitti, internet tai ripiitteri QSO:t';
$lang['gridsquares_grid_squares'] = 'grid square';
$lang['gridsquares_total_count'] = 'Total count';

查看文件

@ -16,10 +16,13 @@ $lang['lotw_no_certs_uploaded'] = 'Sinun täytyy ladata ainakin yksi LoTW:n P12
$lang['lotw_date_created'] = 'Päivä jolloin luotu';
$lang['lotw_date_expires'] = 'Päivä joloin vanhenee';
$lang['lotw_status'] = 'Status';
$lang['lotw_qso_start_date'] = 'QSO aloituspäivä';
$lang['lotw_qso_end_date'] = 'QSO lopetuspäivä';
$lang['lotw_status'] = 'Status / Last upload';
$lang['lotw_options'] = 'Lisävaihtoehdot';
$lang['lotw_valid'] = 'Voimassa';
$lang['lotw_expired'] = 'Vanhentunut';
$lang['lotw_expiring'] = 'Vanhenee';
$lang['lotw_not_synced'] = 'Ei synkronoitu';
$lang['lotw_certificate_dxcc'] = 'Kutsumerkin varmenteen DXCC';
@ -31,7 +34,6 @@ $lang['lotw_upload_exported_adif_file_from_lotw'] = 'Lataa ADIF-tiedosto LoTW:n
$lang['lotw_upload_type_must_be_adi'] = 'Lokitiedoston pitää olla ADI-tiedosto --> .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Lataa ja tuo LoTW:n data';
$lang['lotw_import_missing_qsos_text'] = 'Tuo yhteyslokistasi mahdollisesti puuttuvat yhteydet LoTW:n rekisteristä. Kutsu ja lokaattori tarkistetaan, jotta yhteydet sidotaan oikeaan asemaprofiiliin. Jos yhteyttä ei löydy, kusot jätetään tuomatta.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog käyttää profiiliisi tallennettuja LoTW:n käyttäjätietoja lokikoosteen lataamiseen. Lokikooste sisältää tähän päivään asti kaikki kuitatut yhteydet, alkaen valitsemastasi päivästä tai siitä päivästä kun olet viimeksi ne palvelusta ladannut .';
@ -50,3 +52,10 @@ $lang['lotw_p12_export_step_three'] = 'Klikkaa "Tallenna kutsumerkin varmenne /
$lang['lotw_p12_export_step_four'] = 'Lataa ja tuo äsken tallentamasi tiedosto tänne.';
$lang['lotw_confirmed'] = 'Tämä QSO on kuitattu LoTW:ssa';
// LoTW Expiry
$lang['lotw_cert_expiring'] = 'Vähintään yksi LoTW:n kutsumerkin varmenteesi on vanhentumassa!';
$lang['lotw_cert_expired'] = 'Vähintään yksi LoTW:n kutsumerkin varmenteesi on vanhentunut!!';
// Lotw User
$lang['lotw_user'] = 'Tämä asmea käyttää LoTW-palvelua. Viimeinen yhteyksien lähetys oli';

查看文件

@ -0,0 +1,82 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['menu_badge_developer_mode'] = 'Kehittäjätila';
$lang['menu_logbook'] = 'Logbook';
$lang['menu_overview'] = 'Yleiskatsaus';
$lang['menu_advanced'] = 'Advanced';
$lang['menu_qso'] = 'QSO';
$lang['menu_live_qso'] = 'Live QSO';
$lang['menu_post_qso'] = 'Post QSO';
$lang['menu_live_contest_logging'] = 'Live Contest Logging';
$lang['menu_post_contest_logging'] = 'Post Contest Logging';
$lang['menu_view_qsl'] = 'Näytä QSL';
$lang['menu_view_eqsl'] = 'Näytä eQSL';
$lang['menu_notes'] = 'Muistio';
$lang['menu_analytics'] = 'Analyysit';
$lang['menu_statistics'] = 'Statistiikkaa';
$lang['menu_gridsquares'] = 'Ruudut/Gridsquares';
$lang['menu_activated_gridsquares'] = 'Aktivoidut ruudut';
$lang['menu_gridsquare_activators'] = 'Ruutuja aktivoineet kutsut';
$lang['menu_distances_worked'] = 'Workitut etäisyydet';
$lang['menu_days_with_qsos'] = 'QSO:llsia päiviä';
$lang['menu_timeline'] = 'Aikajana';
$lang['menu_accumulated_statistics'] = 'Kertyneet tilastot';
$lang['menu_timeplotter'] = 'Aikajana';
$lang['menu_custom_maps'] = 'Custom Maps';
$lang['menu_continents'] = 'Mantereet';
$lang['menu_awards'] = 'Awardit';
$lang['menu_cq'] = 'CQ';
$lang['menu_dok'] = 'DOK';
$lang['menu_dxcc'] = 'DXCC';
$lang['menu_iota'] = 'IOTA';
$lang['menu_pota'] = 'POTA';
$lang['menu_sig'] = 'SIG';
$lang['menu_sota'] = 'SOTA';
$lang['menu_us_counties'] = 'USA Osavaltiot';
$lang['menu_vucc'] = 'VUCC';
$lang['menu_was'] = 'WAS';
$lang['menu_wwff'] = 'WWFF';
$lang['menu_admin'] = 'Admin';
$lang['menu_user_account'] = 'Käyttäjätilit';
$lang['menu_global_options'] = 'Yleiset asetukset';
$lang['menu_modes'] = 'Modet';
$lang['menu_contests'] = 'Kontestit';
$lang['menu_themes'] = 'Teemat';
$lang['menu_backup'] = 'Varmuuskopiot';
$lang['menu_update_country_files'] = 'Päivitä Country Files';
$lang['menu_debug_information'] = 'Debug Information';
$lang['menu_search_text'] = 'Etsi kutsulla';
$lang['menu_search_button'] = 'Etsi';
$lang['menu_login_button'] = 'Kirjaudu';
$lang['menu_account'] = 'Käyttäjätili';
$lang['menu_station_logbooks'] = 'Station Logbooks';
$lang['menu_station_locations'] = 'Station Locations';
$lang['menu_bands'] = 'Bandit';
$lang['menu_adif_import_export'] = 'ADIF Tuonti / Vienti';
$lang['menu_kml_export'] = 'KML Vienti';
$lang['menu_dx_atlas_gridsquare_export'] = 'DX Atlas Gridsquare Vienti';
$lang['menu_sota_csv_export'] = 'SOTA CSV Vienti';
$lang['menu_cabrillo_export'] = 'Cabrillo Vienti';
$lang['menu_oqrs_requests'] = 'OQRS Pyynnöt';
$lang['menu_print_requested_qsls'] = 'Tulosta pyydetyt QSL:t';
$lang['menu_logbook_of_the_world'] = 'Logbook of the World';
$lang['menu_eqsl_import_export'] = 'eQSL Tuonti / Vienti';
$lang['menu_qrz_logbook'] = 'QRZ Logi';
$lang['menu_hrd_logbook'] = 'HRDLog Logi';
$lang['menu_qo_100_dx_club_upload'] = 'QO-100 Dx Club Lähetys';
$lang['menu_api_keys'] = 'API Keys';
$lang['menu_hardware_interfaces'] = 'Hardware Interfaces';
$lang['menu_help'] = 'Help';
$lang['menu_forum'] = 'Foorumi';
$lang['menu_logout'] = 'Kirjaudu ulos';

查看文件

@ -6,7 +6,7 @@ $lang['notes_menu_notes'] = 'Muistiinpanot';
$lang['notes_edit_note'] = 'Muokkaa muistiinpanoa';
$lang['notes_your_notes'] = 'Muistiinpanosi';
$lang['notes_welcome'] = "Näyttää siltä, ettei sinulla ole vielä yhtään muistiinpanoa. Nämä Cloudlogin muistiinpanot ovat kätevä tapa tallentaa tärkeitä tietoja, kuten ATU:n asetukset, taajuudet ja mitä tahansa mieleesi tuleekin. Muistiinpanosi säilyvät täällä tallessa, eikä sinun tarvitse etsiä niitä paperipinojesi alta. Näin aika säästyy workkimiseen --... ...-- ";
$lang['notes_welcome'] = "Näyttää siltä, ettei sinulla ole vielä yhtään muistiinpanoa. Tämä Cloudlogin muistio ovat kätevä tapa tallentaa vaikka ATU:n asetukset, taajuudet. Muistiinpanosi säilyvät täällä tallessa, eikä sinun tarvitse etsiä niitä paperipinojesi alta. Näin aika säästyy workkimiseen --... ...-- ";
$lang['notes_create_note'] = 'Luo uusi muistiinpano';

查看文件

@ -0,0 +1,57 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['options_cloudlog_options'] = 'Cloudlog Options';
$lang['options_message1'] = 'Cloudlog Options are global settings used for all users of the installation, which are overridden if there\'s a setting on a user level.';
$lang['options_appearance'] = 'Ulkoasu';
$lang['options_theme'] = 'Teema';
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Yleisen teeman valinta, joka vaikuttaa sivuston vierailijoihin. ';
$lang['options_public_search_bar'] = 'Julkinen hakukenttä';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Tämä mahdollistaa vieraiden suorittaa hakuja kirjautumatta.';
$lang['options_dashboard_notification_banner'] = 'Dashboard Notification Banner';
$lang['options_this_allows_to_disable_the_global_notification_banner_on_the_dashboard'] = 'This allows to disable the global notification banner on the dashboard.';
$lang['options_dashboard_map'] = 'Dashboard Map';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'This allows the map on the dashboard to be disabled or placed on the right.';
$lang['options_logbook_map'] = 'Logbook Map';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'This allows to disable the map in the logbook.';
$lang['options_theme_changed_to'] = 'Vaihdettu teema on ';
$lang['options_global_search_changed_to'] = 'Julkinen haku on vaihdettu: ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard banner changed to ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard map changed to ';
$lang['options_logbook_map_changed_to'] = 'Logbook map changed to ';
$lang['options_radios'] = 'Radiot';
$lang['options_radio_settings'] = 'Radion asetukset';
$lang['options_radio_timeout_warning'] = 'Radio Timeout Warning';
$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = 'The Radio Timeout Warning is used on the QSO entry panel to alert you to radio interface disconnects.';
$lang['options_this_number_is_in_seconds'] = 'This number is in seconds.';
$lang['options_radio_timeout_warning_changed_to'] = 'Radio Timeout Warning changed to ';
$lang['options_email'] = 'Email';
$lang['options_outgoing_protocol'] = 'Outgoing Protocol';
$lang['options_smtp_encryption'] = 'SMTP Encryption';
$lang['options_smtp_host'] = 'SMTP Host';
$lang['options_smtp_port'] = 'SMTP Port';
$lang['options_smtp_username'] = 'SMTP Username';
$lang['options_smtp_password'] = 'SMTP Password';
$lang['options_crlf'] = 'CRLF';
$lang['options_newline'] = 'Newline';
$lang['options_outgoing_email_protocol_changed_to'] = 'Outgoing Email Protocol changed to ';
$lang['options_smtp_encryption_changed_to'] = 'SMTP Encryption changed to ';
$lang['options_smtp_host_changed_to'] = 'SMTP Host changed to ';
$lang['options_smtp_port_changed_to'] = 'SMTP Post changed to ';
$lang['options_smtp_username_changed_to'] = 'SMTP Username changed to ';
$lang['options_smtp_password_changed_to'] = 'SMTP Password changed to ';
$lang['options_email_crlf_changed_to'] = 'Email CRLF changed to ';
$lang['options_email_newline_changed_to'] = 'Email Newline changed to ';
$lang['options_oqrs'] = 'OQRS Options';
$lang['options_global_text'] = 'Global text';
$lang['options_this_text_is_an_optional_text_that_can_be_displayed_on_top_of_the_oqrs_page'] = 'This text is an optional text that can be displayed on top of the OQRS page.';
$lang['options_grouped_search'] = 'Grouped search';
$lang['options_when_this_is_on_all_station_locations_with_oqrs_active_will_be_searched_at_once'] = 'When this is on, all station locations with OQRS active, will be searched at once.';
$lang['options_oqrs_options_have_been_saved'] = 'OQRS options have been saved.';
$lang['options_save'] = 'Save';

查看文件

@ -7,10 +7,16 @@ $lang['qslcard_string_your_are_using'] = 'Käytät';
$lang['qslcard_string_disk_space'] = 'levytilaa QSL-korteille';
$lang['qslcard_info'] = 'QSL Info';
$lang['qslcard_sent_bureau'] = 'QSL kortti on lähetty buron kautta';
$lang['qslcard_sent_direct'] = 'QSL kortti on lähetetty direktinä';
$lang['qslcard_rcvd_bureau'] = 'QSL kortti on vastaanotettu buron kautta';
$lang['qslcard_rcvd_direct'] = 'QSL kortti on vastaanotettu direktinä';
$lang['qslcard_sent'] = 'QSL Card has been sent';
$lang['qslcard_sent_bureau'] = 'QSL-kortti on lähetty buron kautta';
$lang['qslcard_sent_direct'] = 'QSL-kortti on lähetetty direktinä';
$lang['qslcard_sent_electronic'] = 'QSL-kortti on lähetetty sähköisesti';
$lang['qslcard_sent_manager'] = 'QSL-kortti on lähetetty managerin kautta';
$lang['qslcard_rcvd'] = 'QSL-kortti on vastaanotettu';
$lang['qslcard_rcvd_bureau'] = 'QSL-kortti on vastaanotettu buron kautta';
$lang['qslcard_rcvd_direct'] = 'QSL-kortti on vastaanotettu direktinä';
$lang['qslcard_rcvd_electronic'] = 'QSL-kortti on vastaanotettu sähköisesti';
$lang['qslcard_rcvd_manager'] = 'QSL-kortti on vastaanotettu managerin kautta';
$lang['qslcard_upload_front'] = 'QSL-kortin ladattu etukuva';
$lang['qslcard_upload_back'] = 'QSL-kortin ladattu takakuva';

查看文件

@ -6,18 +6,22 @@ defined('BASEPATH') OR exit('No direct script access allowed');
$lang['qso_title_qso_map'] = 'Vasta-aseman sijainti kartalla';
$lang['qso_title_suggestions'] = 'Kutsumerkkiehdotukset';
$lang['qso_title_previous_contacts'] = 'Edelliset yhteydet';
$lang['qso_title_image'] = 'Profiilikuva';
// Input Help Text on the /QSO Display
$lang['qso_transmit_power_helptext'] = 'Anna teholukema Watteina käyttäen vain numeroita.';
$lang['qso_sota_ref_helptext'] = 'Esimerkiksi: OH/JS-004.';
$lang['qso_wwff_ref_helptext'] = 'Esimerkiksi: OHFF-1234.';
$lang['qso_pota_ref_helptext'] = 'Esimerkiksi: PA-0150.';
$lang['qso_sig_helptext'] = 'Esimerkiksi: GMA';
$lang['qso_sig_info_helptext'] = 'Esimerkiksi: DA/NW-357';
$lang['qso_dok_helptext'] = 'Esimerkiksi: Q03';
$lang['qso_notes_helptext'] = 'Muistion sisältö tallentuu vain Cloudlogiin, tämän kuson yhteyteen, eikä siirry eteenpäin muihin palveluihin.';
$lang['qso_notes_helptext'] = 'Muistio tallentuu vain logiin, tähän yhteydeen, eikä siirry eteenpäin muihin palveluihin.';
$lang['qsl_notes_helptext'] = 'Tämä viestisi siirtyy myös QSL-palveluihin, kuten eqsl.cc.';
// Button Text on /qso Display

查看文件

@ -0,0 +1,17 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['statistics_statistics'] = 'Tilastot';
$lang['statistics_explore_the_logbook'] = 'Uppoudu lokiisi tarkemmin';
$lang['statistics_years'] = 'Vuodet';
$lang['statistics_mode'] = 'Modet';
$lang['statistics_bands'] = 'Bandit';
$lang['statistics_qsos'] = 'QSO:t';
$lang['statistics_unique_callsigns'] = 'Erillisiä kutsuja';
$lang['statistics_total'] = 'Yhteensä';
$lang['statistics_year'] = 'Vuosi';

查看文件

@ -10,7 +10,7 @@ $lang['lotw_title_export_p12_file_instruction'] = 'Instruction pour l\'export de
$lang['lotw_title_adif_import'] = 'Import ADIF';
$lang['lotw_title_adif_import_options'] = 'Options d\'import';
$lang['lotw_beta_warning'] = 'Attention la synchro LOTW est au stage BETA, voir le wiki pour l\'aide.';
$lang['lotw_beta_warning'] = 'Attention la synchro LoTW est au stage BETA, voir le wiki pour l\'aide.';
$lang['lotw_no_certs_uploaded'] = 'Vous devez envoyer des certificats p1 pour utiliser cette zone.';
$lang['lotw_date_created'] = 'Date Création';
@ -26,11 +26,10 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Entité Certificat DXCC. Par example
$lang['lotw_input_a_file'] = 'Envoyer un fichier';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Envoyer le fichier ADIF exporté depuis la zone LoTW à l\'adresse <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a>, pour marquer les QSO comme "confirmés" sur LOTW.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Envoyer le fichier ADIF exporté depuis la zone LoTW à l\'adresse <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a>, pour marquer les QSO comme "confirmés" sur LoTW.';
$lang['lotw_upload_type_must_be_adi'] = 'Les fichiers de log doivent être au format .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Récuperer mes données LoTW';
$lang['lotw_import_missing_qsos_text'] = 'Importer les QSO manquants dans le log. Les indicatifs et gridsquare seront testés pour essayer de trouver le profil d\'importation correct. Les QSO seront ignorés si non trouvé.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog utilise le nom d\'utilisateur et mot de passe enregistré dans votre profil utilisateur pour télécharger les rapport depuis LoTw. Les rapports téléchargés seront confirmés depuis la date de votre dernière confirmation (extraite de vos log) jusqu\'à aujourd\'hui';

查看文件

@ -8,3 +8,90 @@ $lang['account_column2_text'] = 'Wähle Spalte 2';
$lang['account_column3_text'] = 'Wähle Spalte 3';
$lang['account_column4_text'] = 'Wähle Spalte 4';
$lang['account_column5_text'] = 'Wähle Spalte 5 (nur für Logbuch)';
$lang['account_create_user_account'] = 'Benutzerkonto anlegen';
$lang['account_edit_account'] = 'Benutzerkonto editieren';
$lang['account_account_information'] = 'Bnutzerkonto Informationen';
$lang['account_username'] = 'Benutzername';
$lang['account_email_address'] = 'Emailadresse';
$lang['account_password'] = 'Passwort';
$lang['account_roles'] = 'Rollen';
$lang['account_user_role'] = 'Benutzerrolle';
$lang['account_theme'] = 'Thema';
$lang['account_stylesheet'] = 'Stylesheet';
$lang['account_personal_information'] = 'Informationen';
$lang['account_first_name'] = 'Vorname';
$lang['account_last_name'] = 'Nachname';
$lang['account_callsign'] = 'Rufzeichen';
$lang['account_gridsquare'] = 'Planquadrat';
$lang['account_cloudlog_preferences'] = 'Cloudlog Einstellungen';
$lang['account_timezone'] = 'Zeitzone';
$lang['account_date_format'] = 'Datumsformat';
$lang['account_measurement_preferences'] = 'Entfernungsformat';
$lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = 'Wähle, wie Datumsfelder angezeigt werden sollen, wenn du eingeloggt bist.';
$lang['account_choose_which_unit_distances_will_be_shown_in'] = 'Wähle, in welcher Einheit Entfernungen angezeigt werden sollen.';
$lang['account_main_menu'] = 'Hauptmenü';
$lang['account_show_notes_in_the_main_menu'] = 'Zeige Notizen im Hauptmenü';
$lang['account_gridsquare_and_location_autocomplete'] = 'Vervollständigung von Planquadrat und Lokation';
$lang['account_location_auto_lookup'] = 'Automatische Ermittlung der Lokation.';
$lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = 'Wenn aktiviert, wird das Planquadrat basierend auf der Lokation ermittelt.';
$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = 'Automatische Ermittlung von Planquadrat und Lokation anhand des SOTA Gipfels.';
$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = 'Automatische Ermittlung von Planquadrat und Lokation andhand der WWFF Referenz.';
$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = 'Automatische Ermittlung des Parknamens anhand der POTA Referenz.';
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = 'Wenn aktiviert, werden Name und Planquadrat über die API ermittelt und gesetzt.';
$lang['account_previous_qsl_type'] = 'QSL Typ der vorherigen QSOs';
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = 'Wähle den QSL-Typ für die Anzeige der bereits getätigten QSOs.';
$lang['account_qrzcom_hamqthcom_images'] = 'qrz.com/hamqth.com Bilder';
$lang['account_show_profile_picture_of_qso_partner_from_qrzcom_hamqthcom_profile_in_the_log_qso_section'] = 'Zeige das Profilbild des QSO-Partners aus seinem qrz.com/hamqth.com Profil in der QSO Loggen Sektion.';
$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = 'Bitte qrz.com/hamqth.com Zugangsdaten in der Basiskonfigurationsdatei ablegen.';
$lang['account_amsat_status_upload'] = 'AMSAT Status Upload';
$lang['account_upload_status_of_sat_qsos_to'] = 'Status von SAT QSOs hochladen auf';
$lang['account_logbook_of_the_world'] = 'Logbook of the World';
$lang['account_logbook_of_the_world_lotw_username'] = 'Logbook of The World (LoTW) Benutzername';
$lang['account_logbook_of_the_world_lotw_password'] = 'Logbook of The World (LoTW) Passwort';
$lang['account_leave_blank_to_keep_existing_password'] = 'Leer lassen um das existierende Passwort zu übernehmen';
$lang['account_clublog'] = 'Club Log';
$lang['account_clublog_email_callsign'] = 'Club Log Email/Rufzeichen';
$lang['account_clublog_password'] = 'Club Log Passwort';
$lang['account_the_email_or_callsign_you_use_to_login_to_club_log'] = 'Die Emailadresse oder Rufzeichen, das für den Club Log Login verwendet wird';
$lang['account_eqsl'] = 'eQSL';
$lang['account_eqslcc_username'] = 'eQSL.cc Benutzername';
$lang['account_eqslcc_password'] = 'eQSL.cc Passwort';
$lang['account_save_account_changes'] = 'Speichere Kontoänderungen';
$lang['account_create_account'] = 'Konto anlegen';
$lang['account_delete_user_account'] = 'Benutzerkonto löschen';
$lang['account_are_you_sure_you_want_to_delete_the_user_account'] = 'Bist du sicher, dass du das Benutzerkonto löschen willst';
$lang['account_yes_delete_this_user'] = 'Ja, Benutzerkonto löschen';
$lang['account_no_do_not_delete_this_user'] = 'Nein, Benutzerkonto nicht löschen';
$lang['account_forgot_password'] = 'Passwort vergessen?';
$lang['account_you_can_reset_your_password_here'] = 'Du kannst dein Passwort hier zurücksetzen.';
$lang['account_reset_password'] = 'Passwort zurücksetzen';
$lang['account_the_email_field_is_required'] = 'Die Emailadresse ist erforderlich';
$lang['account_confirm_password'] = 'Bestätige Passwort';
$lang['account_forgot_your_password'] = 'Passwort vergessen?';
$lang['account_login_to_cloudlog'] = 'Anmeldung bei Cloudlog';
$lang['account_login'] = 'Anmeldung';
$lang['account_mastodon'] = 'Mastodonserver';
$lang['account_user_mastodon'] = 'URL des Mastodonservers';
$lang['account_gridmap_settings'] = 'Einstellung der Planquadratkarte';
$lang['account_gridmap_default_band'] = 'Standardband';

查看文件

@ -0,0 +1,18 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['admin_user_line1'] = 'Es muss mindestens ein Benutzer konfiguriert sein, damit Cloudlog funktioniert.';
$lang['admin_user_line2'] = 'Benutzer können verschiedene Rollen zugewiesen bekommen, die ihnen unterschiedliche Rechte geben wie QSOs zum Logbuch hinzuzufügen und die APIs von Cloudlog zu benutzen';
$lang['admin_user_line3'] = 'Der aktuell angemeldete Benutzer wird oben rechts auf jeder Seite angezeigt.';
$lang['admin_user_list'] = 'User List';
$lang['admin_user'] = 'Benutzer';
$lang['admin_email'] = 'Email';
$lang['admin_type'] = 'Typ';
$lang['admin_options'] = 'Optionen';
$lang['admin_create_user'] = 'Benutzer anlegen';
$lang['admin_delete'] = 'Löschen';
$lang['admin_edit'] = 'Editieren';

查看文件

@ -3,7 +3,7 @@
defined('BASEPATH') OR exit('Direkter Zugriff auf Skripte ist nicht erlaubt');
$lang['contesting_page_title'] = 'Contest-Logging';
$lang['contesting_button_reset_contest_session'] = 'Setze Contest-Sitzung zurück';
$lang['contesting_button_reset_contest_session'] = 'Beginne neue Contest-Sitzung';
$lang['contesting_exchange_type'] = 'Austauschtyp';
$lang['contesting_exchange_type_serial'] = 'Laufende Nummer';

查看文件

@ -46,6 +46,7 @@ $lang['general_word_qslcards'] = 'QSL Karten';
$lang['general_word_qslcard_direct'] = 'Direkt';
$lang['general_word_qslcard_bureau'] = 'Büro';
$lang['general_word_qslcard_electronic'] = 'Elektronisch';
$lang['general_word_qslcard_manager'] = 'Manager';
$lang['general_word_qslcard_via'] = 'Via';
$lang['general_word_eqslcard'] = 'eQSL Karte';
$lang['general_word_eqslcards'] = 'eQSL Karten';
@ -54,6 +55,7 @@ $lang['general_word_lotw'] = 'Logbook of the World';
$lang['general_edit_qso'] = 'QSO bearbeiten';
$lang['general_mark_qsl_rx_bureau'] = 'Markiere QSL erhalten (Büro)';
$lang['general_mark_qsl_rx_direct'] = 'Markiere QSL erhalten (Direkt)';
$lang['general_mark_qsl_rx_electronic'] = 'Markiere QSL erhalten (Elektronisch)';
$lang['general_mark_qsl_tx_bureau'] = 'Markiere QSL gesendet (Büro)';
$lang['general_mark_qsl_tx_direct'] = 'Markiere QSL gesendet (Direkt)';
@ -110,6 +112,7 @@ $lang['gen_hamradio_sota'] = 'SOTA';
$lang['gen_hamradio_wwff'] = 'WWFF';
$lang['gen_hamradio_pota'] = 'POTA';
$lang['gen_hamradio_gridsquare'] = 'Planquadrat';
$lang['gen_hamradio_distance'] = 'Entfernung';
$lang['gen_hamradio_operator'] = 'Operator';
$lang['gen_hamradio_sig'] = 'Sig';
@ -126,6 +129,8 @@ $lang['gen_from_date'] = 'Ab Datum';
$lang['gen_this_qso_was_confirmed_on'] = 'Dieses QSO wurde bestätigt am';
$lang['error_no_logbook_found'] = 'Keine Logbücher gefunden. Du muss ein Stationslogbuch anlegen! Mach es hier:';
$lang['copy_to_clipboard'] = 'In die Zwischenablage kopieren';
$lang['africa'] = 'Afrika';
@ -135,3 +140,5 @@ $lang['europe'] = 'Europa';
$lang['northamerica'] = 'Nord-Amerika';
$lang['oceania'] = 'Ozeanien';
$lang['southamerica'] = 'Süd-Amerika';
$lang['gen_band_selection'] = 'Bandauswahl';

查看文件

@ -0,0 +1,26 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['gridsquares_gridsquare_map'] = 'Planquadratkarte';
$lang['gridsquares_confirmed_is_green'] = 'Bestätigt ist grün';
$lang['gridsquares_worked_but_not_confirmed_is_red'] = 'Gearbeitet aber nicht bestätigt ist rot';
$lang['gridsquares_activated_but_not_confirmed_is_red'] = 'Aktiviert aber nicht bestätigt ist rot';
$lang['gridsquares_this_map_does_not_include_satellite_internet_or_repeater_qsos'] = 'Diese Karte beinhaltet keine Satelliten-, Internet- oder Relais-QSOs';
$lang['gridsquares_grid_squares'] = 'Planquadrate';
$lang['gridsquares_total_count'] = 'Summe';
$lang['gridsquares_band'] = 'Band';
$lang['gridsquares_mode'] = 'Mode';
$lang['gridsquares_sat'] = 'Satellit';
$lang['gridsquares_confirmation'] = 'Bestätigung';
$lang['gridsquares_button_plot'] = 'Kartieren';
$lang['gridsquares_gridsquares'] = 'Planquadrate';
$lang['gridsquares_gridsquares_confirmed'] = 'Planquadrate bestätigt';
$lang['gridsquares_gridsquares_not_confirmed'] = 'Planquadrate nicht bestätigt';
$lang['gridsquares_gridsquares_total_worked'] = 'Summe gearbeiteter Planquadrate';

查看文件

@ -34,7 +34,6 @@ $lang['lotw_upload_exported_adif_file_from_lotw'] = 'Lade die exportierte ADIF-D
$lang['lotw_upload_type_must_be_adi'] = 'Logdateien müssen den Dateityp .adi haben';
$lang['lotw_pull_lotw_data_for_me'] = 'Lade LoTW-Daten für mich';
$lang['lotw_import_missing_qsos_text'] = 'Importiere fehlende QSOs in das Log. Rufzeichzeichen und Locator werden geprüft, um das passende Profil zu erkennen, in das importiert werden soll. Kann das nicht gefunden werden, wird das QSO übersprungen.';
$lang['lotw_report_download_overview_helptext'] = 'Cloudlog nutzt Benutzername und Passwort, welche in Deinem Benutzerprofil gespeichert sind, um einen Report vom LoTW zu laden. Der Report, den Cloudlog lädt, enthält alle Bestätigungen seit dem gewählten Datum oder seit der letzen LoTW-Bestätigung (wird aus Deinem Log extrahiert) bis jetzt.';
@ -57,3 +56,6 @@ $lang['lotw_confirmed'] = 'Dieses QSO wurde via LoTW bestätigt am';
// LoTW Expiry
$lang['lotw_cert_expiring'] = 'Mindestens eines deiner LoTW Zertifikate läuft bald ab!';
$lang['lotw_cert_expired'] = 'Mindestens eines deiner LoTW Zertifikate ist abgelaufen!';
// Lotw User
$lang['lotw_user'] = 'Diese Station nutzt LoTW. Der letzte Upload war am';

查看文件

@ -13,12 +13,16 @@ $lang['menu_live_qso'] = 'Live QSO';
$lang['menu_post_qso'] = 'Zeitversetztes QSO';
$lang['menu_live_contest_logging'] = 'Live Contest Logging';
$lang['menu_post_contest_logging'] = 'Zeitversetztes Contest Logging';
$lang['menu_bandmap'] = 'Bandmap';
$lang['menu_view_qsl'] = 'QSL Ansicht';
$lang['menu_view_eqsl'] = 'eQSL Ansicht';
$lang['menu_notes'] = 'Notizen';
$lang['menu_analytics'] = 'Analysen';
$lang['menu_statistics'] = 'Statistik';
$lang['menu_gridsquares'] = 'Planquadrate';
$lang['menu_gridmap'] = 'Planquadratkarte';
$lang['menu_activated_gridsquares'] = 'Aktivierte Planquadrate';
$lang['menu_gridsquare_activators'] = 'Planquadrat-Aktivierer';
$lang['menu_distances_worked'] = 'Gearbeitete Entfernungen';
@ -68,12 +72,16 @@ $lang['menu_sota_csv_export'] = 'SOTA CSV Export';
$lang['menu_cabrillo_export'] = 'Cabrillo Export';
$lang['menu_oqrs_requests'] = 'OQRS Anforderungen';
$lang['menu_print_requested_qsls'] = 'Druck angeforderter QSLs';
$lang['menu_labels'] = 'Etiketten';
$lang['menu_logbook_of_the_world'] = 'Logbook of the World';
$lang['menu_eqsl_import_export'] = 'eQSL Import / Export';
$lang['menu_qrz_logbook'] = 'QRZ Logbuch';
$lang['menu_hrd_logbook'] = 'HRDLog Logbuch';
$lang['menu_qo_100_dx_club_upload'] = 'QO-100 Dx Club Upload';
$lang['menu_api_keys'] = 'API-Schlüssel';
$lang['menu_hardware_interfaces'] = 'Hardware-Schnittstellen';
$lang['menu_help'] = 'Hilfe';
$lang['menu_forum'] = 'Forum';
$lang['menu_logout'] = 'Logout';
$lang['menu_maintenance'] = 'Wartung';

查看文件

@ -0,0 +1,72 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['options_cloudlog_options'] = 'Cloudlog Optionen';
$lang['options_message1'] = 'Cloudlog Optionen sind globe Einstellungen, die für alle Benutzer der Installation genutzt werden. Sie können auf Benutzerebene überschrieben werden, wenn eine entsprechende Option auf Benutzerebene vorhanden ist.';
$lang['options_appearance'] = 'Erscheinungsbild';
$lang['options_theme'] = 'Thema';
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Globales Thema. Dies wird verwendet, wenn keine Benutzer angemeldet sind.';
$lang['options_public_search_bar'] = 'Öffentliches Suchfeld';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Dies erlaubt nicht angemeldeten Benutzern, die Suchfunktion zu nutzen.';
$lang['options_dashboard_notification_banner'] = 'Dashboard Benachrichtigungsbanner';
$lang['options_this_allows_to_disable_the_global_notification_banner_on_the_dashboard'] = 'Dies ermöglicht es, die globalen Benachrichtigungsbanner auf dem Dashboard zu deaktivieren.';
$lang['options_dashboard_map'] = 'Dashboard Karte';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'Dies erlaubt es, die Karte auf dem Dashboard rechts anzuzeigen oder zu deaktivieren.';
$lang['options_logbook_map'] = 'Logbook Karte';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'Dies erlaubt, die Karte im Logbuch zu deaktivieren.';
$lang['options_theme_changed_to'] = 'Thema geänder zu ';
$lang['options_global_search_changed_to'] = 'Globale Suche geändert zu ';
$lang['options_dashboard_banner_changed_to'] = 'Dashboard Benachrichtigungsbanner geändert zu ';
$lang['options_dashboard_map_changed_to'] = 'Dashboard Karte geändert zu ';
$lang['options_logbook_map_changed_to'] = 'Logbook Karte geändert zu ';
$lang['options_radios'] = 'Funkgeräte';
$lang['options_radio_settings'] = 'Funkgeräteeinstellungen';
$lang['options_radio_timeout_warning'] = 'Funkgeräte Timeout Warnung';
$lang['options_the_radio_timeout_warning_is_used_on_the_qso_entry_panel_to_alert_you_to_radio_interface_disconnects'] = 'Die Funkgeräte Timeout Warnung wird im QSOs Eingabepanel verwendet, um anzuzeigen, wenn die Funkgeräteschnittstelle getrennt wurde.';
$lang['options_this_number_is_in_seconds'] = 'Die Angabe erfolgt in Sekunden.';
$lang['options_radio_timeout_warning_changed_to'] = 'Radio Timeout Warnung geändert zu ';
$lang['options_email'] = 'Email';
$lang['options_outgoing_protocol'] = 'Protokoll für ausgehende Emails';
$lang['options_smtp_encryption'] = 'SMTP Verschlüsselung';
$lang['options_email_address'] = 'Emailaddresse';
$lang['options_email_sender_name'] = 'Email Absendername';
$lang['options_smtp_host'] = 'SMTP Host';
$lang['options_smtp_port'] = 'SMTP Port';
$lang['options_smtp_username'] = 'SMTP Benutzername';
$lang['options_smtp_password'] = 'SMTP Passwort';
$lang['options_crlf'] = 'CRLF';
$lang['options_newline'] = 'Zeilenvorschub';
$lang['options_outgoing_email_protocol_changed_to'] = 'Protokoll für ausgehende Emails geändert zu ';
$lang['options_smtp_encryption_changed_to'] = 'SMTP Verschlüsselung geändert zu ';
$lang['options_email_address_changed_to'] = 'Emailadresse geändert zu ';
$lang['options_email_sender_name_changed_to'] = 'Email Absendername geändert zu ';
$lang['options_smtp_host_changed_to'] = 'SMTP Host geändert zu ';
$lang['options_smtp_port_changed_to'] = 'SMTP Post changed to ';
$lang['options_smtp_username_changed_to'] = 'SMTP Benutzername geändert zu ';
$lang['options_smtp_password_changed_to'] = 'SMTP Passwort geändert zu ';
$lang['options_email_crlf_changed_to'] = 'Email CRLF geändert zu ';
$lang['options_email_newline_changed_to'] = 'Email Zeilenvorschub geändert zu ';
$lang['options_oqrs'] = 'OQRS Optionen';
$lang['options_global_text'] = 'Globaler Text';
$lang['options_this_text_is_an_optional_text_that_can_be_displayed_on_top_of_the_oqrs_page'] = 'Dies ist ein optionaler Text, der auf oben auf der OQRS Seite angezeigt werden kann.';
$lang['options_grouped_search'] = 'Gruppierte Suche';
$lang['options_when_this_is_on_all_station_locations_with_oqrs_active_will_be_searched_at_once'] = 'Wenn aktiviert, werden alle Stationsstandorte auf einmal durchsucht.';
$lang['options_oqrs_options_have_been_saved'] = 'OQRS options have been saved.';
$lang['options_dxcluster'] = 'DXCluster';
$lang['options_dxcluster_provider'] = 'Provider des DXClusterCache';
$lang['options_dxcluster_longtext'] = 'Der Provider des DXCluster-Caches. Du kannst Deinen eigenen Cache mit <a href="https://github.com/int2001/DXClusterAPI">DXClusterAPI</a> aufsetzen, oder einen &ouml;ffentlichen nutzen';
$lang['options_dxcluster_hint'] = 'URL des DXCluster-Caches. z.B. https://dxc.jo30.de/dxcache';
$lang['options_dxcluster_settings'] = 'DXCluster';
$lang['options_dxcache_url_changed_to'] = 'DXCluster Cache URL ge&auml;nder zu ';
$lang['options_dxcluster_maxage'] = 'Maximales Alter bis zu dem Spots ber&uuml;cksichtigt werden';
$lang['options_dxcluster_decont'] = 'Nur Spots ber&uuml;cksichtigen, die in folgendem Kontinent erfasst wurden';
$lang['options_dxcluster_maxage_changed_to']='Maximal Spot-Alter ge&auml;nder auf ';
$lang['options_dxcluster_decont_changed_to']='Spotterkontinent ge&auml;ndert auf ';
$lang['options_save'] = 'Speichern';

查看文件

@ -0,0 +1,17 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['statistics_statistics'] = 'Statistiken';
$lang['statistics_explore_the_logbook'] = 'Logbuch untersuchen.';
$lang['statistics_years'] = 'Jahre';
$lang['statistics_mode'] = 'Modi';
$lang['statistics_bands'] = 'Bänder';
$lang['statistics_qsos'] = 'QSOs';
$lang['statistics_unique_callsigns'] = 'Eindeutige Rufzeichen';
$lang['statistics_total'] = 'Gesamt';
$lang['statistics_year'] = 'Jahr';

查看文件

@ -30,11 +30,10 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Πιστοποιητικό οντό
$lang['lotw_input_a_file'] = 'Ανέβασε ένα αρχείο';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Μεταφορτώστε το εξαγόμενο αρχείο ADIF από το LoTW από την περιοχή <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a>, για να επισημάνετε τα QSO ως επιβεβαιώθηκε στο LOTW.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Μεταφορτώστε το εξαγόμενο αρχείο ADIF από το LoTW από την περιοχή <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a>, για να επισημάνετε τα QSO ως επιβεβαιώθηκε στο LoTW.';
$lang['lotw_upload_type_must_be_adi'] = 'Τα αρχεία καταγραφής πρέπει να έχουν τον τύπο αρχείου .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Τραβήξτε δεδομένα LoTW για μένα';
$lang['lotw_import_missing_qsos_text'] = 'Εισαγάγετε QSO που λείπουν στο αρχείο καταγραφής. Η κλήση και το τετράγωνο πλέγματος θα ελεγχθούν για να βρεθεί το σωστό προφίλ για εισαγωγή του QSO. Εάν δεν βρεθεί, το QSO θα παραλειφθεί.';
$lang['lotw_report_download_overview_helptext'] = 'Το Cloudlog θα χρησιμοποιήσει το όνομα χρήστη και τον κωδικό πρόσβασης LoTW που είναι αποθηκευμένα στο προφίλ χρήστη σας για να πραγματοποιήσει λήψη μιας αναφοράς από το LoTW για εσάς. Οι λήψεις αναφοράς Cloudlog θα έχουν όλες τις επιβεβαιώσεις από την επιλεγμένη ημερομηνία ή από την τελευταία επιβεβαίωση LoTW (που ελήφθη από το αρχείο καταγραφής σας), μέχρι τώρα.';

查看文件

@ -11,7 +11,7 @@ $lang['lotw_title_export_p12_file_instruction'] = 'Esporta Istruzioni File .p12'
$lang['lotw_title_adif_import'] = 'Importa ADIF';
$lang['lotw_title_adif_import_options'] = 'Importa Opzioni';
$lang['lotw_beta_warning'] = 'Attenzione, la Sincronia LOTW è in BETA, guarda la documentazione per un aiuto.';
$lang['lotw_beta_warning'] = 'Attenzione, la Sincronia LoTW è in BETA, guarda la documentazione per un aiuto.';
$lang['lotw_no_certs_uploaded'] = 'Devi caricare dei certificati p12 LoTW per abilitare questa area.';
$lang['lotw_date_created'] = 'Data di Creazione';
@ -29,11 +29,10 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Certificato entità DXCC. Per esempi
$lang['lotw_input_a_file'] = 'Carica un File';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Carica il file ADIF Esportato da LoTW dalla area <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a>, per segnare i QSO come confermati su LOTW.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Carica il file ADIF Esportato da LoTW dalla area <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a>, per segnare i QSO come confermati su LoTW.';
$lang['lotw_upload_type_must_be_adi'] = 'I file di log devono essere di tipo .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Ottieni dati da LoTW per me';
$lang['lotw_import_missing_qsos_text'] = 'Importa i QSO mancanti nel log. Nominativi e quadratone verranno controllati per cercare di trovare il profilo corretto in cui importare il QSO. Se non viene trovato, il QSO verrà saltato.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog userà il nome utente e password LoTW memorizzato nel tuo profilo per scaricare un report da LoTW per te. Il report scaricato da Cloudlog avrà tutte le conferme fino alla data scelta, o fino alla ultima conferma su LoTW (recuperato dal tuo log), fino ad ora.';

查看文件

@ -27,13 +27,12 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Podmiot DXCC dla którego wydany zos
$lang['lotw_input_a_file'] = 'Prześlij plik';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Wyślij pobrany plik ADIF z LoTW z <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Linku</a>, aby oznaczyć łączności jako potwierdzone przez LOTW.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Wyślij pobrany plik ADIF z LoTW z <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Linku</a>, aby oznaczyć łączności jako potwierdzone przez LoTW.';
$lang['lotw_upload_type_must_be_adi'] = 'Pliki logu muszą mieć rozszerzenie .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Pobierz dane z LOTW za mnie';
$lang['lotw_import_missing_qsos_text'] = 'Wyślij brakujące łączności do logu. Znak i lokator będą sprawdzone, aby dopasować odpowiedni profil do wgrania łączności. jeśli nie zostaną znalezione, łączność będzie pominięta.';
$lang['lotw_pull_lotw_data_for_me'] = 'Pobierz dane z LoTW za mnie';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog będzie używał loginu i hasła podanego w profilu, aby pobierać raporty z LOTW.Raport będzie zawierał wszystkie potwierdzenia od wybranej daty, lub ostatniej potwierdzonej łączności z LOTW (wybranej z logiu), do teraz.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog będzie używał loginu i hasła podanego w profilu, aby pobierać raporty z LoTW.Raport będzie zawierał wszystkie potwierdzenia od wybranej daty, lub ostatniej potwierdzonej łączności z LoTW (wybranej z logiu), do teraz.';
// Buttons
$lang['lotw_btn_lotw_import'] = 'LoTW Import';

查看文件

@ -8,3 +8,90 @@ $lang['account_column2_text'] = 'Выберите столбец 2';
$lang['account_column3_text'] = 'Выберите столбец 3';
$lang['account_column4_text'] = 'Выберите столбец 4';
$lang['account_column5_text'] = 'Выберите столбец 5 (только для журнала)';
$lang['account_create_user_account'] = ' Создать аккаунт пользователя';
$lang['account_edit_account'] = 'Редактировать аккаунт';
$lang['account_account_information'] = 'Информация об аккаунте';
$lang['account_username'] = 'Имя пользователя';
$lang['account_email_address'] = 'Адрес электронной почты';
$lang['account_password'] = 'Пароль';
$lang['account_roles'] = 'Роли';
$lang['account_user_role'] = 'Роль пользователя';
$lang['account_theme'] = 'Тема оформления';
$lang['account_stylesheet'] = 'Шаблон';
$lang['account_personal_information'] = 'Персональная информация';
$lang['account_first_name'] = 'Имя';
$lang['account_last_name'] = 'Фамилия';
$lang['account_callsign'] = 'Позывной';
$lang['account_gridsquare'] = 'QTH локатор';
$lang['account_cloudlog_preferences'] = 'Настройки Cloudlog';
$lang['account_timezone'] = 'Часовой пояс';
$lang['account_date_format'] = 'Формат даты';
$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_main_menu'] = 'Главное меню';
$lang['account_show_notes_in_the_main_menu'] = 'Показывать заметки в главном меню.';
$lang['account_gridsquare_and_location_autocomplete'] = 'Автозаполнение QTH локатора и местоположения';
$lang['account_location_auto_lookup'] = 'Автозаполнение по местоположению.';
$lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = 'Если включено, QTH локатор будет определён на основе имени местоположения.';
$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = 'Автозаполнение QTH локатора и названия саммита по SOTA';
$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = 'Автозаполнение QTH локатора и названия референции по WWFF';
$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = 'Автозаполнение QTH локатора и названия парка по POTA';
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = 'Если включено, называние и квадрат запрашиваются по API и заполняются в поля местоположение и QTH локатор.';
$lang['account_previous_qsl_type'] = 'Тип предыдущего QSL';
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = 'Выберите тип QSL для отобрашения в секции предыдущих QSO.';
$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 в разделе QSO журнала.';
$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = 'Пожалуйста, укажите свои учетные данные для qrz.com/hamqth.com в общем файле конфигурации.';
$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';
$lang['account_logbook_of_the_world_lotw_username'] = 'Логин';
$lang['account_logbook_of_the_world_lotw_password'] = 'Пароль';
$lang['account_leave_blank_to_keep_existing_password'] = 'Оставьте пустым для сохранения текущего пароля';
$lang['account_clublog'] = 'Club Log';
$lang['account_clublog_email_callsign'] = 'Емэйл/позывной';
$lang['account_clublog_password'] = 'Пароль';
$lang['account_the_email_or_callsign_you_use_to_login_to_club_log'] = 'Емэйл или позывной, которые вы используете для логина в Club Log';
$lang['account_eqsl'] = 'eQSL';
$lang['account_eqslcc_username'] = 'Логин';
$lang['account_eqslcc_password'] = 'Пароль';
$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_forgot_password'] = 'Забыли пароль?';
$lang['account_you_can_reset_your_password_here'] = 'Вы можете сбросить свой пароль здесь.';
$lang['account_reset_password'] = 'Сбросить пароль';
$lang['account_the_email_field_is_required'] = 'Заполните адрес электронной почты';
$lang['account_confirm_password'] = 'Подтвердить Пароль';
$lang['account_forgot_your_password'] = 'Забыли пароль?';
$lang['account_login_to_cloudlog'] = 'Вход в Cloudlog';
$lang['account_login'] = 'Вход';
$lang['account_mastodon'] = 'Сервер Mastodon';
$lang['account_user_mastodon'] = 'URL профиля пользователя Mastodon';
$lang['account_gridmap_settings'] = 'Настройки для карты квадратов';
$lang['account_gridmap_default_band'] = 'Диапазон по умолчанию';

查看文件

@ -0,0 +1,21 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['admin_user_line1'] = 'Для работы Cloudlog требуется хотя наличие хотя бы одного пользовательского аккаунта.';
$lang['admin_user_line2'] = 'Пользователям могут быть назначены роли, которые предоставляют им различные права, например, добавление QSO в журнал и доступ к API Cloudlog.';
$lang['admin_user_line3'] = 'Текущий вошедший в систему пользователь отображается в правом верхнем углу каждой страницы.';
$lang['admin_user_list'] = 'Список пользователей';
$lang['admin_user'] = 'Пользователь';
$lang['admin_email'] = 'Емэйл';
$lang['admin_type'] = 'Роль';
$lang['admin_options'] = 'Опции';
$lang['admin_create_user'] = 'Создать пользователя';
$lang['admin_delete'] = 'Удалить';
$lang['admin_edit'] = 'Редактировать';
$lang['admin_user_accounts'] = 'Аккаунты пользователей';

查看文件

@ -4,7 +4,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
$lang['error_no_active_station_profile'] = 'Внимание: вам нужно назначить активный профиль месторасположения станции.';
$lang['notice_turn_the_radio_on'] = 'За сегодня ни одного QSO; время вернуться к радио!';
$lang['notice_turn_the_radio_on'] = 'За сегодня ни одного QSO, время вернуться к радио!';
$lang['general_word_important'] = 'Важно';
$lang['general_word_info'] = 'Информация';
@ -48,9 +48,9 @@ $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_eqslcards'] = 'eQSL Cards';
$lang['general_word_lotw'] = 'Logbook of the World';
$lang['general_word_qslcard_via'] = 'через';
$lang['general_word_eqslcards'] = 'eQSL';
$lang['general_word_lotw'] = 'LotW';
@ -59,6 +59,7 @@ $lang['general_mark_qsl_rx_bureau'] = 'Отметить QSL полученной
$lang['general_mark_qsl_rx_direct'] = 'Отметить QSL полученной (напрямую)';
$lang['general_mark_qsl_tx_bureau'] = 'Отметить QSL отправленной (через бюро)';
$lang['general_mark_qsl_tx_direct'] = 'Отметить QSL отправленой (напрямую)';
$lang['general_mark_qsl_rx_electronic'] = 'Отметить QSL полученной (электронно)';
$lang['general_delete_qso'] = 'Удалить QSO';
@ -111,16 +112,17 @@ $lang['gen_hamradio_iota'] = 'IOTA';
$lang['gen_hamradio_sota'] = 'SOTA';
$lang['gen_hamradio_pota'] = 'POTA';
$lang['gen_hamradio_gridsquare'] = 'Квадрат';
$lang['gen_hamradio_distance'] = 'Дистанция';
$lang['gen_hamradio_operator'] = 'Оператор';
$lang['gen_hamradio_sig'] = 'Sig';
$lang['gen_hamradio_sig_info'] = 'Sig Info';
// Dashboard Words
$lang['dashboard_you_have_had'] = 'You have had';
$lang['dashboard_you_have_had'] = '';
$lang['dashboard_qsos_today'] = 'QSOs сегодня!';
$lang['dashboard_qso_breakdown'] = 'QSOs Breakdown';
$lang['dashboard_countries_breakdown'] = 'Countries Breakdown';
$lang['dashboard_qso_breakdown'] = 'Статистика QSO';
$lang['dashboard_countries_breakdown'] = 'Статистика по странам';
$lang['gen_from_date'] = 'Начиная с даты';
@ -137,3 +139,6 @@ $lang['europe'] = 'Европа';
$lang['northamerica'] = 'Северная Америка';
$lang['oceania'] = 'Океания';
$lang['southamerica'] = 'Южная Америка';
$lang['gen_band_selection'] = 'Выбор диапазона';

查看文件

@ -0,0 +1,26 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['gridsquares_gridsquare_map'] = 'Карта квадратов';
$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_grid_squares'] = 'квадрат(/-а/-ов)';
$lang['gridsquares_total_count'] = 'Всего';
$lang['gridsquares_band'] = 'Диапазон';
$lang['gridsquares_mode'] = 'Вид излучения';
$lang['gridsquares_sat'] = 'Спутник';
$lang['gridsquares_confirmation'] = 'Подтверждение';
$lang['gridsquares_button_plot'] = 'Отобразить';
$lang['gridsquares_gridsquares'] = 'Квадраты';
$lang['gridsquares_gridsquares_confirmed'] = 'Подтверждёно квадратов';
$lang['gridsquares_gridsquares_not_confirmed'] = 'Неподтверждёно квадратов';
$lang['gridsquares_gridsquares_total_worked'] = 'Всего сработано квадратов';

查看文件

@ -6,7 +6,7 @@ $lang['lotw_short'] = 'LoTW';
$lang['lotw_title'] = 'Logbook of the World';
$lang['lotw_title_available_cert'] = 'Имеющиеся сертификаты';
$lang['lotw_title_information'] = 'Информация';
$lang['lotw_title_upload_p12_cert'] = 'Загрузка Logbook of the World .p12 сертификата';
$lang['lotw_title_upload_p12_cert'] = 'Загрузка LotW .p12 сертификата';
$lang['lotw_title_export_p12_file_instruction'] = 'Инструкции по экспорту .p12 файла';
$lang['lotw_title_adif_import'] = 'Импорт ADIF';
$lang['lotw_title_adif_import_options'] = 'Опции импорта';
@ -34,7 +34,6 @@ $lang['lotw_upload_exported_adif_file_from_lotw'] = 'Загрузить эксп
$lang['lotw_upload_type_must_be_adi'] = 'Файлы журнала должны быть с расширением .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Подтянуть мои данные из LoTW';
$lang['lotw_import_missing_qsos_text'] = 'Импортировать недостаюющие QSO в журнал. Позывной и QTH-локатор будут проверены с целью определения подходящего профиля для импорта QSO. Если профиль не будет идентифицирован, QSO будет пропущено.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog использует логин и пароль для LoTW, сохранённые в вашем профиле, для того чтобы скачивать ваши журналы с LoTW. Журнал, скачанный в Cloudlog будет содержать все подтверждения, начиная с выбранной даты, или начиная с последнего подтверждения в LoTW (загруженного из вашего журнала), до настоящего момента.';
// Buttons

查看文件

@ -5,20 +5,24 @@ defined('BASEPATH') OR exit('No direct script access allowed');
$lang['menu_badge_developer_mode'] = 'Режим разработчика';
$lang['menu_logbook'] = 'Журнал';
$lang['menu_overview'] = 'Обзор';
$lang['menu_advanced'] = 'Расширенный';
$lang['menu_overview'] = 'Обычный вид';
$lang['menu_advanced'] = 'Расширенный вид';
$lang['menu_qso'] = 'QSO';
$lang['menu_live_qso'] = 'добавить QSO';
$lang['menu_post_qso'] = 'добавить прошедшее QSO';
$lang['menu_live_contest_logging'] = 'Журнал соревнований';
$lang['menu_post_contest_logging'] = 'Журнал прошедших соревнований';
$lang['menu_bandmap'] = 'План диапазонов';
$lang['menu_view_qsl'] = 'Просмотр QSL';
$lang['menu_view_eqsl'] = 'Просмотр eQSL';
$lang['menu_notes'] = 'Заметки';
$lang['menu_analytics'] = 'Аналитика';
$lang['menu_statistics'] = 'Статистика';
$lang['menu_gridsquares'] = 'Квадраты';
$lang['menu_gridmap'] = 'Карта квадратов';
$lang['menu_activated_gridsquares'] = 'Активированные квадраты';
$lang['menu_gridsquare_activators'] = 'Активаторы квадратов';
$lang['menu_distances_worked'] = 'Сработанные дистанции';
@ -68,12 +72,14 @@ $lang['menu_sota_csv_export'] = 'Экспорт SOTA CSV';
$lang['menu_cabrillo_export'] = 'Экспорт Cabrillo';
$lang['menu_oqrs_requests'] = 'Запросы OQRS';
$lang['menu_print_requested_qsls'] = 'Распечатать запрошенные QSL';
$lang['menu_labels'] = 'Наклейки';
$lang['menu_logbook_of_the_world'] = 'Logbook of the World';
$lang['menu_eqsl_import_export'] = 'Импорт / экспорт eQSL';
$lang['menu_qrz_logbook'] = 'QRZ Logbook';
$lang['menu_hrd_logbook'] = 'HRDLog Logbook';
$lang['menu_qo_100_dx_club_upload'] = 'Загрузка в QO-100 Dx Club';
$lang['menu_api_keys'] = 'ключи API';
$lang['menu_hardware_interfaces'] = 'Аппаратные интерфейсы';
$lang['menu_help'] = 'Помощь';
$lang['menu_forum'] = 'Форум';
$lang['menu_logout'] = 'Выход';
$lang['menu_logout'] = 'Выход';

查看文件

@ -0,0 +1,75 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['options_cloudlog_options'] = 'Настройки';
$lang['options_message1'] = 'Это глобальные настройки, используемые для всех пользователей, которые могут быть переопределены, если есть соответствующие настройки на уровне пользователя.';
$lang['options_appearance'] = 'Внешний вид';
$lang['options_theme'] = 'Тема оформления';
$lang['options_global_theme_choice_this_is_used_when_users_arent_logged_in'] = 'Тема оформления по умолчанию, используется, когда пользователи не вошли в систему.';
$lang['options_public_search_bar'] = 'Публично доступный поиск по журналу';
$lang['options_this_allows_non_logged_in_users_to_access_the_search_functions'] = 'Разрешение пользователям, не вошедшим в систему, получить доступ к функциям поиска.';
$lang['options_dashboard_notification_banner'] = 'Баннер на экране сводных данных';
$lang['options_this_allows_to_disable_the_global_notification_banner_on_the_dashboard'] = 'Включение отображения баннера на экране сводных данных';
$lang['options_dashboard_map'] = 'Карта на экране сводных данных';
$lang['options_this_allows_the_map_on_the_dashboard_to_be_disabled_or_placed_on_the_right'] = 'Включение отображения карты на экране сводных данных во всю ширину или справа';
$lang['options_logbook_map'] = 'Карта на экране обычного вида журнала ';
$lang['options_this_allows_to_disable_the_map_in_the_logbook'] = 'Включение отображения карты на экране обычного вида журнала.';
$lang['options_theme_changed_to'] = 'Тема оформления переключена на ';
$lang['options_global_search_changed_to'] = 'Публично доступный поиск переключен в состояние ';
$lang['options_dashboard_banner_changed_to'] = 'Баннер на экране сводных данных переключен в состояние ';
$lang['options_dashboard_map_changed_to'] = 'Карта на экране сводных данных переключена в состояние ';
$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_this_number_is_in_seconds'] = 'Значение в секундах.';
$lang['options_radio_timeout_warning_changed_to'] = 'Значение таймаута радиоинтерфейса изменено на ';
$lang['options_email'] = 'Емэйл';
$lang['options_outgoing_protocol'] = 'Протокол отправки емэйл';
$lang['options_smtp_encryption'] = 'Шифрование SMTP';
$lang['options_email_address'] = 'Адрес электронной почты';
$lang['options_email_sender_name'] = 'Имя отправителя';
$lang['options_smtp_host'] = 'SMTP хост';
$lang['options_smtp_port'] = 'SMTP порт';
$lang['options_smtp_username'] = 'SMTP логин';
$lang['options_smtp_password'] = 'SMTP пароль';
$lang['options_crlf'] = 'CRLF';
$lang['options_newline'] = 'Newline';
$lang['options_outgoing_email_protocol_changed_to'] = 'Протокол отправки емэйл изменён на ';
$lang['options_smtp_encryption_changed_to'] = 'Шифрование SMTP изменено на ';
$lang['options_email_address_changed_to'] = 'Адрес электронной почты изменён на ';
$lang['options_email_sender_name_changed_to'] = 'Имя отправителя изменено на ';
$lang['options_smtp_host_changed_to'] = 'SMTP хост изменён на ';
$lang['options_smtp_port_changed_to'] = 'SMTP порт изменён на ';
$lang['options_smtp_username_changed_to'] = 'SMTP логин изменён на ';
$lang['options_smtp_password_changed_to'] = 'SMTP пароль изменён на ';
$lang['options_email_crlf_changed_to'] = 'Email CRLF changed to ';
$lang['options_email_newline_changed_to'] = 'Email Newline changed to ';
$lang['options_oqrs'] = 'OQRS';
$lang['options_global_text'] = 'Сообщение на странице OQRS';
$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_oqrs_options_have_been_saved'] = 'Настройки OQRS сохранены.';
$lang['options_dxcluster'] = 'DXCluster';
$lang['options_dxcluster_provider'] = 'Провайдер кэша DXCluster';
$lang['options_dxcluster_longtext'] = 'Провайдер кэша DXCluster. Вы можете настроить собственный кэш: <a href="https://github.com/int2001/DXClusterAPI">DXClusterAPI</a> или использовать публичный';
$lang['options_dxcluster_hint'] = 'URL кэша DXCluster-Cache. К примеру, https://dxc.jo30.de/dxcache';
$lang['options_dxcluster_settings'] = 'DXCluster';
$lang['options_dxcache_url_changed_to'] = 'URL кэша DXCluster изменён на ';
$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_save'] = 'Сохранить';

查看文件

@ -10,7 +10,7 @@ $lang['qslcard_info'] = 'QSL';
$lang['qslcard_sent'] = 'QSL карточка была отправлена';
$lang['qslcard_sent_bureau'] = 'QSL карточка была отправлена через бюро';
$lang['qslcard_sent_direct'] = 'QSL карточка была отправлена напрямую';
$lang['qslcard_sent_electronic'] = 'Электроннвя QSL карточка была отправлена';
$lang['qslcard_sent_electronic'] = 'Электронная QSL карточка была отправлена';
$lang['qslcard_sent_manager'] = 'QSL карточка была отправлена через QSL-менеджера';
$lang['qslcard_rcvd'] = 'QSL карточка была получена';
$lang['qslcard_rcvd_bureau'] = 'QSL карточка была получена через бюро';

查看文件

@ -0,0 +1,17 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['statistics_statistics'] = 'Статистика';
$lang['statistics_explore_the_logbook'] = 'Исследуем журнал.';
$lang['statistics_years'] = 'по годам';
$lang['statistics_mode'] = 'по видам модуляции';
$lang['statistics_bands'] = 'по диапазонам';
$lang['statistics_qsos'] = 'по QSO';
$lang['statistics_unique_callsigns'] = 'по уникальным позывным';
$lang['statistics_total'] = 'Всего';
$lang['statistics_year'] = 'Год';

查看文件

@ -31,7 +31,6 @@ $lang['lotw_upload_exported_adif_file_from_lotw'] = 'Suba el archivo ADIF export
$lang['lotw_upload_type_must_be_adi'] = 'Los archivos de registro deben ser del tipo .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Extraer los datos LoTW por mí';
$lang['lotw_import_missing_qsos_text'] = 'Importar los QSOs faltantes en el registro. El indicativo y el <i>gridsquare</i> serán comprobados a fin de encontrar el perfil correcto para importar el QSO. Si no fueran encontrados, el QSO será omitido.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog usará el usuario y contraseña de LoTW guardado en su perfil para descargar un informe de LoTW por usted. El informe contendrá todas las confirmaciones desde la fecha elegida o desde su última confirmación LoTW hasta ahora.';

查看文件

@ -29,11 +29,10 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Certifikat DXCC entity. Som exemple:
$lang['lotw_input_a_file'] = 'Ladda upp en fil';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Ladda upp exporterad ADIF fil från LoTW från <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> area, för att markera QSOs som bekräftade på LOTW.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'Ladda upp exporterad ADIF fil från LoTW från <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Download Report</a> area, för att markera QSOs som bekräftade på LoTW.';
$lang['lotw_upload_type_must_be_adi'] = 'Loggfil måste vara av format .adi';
$lang['lotw_pull_lotw_data_for_me'] = 'Hämta LoTW data';
$lang['lotw_import_missing_qsos_text'] = 'Importera saknade QSOs till loggen. Signal och lokator kommer att kontrolleras för att försöka hitta rätt profil att importera QSOt till. Om inget QSO hittas kommer det att ignoreras.';
$lang['lotw_report_download_overview_helptext'] = 'Cloudlog använder LoTW användarnamn och lösenord som är sparat i din användarprofil för att ladda ner repport från LoTW. Rapporten Cloudlog kommer att ladda ner kommer att ha alla bekräftelser sedan valt datum, eller sedan din senaste LoTW-bekräftelse (hämtad från din logg), fram till nu.';

查看文件

@ -29,11 +29,10 @@ $lang['lotw_certificate_dxcc_help_text'] = 'Sertifika DXCC varlığı. Örneğin
$lang['lotw_input_a_file'] = 'Bir Dosya Yükle';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'LoTW\'den Dışa Aktarılan ADIF dosyasını <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Raporu İndir<\'den yükleyin /a> Alan, QSO\'ları LOTW\'da onaylandı olarak işaretlemek için.';
$lang['lotw_upload_exported_adif_file_from_lotw'] = 'LoTW\'den Dışa Aktarılan ADIF dosyasını <a href="https://p1k.arrl.org/lotwuser/qsos?qsoscmd=adif" target="_blank">Raporu İndir<\'den yükleyin /a> Alan, QSO\'ları LoTW\'da onaylandı olarak işaretlemek için.';
$lang['lotw_upload_type_must_be_adi'] = 'Günlük dosyaları .adi dosya tipine sahip olmalıdır';
$lang['lotw_pull_lotw_data_for_me'] = 'Benim için LoTW verilerini çek';
$lang['lotw_import_missing_qsos_text'] = 'Eksik QSO\'ları günlüğe aktarın. QSO\'nun içe aktarılacağı doğru profili bulmaya çalışmak için çağrı ve gridsquare kontrol edilecektir. Bulunamazsa, QSO atlanacaktır.';
$lang['lotw_report_download_overview_helptext'] ='Cloudlog, sizin için LoTW\'den bir rapor indirmek için kullanıcı profilinizde kayıtlı LoTW kullanıcı adını ve şifreyi kullanacak. Cloudlog indirmeleri raporu, seçilen tarihten itibaren veya son LoTW onayınızdan (günlüğünüzden alınır) bu yana şimdiye kadarki tüm onaylara sahip olacaktır.';

查看文件

@ -42,7 +42,6 @@ class AdifHelper {
'FORCE_INIT',
'GRIDSQUARE',
'HEADING',
'HRDLOG_QSO_UPLOAD_STATUS',
'IOTA',
'ITUZ',
'K_INDEX',
@ -64,6 +63,7 @@ class AdifHelper {
'PRECEDENCE',
'PROP_MODE',
'PUBLIC_KEY',
'HRDLOG_QSO_UPLOAD_STATUS',
'QRZCOM_QSO_UPLOAD_STATUS',
'QSLMSG',
'QSL_RCVD',

查看文件

@ -36,8 +36,9 @@ class EqslImporter
$this->qth_nickname = $qth;
}
public function from_file($adif_file) {
public function from_file($adif_file,$station_callsign) {
$this->init('ADIF upload', $adif_file);
$this->callsign=$station_callsign;
}
// generate a sanitized file name from a callsign and a QTH nickname
@ -136,6 +137,7 @@ class EqslImporter
$query = $this->CI->db->query('SELECT eqsl_rcvd_mark FROM config');
$q = $query->row();
$config['eqsl_rcvd_mark'] = $q->eqsl_rcvd_mark;
$station_callsign=$this->callsign;
$this->CI->adif_parser->load_from_file($this->adif_file);
$this->CI->adif_parser->initialize();
@ -154,14 +156,14 @@ class EqslImporter
$record['qsl_sent'] = $config['eqsl_rcvd_mark'];
}
$status = $this->CI->logbook_model->import_check($time_on, $record['call'], $record['band']);
$status = $this->CI->logbook_model->import_check($time_on, $record['call'], $record['band'], $record['mode'],$station_callsign);
$qsoid = 0;
if ($status[0] == "Found") {
$qsoid = $status[1];
$dupe = $this->CI->eqslmethods_model->eqsl_dupe_check($time_on, $record['call'], $record['band'], $config['eqsl_rcvd_mark']);
$dupe = $this->CI->eqslmethods_model->eqsl_dupe_check($time_on, $record['call'], $record['band'], $record['mode'],$config['eqsl_rcvd_mark'],$station_callsign);
if ($dupe == false) {
$updated += 1;
$eqsl_status = $this->CI->eqslmethods_model->eqsl_update($time_on, $record['call'], $record['band'], $config['eqsl_rcvd_mark']);
$eqsl_status = $this->CI->eqslmethods_model->eqsl_update($time_on, $record['call'], $record['band'], $record['mode'], $config['eqsl_rcvd_mark'],$station_callsign);
} else {
$dupes += 1;
$eqsl_status = "Already received an eQSL for this QSO.";

查看文件

@ -55,7 +55,14 @@ class Qra {
$stn = qra2latlong($rx);
// Feed in Lat Longs plus the unit type
$total_distance = distance($my[0], $my[1], $stn[0], $stn[1], $unit);
try
{
$total_distance = distance($my[0], $my[1], $stn[0], $stn[1], $unit);
}
catch (Exception $e)
{
$total_distance = 0;
}
// Return the distance
return $total_distance;
@ -169,35 +176,41 @@ function get_bearing($lat1, $lon1, $lat2, $lon2) {
}
function qra2latlong($strQRA) {
if (strpos($strQRA, ',') !== false) {
if (strpos($strQRA, ',') !== false) {
$gridsquareArray = explode(',', $strQRA);
$strQRA = $gridsquareArray[0];
}
if (strlen($strQRA) %2 == 0) {
$strQRA = strtoupper($strQRA);
if (strlen($strQRA) == 4) $strQRA .= "MM";
if(strlen($strQRA) > 6) {
$strQRA = substr($strQRA, 0, 6);
}
if ((strlen($strQRA) % 2 == 0) && (strlen($strQRA) <= 8)) { // Check if QRA is EVEN (the % 2 does that) and smaller/equal 8
$strQRA = strtoupper($strQRA);
if (strlen($strQRA) == 4) $strQRA .= "MM"; // Only 4 Chars? Fill with center "MM"
if (strlen($strQRA) == 6) $strQRA .= "55"; // Only 6 Chars? Fill with center "55"
if (!preg_match('/^[A-R]{2}[0-9]{2}[A-X]{2}$/',$strQRA)) return false;
list($a,$b,$c,$d,$e,$f) = str_split($strQRA,1);
$a = ord($a) - ord('A');
$b = ord($b) - ord('A');
$c = ord($c) - ord('0');
$d = ord($d) - ord('0');
$e = ord($e) - ord('A');
$f = ord($f) - ord('A');
$nLong = ($a*20) + ($c*2) + (($e+0.5)/12) - 180;
$nLat = ($b*10) + $d + (($f+0.5)/24) - 90;
$arLatLong = array($nLat,$nLong);
return($arLatLong);
} else {
return array(0, 0);
}
if (!preg_match('/^[A-R]{2}[0-9]{2}[A-X]{2}[0-9]{2}$/', $strQRA)) {
return false;
}
list($a, $b, $c, $d, $e, $f, $g, $h) = str_split($strQRA, 1); // Maidenhead is always alternating. e.g. "AA00AA00AA00" - doesn't matter how deep. 2 chars, 2 numbers, etc.
$a = ord($a) - ord('A');
$b = ord($b) - ord('A');
$c = ord($c) - ord('0');
$d = ord($d) - ord('0');
$e = ord($e) - ord('A');
$f = ord($f) - ord('A');
$g = ord($g) - ord('0');
$h = ord($h) - ord('0');
$nLong = ($a*20) + ($c*2) + (($e+0.5)/12) + (($g-5)/120) - 180; // the 4th pair is "in the middle", so we've to substract 5
$nLat = ($b*10) + $d + (($f+0.5)/24) + (($h-5)/240) - 90;
$arLatLong = array($nLat, $nLong);
return $arLatLong;
} else {
return array(0, 0);
}
}
/* End of file Qra.php */

查看文件

@ -82,7 +82,12 @@ class Qrz {
$data['name'] = (string)$xml->Callsign->fname;
}
$data['name'] = trim($data['name']);
$data['gridsquare'] = (string)$xml->Callsign->grid;
// Sanitise gridsquare to only allow up to 8 characters
$unclean_gridsquare = (string)$xml->Callsign->grid; // Get the gridsquare from QRZ convert to string
$clean_gridsquare = strlen($unclean_gridsquare) > 8 ? substr($unclean_gridsquare,0,8) : $unclean_gridsquare; // Trim gridsquare to 8 characters max
$data['gridsquare'] = $clean_gridsquare;
$data['city'] = (string)$xml->Callsign->addr2;
$data['lat'] = (string)$xml->Callsign->lat;
$data['long'] = (string)$xml->Callsign->lon;

查看文件

@ -0,0 +1,17 @@
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Migration_reupload_tevel extends CI_Migration
{
public function up()
{
$this->db->set('COL_LOTW_QSL_SENT', 'N');
$this->db->like('COL_SAT_NAME', 'TEVEL', 'after');
$this->db->update($this->config->item('table_name'));
}
public function down()
{
// Not Possible
}
}

查看文件

@ -0,0 +1,42 @@
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Migration_add_lotw_users extends CI_Migration
{
public function up()
{
if (!$this->db->table_exists('lotw_users')) {
$this->dbforge->add_field(array(
'id' => array(
'type' => 'INT',
'constraint' => 20,
'unsigned' => TRUE,
'auto_increment' => TRUE,
'unique' => TRUE
),
'callsign' => array(
'type' => 'VARCHAR',
'constraint' => 32,
'unsigned' => TRUE,
),
'lastupload' => array(
'type' => 'datetime',
)
));
$this->dbforge->add_key('id', TRUE);
$this->dbforge->create_table('lotw_users');
$this->db->query("ALTER TABLE lotw_users ADD INDEX `callsign` (`callsign`)");
}
}
public function down()
{
if ($this->db->table_exists('lotw_users')) {
$this->dbforge->drop_table('lotw_users');
}
}
}

某些文件未显示,因为此 diff 中更改的文件太多 显示更多