Merge Dev into Master for Cloudlog 2.3.2

Merge Dev into Master for Cloudlog 2.3.2
这个提交包含在:
Peter Goodhall 2023-01-25 10:11:57 +00:00 提交者 GitHub
当前提交 53dff31fa0
找不到此签名对应的密钥
GPG 密钥 ID: 4AEE18F83AFDEB23
共有 36 个文件被更改,包括 1468 次插入674 次删除

查看文件

@ -1,5 +1,7 @@
# Cloudlog
> Important: Only accepting PRs on the "dev" branch.
Cloudlog is a self-hosted PHP application that allows you to log your amateur radio contacts anywhere. All you need is a web browser and active internet connection.
Website: [http://www.cloudlog.co.uk](http://www.cloudlog.co.uk)

查看文件

@ -31,17 +31,63 @@ class Awards extends CI_Controller {
public function dok ()
{
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->load->model('dok');
$this->load->model('bands');
$this->load->model('modes');
if($this->input->method() === 'post') {
$postdata['doks'] = $this->input->post('doks');
} else {
$postdata['doks'] = 'both';
}
$data['doks'] = $this->dok->show_stats($postdata);
$data['worked_bands'] = $this->bands->get_worked_bands_dok(); // Used in the view for band select
$data['worked_bands'] = $this->bands->get_worked_bands('dok');
$data['modes'] = $this->modes->active();
if ($this->input->post('band') != NULL) {
if ($this->input->post('band') == 'All') {
$bands = $data['worked_bands'];
} else {
$bands[] = $this->input->post('band');
}
} else {
$bands = $data['worked_bands'];
}
$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');
} else {
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['band'] = 'All';
$postdata['mode'] = 'All';
}
if ($logbooks_locations_array) {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$data['dok_array'] = $this->dok->get_dok_array($bands, $postdata, $location_list);
$data['dok_summary'] = $this->dok->get_dok_summary($bands, $postdata, $location_list);
} else {
$location_list = null;
$data['dok_array'] = null;
$data['dok_summary'] = null;
}
// Render Page
$data['page_title'] = "Awards - DOK";
@ -66,9 +112,6 @@ class Awards extends CI_Controller {
$arguments["order"] = '';
$arguments["join_station_profile"] = true;
// print_r($arguments);
// return;
// Load the API and Logbook models
$this->load->model('api_model');
$this->load->model('logbook_model');
@ -81,7 +124,7 @@ class Awards extends CI_Controller {
// Render Page
$data['page_title'] = "Log View - DOK";
$data['filter'] = str_replace("(and)", ", ", $q);//implode(", ", array_keys($a));
$data['filter'] = str_replace("(and)", ", ", $q);
$this->load->view('awards/details', $data);
}
@ -108,8 +151,9 @@ 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['lotw'] = $this->input->post('lotw');
$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');
@ -125,8 +169,9 @@ class Awards extends CI_Controller {
$postdata['mode'] = $this->input->post('mode');
}
else { // Setting default values at first load of page
$postdata['lotw'] = 1;
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 1;
@ -206,8 +251,9 @@ class Awards extends CI_Controller {
$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');
$data['results'] = $this->logbook_model->qso_details($searchphrase, $band, $mode, $type);
$data['results'] = $this->logbook_model->qso_details($searchphrase, $band, $mode, $type, $qsl);
// This is done because we have two different ways to get dxcc info in Cloudlog. Once is using the name (in awards), and the other one is using the ADIF DXCC.
// We replace the values to make it look a bit nicer
@ -217,9 +263,23 @@ class Awards extends CI_Controller {
$searchphrase = $dxccname['name'];
}
$qsltype = [];
if (strpos($qsl, "Q") !== false) {
$qsltype[] = "QSL";
}
if (strpos($qsl, "L") !== false) {
$qsltype[] = "LotW";
}
if (strpos($qsl, "E") !== false) {
$qsltype[] = "eQSL";
}
// Render Page
$data['page_title'] = "Log View - " . $type;
$data['filter'] = $type . " " . $searchphrase . " and band ".$band . " and mode ".$mode;
if (!empty($qsltype)) {
$data['filter'] .= " and ".implode('/', $qsltype);
}
$this->load->view('awards/details', $data);
}
@ -301,8 +361,9 @@ 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['lotw'] = $this->input->post('lotw');
$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');
@ -310,8 +371,9 @@ class Awards extends CI_Controller {
$postdata['mode'] = $this->input->post('mode');
}
else { // Setting default values at first load of page
$postdata['lotw'] = 1;
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 1;
@ -359,8 +421,9 @@ 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['lotw'] = $this->input->post('lotw');
$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');
@ -368,8 +431,9 @@ class Awards extends CI_Controller {
$postdata['mode'] = $this->input->post('mode');
}
else { // Setting default values at first load of page
$postdata['lotw'] = 1;
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 1;
@ -553,8 +617,9 @@ class Awards extends CI_Controller {
$bands[] = $band_type;
$postdata['lotw'] = 1;
$postdata['qsl'] = 1;
$postdata['lotw'] = 1;
$postdata['eqsl'] = 0;
$postdata['worked'] = 1;
$postdata['confirmed'] = 1;
$postdata['notworked'] = 1;
@ -581,8 +646,9 @@ class Awards extends CI_Controller {
$bands[] = $this->input->post('band');
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$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;
@ -630,8 +696,9 @@ class Awards extends CI_Controller {
$bands[] = $this->input->post('band');
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['qsl'] = $this->input->post('qsl') == 0 ? NULL: 1;
$postdata['lotw'] = $this->input->post('lotw') == 0 ? NULL: 1;
$postdata['eqsl'] = $this->input->post('eqsl') == 0 ? NULL: 1;
$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;
@ -733,4 +800,4 @@ class Awards extends CI_Controller {
}
}
}
}
}

查看文件

@ -38,16 +38,24 @@ $lang['general_word_method'] = '方法';
$lang['general_word_sent'] = '已发送';
$lang['general_word_received'] = '已收到';
$lang['general_word_requested'] = '已请求';
$lang['general_word_queued'] = '已排队';
$lang['general_word_invalid_ignore'] = '无效(忽略)';
$lang['general_word_qslcard'] = 'QSL 卡片';
$lang['general_word_qslcard_management'] = 'QSL 管理';
$lang['general_word_qslcards'] = 'QSL 卡片';
$lang['general_word_qslcard_direct'] = '直邮';
$lang['general_word_qslcard_bureau'] = '卡片局';
$lang['general_word_qslcard_electronic'] = '电子';
$lang['general_word_qslcard_manager'] = '管理员';
$lang['general_word_qslcard_via'] = '通过';
$lang['general_word_eqslcards'] = 'eQSL 卡片';
$lang['general_word_lotw'] = 'Logbook of the World';
$lang['general_edit_qso'] = '编辑 QSO';
$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_delete_qso'] = '删除 QSO';
@ -91,11 +99,15 @@ $lang['gen_hamradio_county_reference'] = '县(美国)';
$lang['gen_hamradio_iota_reference'] = 'IOTA 参考';
$lang['gen_hamradio_sota_reference'] = 'SOTA 参考';
$lang['gen_hamradio_wwff_reference'] = 'WWFF 参考';
$lang['gen_hamradio_pota_reference'] = 'POTA 参考';
$lang['gen_hamradio_dok'] = 'DOK';
$lang['gen_hamradio_state'] = '州';
$lang['gen_hamradio_iota'] = 'IOTA';
$lang['gen_hamradio_sota'] = 'SOTA';
$lang['gen_hamradio_wwff'] = 'WWFF';
$lang['gen_hamradio_pota'] = 'POTA';
$lang['gen_hamradio_gridsquare'] = '网格';
$lang['gen_hamradio_operator'] = '操作员';
$lang['gen_hamradio_sig'] = 'Sig';
$lang['gen_hamradio_sig_info'] = 'Sig 属性';
@ -109,3 +121,7 @@ $lang['dashboard_countries_breakdown'] = 'DXCC 实体分解';
$lang['gen_from_date'] = '起始日期';
$lang['gen_this_qso_was_confirmed_on'] = '该 QSO 确认于';
$lang['error_no_logbook_found'] = '没有找到日志本。 您需要在台站日志下添加一个日志本! 在这里添加:';
$lang['copy_to_clipboard'] = '复制到剪贴板';

查看文件

@ -16,6 +16,8 @@ $lang['lotw_no_certs_uploaded'] = '你需要上传 LoTW p12 证书以使用该
$lang['lotw_date_created'] = '创建日期';
$lang['lotw_date_expires'] = '过期日期';
$lang['lotw_qso_start_date'] = 'QSO 起始日期';
$lang['lotw_qso_end_date'] = 'QSO 结束日期';
$lang['lotw_status'] = '状态';
$lang['lotw_options'] = '选项';
$lang['lotw_valid'] = '有效';

查看文件

@ -7,10 +7,15 @@ $lang['qslcard_string_your_are_using'] = '你已经用了';
$lang['qslcard_string_disk_space'] = '的磁盘空间保存 QSL 卡片资源';
$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_manager'] = 'QSL 卡片已经由卡片管理员发出';
$lang['qslcard_rcvd_bureau'] = 'QSL 卡片已由卡片局接收';
$lang['qslcard_rcvd_direct'] = 'QSL 卡片已直邮接收';
$lang['qslcard_rcvd_electronic'] = 'QSL 卡片已经接收电子版';
$lang['qslcard_rcvd_manager'] = 'QSL 卡片已经由卡片管理员接收';
$lang['qslcard_upload_front'] = '上传 QSL 卡片正面图像';
$lang['qslcard_upload_back'] = '上传 QSL 卡片背面图像';

查看文件

@ -6,11 +6,14 @@ defined('BASEPATH') OR exit('No direct script access allowed');
$lang['qso_title_qso_map'] = 'QSO 地图';
$lang['qso_title_suggestions'] = '建议';
$lang['qso_title_previous_contacts'] = '先前通联';
$lang['qso_title_image'] = '操作员照片';
// Input Help Text on the /QSO Display
$lang['qso_transmit_power_helptext'] = '以瓦特为单位设置功率值。在输入中仅填写数值。';
$lang['qso_sota_ref_helptext'] = '例如: GM/NS-001.';
$lang['qso_wwff_ref_helptext'] = '例如: DLFF-0069.';
$lang['qso_pota_ref_helptext'] = '例如: PA-0150.';
$lang['qso_sig_helptext'] = '例如: GMA';
$lang['qso_sig_info_helptext'] = '例如: DA/NW-357';
@ -18,6 +21,7 @@ $lang['qso_sig_info_helptext'] = '例如: DA/NW-357';
$lang['qso_dok_helptext'] = '例如: Q03';
$lang['qso_notes_helptext'] = '仅在 Cloudlog 使用而不上传到其他的服务的笔记。';
$lang['qsl_notes_helptext'] = '此笔记内容被导出到QSL服务,如 eqsl.cc。';
// Button Text on /qso Display

查看文件

@ -0,0 +1,10 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['account_logbook_fields'] = 'Πεδίο αρχείου';
$lang['account_column1_text'] = 'Επιλογή στήλης 1';
$lang['account_column2_text'] = 'Επιλογή στήλης 2';
$lang['account_column3_text'] = 'Επιλογή στήλης 3';
$lang['account_column4_text'] = 'Επιλογή στήλης 4';
$lang['account_column5_text'] = 'Επιλογή στήλης 5 (Μόνο για αρχείο)';

查看文件

@ -0,0 +1,18 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['contesting_page_title'] = 'Αρχείο διαγωνισμού';
$lang['contesting_button_reset_contest_session'] = 'Επαναφορά Session διαγωνισμού';
$lang['contesting_exchange_type'] = 'Είδος Ανταλλαγής';
$lang['contesting_exchange_type_serial'] = 'Serial';
$lang['contesting_exchange_type_other'] = 'Αλλα';
$lang['contesting_contest_name'] = 'Ονομα Διαγωνισμού';
$lang['contesting_btn_reset_qso'] = 'Επαναφορά QSO';
$lang['contesting_btn_save_qso'] = 'Aποθήκευση QSO';
$lang['contesting_title_callsign_suggestions'] = 'Προτάσεις διακριτικού';
$lang['contesting_title_contest_logbook'] = 'Αρχείο διαγωνισμού';

查看文件

@ -0,0 +1,127 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['error_no_active_station_profile'] = 'Προσοχή: πρέπει να ορίσετε μια ενεργή θέση σταθμού.';
$lang['notice_turn_the_radio_on'] = 'Δεν έχετε κάνει κανένα QSO σήμερα. ώρα να ανοίξετε τον ασύρματο!';
$lang['general_word_important'] = 'Σημαντικό';
$lang['general_word_info'] = 'Πληροφορίες';
$lang['general_word_choose_file'] = 'Επιλογή αρχείου';
$lang['general_word_date'] = 'Ημερομηνία';
$lang['general_word_time'] = 'Ωρα';
$lang['general_word_datetime'] = 'Ημερομηνία/Ωρα';
$lang['general_word_none'] = 'None';
$lang['general_word_name'] = 'όνομα';
$lang['general_word_location'] = 'Τοποθεσία';
$lang['general_word_comment'] = 'Σχόλιο';
$lang['general_word_general'] = 'Γενικα';
$lang['general_word_satellite'] = 'Δορυφόρος';
$lang['general_word_satellite_short'] = 'Δορ';
$lang['general_word_notes'] = 'Σημειώσεις';
$lang['general_word_country'] = 'Χώρα';
$lang['general_word_total'] = 'Σύνολο';
$lang['general_word_year'] = 'Ετος';
$lang['general_word_month'] = 'Μήνας';
$lang['general_word_worked'] = 'Worked';
$lang['general_word_confirmed'] = 'Επιβεβαιωμένο';
$lang['general_word_needed'] = 'Απαιτείται';
$lang['general_word_no'] = 'Οχι';
$lang['general_word_yes'] = 'Ναι';
$lang['general_word_method'] = 'Μέθοδος';
$lang['general_word_sent'] = 'Απεσταλμένα';
$lang['general_word_received'] = 'Ελήφθη';
$lang['general_word_requested'] = 'Έχει ζητηθεί';
$lang['general_word_queued'] = 'Σε ουρά';
$lang['general_word_invalid_ignore'] = 'Μη έγκυρο (Αγνόησή)';
$lang['general_word_qslcard'] = 'Κάρτa QSL';
$lang['general_word_qslcard_management'] = 'QSL Management';
$lang['general_word_qslcards'] = 'Κάρτες QSL';
$lang['general_word_qslcard_direct'] = 'Απευθείας';
$lang['general_word_qslcard_bureau'] = 'Bureau';
$lang['general_word_qslcard_electronic'] = 'Ηλεκτρονική';
$lang['general_word_qslcard_manager'] = 'Διευθυντής';
$lang['general_word_qslcard_via'] = 'Μέσω';
$lang['general_word_eqslcards'] = 'Κάρτες eQSL';
$lang['general_word_lotw'] = 'Logbook of the World';
$lang['general_edit_qso'] = 'Επεξεργασία QSO';
$lang['general_mark_qsl_rx_bureau'] = 'Σημείωση QSL ως Ελήφθη (Bureau)';
$lang['general_mark_qsl_rx_direct'] = 'Σημείωση QSL ως Ελήφθη (Απευθείας)';
$lang['general_mark_qsl_tx_bureau'] = 'Σημείωση QSL ως Ελήφθη(Bureau)';
$lang['general_mark_qsl_tx_direct'] = 'Σημείωση QSL ως Ελήφθη (Απευθείας)';
$lang['general_delete_qso'] = 'Διαγραφή QSO';
$lang['general_total_distance'] = 'Συνολική Απόσταση';
// Cloudlog Terms
$lang['cloudlog_station_profile'] = 'Τοποθεσία Σταθμού';
// ham radio terms
$lang['gen_hamradio_qso'] = 'QSO';
$lang['gen_hamradio_station'] = 'Σταθμός';
$lang['gen_hamradio_call'] = 'Δια';
$lang['gen_hamradio_callsign'] = 'Διακριτικό';
$lang['gen_hamradio_mode'] = 'Τρόπος';
$lang['gen_hamradio_rst_sent'] = 'Απεσταλμένα';
$lang['gen_hamradio_rst_rcvd'] = 'Ελήφθη\'d';
$lang['gen_hamradio_band'] = 'Ζώνη';
$lang['gen_hamradio_band_rx'] = 'Ζώνη (RX)';
$lang['gen_hamradio_frequency'] = 'Συχνότητα';
$lang['gen_hamradio_frequency_rx'] = 'Συχνότητα (RX)';
$lang['gen_hamradio_radio'] = 'Ραδιόφωνο';
$lang['gen_hamradio_rsts'] = 'RST (S)';
$lang['gen_hamradio_rstr'] = 'RST (R)';
$lang['gen_hamradio_exchange_sent_short'] = 'Exch (S)';
$lang['gen_hamradio_exchange_rcvd_short'] = 'Exch (R)';
$lang['gen_hamradio_qsl'] = 'QSL';
$lang['gen_hamradio_locator'] = 'Τοποθετών';
$lang['gen_hamradio_transmit_power'] = 'Ισχύ διαβίβασης (W)';
$lang['gen_hamradio_propagation_mode'] = 'Λειτουργία διάδοσης';
$lang['gen_hamradio_satellite_name'] = 'Όνομα δορυφόρου';
$lang['gen_hamradio_satellite_mode'] = 'Λειτουργία δορυφόρου';
$lang['gen_hamradio_logbook'] = 'Αρχείο επαφών';
$lang['gen_hamradio_cq_zone'] = 'CQ Zone';
$lang['gen_hamradio_dxcc'] = 'DXCC';
$lang['gen_hamradio_usa_state'] = 'Επαρχία ΗΠΑ';
$lang['gen_hamradio_county_reference'] = 'Κομητεία ΗΠΑ ';
$lang['gen_hamradio_iota_reference'] = 'Παραπομπή IOTA';
$lang['gen_hamradio_sota_reference'] = 'Παραπομπή SOTA';
$lang['gen_hamradio_wwff_reference'] = 'Παραπομπή WWFF';
$lang['gen_hamradio_pota_reference'] = 'Παραπομπή POTA';
$lang['gen_hamradio_dok'] = 'DOK';
$lang['gen_hamradio_state'] = 'Επαρχία';
$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'] = 'Χειριστής';
$lang['gen_hamradio_sig'] = 'Sig';
$lang['gen_hamradio_sig_info'] = 'Sig Info';
// Dashboard Words
$lang['dashboard_you_have_had'] = 'Έχετε';
$lang['dashboard_qsos_today'] = 'Σημερινά QSOs ';
$lang['dashboard_qso_breakdown'] = 'QSOs Αναλυτικά';
$lang['dashboard_countries_breakdown'] = 'Χώρες Αναλυτικά';
$lang['gen_from_date'] = 'Από την ημερομηνία';
$lang['gen_this_qso_was_confirmed_on'] = 'Αυτό το QSO επιβεβαιώθηκε στις';
$lang['error_no_logbook_found'] = 'Δεν βρέθηκαν αρχεία. Πρέπει να ορίσετε ένα αρχεία στα αρχεία σταθμών! Κάντε το εδώ:';
$lang['copy_to_clipboard'] = 'Αντιγραφή στο πρόχειρο';

查看文件

@ -0,0 +1,10 @@
<html>
<head>
<title>403 Forbidden</title>
</head>
<body>
<p>Απαγορεύεται η πρόσβαση στον κατάλογο.</p>
</body>
</html>

查看文件

@ -0,0 +1,59 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$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'] = 'Μεταφόρτωση Πιστοποιητικou Logbook of the World .p12';
$lang['lotw_title_export_p12_file_instruction'] = 'Εξαγωγή Οδηγίες αρχείου .p12 ';
$lang['lotw_title_adif_import'] = 'Εισαγωγή ADIF';
$lang['lotw_title_adif_import_options'] = 'Επιλογές εισαγωγής';
$lang['lotw_beta_warning'] = 'Λάβετε υπόψη ότι το LoTW Sync είναι BETA, ανατρέξτε στο wiki για βοήθεια.';
$lang['lotw_no_certs_uploaded'] = 'Πρέπει να ανεβάσετε ορισμένα πιστοποιητικά LoTW p12 για να χρησιμοποιήσετε αυτήν την περιοχή.';
$lang['lotw_date_created'] = 'Ημερομηνία Δημιουργίας';
$lang['lotw_date_expires'] = 'Ημερομηνία Λήξης ';
$lang['lotw_qso_start_date'] = 'Ημερομηνία έναρξης QSO';
$lang['lotw_qso_end_date'] = 'Ημερομηνία λήξης QSO';
$lang['lotw_status'] = 'Κατάσταση / Τελευταία μεταφόρτωση';
$lang['lotw_options'] = 'Επιλογές';
$lang['lotw_valid'] = 'Εγκυρος';
$lang['lotw_expired'] = 'Ληγμένο';
$lang['lotw_expiring'] = 'Λήγει';
$lang['lotw_not_synced'] = 'Μη συγχρονισμένο';
$lang['lotw_certificate_dxcc'] = 'Πιστοποιητικό DXCC';
$lang['lotw_certificate_dxcc_help_text'] = 'Πιστοποιητικό οντότητα DXCC. Για παράδειγμα: Σκωτία';
$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_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 (που ελήφθη από το αρχείο καταγραφής σας), μέχρι τώρα.';
// Buttons
$lang['lotw_btn_lotw_import'] = 'Εισαγωγή LoTW';
$lang['lotw_btn_upload_certificate'] = 'Ανέβασμα Πιστοποιητικού';
$lang['lotw_btn_delete'] = 'Διαγραφή';
$lang['lotw_btn_manual_sync'] = 'Χειροκίνητος συγχρονισμός';
$lang['lotw_btn_upload_file'] = 'Ανέβασμα αρχείου';
$lang['lotw_btn_import_matches'] = 'Εισαγωγή αντιστοιχιών LoTW';
// P12 Export Text
$lang['lotw_p12_export_step_one'] = 'Ανοίξτε το TQSL &amp; μεταβείτε στην καρτέλα Πιστοποιητικά διακριτικού κλήσης';
$lang['lotw_p12_export_step_two'] = 'Κάντε δεξί κλικ στο διακριτικό κλήσης που θέλετε';
$lang['lotw_p12_export_step_three'] = 'Κάντε κλικ στην επιλογή "Αποθήκευση αρχείου πιστοποιητικού κλήσης" και μην προσθέσετε κωδικό πρόσβασης';
$lang['lotw_p12_export_step_four'] = 'Ανεβάστε το αρχείο παρακάτω.';
$lang['lotw_confirmed'] = 'Αυτό το QSO επιβεβαιώνεται στο LoTW';
// LotW Expiry
$lang['lotw_cert_expiring'] = 'Τουλάχιστον ένα από τα πιστοποιητικά LotW πρόκειται να λήξει!';
$lang['lotw_cert_expired'] = 'Τουλάχιστον ένα από τα πιστοποιητικά LotW σας έχει λήξει!';

查看文件

@ -0,0 +1,23 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['notes_menu_notes'] = 'Σημειώσεις';
$lang['notes_edit_note'] = 'Επεξεργασία Σημείωσης';
$lang['notes_your_notes'] = 'Οι σημειώσεις σας';
$lang['notes_welcome'] = "Αυτήν τη στιγμή δεν έχετε σημειώσεις, αυτος είναι ένας φανταστικός τρόπος αποθήκευσης δεδομένων όπως ρυθμίσεις ATU, beacons και γενικές σημειώσεις σταθμών και είναι καλύτερο από χαρτί, καθώς δεν μπορείτε να τα χάσετε!";
$lang['notes_create_note'] = 'Δημιουργία Σημείωσης';
$lang['notes_input_title'] = 'Τίτλος';
$lang['notes_input_category'] = 'Κατηγορία';
$lang['notes_input_notes_content'] = 'Σημείωση Περιεχόμενα';
$lang['notes_input_btn_save_note'] = 'Αποθήκευση Σημείωσης';
$lang['notes_input_btn_edit_note'] = 'Επεξεργασία Σημείωσης';
$lang['notes_input_btn_delete_note'] = 'Διαγραφή Σημείωσης';
$lang['notes_selection_general'] = 'Γενικα';
$lang['notes_selection_antennas'] = 'Κεραίες';
$lang['notes_selection_satellites'] = 'Δορυφόροι';

查看文件

@ -0,0 +1,24 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
// Tiles
$lang['qslcard_string_your_are_using'] = 'Χρησιμοποιεις';
$lang['qslcard_string_disk_space'] = 'χώρου στο δίσκο για την αποθήκευση στοιχείων της κάρτας QSL';
$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_manager'] = 'Η κάρτα QSL έχει σταλεί μέσω του διαχειριστή';
$lang['qslcard_rcvd'] = 'Η κάρτα QSL έχει παραληφθεί';
$lang['qslcard_rcvd_bureau'] = 'Η κάρτα QSL έχει παραληφθεί μέσω του γραφείου';
$lang['qslcard_rcvd_direct'] = 'Η κάρτα QSL έχει παραληφθεί απευθείας';
$lang['qslcard_rcvd_electronic'] = 'Η κάρτα QSL έχει παραληφθεί ηλεκτρονικά';
$lang['qslcard_rcvd_manager'] = 'Η κάρτα QSL έχει παραληφθεί μέσω του διαχειριστή';
$lang['qslcard_upload_front'] = 'Μεταφορτώθηκε η μπροστινή εικόνα της κάρτας QSL';
$lang['qslcard_upload_back'] = 'Μεταφορτώθηκε η πίσω εικόνα της κάρτας QSL';
$lang['qslcard_upload_button'] = 'Μεταφόρτωση εικόνας κάρτας QSL';

查看文件

@ -0,0 +1,34 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
// Tiles
$lang['qso_title_qso_map'] = 'Χάρτης QSO';
$lang['qso_title_suggestions'] = 'Εισήγησης';
$lang['qso_title_previous_contacts'] = 'Προηγούμενες Επαφές';
$lang['qso_title_image'] = 'Εικόνα προφίλ';
// Input Help Text on the /QSO Display
$lang['qso_transmit_power_helptext'] = 'Δώστε τιμή ισχύος σε Watts. Συμπεριλάβετε μόνο αριθμούς στην εισαγωγή.';
$lang['qso_sota_ref_helptext'] = 'Για παράδειγμα: GM/NS-001.';
$lang['qso_wwff_ref_helptext'] = 'Για παράδειγμα: DLFF-0069.';
$lang['qso_pota_ref_helptext'] = 'Για παράδειγμα: PA-0150.';
$lang['qso_sig_helptext'] = 'Για παράδειγμα: GMA';
$lang['qso_sig_info_helptext'] = 'Για παράδειγμα: DA/NW-357';
$lang['qso_dok_helptext'] = 'Για παράδειγμα: Q03';
$lang['qso_notes_helptext'] = 'Το περιεχόμενο σημείωσης χρησιμοποιείται μόνο στο Cloudlog και δεν εξάγεται σε άλλες υπηρεσίες.';
$lang['qsl_notes_helptext'] = 'Αυτό το περιεχόμενο σημείωσης εξάγεται σε υπηρεσίες QSL όπως το eqsl.cc.';
// Button Text on /qso Display
$lang['qso_btn_reset_qso'] = 'Επαναφορά';
$lang['qso_btn_save_qso'] = 'Αποθήκευση QSO';
$lang['qso_btn_edit_qso'] = 'Επεξεργασία QSO';
// QSO Details
$lang['qso_details'] = 'Στοιχεία QSO';

查看文件

@ -21,7 +21,7 @@ class ADIF_Parser
var $data; //the adif data
var $datasplit; // one entry is one QSO in the array
var $currentarray = 0; // current place in the array
var $i; //the iterator
var $i = 0; //the iterator
var $headers = array();
public function initialize() //this function locates the <EOH>
@ -29,6 +29,11 @@ class ADIF_Parser
$pos = mb_stripos(mb_strtoupper($this->data, "UTF-8"), "<EOH>", 0, "UTF-8");
$in_tag = false;
$tag = "";
$value_length = "";
$value = "";
if($pos == false) //did we find the end of headers?
{
// Just skip if we did not find (optional) headers
@ -36,14 +41,6 @@ class ADIF_Parser
goto noheaders;
};
//get headers
$this->i = 0;
$in_tag = false;
$tag = "";
$value_length = "";
$value = "";
while($this->i < $pos)
{
//skip comments

查看文件

@ -24,6 +24,19 @@ class CQ extends CI_Model{
$cqZ[$i]['count'] = 0; // Inits each cq zone's count
}
$qsl = "";
if ($postdata['confirmed'] != NULL) {
if ($postdata['qsl'] != NULL ) {
$qsl .= "Q";
}
if ($postdata['lotw'] != NULL ) {
$qsl .= "L";
}
if ($postdata['eqsl'] != NULL ) {
$qsl .= "E";
}
}
foreach ($bands as $band) {
for ($i = 1; $i <= 40; $i++) {
$bandCq[$i][$band] = '-'; // Sets all to dash to indicate no result
@ -32,14 +45,14 @@ class CQ extends CI_Model{
if ($postdata['worked'] != NULL) {
$cqBand = $this->getCQWorked($location_list, $band, $postdata);
foreach ($cqBand as $line) {
$bandCq[$line->col_cqz][$band] = '<div class="alert-danger"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $line->col_cqz) . '","' . $band . '","'. $postdata['mode'] . '","CQZone")\'>W</a></div>';
$bandCq[$line->col_cqz][$band] = '<div class="alert-danger"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $line->col_cqz) . '","' . $band . '","'. $postdata['mode'] . '","CQZone","")\'>W</a></div>';
$cqZ[$line->col_cqz]['count']++;
}
}
if ($postdata['confirmed'] != NULL) {
$cqBand = $this->getCQConfirmed($location_list, $band, $postdata);
foreach ($cqBand as $line) {
$bandCq[$line->col_cqz][$band] = '<div class="alert-success"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $line->col_cqz) . '","' . $band . '","'. $postdata['mode'] . '","CQZone")\'>C</a></div>';
$bandCq[$line->col_cqz][$band] = '<div class="alert-success"><a href=\'javascript:displayContacts("' . str_replace("&", "%26", $line->col_cqz) . '","' . $band . '","'. $postdata['mode'] . '","CQZone","'.$qsl.'")\'>C</a></div>';
$cqZ[$line->col_cqz]['count']++;
}
}
@ -132,16 +145,20 @@ class CQ extends CI_Model{
function addQslToQuery($postdata) {
$sql = '';
if ($postdata['lotw'] != NULL and $postdata['qsl'] == NULL) {
$sql .= " and col_lotw_qsl_rcvd = 'Y'";
}
if ($postdata['qsl'] != NULL and $postdata['lotw'] == NULL) {
$sql .= " and col_qsl_rcvd = 'Y'";
}
if ($postdata['qsl'] != NULL && $postdata['lotw'] != NULL) {
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
$qsl = array();
if ($postdata['lotw'] != NULL || $postdata['qsl'] != NULL || $postdata['eqsl'] != NULL) {
$sql .= ' and (';
if ($postdata['qsl'] != NULL) {
array_push($qsl, "col_qsl_rcvd = 'Y'");
}
if ($postdata['lotw'] != NULL) {
array_push($qsl, "col_lotw_qsl_rcvd = 'Y'");
}
if ($postdata['eqsl'] != NULL) {
array_push($qsl, "col_eqsl_qsl_rcvd = 'Y'");
}
$sql .= implode(' or ', $qsl);
$sql .= ')';
}
return $sql;
}

查看文件

@ -2,93 +2,250 @@
class DOK extends CI_Model {
function show_stats($postdata) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
function get_dok_array($bands, $postdata, $location_list) {
$doks = array();
if (!$logbooks_locations_array) {
return null;
$list = $this->getDoksFromDB($location_list);
foreach ($this->getSdoksFromDB($location_list) as $sdok) {
$list[] = $sdok;
}
foreach ($list as $dok) {
$doks[$dok->COL_DARC_DOK]['count'] = 0;
}
$this->load->model('bands');
$qsl = "";
if ($postdata['confirmed'] != NULL) {
if ($postdata['qsl'] != NULL ) {
$qsl .= "Q";
}
if ($postdata['lotw'] != NULL ) {
$qsl .= "L";
}
if ($postdata['eqsl'] != NULL ) {
$qsl .= "E";
}
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = "select upper(COL_DARC_DOK) as COL_DARC_DOK, COL_MODE, lcase(COL_BAND) as COL_BAND, count(COL_DARC_DOK) as cnt from ".$this->config->item('table_name')." WHERE station_id in (" . $location_list . ") AND COL_DARC_DOK IS NOT NULL AND COL_DARC_DOK != '' AND COL_DXCC = 230";
foreach ($bands as $band) {
foreach ($list as $dok) {
$bandDok[$dok->COL_DARC_DOK][$band] = '-';
}
if ($postdata['worked'] != NULL) {
$dokBand = $this->getDokWorked($location_list, $band, $postdata);
foreach ($dokBand as $line) {
if (array_key_exists($line->COL_DARC_DOK, $bandDok)) { /* For now ignore DOKs which are logged but not existing in the official lists any more */
$bandDok[$line->COL_DARC_DOK][$band] = '<div class="alert-danger"><a href=\'javascript:displayContacts("' . $line->COL_DARC_DOK . '","' . $band . '","' . $postdata['mode'] . '","DOK", "")\'>W</a></div>';
$doks[$line->COL_DARC_DOK]['count']++;
}
}
}
if ($postdata['confirmed'] != NULL) {
$dokBand = $this->getDokConfirmed($location_list, $band, $postdata);
foreach ($dokBand as $line) {
if (array_key_exists($line->COL_DARC_DOK, $bandDok)) { /* For now ignore DOKs which are logged but not existing in the official lists any more */
$bandDok[$line->COL_DARC_DOK][$band] = '<div class="alert-success"><a href=\'javascript:displayContacts("' . $line->COL_DARC_DOK . '","' . $band . '","' . $postdata['mode'] . '","DOK", "'.$qsl.'")\'>C</a></div>';
$doks[$line->COL_DARC_DOK]['count']++;
}
}
}
// We want to remove the worked DOKs in the list, since we do not want to display them
if ($postdata['worked'] == NULL) {
$dokBand = $this->getDokWorked($location_list, $postdata['band'], $postdata);
foreach ($dokBand as $line) {
unset($bandDok[$line->COL_DARC_DOK]);
}
}
// We want to remove the worked DOKs in the list, since we do not want to display them
if ($postdata['confirmed'] == NULL) {
$dokBand = $this->getDokConfirmed($location_list, $postdata['band'], $postdata);
foreach ($dokBand as $line) {
unset($bandDok[$line->COL_DARC_DOK]);
}
}
}
foreach ($list as $dok) {
if($doks[$dok->COL_DARC_DOK]['count'] == 0) {
unset($bandDok[$dok->COL_DARC_DOK]);
}
}
// We want to hide NM as marking not having a DOK at all
if (isset($bandDok['NM'])) {
unset($bandDok['NM']);
}
if (isset($bandDok)) {
return $bandDok;
} else {
return 0;
}
}
function getDokWorked($location_list, $band, $postdata) {
$sql = "SELECT DISTINCT COL_DARC_DOK FROM " . $this->config->item('table_name') . " thcv
WHERE station_id IN (" . $location_list . ") AND COL_DARC_DOK <> '' AND COL_DARC_DOK <> 'NM'";
if ($postdata['mode'] != 'All') {
$sql .= " AND (COL_MODE = '" . $postdata['mode'] . "' OR COL_SUBMODE = '" . $postdata['mode'] . "')";
}
$sql .= $this->addDokTypeToQuery($postdata['doks']);
$sql .= $this->addBandToQuery($band);
$sql .= " AND NOT EXISTS (SELECT 1 from " . $this->config->item('table_name') .
" WHERE station_id in (" . $location_list .
") AND COL_DARC_DOK = thcv.COL_DARC_DOK AND COL_DARC_DOK <> '' AND COL_DARC_DOK <> 'NM' ";
$sql .= $this->addDokTypeToQuery($postdata['doks']);
$sql .= $this->addBandToQuery($band);
$sql .= $this->addQslToQuery($postdata);
$sql .= ")";
$query = $this->db->query($sql);
return $query->result();
}
function getDokConfirmed($location_list, $band, $postdata) {
$sql = "SELECT DISTINCT COL_DARC_DOK FROM " . $this->config->item('table_name') . " thcv
WHERE station_id IN (" . $location_list . ") AND COL_DARC_DOK <> '' AND COL_DARC_DOK <> '' AND COL_DARC_DOK <> 'NM'";
if ($postdata['mode'] != 'All') {
$sql .= " AND (COL_MODE = '" . $postdata['mode'] . "' or COL_SUBMODE = '" . $postdata['mode'] . "')";
}
$sql .= $this->addDokTypeToQuery($postdata['doks']);
$sql .= $this->addBandToQuery($band);
$sql .= $this->addQslToQuery($postdata);
$query = $this->db->query($sql);
return $query->result();
}
function addQslToQuery($postdata) {
$sql = '';
$qsl = array();
if ($postdata['lotw'] != NULL || $postdata['qsl'] != NULL || $postdata['eqsl'] != NULL) {
$sql .= ' and (';
if ($postdata['qsl'] != NULL) {
array_push($qsl, "col_qsl_rcvd = 'Y'");
}
if ($postdata['lotw'] != NULL) {
array_push($qsl, "col_lotw_qsl_rcvd = 'Y'");
}
if ($postdata['eqsl'] != NULL) {
array_push($qsl, "col_eqsl_qsl_rcvd = 'Y'");
}
$sql .= implode(' or ', $qsl);
$sql .= ')';
}
return $sql;
}
function addBandToQuery($band) {
$sql = '';
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " AND COL_PROP_MODE ='" . $band . "'";
} else {
$sql .= " AND COL_PROP_MODE !='SAT'";
$sql .= " AND col_BAND ='" . $band . "'";
}
}
return $sql;
}
function addDokTypeToQuery($doks) {
$sql = '';
if ($doks == 'dok') {
$sql .= " AND COL_DARC_DOK REGEXP '^[A-Z][0-9]{2}$'";
} else if ($doks == 'sdok') {
$sql .= " AND COL_DARC_DOK NOT REGEXP '^[A-Z][0-9]{2}$'";
}
return $sql;
}
function get_dok_summary($bands, $postdata, $location_list) {
foreach ($bands as $band) {
$worked = $this->getSummaryByBand($band, $postdata, $location_list);
$confirmed = $this->getSummaryByBandConfirmed($band, $postdata, $location_list);
$dokSummary['worked'][$band] = $worked[0]->count;
$dokSummary['confirmed'][$band] = $confirmed[0]->count;
}
$workedTotal = $this->getSummaryByBand($postdata['band'], $postdata, $location_list);
$confirmedTotal = $this->getSummaryByBandConfirmed($postdata['band'], $postdata, $location_list);
$dokSummary['worked']['Total'] = $workedTotal[0]->count;
$dokSummary['confirmed']['Total'] = $confirmedTotal[0]->count;
return $dokSummary;
}
function getSummaryByBand($band, $postdata, $location_list) {
$sql = "SELECT count(distinct thcv.COL_DARC_DOK) AS count FROM " . $this->config->item('table_name') . " thcv";
$sql .= " WHERE station_id IN (" . $location_list . ') AND COL_DARC_DOK != "" AND COL_DARC_DOK <> "NM"';
if ($band == 'SAT') {
$sql .= " AND thcv.COL_PROP_MODE ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
$bandslots = $this->bands->get_worked_bands('dok');
$bandslots_list = "'".implode("','",$bandslots)."'";
$sql .= " AND thcv.COL_BAND in (" . $bandslots_list . ")";
} else {
$sql .= " AND thcv.COL_PROP_MODE !='SAT'";
$sql .= " AND thcv.COL_BAND ='" . $band . "'";
}
if ($postdata['doks'] == 'dok') {
$sql .= " AND COL_DARC_DOK REGEXP '^[A-Z][0-9]{2}$'";
} else if ($postdata['doks'] == 'sdok') {
$sql .= " AND COL_DARC_DOK NOT REGEXP '^[A-Z][0-9]{2}$'";
}
$sql .= " group by COL_DARC_DOK, COL_MODE, COL_BAND";
$sql .= " order by COL_DARC_DOK asc";
$data = $this->db->query($sql);
$results = array();
$last_dok = "";
foreach($data->result() as $row){
if ($last_dok != $row->COL_DARC_DOK){
// new row
$results[$row->COL_DARC_DOK] = $this->bands->bandslots;
$last_dok = $row->COL_DARC_DOK;
}
// update stats
if (!isset($results[$row->COL_DARC_DOK]))
$results[$row->COL_DARC_DOK] = [];
if (!isset($results[$row->COL_DARC_DOK][$row->COL_BAND]))
$results[$row->COL_DARC_DOK][$row->COL_BAND] = 0;
$results[$row->COL_DARC_DOK][$row->COL_BAND] += $row->cnt;
}
return $results;
$query = $this->db->query($sql);
return $query->result();
}
/**
* Function: mostactive
* Information: Returns the most active band
**/
function info($callsign)
{
$exceptions = $this->db->query('
SELECT *
FROM `dxcc_exceptions`
WHERE `prefix` = \''.$callsign.'\'
LIMIT 1
');
if ($exceptions->num_rows() > 0)
{
return $exceptions;
function getSummaryByBandConfirmed($band, $postdata, $location_list){
$sql = "SELECT count(distinct thcv.COL_DARC_DOK) AS count FROM " . $this->config->item('table_name') . " thcv";
$sql .= " WHERE station_id IN (" . $location_list . ') AND COL_DARC_DOK != "" AND COL_DARC_DOK <> "NM"';
if ($band == 'SAT') {
$sql .= " AND thcv.COL_PROP_MODE ='" . $band . "'";
} else if ($band == 'All') {
$this->load->model('bands');
$bandslots = $this->bands->get_worked_bands('dok');
$bandslots_list = "'".implode("','",$bandslots)."'";
$sql .= " AND thcv.COL_BAND in (" . $bandslots_list . ")";
} else {
$query = $this->db->query('
SELECT *
FROM dxcc_entities
WHERE prefix = SUBSTRING( \''.$callsign.'\', 1, LENGTH( prefix ) )
ORDER BY LENGTH( prefix ) DESC
LIMIT 1
');
return $query;
$sql .= " AND thcv.COL_PROP_MODE !='SAT'";
$sql .= " AND thcv.COL_BAND ='" . $band . "'";
}
if ($postdata['doks'] == 'dok') {
$sql .= " AND COL_DARC_DOK REGEXP '^[A-Z][0-9]{2}$'";
} else if ($postdata['doks'] == 'sdok') {
$sql .= " AND COL_DARC_DOK NOT REGEXP '^[A-Z][0-9]{2}$'";
}
$sql .= $this->addQslToQuery($postdata);
$query = $this->db->query($sql);
return $query->result();
}
function search(){
print_r($this->input->get());
return;
}
function empty_table($table) {
$this->db->empty_table($table);
function getDoksFromDB($location_list) {
$sql = 'SELECT DISTINCT `COL_DARC_DOK` FROM '.$this->config->item('table_name');
$sql .= " WHERE station_id IN (" . $location_list . ') AND COL_DARC_DOK != "" AND COL_DARC_DOK <> "NM"';
$sql .= " AND COL_DARC_DOK REGEXP '^[A-Z][0-9]{2}$'";
$sql .= " ORDER BY COL_DARC_DOK ASC";
$query = $this->db->query($sql);
return $query->result();
}
function list() {
$this->db->order_by('name', 'ASC');
return $this->db->get('dxcc_entities');
function getSdoksFromDB($location_list) {
$sql = 'SELECT DISTINCT `COL_DARC_DOK` FROM '.$this->config->item('table_name');
$sql .= " WHERE station_id IN (" . $location_list . ') AND COL_DARC_DOK != "" AND COL_DARC_DOK <> "NM"';
$sql .= " AND COL_DARC_DOK NOT REGEXP '^[A-Z][0-9]{2}$'";
$sql .= " ORDER BY COL_DARC_DOK ASC";
$query = $this->db->query($sql);
return $query->result();
}
}
?>

查看文件

@ -69,6 +69,19 @@ class DXCC extends CI_Model {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$qsl = "";
if ($postdata['confirmed'] != NULL) {
if ($postdata['qsl'] != NULL ) {
$qsl .= "Q";
}
if ($postdata['lotw'] != NULL ) {
$qsl .= "L";
}
if ($postdata['eqsl'] != NULL ) {
$qsl .= "E";
}
}
foreach ($bands as $band) { // Looping through bands and entities to generate the array needed for display
foreach ($dxccArray as $dxcc) {
$dxccMatrix[$dxcc->adif]['name'] = ucwords(strtolower($dxcc->name), "- (/");
@ -82,7 +95,7 @@ class DXCC extends CI_Model {
if ($postdata['worked'] != NULL) {
$workedDXCC = $this->getDxccBandWorked($location_list, $band, $postdata);
foreach ($workedDXCC as $wdxcc) {
$dxccMatrix[$wdxcc->dxcc][$band] = '<div class="alert-danger"><a href=\'javascript:displayContacts("'.str_replace("&", "%26", $wdxcc->name).'","'. $band . '","'. $postdata['mode'] . '","DXCC")\'>W</a></div>';
$dxccMatrix[$wdxcc->dxcc][$band] = '<div class="alert-danger"><a href=\'javascript:displayContacts("'.str_replace("&", "%26", $wdxcc->name).'","'. $band . '","'. $postdata['mode'] . '","DXCC", "")\'>W</a></div>';
}
}
@ -90,7 +103,7 @@ class DXCC extends CI_Model {
if ($postdata['confirmed'] != NULL) {
$confirmedDXCC = $this->getDxccBandConfirmed($location_list, $band, $postdata);
foreach ($confirmedDXCC as $cdxcc) {
$dxccMatrix[$cdxcc->dxcc][$band] = '<div class="alert-success"><a href=\'javascript:displayContacts("'.str_replace("&", "%26", $cdxcc->name).'","'. $band . '","'. $postdata['mode'] . '","DXCC")\'>C</a></div>';
$dxccMatrix[$cdxcc->dxcc][$band] = '<div class="alert-success"><a href=\'javascript:displayContacts("'.str_replace("&", "%26", $cdxcc->name).'","'. $band . '","'. $postdata['mode'] . '","DXCC","'.$qsl.'")\'>C</a></div>';
}
}
}
@ -315,16 +328,20 @@ class DXCC extends CI_Model {
// Made function instead of repeating this several times
function addQslToQuery($postdata) {
$sql = '';
if ($postdata['lotw'] != NULL and $postdata['qsl'] == NULL) {
$sql .= " and col_lotw_qsl_rcvd = 'Y'";
}
if ($postdata['qsl'] != NULL and $postdata['lotw'] == NULL) {
$sql .= " and col_qsl_rcvd = 'Y'";
}
if ($postdata['qsl'] != NULL && $postdata['lotw'] != NULL) {
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
$qsl = array();
if ($postdata['lotw'] != NULL || $postdata['qsl'] != NULL || $postdata['eqsl'] != NULL) {
$sql .= ' and (';
if ($postdata['qsl'] != NULL) {
array_push($qsl, "col_qsl_rcvd = 'Y'");
}
if ($postdata['lotw'] != NULL) {
array_push($qsl, "col_lotw_qsl_rcvd = 'Y'");
}
if ($postdata['eqsl'] != NULL) {
array_push($qsl, "col_eqsl_qsl_rcvd = 'Y'");
}
$sql .= implode(' or ', $qsl);
$sql .= ')';
}
return $sql;
}

查看文件

@ -257,7 +257,7 @@ class Logbook_model extends CI_Model {
/*
* Used to fetch QSOs from the logbook in the awards
*/
public function qso_details($searchphrase, $band, $mode, $type){
public function qso_details($searchphrase, $band, $mode, $type, $qsl){
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
@ -292,6 +292,9 @@ class Logbook_model extends CI_Model {
case 'POTA':
$this->db->where('COL_POTA_REF', $searchphrase);
break;
case 'DOK':
$this->db->where('COL_DARC_DOK', $searchphrase);
break;
}
$this->db->where_in($this->config->item('table_name').'.station_id', $logbooks_locations_array);
@ -305,6 +308,21 @@ class Logbook_model extends CI_Model {
}
}
if (!empty($qsl)) {
$qslfilter = array();
if (strpos($qsl, "Q") !== false) {
$qslfilter[] = 'COL_QSL_RCVD = "Y"';
}
if (strpos($qsl, "L") !== false) {
$qslfilter[] = 'COL_LOTW_QSL_RCVD = "Y"';
}
if (strpos($qsl, "E") !== false) {
$qslfilter[] = 'COL_EQSL_QSL_RCVD = "Y"';
}
$sql = "(".implode(' OR ', $qslfilter).")";
$this->db->where($sql);
}
if ($mode != 'All') {
$this->db->where("(COL_MODE='" . $mode . "' OR COL_SUBMODE='" . $mode ."')");
}
@ -318,7 +336,7 @@ class Logbook_model extends CI_Model {
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$sql = 'SELECT COL_SOTA_REF, COL_OPERATOR, COL_IOTA, COL_VUCC_GRIDS, COL_STATE, COL_GRIDSQUARE, COL_PRIMARY_KEY, COL_CALL, COL_TIME_ON, COL_BAND, COL_SAT_NAME, COL_MODE, COL_SUBMODE, COL_RST_SENT, ';
$sql = 'SELECT COL_FREQ, COL_SOTA_REF, COL_OPERATOR, COL_IOTA, COL_VUCC_GRIDS, COL_STATE, COL_GRIDSQUARE, COL_PRIMARY_KEY, COL_CALL, COL_TIME_ON, COL_BAND, COL_SAT_NAME, COL_MODE, COL_SUBMODE, COL_RST_SENT, ';
$sql .= 'COL_RST_RCVD, COL_STX, COL_SRX, COL_STX_STRING, COL_SRX_STRING, COL_COUNTRY, COL_QSL_SENT, COL_QSL_SENT_VIA, ';
$sql .= 'COL_QSLSDATE, COL_QSL_RCVD, COL_QSL_RCVD_VIA, COL_QSLRDATE, COL_EQSL_QSL_SENT, COL_EQSL_QSLSDATE, COL_EQSL_QSLRDATE, ';
$sql .= 'COL_EQSL_QSL_RCVD, COL_LOTW_QSL_SENT, COL_LOTW_QSLSDATE, COL_LOTW_QSL_RCVD, COL_LOTW_QSLRDATE, COL_CONTEST_ID, station_gridsquare ';
@ -1155,20 +1173,25 @@ class Logbook_model extends CI_Model {
} else {
$logbooks_locations_array = $StationLocationsArray;
}
if ($logbooks_locations_array) {
$this->db->where_in($this->config->item('table_name').'.station_id', $logbooks_locations_array);
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
$this->db->join('dxcc_entities', $this->config->item('table_name').'.col_dxcc = dxcc_entities.adif', 'left');
$this->db->order_by("COL_TIME_ON", "desc");
$this->db->limit($num);
$query = $this->db->get($this->config->item('table_name'));
if ($logbooks_locations_array) {
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = "SELECT * FROM ( select * from " . $this->config->item('table_name'). "
WHERE station_id IN(". $location_list .")
order by col_time_on desc
limit " . $num .
") hrd
JOIN station_profile ON station_profile.station_id = hrd.station_id
LEFT JOIN dxcc_entities ON hrd.col_dxcc = dxcc_entities.adif";
$query = $this->db->query($sql);
return $query;
} else {
return null;
}
}
/* Get all QSOs with a valid grid for use in the KML export */
@ -2782,7 +2805,7 @@ class Logbook_model extends CI_Model {
$data['COL_MY_IOTA'] = strtoupper(trim($row['station_iota']));
$data['COL_MY_SOTA_REF'] = strtoupper(trim($row['station_sota']));
$data['COL_MY_WWFF_REF'] = strtoupper(trim($row['station_wwff']));
$data['COL_MY_POTA_REF'] = strtoupper(trim($row['station_pota']));
$data['COL_MY_POTA_REF'] = $row['station_pota'] == null ? '' : strtoupper(trim($row['station_pota']));
$data['COL_STATION_CALLSIGN'] = strtoupper(trim($row['station_callsign']));
$data['COL_MY_DXCC'] = strtoupper(trim($row['station_dxcc']));
@ -2834,17 +2857,19 @@ class Logbook_model extends CI_Model {
}
if (preg_match('/(^KG4)[A-Z09]{3}/', $call)) { // KG4/ and KG4 5 char calls are Guantanamo Bay. If 4 or 6 char, it is USA
$call = "K";
} elseif (preg_match('/(^OH\/)|(\/OH[1-9]?$)/', $call)) { # non-Aland prefix!
$call = "OH"; # make callsign OH = finland
} elseif (preg_match('/(^3D2R)|(^3D2.+\/R)/', $call)) { # seems to be from Rotuma
$call = "3D2/R"; # will match with Rotuma
} elseif (preg_match('/^3D2C/', $call)) { # seems to be from Conway Reef
$call = "3D2/C"; # will match with Conway
} elseif (preg_match('/(^LZ\/)|(\/LZ[1-9]?$)/', $call)) { # LZ/ is LZ0 by DXCC but this is VP8h
$call = "LZ";
} elseif (preg_match('/(^KG4)[A-Z09]{2}/', $call)) {
$call = "KG4";
} elseif (preg_match('/(^KG4)[A-Z09]{1}/', $call)) {
$call = "K";
} elseif (preg_match_all('/^((\d|[A-Z])+\/)?((\d|[A-Z]){3,})(\/(\d|[A-Z])+)?(\/(\d|[A-Z])+)?$/', $call, $matches)) {
if ($matches[5][0] == '/MM' || $matches[5][0] == '/AM') {
$row['adif'] = 0;
$row['entity'] = 'None';
$row['cqz'] = 0;
return array($row['adif'], $row['entity'], $row['cqz']);
} else {
} elseif (preg_match('/\w\/\w/', $call)) {
$result = $this->wpx($call, 1); # use the wpx prefix instead
if ($result == '') {
$row['adif'] = 0;
@ -2854,7 +2879,6 @@ class Logbook_model extends CI_Model {
} else {
$call = $result . "AA";
}
}
}
$len = strlen($call);
@ -2900,19 +2924,19 @@ class Logbook_model extends CI_Model {
if (preg_match('/(^KG4)[A-Z09]{3}/', $call)) { // KG4/ and KG4 5 char calls are Guantanamo Bay. If 4 or 6 char, it is USA
$call = "K";
} elseif (preg_match('/(^OH\/)|(\/OH[1-9]?$)/', $call)) { # non-Aland prefix!
$call = "OH"; # make callsign OH = finland
} elseif (preg_match('/(^3D2R)|(^3D2.+\/R)/', $call)) { # seems to be from Rotuma
$call = "3D2/R"; # will match with Rotuma
} elseif (preg_match('/^3D2C/', $call)) { # seems to be from Conway Reef
$call = "3D2/C"; # will match with Conway
} elseif (preg_match('/(^LZ\/)|(\/LZ[1-9]?$)/', $call)) { # LZ/ is LZ0 by DXCC but this is VP8h
$call = "LZ";
} elseif (preg_match('/(^KG4)[A-Z09]{2}/', $call)) {
$call = "KG4";
} elseif (preg_match('/(^KG4)[A-Z09]{1}/', $call)) {
$call = "K";
} elseif (preg_match_all('/^((\d|[A-Z])+\/)?((\d|[A-Z]){3,})(\/(\d|[A-Z])+)?(\/(\d|[A-Z])+)?$/', $call, $matches)) {
if ($matches[5][0] == '/MM' || $matches[5][0] == '/AM') {
$row['adif'] = 0;
$row['entity'] = 'None';
$row['cqz'] = 0;
$row['long'] = '0';
$row['lat'] = '0';
return $row;
} else {
} elseif (preg_match('/\w\/\w/', $call)) {
$result = $this->wpx($call, 1); # use the wpx prefix instead
if ($result == '') {
$row['adif'] = 0;
@ -2924,7 +2948,6 @@ class Logbook_model extends CI_Model {
} else {
$call = $result . "AA";
}
}
}
$len = strlen($call);
@ -2960,7 +2983,8 @@ class Logbook_model extends CI_Model {
$c = '';
$lidadditions = '/^QRP|^LGT/';
$csadditions = '/^P$|^M{1,2}$|^AM$|^A$/';
$csadditions = '/^P$|^R$|^A$|^M$/';
$noneadditions = '/^MM$|^AM$/';
# First check if the call is in the proper format, A/B/C where A and C
# are optional (prefix of guest country and P, MM, AM etc) and B is the
@ -2982,7 +3006,7 @@ class Logbook_model extends CI_Model {
$a = substr($a, 0, -1); # Remove the / at the end
}
if ($c) {
$c = substr($c, 1,); # Remove the / at the beginning
$c = substr($c, 1); # Remove the / at the beginning
};
# In some cases when there is no part A but B and C, and C is longer than 2
@ -3033,7 +3057,7 @@ class Logbook_model extends CI_Model {
$prefix = substr($b, 0, 2) . "0"; # first two + 0
}
} elseif (($a == null) && (isset($c))) { # Case 2, CALL/X
if (preg_match('/^(\d)$/', $c)) { # Case 2.1, number
if (preg_match('/^(\d)/', $c)) { # Case 2.1, number
preg_match('/(.+\d)[A-Z]*/', $b, $matches); # regular Prefix in $1
# Here we need to find out how many digits there are in the
# prefix, because for example A45XR/0 is A40. If there are 2
@ -3051,6 +3075,8 @@ class Logbook_model extends CI_Model {
} elseif (preg_match($csadditions, $c)) {
preg_match('/(.+\d)[A-Z]*/', $b, $matches); # Known attachment -> like Case 1.1
$prefix = $matches[1];
} elseif (preg_match($noneadditions, $c)) {
return '';
} elseif (preg_match('/^\d\d+$/', $c)) { # more than 2 numbers -> ignore
preg_match('/(.+\d)[A-Z]* /', $b, $matches); # see above
$prefix = $matches[1][0];
@ -3061,6 +3087,8 @@ class Logbook_model extends CI_Model {
$prefix = $c . "0";
}
}
} elseif (($a) && (preg_match($noneadditions, $c))) { # Case 2.1, X/CALL/X ie TF/DL2NWK/MM - DXCC none
return '';
} elseif ($a) {
# $a contains the prefix we want
if (preg_match('/\d$/', $a)) { # ends in number -> good prefix
@ -3115,7 +3143,7 @@ class Logbook_model extends CI_Model {
$this->db->select("COL_PRIMARY_KEY, COL_CALL, COL_TIME_ON, COL_TIME_OFF");
// check which to update - records with no dxcc or all records
if (! isset($all)){
if (!$all){
$this->db->where("COL_DXCC is NULL");
}
@ -3126,8 +3154,8 @@ class Logbook_model extends CI_Model {
//query dxcc_prefixes
if ($r->num_rows() > 0){
foreach($r->result_array() as $row){
$qso_date = $row['COL_TIME_OFF']=='' ? $row['COL_TIME_ON'] : $row['COL_TIME_ON'];
$qso_date = strftime("%Y-%m-%d", strtotime($qso_date));
$qso_date = $row['COL_TIME_OFF']=='' ? $row['COL_TIME_ON'] : $row['COL_TIME_OFF'];
$qso_date = date("Y-m-d", strtotime($qso_date));
// Manual call
$d = $this->check_dxcc_table($row['COL_CALL'], $qso_date);

查看文件

@ -260,7 +260,7 @@ class Oqrs_model extends CI_Model {
$binding = [$searchCriteria['user_id']];
if ($searchCriteria['de'] !== '') {
$conditions[] = "station_profile.STATION_CALLSIGN = ?";
$conditions[] = "station_profile.station_id = ?";
$binding[] = trim($searchCriteria['de']);
}
if ($searchCriteria['dx'] !== '') {

查看文件

@ -19,6 +19,19 @@ class was extends CI_Model {
$states = array(); // Used for keeping track of which states that are not worked
$qsl = "";
if ($postdata['confirmed'] != NULL) {
if ($postdata['qsl'] != NULL ) {
$qsl .= "Q";
}
if ($postdata['lotw'] != NULL ) {
$qsl .= "L";
}
if ($postdata['eqsl'] != NULL ) {
$qsl .= "E";
}
}
foreach ($stateArray as $state) { // Generating array for use in the table
$states[$state]['count'] = 0; // Inits each state's count
}
@ -32,14 +45,14 @@ class was extends CI_Model {
if ($postdata['worked'] != NULL) {
$wasBand = $this->getWasWorked($location_list, $band, $postdata);
foreach ($wasBand as $line) {
$bandWas[$line->col_state][$band] = '<div class="alert-danger"><a href=\'javascript:displayContacts("' . $line->col_state . '","' . $band . '","'. $postdata['mode'] . '","WAS")\'>W</a></div>';
$bandWas[$line->col_state][$band] = '<div class="alert-danger"><a href=\'javascript:displayContacts("' . $line->col_state . '","' . $band . '","'. $postdata['mode'] . '","WAS", "")\'>W</a></div>';
$states[$line->col_state]['count']++;
}
}
if ($postdata['confirmed'] != NULL) {
$wasBand = $this->getWasConfirmed($location_list, $band, $postdata);
foreach ($wasBand as $line) {
$bandWas[$line->col_state][$band] = '<div class="alert-success"><a href=\'javascript:displayContacts("' . $line->col_state . '","' . $band . '","'. $postdata['mode'] . '","WAS")\'>C</a></div>';
$bandWas[$line->col_state][$band] = '<div class="alert-success"><a href=\'javascript:displayContacts("' . $line->col_state . '","' . $band . '","'. $postdata['mode'] . '","WAS", "'.$qsl.'")\'>C</a></div>';
$states[$line->col_state]['count']++;
}
}
@ -238,16 +251,20 @@ class was extends CI_Model {
function addQslToQuery($postdata) {
$sql = '';
if ($postdata['lotw'] != NULL and $postdata['qsl'] == NULL) {
$sql .= " and col_lotw_qsl_rcvd = 'Y'";
}
if ($postdata['qsl'] != NULL and $postdata['lotw'] == NULL) {
$sql .= " and col_qsl_rcvd = 'Y'";
}
if ($postdata['qsl'] != NULL && $postdata['lotw'] != NULL) {
$sql .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y')";
$qsl = array();
if ($postdata['lotw'] != NULL || $postdata['qsl'] != NULL || $postdata['eqsl'] != NULL) {
$sql .= ' and (';
if ($postdata['qsl'] != NULL) {
array_push($qsl, "col_qsl_rcvd = 'Y'");
}
if ($postdata['lotw'] != NULL) {
array_push($qsl, "col_lotw_qsl_rcvd = 'Y'");
}
if ($postdata['eqsl'] != NULL) {
array_push($qsl, "col_eqsl_qsl_rcvd = 'Y'");
}
$sql .= implode(' or ', $qsl);
$sql .= ')';
}
return $sql;
}

查看文件

@ -57,7 +57,7 @@
</div>
<div class="form-group row">
<div class="col-md-2">QSL / LoTW</div>
<div class="col-md-2">QSL Type</div>
<div class="col-md-10">
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="qsl" value="1" id="qsl" <?php if ($this->input->post('qsl') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
@ -67,6 +67,10 @@
<input class="form-check-input" type="checkbox" name="lotw" value="1" id="lotw" <?php if ($this->input->post('lotw') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
<label class="form-check-label" for="lotw">LoTW</label>
</div>
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="eqsl" value="1" id="eqsl" <?php if ($this->input->post('eqsl')) echo ' checked="checked"'; ?> >
<label class="form-check-label" for="eqsl">eQSL</label>
</div>
</div>
</div>
@ -201,4 +205,4 @@
</div>
</div>
</div>
</div>

查看文件

@ -1,11 +1,11 @@
<div class="container">
<h2><?php echo $page_title; ?></h2>
<form class="form" action="<?php echo site_url('awards/dok'); ?>" method="post" enctype="multipart/form-data">
<fieldset>
<h2><?php echo $page_title?></h2>
<form class="form" action="<?php echo site_url('awards/dok'); ?>" method="post" enctype="multipart/form-data">
<fieldset>
<div class="form-group row">
<label class="col-md-2 control-label" for="dok">Type</label>
<label class="col-md-2 control-label" for="band">DOK / SDOK</label>
<div class="col-md-2">
<select id="doks" name="doks" class="form-control custom-select-sm">
<option value="both" <?php if ($this->input->post('doks') == "both" || $this->input->method() !== 'post') echo ' selected'; ?> >DOK + SDOK</option>
@ -20,51 +20,163 @@
</select>
</div>
</div>
<div class="form-group row">
<div class="col-md-2" for="checkboxes">Worked / Confirmed</div>
<div class="col-md-10">
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="worked" id="worked" value="1" <?php if ($this->input->post('worked') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
<label class="form-check-label" for="worked">Show worked</label>
</div>
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="confirmed" id="confirmed" value="1" <?php if ($this->input->post('confirmed') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
<label class="form-check-label" for="confirmed">Show confirmed</label>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-md-2">QSL Type</div>
<div class="col-md-10">
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="qsl" value="1" id="qsl" <?php if ($this->input->post('qsl') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
<label class="form-check-label" for="qsl">QSL</label>
</div>
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="lotw" value="1" id="lotw" <?php if ($this->input->post('lotw') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
<label class="form-check-label" for="lotw">LoTW</label>
</div>
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="eqsl" value="1" id="eqsl" <?php if ($this->input->post('eqsl')) echo ' checked="checked"'; ?> >
<label class="form-check-label" for="eqsl">eQSL</label>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-2 control-label" for="band">Band</label>
<div class="col-md-2">
<select id="band2" name="band" class="form-control custom-select-sm">
<option value="All" <?php if ($this->input->post('band') == "All" || $this->input->method() !== 'post') echo ' selected'; ?> >Every band</option>
<?php foreach($worked_bands as $band) {
echo '<option value="' . $band . '"';
if ($this->input->post('band') == $band) echo ' selected';
echo '>' . $band . '</option>'."\n";
} ?>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-md-2 control-label" for="mode">Mode</label>
<div class="col-md-2">
<select id="mode" name="mode" class="form-control custom-select-sm">
<option value="All" <?php if ($this->input->post('mode') == "All" || $this->input->method() !== 'mode') echo ' selected'; ?>>All</option>
<?php
foreach($modes->result() as $mode){
if ($mode->submode == null) {
echo '<option value="' . $mode->mode . '"';
if ($this->input->post('mode') == $mode->mode) echo ' selected';
echo '>'. $mode->mode . '</option>'."\n";
} else {
echo '<option value="' . $mode->submode . '"';
if ($this->input->post('mode') == $mode->submode) echo ' selected';
echo '>' . $mode->submode . '</option>'."\n";
}
}
?>
</select>
</div>
</div>
<?php
$doks = array();
if ($dok_array) {
foreach ($dok_array as $dok => $value) {
if (preg_match('/^[A-Z][0-9]{2}$/', $dok)) {
$doks[] = $dok;
}
}
}
?>
<div class="form-group row">
<label class="col-md-2 control-label" for="button1id"></label>
<div class="col-md-10">
<button id="button2id" type="reset" name="button2id" class="btn-sm btn-warning">Reset</button>
<button id="button1id" type="submit" name="button1id" class="btn-sm btn-primary">Show</button>
<button id="button2id" type="reset" name="button2id" class="btn btn-sm btn-warning">Reset</button>
<button id="button1id" type="submit" name="button1id" class="btn btn-sm btn-primary">Show</button>
<button id="button3id" type="button" name="button3id" class="btn btn-sm btn-info" onclick=" window.open('https://dd3ah.de/dokmap/dokonly.html?zoom=9&dokonly=<?php print implode(',', $doks); ?>','_blank')"><i class="fas fa-globe-americas"></i> Map</button>
</div>
</div>
</fieldset>
</form>
<table class="table table-sm table-striped table-hover">
<?php
if ($worked_bands) {
?>
<thead>
<br />
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade" id="dokmaptab" role="tabpanel" aria-labelledby="home-tab">
<br />
</div>
<div class="tab-pane fade show active" id="table" role="tabpanel" aria-labelledby="table-tab">
<?php
if ($dok_array) {
echo '
<table style="width:100%" id="doktable" class="table table-sm table-bordered table-hover table-striped table-condensed text-center">
<thead>
<tr>
<td style="width:225px">DOKs (<?php echo count($doks)?>)</td>
<?php
foreach ($worked_bands as $slot) {
echo " <td style=\"text-align: center;\">$slot</td>\n";
}
?>
</tr>
</thead>
<tbody>
<?php
foreach($doks as $dok=>$val){
print("<tr><td>$dok</td>");
foreach($val as $band=>$count){
if (in_array($band, $worked_bands)) {
if ($count == 0){
print("<td style=\"text-align: right; padding-right: 2em\">&nbsp;</td>");
}else{
printf("<td style=\"text-align: right; padding-right: 2em\"><a href='javascript:displayDokContacts(\"%s\",\"%s\")'>%d</a></td>", str_replace("&", "%26", $dok), $band, $count);
}
}
<th>DOK</th>';
foreach($bands as $band) {
echo '<th>' . $band . '</th>';
}
print("</tr>");
echo '</tr>
</thead>
<tbody>';
foreach ($dok_array as $dok => $value) { // Fills the table with the data
echo '<tr>
<td>'. $dok .'</td>';
foreach ($value as $key) {
echo '<td style="text-align: center">' . $key . '</td>';
}
echo '</tr>';
}
echo '</table>
<h2>Summary</h2>
<table class="table-sm tablesummary table table-bordered table-hover table-striped table-condensed text-center">
<thead>
<tr><td></td>';
foreach($bands as $band) {
echo '<td>' . $band . '</td>';
}
echo '<td>Total</td></tr>
</thead>
<tbody>
<tr><td>Total worked</td>';
foreach ($dok_summary['worked'] as $dxcc) { // Fills the table with the data
echo '<td style="text-align: center">' . $dxcc . '</td>';
}
?>
</tbody>
echo '</tr><tr>
<td>Total confirmed</td>';
foreach ($dok_summary['confirmed'] as $dxcc) { // Fills the table with the data
echo '<td style="text-align: center">' . $dxcc . '</td>';
}
</table>
<?php } else {
echo '</tr>
</table>
</div>';
}
else {
echo '<div class="alert alert-danger" role="alert"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>Nothing found!</div>';
} ?>
}
?>
</div>
</div>
</div>

查看文件

@ -67,7 +67,7 @@
</div>
<div class="form-group row">
<div class="col-md-2">QSL / LoTW</div>
<div class="col-md-2">QSL Type</div>
<div class="col-md-10">
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="qsl" value="1" id="qsl" <?php if ($this->input->post('qsl') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
@ -77,6 +77,10 @@
<input class="form-check-input" type="checkbox" name="lotw" value="1" id="lotw" <?php if ($this->input->post('lotw') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
<label class="form-check-label" for="lotw">LoTW</label>
</div>
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="eqsl" value="1" id="eqsl" <?php if ($this->input->post('eqsl')) echo ' checked="checked"'; ?> >
<label class="form-check-label" for="eqsl">eQSL</label>
</div>
</div>
</div>

查看文件

@ -24,7 +24,7 @@
</div>
<div class="form-group row">
<div class="col-md-2">QSL / LoTW</div>
<div class="col-md-2">QSL Type</div>
<div class="col-md-10">
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="qsl" value="1" id="qsl" <?php if ($this->input->post('qsl') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
@ -34,6 +34,10 @@
<input class="form-check-input" type="checkbox" name="lotw" value="1" id="lotw" <?php if ($this->input->post('lotw') || $this->input->method() !== 'post') echo ' checked="checked"'; ?> >
<label class="form-check-label" for="lotw">LoTW</label>
</div>
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="eqsl" value="1" id="eqsl" <?php if ($this->input->post('eqsl')) echo ' checked="checked"'; ?> >
<label class="form-check-label" for="eqsl">eQSL</label>
</div>
</div>
</div>

查看文件

@ -14,6 +14,8 @@
<script type="text/javascript" src="<?php echo base_url() ;?>assets/js/darkmodehelpers.js"></script>
<script src="<?php echo base_url(); ?>assets/js/bootstrapdialog/js/bootstrap-dialog.min.js"></script>
<script type="text/javascript" src="<?php echo base_url() ;?>assets/js/easyprint.js"></script>
<script type="text/javascript" src="<?php echo base_url() ;?>assets/js/sections/common.js"></script>
<script src="https://unpkg.com/htmx.org@1.6.1"></script>
<script type="text/javascript">
@ -505,99 +507,6 @@ document.onkeyup = function(e) {
}
};
function spawnQrbCalculator(locator1, locator2) {
$.ajax({
url: base_url + 'index.php/qrbcalc',
type: 'post',
success: function (html) {
BootstrapDialog.show({
title: 'Compute QRB and QTF',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'lookup-dialog',
nl2br: false,
message: html,
onshown: function(dialog) {
if (locator1 !== undefined) {
$("#qrbcalc_locator1").val(locator1);
}
if (locator2 !== undefined) {
$("#qrbcalc_locator2").val(locator2);
calculateQrb();
}
},
buttons: [{
label: 'Close',
action: function (dialogItself) {
dialogItself.close();
}
}]
});
}
});
}
function spawnActivatorsMap(call, count, grids) {
$.ajax({
url: base_url + 'index.php/activatorsmap',
type: 'post',
success: function (html) {
BootstrapDialog.show({
title: 'Activators Map',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'lookup-dialog',
nl2br: false,
message: html,
onshown: function(dialog) {
showActivatorsMap(call, count, grids);
},
buttons: [{
label: 'Close',
action: function (dialogItself) {
dialogItself.close();
}
}]
});
}
});
}
function calculateQrb() {
let locator1 = $("#qrbcalc_locator1").val();
let locator2 = $("#qrbcalc_locator2").val();
$(".qrbalert").remove();
if (validateLocator(locator1) && validateLocator(locator2)) {
$.ajax({
url: base_url+'index.php/qrbcalc/calculate',
type: 'post',
data: {'locator1': locator1,
'locator2': locator2},
success: function (html) {
var result = "<h5>Negative latitudes are south of the equator, negative longitudes are west of Greenwich. <br/>";
result += ' ' + locator1.toUpperCase() + ' Latitude = ' + html['latlng1'][0] + ' Longitude = ' + html['latlng1'][1] + '<br/>';
result += ' ' + locator2.toUpperCase() + ' Latitude = ' + html['latlng2'][0] + ' Longitude = ' + html['latlng2'][1] + '<br/>';
result += 'Distance between ' + locator1.toUpperCase() + ' and ' + locator2.toUpperCase() + ' is ' + html['distance'] + '.<br />';
result += 'The bearing is ' + html['bearing'] + '.</h5>';
$(".qrbResult").html(result);
newpath(html['latlng1'], html['latlng2'], locator1, locator2);
}
});
} else {
$('.qrbResult').html('<div class="qrbalert alert alert-danger" role="alert">Error in locators. Please check.</div>');
}
}
function validateLocator(locator) {
if(locator.length < 4 && !(/^[a-rA-R]{2}[0-9]{2}[a-xA-X]{0,2}[0-9]{0,2}[a-xA-X]{0,2}$/.test(locator))) {
return false;
}
return true;
}
function newpath(latlng1, latlng2, locator1, locator2) {
// If map is already initialized
var container = L.DomUtil.get('mapqrb');
@ -674,90 +583,6 @@ function showActivatorsMap(call, count, grids) {
map.addLayer(osm);
}
// This displays the dialog with the form and it's where the resulttable is displayed
function spawnLookupModal() {
$.ajax({
url: base_url + 'index.php/lookup',
type: 'post',
success: function (html) {
BootstrapDialog.show({
title: 'Quick lookup',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'lookup-dialog',
nl2br: false,
message: html,
onshown: function(dialog) {
$('#quicklookuptype').change(function(){
var type = $('#quicklookuptype').val();
if (type == "dxcc") {
$('#quicklookupdxcc').show();
$('#quicklookupiota').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "iota") {
$('#quicklookupiota').show();
$('#quicklookupdxcc').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "grid" || type == "sota" || type == "wwff") {
$('#quicklookuptext').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
} else if (type == "cqz") {
$('#quicklookupcqz').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "was") {
$('#quicklookupwas').show();
$('#quicklookupcqz').hide();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookuptext').hide();
}
});
},
buttons: [{
label: 'Close',
action: function (dialogItself) {
dialogItself.close();
}
}]
});
}
});
}
// This function executes the call to the backend for fetching queryresult and displays the table in the dialog
function getLookupResult() {
$(".ld-ext-right").addClass('running');
$(".ld-ext-right").prop('disabled', true);
$.ajax({
url: base_url + 'index.php/lookup/search',
type: 'post',
data: {
type: $('#quicklookuptype').val(),
dxcc: $('#quicklookupdxcc').val(),
was: $('#quicklookupwas').val(),
grid: $('#quicklookuptext').val(),
cqz: $('#quicklookupcqz').val(),
iota: $('#quicklookupiota').val(),
sota: $('#quicklookuptext').val(),
wwff: $('#quicklookuptext').val(),
},
success: function (html) {
$('#lookupresulttable').html(html);
$(".ld-ext-right").removeClass('running');
$(".ld-ext-right").prop('disabled', false);
}
});
}
</script>
<?php if ($this->uri->segment(1) == "map" && $this->uri->segment(2) == "custom") { ?>
@ -1981,269 +1806,7 @@ $(document).ready(function(){
<?php } ?>
<script>
function qsl_rcvd(id, method) {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/qso/qsl_rcvd_ajax',
type: 'post',
data: {'id': id,
'method': method
},
success: function(data) {
if (data.message == 'OK') {
$("#qso_" + id).find("td:eq(8)").find("span:eq(1)").attr('class', 'qsl-green'); // Paints arrow green
$(".qsl_rcvd_" + id).remove(); // removes choice from menu
}
else {
$(".bootstrap-dialog-message").append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>You are not allowed to update QSL status!</div>');
}
}
});
}
function qsl_sent(id, method) {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/qso/qsl_sent_ajax',
type: 'post',
data: {'id': id,
'method': method
},
success: function(data) {
if (data.message == 'OK') {
$("#qso_" + id).find("td:eq(8)").find("span:eq(0)").attr('class', 'qsl-green'); // Paints arrow green
$(".qsl_sent_" + id).remove(); // removes choice from menu
}
else {
$(".bootstrap-dialog-message").append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>You are not allowed to update QSL status!</div>');
}
}
});
}
// Function: qsl_requested
// Marks QSL card requested against the QSO.
function qsl_requested(id, method) {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/qso/qsl_requested_ajax',
type: 'post',
data: {'id': id,
'method': method
},
success: function(data) {
if (data.message == 'OK') {
$("#qso_" + id).find("td:eq(8)").find("span:eq(0)").attr('class', 'qsl-yellow'); // Paints arrow green
}
else {
$(".bootstrap-dialog-message").append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>You are not allowed to update QSL status!</div>');
}
}
});
}
// Function: qsl_ignore
// Marks QSL card ignore against the QSO.
function qsl_ignore(id, method) {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/qso/qsl_ignore_ajax',
type: 'post',
data: {'id': id,
'method': method
},
success: function(data) {
if (data.message == 'OK') {
$("#qso_" + id).find("td:eq(8)").find("span:eq(0)").attr('class', 'qsl-grey'); // Paints arrow grey
}
else {
$(".bootstrap-dialog-message").append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>You are not allowed to update QSL status!</div>');
}
}
});
}
function qso_delete(id, call) {
BootstrapDialog.confirm({
title: 'DANGER',
message: 'Warning! Are you sure you want delete QSO with ' + call + '?' ,
type: BootstrapDialog.TYPE_DANGER,
closable: true,
draggable: true,
btnOKClass: 'btn-danger',
callback: function(result) {
if(result) {
$(".edit-dialog").modal('hide');
$(".qso-dialog").modal('hide');
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/qso/delete_ajax',
type: 'post',
data: {'id': id
},
success: function(data) {
$(".alert").remove();
$(".bootstrap-dialog-message").prepend('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>The contact with ' + call + ' has been deleted!</div>');
$("#qso_" + id).remove(); // removes qso from table in dialog
}
});
}
}
});
}
function qso_edit(id) {
var baseURL= "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/qso/edit_ajax',
type: 'post',
data: {'id': id
},
success: function(html) {
BootstrapDialog.show({
title: 'QSO Data',
cssClass: 'edit-dialog',
size: BootstrapDialog.SIZE_WIDE,
nl2br: false,
message: html,
onshown: function(dialog) {
var state = $("#input_usa_state_edit option:selected").text();
if (state != "") {
$("#stationCntyInputEdit").prop('disabled', false);
selectize_usa_county();
}
$('#input_usa_state_edit').change(function(){
var state = $("#input_usa_state_edit option:selected").text();
if (state != "") {
$("#stationCntyInputEdit").prop('disabled', false);
selectize_usa_county();
} else {
$("#stationCntyInputEdit").prop('disabled', true);
//$('#stationCntyInput')[0].selectize.destroy();
$("#stationCntyInputEdit").val("");
}
});
$('#sota_ref_edit').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: false,
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: baseURL+'index.php/qso/get_sota',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
$('#wwff_ref_edit').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: false,
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: baseURL+'index.php/qso/get_wwff',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
$('#pota_ref_edit').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: false,
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: baseURL+'index.php/qso/get_pota',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
$('#darc_dok_edit').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: true,
load: function(query, callback) {
if (!query) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: baseURL+'index.php/qso/get_dok',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
},
});
}
});
}
function selectize_usa_county() {
var baseURL= "<?php echo base_url();?>";
$('#stationCntyInputEdit').selectize({
@ -2568,7 +2131,7 @@ function deleteQsl(id) {
/*
* Used to fetch QSOs from the logbook in the awards
*/
function displayContacts(searchphrase, band, mode, type) {
function displayContacts(searchphrase, band, mode, type, qsl) {
var baseURL = "<?php echo base_url();?>";
$.ajax({
url: baseURL + 'index.php/awards/qso_details_ajax',
@ -2577,7 +2140,8 @@ function deleteQsl(id) {
'Searchphrase': searchphrase,
'Band': band,
'Mode': mode,
'Type': type
'Type': type,
'QSL' : qsl
},
success: function (html) {
BootstrapDialog.show({
@ -3214,6 +2778,38 @@ function deleteQsl(id) {
$('[class*="buttons"]').css("color", "white");
}
</script>
<?php } else if ($this->uri->segment(2) == "dok") { ?>
<script>
$.fn.dataTable.ext.buttons.clear = {
className: 'buttons-clear',
action: function ( e, dt, node, config ) {
dt.search('').draw();
}
};
$('#doktable').DataTable({
"pageLength": 25,
responsive: false,
ordering: false,
"scrollY": "500px",
"scrollCollapse": true,
"paging": false,
"scrollX": true,
dom: 'Bfrtip',
buttons: [
{
extend: 'csv'
},
{
extend: 'clear',
text: 'Clear'
}
]
});
// change color of csv-button if dark mode is chosen
if (isDarkModeTheme()) {
$('[class*="buttons"]').css("color", "white");
}
</script>
<?php } ?>
<?php } ?>

查看文件

@ -239,8 +239,10 @@ if ($logbooks_locations_array) {
} else {
$location_list = null;
}
$oqrs_requests = $CI->oqrs_model->oqrs_requests($location_list);
?>
<a class="dropdown-item" href="<?php echo site_url('oqrs/requests');?>" title="OQRS Requests"><i class="fa fa-id-card"></i> OQRS Requests <?php if ($CI->oqrs_model->oqrs_requests($location_list) > 0) { echo "<span class=\"badge badge-light\">".$CI->oqrs_model->oqrs_requests($location_list)."</span>"; } ?></a>
<a class="dropdown-item" href="<?php echo site_url('oqrs/requests');?>" title="OQRS Requests"><i class="fa fa-id-card"></i> OQRS Requests <?php if ($oqrs_requests > 0) { echo "<span class=\"badge badge-light\">".$oqrs_requests."</span>"; } ?></a>
<a class="dropdown-item" href="<?php echo site_url('qslprint');?>" title="Print Requested QSLs"><i class="fas fa-print"></i> Print Requested QSLs</a>

查看文件

@ -229,6 +229,8 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="javascript:qsl_sent(<?php echo $row->COL_PRIMARY_KEY; ?>, 'B')" ><i class="fas fa-envelope"></i> <?php echo $this->lang->line('general_mark_qsl_tx_bureau'); ?></a>
<a class="dropdown-item" href="javascript:qsl_sent(<?php echo $row->COL_PRIMARY_KEY; ?>, 'D')" ><i class="fas fa-envelope"></i> <?php echo $this->lang->line('general_mark_qsl_tx_direct'); ?></a>
<a class="dropdown-item" href="javascript:qsl_requested(<?php echo $row->COL_PRIMARY_KEY; ?>, 'D')" ><i class="fas fa-envelope"></i> Mark QSL Card Requested</a>
<a class="dropdown-item" href="javascript:qsl_ignore(<?php echo $row->COL_PRIMARY_KEY; ?>, 'D')" ><i class="fas fa-envelope"></i> Mark QSL Card Not Required</a>
</div>
<?php } ?>
@ -237,8 +239,6 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="javascript:qsl_rcvd(<?php echo $row->COL_PRIMARY_KEY; ?>, 'B')" ><i class="fas fa-envelope"></i> <?php echo $this->lang->line('general_mark_qsl_rx_bureau'); ?></a>
<a class="dropdown-item" href="javascript:qsl_rcvd(<?php echo $row->COL_PRIMARY_KEY; ?>, 'D')" ><i class="fas fa-envelope"></i> <?php echo $this->lang->line('general_mark_qsl_rx_direct'); ?></a>
<a class="dropdown-item" href="javascript:qsl_requested(<?php echo $row->COL_PRIMARY_KEY; ?>, 'D')" ><i class="fas fa-envelope"></i> Mark QSL Card Requested</a>
<a class="dropdown-item" href="javascript:qsl_ignore(<?php echo $row->COL_PRIMARY_KEY; ?>, 'D')" ><i class="fas fa-envelope"></i> Mark QSL Card Not Required</a>
</div>
<?php } ?>

查看文件

@ -39,7 +39,7 @@
<?php echo '<tr class="tr'.($i & 1).'">'; ?>
<td><?php $timestamp = strtotime($row->COL_TIME_ON); echo date($custom_date_format, $timestamp); ?></td>
<td><?php $timestamp = strtotime($row->COL_TIME_ON); echo date('H:i', $timestamp); ?></td>
<td><a class="qsobox" href="<?php echo site_url('logbook/view')."/".$row->COL_PRIMARY_KEY; ?>"><?php echo str_replace("0","&Oslash;",strtoupper($row->COL_CALL)); ?></a></td>
<td><?php echo str_replace("0","&Oslash;",strtoupper($row->COL_CALL)); ?></td>
<td><?php echo $row->COL_SUBMODE==null?$row->COL_MODE:$row->COL_SUBMODE; ?></td>
<td><?php echo $row->COL_RST_SENT; ?> <?php if ($row->COL_STX_STRING) { ?>(<?php echo $row->COL_STX_STRING;?>)<?php } ?></td>
<td><?php echo $row->COL_RST_RCVD; ?> <?php if ($row->COL_SRX_STRING) { ?>(<?php echo $row->COL_SRX_STRING;?>)<?php } ?></td>

434
assets/js/sections/common.js 普通文件
查看文件

@ -0,0 +1,434 @@
function qsl_rcvd(id, method) {
$.ajax({
url: base_url + 'index.php/qso/qsl_rcvd_ajax',
type: 'post',
data: {'id': id,
'method': method
},
success: function(data) {
if (data.message == 'OK') {
$("#qso_" + id).find("td:eq(8)").find("span:eq(1)").attr('class', 'qsl-green'); // Paints arrow green
$(".qsl_rcvd_" + id).remove(); // removes choice from menu
}
else {
$(".bootstrap-dialog-message").append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>You are not allowed to update QSL status!</div>');
}
}
});
}
function qsl_sent(id, method) {
$.ajax({
url: base_url + 'index.php/qso/qsl_sent_ajax',
type: 'post',
data: {'id': id,
'method': method
},
success: function(data) {
if (data.message == 'OK') {
$("#qso_" + id).find("td:eq(8)").find("span:eq(0)").attr('class', 'qsl-green'); // Paints arrow green
$(".qsl_sent_" + id).remove(); // removes choice from menu
}
else {
$(".bootstrap-dialog-message").append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>You are not allowed to update QSL status!</div>');
}
}
});
}
// Function: qsl_requested
// Marks QSL card requested against the QSO.
function qsl_requested(id, method) {
$.ajax({
url: base_url + 'index.php/qso/qsl_requested_ajax',
type: 'post',
data: {'id': id,
'method': method
},
success: function(data) {
if (data.message == 'OK') {
$("#qso_" + id).find("td:eq(8)").find("span:eq(0)").attr('class', 'qsl-yellow'); // Paints arrow green
}
else {
$(".bootstrap-dialog-message").append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>You are not allowed to update QSL status!</div>');
}
}
});
}
// Function: qsl_ignore
// Marks QSL card ignore against the QSO.
function qsl_ignore(id, method) {
$.ajax({
url: base_url + 'index.php/qso/qsl_ignore_ajax',
type: 'post',
data: {'id': id,
'method': method
},
success: function(data) {
if (data.message == 'OK') {
$("#qso_" + id).find("td:eq(8)").find("span:eq(0)").attr('class', 'qsl-grey'); // Paints arrow grey
}
else {
$(".bootstrap-dialog-message").append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>You are not allowed to update QSL status!</div>');
}
}
});
}
function qso_delete(id, call) {
BootstrapDialog.confirm({
title: 'DANGER',
message: 'Warning! Are you sure you want delete QSO with ' + call + '?' ,
type: BootstrapDialog.TYPE_DANGER,
closable: true,
draggable: true,
btnOKClass: 'btn-danger',
callback: function(result) {
if(result) {
$(".edit-dialog").modal('hide');
$(".qso-dialog").modal('hide');
var base_url= "<?php echo base_url();?>";
$.ajax({
url: base_url + 'index.php/qso/delete_ajax',
type: 'post',
data: {'id': id
},
success: function(data) {
$(".alert").remove();
$(".bootstrap-dialog-message").prepend('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>The contact with ' + call + ' has been deleted!</div>');
$("#qso_" + id).remove(); // removes qso from table in dialog
}
});
}
}
});
}
function qso_edit(id) {
$.ajax({
url: base_url + 'index.php/qso/edit_ajax',
type: 'post',
data: {'id': id
},
success: function(html) {
BootstrapDialog.show({
title: 'QSO Data',
cssClass: 'edit-dialog',
size: BootstrapDialog.SIZE_WIDE,
nl2br: false,
message: html,
onshown: function(dialog) {
var state = $("#input_usa_state_edit option:selected").text();
if (state != "") {
$("#stationCntyInputEdit").prop('disabled', false);
selectize_usa_county();
}
$('#input_usa_state_edit').change(function(){
var state = $("#input_usa_state_edit option:selected").text();
if (state != "") {
$("#stationCntyInputEdit").prop('disabled', false);
selectize_usa_county();
} else {
$("#stationCntyInputEdit").prop('disabled', true);
//$('#stationCntyInput')[0].selectize.destroy();
$("#stationCntyInputEdit").val("");
}
});
$('#sota_ref_edit').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: false,
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: base_url+'index.php/qso/get_sota',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
$('#wwff_ref_edit').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: false,
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: base_url+'index.php/qso/get_wwff',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
$('#pota_ref_edit').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: false,
load: function(query, callback) {
if (!query || query.length < 3) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: base_url+'index.php/qso/get_pota',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
$('#darc_dok_edit').selectize({
maxItems: 1,
closeAfterSelect: true,
loadThrottle: 250,
valueField: 'name',
labelField: 'name',
searchField: 'name',
options: [],
create: true,
load: function(query, callback) {
if (!query) return callback(); // Only trigger if 3 or more characters are entered
$.ajax({
url: base_url+'index.php/qso/get_dok',
type: 'GET',
dataType: 'json',
data: {
query: query,
},
error: function() {
callback();
},
success: function(res) {
callback(res);
}
});
}
});
},
});
}
});
}
function spawnQrbCalculator(locator1, locator2) {
$.ajax({
url: base_url + 'index.php/qrbcalc',
type: 'post',
success: function (html) {
BootstrapDialog.show({
title: 'Compute QRB and QTF',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'lookup-dialog',
nl2br: false,
message: html,
onshown: function(dialog) {
if (locator1 !== undefined) {
$("#qrbcalc_locator1").val(locator1);
}
if (locator2 !== undefined) {
$("#qrbcalc_locator2").val(locator2);
calculateQrb();
}
},
buttons: [{
label: 'Close',
action: function (dialogItself) {
dialogItself.close();
}
}]
});
}
});
}
function spawnActivatorsMap(call, count, grids) {
$.ajax({
url: base_url + 'index.php/activatorsmap',
type: 'post',
success: function (html) {
BootstrapDialog.show({
title: 'Activators Map',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'lookup-dialog',
nl2br: false,
message: html,
onshown: function(dialog) {
showActivatorsMap(call, count, grids);
},
buttons: [{
label: 'Close',
action: function (dialogItself) {
dialogItself.close();
}
}]
});
}
});
}
function calculateQrb() {
let locator1 = $("#qrbcalc_locator1").val();
let locator2 = $("#qrbcalc_locator2").val();
$(".qrbalert").remove();
if (validateLocator(locator1) && validateLocator(locator2)) {
$.ajax({
url: base_url+'index.php/qrbcalc/calculate',
type: 'post',
data: {'locator1': locator1,
'locator2': locator2},
success: function (html) {
var result = "<h5>Negative latitudes are south of the equator, negative longitudes are west of Greenwich. <br/>";
result += ' ' + locator1.toUpperCase() + ' Latitude = ' + html['latlng1'][0] + ' Longitude = ' + html['latlng1'][1] + '<br/>';
result += ' ' + locator2.toUpperCase() + ' Latitude = ' + html['latlng2'][0] + ' Longitude = ' + html['latlng2'][1] + '<br/>';
result += 'Distance between ' + locator1.toUpperCase() + ' and ' + locator2.toUpperCase() + ' is ' + html['distance'] + '.<br />';
result += 'The bearing is ' + html['bearing'] + '.</h5>';
$(".qrbResult").html(result);
newpath(html['latlng1'], html['latlng2'], locator1, locator2);
}
});
} else {
$('.qrbResult').html('<div class="qrbalert alert alert-danger" role="alert">Error in locators. Please check.</div>');
}
}
function validateLocator(locator) {
if(locator.length < 4 && !(/^[a-rA-R]{2}[0-9]{2}[a-xA-X]{0,2}[0-9]{0,2}[a-xA-X]{0,2}$/.test(locator))) {
return false;
}
return true;
}
// This displays the dialog with the form and it's where the resulttable is displayed
function spawnLookupModal() {
$.ajax({
url: base_url + 'index.php/lookup',
type: 'post',
success: function (html) {
BootstrapDialog.show({
title: 'Quick lookup',
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'lookup-dialog',
nl2br: false,
message: html,
onshown: function(dialog) {
$('#quicklookuptype').change(function(){
var type = $('#quicklookuptype').val();
if (type == "dxcc") {
$('#quicklookupdxcc').show();
$('#quicklookupiota').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "iota") {
$('#quicklookupiota').show();
$('#quicklookupdxcc').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "grid" || type == "sota" || type == "wwff") {
$('#quicklookuptext').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
} else if (type == "cqz") {
$('#quicklookupcqz').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "was") {
$('#quicklookupwas').show();
$('#quicklookupcqz').hide();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookuptext').hide();
}
});
},
buttons: [{
label: 'Close',
action: function (dialogItself) {
dialogItself.close();
}
}]
});
}
});
}
// This function executes the call to the backend for fetching queryresult and displays the table in the dialog
function getLookupResult() {
$(".ld-ext-right").addClass('running');
$(".ld-ext-right").prop('disabled', true);
$.ajax({
url: base_url + 'index.php/lookup/search',
type: 'post',
data: {
type: $('#quicklookuptype').val(),
dxcc: $('#quicklookupdxcc').val(),
was: $('#quicklookupwas').val(),
grid: $('#quicklookuptext').val(),
cqz: $('#quicklookupcqz').val(),
iota: $('#quicklookupiota').val(),
sota: $('#quicklookuptext').val(),
wwff: $('#quicklookuptext').val(),
},
success: function (html) {
$('#lookupresulttable').html(html);
$(".ld-ext-right").removeClass('running');
$(".ld-ext-right").prop('disabled', false);
}
});
}

查看文件

@ -9,7 +9,7 @@
*/
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['db_invalid_connection_str'] = '无法根据提交的连接字符串确定数据库设置。 ';
$lang['db_invalid_connection_str'] = '无法根据提交的连接字符串确定数据库设置。';
$lang['db_unable_to_connect'] = '无法使用提供的设置连接到数据库服务器。';
$lang['db_unable_to_select'] = '无法选择指定的数据库: %s';
$lang['db_unable_to_create'] = '无法创建指定的数据库:%s';
@ -24,12 +24,12 @@ $lang['db_field_param_missing'] = '获取字段需要指定表名。';
$lang['db_unsupported_function'] = '功能不被您当前使用的数据库支持。';
$lang['db_transaction_failure'] = '事务失败:执行回滚。';
$lang['db_unable_to_drop'] = '无法删除指定的数据库。';
$lang['db_unsupported_feature'] = '特性不被您当前使用的数据库支持。 ';
$lang['db_unsupported_compression'] = '您选择的文件压缩格式不被服务器支持。 ';
$lang['db_unsupported_feature'] = '特性不被您当前使用的数据库支持。';
$lang['db_unsupported_compression'] = '您选择的文件压缩格式不被服务器支持。';
$lang['db_filepath_error'] = '提交的文件路径无法写入。 ';
$lang['db_invalid_cache_path'] = '提交的缓存路径无效或无法写入。';
$lang['db_table_name_required'] = '操作需要指定表名。 ';
$lang['db_column_name_required'] = '操作需要指定列名。 ';
$lang['db_table_name_required'] = '操作需要指定表名。';
$lang['db_column_name_required'] = '操作需要指定列名。 ';
$lang['db_column_definition_required'] = '操作需要指定列定义。';
$lang['db_unable_to_set_charset'] = '无法设置字符集: %s';
$lang['db_error_heading'] = '数据库发生错误。';

查看文件

@ -15,6 +15,8 @@ $lang['form_validation_valid_email'] = '{field} 字段必须是一个有效的 E
$lang['form_validation_valid_emails'] = '{field} 字段包含的 E-mail 地址必须全部有效。';
$lang['form_validation_valid_url'] = '{field} 字段必须是一个有效的 URL。';
$lang['form_validation_valid_ip'] = '{field} 字段必须包含一个有效的 IP 地址。';
$lang['form_validation_valid_mac'] = ' {field} 字段必须包含一个有效的 MAC 地址。';
$lang['form_validation_valid_base64'] = ' {field} 字段必须包含一个有效的 base64 字符串。';
$lang['form_validation_min_length'] = '{field} 字段最少需要有 {param} 字的长度。';
$lang['form_validation_max_length'] = '{field} 字段不能超过 {param} 字的长度。';
$lang['form_validation_exact_length'] = '{field} 字段必须是 {param} 字的长度。';

查看文件

@ -16,6 +16,7 @@ $lang['imglib_unsupported_imagecreate'] = '你的服务器不支持 GD 函数,
$lang['imglib_gif_not_supported'] = 'GIF 格式由于版权问题一般不提供,如果可能请使用 JPG 格式或 PNG 格式。';
$lang['imglib_jpg_not_supported'] = 'JPG 格式不被支持。';
$lang['imglib_png_not_supported'] = 'PNG 格式不被支持。';
$lang['imglib_webp_not_supported'] = 'WEBP 格式不被支持。';
$lang['imglib_jpg_or_png_required'] = '设置中指定的图像缩放方法只能用于 JPG 格式或 PNG 格式。';
$lang['imglib_copy_error'] = '替换文件时发生错误。你的文件目录必须是可写的。';
$lang['imglib_rotate_unsupported'] = '服务器不支持图像旋转。';
@ -23,6 +24,7 @@ $lang['imglib_libpath_invalid'] = '图形库路径错误。在设置中必须指
$lang['imglib_image_process_failed'] = '图像处理错误。 请验证服务器支持指定的处理方法,并且图形库路径正确。';
$lang['imglib_rotation_angle_required'] = '必须指定旋转角度。';
$lang['imglib_invalid_path'] = '图像路径错误。';
$lang['imglib_invalid_image'] = '提供的图片不被支持。';
$lang['imglib_copy_failed'] = '图像复制错误。';
$lang['imglib_missing_font'] = '无法找到使用的字体。';
$lang['imglib_save_failed'] = '图像无法保存,请确定图像或目录可写。';

查看文件

@ -9,7 +9,7 @@
*/
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['migration_none_found'] = '不需迁移。 ';
$lang['migration_none_found'] = '不需迁移。';
$lang['migration_not_found'] = '无法根据版本号找到迁移方法: %s。';
$lang['migration_sequence_gap'] = '版本迁移存在鸿沟:%s。';
$lang['migration_multiple_version'] = '多个迁移对应同一版本号:%s。';

查看文件

@ -20,8 +20,8 @@ $lang['profiler_memory_usage'] = '内存使用';
$lang['profiler_config'] = '设置值';
$lang['profiler_session_data'] = 'SESSION 数据';
$lang['profiler_headers'] = 'HTTP 头';
$lang['profiler_no_db'] = '当前没有已经载入的数据库驱动。 ';
$lang['profiler_no_queries'] = '运行,无查询。 ';
$lang['profiler_no_db'] = '当前没有已经载入的数据库驱动。';
$lang['profiler_no_queries'] = '运行,无查询。';
$lang['profiler_no_post'] = 'POST 数据不存在。';
$lang['profiler_no_get'] = 'GET 数据不存在。';
$lang['profiler_no_uri'] = 'URI 数据不存在。';

查看文件

@ -9,18 +9,18 @@
*/
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['upload_userfile_not_set'] = '无法找到用户文件。 ';
$lang['upload_userfile_not_set'] = '无法找到用户文件。';
$lang['upload_file_exceeds_limit'] = '上传文件的大小超过 PHP 设置中指定的最大大小。';
$lang['upload_file_exceeds_form_limit'] = '上传文件的大小超过表单中指定的最大大小。';
$lang['upload_file_partial'] = '文件仅上传了一部分。 .';
$lang['upload_no_temp_directory'] = '无法找到临时文件夹。 .';
$lang['upload_unable_to_write_file'] = '无法写入文件。 Yeesssssss.';
$lang['upload_stopped_by_extension'] = '文件上传被扩展停止。 ';
$lang['upload_no_file_selected'] = '没有选择要上传的文件。 ';
$lang['upload_invalid_filetype'] = '禁止上传的文件类型. ';
$lang['upload_file_partial'] = '文件仅上传了一部分。';
$lang['upload_no_temp_directory'] = '无法找到临时文件夹。';
$lang['upload_unable_to_write_file'] = '无法写入文件。';
$lang['upload_stopped_by_extension'] = '文件上传被扩展停止。';
$lang['upload_no_file_selected'] = '没有选择要上传的文件。';
$lang['upload_invalid_filetype'] = '禁止上传的文件类型';
$lang['upload_invalid_filesize'] = '文件大小超过限制。';
$lang['upload_invalid_dimensions'] = '不允许的图像尺寸。';
$lang['upload_destination_error'] = '移动上传的文件至最终保存路径时发生错误。 ';
$lang['upload_destination_error'] = '移动上传的文件至最终保存路径时发生错误。';
$lang['upload_no_filepath'] = '上传路径无效。';
$lang['upload_no_file_types'] = '指定允许的文件类型。';
$lang['upload_bad_filename'] = '提交的文件名已经存在。';