这个提交包含在:
root 2023-03-02 14:57:00 +00:00
当前提交 aec2bd3cd8
共有 23 个文件被更改,包括 659 次插入128 次删除

查看文件

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

查看文件

@ -0,0 +1,59 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Continents extends CI_Controller {
public function index()
{
$this->load->model('user_model');
$this->load->model('bands');
$this->load->model('logbookadvanced_model');
$data['bands'] = $this->bands->get_worked_bands();
$data['modes'] = $this->logbookadvanced_model->get_modes();
if(!$this->user_model->authorize($this->config->item('auth_mode'))) {
if($this->user_model->validate_session()) {
$this->user_model->clear_session();
show_error('Access denied<p>Click <a href="'.site_url('user/login').'">here</a> to log in as another user', 403);
} else {
redirect('user/login');
}
}
// Render User Interface
// Set Page Title
$data['page_title'] = "Continents";
// Load Views
$this->load->view('interface_assets/header', $data);
$this->load->view('continents/index');
$this->load->view('interface_assets/footer');
}
public function get_continents() {
$searchCriteria = array(
'mode' => xss_clean($this->input->post('mode')),
'band' => xss_clean($this->input->post('band')),
);
$this->load->model('logbook_model');
$continentsstats = array();
$total_continents = $this->logbook_model->total_continents($searchCriteria);
$i = 0;
if ($total_continents) {
foreach($total_continents->result() as $qso_numbers) {
$continentsstats[$i]['cont'] = $qso_numbers->COL_CONT;
$continentsstats[$i++]['count'] = $qso_numbers->count;
}
}
header('Content-Type: application/json');
echo json_encode($continentsstats);
}
}

查看文件

