Tag Cloudlog as 2.4.10

这个提交包含在:
Peter Goodhall 2023-10-03 14:00:52 +01:00 提交者 GitHub
当前提交 717716283d
找不到此签名对应的密钥
GPG 密钥 ID: 4AEE18F83AFDEB23
共有 45 个文件被更改,包括 1130 次插入93 次删除

查看文件

@ -22,7 +22,7 @@ $config['migration_enabled'] = TRUE;
|
*/
$config['migration_version'] = 143;
$config['migration_version'] = 144;
/*
|--------------------------------------------------------------------------

查看文件

@ -0,0 +1,191 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Activated_gridmap extends CI_Controller {
function __construct() {
parent::__construct();
}
public function index() {
$data['page_title'] = "Activated Gridsquare Map";
$this->load->model('bands');
$this->load->model('activated_gridmap_model');
$this->load->model('stations');
$data['homegrid'] = explode(',', $this->stations->find_gridsquare());
$data['modes'] = $this->activated_gridmap_model->get_worked_modes();
$data['bands'] = $this->bands->get_worked_bands();
$data['sats_available'] = $this->bands->get_worked_sats();
$data['user_gridmap_default_band'] = $this->session->userdata('user_gridmap_default_band');
$data['user_gridmap_confirmation'] = $this->session->userdata('user_gridmap_confirmation');
$data['layer'] = $this->optionslib->get_option('option_map_tile_server');
$data['attribution'] = $this->optionslib->get_option('option_map_tile_server_copyright');
$data['gridsquares_gridsquares'] = lang('gridsquares_gridsquares');
$data['gridsquares_gridsquares_confirmed'] = lang('gridsquares_gridsquares_confirmed');
$data['gridsquares_gridsquares_not_confirmed'] = lang('gridsquares_gridsquares_not_confirmed');
$data['gridsquares_gridsquares_total_activated'] = lang('gridsquares_gridsquares_total_activated');
$footerData = [];
$footerData['scripts'] = [
'assets/js/leaflet/geocoding.js',
'assets/js/leaflet/L.MaidenheadColouredGridMap.js',
'assets/js/sections/gridmap.js?'
];
$this->load->view('interface_assets/header', $data);
$this->load->view('activated_gridmap/index');
$this->load->view('interface_assets/footer', $footerData);
}
public function getGridsjs() {
$band = $this->security->xss_clean($this->input->post('band'));
$mode = $this->security->xss_clean($this->input->post('mode'));
$qsl = $this->security->xss_clean($this->input->post('qsl'));
$lotw = $this->security->xss_clean($this->input->post('lotw'));
$eqsl = $this->security->xss_clean($this->input->post('eqsl'));
$sat = $this->security->xss_clean($this->input->post('sat'));
$this->load->model('activated_gridmap_model');
$array_grid_2char = array();
$array_grid_4char = array();
$array_grid_6char = array();
$array_grid_2char_confirmed = array();
$array_grid_4char_confirmed = array();
$array_grid_6char_confirmed = array();
$grid_2char = "";
$grid_4char = "";
$grid_6char = "";
$grid_2char_confirmed = "";
$grid_4char_confirmed = "";
$grid_6char_confirmed = "";
$query = $this->activated_gridmap_model->get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl, $sat);
if ($query && $query->num_rows() > 0) {
foreach ($query->result() as $row) {
$gridlist = explode(',', $row->GRID_SQUARES);
foreach ($gridlist as $grid) {
$grid_2char_confirmed = strtoupper(substr($grid,0,2));
$grid_4char_confirmed = strtoupper(substr($grid,0,4));
if ($this->config->item('map_6digit_grids')) {
$grid_6char_confirmed = strtoupper(substr($grid,0,6));
}
// Check if 2 Char is in array
if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
}
if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
}
if ($this->config->item('map_6digit_grids')) {
if(!in_array($grid_6char_confirmed, $array_grid_6char_confirmed)){
array_push($array_grid_6char_confirmed, $grid_6char_confirmed);
}
}
}
}
}
$query = $this->activated_gridmap_model->get_band($band, $mode, $qsl, $lotw, $eqsl, $sat);
if ($query && $query->num_rows() > 0) {
foreach ($query->result() as $row) {
$gridlist = explode(',', $row->GRID_SQUARES);
foreach ($gridlist as $grid) {
$grid_two = strtoupper(substr($grid,0,2));
$grid_four = strtoupper(substr($grid,0,4));
if ($this->config->item('map_6digit_grids')) {
$grid_six = strtoupper(substr($grid,0,6));
}
// Check if 2 Char is in array
if(!in_array($grid_two, $array_grid_2char)){
array_push($array_grid_2char, $grid_two);
}
if(!in_array($grid_four, $array_grid_4char)){
array_push($array_grid_4char, $grid_four);
}
if ($this->config->item('map_6digit_grids')) {
if(!in_array($grid_six, $array_grid_6char)){
array_push($array_grid_6char, $grid_six);
}
}
}
}
}
$query_vucc = $this->activated_gridmap_model->get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $sat);
if ($query_vucc && $query_vucc->num_rows() > 0) {
foreach ($query_vucc->result() as $row) {
$grids = explode(",", $row->COL_VUCC_GRIDS);
foreach($grids as $key) {
$grid_two = strtoupper(substr($key,0,2));
$grid_four = strtoupper(substr($key,0,4));
// Check if 2 Char is in array
if(!in_array($grid_two, $array_grid_2char)){
array_push($array_grid_2char, $grid_two);
}
if(!in_array($grid_four, $array_grid_4char)){
array_push($array_grid_4char, $grid_four);
}
}
}
}
// // Confirmed Squares
$query_vucc = $this->activated_gridmap_model->get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $sat);
if ($query_vucc && $query_vucc->num_rows() > 0) {
foreach ($query_vucc->result() as $row) {
$grids = explode(",", $row->COL_VUCC_GRIDS);
foreach($grids as $key) {
$grid_2char_confirmed = strtoupper(substr($key,0,2));
$grid_4char_confirmed = strtoupper(substr($key,0,4));
// Check if 2 Char is in array
if(!in_array($grid_2char_confirmed, $array_grid_2char_confirmed)){
array_push($array_grid_2char_confirmed, $grid_2char_confirmed);
}
if(!in_array($grid_4char_confirmed, $array_grid_4char_confirmed)){
array_push($array_grid_4char_confirmed, $grid_4char_confirmed);
}
}
}
}
$data['grid_2char_confirmed'] = ($array_grid_2char_confirmed);
$data['grid_4char_confirmed'] = ($array_grid_4char_confirmed);
$data['grid_6char_confirmed'] = ($array_grid_6char_confirmed);
$data['grid_2char'] = ($array_grid_2char);
$data['grid_4char'] = ($array_grid_4char);
$data['grid_6char'] = ($array_grid_6char);
header('Content-Type: application/json');
echo json_encode($data);
}
}

查看文件

@ -200,7 +200,7 @@ class adif extends CI_Controller {
break;
};
$one_error = $this->logbook_model->import($record, $this->input->post('station_profile'), $this->input->post('skipDuplicate'), $this->input->post('markClublog'),$this->input->post('markLotw'), $this->input->post('dxccAdif'), $this->input->post('markQrz'), $this->input->post('markHrd'), true, $this->input->post('operatorName'));
$one_error = $this->logbook_model->import($record, $this->input->post('station_profile'), $this->input->post('skipDuplicate'), $this->input->post('markClublog'),$this->input->post('markLotw'), $this->input->post('dxccAdif'), $this->input->post('markQrz'), $this->input->post('markHrd'), true, $this->input->post('operatorName'), false, $this->input->post('skipStationCheck'));
if ($one_error != '') {
$custom_errors.=$one_error."<br/>";
}

查看文件

@ -164,6 +164,9 @@ class API extends CI_Controller {
$this->load->model('stations');
$return_msg = array();
$return_count = 0;
// Decode JSON and store
$obj = json_decode(file_get_contents("php://input"), true);
if ($obj === NULL) {
@ -213,12 +216,18 @@ class API extends CI_Controller {
$this->api_model->update_last_used($obj['key']);
$this->logbook_model->import($record, $obj['station_profile_id'], NULL, NULL, NULL, NULL, NULL, NULL, false, false, true);
$msg = $this->logbook_model->import($record, $obj['station_profile_id'], NULL, NULL, NULL, NULL, NULL, NULL, false, false, true);
if ( $msg == "" ) {
$return_count++;
} else {
$return_msg[] = $msg;
}
}
};
http_response_code(201);
echo json_encode(['status' => 'created', 'type' => $obj['type'], 'string' => $obj['string']]);
echo json_encode(['status' => 'created', 'type' => $obj['type'], 'string' => $obj['string'], 'imported_count' => $return_count, 'messages' => $return_msg ]);
}

查看文件

@ -221,7 +221,8 @@ class Awards extends CI_Controller {
$mode = str_replace('"', "", $this->security->xss_clean($this->input->post("Mode")));
$type = $this->security->xss_clean($this->input->post('Type'));
$qsl = $this->input->post('QSL') == null ? '' : $this->security->xss_clean($this->input->post('QSL'));
$data['results'] = $this->logbook_model->qso_details($searchphrase, $band, $mode, $type, $qsl);
$searchmode = $this->input->post('searchmode') == null ? '' : $this->security->xss_clean($this->input->post('searchmode'));
$data['results'] = $this->logbook_model->qso_details($searchphrase, $band, $mode, $type, $qsl, $searchmode);
// 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

查看文件

@ -69,6 +69,7 @@ class eqsl extends CI_Controller {
redirect('eqsl/import');
}
$eqsl_force_from_date = (!$this->input->post('eqsl_force_from_date')=="")?$this->input->post('eqsl_force_from_date'):"";
foreach ($eqsl_locations->result_array() as $eqsl_location) {
$this->eqslimporter->from_callsign_and_QTH(
$eqsl_location['station_callsign'],
@ -76,7 +77,7 @@ class eqsl extends CI_Controller {
$config['upload_path']
);
$eqsl_results[] = $this->eqslimporter->fetch($eqsl_password);
$eqsl_results[] = $this->eqslimporter->fetch($eqsl_password,$eqsl_force_from_date);
}
} elseif ($this->input->post('eqslimport') == 'upload') {
$station_id4upload=$this->input->post('station_profile');
@ -755,7 +756,7 @@ class eqsl extends CI_Controller {
foreach($dir_array as $key=>$filename){
if($filename!=".." && $filename!="."){
if(is_dir($dir."/".$filename)){
$new_foldersize = foldersize($dir."/".$filename);
$new_foldersize = $this->foldersize($dir."/".$filename);
$count_size = $count_size+ $new_foldersize;
}else if(is_file($dir."/".$filename)){
$count_size = $count_size + filesize($dir."/".$filename);

查看文件

@ -103,6 +103,7 @@ class Logbook extends CI_Controller {
// Convert - in Callsign to / Used for URL processing
$callsign = str_replace("-","/",$callsign);
$callsign = str_replace("Ø","0",$callsign);
// Check if callsign is an LoTW User
// Check Database for all other data
@ -204,7 +205,7 @@ class Logbook extends CI_Controller {
}
if (isset($user_gridmap_confirmation) && strpos($user_gridmap_confirmation, 'E') !== false) {
if ($extrawhere!='') {
$extrawherei.=" OR";
$extrawhere.=" OR";
}
$extrawhere.=" COL_EQSL_QSL_RCVD='Y'";
}
@ -329,7 +330,7 @@ function worked_grid_before($gridsquare, $type, $band, $mode)
}
if (isset($user_gridmap_confirmation) && strpos($user_gridmap_confirmation, 'E') !== false) {
if ($extrawhere!='') {
$extrawherei.=" OR";
$extrawhere.=" OR";
}
$extrawhere.=" COL_EQSL_QSL_RCVD='Y'";
}
@ -411,7 +412,7 @@ function worked_grid_before($gridsquare, $type, $band, $mode)
}
if (isset($user_gridmap_confirmation) && strpos($user_gridmap_confirmation, 'E') !== false) {
if ($extrawhere!='') {
$extrawherei.=" OR";
$extrawhere.=" OR";
}
$extrawhere.=" COL_EQSL_QSL_RCVD='Y'";
}
@ -506,7 +507,7 @@ function worked_grid_before($gridsquare, $type, $band, $mode)
}
if (isset($user_gridmap_confirmation) && strpos($user_gridmap_confirmation, 'E') !== false) {
if ($extrawhere!='') {
$extrawherei.=" OR";
$extrawhere.=" OR";
}
$extrawhere.=" COL_EQSL_QSL_RCVD='Y'";
}

查看文件

@ -69,7 +69,7 @@ class Lookup extends CI_Controller {
{
if (in_array($row->COL_CALL, $arCalls) == false)
{
$arCalls[] = $row->COL_CALL;
$arCalls[] = str_replace('0', 'Ø', $row->COL_CALL);
}
}
@ -83,7 +83,7 @@ class Lookup extends CI_Controller {
foreach ($result as &$value) {
if (in_array($value, $arCalls) == false)
{
$arCalls[] = $value;
$arCalls[] = str_replace('0', 'Ø', $value);
}
}
}
@ -97,7 +97,7 @@ class Lookup extends CI_Controller {
foreach ($result as &$value) {
if (in_array($value, $arCalls) == false)
{
$arCalls[] = $value;
$arCalls[] = str_replace('0', 'Ø', $value);
}
}
}

查看文件

@ -111,7 +111,7 @@ class Options extends CI_Controller {
$dashboard_map_update_status = $this->optionslib->update('dashboard_map', $this->input->post('dashboardMap'), 'yes');
// If dashboard map update is complete set a flashsession with a success note
if($ldashboard_map_update_status == TRUE) {
if($dashboard_map_update_status == TRUE) {
$this->session->set_flashdata('success', $this->lang->line('options_dashboard_map_changed_to').$this->input->post('dashboardMap'));
}

查看文件

@ -0,0 +1,26 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Sattimers extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->model('user_model');
if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); }
}
public function index() {
$footerData = [];
$footerData['scripts'] = [
'assets/js/sections/sattimers.js?'
];
$url = 'https://www.df2et.de/tevel/api.php';
$json = file_get_contents($url);
$data['activations'] = json_decode($json, true)['data'];
$data['page_title'] = "Satellite Timers";
$this->load->view('interface_assets/header', $data);
$this->load->view('/sattimers/index', $data);
$this->load->view('interface_assets/footer', $footerData);
}
}

查看文件

@ -306,12 +306,15 @@ class Search extends CI_Controller {
function fetchQueryResult($json, $returnquery) {
$search_items = json_decode($json, true);
$this->db->select($this->config->item('table_name').'.*, station_profile.*, dxcc_entities.name as station_country');
$this->db->group_start();
$this->buildWhere($search_items);
$this->db->group_end();
$this->db->order_by('COL_TIME_ON', 'DESC');
$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->where('station_profile.user_id', $this->session->userdata('user_id'));
if ($returnquery) {

查看文件

@ -16,3 +16,5 @@ $lang['admin_options'] = 'Options';
$lang['admin_create_user'] = 'Create user';
$lang['admin_delete'] = 'Delete';
$lang['admin_edit'] = 'Edit';
$lang['admin_user_accounts'] = 'User Accounts';

查看文件

@ -24,3 +24,4 @@ $lang['gridsquares_gridsquares'] = 'Gridsquares';
$lang['gridsquares_gridsquares_confirmed'] = 'Gridsquares confirmed';
$lang['gridsquares_gridsquares_not_confirmed'] = 'Gridsquares not confirmed';
$lang['gridsquares_gridsquares_total_worked'] = 'Total gridsquares worked';
$lang['gridsquares_gridsquares_total_activated'] = 'Total gridsquares activated';

查看文件

@ -8,3 +8,84 @@ $lang['account_colonne2_text'] = 'Choisir colonne 2';
$lang['account_colonne3_text'] = 'Choisir colonne 3';
$lang['account_colonne4_text'] = 'Choisir colonne 4';
$lang['account_colonne5_text'] = 'Choisir colonne 5 (uniquement pour logbook)';
$lang['account_create_user_account'] = 'Creer un compte';
$lang['account_edit_account'] = 'Editer un compte';
$lang['account_account_information'] = 'Informations du compte';
$lang['account_username'] = 'Utilisateur';
$lang['account_email_address'] = 'Email';
$lang['account_password'] = 'Mot de passe';
$lang['account_roles'] = 'Rôles';
$lang['account_user_role'] = 'Rôle de l\'utilisateur';
$lang['account_theme'] = 'Thème';
$lang['account_stylesheet'] = 'Nom du thème';
$lang['account_personal_information'] = 'Informations personnelles';
$lang['account_first_name'] = 'Nom';
$lang['account_last_name'] = 'Prénom';
$lang['account_callsign'] = 'Indicatif';
$lang['account_gridsquare'] = 'Locator';
$lang['account_cloudlog_preferences'] = 'Préférences Cloudlog';
$lang['account_timezone'] = 'Timezone';
$lang['account_date_format'] = 'Format de la date';
$lang['account_measurement_preferences'] = 'Unité de mesure';
$lang['account_select_how_you_would_like_dates_shown_when_logged_into_your_account'] = '(Sélectionnez le format de date à afficher)';
$lang['account_choose_which_unit_distances_will_be_shown_in'] = '(Choisiez l\'unité de mesure à afficher)';
$lang['account_main_menu'] = 'Menu principal';
$lang['account_show_notes_in_the_main_menu'] = 'Voir les notes dans le main principal.';
$lang['account_gridsquare_and_location_autocomplete'] = 'Renseignement automatique du lieu et du Locator';
$lang['account_location_auto_lookup'] = 'Recherche automatique de lieu.';
$lang['account_if_set_gridsquare_is_fetched_based_on_location_name'] = '(Si activé, le Locator est récupéré en fonction du nom du lieu.)';
$lang['account_sota_auto_lookup_gridsquare_and_name_for_summit'] = 'SOTA : Renseigner automatiquement le Locator et le nom du sommet.';
$lang['account_wwff_auto_lookup_gridsquare_and_name_for_reference'] = 'WWFF : Renseigner automatiquement le Locator et le nom de la référence.';
$lang['account_pota_auto_lookup_gridsquare_and_name_for_park'] = 'POTA : Renseigner automatiquement le Locateur et le nom du parc.';
$lang['account_if_set_name_and_gridsquare_is_fetched_from_the_api_and_filled_in_location_and_locator'] = '(Si activé, le nom et le Locator seront récupérés depuis l\'API et renseignés.)';
$lang['account_previous_qsl_type'] = 'Type de QSL pour le statut';
$lang['account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'] = 'Selectionner le type de QSL à afficher (statut) dans la session précédents QSOs.';
$lang['account_qrzcom_hamqthcom_images'] = 'qrz.com/hamqth.com Images';
$lang['account_show_profile_picture_of_qso_partner_from_qrzcom_hamqthcom_profile_in_the_log_qso_section'] = 'Affiche l\'image de profil du contact (depuis qrz.com/hamqth.com) dans la session QSO.';
$lang['account_please_set_your_qrzcom_hamqthcom_credentials_in_the_general_config_file'] = 'Indiquer les éléments d\'authentification pour qrz.com/hamqth.com credentials dans le fichier de configuration (config.php).';
$lang['account_amsat_status_upload'] = 'Envoi du statut AMSAT';
$lang['account_upload_status_of_sat_qsos_to'] = 'Envoi des statuts des QSOs Satellites sur';
$lang['account_logbook_of_the_world'] = 'Logbook of the World';
$lang['account_logbook_of_the_world_lotw_username'] = 'Utilisateur';
$lang['account_logbook_of_the_world_lotw_password'] = 'Mot de passe';
$lang['account_leave_blank_to_keep_existing_password'] = '(Laisser vide pour conserver le mot de passe existant)';
$lang['account_clublog'] = 'Club Log';
$lang['account_clublog_email_callsign'] = 'Email/Callsign';
$lang['account_clublog_password'] = 'Mot de passe';
$lang['account_the_email_or_callsign_you_use_to_login_to_club_log'] = '(Renseigner l\'email ou l\'indicatif pour se connecter à Club Log)';
$lang['account_eqsl'] = 'eQSL';
$lang['account_eqslcc_username'] = 'Utilisateur';
$lang['account_eqslcc_password'] = 'Mot de passe';
$lang['account_save_account_changes'] = 'Sauvegarder les changements';
$lang['account_create_account'] = 'Creation du compte';
$lang['account_delete_user_account'] = 'Supprimer l\'utilisateur';
$lang['account_are_you_sure_you_want_to_delete_the_user_account'] = 'Etes-vous certain de supprimer le compte de l\'utilisateur ?';
$lang['account_yes_delete_this_user'] = 'Oui, supprimer l\'utilisateur';
$lang['account_no_do_not_delete_this_user'] = 'Non, ne pas supprimer l\'utilisateur';
$lang['account_forgot_password'] = 'Mot de passe oublié ?';
$lang['account_you_can_reset_your_password_here'] = 'Vous pouvez réinitialiser votre mot de passe ici.';
$lang['account_reset_password'] = 'Mot de passe réinitialisé';
$lang['account_the_email_field_is_required'] = 'Le champs Email est obligatoire';
$lang['account_confirm_password'] = 'Mot de passe confirmé';
$lang['account_forgot_your_password'] = 'Mot de passe oublié ?';
$lang['account_login_to_cloudlog'] = 'Connexion à Cloudlog';
$lang['account_login'] = 'Login';

查看文件

@ -0,0 +1,18 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['admin_user_line1'] = 'Cloudlog a besoin d\'au moins un utilisateur configuré pour fonctionner.';
$lang['admin_user_line2'] = 'Les utilisateurs peuvent se voir attribuer des rôles qui leur donnent différentes autorisations, telles que l\'ajout de QSO au journal de bord et l\'accès aux API Cloudlog.';
$lang['admin_user_line3'] = 'L\'utilisateur actuellement connecté est affiché en haut à droite de chaque page.';
$lang['admin_user_list'] = 'Utilisateurs List';
$lang['admin_user'] = 'Utilisateur';
$lang['admin_email'] = 'E-mail';
$lang['admin_type'] = 'Type';
$lang['admin_options'] = 'Options';
$lang['admin_create_user'] = 'Creation d\'un utilisateur';
$lang['admin_delete'] = 'Supprimer';
$lang['admin_edit'] = 'Editer';

查看文件

@ -3,16 +3,16 @@
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['contesting_page_title'] = 'Logging Contest';
$lang['contesting_button_reset_contest_session'] = 'Rinitialiser la Session Contest';
$lang['contesting_button_reset_contest_session'] = 'Réinitialiser la session Contest';
$lang['contesting_exchange_type'] = 'Type d\'échange';
$lang['contesting_exchange_type_serial'] = 'Serie';
$lang['contesting_exchange_type_serial'] = 'Série';
$lang['contesting_exchange_type_other'] = 'Autre';
$lang['contesting_contest_name'] = 'Nom du Contest';
$lang['contesting_btn_reset_qso'] = 'Reinitialise QSO';
$lang['contesting_btn_reset_qso'] = 'Réinitialise QSO';
$lang['contesting_btn_save_qso'] = 'Sauvegarder QSO';
$lang['contesting_title_callsign_suggestions'] = 'Sugestion d\'indicatif';
$lang['contesting_title_callsign_suggestions'] = 'Suggestion d\'indicatif';
$lang['contesting_title_contest_logbook'] = 'Logbook du Contest';

查看文件

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

查看文件

@ -0,0 +1,26 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['gridsquares_gridsquare_map'] = 'Carte des Locators';
$lang['gridsquares_confirmed_is_green'] = 'Confirmé en Vert';
$lang['gridsquares_worked_but_not_confirmed_is_red'] = 'Contacté, mais non confirmé en Rouge';
$lang['gridsquares_activated_but_not_confirmed_is_red'] = 'Activé, mais non confirmé en Rouge';
$lang['gridsquares_this_map_does_not_include_satellite_internet_or_repeater_qsos'] = 'Cette carte n\'inclue pas les QSOs par Satellites, internet or relais';
$lang['gridsquares_grid_squares'] = 'Grilles des Locators';
$lang['gridsquares_total_count'] = 'Total';
$lang['gridsquares_band'] = 'Bande';
$lang['gridsquares_mode'] = 'Mode';
$lang['gridsquares_sat'] = 'Satellite';
$lang['gridsquares_confirmation'] = 'Confirmé';
$lang['gridsquares_button_plot'] = 'Plot';
$lang['gridsquares_gridsquares'] = 'Locators';
$lang['gridsquares_gridsquares_confirmed'] = 'Locators confirmés';
$lang['gridsquares_gridsquares_not_confirmed'] = 'Locators non confirmés';
$lang['gridsquares_gridsquares_total_worked'] = 'Total des Locators contactés';

查看文件

@ -2,7 +2,8 @@
defined('BASEPATH') OR exit('No direct script access allowed');
$lang['lotw_title'] = 'Logbook du monde';
$lang['lotw_short'] = 'LoTW';
$lang['lotw_title'] = 'Logbook of the World';
$lang['lotw_title_available_cert'] = 'Certificats disponibles';
$lang['lotw_title_information'] = 'Information';
$lang['lotw_title_upload_p12_cert'] = 'Envoyer certificat .p12 du Logbook du monde';
@ -15,10 +16,13 @@ $lang['lotw_no_certs_uploaded'] = 'Vous devez envoyer des certificats p1 pour ut
$lang['lotw_date_created'] = 'Date Création';
$lang['lotw_date_expires'] = 'Date Expiration';
$lang['lotw_qso_start_date'] = 'Date de début des QSOs';
$lang['lotw_qso_end_date'] = 'Date de fin des QSOs';
$lang['lotw_status'] = 'Status';
$lang['lotw_options'] = 'Options';
$lang['lotw_valid'] = 'Valide';
$lang['lotw_expired'] = 'Expiré';
$lang['lotw_expiring'] = 'Expiration';
$lang['lotw_not_synced'] = 'Non Synchronisé';
$lang['lotw_certificate_dxcc'] = 'Certificat DXCC';
@ -46,4 +50,13 @@ $lang['lotw_p12_export_step_one'] = 'Ouvrir TQSL et aller à l\'onglet Certifi
$lang['lotw_p12_export_step_two'] = 'Click droit sur l\indicatif désiré';
$lang['lotw_p12_export_step_three'] = 'Cliquer "Enregistrer le fichier des certificats d\'indicatif sans ajouter de mot de passe';
$lang['lotw_p12_export_step_four'] = 'Envoyer le fichier ci-dessous.';
$lang['lotw_confirmed'] = 'Ce QSO est confirmé sur LoTW';
// LoTW Expiry
$lang['lotw_cert_expiring'] = 'Au moins un de vos certificats LoTW est sur le point d\'expirer !';
$lang['lotw_cert_expired'] = 'Au moins un de vos certificats LoTW est expiré !';
// Lotw User
$lang['lotw_user'] = 'Cette station utilise LoTW.';
$lang['lotw_last_upload'] = 'Dernier upload';

查看文件

@ -16,3 +16,4 @@ $lang['admin_options'] = 'Optionen';
$lang['admin_create_user'] = 'Benutzer anlegen';
$lang['admin_delete'] = 'Löschen';
$lang['admin_edit'] = 'Editieren';
$lang['admin_user_accounts'] = 'Benutzerkonten';

查看文件

@ -24,3 +24,4 @@ $lang['gridsquares_gridsquares'] = 'Planquadrate';
$lang['gridsquares_gridsquares_confirmed'] = 'Planquadrate bestätigt';
$lang['gridsquares_gridsquares_not_confirmed'] = 'Planquadrate nicht bestätigt';
$lang['gridsquares_gridsquares_total_worked'] = 'Summe gearbeiteter Planquadrate';
$lang['gridsquares_gridsquares_total_activated'] = 'Summe aktivierter Planquadrate';

查看文件

@ -53,7 +53,7 @@ class EqslImporter
}
// Download confirmed QSO from eQSL inbox and import them
public function fetch($password) {
public function fetch($password, $eqsl_force_from_date="") {
if (empty($password) || empty($this->callsign)) {
return $this->result('Missing username and/or password');
}
@ -63,8 +63,8 @@ class EqslImporter
$q = $query->row();
$eqsl_url = $q->eqsl_download_url;
// Query the logbook to determine when the last eQSL confirmation was
$eqsl_last_qsl_date = $this->CI->eqslmethods_model->eqsl_last_qsl_rcvd_date($this->callsign, $this->qth_nickname);
// Query the logbook to determine when the last eQSL confirmation was / Or use date input from form //
$eqsl_last_qsl_date = (strtotime($eqsl_force_from_date)!==false)?date("Ymd",strtotime($eqsl_force_from_date)):$this->CI->eqslmethods_model->eqsl_last_qsl_rcvd_date($this->callsign, $this->qth_nickname);
// Build parameters for eQSL inbox file
$eqsl_params = http_build_query(array(

查看文件

@ -0,0 +1,24 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
* Tag Cloudlog as 2.4.10
*/
class Migration_tag_2_4_10 extends CI_Migration {
public function up()
{
// Tag Cloudlog 2.4.10
$this->db->where('option_name', 'version');
$this->db->update('options', array('option_value' => '2.4.10'));
}
public function down()
{
$this->db->where('option_name', 'version');
$this->db->update('options', array('option_value' => '2.4.9'));
}
}

