| 
									
										
										
										
											2019-06-19 21:14:10 +08:00
										 |  |  | <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  | 	Controller to interact with the Clublog API | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Clublog extends CI_Controller { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Show frontend if there is one
 | 
					
						
							|  |  |  | 	public function index() { | 
					
						
							| 
									
										
										
										
											2019-06-20 00:36:33 +08:00
										 |  |  | 		$this->config->load('config'); | 
					
						
							| 
									
										
										
										
											2019-06-19 21:14:10 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Upload ADIF to Clublog
 | 
					
						
							| 
									
										
										
										
											2022-09-11 21:02:31 +08:00
										 |  |  | 	public function upload() { | 
					
						
							|  |  |  | 		$this->load->model('clublog_model'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$users = $this->clublog_model->get_clublog_users(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		foreach ($users as $user) { | 
					
						
							|  |  |  | 			$this->uploadUser($user->user_id, $user->user_clublog_name, $user->user_clublog_password); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-10-06 02:26:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-11 21:02:31 +08:00
										 |  |  | 	function uploadUser($userid, $username, $password) { | 
					
						
							| 
									
										
										
										
											2019-10-06 02:26:07 +08:00
										 |  |  | 		$clean_username = $this->security->xss_clean($username); | 
					
						
							| 
									
										
										
										
											2022-09-11 21:02:31 +08:00
										 |  |  | 		$clean_passord = $this->security->xss_clean($password); | 
					
						
							|  |  |  | 		$clean_userid = $this->security->xss_clean($userid); | 
					
						
							| 
									
										
										
										
											2019-10-06 02:26:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-20 00:36:33 +08:00
										 |  |  | 		$this->config->load('config'); | 
					
						
							| 
									
										
										
										
											2019-06-20 00:14:07 +08:00
										 |  |  | 		ini_set('memory_limit', '-1'); | 
					
						
							| 
									
										
										
										
											2019-06-20 00:16:17 +08:00
										 |  |  | 		ini_set('display_errors', 1); | 
					
						
							|  |  |  | 		ini_set('display_startup_errors', 1); | 
					
						
							|  |  |  | 		error_reporting(E_ALL); | 
					
						
							| 
									
										
										
										
											2019-06-20 00:19:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-19 21:48:06 +08:00
										 |  |  | 		$this->load->helper('file'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-19 22:00:16 +08:00
										 |  |  | 		$this->load->model('clublog_model'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 		// Retrieve all station profiles for the user with their QSO counts
 | 
					
						
							| 
									
										
										
										
											2022-09-11 21:02:31 +08:00
										 |  |  | 		$station_profiles = $this->clublog_model->all_with_count($clean_userid); | 
					
						
							| 
									
										
										
										
											2019-06-19 23:04:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:05:28 +08:00
										 |  |  | 		if($station_profiles->num_rows()){ | 
					
						
							|  |  |  | 			foreach ($station_profiles->result() as $station_row) | 
					
						
							|  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 				// Only process stations that have QSOs to upload
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:05:28 +08:00
										 |  |  | 				if($station_row->qso_total > 0) { | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 					// Get QSOs for this station that haven't been uploaded to Clublog yet
 | 
					
						
							| 
									
										
										
										
											2022-09-11 21:02:31 +08:00
										 |  |  | 					$data['qsos'] = $this->clublog_model->get_clublog_qsos($station_row->station_id); | 
					
						
							| 
									
										
										
										
											2019-06-19 23:51:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 					if($data['qsos']->num_rows()){ | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 						// Generate ADIF file content from the view template
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 						$string = $this->load->view('adif/data/clublog', $data, TRUE); | 
					
						
							| 
									
										
										
										
											2019-06-19 23:04:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 						// Generate a unique ID for the temporary file
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 						$ranid = uniqid(); | 
					
						
							| 
									
										
										
										
											2019-06-19 23:04:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 						// Write the ADIF data to a temporary file
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 						if ( ! write_file('uploads/clublog'.$ranid.$station_row->station_id.'.adi', $string)) { | 
					
						
							|  |  |  | 						     echo 'Unable to write the file - Make the folder Upload folder has write permissions.'; | 
					
						
							| 
									
										
										
										
											2019-09-26 20:05:28 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 						else { | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 							// Get details of the created ADIF file
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 							$file_info = get_file_info('uploads/clublog'.$ranid.$station_row->station_id.'.adi'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 							// Initialize the CURL request to Clublog's API endpoint
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 							$request = curl_init('https://clublog.org/putlogs.php'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							if($this->config->item('directory') != "") { | 
					
						
							|  |  |  | 								 $filepath = $_SERVER['DOCUMENT_ROOT']."/".$this->config->item('directory')."/".$file_info['server_path']; | 
					
						
							|  |  |  | 							} else { | 
					
						
							|  |  |  | 								 $filepath = $_SERVER['DOCUMENT_ROOT']."/".$file_info['server_path']; | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							if (function_exists('curl_file_create')) { // php 5.5+
 | 
					
						
							|  |  |  | 							  $cFile = curl_file_create($filepath); | 
					
						
							|  |  |  | 							} else { // 
 | 
					
						
							|  |  |  | 							  $cFile = '@' . realpath($filepath); | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							// send a file
 | 
					
						
							|  |  |  | 							curl_setopt($request, CURLOPT_POST, true); | 
					
						
							|  |  |  | 							curl_setopt( | 
					
						
							|  |  |  | 							    $request, | 
					
						
							|  |  |  | 							    CURLOPT_POSTFIELDS, | 
					
						
							|  |  |  | 							    array( | 
					
						
							| 
									
										
										
										
											2022-09-11 21:02:31 +08:00
										 |  |  | 							      'email' => $clean_username, | 
					
						
							|  |  |  | 							      'password' => $clean_passord, | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 							      'callsign' => $station_row->station_callsign, | 
					
						
							|  |  |  | 							      'api' => "a11c3235cd74b88212ce726857056939d52372bd", | 
					
						
							|  |  |  | 							      'file' => $cFile | 
					
						
							|  |  |  | 							    )); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							// output the response
 | 
					
						
							|  |  |  | 							curl_setopt($request, CURLOPT_RETURNTRANSFER, true); | 
					
						
							|  |  |  | 							$response = curl_exec($request); | 
					
						
							|  |  |  | 							$info = curl_getinfo($request); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							if(curl_errno($request)) { | 
					
						
							|  |  |  | 							    echo curl_error($request); | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 							curl_close ($request);  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							// If Clublog Accepts mark the QSOs
 | 
					
						
							|  |  |  | 							if (preg_match('/\baccepted\b/', $response)) { | 
					
						
							| 
									
										
										
										
											2020-11-29 04:00:07 +08:00
										 |  |  | 								echo "QSOs uploaded and Logbook QSOs marked as sent to Clublog"."<br>"; | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 								$this->load->model('clublog_model'); | 
					
						
							|  |  |  | 								$this->clublog_model->mark_qsos_sent($station_row->station_id); | 
					
						
							| 
									
										
										
										
											2020-11-29 04:00:07 +08:00
										 |  |  | 								echo "Clublog upload for ".$station_row->station_callsign."<br>"; | 
					
						
							| 
									
										
										
										
											2019-10-10 04:39:12 +08:00
										 |  |  | 								log_message('info', 'Clublog upload for '.$station_row->station_callsign.' successfully sent.'); | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 							} else { | 
					
						
							|  |  |  | 								echo "Error ".$response; | 
					
						
							| 
									
										
										
										
											2019-10-10 04:39:12 +08:00
										 |  |  | 								log_message('error', 'Clublog upload for '.$station_row->station_callsign.' failed reason '.$response); | 
					
						
							| 
									
										
										
										
											2025-05-21 23:47:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 								// If Clublog responds with a 403
 | 
					
						
							|  |  |  | 								if ($info['http_code'] == 403) { | 
					
						
							|  |  |  | 									$this->load->model('clublog_model'); | 
					
						
							|  |  |  | 									echo "Clublog API access denied for ".$station_row->station_callsign."<br>"; | 
					
						
							|  |  |  | 									log_message('error', 'Clublog API access denied for '.$station_row->station_callsign); | 
					
						
							|  |  |  | 									$this->clublog_model->reset_clublog_user_fields($station_row->user_id); | 
					
						
							|  |  |  | 								} | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 							} | 
					
						
							| 
									
										
										
										
											2019-10-06 02:21:07 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 							// Delete the ADIF file used for clublog
 | 
					
						
							|  |  |  | 							unlink('uploads/clublog'.$ranid.$station_row->station_id.'.adi'); | 
					
						
							| 
									
										
										
										
											2019-10-10 04:39:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:05:28 +08:00
										 |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:19:37 +08:00
										 |  |  | 					} else { | 
					
						
							| 
									
										
										
										
											2020-11-29 04:00:07 +08:00
										 |  |  | 						echo "Nothing awaiting upload to clublog for ".$station_row->station_callsign."<br>"; | 
					
						
							| 
									
										
										
										
											2019-10-10 04:39:12 +08:00
										 |  |  | 						 | 
					
						
							|  |  |  | 						log_message('info', 'Nothing awaiting upload to clublog for '.$station_row->station_callsign); | 
					
						
							| 
									
										
										
										
											2019-09-26 20:05:28 +08:00
										 |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2019-06-19 23:04:15 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2019-06-19 23:42:04 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-06-20 01:03:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-26 20:05:28 +08:00
										 |  |  | 	function markqso($station_id) { | 
					
						
							| 
									
										
										
										
											2019-10-06 02:26:07 +08:00
										 |  |  | 		$clean_station_id = $this->security->xss_clean($station_id); | 
					
						
							| 
									
										
										
										
											2019-06-20 22:21:05 +08:00
										 |  |  | 		$this->load->model('clublog_model'); | 
					
						
							| 
									
										
										
										
											2019-10-06 02:26:07 +08:00
										 |  |  | 		$this->clublog_model->mark_qsos_sent($clean_station_id); | 
					
						
							| 
									
										
										
										
											2019-06-20 01:03:48 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-06-20 22:53:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-22 00:12:22 +08:00
										 |  |  | 	function markallnotsent($station_id) { | 
					
						
							| 
									
										
										
										
											2019-10-06 02:26:07 +08:00
										 |  |  | 		$clean_station_id = $this->security->xss_clean($station_id); | 
					
						
							| 
									
										
										
										
											2019-06-20 22:53:57 +08:00
										 |  |  | 		$this->load->model('clublog_model'); | 
					
						
							| 
									
										
										
										
											2019-10-06 02:26:07 +08:00
										 |  |  | 		$this->clublog_model->mark_all_qsos_notsent($clean_station_id); | 
					
						
							| 
									
										
										
										
											2019-06-20 22:53:57 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-08-16 19:11:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Find DXCC
 | 
					
						
							|  |  |  | 	function find_dxcc($callsign) { | 
					
						
							| 
									
										
										
										
											2019-10-06 02:26:07 +08:00
										 |  |  | 		$clean_callsign = $this->security->xss_clean($callsign); | 
					
						
							| 
									
										
										
										
											2019-08-16 19:11:46 +08:00
										 |  |  | 		// Live lookup against Clublogs API
 | 
					
						
							| 
									
										
										
										
											2019-10-09 03:53:14 +08:00
										 |  |  | 		$url = "https://clublog.org/dxcc?call=".$clean_callsign."&api=a11c3235cd74b88212ce726857056939d52372bd&full=1"; | 
					
						
							| 
									
										
										
										
											2019-08-16 19:11:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		$json = file_get_contents($url); | 
					
						
							|  |  |  | 		$data = json_decode($json, TRUE); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// echo ucfirst(strtolower($data['Name']));
 | 
					
						
							|  |  |  | 		return $data; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2019-06-19 23:42:04 +08:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2019-10-09 03:53:14 +08:00
										 |  |  | } |