@ -36,7 +36,7 @@ class Lookup extends CI_Controller {
$this->load->model('lookup_model');
$this->load->model('bands');
$data['bands'] = $this->bands->get_worked_bands();
$data['bands'] = $this->bands->get_worked_bands(xss_clean($this->input->post('type')));
$data['type'] = xss_clean($this->input->post('type'));
$data['dxcc'] = xss_clean($this->input->post('dxcc'));

查看文件

@ -104,6 +104,7 @@ class Statistics extends CI_Controller {
$modestats[$i++]['total'] = $this->logbook_model->total_fm();
$modestats[$i]['mode'] = 'digi';
$modestats[$i]['total'] = $this->logbook_model->total_digi();
usort($modestats, fn($a, $b) => $b['total'] <=> $a['total']);
header('Content-Type: application/json');

查看文件

@ -32,8 +32,8 @@ class Timeline extends CI_Controller {
$mode = 'All';
}
if ($this->input->post('awardradio') != NULL) {
$award = $this->input->post('awardradio');
if ($this->input->post('award') != NULL) {
$award = $this->input->post('award');
}
else {
$award = 'dxcc';
@ -77,13 +77,14 @@ class Timeline extends CI_Controller {
public function details() {
$this->load->model('logbook_model');
$this->load->model('timeline_model');
$querystring = str_replace('"', "", $this->input->post("Querystring"));
$band = str_replace('"', "", $this->input->post("Band"));
$mode = str_replace('"', "", $this->input->post("Mode"));
$type = str_replace('"', "", $this->input->post("Type"));
$data['results'] = $this->logbook_model->timeline_qso_details($querystring, $band, $mode, $type);
$data['results'] = $this->timeline_model->timeline_qso_details($querystring, $band, $mode, $type);
switch($type) {
@ -100,6 +101,9 @@ class Timeline extends CI_Controller {
case 'waz' : $data['page_title'] = "Log View - WAZ";
$data['filter'] = "CQ zone ". $querystring;
break;
case 'vucc' : $data['page_title'] = "Log View - VUCC";
$data['filter'] = "Gridsquare ". $querystring;
break;
}
if ($band != "All") {

查看文件

@ -16,7 +16,7 @@ $lang['general_word_datetime'] = 'Дата/Время';
$lang['general_word_none'] = '-';
$lang['general_word_name'] = 'Имя';
$lang['general_word_location'] = 'QTH';
$lang['general_word_comment'] = 'Коммент.';
$lang['general_word_comment'] = 'Комментарий';
$lang['general_word_general'] = 'Общее';
$lang['general_word_satellite'] = 'Спутник';
$lang['general_word_satellite_short'] = 'Спутн.';
@ -97,15 +97,18 @@ $lang['gen_hamradio_logbook'] = 'Журнал';
$lang['gen_hamradio_cq_zone'] = 'CQ Zone';
$lang['gen_hamradio_dxcc'] = 'DXCC';
$lang['gen_hamradio_continent'] = 'Континент';
$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_pota'] = 'POTA';
$lang['gen_hamradio_gridsquare'] = 'Квадрат';
$lang['gen_hamradio_operator'] = 'Оператор';
@ -125,3 +128,11 @@ $lang['gen_this_qso_was_confirmed_on'] = 'Это QSO было подтвержд
$lang['error_no_logbook_found'] = 'Журнал не найден. Вам необходимо опрелелить журнал в разделе Журналы станций! Тут:';
$lang['copy_to_clipboard'] = 'Скопировать в буфер обмена';
$lang['africa'] = 'Африка';
$lang['antarctica'] = 'Антарктика';
$lang['asia'] = 'Азия';
$lang['europe'] = 'Европа';
$lang['northamerica'] = 'Северная Америка';
$lang['oceania'] = 'Океания';
$lang['southamerica'] = 'Южная Америка';

查看文件

@ -4,15 +4,15 @@ 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'] = 'Available Certificates';
$lang['lotw_title_information'] = 'Information';
$lang['lotw_title_upload_p12_cert'] = 'Upload Logbook of the World .p12 Certificate';
$lang['lotw_title_export_p12_file_instruction'] = 'Export .p12 File Instructions';
$lang['lotw_title_adif_import'] = 'ADIF Import';
$lang['lotw_title_adif_import_options'] = 'Import Options';
$lang['lotw_title_available_cert'] = 'Имеющиеся сертификаты';
$lang['lotw_title_information'] = 'Информация';
$lang['lotw_title_upload_p12_cert'] = 'Загрузка 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'] = 'Please be aware that LoTW Sync is BETA, see wiki for help.';
$lang['lotw_no_certs_uploaded'] = 'Вам необходимо загрузить сертификат LoTW в формате p12 для использования этих функций.';
$lang['lotw_beta_warning'] = 'Обратите внимание, что синхронизация с LoTW пока в статусе бета, подробнее в wiki.';
$lang['lotw_no_certs_uploaded'] = 'Вам необходимо загрузить сертификат LoTW в формате p12 для использования этих функций.';
$lang['lotw_date_created'] = 'Дата создания';
$lang['lotw_date_expires'] = 'Дата окончания срока действия';
@ -22,6 +22,7 @@ $lang['lotw_status'] = 'Статус';
$lang['lotw_options'] = 'Опции';
$lang['lotw_valid'] = 'Действует';
$lang['lotw_expired'] = 'Истёк';
$lang['lotw_expiring'] = 'Истекает';
$lang['lotw_not_synced'] = 'Не синхронизирован';
$lang['lotw_certificate_dxcc'] = 'Сертификат DXCC';
@ -51,3 +52,7 @@ $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,15 @@
<?php
// Create migration that makes the submode column in the logbook table an index
class Migration_Create_index_for_colsubmode extends CI_Migration {
public function up() {
$this->db->query("ALTER TABLE `".$this->config->item('table_name')."` ADD INDEX (`COL_SUBMODE`)");
}
public function down() {
$this->db->query("ALTER TABLE `".$this->config->item('table_name')."` DROP INDEX (`COL_SUBMODE`)");
}
}
?>

查看文件

@ -175,8 +175,8 @@ class Logbook_model extends CI_Model {
'COL_TX_PWR' => $tx_power,
'COL_STX' => $stx,
'COL_SRX' => $srx,
'COL_STX_STRING' => strtoupper(trim($stx_string)),
'COL_SRX_STRING' => strtoupper(trim($srx_string)),
'COL_STX_STRING' => $stx_string == null ? '' : strtoupper(trim($stx_string)),
'COL_SRX_STRING' => $srx_string == null ? '' : strtoupper(trim($srx_string)),
'COL_CONTEST_ID' => $contestid,
'COL_NR_BURSTS' => null,
'COL_NR_PINGS' => null,
@ -399,38 +399,6 @@ class Logbook_model extends CI_Model {
return $this->db->query($sql);
}
public function timeline_qso_details($querystring, $band, $mode, $type){
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
if ($band != 'All') {
if ($band == 'SAT') {
$this->db->where('col_prop_mode', $band);
} else {
$this->db->where('COL_PROP_MODE !=', 'SAT');
$this->db->where('col_band', $band);
}
}
if ($mode != 'All') {
$this->db->where('col_mode', $mode);
}
$this->db->where_in('station_profile.station_id', $logbooks_locations_array);
switch($type) {
case 'dxcc': $this->db->where('COL_DXCC', $querystring); break;
case 'was': $this->db->where('COL_STATE', $querystring); break;
case 'iota': $this->db->where('COL_IOTA', $querystring); break;
case 'waz': $this->db->where('COL_CQZ', $querystring); break;
}
return $this->db->get($this->config->item('table_name'));
}
public function activator_details($call, $band, $leogeo){
$CI =& get_instance();
$CI->load->model('logbooks_model');
@ -1624,12 +1592,52 @@ class Logbook_model extends CI_Model {
$this->db->where_in('station_id', $logbooks_locations_array);
$this->db->where('COL_SAT_NAME is not null');
$this->db->where('COL_SAT_NAME !=', '');
$this->db->order_by('count DESC');
$this->db->group_by('COL_SAT_NAME');
$query = $this->db->get($this->config->item('table_name'));
return $query;
}
/* Return total number of QSOs per continent */
function total_continents($searchCriteria) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$this->db->select('COL_CONT, COUNT( * ) as count', FALSE);
$this->db->where_in('station_id', $logbooks_locations_array);
$this->db->where('COL_CONT is not null');
$this->db->where('COL_CONT !=', '');
if ($searchCriteria['mode'] !== '') {
$this->db->group_start();
$this->db->where('COL_MODE', $searchCriteria['mode']);
$this->db->or_where('COL_SUBMODE', $searchCriteria['mode']);
$this->db->group_end();
}
if ($searchCriteria['band'] !== '') {
if($searchCriteria['band'] != "SAT") {
$this->db->where('COL_BAND', $searchCriteria['band']);
$this->db->where('COL_PROP_MODE != "SAT"');
} else {
$this->db->where('COL_PROP_MODE', 'SAT');
}
}
$this->db->order_by('count DESC');
$this->db->group_by('COL_CONT');
$query = $this->db->get($this->config->item('table_name'));
return $query;
}
/* Return total number of CW QSOs */
function total_cw() {

查看文件

@ -211,7 +211,10 @@ class Logbookadvanced_model extends CI_Model {
if ($mode->col_submode == null || $mode->col_submode == "") {
array_push($modes, $mode->col_mode);
} else {
array_push($modes, $mode->col_submode);
// Make sure we don't add LSB or USB as submodes in the array list
if ($mode->col_mode != "SSB") {
array_push($modes, $mode->col_submode);
}
}
}

查看文件

@ -19,13 +19,17 @@ class Lookup_model extends CI_Model{
// Populating array with worked band/mode combinations
$worked = $this->getQueryData($queryinfo, 'worked');
foreach ($worked as $w) {
$resultArray[$w->col_mode][$w->col_band] = 'W';
if(in_array($w->col_band, $queryinfo['bands'])) {
$resultArray[$w->col_mode][$w->col_band] = 'W';
}
}
// Populating array with confirmed band/mode combinations
$confirmed = $this->getQueryData($queryinfo, 'confirmed');
foreach ($confirmed as $c) {
$resultArray[$c->col_mode][$c->col_band] = 'C';
if(in_array($c->col_band, $queryinfo['bands'])) {
$resultArray[$c->col_mode][$c->col_band] = 'C';
}
}
return $resultArray;
@ -48,8 +52,8 @@ class Lookup_model extends CI_Model{
switch ($queryinfo['type']) {
case 'dxcc': $sqlquerytypestring .= " and col_dxcc = " . $queryinfo['dxcc']; break;
case 'iota': $sqlquerytypestring .= " and col_iota = '" . $queryinfo['iota'] . "'"; break;
case 'grid': $sqlquerytypestring .= " and (col_gridsquare like '%" . $fixedgrid . "%' or col_vucc_grids like '%" . $fixedgrid . "%')" ; break;
case 'cqz': $sqlquerytypestring .= " and col_cqz = " . $queryinfo['cqz']; break;
case 'vucc': $sqlquerytypestring .= " and (col_gridsquare like '%" . $fixedgrid . "%' or col_vucc_grids like '%" . $fixedgrid . "%')" ; break;
case 'cq': $sqlquerytypestring .= " and col_cqz = " . $queryinfo['cqz']; break;
case 'was': $sqlquerytypestring .= " and col_state = '" . $queryinfo['was'] . "' and COL_DXCC in ('291', '6', '110')";; break;
case 'sota': $sqlquerytypestring .= " and col_sota_ref = '" . $queryinfo['sota'] . "'"; break;
case 'wwff': $sqlquerytypestring .= " and col_sig = 'WWFF' and col_sig_info = '" . $queryinfo['wwff'] . "'"; break;

查看文件

@ -19,6 +19,7 @@ class Timeline_model extends CI_Model
case 'was': $result = $this->get_timeline_was($band, $mode, $location_list, $qsl, $lotw, $eqsl); break;
case 'iota': $result = $this->get_timeline_iota($band, $mode, $location_list, $qsl, $lotw, $eqsl); break;
case 'waz': $result = $this->get_timeline_waz($band, $mode, $location_list, $qsl, $lotw, $eqsl); break;
case 'vucc': $result = $this->get_timeline_vucc($band, $mode, $location_list, $qsl, $lotw, $eqsl); break;
}
return $result;
@ -178,5 +179,159 @@ class Timeline_model extends CI_Model
}
return $sql;
}
public function get_timeline_vucc3($band, $mode, $location_list, $qsl, $lotw, $eqsl) {
// $sql = "select min(date(COL_TIME_ON)) date, col_gridsquare from "
$sql = "select min(date(COL_TIME_ON)) date, upper(substring(col_gridsquare, 1, 4)) gridsquare from "
.$this->config->item('table_name'). " thcv
where station_id in (" . $location_list . ")";
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $band . "'";
}
}
if ($mode != 'All') {
$sql .= " and col_mode ='" . $mode . "'";
}
$sql .= $this->addQslToQuery($qsl, $lotw, $eqsl);
$sql .= " and col_gridsquare <> '' group by upper(substring(col_gridsquare, 1, 4))
order by date desc";
$query = $this->db->query($sql);
$this->vucc_shit($band, $mode, $location_list, $qsl, $lotw, $eqsl);
return $query->result();
}
public function timeline_qso_details($querystring, $band, $mode, $type){
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
if ($band != 'All') {
if ($band == 'SAT') {
$this->db->where('col_prop_mode', $band);
} else {
$this->db->where('COL_PROP_MODE !=', 'SAT');
$this->db->where('col_band', $band);
}
}
if ($mode != 'All') {
$this->db->where('col_mode', $mode);
}
$this->db->where_in('station_profile.station_id', $logbooks_locations_array);
switch($type) {
case 'dxcc': $this->db->where('COL_DXCC', $querystring); break;
case 'was': $this->db->where('COL_STATE', $querystring); break;
case 'iota': $this->db->where('COL_IOTA', $querystring); break;
case 'waz': $this->db->where('COL_CQZ', $querystring); break;
case 'vucc': $this->db->group_start(); $this->db->like('COL_GRIDSQUARE', $querystring); $this->db->or_like('COL_VUCC_GRIDS',$querystring); $this->db->group_end();break;
}
return $this->db->get($this->config->item('table_name'));
}
public function get_timeline_vucc($band, $mode, $location_list, $qsl, $lotw, $eqsl) {
$timeline = array();
$col_gridsquare = $this->get_gridsquare($band, $mode, $location_list, $qsl, $lotw, $eqsl);
foreach ($col_gridsquare as $grid) {
$timeline[] = array(
'gridsquare' => $grid->gridsquare,
'date' => $grid->date);
}
$col_vucc_grids = $this->get_vucc_grids($band, $mode, $location_list, $qsl, $lotw, $eqsl);
foreach ($col_vucc_grids as $gridSplit) {
$grids = explode(",", $gridSplit->gridsquare);
foreach($grids as $key) {
$grid_four = strtoupper(substr(trim($key),0,4));
if (!array_search($grid_four, array_column($timeline, 'gridsquare'))) {
$timeline[] = array(
'gridsquare' => $grid_four,
'date' => $gridSplit->date);
}
}
}
usort($timeline, function($a, $b) {
return $b['date'] <=> $a['date'];
});
return $timeline;
}
public function get_gridsquare($band, $mode, $location_list, $qsl, $lotw, $eqsl) {
// $sql = "select min(date(COL_TIME_ON)) date, col_gridsquare from "
$sql = "select min(date(COL_TIME_ON)) date, upper(substring(col_gridsquare, 1, 4)) gridsquare from "
.$this->config->item('table_name'). " thcv
where station_id in (" . $location_list . ")";
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $band . "'";
}
}
if ($mode != 'All') {
$sql .= " and col_mode ='" . $mode . "'";
}
$sql .= $this->addQslToQuery($qsl, $lotw, $eqsl);
$sql .= " and col_gridsquare <> '' group by upper(substring(col_gridsquare, 1, 4))
order by date desc";
$query = $this->db->query($sql);
return $query->result();
}
public function get_vucc_grids($band, $mode, $location_list, $qsl, $lotw, $eqsl) {
// $sql = "select min(date(COL_TIME_ON)) date, col_gridsquare from "
$sql = "select date(COL_TIME_ON) date, upper(col_vucc_grids) gridsquare from "
.$this->config->item('table_name'). " thcv
where station_id in (" . $location_list . ")";
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $band . "'";
}
}
if ($mode != 'All') {
$sql .= " and col_mode ='" . $mode . "'";
}
$sql .= $this->addQslToQuery($qsl, $lotw, $eqsl);
$sql .= " and col_vucc_grids <> ''";
$query = $this->db->query($sql);
return $query->result();
}
}

查看文件

@ -0,0 +1,70 @@
<style>
#continentChart {
margin: 0 auto;
}
</style>
<div class="container statistics">
<h2>
<?php echo $page_title; ?>
</h2>
<br>
<div hidden class="tabs">
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="continents-tab" data-toggle="tab" href="#continents" role="tab"
aria-controls="continents" aria-selected="true">No of QSOs</a>
</li>
</ul>
</div>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade active show" id="continents" role="tabpanel" aria-labelledby="continents-tab">
<br />
<form id="searchForm" name="searchForm" action="<?php echo base_url()."index.php/continents/get_continents";?>" method="post">
<div class="form-row">
<div class="form-group col-lg-2">
<label class="form-label" for="band">Band</label>
<select id="band" name="band" class="form-control form-control-sm">
<option value="">All</option>
<?php foreach($bands as $band){ ?>
<option value="<?php echo htmlentities($band);?>"><?php echo htmlspecialchars($band);?> </option>
<?php } ?>
</select>
</div>
<div class="form-group col-lg-2">
<label class="form-label" for="mode">Mode</label>
<select id="mode" name="mode" class="form-control form-control-sm">
<option value="">All</option>
<?php foreach($modes as $modeId => $mode){ ?>
<option value="<?php echo htmlspecialchars($mode);?>"><?php echo htmlspecialchars($mode);?></option>
<?php } ?>
</select>
</div>
<div class="form-group col-lg-2 col-md-3 col-sm-3 col-xl-21">
<label>&nbsp;</label><br>
<button type="submit" class="btn btn-sm btn-primary" id="searchButton">Search</button>
<button type="reset" class="btn btn-sm btn-danger" id="resetButton">Reset</button>
</div>
</div>
</form>
<div style="display: flex;" id="continentContainer">
<div style="flex: 1;"><canvas id="continentChart" width="500" height="500"></canvas></div>
<div style="flex: 1;" id="continentTable">
<table style="width:100%" class="continentstable table table-sm table-bordered table-hover table-striped table-condensed text-center">
<thead>
<tr>
<th>#</th>
<th>Continent</th>
<th># of QSO's worked</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>

查看文件

@ -64,6 +64,12 @@ function load_was_map() {
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/sections/statistics.js"></script>
<?php } ?>
<?php if ($this->uri->segment(1) == "continents") { ?>
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/chart.js"></script>
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/chartjs-plugin-piechart-outlabels.js"></script>
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/sections/continents.js"></script>
<?php } ?>
<?php if ($this->uri->segment(1) == "adif" || $this->uri->segment(1) == "qrz") { ?>
<!-- Javascript used for ADIF Import and Export Areas -->
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/moment.min.js"></script>

查看文件

@ -110,6 +110,8 @@
<a class="dropdown-item" href="<?php echo site_url('timeplotter');?>" title="View time when worked"><i class="fas fa-chart-area"></i> Timeplotter</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('map/custom');?>" title="Custom Maps of QSOs"><i class="fas fa-globe-europe"></i> Custom Maps</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('continents');?>" title="Continents"><i class="fas fa-globe-europe"></i> Continents</a>
</div>
</li>

查看文件

@ -1,8 +1,8 @@
<form method="post" class="form-inline">
<select id="quicklookuptype" name="type" class="form-control custom-select">
<option value="cqz">CQ Zone</option>
<option value="cq">CQ Zone</option>
<option value="dxcc">DXCC</option>
<option value="grid">Gridsquare</option>
<option value="vucc">Gridsquare</option>
<option value="iota">IOTA</option>
<option value="sota">SOTA</option>
<option value="was">US State</option>

查看文件

@ -17,8 +17,8 @@ foreach ($result as $mode => $value) {
switch($type) {
case 'dxcc': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $dxcc).'","' . $key . '","' . $mode . '","DXCC2")\'>' . $val . '</a>'; break;
case 'iota': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $iota).'","' . $key . '","' . $mode . '","IOTA")\'>' . $val . '</a>'; break;
case 'grid': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $grid).'","' . $key . '","' . $mode . '","VUCC")\'>' . $val . '</a>'; break;
case 'cqz': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $cqz).'","' . $key . '","' . $mode . '","CQZone")\'>' . $val . '</a>'; break;
case 'vucc': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $grid).'","' . $key . '","' . $mode . '","VUCC")\'>' . $val . '</a>'; break;
case 'cq': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $cqz).'","' . $key . '","' . $mode . '","CQZone")\'>' . $val . '</a>'; break;
case 'was': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $was).'","' . $key . '","' . $mode . '","WAS")\'>' . $val . '</a>'; break;
case 'sota': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $sota).'","' . $key . '","' . $mode . '","SOTA")\'>' . $val . '</a>'; break;
case 'wwff': $linkinfo = '<a href=\'javascript:displayContacts("'.str_replace("&", "%26", $wwff).'","' . $key . '","' . $mode . '","WWFF")\'>' . $val . '</a>'; break;

