diff --git a/application/controllers/Logbook.php b/application/controllers/Logbook.php index 13e3970d9..645bf827d 100644 --- a/application/controllers/Logbook.php +++ b/application/controllers/Logbook.php @@ -162,18 +162,21 @@ class Logbook extends CI_Controller { $measurement_base = $this->session->userdata('user_measurement_base'); } - $return['callsign_name'] = $this->nval($callbook['name'] ?? '', $this->logbook_model->call_name($callsign)); - $return['callsign_qra'] = $this->nval($callbook['gridsquare'] ?? '', $this->logbook_model->call_qra($callsign)); + // Get user's lookup priority preference + $lookup_priority = $this->get_lookup_priority(); + + $return['callsign_name'] = $this->nval($this->logbook_model->call_name($callsign), $callbook['name'] ?? '', $lookup_priority); + $return['callsign_qra'] = $this->nval($this->logbook_model->call_qra($callsign), $callbook['gridsquare'] ?? '', $lookup_priority); $return['callsign_geoloc'] = $callbook['geoloc'] ?? ''; $return['callsign_distance'] = $this->distance($return['callsign_qra'], $station_id); - $return['callsign_qth'] = $this->nval($callbook['city'] ?? '', $this->logbook_model->call_qth($callsign)); - $return['callsign_iota'] = $this->nval($callbook['iota'] ?? '', $this->logbook_model->call_iota($callsign)); - $return['callsign_email'] = $this->nval($callbook['email'] ?? '', $this->logbook_model->call_email($callsign)); - $return['qsl_manager'] = $this->nval($callbook['qslmgr'] ?? '', $this->logbook_model->call_qslvia($callsign)); - $return['callsign_state'] = $this->nval($callbook['state'] ?? '', $this->logbook_model->call_state($callsign)); - $return['callsign_us_county'] = $this->nval($callbook['us_county'] ?? '', $this->logbook_model->call_us_county($callsign)); - $return['callsign_ituz'] = $this->nval($callbook['ituz'] ?? '', $this->logbook_model->call_ituzone($callsign)); - $return['callsign_cqz'] = $this->nval($callbook['cqz'] ?? '', $this->logbook_model->call_cqzone($callsign)); + $return['callsign_qth'] = $this->nval($this->logbook_model->call_qth($callsign), $callbook['city'] ?? '', $lookup_priority); + $return['callsign_iota'] = $this->nval($this->logbook_model->call_iota($callsign), $callbook['iota'] ?? '', $lookup_priority); + $return['callsign_email'] = $this->nval($this->logbook_model->call_email($callsign), $callbook['email'] ?? '', $lookup_priority); + $return['qsl_manager'] = $this->nval($this->logbook_model->call_qslvia($callsign), $callbook['qslmgr'] ?? '', $lookup_priority); + $return['callsign_state'] = $this->nval($this->logbook_model->call_state($callsign), $callbook['state'] ?? '', $lookup_priority); + $return['callsign_us_county'] = $this->nval($this->logbook_model->call_us_county($callsign), $callbook['us_county'] ?? '', $lookup_priority); + $return['callsign_ituz'] = $this->nval($this->logbook_model->call_ituzone($callsign), $callbook['ituz'] ?? '', $lookup_priority); + $return['callsign_cqz'] = $this->nval($this->logbook_model->call_cqzone($callsign), $callbook['cqz'] ?? '', $lookup_priority); $return['workedBefore'] = $this->worked_grid_before($return['callsign_qra'], $band, $mode); $return['confirmed'] = $this->confirmed_grid_before($return['callsign_qra'], $band, $mode); $return['timesWorked'] = $this->logbook_model->times_worked($lookupcall); @@ -200,8 +203,21 @@ class Logbook extends CI_Controller { return; } + // Helper function to get user's lookup priority setting + // Returns 1 for database priority, 2 for external lookup priority (default) + function get_lookup_priority() { + $this->load->model('user_options_model'); + $priority = $this->user_options_model->get_options('qso_db_search_priority', array('option_name'=>'enable', 'option_key'=>'boolean'))->row(); + // If setting is 'Y' (Yes), prioritize database (return 1), otherwise prioritize external lookup (return 2) + return (isset($priority->option_value) && $priority->option_value == 'Y') ? 1 : 2; + } + // Returns $val2 first if it has value, even if it is null or empty string, if not return $val1. - function nval($val1, $val2) { + // When $priority is set to 1, returns $val1 first if it has value, if not return $val2. + function nval($val1, $val2, $priority = 2) { + if ($priority == 1) { + return (($val1 ?? "") === "" ? ($val2 ?? "") : ($val1 ?? "")); + } return (($val2 ?? "") === "" ? ($val1 ?? "") : ($val2 ?? "")); } diff --git a/application/controllers/User.php b/application/controllers/User.php index fdd0bf990..9364e5d74 100644 --- a/application/controllers/User.php +++ b/application/controllers/User.php @@ -226,6 +226,7 @@ class User extends CI_Controller { $data['user_default_band'] = $this->input->post('user_default_band'); $data['user_default_confirmation'] = ($this->input->post('user_default_confirmation_qsl') !== null ? 'Q' : '').($this->input->post('user_default_confirmation_lotw') !== null ? 'L' : '').($this->input->post('user_default_confirmation_eqsl') !== null ? 'E' : '').($this->input->post('user_default_confirmation_qrz') !== null ? 'Z' : '').($this->input->post('user_default_confirmation_clublog') !== null ? 'C' : '').($this->input->post('user_default_confirmation_dcl') !== null ? 'D' : ''); $data['user_qso_end_times'] = $this->input->post('user_qso_end_times'); + $data['user_qso_db_search_priority'] = $this->input->post('user_qso_db_search_priority') ?? 'Y'; $data['user_quicklog'] = $this->input->post('user_quicklog'); $data['user_quicklog_enter'] = $this->input->post('user_quicklog_enter'); $data['user_hamsat_key'] = $this->input->post('user_hamsat_key'); @@ -278,6 +279,7 @@ class User extends CI_Controller { $this->input->post('user_default_band'), ($this->input->post('user_default_confirmation_qsl') !== null ? 'Q' : '').($this->input->post('user_default_confirmation_lotw') !== null ? 'L' : '').($this->input->post('user_default_confirmation_eqsl') !== null ? 'E' : '').($this->input->post('user_default_confirmation_qrz') !== null ? 'Z' : '').($this->input->post('user_default_confirmation_clublog') !== null ? 'C' : '').($this->input->post('user_default_confirmation_dcl') !== null ? 'D' : ''), $this->input->post('user_qso_end_times'), + $this->input->post('user_qso_db_search_priority') ?? 'Y', $this->input->post('user_quicklog'), $this->input->post('user_quicklog_enter'), $this->input->post('user_language'), @@ -358,6 +360,7 @@ class User extends CI_Controller { $data['user_default_band'] = $this->input->post('user_default_band'); $data['user_default_confirmation'] = ($this->input->post('user_default_confirmation_qsl') !== null ? 'Q' : '').($this->input->post('user_default_confirmation_lotw') !== null ? 'L' : '').($this->input->post('user_default_confirmation_eqsl') !== null ? 'E' : '').($this->input->post('user_default_confirmation_qrz') !== null ? 'Z' : '').($this->input->post('user_default_confirmation_clublog') !== null ? 'C' : '').($this->input->post('user_default_confirmation_dcl') !== null ? 'D' : ''); $data['user_qso_end_times'] = $this->input->post('user_qso_end_times'); + $data['user_qso_db_search_priority'] = $this->input->post('user_qso_db_search_priority') ?? 'Y'; $data['user_quicklog'] = $this->input->post('user_quicklog'); $data['user_quicklog_enter'] = $this->input->post('user_quicklog_enter'); $data['user_language'] = $this->input->post('user_language'); @@ -832,6 +835,15 @@ class User extends CI_Controller { } } + if($this->input->post('user_qso_db_search_priority')) { + $data['user_qso_db_search_priority'] = $this->input->post('user_qso_db_search_priority', false); + } else { + $qkey_opt=$this->user_options_model->get_options('qso_db_search_priority',array('option_name'=>'enable','option_key'=>'boolean'), $this->uri->segment(3))->result(); + if (count($qkey_opt)>0) { + $data['user_qso_db_search_priority'] = $qkey_opt[0]->option_value; + } + } + if($this->input->post('oqrs_direct_auto_matching')) { $data['oqrs_direct_auto_matching'] = $this->input->post('oqrs_direct_auto_matching', false); } else { @@ -999,6 +1011,7 @@ class User extends CI_Controller { $data['oqrs_grouped_search_show_station_name'] = $this->input->post('oqrs_grouped_search_show_station_name', true); $data['oqrs_auto_matching'] = $this->input->post('oqrs_auto_matching', true); $data['oqrs_direct_auto_matching'] = $this->input->post('oqrs_direct_auto_matching', true); + $data['user_qso_db_search_priority'] = $this->input->post('user_qso_db_search_priority', true); $this->load->view('user/edit'); $this->load->view('interface_assets/footer'); diff --git a/application/models/User_model.php b/application/models/User_model.php index 219609c27..8925d16ea 100644 --- a/application/models/User_model.php +++ b/application/models/User_model.php @@ -219,7 +219,7 @@ class User_Model extends CI_Model { $measurement, $dashboard_map, $user_date_format, $user_stylesheet, $user_qth_lookup, $user_sota_lookup, $user_wwff_lookup, $user_pota_lookup, $user_show_notes, $user_column1, $user_column2, $user_column3, $user_column4, $user_column5, $user_show_profile_image, $user_previous_qsl_type, $user_amsat_status_upload, $user_mastodon_url, - $user_default_band, $user_default_confirmation, $user_qso_end_times, $user_quicklog, $user_quicklog_enter, + $user_default_band, $user_default_confirmation, $user_qso_end_times, $user_qso_db_search_priority,$user_quicklog, $user_quicklog_enter, $user_language, $user_hamsat_key, $user_hamsat_workable_only, $user_iota_to_qso_tab, $user_sota_to_qso_tab, $user_wwff_to_qso_tab, $user_pota_to_qso_tab, $user_sig_to_qso_tab, $user_dok_to_qso_tab, $user_lotw_name, $user_lotw_password, $user_eqsl_name, $user_eqsl_password, $user_clublog_name, $user_clublog_password, @@ -258,6 +258,7 @@ class User_Model extends CI_Model { 'user_default_band' => xss_clean($user_default_band), 'user_default_confirmation' => xss_clean($user_default_confirmation), 'user_qso_end_times' => xss_clean($user_qso_end_times), + 'user_qso_db_search_priority' => xss_clean($user_qso_db_search_priority), 'user_quicklog' => xss_clean($user_quicklog), 'user_quicklog_enter' => xss_clean($user_quicklog_enter), 'user_language' => xss_clean($user_language), @@ -314,6 +315,7 @@ class User_Model extends CI_Model { $this->db->query("insert into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $insert_id . ", 'widget','on_air','display_last_seen','".(xss_clean($on_air_widget_display_last_seen ?? 'false'))."');"); $this->db->query("insert into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $insert_id . ", 'widget','on_air','display_only_most_recent_radio','".(xss_clean($on_air_widget_show_only_most_recent_radio ?? 'true'))."');"); $this->db->query("insert into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $insert_id . ", 'widget','qso','display_qso_time','".(xss_clean($qso_widget_display_qso_time ?? 'false'))."');"); + $this->db->query("insert into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $insert_id . ", 'qso_db_search_priority','enable','boolean','".(xss_clean($user_qso_db_search_priority ?? 'Y'))."');"); return OK; } else { @@ -388,6 +390,7 @@ class User_Model extends CI_Model { $this->db->query("replace into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $fields['id'] . ", 'dashboard','show_map','boolean','".xss_clean($fields['user_dashboard_map'] ?? 'Y')."');"); $this->db->query("replace into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $fields['id'] . ", 'dashboard','show_dashboard_banner','boolean','".xss_clean($fields['user_dashboard_banner'] ?? 'Y')."');"); $this->db->query("replace into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $fields['id'] . ", 'dashboard','show_dashboard_solar','boolean','".xss_clean($fields['user_dashboard_solar'] ?? 'N')."');"); + $this->db->query("replace into user_options (user_id, option_type, option_name, option_key, option_value) values (" . $fields['id'] . ", 'qso_db_search_priority','enable','boolean','".xss_clean($fields['user_qso_db_search_priority'] ?? 'Y')."');"); $this->session->set_userdata('dashboard_last_qso_count', $dashboard_last_qso_count); $this->session->set_userdata('qso_page_last_qso_count', $qso_page_last_qso_count); $this->session->set_userdata('user_dashboard_map',xss_clean($fields['user_dashboard_map'] ?? 'Y')); @@ -552,6 +555,7 @@ class User_Model extends CI_Model { 'user_dashboard_map' => ((($this->session->userdata('user_dashboard_map') ?? 'Y') == 'Y') ? $this->user_options_model->get_options('dashboard', array('option_name' => 'show_map', 'option_key' => 'boolean'))->row()->option_value ?? 'Y' : $this->session->userdata('user_dashboard_map')), 'user_dashboard_banner' => ((($this->session->userdata('user_dashboard_banner') ?? 'Y') == 'Y') ? $this->user_options_model->get_options('dashboard', array('option_name' => 'show_dashboard_banner', 'option_key' => 'boolean'))->row()->option_value ?? 'Y' : $this->session->userdata('user_dashboard_banner')), 'user_dashboard_solar' => ((($this->session->userdata('user_dashboard_solar') ?? 'N') == 'Y') ? $this->session->userdata('user_dashboard_solar') : $this->user_options_model->get_options('dashboard', array('option_name' => 'show_dashboard_solar', 'option_key' => 'boolean'))->row()->option_value ?? 'N'), + 'user_qso_db_search_priority' => ((($this->session->userdata('user_qso_db_search_priority') ?? 'Y') == 'Y') ? $this->session->userdata('user_qso_db_search_priority') : $this->user_options_model->get_options('qso_db_search_priority', array('option_name' => 'enable', 'option_key' => 'boolean'))->row()->option_value ?? 'Y'), 'user_date_format' => $u->row()->user_date_format, 'user_stylesheet' => $u->row()->user_stylesheet, 'user_qth_lookup' => isset($u->row()->user_qth_lookup) ? $u->row()->user_qth_lookup : 0, diff --git a/application/views/user/edit.php b/application/views/user/edit.php index cab9e2c3b..79533e73f 100644 --- a/application/views/user/edit.php +++ b/application/views/user/edit.php @@ -370,6 +370,16 @@ = __("Choose yes here if you want to log QSO start and end times separately. If set to 'No' the end time will be the same as start time."); ?> +