查看文件

@ -0,0 +1,226 @@
<?php
class Activated_gridmap_model extends CI_Model {
function get_band_confirmed($band, $mode, $qsl, $lotw, $eqsl, $sat) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = 'SELECT DISTINCT station_gridsquare AS GRID_SQUARES, COL_BAND FROM '
. 'station_profile JOIN '.$this->config->item('table_name').' on '.$this->config->item('table_name').'.station_id = station_profile.station_id '
. 'WHERE station_profile.station_gridsquare != "" ';
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
if ($sat != 'All') {
$sql .= " and col_sat_name ='" . $sat . "'";
}
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $band . "'";
}
}
if ($mode != 'All') {
$sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
}
$sql .= $this->addQslToQuery($qsl, $lotw, $eqsl);
return $this->db->query($sql);
}
function get_band($band, $mode, $qsl, $lotw, $eqsl, $sat) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = 'SELECT DISTINCT station_gridsquare AS GRID_SQUARES, COL_BAND FROM '
. 'station_profile JOIN '.$this->config->item('table_name').' on '.$this->config->item('table_name').'.station_id = station_profile.station_id '
. 'WHERE station_profile.station_gridsquare != "" ';
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
if ($sat != 'All') {
$sql .= " and col_sat_name ='" . $sat . "'";
}
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $band . "'";
}
}
if ($mode != 'All') {
$sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
}
return $this->db->query($sql);
}
function get_band_worked_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $sat) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = 'SELECT distinct COL_VUCC_GRIDS, COL_BAND FROM '
.$this->config->item('table_name')
.' WHERE station_id in ('
.$location_list.') AND COL_VUCC_GRIDS != ""';
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
if ($sat != 'All') {
$sql .= " and col_sat_name ='" . $sat . "'";
}
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $band . "'";
}
}
if ($mode != 'All') {
$sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
}
return null;
return $this->db->query($sql);
}
function get_band_confirmed_vucc_squares($band, $mode, $qsl, $lotw, $eqsl, $sat) {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = 'SELECT distinct COL_VUCC_GRIDS, COL_BAND FROM '
.$this->config->item('table_name')
.' WHERE station_id in ('
.$location_list.') AND COL_VUCC_GRIDS != ""';
if ($band != 'All') {
if ($band == 'SAT') {
$sql .= " and col_prop_mode ='" . $band . "'";
if ($sat != 'All') {
$sql .= " and col_sat_name ='" . $sat . "'";
}
}
else {
$sql .= " and col_prop_mode !='SAT'";
$sql .= " and col_band ='" . $band . "'";
}
}
if ($mode != 'All') {
$sql .= " and (col_mode ='" . $mode . "' or col_submode ='" . $mode . "')";
}
$sql .= $this->addQslToQuery($qsl, $lotw, $eqsl);
return null;
return $this->db->query($sql);
}
// Adds confirmation to query
function addQslToQuery($qsl, $lotw, $eqsl) {
$sql = '';
if ($lotw == "true" && $qsl == "false" && $eqsl == "false") {
$sql .= " and col_lotw_qsl_sent = 'Y'";
}
if ($qsl == "true" && $lotw == "false" && $eqsl == "false") {
$sql .= " and col_qsl_true = 'Y'";
}
if ($eqsl == "true" && $lotw == "false" && $qsl == "false") {
$sql .= " and col_eqsl_qsl_sent = 'Y'";
}
if ($lotw == "true" && $qsl == "true" && $eqsl == "false") {
$sql .= " and (col_lotw_qsl_sent = 'Y' or col_qsl_sent = 'Y')";
}
if ($qsl == "true" && $lotw == "false" && $eqsl == "true") {
$sql .= " and (col_qsl_sent = 'Y' or col_eqsl_qsl_sent = 'Y')";
}
if ($eqsl == "true" && $lotw == "true" && $qsl == "false") {
$sql .= " and (col_eqsl_qsl_sent = 'Y' or col_lotw_qsl_sent = 'Y')";
}
if ($qsl == "true" && $lotw == "true" && $eqsl == "true") {
$sql .= " and (col_qsl_sent = 'Y' or col_lotw_qsl_sent = 'Y' or col_eqsl_qsl_sent = 'Y')";
}
if ($qsl == "false" && $lotw == "false" && $eqsl == "false") {
$sql .= " and (col_qsl_sent != 'Y' and col_lotw_qsl_sent != 'Y' and col_eqsl_qsl_sent != 'Y')";
}
return $sql;
}
/*
* Get's the worked modes from the log
*/
function get_worked_modes() {
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
// get all worked modes from database
$data = $this->db->query(
"SELECT distinct LOWER(`COL_MODE`) as `COL_MODE` FROM `" . $this->config->item('table_name') . "` WHERE station_id in (" . $location_list . ") order by COL_MODE ASC"
);
$results = array();
foreach ($data->result() as $row) {
array_push($results, $row->COL_MODE);
}
$data = $this->db->query(
"SELECT distinct LOWER(`COL_SUBMODE`) as `COL_SUBMODE` FROM `" . $this->config->item('table_name') . "` WHERE station_id in (" . $location_list . ") and coalesce(COL_SUBMODE, '') <> '' order by COL_SUBMODE ASC"
);
foreach ($data->result() as $row) {
if (!in_array($row, $results)) {
array_push($results, $row->COL_SUBMODE);
}
}
asort($results);
return $results;
}
}