查看文件

@ -38,39 +38,18 @@
</div>
<div class="form-group row">
<label class="col-md-1 control-label" for="radio">Award</label>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="radio" name="awardradio" id="dxcc" value="dxcc" <?php if ($this->input->post('awardradio') == 'dxcc' || $this->input->method() !== 'post') echo ' checked'?>>
<label class="form-check-label" for="dxcc">
DX Century Club (DXCC)
</label>
<label class="col-md-1 control-label" for="award">Award</label>
<div class="col-md-3">
<select id="award" name="award" class="form-control custom-select">
<option value="dxcc" <?php if ($this->input->post('award') == "dxcc") echo ' selected'; ?> >DX Century Club (DXCC)</option>
<option value="was" <?php if ($this->input->post('award') == "was") echo ' selected'; ?> >Worked All States (WAS)</option>
<option value="iota" <?php if ($this->input->post('award') == "iota") echo ' selected'; ?> >Islands On The Air (IOTA)</option>
<option value="waz" <?php if ($this->input->post('award') == "waz") echo ' selected'; ?> >Worked All Zones (WAZ)</option>
<option value="vucc" <?php if ($this->input->post('award') == "vucc") echo ' selected'; ?> >VHF / UHF Century Club (VUCC)</option>
</select>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="awardradio" id="was" value="was" <?php if ($this->input->post('awardradio') == 'was') echo ' checked'?>>
<label class="form-check-label" for="was">
Worked All States (WAS)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="awardradio" id="iota" value="iota" <?php if ($this->input->post('awardradio') == 'iota') echo ' checked'?>>
<label class="form-check-label" for="iota">
Islands On The Air (IOTA)
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="awardradio" id="waz" value="waz" <?php if ($this->input->post('awardradio') == 'waz') echo ' checked'?>>
<label class="form-check-label" for="waz">
Worked All Zones (WAZ)
</label>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-md-1 control-label">Confirmation</div>
<div class="col-md-10">
<div class="col-md-3">
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="qsl" value="1" id="qsl" <?php if ($this->input->post('qsl')) echo ' checked="checked"'; ?> >
<label class="form-check-label" for="qsl">QSL</label>
@ -109,11 +88,12 @@
<?php
if ($timeline_array) {
switch ($this->input->post('awardradio')) {
case 'dxcc': $result = write_dxcc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('awardradio')); break;
case 'was': $result = write_was_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('awardradio')); break;
case 'iota': $result = write_iota_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('awardradio')); break;
case 'waz': $result = write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('awardradio')); break;
switch ($this->input->post('award')) {
case 'dxcc': $result = write_dxcc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break;
case 'was': $result = write_was_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break;
case 'iota': $result = write_iota_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break;
case 'waz': $result = write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break;
case 'vucc': $result = write_vucc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $this->input->post('award')); break;
}
}
else {
@ -236,3 +216,28 @@ function write_waz_timeline($timeline_array, $custom_date_format, $bandselect, $
}
echo '</tfoot></table></div>';
}
function write_vucc_timeline($timeline_array, $custom_date_format, $bandselect, $modeselect, $award) {
$i = count($timeline_array);
echo '<table style="width:100%" class="table table-sm timelinetable table-bordered table-hover table-striped table-condensed text-center">
<thead>
<tr>
<td>#</td>
<td>Date</td>
<td>Gridsquare</td>
<td>Show QSOs</td>
</tr>
</thead>
<tbody>';
foreach ($timeline_array as $line) {
$date_as_timestamp = strtotime($line['date']);
echo '<tr>
<td>' . $i-- . '</td>
<td>' . date($custom_date_format, $date_as_timestamp) . '</td>
<td>' . $line['gridsquare'] . '</td>
<td><a href=javascript:displayTimelineContacts("' . $line['gridsquare'] . '","'. $bandselect . '","'. $modeselect . '","' . $award .'")>Show</a></td>
</tr>';
}
echo '</tfoot></table></div>';
}

