diff --git a/.github/workflows/cypress-tests.yml b/.github/workflows/cypress-tests.yml index 157f54cd..0436c50b 100644 --- a/.github/workflows/cypress-tests.yml +++ b/.github/workflows/cypress-tests.yml @@ -59,7 +59,16 @@ jobs: done - name: Populate dxcc_entities table - run: curl "http://localhost/index.php/update/dxcc" + run: | + for i in `seq 1 10`; do + if curl -f "http://localhost/index.php/update/dxcc"; then + echo "DXCC entities populated successfully" + break + else + echo "Failed to populate DXCC entities, retrying in 10 seconds... (attempt $i/10)" + sleep 10 + fi + done - name: Run Cypress tests run: npx cypress run \ No newline at end of file diff --git a/application/config/migration.php b/application/config/migration.php index 2eb36735..f73a6e6c 100644 --- a/application/config/migration.php +++ b/application/config/migration.php @@ -22,7 +22,7 @@ $config['migration_enabled'] = TRUE; | */ -$config['migration_version'] = 199; +$config['migration_version'] = 201; /* |-------------------------------------------------------------------------- diff --git a/application/controllers/Api.php b/application/controllers/Api.php index 7bb18b5a..3cc8bb03 100644 --- a/application/controllers/Api.php +++ b/application/controllers/Api.php @@ -427,6 +427,181 @@ class API extends CI_Controller { } + + /** + * Check if a country has been worked before and confirmed in various ways + * + * This API endpoint checks if a specific country (derived from callsign) has been + * worked before in a given logbook, and whether it has been confirmed via different + * confirmation methods (QSL, LoTW, eQSL, QRZ). + * + * @api POST /api/logbook_check_country + * @header Content-Type application/json + * + * @param string key Required. API authentication key + * @param string logbook_public_slug Required. Public slug identifier for the logbook + * @param string callsign Required. Callsign to lookup country for + * @param string type Optional. Type of contact ("sat" for satellite, empty for regular) + * @param string band Optional. Amateur radio band (required for non-satellite contacts) + * @param string mode Optional. Amateur radio mode (required for non-satellite contacts) + * + * @return json Returns JSON object with: + * - workedBefore: boolean indicating if country was worked before + * - confirmed: object with confirmation status for qsl, lotw, eqsl, qrz + * + * @throws 401 Unauthorized - Missing or invalid API key, missing required fields + * @throws 404 Not Found - Logbook not found or empty logbook + * @throws 400 Bad Request - Invalid JSON format + * + * @example + * Request: + * { + * "key": "your-api-key", + * "logbook_public_slug": "my-logbook", + * "callsign": "W1AW", + * "band": "20M", + * "mode": "SSB" + * } + * + * Response: + * { + * "workedBefore": true, + * "confirmed": { + * "qsl": true, + * "lotw": false, + * "eqsl": false, + * "qrz": false + * } + * } + */ + function logbook_check_country() + { + header('Content-type: application/json'); + + $this->load->model('api_model'); + + // Decode JSON and store + $obj = json_decode(file_get_contents("php://input"), true); + if ($obj === NULL) { + echo json_encode(['status' => 'failed', 'reason' => "wrong JSON"]); + return; + } + + if(!isset($obj['key']) || $this->api_model->authorize($obj['key']) == 0) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing api key"]); + return; + } + + if(!isset($obj['logbook_public_slug']) || !isset($obj['callsign'])) { + http_response_code(401); + echo json_encode(['status' => 'failed', 'reason' => "missing fields"]); + return; + } + + // Load models + $this->load->model('logbook_model'); + $this->load->model('logbooks_model'); + + $date = date("Y-m-d"); + $callsign = $obj['callsign']; + $logbook_slug = $obj['logbook_public_slug']; + $type = isset($obj['type']) ? $obj['type'] : ''; + $band = isset($obj['band']) ? $obj['band'] : ''; + $mode = isset($obj['mode']) ? $obj['mode'] : ''; + + $callsign_dxcc_lookup = $this->logbook_model->dxcc_lookup($callsign, $date); + $country = $callsign_dxcc_lookup['entity']; + + $return = [ + "workedBefore" => false, + "confirmed" => [ + "qsl" => false, + "lotw" => false, + "eqsl" => false, + "qrz" => false + ] + ]; + + if($this->logbooks_model->public_slug_exists($logbook_slug)) { + $logbook_id = $this->logbooks_model->public_slug_exists_logbook_id($logbook_slug); + if($logbook_id != false) + { + // Get associated station locations for mysql queries + $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($logbook_id); + + if (!$logbooks_locations_array) { + // Logbook not found + http_response_code(404); + echo json_encode(['status' => 'failed', 'reason' => "Empty Logbook"]); + die(); + } + } else { + // Logbook not found + http_response_code(404); + echo json_encode(['status' => 'failed', 'reason' => $logbook_slug." has no associated station locations"]); + die(); + } + + if (!empty($logbooks_locations_array)) { + if ($type == "sat") { + $this->db->where('COL_PROP_MODE', 'SAT'); + } else { + $this->db->where('COL_MODE', $this->logbook_model->get_main_mode_from_mode($mode)); + $this->db->where('COL_BAND', $band); + $this->db->where('COL_PROP_MODE !=', 'SAT'); + } + + $this->db->where_in('station_id', $logbooks_locations_array); + $this->db->where('COL_COUNTRY', urldecode($country)); + + $query = $this->db->get($this->config->item('table_name'), 1, 0); + foreach ($query->result() as $workedBeforeRow) { + $return['workedBefore'] = true; + } + + // Check each confirmation type separately + $confirmation_types = [ + 'qsl' => "COL_QSL_RCVD='Y'", + 'lotw' => "COL_LOTW_QSL_RCVD='Y'", + 'eqsl' => "COL_EQSL_QSL_RCVD='Y'", + 'qrz' => "COL_QRZCOM_QSO_DOWNLOAD_STATUS='Y'" + ]; + + foreach ($confirmation_types as $type_key => $where_clause) { + if ($type == "SAT") { + $this->db->where('COL_PROP_MODE', 'SAT'); + } else { + $this->db->where('COL_MODE', $this->logbook_model->get_main_mode_from_mode($mode)); + $this->db->where('COL_BAND', $band); + $this->db->where('COL_PROP_MODE !=', 'SAT'); + } + + $this->db->where_in('station_id', $logbooks_locations_array); + $this->db->where('COL_COUNTRY', urldecode($country)); + $this->db->where($where_clause); + + $query = $this->db->get($this->config->item('table_name'), 1, 0); + + if ($query->num_rows() > 0) { + $return['confirmed'][$type_key] = true; + } + } + + http_response_code(201); + echo json_encode($return, JSON_PRETTY_PRINT); + } else { + http_response_code(201); + echo json_encode($return, JSON_PRETTY_PRINT); + } + } else { + // Logbook not found + http_response_code(404); + echo json_encode(['status' => 'failed', 'reason' => "logbook not found"]); + die(); + } + } + /* ENDPOINT for Rig Control */ function radio() { diff --git a/application/controllers/Lotw.php b/application/controllers/Lotw.php index d45bb891..4b9c0e17 100644 --- a/application/controllers/Lotw.php +++ b/application/controllers/Lotw.php @@ -320,7 +320,7 @@ class Lotw extends CI_Controller { echo $station_profile->station_callsign." (".$station_profile->station_profile_name.") Upload Failed"."
"; } - $pos = strpos($result, ""); + $pos = strpos($result, ""); if ($pos === false) { // Upload of TQ8 Failed for unknown reason diff --git a/application/controllers/User.php b/application/controllers/User.php index 42c6808b..46dfc375 100644 --- a/application/controllers/User.php +++ b/application/controllers/User.php @@ -739,6 +739,9 @@ class User extends CI_Controller $post_data = $this->input->post(); + if (!isset($post_data['user_winkey'])) { + $post_data['user_winkey'] = '0'; + } if (!isset($post_data['user_winkey_websocket'])) { $post_data['user_winkey_websocket'] = '0'; } diff --git a/application/language/portuguese/account_lang.php b/application/language/portuguese/account_lang.php new file mode 100644 index 00000000..1f2d18f6 --- /dev/null +++ b/application/language/portuguese/account_lang.php @@ -0,0 +1,137 @@ +https://radiosocial.de"; + +$lang['account_default_band_settings'] = 'Configurações Padrão de Banda e Confirmação'; +$lang['account_gridmap_default_band'] = 'Banda Padrão'; +$lang['account_qsl_settings'] = 'Métodos de QSL Padrão'; + +$lang['account_winkeyer'] = 'Winkeyer'; +$lang['account_winkeyer_hint'] = "O suporte ao Winkeyer no Cloudlog é experimental.

Leia a wiki primeiro em https://github.com/magicbug/Cloudlog/wiki/Winkey antes de ativar."; +$lang['account_winkeyer_enabled'] = "Recursos Winkeyer Ativados"; + +$lang['account_map_params'] = "Configurações do Mapa"; +$lang['account_map_qso_by_default'] = "QSO (por padrão)"; +$lang['account_map_qso_confirm'] = "QSO (confirmado)"; +$lang['account_map_qso_confirm_same_qso'] = "(Se 'Não', exibido como ".$lang['account_map_qso_by_default'].")"; + +$lang['account_general_information'] = "Informações Gerais"; +$lang['account_qso_logging_options'] = "Opções de Registro de QSO"; +$lang['account_third_party_services'] = "Serviços de Terceiros"; +$lang['account_default_values'] = "Valores Padrão"; +$lang['account_miscellaneous'] = "Diversos"; + +$lang['account_hamsat'] = "Hams.at"; +$lang['account_hamsat_private_feed_key'] = "Chave de Feed Privada"; +$lang['account_hamsat_hint'] = "Veja seu perfil em https://hams.at/users/settings."; +$lang['account_hamsat_workable_only'] = "Mostrar Apenas Passagens Operáveis"; +$lang['account_hamsat_workable_only_hint'] = "Se ativado, mostra apenas as passagens operáveis com base na Grid definida em sua conta hams.at. Requer chave de feed privada."; + +$lang['account_remember_me'] = 'Lembrar-me'; \ No newline at end of file diff --git a/application/language/portuguese/adif_lang.php b/application/language/portuguese/adif_lang.php new file mode 100644 index 00000000..6491da1e --- /dev/null +++ b/application/language/portuguese/adif_lang.php @@ -0,0 +1,130 @@ +todos os QSOs do ADIF, independentemente de corresponderem ao local da estação escolhida."; + +$lang['adif_upload'] = "Enviar"; + +/* +___________________________________________________________________________________________ +Exportação ADIF +___________________________________________________________________________________________ +*/ + +$lang['adif_export_take_it_anywhere'] = "Leve seu arquivo de logbook para qualquer lugar!"; +$lang['adif_export_take_it_anywhere_hint'] = "Exportar ADIFs permite importar contatos em aplicações de terceiros como LoTW, prêmios ou para backup."; + +$lang['adif_mark_exported_lotw'] = "Marcar QSOs exportados como enviados para o LoTW"; +$lang['adif_mark_exported_no_lotw'] = "Exportar QSOs não enviados para o LoTW"; + +$lang['adif_export_qso'] = "Exportar QSOs"; + +$lang['adif_export_sat_only_qso'] = "Exportar apenas QSOs via satélite"; +$lang['adif_export_sat_only_qso_all'] = "Exportar todos os QSOs via satélite"; +$lang['adif_export_sat_only_qso_lotw'] = "Exportar todos os QSOs via satélite confirmados no LoTW"; + +/* +___________________________________________________________________________________________ +Logbook of the World +___________________________________________________________________________________________ +*/ + +$lang['adif_lotw_export_if_selected'] = "Se nenhum intervalo de datas for selecionado, todos os QSOs serão marcados!"; +$lang['adif_mark_qso_as_exported_to_lotw'] = "Marcar QSOs como exportados para o LoTW"; + +$lang['adif_qso_marked'] = "QSOs marcados"; +$lang['adif_yay_its_done'] = "Pronto, está feito!"; +$lang['adif_qso_lotw_marked_confirm'] = "Os QSOs foram marcados como exportados para o LoTW."; + +/* +___________________________________________________________________________________________ +DARC DCL +___________________________________________________________________________________________ +*/ + +$lang['adif_dcl_text_pre'] = "Vá para"; +$lang['adif_dcl_text_post'] = "e exporte seu log com DOKs confirmados. Para agilizar o processo, você pode selecionar apenas QSOs com DL (ex: insira \"DL\" na lista de prefixos). O arquivo ADIF baixado pode ser enviado aqui para atualizar os QSOs com informações de DOK."; + +$lang['only_confirmed_qsos'] = "Importar DOK apenas de QSOs confirmados no DCL."; +$lang['only_confirmed_qsos_hint'] = "Desmarque se também quiser atualizar DOK com dados de QSOs não confirmados no DCL."; + +$lang['overwrite_by_dcl'] = "Sobrescrever DOK existente no log com DOK do DCL (se diferente)."; +$lang['overwrite_by_dcl_hint'] = "Se marcado, o Cloudlog irá sobrescrever forçadamente o DOK existente com o do log DCL."; + +$lang['ignore_ambiguous'] = "Ignorar QSOs que não puderem ser correspondidos."; +$lang['ignore_ambiguous_hint'] = "Se desmarcado, informações dos QSOs não encontrados no Cloudlog serão exibidas."; + +/* +___________________________________________________________________________________________ +Importação com Sucesso +___________________________________________________________________________________________ +*/ + +$lang['adif_imported'] = "ADIF Importado"; +$lang['adif_yay_its_imported'] = "Pronto, foi importado!"; +$lang['adif_import_confirm'] = "O arquivo ADIF foi importado com sucesso."; + +$lang['adif_import_dupes_inserted'] = " Duplicados foram inseridos!"; +$lang['adif_import_dupes_skipped'] = " Duplicados foram ignorados."; + +$lang['adif_import_errors'] = "Erros de ADIF"; +$lang['adif_import_errors_hint'] = "Você tem erros no ADIF. Os QSOs foram adicionados, mas alguns campos não foram preenchidos."; + +/* +___________________________________________________________________________________________ +Sucesso DCL +___________________________________________________________________________________________ +*/ + +$lang['dcl_results'] = "Resultados da Atualização DOK pelo DCL"; +$lang['dcl_info_updated'] = "Informações DCL dos DOKs atualizadas."; +$lang['dcl_qsos_updated'] = "QSOs atualizados"; +$lang['dcl_qsos_ignored'] = "QSOs ignorados"; +$lang['dcl_qsos_unmatched'] = "QSOs não encontrados"; +$lang['dcl_no_qsos_updated'] = "Nenhum QSO foi encontrado para atualização."; +$lang['dcl_dok_errors'] = "Erros de DOK"; +$lang['dcl_dok_errors_details'] = "Há dados diferentes de DOK no seu log em comparação com o DCL"; +$lang['dcl_qsl_status'] = "Status de QSL no DCL"; +$lang['dcl_qsl_status_c'] = "confirmado por LoTW/Clublog/eQSL/Concurso"; +$lang['dcl_qsl_status_mno'] = "confirmado por gerente de prêmio"; +$lang['dcl_qsl_status_i'] = "confirmado por comparação cruzada com dados do DCL"; +$lang['dcl_qsl_status_w'] = "confirmação pendente"; +$lang['dcl_qsl_status_x'] = "não confirmado"; +$lang['dcl_qsl_status_unknown'] = "desconhecido"; +$lang['dcl_no_match'] = "QSO não pôde ser correspondido"; diff --git a/application/language/portuguese/admin_lang.php b/application/language/portuguese/admin_lang.php new file mode 100644 index 00000000..7f7d3355 --- /dev/null +++ b/application/language/portuguese/admin_lang.php @@ -0,0 +1,62 @@ +CQ Magazine."; + +/* +___________________________________________________________________________________________ +DOK +___________________________________________________________________________________________ +*/ + +$lang['awards_dok_description_ln1'] = "Prêmio DOK"; +$lang['awards_dok_description_ln2'] = "A Alemanha possui cerca de 70.000 radioamadores licenciados, sendo mais de 40.000 membros do DARC. O sistema DOK identifica associações locais ('Deutscher Ortsverband Kenner')."; +$lang['awards_dok_description_ln3'] = "O DOK é composto por uma letra do distrito e dois dígitos para o capítulo local, como P03 Friedrichshafen ou F41 Baunatal. Atenção: o número 0 é frequentemente confundido com a letra O."; +$lang['awards_dok_description_ln4'] = "Informações disponíveis no site do DARC e as regras do prêmio podem ser vistas aqui."; + +/* +___________________________________________________________________________________________ +DXCC +___________________________________________________________________________________________ +*/ + +$lang['awards_dxcc_description_ln1'] = "Prêmio DXCC"; +$lang['awards_dxcc_description_ln2'] = "DXCC significa 'DX Century Club', baseado em países trabalhados. Foi inspirado por um artigo de 1935 de Clinton B. DeSoto."; +$lang['awards_dxcc_description_ln3'] = "Todas as informações estão disponíveis no site da ARRL."; +$lang['awards_dxcc_description_ln4'] = "Nota: Entidades DXCC removidas continuam listadas no Cloudlog, mas são consideradas inválidas."; + +/* +___________________________________________________________________________________________ +FFMA +___________________________________________________________________________________________ +*/ + +$lang['awards_ffma_description_ln1'] = "Prêmio Fred Fish Memorial"; +$lang['awards_ffma_description_ln2'] = "Criado em homenagem a Fred Fish, W5FF (SK), o primeiro a trabalhar e confirmar todos os 488 grids Maidenhead nos EUA em 6 metros."; +$lang['awards_ffma_description_ln3'] = "O prêmio é concedido a quem conseguir repetir o feito de W5FF."; +$lang['awards_ffma_description_ln4'] = "Mais informações: https://www.arrl.org/ffma."; + +/* +___________________________________________________________________________________________ +IOTA +___________________________________________________________________________________________ +*/ + +$lang['awards_iota_description_ln1'] = "Prêmios IOTA"; +$lang['awards_iota_description_ln2'] = "O programa IOTA incentiva contatos com estações localizadas em ilhas ao redor do mundo."; +$lang['awards_iota_description_ln3'] = "Gerenciado pelo IOTA Ltd em parceria com a RSGB. As ilhas são agrupadas em cerca de 1200 grupos com critérios definidos."; +$lang['awards_iota_description_ln4'] = "Informações completas no site do IOTA."; + +/* +___________________________________________________________________________________________ +POTA +___________________________________________________________________________________________ +*/ + +$lang['awards_pota_description_ln1'] = "Prêmios POTA"; +$lang['awards_pota_description_ln2'] = "O Parks on the Air® surgiu em 2017 após o fim do evento National Parks on the Air da ARRL."; +$lang['awards_pota_description_ln3'] = "Funciona de forma semelhante ao SOTA, com ativadores e caçadores, e múltiplas categorias."; +$lang['awards_pota_description_ln4'] = "Mais informações: Parks on the Air®."; + +/* +___________________________________________________________________________________________ +SIG +___________________________________________________________________________________________ +*/ + +$lang['awards_sig_description_ln1'] = "Informações SIG"; +$lang['awards_sig_description_ln2'] = "SIG permite criar marcadores personalizados de prêmios não implementados nativamente no Cloudlog."; +$lang['awards_sig_description_ln3'] = "O formato ADIF tem campos limitados para prêmios; o SIG possibilita avaliações mais amplas."; +$lang['awards_sig_description_ln4'] = "Na tela de QSO há os campos 'SIG' (marcador) e 'SIG INFO' (descrição), ambos customizáveis."; + +/* +___________________________________________________________________________________________ +SOTA +___________________________________________________________________________________________ +*/ + +$lang['awards_sota_description_ln1'] = "Prêmios SOTA"; +$lang['awards_sota_description_ln2'] = "O SOTA incentiva operações portáteis em montanhas e está presente em quase 100 países."; +$lang['awards_sota_description_ln3'] = "Os pontos variam conforme a altitude dos picos. Há troféus como 'Mountain Goat' e 'Shack Sloth'."; +$lang['awards_sota_description_ln4'] = "Mais informações: https://www.sota.org.uk/."; + +/* +___________________________________________________________________________________________ +Condados EUA +___________________________________________________________________________________________ +*/ + +$lang['awards_counties_description_ln1'] = "Prêmio Condados dos EUA"; +$lang['awards_counties_description_ln2'] = "Emitido pela CQ Magazine para contatos confirmados com condados dos EUA. Regras aqui."; +$lang['awards_counties_description_ln3'] = "Válido para qualquer operador licenciado mundialmente, independente de indicativo ou local de operação."; +$lang['awards_counties_description_ln4'] = "SWLs também podem obter o prêmio com base em escutas."; + +/* +___________________________________________________________________________________________ +Gridmaster EUA +___________________________________________________________________________________________ +*/ + +$lang['awards_us_gridmaster_description_ln1'] = "Prêmio Gridmaster EUA"; +$lang['awards_us_gridmaster_description_ln2'] = "Prêmio da AMSAT para quem confirmar os 488 grids dos EUA via satélite."; +$lang['awards_us_gridmaster_description_ln3'] = "Exige contatos via satélite com comprovação. Regras detalhadas no site oficial."; +$lang['awards_us_gridmaster_description_ln4'] = "Este mapa mostra apenas QSOs feitos via satélite."; + +/* +___________________________________________________________________________________________ +Gridmaster Japão +___________________________________________________________________________________________ +*/ + +$lang['awards_ja_gridmaster_description_ln1'] = "Prêmio Gridmaster Japão"; +$lang['awards_ja_gridmaster_description_ln2'] = "Semelhante ao prêmio dos EUA, mas com foco nos grids do Japão."; +$lang['awards_ja_gridmaster_description_ln3'] = "Informações e regras pendentes."; +$lang['awards_ja_gridmaster_description_ln4'] = ""; + +/* +___________________________________________________________________________________________ +VUCC +___________________________________________________________________________________________ +*/ + +$lang['awards_vucc_description_ln1'] = "Prêmio VUCC - VHF/UHF Century Club"; +$lang['awards_vucc_description_ln2'] = "Concedido com base no número mínimo de grids confirmados em bandas VHF/UHF."; +$lang['awards_vucc_description_ln3'] = "Regras e detalhes: Clique aqui."; +$lang['awards_vucc_description_ln4'] = "Somente bandas VHF/UHF são consideradas."; + +/* +___________________________________________________________________________________________ +WAS +___________________________________________________________________________________________ +*/ + +$lang['awards_was_description_ln1'] = "Prêmio WAS"; +$lang['awards_was_description_ln2'] = "O prêmio mais popular da ARRL: Worked All States (Trabalhados Todos os Estados)."; +$lang['awards_was_description_ln3'] = "É necessário contato com os 50 estados dos EUA. Residentes fora dos EUA não precisam ser membros da ARRL."; +$lang['awards_was_description_ln4'] = "Regras e detalhes: aqui."; + +/* +___________________________________________________________________________________________ +WWFF +___________________________________________________________________________________________ +*/ + +$lang['awards_wwff_description_ln1'] = "Prêmio WWFF - Flora e Fauna Mundial"; +$lang['awards_wwff_description_ln2'] = "Incentiva operação portátil em áreas naturais protegidas pelo mundo."; +$lang['awards_wwff_description_ln3'] = "Mais de 26.000 áreas registradas. Prêmios nacionais e internacionais estão disponíveis."; +$lang['awards_wwff_description_ln4'] = "Mais informações: https://wwff.co/awards/."; + +/* +___________________________________________________________________________________________ +WAJA +___________________________________________________________________________________________ +*/ + +$lang['awards_waja_description_ln1'] = "Prêmio WAJA - Todas as Prefeituras do Japão"; +$lang['awards_waja_description_ln2'] = "Encoraja contatos com todas as 47 prefeituras do Japão."; +$lang['awards_waja_description_ln3'] = "Necessário contato e QSL de cada prefeitura. Lista pode ser organizada por número WAJA."; +$lang['awards_waja_description_ln4'] = "Mais informações: JARL - WAJA."; + +/* +___________________________________________________________________________________________ +WAB +___________________________________________________________________________________________ +*/ + +$lang['awards_wab_description_ln1'] = "Prêmio WAB - Worked All Britain"; +$lang['awards_wab_description_ln2'] = "Reconhece contatos com áreas WAB definidas por Grids do Ordnance Survey em todo o Reino Unido."; +$lang['awards_wab_description_ln3'] = "O objetivo é acumular pontos por contatos e conquistar níveis no programa de prêmios."; +$lang['awards_wab_description_ln4'] = "Mais informações: https://wab.intermip.net/default.php."; diff --git a/application/language/portuguese/contesting_lang.php b/application/language/portuguese/contesting_lang.php new file mode 100644 index 00000000..18d245bf --- /dev/null +++ b/application/language/portuguese/contesting_lang.php @@ -0,0 +1,36 @@ +aqui para fazer isso!'; +$lang['dashboard_locations_warning'] = 'Você não tem localizações de estação. Vá aqui para criar!'; +$lang['dashboard_logbooks_warning'] = 'Você não tem nenhum logbook. Vá aqui para criar!'; + +$lang['hams_at_no_activations_found'] = 'Nenhuma ativação futura encontrada. Verifique novamente mais tarde.'; + +$lang['datatables_language'] = "pt-BR"; + +$lang['set_log_to_full_dates'] = "Exibir datas completas no log"; diff --git a/application/language/portuguese/gridsquares_lang.php b/application/language/portuguese/gridsquares_lang.php new file mode 100644 index 00000000..6f9aef9e --- /dev/null +++ b/application/language/portuguese/gridsquares_lang.php @@ -0,0 +1,36 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/language/portuguese/lotw_lang.php b/application/language/portuguese/lotw_lang.php new file mode 100644 index 00000000..f8016e89 --- /dev/null +++ b/application/language/portuguese/lotw_lang.php @@ -0,0 +1,63 @@ +Download Report para marcar QSOs como confirmados via LoTW.'; +$lang['lotw_upload_type_must_be_adi'] = 'Arquivos de log devem ser do tipo .adi'; + +$lang['lotw_pull_lotw_data_for_me'] = 'Buscar dados do LoTW para mim'; +$lang['lotw_select_callsign'] = 'Selecione o indicativo para buscar confirmações no LoTW'; + +$lang['lotw_report_download_overview_helptext'] = 'O Cloudlog utilizará o nome de usuário e senha do LoTW armazenados no seu perfil para baixar um relatório. Esse relatório conterá todas as confirmações desde a data escolhida (ou desde a última confirmação no LoTW registrada no seu log) até o momento atual.'; + +// Botões +$lang['lotw_btn_lotw_import'] = 'Importar LoTW'; +$lang['lotw_btn_upload_certificate'] = 'Enviar Certificado'; +$lang['lotw_btn_delete'] = 'Excluir'; +$lang['lotw_btn_manual_sync'] = 'Sincronização Manual'; +$lang['lotw_btn_upload_file'] = 'Enviar Arquivo'; +$lang['lotw_btn_import_matches'] = 'Importar QSOs Confirmados no LoTW'; + +// Instruções para exportar P12 +$lang['lotw_p12_export_step_one'] = 'Abra o TQSL e vá até a aba "Certificados de Indicativo"'; +$lang['lotw_p12_export_step_two'] = 'Clique com o botão direito sobre o indicativo desejado'; +$lang['lotw_p12_export_step_three'] = 'Clique em "Salvar Arquivo de Certificado de Indicativo" e não adicione uma senha'; +$lang['lotw_p12_export_step_four'] = 'Envie o arquivo abaixo.'; + +$lang['lotw_confirmed'] = 'Este QSO está confirmado no LoTW'; + +// Avisos de validade +$lang['lotw_cert_expiring'] = 'Pelo menos um dos seus certificados do LoTW está prestes a expirar!'; +$lang['lotw_cert_expired'] = 'Pelo menos um dos seus certificados do LoTW está expirado!'; + +// Usuário do LoTW +$lang['lotw_user'] = 'Esta estação usa o LoTW.'; +$lang['lotw_last_upload'] = 'Último envio'; diff --git a/application/language/portuguese/menu_lang.php b/application/language/portuguese/menu_lang.php new file mode 100644 index 00000000..5e8a769e --- /dev/null +++ b/application/language/portuguese/menu_lang.php @@ -0,0 +1,97 @@ + '587', se usar SSL -> '465'"; +$lang['options_smtp_username_hint'] = "Nome de usuário para autenticação no servidor de email. Geralmente é o mesmo do endereço de email."; +$lang['options_smtp_password_hint'] = "Senha para autenticação no servidor de email."; +$lang['options_send_testmail'] = "Enviar email de teste"; +$lang['options_send_testmail_hint'] = "O email será enviado para o endereço definido nas configurações da sua conta."; +$lang['options_send_testmail_failed'] = "Falha ao enviar email de teste. Algo deu errado."; +$lang['options_send_testmail_success'] = "Email de teste enviado. As configurações parecem corretas."; + +$lang['options_oqrs'] = 'Opções OQRS'; +$lang['options_global_text'] = 'Texto global'; +$lang['options_this_text_is_an_optional_text_that_can_be_displayed_on_top_of_the_oqrs_page'] = 'Texto opcional exibido no topo da página OQRS.'; +$lang['options_grouped_search'] = 'Busca agrupada'; +$lang['options_when_this_is_on_all_station_locations_with_oqrs_active_will_be_searched_at_once'] = 'Quando ativado, todas as localizações com OQRS ativo serão buscadas ao mesmo tempo.'; +$lang['options_grouped_search_show_station_name'] = "Exibir nome da estação nos resultados da busca agrupada"; +$lang['options_grouped_search_show_station_name_hint'] = "Se busca agrupada estiver ativa, é possível exibir o nome da estação nos resultados."; +$lang['options_oqrs_options_have_been_saved'] = 'As opções do OQRS foram salvas.'; + +$lang['options_dxcluster'] = 'DXCluster'; +$lang['options_dxcluster_provider'] = 'Provedor do DXClusterCache'; +$lang['options_dxcluster_longtext'] = 'Provedor do DXCluster-Cache. Você pode configurar seu próprio cache com DXClusterAPI ou usar um público'; +$lang['options_dxcluster_hint'] = 'URL do DXCluster-Cache. Ex: https://dxc.jo30.de/dxcache'; +$lang['options_dxcluster_settings'] = 'DXCluster'; +$lang['options_dxcache_url_changed_to'] = 'URL do DXCluster alterada para '; +$lang['options_dxcluster_maxage'] = 'Idade máxima dos spots considerados'; +$lang['options_dxcluster_maxage_hint'] = 'Idade (em minutos) dos spots que serão considerados no plano de bandas/lookup'; +$lang['options_dxcluster_decont'] = 'Mostrar spots originados do seguinte continente'; +$lang['options_dxcluster_maxage_changed_to']='Idade máxima dos spots alterada para '; +$lang['options_dxcluster_decont_changed_to']='Continente alterado para '; +$lang['options_dxcluster_decont_hint']='Somente os spots de spotters deste continente serão exibidos'; + +$lang['options_version_dialog'] = "Informações de Versão"; +$lang['options_version_dialog_close'] = "Fechar"; +$lang['options_version_dialog_dismiss'] = "Não mostrar novamente"; +$lang['options_version_dialog_settings'] = "Configurações da Versão"; +$lang['options_version_dialog_header'] = "Cabeçalho da versão"; +$lang['options_version_dialog_header_hint'] = "Você pode alterar o cabeçalho da janela de versão."; +$lang['options_version_dialog_header_changed_to'] = "Cabeçalho da versão alterado para"; +$lang['options_version_dialog_mode'] = "Modo da versão"; +$lang['options_version_dialog_mode_release_notes'] = "Somente notas de versão"; +$lang['options_version_dialog_mode_custom_text'] = "Somente texto personalizado"; +$lang['options_version_dialog_mode_both'] = "Notas de versão e texto personalizado"; +$lang['options_version_dialog_mode_disabled'] = "Desativado"; +$lang['options_version_dialog_mode_hint'] = "As informações de versão são exibidas a todos os usuários, com opção de ocultar após leitura."; +$lang['options_version_dialog_custom_text'] = "Texto personalizado da versão"; +$lang['options_version_dialog_custom_text_hint'] = "Texto personalizado exibido na janela de versão."; +$lang['options_version_dialog_mode_changed_to'] = "Modo da versão alterado para"; +$lang['options_version_dialog_custom_text_saved'] = "Texto personalizado salvo!"; +$lang['options_version_dialog_success_show_all'] = "Informações de versão serão exibidas novamente a todos os usuários"; +$lang['options_version_dialog_success_hide_all'] = "Informações de versão não serão exibidas a nenhum usuário"; +$lang['options_version_dialog_show_hide'] = "Exibir/Ocultar versão para todos os usuários"; +$lang['options_version_dialog_show_all'] = "Exibir para todos os usuários"; +$lang['options_version_dialog_hide_all'] = "Ocultar para todos os usuários"; +$lang['options_version_dialog_show_all_hint'] = "A janela será exibida automaticamente a todos na próxima recarga."; +$lang['options_version_dialog_hide_all_hint'] = "Desativa a exibição automática da janela para todos os usuários."; + +$lang['options_save'] = 'Salvar'; + +// Bandas + +$lang['options_bands'] = "Bandas"; +$lang['options_bands_text_ln1'] = "Use a lista de bandas para controlar quais aparecem ao criar um novo QSO."; +$lang['options_bands_text_ln2'] = "Bandas ativas são exibidas no menu 'Banda', enquanto inativas ficam ocultas."; +$lang['options_bands_create'] = "Criar uma banda"; +$lang['options_bands_edit'] = "Editar banda"; +$lang['options_bands_activate_all'] = "Ativar todas"; +$lang['options_bands_activateall_warning'] = "Atenção! Deseja mesmo ativar todas as bandas?"; +$lang['options_bands_deactivate_all'] = "Desativar todas"; +$lang['options_bands_deactivateall_warning'] = "Atenção! Deseja mesmo desativar todas as bandas?"; +$lang['options_bands_ssb_qrg'] = "Frequência SSB"; +$lang['options_bands_ssb_qrg_hint'] = "Frequência SSB da banda (em Hz)"; +$lang['options_bands_data_qrg'] = "Frequência DATA"; +$lang['options_bands_data_qrg_hint'] = "Frequência para modos digitais da banda (em Hz)"; +$lang['options_bands_cw_qrg'] = "Frequência CW"; +$lang['options_bands_cw_qrg_hint'] = "Frequência CW da banda (em Hz)"; +$lang['options_bands_name_band'] = "Nome da Banda (ex: 20m)"; +$lang['options_bands_name_bandgroup'] = "Nome do grupo da banda (ex: hf, vhf, uhf, shf)"; +$lang['options_bands_delete_warning'] = "Atenção! Deseja mesmo excluir a banda: "; diff --git a/application/language/portuguese/qslcard_lang.php b/application/language/portuguese/qslcard_lang.php new file mode 100644 index 00000000..6b4b390f --- /dev/null +++ b/application/language/portuguese/qslcard_lang.php @@ -0,0 +1,39 @@ +aqui."; + +$lang['qso_simplefle_qso_data'] = "Dados do QSO"; +$lang['qso_simplefle_qso_date_hint'] = "Se você não escolher uma data, será usada a data de hoje."; +$lang['qso_simplefle_qso_list'] = "Lista de QSOs"; +$lang['qso_simplefle_qso_list_total'] = "Total"; +$lang['qso_simplefle_qso_date'] = "Data do QSO"; +$lang['qso_simplefle_operator'] = "Operador"; +$lang['qso_simplefle_operator_hint'] = "Ex.: OK2CQR"; +$lang['qso_simplefle_station_call_location'] = "Indicativo/Local da Estação"; +$lang['qso_simplefle_station_call_location_hint'] = "Se operou de um novo local, crie antes uma nova Localização da Estação"; +$lang['qso_simplefle_utc_time'] = "Hora UTC Atual"; +$lang['qso_simplefle_enter_the_data'] = "Digite os Dados"; +$lang['qso_simplefle_syntax_help_close_w_sample'] = "Fechar e Carregar Exemplo"; +$lang['qso_simplefle_reload'] = "Recarregar Lista"; +$lang['qso_simplefle_save'] = "Salvar no Cloudlog"; +$lang['qso_simplefle_clear'] = "Limpar Sessão"; +$lang['qso_simplefle_refs_hint'] = "Os Refs podem ser SOTA, IOTA, POTA ou WWFF"; + +// Erros e Avisos +$lang['qso_simplefle_error_band'] = "Falta informar a Banda!"; +$lang['qso_simplefle_error_mode'] = "Falta informar o Modo!"; +$lang['qso_simplefle_error_time'] = "Hora não definida!"; +$lang['qso_simplefle_error_stationcall'] = "Indicativo da estação não selecionado"; +$lang['qso_simplefle_error_operator'] = "Campo 'Operador' está vazio"; +$lang['qso_simplefle_warning_reset'] = "Atenção! Deseja realmente limpar tudo?"; +$lang['qso_simplefle_warning_missing_band_mode'] = "Atenção! Não é possível salvar a lista pois faltam Banda e/ou Modo em algum QSO!"; +$lang['qso_simplefle_warning_missing_time'] = "Atenção! Não é possível salvar a lista pois há QSOs sem horário definido!"; +$lang['qso_simplefle_warning_example_data'] = "Atenção! O campo de dados contém dados de exemplo. Limpe a sessão antes!"; +$lang['qso_simplefle_confirm_save_to_log'] = "Deseja mesmo adicionar esses QSOs ao log e limpar a sessão?"; +$lang['qso_simplefle_success_save_to_log_header'] = "QSOs Salvos!"; +$lang['qso_simplefle_success_save_to_log'] = "Os QSOs foram registrados com sucesso!"; +$lang['qso_simplefle_error_date'] = "Data inválida"; + +// Ajuda de Sintaxe +$lang['qso_simplefle_syntax_help_button'] = "Ajuda de Sintaxe"; +$lang['qso_simplefle_syntax_help_title'] = "Sintaxe do FLE"; +$lang['qso_simplefle_syntax_help_ln1'] = "Antes de registrar, atente-se às regras básicas:"; +$lang['qso_simplefle_syntax_help_ln2'] = "- Cada QSO deve estar em uma nova linha."; +$lang['qso_simplefle_syntax_help_ln3'] = "- Em cada linha, escreva apenas os dados que mudaram em relação ao QSO anterior."; +$lang['qso_simplefle_syntax_help_ln4'] = "Preencha o formulário à esquerda com data, indicativo da estação e do operador. Depois, insira banda (ou QRG, como '7.145'), modo e horário. O primeiro dado do QSO é o indicativo do contato."; +$lang['qso_simplefle_syntax_help_ln5'] = "Exemplo: QSO às 21:34 UTC com 2M0SQL em 20m SSB."; +$lang['qso_simplefle_syntax_help_ln6'] = "Se não informar RST, o padrão é 59 (ou 599 para modos digitais). Para o próximo QSO, com RST diferente e 2 minutos depois, apenas o horário muda."; +$lang['qso_simplefle_syntax_help_ln7'] = "Primeiro QSO foi às 21:34, o segundo às 21:36. Basta escrever '6' como o novo horário. Banda e modo não mudaram."; +$lang['qso_simplefle_syntax_help_ln8'] = "Para o QSO às 21:40 em 14 de maio de 2021, mudamos para 40m mas mantivemos SSB. Se outro QSO ocorreu no mesmo horário dois dias depois, informe a nova data no formato AAAA-MM-DD."; +$lang['qso_simplefle_syntax_help_ln9'] = "Mais detalhes na documentação do DF3CB aqui."; \ No newline at end of file diff --git a/application/language/portuguese/sstv_lang.php b/application/language/portuguese/sstv_lang.php new file mode 100644 index 00000000..ff5ea5f9 --- /dev/null +++ b/application/language/portuguese/sstv_lang.php @@ -0,0 +1,5 @@ + Local de Estação para selecionar.'; +$lang['station_location_reassign_at'] = 'Por favor, reatribua em '; +$lang['station_location_warning_reassign'] = 'Devido a mudanças recentes no Cloudlog, você precisa reatribuir QSOs aos seus perfis de estação.'; +$lang['station_location_name'] = 'Nome do Perfil'; +$lang['station_location_name_hint'] = 'Nome curto para o local da estação. Exemplo: Casa (IO87IP)'; +$lang['station_location_callsign'] = 'Indicativo da Estação'; +$lang['station_location_callsign_hint'] = 'Indicativo da estação. Exemplo: PY4XYZ/P'; +$lang['station_location_power'] = 'Potência da Estação (W)'; +$lang['station_location_power_hint'] = 'Potência padrão da estação em Watts. Pode ser sobrescrito via CAT.'; +$lang['station_location_emptylog'] = 'Log Vazio'; +$lang['station_location_confirm_active'] = 'Tem certeza que deseja definir a seguinte estação como ativa: '; +$lang['station_location_set_active'] = 'Definir como Ativa'; +$lang['station_location_active'] = 'Estação Ativa'; +$lang['station_location_claim_ownership'] = 'Assumir Propriedade'; +$lang['station_location_confirm_del_qso'] = 'Tem certeza que deseja excluir todos os QSOs deste perfil de estação?'; +$lang['station_location_confirm_del_stationlocation'] = 'Tem certeza que deseja excluir o perfil de estação '; +$lang['station_location_confirm_del_stationlocation_qso'] = 'Isso irá excluir todos os QSOs deste perfil.'; +$lang['station_location_dxcc'] = 'DXCC da Estação'; +$lang['station_location_dxcc_hint'] = 'Entidade DXCC da estação. Exemplo: Brasil'; +$lang['station_location_dxcc_warning'] = "Atenção: O DXCC selecionado está desatualizado. Verifique qual é o DXCC correto para esta localização."; +$lang['station_location_city'] = 'Cidade da Estação'; +$lang['station_location_city_hint'] = 'Cidade da estação. Exemplo: Montes Claros'; +$lang['station_location_state'] = 'Estado da Estação'; +$lang['station_location_state_hint'] = 'Estado da estação. Aplica-se apenas a certos países. Deixe em branco se não aplicável.'; +$lang['station_location_county'] = 'Condado da Estação'; +$lang['station_location_county_hint'] = 'Condado da estação (usado apenas para EUA/Alasca/Havaí).'; +$lang['station_location_gridsquare'] = 'Grid Square da Estação'; +$lang['station_location_gridsquare_hint_ln1'] = "Grid square da estação. Exemplo: GH49ac. Se não souber o seu, clique aqui!"; +$lang['station_location_gridsquare_hint_ln2'] = "Se estiver na linha de grid, insira múltiplos separados por vírgula. Ex: GH49,GH59."; +$lang['station_location_iota_hint_ln1'] = "Referência IOTA da estação. Exemplo: SA-023"; +$lang['station_location_iota_hint_ln2'] = "Consulte referências IOTA em IOTA World."; +$lang['station_location_sota_hint_ln1'] = "Referência SOTA da estação. Veja em SOTA Maps."; +$lang['station_location_wwff_hint_ln1'] = "Referência WWFF da estação. Veja em GMA Map."; +$lang['station_location_pota_hint_ln1'] = "Referência POTA da estação. Veja em POTA Map."; +$lang['station_location_signature'] = "Assinatura"; +$lang['station_location_signature_name'] = "Nome da Assinatura"; +$lang['station_location_signature_name_hint'] = "Assinatura da estação (ex: GMA)."; +$lang['station_location_signature_info'] = "Informações da Assinatura"; +$lang['station_location_signature_info_hint'] = "Informações da assinatura (ex: DA/NW-357)."; +$lang['station_location_eqsl_hint'] = 'Apelido do QTH configurado no seu perfil eQSL'; +$lang['station_location_eqsl_defaultqslmsg'] = "Mensagem QSL Padrão"; +$lang['station_location_eqsl_defaultqslmsg_hint'] = "Mensagem padrão que será incluída e enviada para cada QSO desta estação."; +$lang['station_location_qrz_subscription'] = 'Assinatura Necessária'; +$lang['station_location_qrz_hint'] = "Encontre sua chave de API em QRZ.com Logbook"; +$lang['station_location_qrz_realtime_upload'] = 'Envio em tempo real para QRZ.com'; +$lang['station_location_hrdlog_username'] = "Usuário HRDLog.net"; +$lang['station_location_hrdlog_username_hint'] = "Usuário registrado no HRDlog.net (geralmente seu indicativo)."; +$lang['station_location_hrdlog_code'] = "Chave API HRDLog.net"; +$lang['station_location_hrdlog_realtime_upload'] = "Envio em tempo real para HRDLog.net"; +$lang['station_location_hrdlog_code_hint'] = "Crie sua chave de API em HRDLog.net Perfil"; +$lang['station_location_qo100_hint'] = "Crie sua chave de API em QO-100 Dx Club"; +$lang['station_location_qo100_realtime_upload'] = "Envio em tempo real para QO-100 Dx Club"; +$lang['station_location_oqrs_enabled'] = "OQRS Ativado"; +$lang['station_location_oqrs_email_alert'] = "Alerta por Email do OQRS"; +$lang['station_location_oqrs_email_hint'] = "Certifique-se que o e-mail esteja configurado em admin e opções globais."; +$lang['station_location_oqrs_text'] = "Texto do OQRS"; +$lang['station_location_oqrs_text_hint'] = "Informações adicionais sobre envio de QSLs."; +$lang['station_location_clublog_realtime_upload']='Envio em tempo real para ClubLog'; diff --git a/application/language/portuguese/statistics_lang.php b/application/language/portuguese/statistics_lang.php new file mode 100644 index 00000000..2c2c1113 --- /dev/null +++ b/application/language/portuguese/statistics_lang.php @@ -0,0 +1,75 @@ + Seu contato mais distante foi com"; +$lang['statistics_distances_part2_contacts_were_plotted_furthest'] = "no gridsquare"; +$lang['statistics_distances_part3_contacts_were_plotted_furthest'] = "A distância foi"; +$lang['statistics_distances_part4_contacts_were_plotted_furthest'] = "A distância média é"; +$lang['statistics_distances_number_of_qsos'] = "Número de QSOs"; +$lang['statistics_distances_callsigns_worked'] = "Indicativos trabalhados (máximo 5 mostrados)"; +$lang['statistics_distances_qsos_with'] = "QSOs com distância: "; +$lang['statistics_distances_and_band'] = ", banda: "; +$lang['statistics_distances_and_mode'] = ", modo: "; +$lang['statistics_distances_and_power'] = ", potência: "; +$lang['statistics_distances_and_propagation'] = ", propagação: "; +$lang['statistics_distances_no_qsos_to_plot'] = "Nenhum QSO encontrado para plotar."; + +/* +* +* Linha do tempo +* +*/ + +$lang['statistics_timeline'] = "Linha do tempo"; + +/* +* +* Dias com QSO +* +*/ + +$lang['statistics_tab_yearly'] = "Anual"; +$lang['statistics_tab_streaks'] = "Sequências"; +$lang['statistics_tab_weekdays'] = "Dias da semana"; +$lang['statistics_tab_daily'] = "Diário"; +$lang['statistics_days_yearly'] = "Número de dias com QSOs por ano"; +$lang['statistics_days_with_qso'] = "Dias com QSOs"; +$lang['statistics_qsos_each_day'] = "Número de QSOs por dia"; +$lang['statistics_weekdays_with_qso'] = "Distribuição de QSOs por dia da semana"; +$lang['statistics_number_of_qsos_this_day'] = "Número de QSOs neste dia"; +$lang['statistics_number_of_qsos_this_weekday'] = "Número de QSOs neste dia da semana"; +$lang['statistics_dwq_longest_streak_in_log'] = "Maior sequência com QSOs no log"; +$lang['statistics_dwq_longest_streak_in_log_hint'] = "Um máximo de 10 maiores sequências são exibidas!"; +$lang['statistics_dwq_streak_continuous_days'] = "Sequência (dias consecutivos com QSOs)"; +$lang['statistics_dwq_current_streak_in_log'] = "Sequência atual com QSOs no log"; +$lang['statistics_dwq_current_streak_continuous_days'] = "Sequência atual (dias consecutivos com QSOs)"; +$lang['statistics_dwq_make_qso_to_extend_streak'] = "Se você fizer um QSO hoje, poderá continuar sua sequência... caso contrário, ela será quebrada!"; +$lang['statistics_dwq_no_current_streak'] = "Nenhuma sequência atual encontrada!"; + diff --git a/application/migrations/200_fix_brazil_dxcc_data.php b/application/migrations/200_fix_brazil_dxcc_data.php new file mode 100644 index 00000000..5241961c --- /dev/null +++ b/application/migrations/200_fix_brazil_dxcc_data.php @@ -0,0 +1,73 @@ +db->query("UPDATE `dxcc_master` SET TimeZone = 3 WHERE CountryCode = 108 AND DXCCSort = 1;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 15, PrefixList = 'PP1, PU1[A-I], ZV1[A-I], ZW1[A-I], ZX1[A-I], ZY1[A-I], ZZ1[A-I]', location = 'Espirito Santo ' WHERE CountryCode = 108 AND DXCCSort = 12;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PP2, PU2[F-H], Z[V-Z]2F, Z[V-Z]2G, Z[V-Z]2H', location = 'Goias ' WHERE CountryCode = 108 AND DXCCSort = 22;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 15, PrefixList = 'PP5, PU5[A-L], ZV5[A-L], ZW5[A-L], ZX5[A-L], ZY5[A-L], ZZ5[A-L]', location = 'Santa Catarina ' WHERE CountryCode = 108 AND DXCCSort = 52;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PP6, PU6[A-I], ZV6[A-I], ZW6[A-I], ZX6[A-I], ZY6[A-I], ZZ6[A-I]', location = 'Sergipe ' WHERE CountryCode = 108 AND DXCCSort = 62;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PP7, PU7[A-D], Z[V-Z]7A, Z[V-Z]7B, Z[V-Z]7C, Z[V-Z]7D', location = 'Alagoas ' WHERE CountryCode = 108 AND DXCCSort = 72;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 4, ITUZone = 13, PrefixList = 'PP8, PU8[A-C], Z[V-Z]8A, Z[V-Z]8B, Z[V-Z]8C', location = 'Amazonas ' WHERE CountryCode = 108 AND DXCCSort = 82;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PQ2, PU2[I-J], Z[V-Z]2I, Z[V-Z]2J', location = 'Tocantins ' WHERE CountryCode = 108 AND DXCCSort = 23;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PQ8, PU8[G-I], Z[V-Z]8G, Z[V-Z]8H, Z[V-Z]8I', location = 'Amapa ' WHERE CountryCode = 108 AND DXCCSort = 83;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PR7, PU7[E-H], Z[V-Z]7E, Z[V-Z]7F, Z[V-Z]7G, Z[V-Z]7H', location = 'Paraiba ' WHERE CountryCode = 108 AND DXCCSort = 73;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PR8, PU8[M-O], Z[V-Z]8M, Z[V-Z]8N, Z[V-Z]8O', location = 'Maranhao ' WHERE CountryCode = 108 AND DXCCSort = 84;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PS7, PU7[I-L], Z[V-Z]7I, Z[V-Z]7J, Z[V-Z]7K, Z[V-Z]7L', location = 'Rio Grande do Norte ' WHERE CountryCode = 108 AND DXCCSort = 74;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PS8, PU8[P-S], Z[V-Z]8P, Z[V-Z]8Q, Z[V-Z]8R, Z[V-Z]8S', location = 'Piaui ' WHERE CountryCode = 108 AND DXCCSort = 85;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PT2, PU2[A-E], Z[V-Z]2A, Z[V-Z]2B, Z[V-Z]2C, Z[V-Z]2D, Z[V-Z]2E', location = 'Brasilia ' WHERE CountryCode = 108 AND DXCCSort = 24;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PT7, PU7[M-P], Z[V-Z]7M, Z[V-Z]7N, Z[V-Z]7O, Z[V-Z]7P', location = 'Ceara ' WHERE CountryCode = 108 AND DXCCSort = 75;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 5, ITUZone = 12, PrefixList = 'PT8, PU8[J-L], Z[V-Z]8J, Z[V-Z]8K, Z[V-Z]8L', location = 'Acre ' WHERE CountryCode = 108 AND DXCCSort = 86;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 4, ITUZone = 13, PrefixList = 'PT9, PU9[A-N], Z[V-Z]9', location = 'Mato Grosso do Sul ' WHERE CountryCode = 108 AND DXCCSort = 92;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 4, ITUZone = 12, PrefixList = 'PV8, PU8[T-V], Z[V-Z]8T, Z[V-Z]8U, Z[V-Z]8V', location = 'Roraima ' WHERE CountryCode = 108 AND DXCCSort = 87;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 4, ITUZone = 12, PrefixList = 'PW8, PU8[D-F], Z[V-Z]8D, Z[V-Z]8E, Z[V-Z]8F', location = 'Rondonia ' WHERE CountryCode = 108 AND DXCCSort = 88;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 15, PrefixList = 'PY1, PU1[J-Y], Z[V-Z]1', location = 'Rio de Janeiro ' WHERE CountryCode = 108 AND DXCCSort = 11;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 15, PrefixList = 'PY2, PU2[K-Y], Z[V-Z]2', location = 'Sao Paulo ' WHERE CountryCode = 108 AND DXCCSort = 21;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 15, PrefixList = 'P[P-Y]3, Z[V-Z]3', location = 'Rio Grande do Sul ' WHERE CountryCode = 108 AND DXCCSort = 31;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 15, PrefixList = 'P[P-Y]4, Z[V-Z]4', location = 'Minas Gerais ' WHERE CountryCode = 108 AND DXCCSort = 41;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 15, PrefixList = 'PY5, PU5[M-Y], Z[V-Z]5', location = 'Parana ' WHERE CountryCode = 108 AND DXCCSort = 51;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PY6, PU6[J-Y], Z[V-Z]6', location = 'Bahia ' WHERE CountryCode = 108 AND DXCCSort = 61;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PY7, PU7[R-Y], Z[V-Z]7', location = 'Pernambuco ' WHERE CountryCode = 108 AND DXCCSort = 71;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 3, ITUZone = 13, PrefixList = 'PY8, PU8[W-Y], Z[V-Z]8', location = 'Para ' WHERE CountryCode = 108 AND DXCCSort = 81;"); + $this->db->query("UPDATE `dxcc_master` SET TimeZone = 4, ITUZone = 13, PrefixList = 'PY9, PU9[O-Y], ZV9[O-Z], ZW9[O-Z], ZX9[O-Z], ZY9[O-Z], ZZ9[O-Z]', location = 'Mato Grosso ' WHERE CountryCode = 108 AND DXCCSort = 91;"); + } + + public function down() + { + // Reverts to the original content + // (from 105_create_dxcc_master_tables.php) + $this->db->query("DELETE FROM `dxcc_master` WHERE CountryCode = 108;"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',1,108,'P[P-Y], Z[V-Z]','Brazil','Brazil','SA','11',NULL,NULL,4.0,-15.8,-47.9167,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',22,108,'PP2, PU2[F-H], Z[V-Z]2F, Z[V-Z]2G, Z[V-Z]2H','Brazil','Goias ','SA','11','',NULL,5.0,-15.8,-50.0,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',12,108,'PP1, PU1[A-I], ZV1[A-I], ZW1[A-I], ZX1[A-I], ZY1[A-I], ZZ1[A-I]','Brazil','Esprito Santo ','SA','11','15',NULL,4.0,-20.0,-40.6,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',75,108,'PT7, PU7[M-P], Z[V-Z]7M, Z[V-Z]7N, Z[V-Z]7O, Z[V-Z]7P','Brazil','Ceara ','SA','11','15',NULL,4.0,-5.6,-37.0,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',52,108,'PP5, PU5[A-L], ZV5[A-L], ZW5[A-L], ZX5[A-L], ZY5[A-L], ZZ5[A-L]','Brazil','Santa Catarina ','SA','11','15',NULL,4.0,-27.0,-50.6,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',62,108,'PP6, PU6[A-I], ,ZV6[A-I], ZW6[A-I], ZX6[A-I], ZY6[A-I], ZZ6[A-I]','Brazil','Sergipe ','SA','11','13',NULL,4.0,-10.7,-37.3,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',72,108,'PP7, PU7[A-D], Z[V-Z]7A, Z[V-Z]7B, Z[V-Z]7C, Z[V-Z]7D','Brazil','Algonas ','SA','11','13',NULL,4.0,-9.8,-36.6,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',82,108,'PP8, PU8[A-C], Z[V-Z]8A, Z[V-Z]8B, Z[V-Z]8C','Brazil','Amazonas ','SA','11','',NULL,4.0,-3.9,-65.0,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',86,108,'PT8, PU8[J-L], Z[V-Z]8J, Z[V-Z]8K, Z[V-Z]8L','Brazil','Acre ','SA','11','12',NULL,4.0,-9.0,-70.3,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',11,108,'P[Q-Y]1, Z[V-Z]1','Brazil','Rio de Janeiro ','SA','11','15',NULL,4.0,-22.75,-43.0,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',21,108,'PR2,PS2,P[U-Y]2, Z[V-Z]2','Brazil','Sao Paulo ','SA','11','15',NULL,4.0,-22.6,-48.3,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',31,108,'P[P-Y]3, Z[V-Z]3','Brazil','Rio Grande do Sul ','SA','11','15',NULL,4.0,-29.8,-53.5,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',41,108,'P[P-Y]4, Z[V-Z]4','Brazil','Minas Gerias ','SA','11','',NULL,4.0,-18.8,-45.2,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',51,108,'P[Q-Y]5, Z[V-Z]5','Brazil','Parana ','SA','11','15',NULL,4.0,-24.8,-52.2,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',61,108,'P[Q-Y]6, Z[V-Z]6','Brazil','Bahia ','SA','11','',NULL,4.0,-12.2,-42.1,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',71,108,'PQ7, P[U-Y]7, Z[V-Z]7','Brazil','Pernambuco ','SA','11','13',NULL,4.0,-8.5,-37.7,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',81,108,'P[X-Y]8, PU8[W-Y], Z[V-Z]8','Brazil','Para ','SA','11','13',NULL,4.0,-3.3,-52.7,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',91,108,'P[P-S]9, P[U-Y]9, ZV9[O-Z], ZW9[O-Z], ZX9[O-Z], ZY9[O-Z], ZZ9[O-Z]','Brazil','Mato Grosso ','SA','11','',NULL,4.0,-13.3,-56.0,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',23,108,'PQ2, PU2[I-J], Z[V-Z]2I, Z[V-Z]2J','Brazil','Tocantins ','SA','11','13',NULL,4.0,-10.4,-48.4,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',84,108,'PR8, PU8[M-O], Z[V-Z]8M, Z[V-Z]8N ,Z[V-Z]8O','Brazil','Maranhao ','SA','11','15',NULL,4.0,-4.9,-45.2,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',24,108,'PT2, PU2[A-E], Z[V-Z]2A, Z[V-Z]2B, Z[V-Z]2C, Z[V-Z]2D, Z[V-Z]2E','Brazil','Brasilia ','SA','11','15',NULL,4.0,-15.9,-47.9,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',83,108,'PQ8, PU8[G-I], Z[V-Z]G ,Z[V-Z]8H, Z[V-Z]8I','Brazil','Amapa ','SA','11','13',NULL,4.0,1.62,-52.1,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',73,108,'PR7, PU7[E-H], Z[V-Z]7E, Z[V-Z]7F, Z[V-Z]7G, Z[V-Z]7H','Brazil','Paraiba ','SA','11','13',NULL,4.0,-7.1,-36.3,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',85,108,'PS8, PU8[P-S], Z[V-Z]8P, Z[V-Z]8Q, Z[V-Z]8R, Z[V-Z]8S','Brazil','Piaui ','SA','11','13',NULL,4.0,-7.4,-42.4,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',74,108,'PS7, PU7[I-L], Z[V-Z]7I, Z[V-Z]7J, Z[V-Z]7K, Z[V-Z]7L','Brazil','Rio Grande del Norte ','SA','11','12',NULL,4.0,-5.8,-36.7,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',87,108,'PV8, PU8[T-V], Z[V-Z]8T, Z[V-Z]8U, Z[V-Z]8]V','Brazil','Roraima ','SA','11','',NULL,4.0,2.0,-62.0,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',88,108,'PW8, PU8[D-F], Z[V-Z]8D, Z[V-Z]8E, Z[V-Z]8F','Brazil','Rondonia ','SA','11','12',NULL,4.0,-10.8,-63.0,NULL,NULL);"); + $this->db->query("INSERT INTO `dxcc_master` (DXCCPrefix,DXCCSearch,DXCCMap,DXCCSort,CountryCode,PrefixList,DXCCName,Location,Continent,CQZone,ITUZone,IOTA,TimeZone,Latitude,Longitude,StartDate,EndDate) VALUES ('PY','PY','PY',92,108,'PT9, PU9[A-N], Z[V-Z]9','Brazil','Mato Grosso do Sul ','SA','11','15',NULL,4.0,-20.7,-55.0,NULL,NULL);"); + } +} diff --git a/application/migrations/201_tag_2_6_20.php b/application/migrations/201_tag_2_6_20.php new file mode 100644 index 00000000..6d1fb439 --- /dev/null +++ b/application/migrations/201_tag_2_6_20.php @@ -0,0 +1,30 @@ +db->where('option_name', 'version'); + $this->db->update('options', array('option_value' => '2.6.20')); + + // Trigger Version Info Dialog + $this->db->where('option_type', 'version_dialog'); + $this->db->where('option_name', 'confirmed'); + $this->db->update('user_options', array('option_value' => 'false')); + + } + + public function down() + { + $this->db->where('option_name', 'version'); + $this->db->update('options', array('option_value' => '2.6.19')); + } +} \ No newline at end of file diff --git a/application/models/Eqsl_images.php b/application/models/Eqsl_images.php index dcd16092..ad87c483 100644 --- a/application/models/Eqsl_images.php +++ b/application/models/Eqsl_images.php @@ -27,10 +27,15 @@ class Eqsl_images extends CI_Model { function eqsl_qso_list() { $this->load->model('logbooks_model'); $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); - $this->db->select('COL_PRIMARY_KEY, qso_id, COL_CALL, COL_MODE, , COL_SUBMODE, COL_TIME_ON, COL_BAND, COL_SAT_NAME, image_file'); + $this->db->select('COL_PRIMARY_KEY, qso_id, COL_CALL, COL_MODE, COL_SUBMODE, COL_TIME_ON, COL_BAND, COL_SAT_NAME, image_file'); $this->db->join($this->config->item('table_name'), 'qso_id = COL_PRIMARY_KEY', 'left outer'); $this->db->join('station_profile', $this->config->item('table_name').'.station_id = station_profile.station_id', 'left outer'); - $this->db->where_in('station_profile.station_id', $logbooks_locations_array); + if (!empty($logbooks_locations_array)) { + $this->db->where_in('station_profile.station_id', $logbooks_locations_array); + } else { + // Option 1: Prevent query and return empty result + return []; + } $this->db->order_by('COL_TIME_ON', 'DESC'); return $this->db->get('eQSL_images'); } diff --git a/application/models/Eqslmethods_model.php b/application/models/Eqslmethods_model.php index 4d782f5b..3f410fc1 100644 --- a/application/models/Eqslmethods_model.php +++ b/application/models/Eqslmethods_model.php @@ -63,7 +63,12 @@ class Eqslmethods_model extends CI_Model { $this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'Q'); $this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'N'); $this->db->group_end(); - $this->db->where_in('station_profile.station_id', $logbooks_locations_array); + if (!empty($logbooks_locations_array)) { + $this->db->where_in('station_profile.station_id', $logbooks_locations_array); + } else { + // Option 1: Skip the query altogether (return no results) + return []; + } return $this->db->get(); } @@ -91,7 +96,12 @@ class Eqslmethods_model extends CI_Model { $this->db->where($this->config->item('table_name').'.COL_CALL !=', ''); $this->db->where($this->config->item('table_name').'.COL_EQSL_QSL_RCVD', 'Y'); $this->db->where('qso_id', NULL); - $this->db->where_in('station_profile.station_id', $logbooks_locations_array); + if (!empty($logbooks_locations_array)) { + $this->db->where_in('station_profile.station_id', $logbooks_locations_array); + } else { + // Option 1: Skip the query altogether (return no results) + return []; + } $this->db->order_by("COL_TIME_ON", "desc"); return $this->db->get(); diff --git a/application/models/User_model.php b/application/models/User_model.php index ea93efdf..528b15ea 100644 --- a/application/models/User_model.php +++ b/application/models/User_model.php @@ -266,8 +266,8 @@ class User_Model extends CI_Model { 'user_quicklog' => xss_clean($fields['user_quicklog']), 'user_quicklog_enter' => xss_clean($fields['user_quicklog_enter']), 'language' => xss_clean($fields['language']), - 'winkey' => xss_clean($fields['user_winkey']), - 'winkey_websocket' => xss_clean($fields['user_winkey_websocket']), + 'winkey' => (isset($fields['user_winkey']) && is_numeric($clean = xss_clean($fields['user_winkey'])) && $clean !== '') ? intval($clean) : 0, + 'winkey_websocket' => isset($fields['user_winkey_websocket']) ? xss_clean($fields['user_winkey_websocket']) : 0, ); $this->db->query("replace into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $fields['id'] . ", 'hamsat','hamsat_key','api','".xss_clean($fields['user_hamsat_key'])."');"); diff --git a/application/views/logbookadvanced/index.php b/application/views/logbookadvanced/index.php index c2a3bd0b..35d5e367 100644 --- a/application/views/logbookadvanced/index.php +++ b/application/views/logbookadvanced/index.php @@ -20,6 +20,10 @@ if (!isset($options->operator)) { } ?> +