| 
									
										
										
										
											2020-11-04 00:06:35 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Eqslmethods_model extends CI_Model { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function mark_all_as_sent() { | 
					
						
							|  |  |  | 		$data = array( | 
					
						
							|  |  |  |             'COL_EQSL_QSL_SENT' => 'Y', | 
					
						
							|  |  |  |             'COL_EQSL_QSLSDATE'  => date('Y-m-d')." 00:00:00", | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2022-07-05 02:12:39 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->db->group_start(); | 
					
						
							|  |  |  | 		$this->db->where('COL_EQSL_QSL_SENT', 'N'); | 
					
						
							|  |  |  |         $this->db->or_where('COL_EQSL_QSL_SENT', 'R'); | 
					
						
							|  |  |  |         $this->db->or_where('COL_EQSL_QSL_SENT', 'Q'); | 
					
						
							|  |  |  |         $this->db->or_where('COL_EQSL_QSL_SENT', null); | 
					
						
							|  |  |  | 		$this->db->group_end(); | 
					
						
							|  |  |  |         | 
					
						
							| 
									
										
										
										
											2022-07-05 01:29:25 +08:00
										 |  |  |         $this->db->update($this->config->item('table_name'), $data); | 
					
						
							| 
									
										
										
										
											2020-11-04 00:06:35 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-05 15:34:32 +08:00
										 |  |  |     function get_eqsl_users() { | 
					
						
							|  |  |  |         $this->db->select('user_eqsl_name, user_eqsl_password, user_id'); | 
					
						
							|  |  |  |         $this->db->where('coalesce(user_eqsl_name, "") != ""'); | 
					
						
							|  |  |  |         $this->db->where('coalesce(user_eqsl_password, "") != ""'); | 
					
						
							|  |  |  |         $query = $this->db->get($this->config->item('auth_table')); | 
					
						
							|  |  |  |         return $query->result(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-05 22:31:10 +08:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * Gets all station location for user, for use in cron where we don't have any login | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     function get_all_user_locations($userid) { | 
					
						
							|  |  |  | 		$this->db->select('station_profile.*, dxcc_entities.name as station_country, dxcc_entities.end as dxcc_end'); | 
					
						
							|  |  |  | 		$this->db->where('user_id', $userid); | 
					
						
							|  |  |  | 		$this->db->join('dxcc_entities','station_profile.station_dxcc = dxcc_entities.adif','left outer'); | 
					
						
							|  |  |  | 		return $this->db->get('station_profile'); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2023-05-05 15:34:32 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // Show all QSOs we need to send to eQSL
 | 
					
						
							|  |  |  |     function eqsl_not_yet_sent($userid = null) { | 
					
						
							|  |  |  |         $CI =& get_instance(); | 
					
						
							|  |  |  |         if ($userid == null) { | 
					
						
							|  |  |  |             $CI->load->model('logbooks_model'); | 
					
						
							|  |  |  |             $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); | 
					
						
							|  |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2023-05-05 22:31:10 +08:00
										 |  |  |             $stations = $this->get_all_user_locations($userid); | 
					
						
							| 
									
										
										
										
											2023-05-05 15:34:32 +08:00
										 |  |  |             $logbooks_locations_array = array(); | 
					
						
							|  |  |  |             foreach ($stations->result() as $row) { | 
					
						
							|  |  |  |                 array_push($logbooks_locations_array, $row->station_id); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2023-10-25 15:41:01 +08:00
										 |  |  | 	    array_push($logbooks_locations_array, -9999); | 
					
						
							| 
									
										
										
										
											2023-05-05 15:34:32 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-05-11 03:36:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-05 15:34:32 +08:00
										 |  |  |         $this->db->select('station_profile.*, '.$this->config->item('table_name').'.COL_PRIMARY_KEY, '.$this->config->item('table_name').'.COL_TIME_ON, '.$this->config->item('table_name').'.COL_CALL, '.$this->config->item('table_name').'.COL_MODE, '.$this->config->item('table_name').'.COL_SUBMODE, '.$this->config->item('table_name').'.COL_BAND, '.$this->config->item('table_name').'.COL_COMMENT, '.$this->config->item('table_name').'.COL_RST_SENT, '.$this->config->item('table_name').'.COL_PROP_MODE, '.$this->config->item('table_name').'.COL_SAT_NAME, '.$this->config->item('table_name').'.COL_SAT_MODE, '.$this->config->item('table_name').'.COL_QSLMSG'); | 
					
						
							|  |  |  |         $this->db->from('station_profile'); | 
					
						
							|  |  |  |         $this->db->join($this->config->item('table_name'),'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); | 
					
						
							|  |  |  |         $this->db->where("coalesce(station_profile.eqslqthnickname, '') <> ''"); | 
					
						
							|  |  |  |         $this->db->where($this->config->item('table_name').'.COL_CALL !=', ''); | 
					
						
							|  |  |  |         $this->db->group_start(); | 
					
						
							|  |  |  |         $this->db->where($this->config->item('table_name').'.COL_EQSL_QSL_SENT is null'); | 
					
						
							|  |  |  |         $this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', ''); | 
					
						
							|  |  |  |         $this->db->or_where($this->config->item('table_name').'.COL_EQSL_QSL_SENT', 'R'); | 
					
						
							|  |  |  |         $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(); | 
					
						
							| 
									
										
										
										
											2025-07-15 21:31:53 +08:00
										 |  |  |         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 []; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-05-11 03:36:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return $this->db->get(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Show all QSOs whose eQSL card images we did not download yet
 | 
					
						
							|  |  |  |     function eqsl_not_yet_downloaded($userid = null) { | 
					
						
							|  |  |  |         $CI =& get_instance(); | 
					
						
							|  |  |  |         if ($userid == null) { | 
					
						
							|  |  |  |             $CI->load->model('logbooks_model'); | 
					
						
							|  |  |  |             $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $stations = $this->get_all_user_locations($userid); | 
					
						
							|  |  |  |             $logbooks_locations_array = array(); | 
					
						
							|  |  |  |             foreach ($stations->result() as $row) { | 
					
						
							|  |  |  |                 array_push($logbooks_locations_array, $row->station_id); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2023-10-25 15:15:13 +08:00
										 |  |  | 	array_push($logbooks_locations_array, -9999); | 
					
						
							| 
									
										
										
										
											2023-05-11 03:36:46 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-11 21:25:35 +08:00
										 |  |  |         $this->db->select('station_profile.station_id, '.$this->config->item('table_name').'.COL_PRIMARY_KEY, '.$this->config->item('table_name').'.COL_TIME_ON, '.$this->config->item('table_name').'.COL_CALL, '.$this->config->item('table_name').'.COL_MODE, '.$this->config->item('table_name').'.COL_SUBMODE, '.$this->config->item('table_name').'.COL_BAND, '.$this->config->item('table_name').'.COL_PROP_MODE, '.$this->config->item('table_name').'.COL_SAT_NAME, '.$this->config->item('table_name').'.COL_SAT_MODE, '.$this->config->item('table_name').'.COL_QSLMSG, eQSL_images.qso_id'); | 
					
						
							| 
									
										
										
										
											2023-05-11 03:36:46 +08:00
										 |  |  |         $this->db->from('station_profile'); | 
					
						
							|  |  |  |         $this->db->join($this->config->item('table_name'),'station_profile.station_id = '.$this->config->item('table_name').'.station_id'); | 
					
						
							| 
									
										
										
										
											2023-05-11 04:14:29 +08:00
										 |  |  |         $this->db->join('eQSL_images','eQSL_images.qso_id = '.$this->config->item('table_name').'.COL_PRIMARY_KEY','left outer'); | 
					
						
							|  |  |  |         //$this->db->where("coalesce(station_profile.eqslqthnickname, '') <> ''");
 | 
					
						
							| 
									
										
										
										
											2023-05-11 03:36:46 +08:00
										 |  |  |         $this->db->where($this->config->item('table_name').'.COL_CALL !=', ''); | 
					
						
							| 
									
										
										
										
											2023-05-11 04:14:29 +08:00
										 |  |  |         $this->db->where($this->config->item('table_name').'.COL_EQSL_QSL_RCVD', 'Y'); | 
					
						
							|  |  |  |         $this->db->where('qso_id', NULL); | 
					
						
							| 
									
										
										
										
											2025-07-15 21:31:53 +08:00
										 |  |  |         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 []; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-05-15 17:32:05 +08:00
										 |  |  |         $this->db->order_by("COL_TIME_ON", "desc"); | 
					
						
							| 
									
										
										
										
											2023-05-11 03:36:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-11 21:25:35 +08:00
										 |  |  |         return $this->db->get(); | 
					
						
							| 
									
										
										
										
											2023-05-05 15:34:32 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Mark the QSO as sent to eQSL
 | 
					
						
							|  |  |  |     function eqsl_mark_sent($primarykey) { | 
					
						
							|  |  |  |         $data = array( | 
					
						
							|  |  |  |             'COL_EQSL_QSLSDATE' => date('Y-m-d H:i:s'), // eQSL doesn't give us a date, so let's use current
 | 
					
						
							|  |  |  |             'COL_EQSL_QSL_SENT' => 'Y', | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->db->where('COL_PRIMARY_KEY', $primarykey); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->db->update($this->config->item('table_name'), $data); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return "eQSL Sent"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-06 14:17:23 +08:00
										 |  |  |     // Returns all the distinct callsign, eqsl nick pair for the current user/supplied user
 | 
					
						
							|  |  |  | 	function all_of_user_with_eqsl_nick_defined($userid = null) { | 
					
						
							|  |  |  |         if ($userid == null) { | 
					
						
							|  |  |  |             $this->db->where('user_id', $this->session->userdata('user_id')); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $this->db->where('user_id', $userid); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->db->where('eqslqthnickname IS NOT NULL'); | 
					
						
							|  |  |  | 		$this->db->where('eqslqthnickname !=', ''); | 
					
						
							|  |  |  | 		$this->db->from('station_profile'); | 
					
						
							| 
									
										
										
										
											2023-09-26 17:39:15 +08:00
										 |  |  | 		$this->db->select('station_callsign, eqslqthnickname, station_id'); | 
					
						
							| 
									
										
										
										
											2023-05-06 14:17:23 +08:00
										 |  |  | 		$this->db->distinct(TRUE); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return $this->db->get(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-06 17:35:09 +08:00
										 |  |  |     // Get the last date we received an eQSL
 | 
					
						
							|  |  |  |     function eqsl_last_qsl_rcvd_date($callsign, $nickname) { | 
					
						
							|  |  |  |         $qso_table_name = $this->config->item('table_name'); | 
					
						
							|  |  |  |         $this->db->from($qso_table_name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->db->join('station_profile', | 
					
						
							|  |  |  |             'station_profile.station_id = '.$qso_table_name.'.station_id AND station_profile.eqslqthnickname != ""'); | 
					
						
							|  |  |  |         $this->db->where('station_profile.station_callsign', $callsign); | 
					
						
							|  |  |  |         $this->db->where('station_profile.eqslqthnickname', $nickname); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->db->select("DATE_FORMAT(COL_EQSL_QSLRDATE,'%Y%m%d') AS COL_EQSL_QSLRDATE", FALSE); | 
					
						
							|  |  |  |         $this->db->where('COL_EQSL_QSLRDATE IS NOT NULL'); | 
					
						
							|  |  |  |         $this->db->order_by("COL_EQSL_QSLRDATE", "desc"); | 
					
						
							|  |  |  |         $this->db->limit(1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $query = $this->db->get(); | 
					
						
							|  |  |  |         $row = $query->row(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (isset($row->COL_EQSL_QSLRDATE)){ | 
					
						
							|  |  |  |             return $row->COL_EQSL_QSLRDATE; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             // No previous date (first time import has run?), so choose UNIX EPOCH!
 | 
					
						
							|  |  |  |             // Note: date is yyyy/mm/dd format
 | 
					
						
							| 
									
										
										
										
											2023-10-03 02:55:02 +08:00
										 |  |  |             return '19700101'; | 
					
						
							| 
									
										
										
										
											2023-05-06 17:35:09 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Update a QSO with eQSL QSL info
 | 
					
						
							| 
									
										
										
										
											2023-09-26 17:39:15 +08:00
										 |  |  |     // We could also probably use this:
 | 
					
						
							|  |  |  |     // https://eqsl.cc/qslcard/VerifyQSO.txt
 | 
					
						
							| 
									
										
										
										
											2023-08-27 20:53:57 +08:00
										 |  |  |     // https://www.eqsl.cc/qslcard/ImportADIF.txt
 | 
					
						
							| 
									
										
										
										
											2023-09-26 17:39:15 +08:00
										 |  |  |     function eqsl_update($datetime, $callsign, $band, $mode, $qsl_status, $station_callsign, $station_id) { | 
					
						
							| 
									
										
										
										
											2023-05-06 17:35:09 +08:00
										 |  |  |         $data = array( | 
					
						
							|  |  |  |             'COL_EQSL_QSLRDATE' => date('Y-m-d H:i:s'), // eQSL doesn't give us a date, so let's use current
 | 
					
						
							|  |  |  |             'COL_EQSL_QSL_RCVD' => $qsl_status | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )'); | 
					
						
							|  |  |  |         $this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )'); | 
					
						
							|  |  |  |         $this->db->where('COL_CALL', $callsign); | 
					
						
							| 
									
										
										
										
											2023-07-05 02:49:00 +08:00
										 |  |  | 	$this->db->where('COL_STATION_CALLSIGN', $station_callsign); | 
					
						
							| 
									
										
										
										
											2023-05-06 17:35:09 +08:00
										 |  |  |         $this->db->where('COL_BAND', $band); | 
					
						
							| 
									
										
										
										
											2023-07-06 01:13:17 +08:00
										 |  |  |         $this->db->where('COL_MODE', $mode); | 
					
						
							| 
									
										
										
										
											2023-09-26 17:39:15 +08:00
										 |  |  |         $this->db->where('station_id', $station_id); | 
					
						
							| 
									
										
										
										
											2023-05-06 17:35:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->db->update($this->config->item('table_name'), $data); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return "Updated"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Determine if we've already received an eQSL for this QSO
 | 
					
						
							| 
									
										
										
										
											2023-09-26 17:39:15 +08:00
										 |  |  |     function eqsl_dupe_check($datetime, $callsign, $band, $mode, $qsl_status, $station_callsign, $station_id) { | 
					
						
							| 
									
										
										
										
											2023-05-06 17:35:09 +08:00
										 |  |  |         $this->db->select('COL_EQSL_QSLRDATE'); | 
					
						
							|  |  |  |         $this->db->where('COL_TIME_ON >= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL -15 MINUTE )'); | 
					
						
							|  |  |  |         $this->db->where('COL_TIME_ON <= DATE_ADD(DATE_FORMAT("'.$datetime.'", \'%Y-%m-%d %H:%i\' ), INTERVAL 15 MINUTE )'); | 
					
						
							|  |  |  |         $this->db->where('COL_CALL', $callsign); | 
					
						
							|  |  |  |         $this->db->where('COL_BAND', $band); | 
					
						
							| 
									
										
										
										
											2023-07-06 01:13:17 +08:00
										 |  |  |         $this->db->where('COL_MODE', $mode); | 
					
						
							| 
									
										
										
										
											2023-07-05 02:49:00 +08:00
										 |  |  | 	$this->db->where('COL_STATION_CALLSIGN', $station_callsign); | 
					
						
							| 
									
										
										
										
											2023-05-06 17:35:09 +08:00
										 |  |  |         $this->db->where('COL_EQSL_QSL_RCVD', $qsl_status); | 
					
						
							| 
									
										
										
										
											2023-09-26 17:39:15 +08:00
										 |  |  |         $this->db->where('station_id', $station_id); | 
					
						
							| 
									
										
										
										
											2023-05-06 17:35:09 +08:00
										 |  |  |         $this->db->limit(1); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |         $query = $this->db->get($this->config->item('table_name')); | 
					
						
							|  |  |  |         $row = $query->row(); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |         if ($row != null) { | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         }  | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-04 00:06:35 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-11 03:36:46 +08:00
										 |  |  | ?>
 |