查看文件

@ -1,14 +1,39 @@
<div id="container" class="container mx-auto pt-5" style="max-width:400px">
<div class="row">
<div class="col-12">
<div class="panel panel-default">
<div class="panel-body">
<div class="text-center">
<h3><i class="fa fa-lock fa-4x"></i></h3>
<h2 class="text-center">Forgot Password?</h2>
<p>You can reset your password here.</p>
<div class="panel-body">
<style>
html,
body {
height: 100%;
}
body {
display: flex;
align-items: center;
padding-top: 40px;
padding-bottom: 40px;
}
.form-forgot {
width: 100%;
max-width: 430px;
padding: 15px;
margin: auto;
}
input[type="email"] {
margin-bottom: -1px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
</style>
<main class="form-forgot">
<img src="<?php echo base_url()?>/CloudLog_logo.png" class="mx-auto d-block" alt="" style="width:100px;height:100px;">
<div class="my-2 bg-body rounded-0 shadow-sm card mb-2 shadow-sm">
<div class="card-body">
<div class="text-center">
<h3 class="text-center">Forgot Password? <i class="fa fa-lock"></i></h3>
<p>You can reset your password here.</p>
<div class="panel-body">
<?php if(validation_errors() != ''): ?>
<div class="alert alert-danger" role="alert">
<?php echo validation_errors(); ?>
@ -16,23 +41,20 @@
<?php endif; ?>
<form id="register-form" role="form" autocomplete="off" class="form" method="post" action="<?php echo site_url('user/forgot_password'); ?>">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-envelope color-blue"></i></span>
<input id="email" name="email" placeholder="email address" class="form-control" type="email">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-envelope color-blue"></i></span>
<input id="email" name="email" placeholder="email address" class="form-control" type="email">
</div>
</div>
</div>
<div class="form-group">
<input name="recover-submit" class="btn btn-lg btn-primary btn-block" value="Reset Password" type="submit">
</div>
<input type="hidden" class="hide" name="token" id="token" value="">
<div class="form-group">
<input name="recover-submit" class="w-100 btn btn-primary btn-block" value="Reset Password" type="submit">
</div>
<input type="hidden" class="hide" name="token" id="token" value="">
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>

查看文件

@ -1,14 +1,17 @@
<div class="container">
<br>
<?php if($this->session->flashdata('notice')) { ?>
<div id="message" >
<?php echo $this->session->flashdata('notice'); ?>
</div>
<?php } ?>
<h2><?php echo $page_title; ?></h2>
<?php if($this->session->flashdata('notice')) { ?>
<!-- Display Message -->
<div class="alert alert-info" role="alert">
<?php echo $this->session->flashdata('notice'); ?>
</div>
<?php } ?>
<div class="card">
<div class="card-header">
User List

查看文件

@ -375,13 +375,13 @@ function spawnLookupModal() {
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
$('#quicklookuptext').hide();
} else if (type == "grid" || type == "sota" || type == "wwff") {
} else if (type == "vucc" || type == "sota" || type == "wwff") {
$('#quicklookuptext').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();
$('#quicklookupcqz').hide();
$('#quicklookupwas').hide();
} else if (type == "cqz") {
} else if (type == "cq") {
$('#quicklookupcqz').show();
$('#quicklookupiota').hide();
$('#quicklookupdxcc').hide();

查看文件

@ -0,0 +1,157 @@
$(document).ready(function () {
// Needed for continentstable header fix, will be squished without
$("a[href='#continents']").on('shown.bs.tab', function(e) {
$(".continentstable").DataTable().columns.adjust();
});
$('#searchForm').submit(function (e) {
$('#searchButton').prop("disabled", true);
$.ajax({
url: this.action,
type: 'post',
data: {
mode: this.mode.value,
band: this.band.value,
},
dataType: 'json',
success: function (data) {
$('#searchButton').prop("disabled", false);
totalContinentQsos(data);
},
error: function (data) {
$('#searchButton').prop("disabled", false);
BootstrapDialog.alert({
title: 'ERROR',
message: 'An error ocurred while making the request',
type: BootstrapDialog.TYPE_DANGER,
closable: false,
draggable: false,
callback: function (result) {
}
});
},
});
return false;
});
$('#searchForm').submit();
});
function totalContinentQsos(data) {
// using this to change color of legend and label according to background color
var color = ifDarkModeThemeReturn('white', 'grey');
if (data.length > 0) {
$('.continentstable > tbody').empty();
$('.tabs').removeAttr('hidden');
var labels = [];
var dataQso = [];
var totalQso = Number(0);
var $myTable = $('.continentstable');
var i = 1;
// building the rows in the table
var rowElements = data.map(function (row) {
var $row = $('<tr></tr>');
var $iterator = $('<td></td>').html(i++);
var $type = $('<td></td>').html(row.cont);
var $content = $('<td></td>').html(row.count);
$row.append($iterator, $type, $content);
return $row;
});
// finally inserting the rows
$myTable.append(rowElements);
$.each(data, function () {
labels.push(this.cont);
dataQso.push(this.count);
totalQso = Number(totalQso) + Number(this.count);
});
const COLORS = ["#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395", "#994499"]
let chartStatus = Chart.getChart("continentChart"); // <canvas> id
if (chartStatus != undefined) {
chartStatus.destroy();
}
var ctx = document.getElementById("continentChart").getContext('2d');
var myChart = new Chart(ctx, {
plugins: [ChartPieChartOutlabels],
type: 'doughnut',
data: {
labels: labels,
datasets: [{
borderColor: 'rgba(54, 162, 235, 1)',
label: 'Number of QSO\'s worked',
data: dataQso,
backgroundColor: ["#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00", "#b82e2e", "#316395", "#994499"],
borderWidth: 1,
labels: labels,
}]
},
options: {
layout: {
padding: 100
},
title: {
fontColor: color,
fullSize: true,
},
responsive: false,
maintainAspectRatio: true,
plugins: {
legend: {
display: false,
labels: {
boxWidth: 15,
color: color,
font: {
size: 14,
}
},
position: 'right',
align: "middle"
},
outlabels: {
backgroundColor: COLORS,
borderColor: COLORS,
borderRadius: 2, // Border radius of Label
borderWidth: 2, // Thickness of border
color: 'white',
stretch: 10,
padding: 0,
font: {
resizable: true,
minSize: 12,
maxSize: 25,
family: Chart.defaults.font.family,
size: Chart.defaults.font.size,
style: Chart.defaults.font.style,
lineHeight: Chart.defaults.font.lineHeight,
},
zoomOutPercentage: 100,
textAlign: 'start',
backgroundColor: COLORS,
}
}
}
});
// using this to change color of csv-button if dark mode is chosen
var background = $('body').css("background-color");
if (background != ('rgb(255, 255, 255)')) {
$(".buttons-csv").css("color", "white");
}
}
}

查看文件

@ -408,7 +408,6 @@ $("#callsign").focusout(function() {
if(result.dxcc.entity != undefined) {
$('#country').val(convert_case(result.dxcc.entity));
$('#callsign_info').text(convert_case(result.dxcc.entity));
getDxccResult(result.dxcc.adif, convert_case(result.dxcc.entity));
if($("#sat_name" ).val() != "") {
//logbook/jsonlookupgrid/io77/SAT/0/0
@ -452,6 +451,8 @@ $("#callsign").focusout(function() {
}
changebadge(result.dxcc.entity);
getDxccResult(result.dxcc.adif, convert_case(result.dxcc.entity));
}
if(result.lotw_member == "active") {