diff --git a/application/models/Logbook_model.php b/application/models/Logbook_model.php index a507af01..c00b2327 100755 --- a/application/models/Logbook_model.php +++ b/application/models/Logbook_model.php @@ -118,7 +118,6 @@ class Logbook_model extends CI_Model } if ($this->input->post('dxcc_id') == "") { - $dxcc = $this->check_dxcc_table(strtoupper(trim($callsign)), $datetime); if (empty($dxcc[0])) { $dxcc_id = null; @@ -126,13 +125,12 @@ class Logbook_model extends CI_Model $dxcc_id = $dxcc[0]; } } else { - // if $country isn't empty + // if $country isn't empty and dxcc_id is 0 use the DXCC ID from the callsign lookup if (!empty($country) && $this->input->post('dxcc_id') == "0") { $dxcc_id = $dxcc_id; } else { $dxcc_id = $this->input->post('dxcc_id'); } - } if ($this->input->post('continent') == "") { @@ -194,13 +192,13 @@ class Logbook_model extends CI_Model case 'power': $qso_rx_power = $srx_string; break; - // Example for more sophisticated exchanges and their split into the db: - //case 'name/power': - // if (strlen($srx_string) == 0) break; - // $exch_pt = explode(" ",$srx_string); - // $qso_name = $exch_pt[0]; - // if (count($exch_pt)>1) $qso_power = $exch_pt[1]; - // break; + // Example for more sophisticated exchanges and their split into the db: + //case 'name/power': + // if (strlen($srx_string) == 0) break; + // $exch_pt = explode(" ",$srx_string); + // $qso_name = $exch_pt[0]; + // if (count($exch_pt)>1) $qso_power = $exch_pt[1]; + // break; default: } } @@ -2640,7 +2638,7 @@ class Logbook_model extends CI_Model if (!empty($logbooks_locations_array)) { // Pre-calculate today's date for better performance $today_date = date('Y-m-d'); - + $this->db->select(" COUNT(IF(COL_QSL_SENT='Y',COL_QSL_SENT,null)) as QSL_Sent, COUNT(IF(COL_QSL_RCVD='Y',COL_QSL_RCVD,null)) as QSL_Received, @@ -3008,7 +3006,8 @@ class Logbook_model extends CI_Model } // Consolidated method to get all country statistics in one query - function get_countries_statistics_consolidated($StationLocationsArray = null) { + function get_countries_statistics_consolidated($StationLocationsArray = null) + { if ($StationLocationsArray == null) { $CI = &get_instance(); $CI->load->model('logbooks_model'); @@ -3044,7 +3043,7 @@ class Logbook_model extends CI_Model } } } - + return array( 'Countries_Worked' => 0, 'Countries_Worked_QSL' => 0, @@ -4410,13 +4409,13 @@ class Logbook_model extends CI_Model public function get_entity($dxcc) { - $sql = "SELECT name, cqz, lat, `long` FROM dxcc_entities WHERE adif = ?"; - $query = $this->db->query($sql, array($dxcc)); - - if ($query->num_rows() > 0) { - return $query->row_array(); - } - return ''; + $sql = "SELECT name, cqz, lat, `long` FROM dxcc_entities WHERE adif = ?"; + $query = $this->db->query($sql, array($dxcc)); + + if ($query->num_rows() > 0) { + return $query->row_array(); + } + return ''; } /* @@ -4507,37 +4506,37 @@ class Logbook_model extends CI_Model foreach ($r->result_array() as $row) { $callsign = $row['COL_CALL']; if ($this->session->userdata('callbook_type') == "QRZ") { - // Lookup using QRZ - $this->load->library('qrz'); + // Lookup using QRZ + $this->load->library('qrz'); - // Load the encryption library - $this->load->library('encryption'); + // Load the encryption library + $this->load->library('encryption'); - // Decrypt the password - $decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password')); + // Decrypt the password + $decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password')); - if(!$this->session->userdata('qrz_session_key')) { - $qrz_session_key = $this->qrz->session($this->session->userdata('callbook_username'), $decrypted_password); - $this->session->set_userdata('qrz_session_key', $qrz_session_key); - } + if (!$this->session->userdata('qrz_session_key')) { + $qrz_session_key = $this->qrz->session($this->session->userdata('callbook_username'), $decrypted_password); + $this->session->set_userdata('qrz_session_key', $qrz_session_key); + } $callbook = $this->qrz->search($callsign, $this->session->userdata('qrz_session_key')); } if ($this->session->userdata('callbook_type') == "HamQTH") { - // Load the HamQTH library - $this->load->library('hamqth'); + // Load the HamQTH library + $this->load->library('hamqth'); - // Load the encryption library - $this->load->library('encryption'); + // Load the encryption library + $this->load->library('encryption'); - // Decrypt the password - $decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password')); - - if(!$this->session->userdata('hamqth_session_key')) { - $hamqth_session_key = $this->hamqth->session($this->session->userdata('callbook_username'), $decrypted_password); - $this->session->set_userdata('hamqth_session_key', $hamqth_session_key); - } + // Decrypt the password + $decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password')); + + if (!$this->session->userdata('hamqth_session_key')) { + $hamqth_session_key = $this->hamqth->session($this->session->userdata('callbook_username'), $decrypted_password); + $this->session->set_userdata('hamqth_session_key', $hamqth_session_key); + } $callbook = $this->hamqth->search($callsign, $this->session->userdata('hamqth_session_key')); @@ -4659,7 +4658,7 @@ class Logbook_model extends CI_Model // Decrypt the password $decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password')); - if(!$this->session->userdata('qrz_session_key')) { + if (!$this->session->userdata('qrz_session_key')) { $qrz_session_key = $this->qrz->session($this->session->userdata('callbook_username'), $decrypted_password); $this->session->set_userdata('qrz_session_key', $qrz_session_key); } @@ -4687,8 +4686,8 @@ class Logbook_model extends CI_Model // Decrypt the password $decrypted_password = $this->encryption->decrypt($this->session->userdata('callbook_password')); - - if(!$this->session->userdata('hamqth_session_key')) { + + if (!$this->session->userdata('hamqth_session_key')) { $hamqth_session_key = $this->hamqth->session($this->session->userdata('callbook_username'), $decrypted_password); $this->session->set_userdata('hamqth_session_key', $hamqth_session_key); } @@ -4863,20 +4862,20 @@ class Logbook_model extends CI_Model // [JSON PLOT] return array for plot qso for map // public function get_plot_array_for_map($qsos_result, $isVisitor = false) -{ + { $this->load->library('qra'); $CI = &get_instance(); $CI->load->library('DxccFlag'); - + $json["markers"] = array(); - + foreach ($qsos_result as $row) { $plot = array('lat' => 0, 'lng' => 0, 'html' => '', 'label' => '', 'flag' => '', 'confirmed' => 'N'); - + $plot['label'] = $row->COL_CALL; $plot['callsign'] = $row->COL_CALL; $flag = strtolower($CI->dxccflag->getISO($row->COL_DXCC)); - $plot['flag'] = 'name))) . '"> '; + $plot['flag'] = 'name))) . '"> '; $plot['html'] = ($row->COL_GRIDSQUARE != null ? "Grid: " . $row->COL_GRIDSQUARE . "
" : ""); $plot['html'] .= "Date/Time: " . $row->COL_TIME_ON . "
"; $plot['html'] .= ($row->COL_SAT_NAME != null) ? ("SAT: " . $row->COL_SAT_NAME . "
") : ("Band: " . $row->COL_BAND . " "); @@ -4937,12 +4936,13 @@ class Logbook_model extends CI_Model } /** - * Processes a batch of QRZ ADIF records for efficient database updates. - * - * @param array $batch_data Array of records from the ADIF file. - * @return string HTML table rows for the processed batch. - */ - public function process_qrz_batch($batch_data) { + * Processes a batch of QRZ ADIF records for efficient database updates. + * + * @param array $batch_data Array of records from the ADIF file. + * @return string HTML table rows for the processed batch. + */ + public function process_qrz_batch($batch_data) + { $table = ""; $update_batch_data = []; $this->load->model('Stations'); @@ -4952,14 +4952,14 @@ class Logbook_model extends CI_Model } // Step 1: Build WHERE clause for fetching potential matches - $this->db->select($this->config->item('table_name').'.COL_PRIMARY_KEY, '.$this->config->item('table_name').'.COL_CALL, '.$this->config->item('table_name').'.COL_TIME_ON, '.$this->config->item('table_name').'.COL_BAND, '.$this->config->item('table_name').'.COL_MODE, '); + $this->db->select($this->config->item('table_name') . '.COL_PRIMARY_KEY, ' . $this->config->item('table_name') . '.COL_CALL, ' . $this->config->item('table_name') . '.COL_TIME_ON, ' . $this->config->item('table_name') . '.COL_BAND, ' . $this->config->item('table_name') . '.COL_MODE, '); $this->db->from($this->config->item('table_name')); $this->db->group_start(); // Start grouping OR conditions foreach ($batch_data as $record) { $this->db->or_group_start(); // Start group for this record's AND conditions - $this->db->where($this->config->item('table_name').'.COL_CALL', $record['call']); - $this->db->like($this->config->item('table_name').'.COL_TIME_ON', $record['time_on'], 'after'); - $this->db->where($this->config->item('table_name').'.COL_BAND', $record['band']); + $this->db->where($this->config->item('table_name') . '.COL_CALL', $record['call']); + $this->db->like($this->config->item('table_name') . '.COL_TIME_ON', $record['time_on'], 'after'); + $this->db->where($this->config->item('table_name') . '.COL_BAND', $record['band']); $this->db->group_end(); // End group for this record's AND conditions } $this->db->group_end(); // End grouping OR conditions @@ -4971,7 +4971,7 @@ class Logbook_model extends CI_Model // Index DB results for faster lookup $indexed_results = []; foreach ($db_results as $row) { - $time = substr($row['COL_TIME_ON'], 0, 16); + $time = substr($row['COL_TIME_ON'], 0, 16); $key = $row['COL_CALL'] . '|' . $time . '|' . $row['COL_BAND']; $indexed_results[$key] = $row['COL_PRIMARY_KEY']; } @@ -5020,11 +5020,12 @@ class Logbook_model extends CI_Model * @param string $user_format The user's preferred date format (e.g., 'd/m/Y', 'Y-m-d') * @return string Returns date in Y-m-d format for database storage, or original input if parsing fails */ - private function parse_user_date($date_input, $user_format = null) { + private function parse_user_date($date_input, $user_format = null) + { if (empty($date_input)) { return $date_input; } - + // If no user format provided, try to get it from session or config if ($user_format === null) { if ($this->session->userdata('user_date_format')) { @@ -5033,19 +5034,19 @@ class Logbook_model extends CI_Model $user_format = $this->config->item('qso_date_format'); } } - + // Try to parse with the user's format first $date = DateTime::createFromFormat($user_format, $date_input); if ($date !== false) { return $date->format('Y-m-d'); } - + // Fallback to strtotime for formats it can handle (mostly Y-m-d, m/d/Y, etc.) $timestamp = strtotime($date_input); if ($timestamp !== false) { return date('Y-m-d', $timestamp); } - + // If all parsing fails, return the original input and let the database handle it return $date_input; }