查看文件

@ -10,10 +10,11 @@ class Activated_grids_model extends CI_Model {
if (!$logbooks_locations_array) {
return null;
}
$location_list = "'".implode("','",$logbooks_locations_array)."'";
$sql = 'SELECT DISTINCT station_gridsquare AS SAT_SQUARE FROM '
. 'station_profile JOIN '.$this->config->item('table_name').' on '.$this->config->item('table_name').'.station_id = station_profile.station_id '
. 'WHERE station_profile.station_gridsquare != "" AND '.$this->config->item('table_name').'.COL_SAT_NAME != ""';
. 'WHERE station_profile.station_gridsquare != "" AND '.$this->config->item('table_name').'.COL_SAT_NAME != ""'
. ' AND station_profile.station_id in ('.$location_list.')';
return $this->db->query($sql);
}
@ -32,7 +33,8 @@ class Activated_grids_model extends CI_Model {
$sql = 'SELECT DISTINCT station_gridsquare AS SAT_SQUARE FROM '
. 'station_profile JOIN '.$this->config->item('table_name').' on '.$this->config->item('table_name').'.station_id = station_profile.station_id '
. 'WHERE station_profile.station_gridsquare != "" AND '.$this->config->item('table_name').'.COL_SAT_NAME != "" '
. 'AND (COL_LOTW_QSL_SENT = "Y" OR COL_QSL_SENT = "Y");';
. 'AND (COL_LOTW_QSL_SENT = "Y" OR COL_QSL_SENT = "Y")'
. ' AND station_profile.station_id in ('.$location_list.')';
return $this->db->query($sql);
}
@ -50,7 +52,8 @@ class Activated_grids_model extends CI_Model {
$sql = 'SELECT DISTINCT station_gridsquare AS GRID_SQUARES, COL_BAND FROM '
. 'station_profile JOIN '.$this->config->item('table_name').' on '.$this->config->item('table_name').'.station_id = station_profile.station_id '
. 'WHERE station_profile.station_gridsquare != "" ';
. 'WHERE station_profile.station_gridsquare != "" '
. ' AND station_profile.station_id in ('.$location_list.')';
if ($band != 'All') {
$sql .= 'AND COL_BAND = "'.$band.'" '
@ -77,7 +80,8 @@ class Activated_grids_model extends CI_Model {
$sql = 'SELECT DISTINCT station_gridsquare AS GRID_SQUARES, COL_BAND FROM '
. 'station_profile JOIN '.$this->config->item('table_name').' on '.$this->config->item('table_name').'.station_id = station_profile.station_id '
. 'WHERE station_profile.station_gridsquare != "" ';
. 'WHERE station_profile.station_gridsquare != "" '
. ' AND station_profile.station_id in ('.$location_list.')';
if ($band != 'All') {
$sql .= 'AND COL_BAND = "'.$band.'" '

查看文件

@ -149,7 +149,7 @@ class Eqslmethods_model extends CI_Model {
} else {
// No previous date (first time import has run?), so choose UNIX EPOCH!
// Note: date is yyyy/mm/dd format
return '1970/01/01';
return '19700101';
}
}

查看文件

@ -4,6 +4,8 @@ class Logbook_model extends CI_Model {
/* Add QSO to Logbook */
function create_qso() {
$callsign = str_replace('Ø', '0', $this->input->post('callsign'));
// Join date+time
$datetime = date("Y-m-d",strtotime($this->input->post('start_date')))." ". $this->input->post('start_time');
if ($this->input->post('prop_mode') != null) {
@ -82,14 +84,14 @@ class Logbook_model extends CI_Model {
}
if($this->input->post('country') == "") {
$dxcc = $this->check_dxcc_table(strtoupper(trim($this->input->post('callsign'))), $datetime);
$dxcc = $this->check_dxcc_table(strtoupper(trim($callsign)), $datetime);
$country = ucwords(strtolower($dxcc[1]), "- (/");
} else {
$country = $this->input->post('country');
}
if($this->input->post('cqz') == "") {
$dxcc = $this->check_dxcc_table(strtoupper(trim($this->input->post('callsign'))), $datetime);
$dxcc = $this->check_dxcc_table(strtoupper(trim($callsign)), $datetime);
if (empty($dxcc[2])) {
$cqz = null;
} else {
@ -101,7 +103,7 @@ class Logbook_model extends CI_Model {
if($this->input->post('dxcc_id') == "") {
$dxcc = $this->check_dxcc_table(strtoupper(trim($this->input->post('callsign'))), $datetime);
$dxcc = $this->check_dxcc_table(strtoupper(trim($callsign)), $datetime);
if (empty($dxcc[0])) {
$dxcc_id = null;
} else {
@ -114,7 +116,7 @@ class Logbook_model extends CI_Model {
if($this->input->post('continent') == "") {
$dxcc = $this->check_dxcc_table(strtoupper(trim($this->input->post('callsign'))), $datetime);
$dxcc = $this->check_dxcc_table(strtoupper(trim($callsign)), $datetime);
if (empty($dxcc[3])) {
$continent = null;
} else {
@ -173,7 +175,7 @@ class Logbook_model extends CI_Model {
$data = array(
'COL_TIME_ON' => $datetime,
'COL_TIME_OFF' => $datetime,
'COL_CALL' => strtoupper(trim($this->input->post('callsign'))),
'COL_CALL' => strtoupper(trim($callsign)),
'COL_BAND' => $this->input->post('band'),
'COL_BAND_RX' => $this->input->post('band_rx'),
'COL_FREQ' => $this->parse_frequency($this->input->post('freq_display')),
@ -328,7 +330,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, $qsl){
public function qso_details($searchphrase, $band, $mode, $type, $qsl, $searchmode = null){
$CI =& get_instance();
$CI->load->model('logbooks_model');
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
@ -347,7 +349,11 @@ class Logbook_model extends CI_Model {
$this->db->where('COL_IOTA', $searchphrase);
break;
case 'VUCC':
$this->db->where("(COL_GRIDSQUARE like '%" . $searchphrase . "%' OR COL_VUCC_GRIDS like'%" . $searchphrase ."%')");
if ($searchmode == 'activated') {
$this->db->where("station_gridsquare like '%" . $searchphrase . "%'");
} else {
$this->db->where("(COL_GRIDSQUARE like '" . $searchphrase . "%' OR COL_VUCC_GRIDS like '%" . $searchphrase ."%')");
}
break;
case 'CQZone':
$this->db->where('COL_CQZ', $searchphrase);
@ -419,6 +425,8 @@ class Logbook_model extends CI_Model {
}
$this->db->order_by("COL_TIME_ON", "desc");
$this->db->limit(500);
return $this->db->get($this->config->item('table_name'));
}
@ -878,6 +886,8 @@ class Logbook_model extends CI_Model {
} else if ($data['COL_MODE'] == 'PKT') {
$sat_name = 'ISS-DATA';
}
} else if ($data['COL_SAT_NAME'] == 'CAS-3H') {
$sat_name = 'LilacSat-2';
} else {
$sat_name = $data['COL_SAT_NAME'];
}
@ -933,10 +943,10 @@ class Logbook_model extends CI_Model {
$srx_string = null;
}
if (stristr($this->input->post('usa_county') ?? '', ',')) {
$uscounty = $this->input->post('usa_county');
if ($this->input->post('usa_county') && $this->input->post('usa_state')) {
$uscounty = trim($this->input->post('usa_state') . "," . $this->input->post('usa_county'));
} else {
$uscounty = $this->input->post('usa_state') .",".$this->input->post('usa_county');
$uscounty = null;
}
if ($this->input->post('qsl_sent')) {
@ -1132,7 +1142,8 @@ class Logbook_model extends CI_Model {
$logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
if(!empty($logbooks_locations_array)) {
$this->db->select('COL_CALL, COL_BAND, COL_FREQ, COL_TIME_ON, COL_RST_RCVD, COL_RST_SENT, COL_MODE, COL_SUBMODE, COL_NAME, COL_COUNTRY, COL_PRIMARY_KEY, COL_SAT_NAME, COL_SRX, COL_SRX_STRING, COL_STX, COL_STX_STRING, COL_VUCC_GRIDS, COL_GRIDSQUARE, COL_MY_GRIDSQUARE, COL_OPERATOR, COL_IOTA, COL_WWFF_REF, COL_POTA_REF, COL_STATE, COL_CNTY, COL_DISTANCE, COL_SOTA_REF, COL_CONTEST_ID');
$this->db->select('COL_CALL, COL_BAND, COL_FREQ, COL_TIME_ON, COL_RST_RCVD, COL_RST_SENT, COL_MODE, COL_SUBMODE, COL_NAME, COL_COUNTRY, COL_DXCC, COL_PRIMARY_KEY, COL_SAT_NAME, COL_SRX, COL_SRX_STRING, COL_STX, COL_STX_STRING, COL_VUCC_GRIDS, COL_GRIDSQUARE, COL_MY_GRIDSQUARE, COL_OPERATOR, COL_IOTA, COL_WWFF_REF, COL_POTA_REF, COL_STATE, COL_CNTY, COL_DISTANCE, COL_SOTA_REF, COL_CONTEST_ID, dxcc_entities.end AS end');
$this->db->join('dxcc_entities', $this->config->item('table_name').'.col_dxcc = dxcc_entities.adif', 'left outer');
$this->db->where_in('station_id', $logbooks_locations_array);
$this->db->order_by("COL_TIME_ON", "desc");
$this->db->limit($num);
@ -1699,7 +1710,7 @@ class Logbook_model extends CI_Model {
}
if (isset($user_gridmap_confirmation) && strpos($user_gridmap_confirmation, 'E') !== false) {
if ($extrawhere!='') {
$extrawherei.=" OR";
$extrawhere.=" OR";
}
$extrawhere.=" COL_EQSL_QSL_RCVD='Y'";
}
@ -2864,7 +2875,7 @@ function check_if_callsign_worked_in_logbook($callsign, $StationLocationsArray =
* $markHrd - used in ADIF import to mark QSOs as exported to HRDLog.net Logbook when importing QSOs
* $skipexport - used in ADIF import to skip the realtime upload to QRZ Logbook when importing QSOs from ADIF
*/
function import($record, $station_id = "0", $skipDuplicate = false, $markClublog = false, $markLotw = false, $dxccAdif = false, $markQrz = false, $markHrd = false,$skipexport = false, $operatorName = false, $apicall = false) {
function import($record, $station_id = "0", $skipDuplicate = false, $markClublog = false, $markLotw = false, $dxccAdif = false, $markQrz = false, $markHrd = false,$skipexport = false, $operatorName = false, $apicall = false, $skipStationCheck = false) {
// be sure that station belongs to user
$CI =& get_instance();
$CI->load->model('stations');
@ -2879,6 +2890,11 @@ function check_if_callsign_worked_in_logbook($callsign, $StationLocationsArray =
$record['station_callsign']=$station_profile_call;
}
if ((!$skipStationCheck) && ($station_id != 0) && (strtoupper($record['station_callsign']) != strtoupper($station_profile_call))) { // Check if station_call from import matches profile ONLY when submitting via GUI.
return "Wrong station callsign <b>\"".htmlentities($record['station_callsign'])."\"</b> while importing QSO with ".$record['call']." for <b>".$station_profile_call."</b> : SKIPPED" .
"<br>See the <a target=\"_blank\" href=\"https://github.com/magicbug/Cloudlog/wiki/ADIF-file-can't-be-imported\">Cloudlog Wiki</a> for hints about errors in ADIF files.";
}
$CI =& get_instance();
$CI->load->library('frequency');
$my_error = "";
@ -3939,7 +3955,7 @@ function check_if_callsign_worked_in_logbook($callsign, $StationLocationsArray =
public function update_distances(){
$this->db->select("COL_PRIMARY_KEY, COL_GRIDSQUARE, station_gridsquare");
$this->db->join('station_profile', 'station_profile.station_id = '.$this->config->item('table_name').'.station_id');
$this->db->where("COL_DISTANCE is NULL");
$this->db->where("((COL_DISTANCE is NULL) or (COL_DISTANCE = 0))");
$this->db->where("COL_GRIDSQUARE is NOT NULL");
$this->db->where("COL_GRIDSQUARE != ''");
$this->db->trans_start();

查看文件

@ -0,0 +1,150 @@
<style>
/*Legend specific*/
.legend {
padding: 6px 8px;
font: 14px Arial, Helvetica, sans-serif;
background: white;
line-height: 24px;
color: #555;
border-radius: 10px;
}
.legend h4 {
text-align: center;
font-size: 16px;
margin: 2px 12px 8px;
color: #777;
}
.legend span {
position: relative;
bottom: 3px;
}
.legend i {
width: 18px;
height: 18px;
float: left;
margin: 0 8px 0 0;
}
.coordinates {
justify-content: center;
align-items: stretch;
}
.cohidden {
display:none;
}
#latDeg, #lngDeg {
width: 170px;
}
#locator, #distance, #bearing {
width: 120px;
}
</style>
<div class="container">
<br>
<h2><?php echo $page_title; ?></h2>
<form class="form-inline">
<label class="my-1 mr-2" for="band"><?php echo lang('gridsquares_band'); ?></label>
<select class="custom-select my-1 mr-sm-2" id="band">
<option value="All">All</option>
<?php foreach($bands as $band) {
echo '<option value="'.$band.'"';
if ($user_gridmap_default_band == $band) {
echo ' selected="selected"';
}
echo '>'.$band.'</option>'."\n";
} ?>
</select>
<?php if (count($sats_available) != 0) { ?>
<label class="my-1 mr-2" for="distplot_sats"><?php echo lang('gridsquares_sat'); ?></label>
<select class="custom-select my-1 mr-sm-2" id="sats" <?php if ($user_gridmap_default_band != "SAT") { ?>disabled<?php } ?>>
<option value="All">All</option>
<?php foreach($sats_available as $sat) {
echo '<option value="' . $sat . '"' . '>' . $sat . '</option>'."\n";
} ?>
</select>
<?php } else { ?>
<input id="sats" type="hidden" value="All"></input>
<?php } ?>
<label class="my-1 mr-2" for="mode"><?php echo lang('gridsquares_mode'); ?></label>
<select class="custom-select my-1 mr-sm-2" id="mode">
<option value="All">All</option>
<?php
foreach($modes as $mode){
if ($mode->submode ?? '' == '') {
echo '<option value="' . $mode . '">' . strtoupper($mode) . '</option>'."\n";
}
}
?>
</select>
<label class="my-1 mr-2"><?php echo lang('gridsquares_confirmation'); ?></label>
<div>
<div class="form-check-inline">
<?php echo '<input class="form-check-input" type="checkbox" name="qsl" id="qsl"';
if (isset($user_gridmap_confirmation) && strpos($user_gridmap_confirmation, 'Q') !== false) {
echo ' checked' ;
}
echo '>'; ?>
<label class="form-check-label" for="qsl">QSL</label>
</div>
<div class="form-check-inline">
<?php echo '<input class="form-check-input" type="checkbox" name="lotw" id="lotw"';
if (isset($user_gridmap_confirmation) && strpos($user_gridmap_confirmation, 'L') !== false) {
echo ' checked' ;
}
echo '>'; ?>
<label class="form-check-label" for="lotw">LoTW</label>
</div>
<div class="form-check-inline">
<?php echo '<input class="form-check-input" type="checkbox" name="eqsl" id="eqsl"';
if (isset($user_gridmap_confirmation) && strpos($user_gridmap_confirmation, 'E') !== false) {
echo ' checked' ;
}
echo '>'; ?>
<label class="form-check-label" for="eqsl">eQSL</label>
</div>
</div>
<button id="plot" type="button" name="plot" class="btn btn-primary mr-1 ld-ext-right ld-ext-right-plot" onclick="gridPlot(this.form)"><?php echo lang('gridsquares_button_plot'); ?><div class="ld ld-ring ld-spin"></div></button>
<button id="clear" type="button" name="clear" class="btn btn-primary mr-1 ld-ext-right ld-ext-right-clear" onclick="clearMarkers()">Clear markers<div class="ld ld-ring ld-spin"></div></button>
</form>
<?php if($this->session->flashdata('message')) { ?>
<!-- Display Message -->
<div class="alert-message error">
<p><?php echo $this->session->flashdata('message'); ?></p>
</div>
<?php } ?>
</div>
<div id="gridmapcontainer">
<div id="gridsquare_map" style="width: 100%; height: 800px"></div>
</div>
<div class="coordinates d-flex">
<div class="cohidden">Latitude: </div>
<div class="cohidden col-auto text-success font-weight-bold" id="latDeg"></div>
<div class="cohidden">Longitude: </div>
<div class="cohidden col-auto text-success font-weight-bold" id="lngDeg"></div>
<div class="cohidden">Gridsquare: </div>
<div class="cohidden col-auto text-success font-weight-bold" id="locator"></div>
<div class="cohidden">Distance: </div>
<div class="cohidden col-auto text-success font-weight-bold" id="distance"></div>
<div class="cohidden">Bearing: </div>
<div class="cohidden col-auto text-success font-weight-bold" id="bearing"></div>
</div>
<script>var gridsquaremap = true;
var type = "activated";
<?php
echo 'var jslayer ="' . $layer .'";';
echo "var jsattribution ='" . $attribution . "';";
echo "var homegrid ='" . strtoupper($homegrid[0]) . "';";
echo 'var gridsquares_gridsquares = "' . $gridsquares_gridsquares . '";';
echo 'var gridsquares_gridsquares_confirmed = "' . $gridsquares_gridsquares_confirmed . '";';
echo 'var gridsquares_gridsquares_not_confirmed = "' . $gridsquares_gridsquares_not_confirmed . '";';
echo 'var gridsquares_gridsquares_total_worked = "' . $gridsquares_gridsquares_total_activated . '";';
?>
</script>

查看文件

@ -108,6 +108,16 @@
</div>
</div>
<div class="form-group row">
<div class="col-md-10">
<div class="form-check-inline">
<input class="form-check-input" type="checkbox" name="skipStationCheck" value="1" id="skipStationCheck">
<label class="form-check-label" for="skipStationCheck"><span class="badge badge-warning">DANGER</span> Ignore Stationcallsign on import</label>
</div>
<div class="small form-text text-muted">If selected, Cloudlog will try to import <b>all</b> QSOs of the ADIF, regardless if they match to the chosen station-location.</div>
</div>
</div>
<button type="submit" class="btn-sm btn-primary mb-2" value="Upload">Upload</button>
</form>
</div>

查看文件

@ -5,10 +5,11 @@
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Date / Time</th>
<th>Date</th>
<th>Time</th>
<th>Callsign</th>
<th>Satellite</th>
<th>Gridsquare</th>
<th>Gridsquare(s)</th>
<th></th>
</tr>
</thead>
@ -32,8 +33,9 @@
<?php $timestamp = strtotime($rove['date']);
echo date($custom_date_format, $timestamp); ?>
- <?php echo $rove['start_time']; ?> - <?php echo $rove['end_time']; ?>
</td>
<td>
<?php echo $rove['start_time']." - ".$rove['end_time']; ?>
</td>
<td>
<?php
@ -58,12 +60,24 @@
<?php
// Load the logbook model and call check_if_grid_worked_in_logbook
if (strpos($rove['gridsquare'], '/') !== false) {
$grids = explode('/', $rove['gridsquare']);
foreach ($grids as $grid) {
$worked = $CI->logbook_model->check_if_grid_worked_in_logbook($grid, null, "SAT");
if ($worked != 0) {
echo " <span data-toggle=\"tooltip\" title=\"Worked\" class=\"badge badge-success\">" . $grid . "</span>";
} else {
echo " <span data-toggle=\"tooltip\" title=\"Not Worked\" class=\"badge badge-danger\">" . $grid . "</span>";
}
}
} else {
$worked = $CI->logbook_model->check_if_grid_worked_in_logbook($rove['gridsquare'], null, "SAT");
if ($worked != 0) {
echo " <span data-toggle=\"tooltip\" title=\"Worked\" class=\"badge badge-success\">" . $rove['gridsquare'] . "</span>";
} else {
echo " <span data-toggle=\"tooltip\" title=\"Not Worked\" class=\"badge badge-danger\">" . $rove['gridsquare'] . "</span>";
}
}
?>

查看文件

@ -35,6 +35,16 @@ $bands = array(
);
foreach ($qsos as $qso) {
$timestamp = strtotime($qso['COL_TIME_ON']);
print "V2,".$qso['station_callsign'].",".$qso['COL_MY_SOTA_REF'].",".date('d/m/y', $timestamp).",".date('Hi', $timestamp).",".$bands[$qso['COL_BAND']].",".$qso['COL_MODE'].",".$qso['COL_CALL'].",".$qso['COL_SOTA_REF'].",".$qso['COL_COMMENT']."\n";
printf("V2,%s,%s,%s,%s,%s,%s,%s,%s,\"%s\"\n",
$qso['station_callsign'],
$qso['COL_MY_SOTA_REF'],
date('d/m/y', $timestamp),
date('Hi', $timestamp),
$bands[$qso['COL_BAND']],
$qso['COL_MODE'],
$qso['COL_CALL'],
$qso['COL_SOTA_REF'],
$qso['COL_COMMENT']
);
}
?>

查看文件

@ -288,12 +288,12 @@ function echoQrbCalcLink($mygrid, $grid, $vucc) {
</tr>
<tr>
<td width="50%">Worked</td>
<td width="50%"><?php echo lang('general_word_worked'); ?></td>
<td width="50%"><?php echo $vucc['All']['worked']; ?></td>
</tr>
<tr>
<td width="50%">Confirmed</td>
<td width="50%"><?php echo lang('general_word_confirmed'); ?></td>
<td width="50%"><?php echo $vucc['All']['confirmed']; ?></td>
</tr>

查看文件

@ -29,7 +29,7 @@
<label class="form-check-label" for="exampleRadios1">
Import from file...
</label>
<br><br>
<br>
<p>Upload the Exported ADIF file from eQSL from the <a href="https://eqsl.cc/qslcard/DownloadInBox.cfm" target="_blank">Download Inbox</a> page, to mark QSOs as confirmed on eQSL.</p>
<p><span class="label important">Important</span> Log files must have the file type .adi</p>
<input type="file" name="userfile" size="20" />
@ -47,14 +47,21 @@
<div class="form-check">
<input class="form-check-input" type="radio" name="eqslimport" id="fetch" value="fetch" checked="checked"/>
<label class="form-check-label" for="exampleRadios1">
Import directly from eQSL
</label>
<label class="form-check-label" for="exampleRadios1">Import directly from eQSL</label>
<p>Cloudlog will use the eQSL credentials from your Cloudlog user profile to connect to eQSL and download confirmations.</p>
<div class="form-row">
<div class="form-group col-sm-2">
<div class="dxatlasdatepicker input-group date" id="eqsl_force_from_date" data-target-input="nearest">
<input name="eqsl_force_from_date" type="text" placeholder="YYYY/MM/DD" class="form-control datetimepicker-input" data-target="#eqsl_force_from_date" value=""/>
<div class="input-group-append" data-target="#eqsl_force_from_date" data-toggle="datetimepicker"><div class="input-group-text"><i class="fa fa-calendar"></i></div></div>
</div>
</div>
<div class="form-group col-sm-5" style="vertical-align:middle;"><label class="form-label"><?php echo "(Select a date, only if you want to force an import with an older date)"; //$this->lang->line(''); ?></label></div>
</div>
</div>
<input class="btn btn-primary" type="submit" value="Import eQSL QSO Matches" />
<br>
<div class="form-group"><input class="btn btn-primary" type="submit" value="Import eQSL QSO Matches" /></div>
</form>
</div>
</div>

查看文件

@ -136,6 +136,7 @@
<div class="cohidden col-auto text-success font-weight-bold" id="bearing"></div>
</div>
<script>var gridsquaremap = true;
var type = "worked";
<?php
echo 'var jslayer ="' . $layer .'";';
echo "var jsattribution ='" . $attribution . "';";

查看文件

@ -1104,6 +1104,10 @@ $(document).on('keypress',function(e) {
});
$(document).keyup(function(e) {
if (e.charCode === 0) {
let fixedcall = $('#callsign').val();
$('#callsign').val(fixedcall.replace('Ø', '0'));
}
if (e.key === "Escape") { // escape key maps to keycode `27`
reset_fields();
$('#callsign').val("");
@ -2245,7 +2249,9 @@ $(document).ready(function(){
if (isDarkModeTheme()) {
$('[class*="buttons"]').css("color", "white");
}
$('#eqsl_force_from_date').datetimepicker({
format: 'YYYY/MM/DD',
});
</script>
<?php } ?>

查看文件

@ -42,6 +42,10 @@
<link rel="stylesheet" href="<?php echo base_url(); ?>assets/css/datepicker.css" />
<?php } ?>
<?php if ($this->uri->segment(1) == "sattimers") { ?>
<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>assets/css/sattimers.css" />
<?php } ?>
<?php if (file_exists(APPPATH . '../assets/css/custom.css')) {
echo '<link rel="stylesheet" href="' . base_url() . 'assets/css/custom.css">';
} ?>
@ -101,6 +105,8 @@
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('bandmap/list'); ?>" title="Bandmap"><i class="fa fa-id-card"></i> <?php echo lang('menu_bandmap'); ?></a>
<?php } ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('sattimers'); ?>" title="SAT Timers"><i class="fas fa-satellite"></i> SAT Timers</a>
</div>
</li>
@ -117,7 +123,7 @@
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('gridmap'); ?>" title="Gridmap"><i class="fas fa-globe-europe"></i> <?php echo lang('menu_gridmap'); ?></a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('activated_grids'); ?>" title="Activated Gridsquares"><i class="fas fa-globe-europe"></i> <?php echo lang('menu_activated_gridsquares'); ?></a>
<a class="dropdown-item" href="<?php echo site_url('activated_gridmap'); ?>" title="Activated Gridsquares"><i class="fas fa-globe-europe"></i> <?php echo lang('menu_activated_gridsquares'); ?></a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo site_url('activators'); ?>" title="Gridsquare Activators"><i class="fas fa-globe-europe"></i> <?php echo lang('menu_gridsquare_activators'); ?></a>
<div class="dropdown-divider"></div>

查看文件

@ -0,0 +1,57 @@
<div class="container">
<div class="table-responsive">
<h2>Satellite Timers</h2>
<p>This data is from <a target="_blank" href="https://www.df2et.de/tevel/">https://www.df2et.de/tevel/</a></p>
<script type="text/javascript">
let dateArray = [];
dateArray.push(0);
<?php $i = 1;
foreach ($activations as $activation) :
if ($activation['timestamp'] != null) {
echo "var tevel".$i."Date = ".$activation['timestamp']." * 1000;\n";
echo "dateArray.push(tevel".$i."Date);\n";
} else {
echo "dateArray.push(0);\n";
}
$i++;
endforeach; ?>
</script>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Satellite</th>
<th colspan="2">Status</th>
<th>Time-Out</th>
<th></td>
</tr>
</thead>
<tbody>
<?php $i = 1; ?>
<?php foreach ($activations as $activation) : ?>
<tr>
<td><span><?php echo $activation['sat']; ?></span></td>
<td><span class="emoji" id="emoji<?php echo $i; ?>">n/a</span></td>
<td><span id="tevel<?php echo $i; ?>Timer"></span></td>
<td><span class="timeout" id="tevel<?php echo $i; ?>Timeout">...</span></td>
<td>
<?php
if (strpos($activation['sat'], 'TEVEL') !== false) {
echo "<a href=\"https://mailman.amsat.org/hyperkitty/search?q=TEVEL&page=1&mlist=amsat-bb%40amsat.org&sort=date-desc\" target=\"_blank\">Info</a>";
} else if (strpos($activation['sat'], 'UVSQ') !== false) {
echo "<a href=\"https://x.com/uvsqsat?s=20\" target=\"_blank\">Info</a>";
} else if (strpos($activation['sat'], 'PO-101') !== false) {
echo "<a href=\"https://x.com/Diwata2PH?s=20\" target=\"_blank\">Info</a>";
} else if (strpos($activation['sat'], 'CAS-3H') !== false) {
echo "<a href=\"https://www.amsat.org/two-way-satellites/lilacsat-2-cas-3h/\" target=\"_blank\">Info</a>";
}
?>
</td>
</tr>
<?php $i++; ?>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>

查看文件

@ -473,7 +473,7 @@
</div>
<div class="card-body">
<div class="form-group">
<label for="profileimages">Select the type of QSL to show in the previous QSOs section.</label>
<label for="profileimages"><?php echo lang('account_select_the_type_of_qsl_to_show_in_the_previous_qsos_section'); ?></label>
<select class="custom-select" id="previousqsltype" name="user_previous_qsl_type">
<option value="0" <?php if ($user_previous_qsl_type == 0) { echo " selected =\"selected\""; } ?>><?php echo lang('gen_hamradio_qsl'); ?></option>
<option value="1" <?php if ($user_previous_qsl_type == 1) { echo " selected =\"selected\""; } ?>><?php echo lang('lotw_short'); ?></option>

36
assets/css/sattimers.css 普通文件
查看文件

@ -0,0 +1,36 @@
.title {
text-align: center;
font-family: sans-serif;
color: #bbb;
}
.active {
font-family: sans-serif;
color: #3fb618;
margin-bottom: 10px;
}
.timedout {
font-family: sans-serif;
color: #f00;
}
.nonfunctional {
font-family: sans-serif;
color: #555;
}
.timeout {
font-family: sans-serif;
color: #bbb;
}
.expired {
font-family: sans-serif;
color: #555;
}
.emoji {
font-size: 1.2em;
margin: 0;
}

查看文件

@ -257,7 +257,7 @@ function checkIfWorkedBefore() {
}
}
function reset_log_fields() {
async function reset_log_fields() {
$('#name').val("");
$('.callsign-suggestions').text("");
$('#callsign').val("");
@ -269,6 +269,7 @@ function reset_log_fields() {
setRst($("#mode").val());
$('#callsign_info').text("");
await refresh_qso_table(sessiondata);
var qTable = $('.qsotable').DataTable();
qTable.search('').draw();
}

查看文件

@ -28,8 +28,16 @@ function gridPlot(form) {
$("#gridmapcontainer").append('<div id="gridsquare_map" style="width: 100%; height: 800px"></div>');
}
if (type == "activated") {
ajax_url = site_url + '/activated_gridmap/getGridsjs';
} else if (type == "worked") {
ajax_url = site_url + '/gridmap/getGridsjs';
} else {
ajax_url = site_url + '/gridmap/getGridsjs';
}
$.ajax({
url: site_url + '/gridmap/getGridsjs',
url: ajax_url,
type: 'post',
data: {
band: $("#band").val(),
@ -100,15 +108,19 @@ function gridPlot(form) {
}
function spawnGridsquareModal(loc_4char) {
$.ajax({
url: base_url + 'index.php/awards/qso_details_ajax',
type: 'post',
data: {
var ajax_data = ({
'Searchphrase': loc_4char,
'Band': $("#band").val(),
'Mode': $("#mode").val(),
'Type': 'VUCC'
},
})
if (type == 'activated') {
ajax_data.searchmode = 'activated';
}
$.ajax({
url: base_url + 'index.php/awards/qso_details_ajax',
type: 'post',
data: ajax_data,
success: function (html) {
BootstrapDialog.show({
title: 'QSO Data',

查看文件

@ -505,10 +505,11 @@ $("#callsign").focusout(function() {
var find_callsign = $(this).val().toUpperCase();
find_callsign.replace(/\//g, "-");
find_callsign=find_callsign.replace(/\//g, "-");
find_callsign=find_callsign.replace('Ø', '0');
// Replace / in a callsign with - to stop urls breaking
$.getJSON(base_url + 'index.php/logbook/json/' + find_callsign.replace(/\//g, "-") + '/' + sat_type + '/' + json_band + '/' + json_mode + '/' + $('#stationProfile').val(), function(result)
$.getJSON(base_url + 'index.php/logbook/json/' + find_callsign + '/' + sat_type + '/' + json_band + '/' + json_mode + '/' + $('#stationProfile').val(), function(result)
{
// Make sure the typed callsign and json result match
@ -521,9 +522,12 @@ $("#callsign").focusout(function() {
$('#country').val(convert_case(result.dxcc.entity));
$('#callsign_info').text(convert_case(result.dxcc.entity));
var callsign = find_callsign.replace(/\//g, "-");
callsign = callsign.replace('Ø', '0');
if($("#sat_name" ).val() != "") {
//logbook/jsonlookupgrid/io77/SAT/0/0
$.getJSON(base_url + 'index.php/logbook/jsonlookupcallsign/' + find_callsign.replace(/\//g, "-") + '/SAT/0/0', function(result)
$.getJSON(base_url + 'index.php/logbook/jsonlookupcallsign/' + find_callsign + '/SAT/0/0', function(result)
{
// Reset CSS values before updating
$('#callsign').removeClass("workedGrid");
@ -545,7 +549,7 @@ $("#callsign").focusout(function() {
}
})
} else {
$.getJSON(base_url + 'index.php/logbook/jsonlookupcallsign/' + find_callsign.replace(/\//g, "-") + '/0/' + $("#band").val() +'/' + $("#mode").val(), function(result)
$.getJSON(base_url + 'index.php/logbook/jsonlookupcallsign/' + find_callsign + '/0/' + $("#band").val() +'/' + $("#mode").val(), function(result)
{
// Reset CSS values before updating
$('#callsign').removeClass("confirmedGrid");
@ -940,11 +944,12 @@ $("#callsign").on("keypress", function(e) {
$("#callsign").keyup(function() {
if ($(this).val().length >= 3) {
$('.callsign-suggest').show();
$callsign = $(this).val().replace('Ø', '0');
$.ajax({
url: 'lookup/scp',
method: 'POST',
data: {
callsign: $(this).val().toUpperCase()
callsign: $callsign.toUpperCase()
},
success: function(result) {
$('.callsign-suggestions').text(result);

查看文件

@ -0,0 +1,46 @@
function update(i) {
var now = new Date();
if (dateArray[i] == 0) {
var element = document.getElementById("tevel"+i+"Timer");
element.innerHTML = "NOT FUNCTIONAL";
element.classList.add("nonfunctional");
element = document.getElementById("emoji"+i);
element.innerHTML = "&#x1F480;";
} else {
var distance = parseInt(dateArray[i]) - new Date(now.getTime());
var satDate = new Date(parseInt(dateArray[i]));
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
if (distance < 0) {
clearInterval(x);
var element = document.getElementById("tevel"+i+"Timer");
element.innerHTML = "TIMED OUT";
element.classList.add("timedout");
element = document.getElementById("emoji"+i);
element.innerHTML = "&#x274C;";
element = document.getElementById("tevel"+i+"Timeout");
element.className = "expired";
element.innerHTML = "(timed-out: "+satDate.toLocaleDateString()+" "+satDate.toLocaleTimeString()+")";
} else {
var element = document.getElementById("tevel"+i+"Timer");
element.innerHTML = days + "d " + hours + "h " + minutes.toString().padStart(2, '0') + "m " + seconds.toString().padStart(2, '0') + "s";
element.classList.add("active");
element = document.getElementById("emoji"+i);
element.innerHTML = "&#x2705;";
element = document.getElementById("tevel"+i+"Timeout");
element.innerHTML = "(until: "+satDate.toLocaleDateString()+" "+satDate.toLocaleTimeString()+")";
}
}
}
for (let i=1; i<=12; i++) {
var x = setInterval(function() {
update(i);
}, 1000);
}

查看文件

@ -559,6 +559,18 @@
]
}
},
"INSPIRE-SAT 7":{
"Modes":{
"V/U":[
{
"Uplink_Mode":"FM",
"Uplink_Freq":"145970000",
"Downlink_Mode":"FM",
"Downlink_Freq":"437410000"
}
]
}
},
"UVSQ-SAT":{
"Modes":{
"V/U":[

查看文件

@ -139,14 +139,28 @@ abstract class CI_Session_driver implements SessionHandlerInterface {
*/
protected function _cookie_destroy()
{
if ( ! is_php('7.3'))
{
$header = 'Set-Cookie: '.$this->_config['cookie_name'].'=';
$header .= '; Expires='.gmdate('D, d-M-Y H:i:s T', 1).'; Max-Age=-1';
$header .= '; Path='.$this->_config['cookie_path'];
$header .= ($this->_config['cookie_domain'] !== '' ? '; Domain='.$this->_config['cookie_domain'] : '');
$header .= ($this->_config['cookie_secure'] ? '; Secure' : '').'; HttpOnly; SameSite='.$this->_config['cookie_samesite'];
header($header);
return;
}
return setcookie(
$this->_config['cookie_name'],
NULL,
1,
$this->_config['cookie_path'],
$this->_config['cookie_domain'],
$this->_config['cookie_secure'],
TRUE
'',
array(
'expires' => 1,
'path' => $this->_config['cookie_path'],
'domain' => $this->_config['cookie_domain'],
'secure' => $this->_config['cookie_secure'],
'httponly' => TRUE,
'samesite' => $this->_config['cookie_samesite']
)
);
}