| 
									
										
										
										
											2012-11-20 06:24:10 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | class Update extends CI_Controller { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* | 
					
						
							|  |  |  | 		Controls Updating Elements of Cloudlog | 
					
						
							|  |  |  | 		Functions: | 
					
						
							| 
									
										
										
										
											2014-03-04 01:28:33 +08:00
										 |  |  | 			dxcc - imports the latest clublog cty.xml data | 
					
						
							|  |  |  | 			lotw_users - imports lotw users | 
					
						
							| 
									
										
										
										
											2012-11-20 06:24:10 +08:00
										 |  |  | 	*/ | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-20 06:24:10 +08:00
										 |  |  | 	public function index() | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 	    $data['page_title'] = "Updates"; | 
					
						
							| 
									
										
										
										
											2019-05-26 00:59:19 +08:00
										 |  |  | 	    $this->load->view('interface_assets/header', $data); | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 	    $this->load->view('update/index'); | 
					
						
							| 
									
										
										
										
											2019-05-26 00:59:19 +08:00
										 |  |  | 	    $this->load->view('interface_assets/footer'); | 
					
						
							| 
									
										
										
										
											2016-04-02 23:24:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-20 06:24:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-02 03:16:21 +08:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * Create a path to a file in the updates folder, respecting the datadir | 
					
						
							|  |  |  |      * configuration option. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     private function make_update_path($path) { | 
					
						
							|  |  |  |         $path = "updates/" . $path; | 
					
						
							|  |  |  |         $datadir = $this->config->item('datadir'); | 
					
						
							|  |  |  |         if(!$datadir) { | 
					
						
							|  |  |  |             return $path; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $datadir . "/" . $path; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * Load the dxcc entities | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 	public function dxcc_entities() { | 
					
						
							|  |  |  | 		// Load Database connectors
 | 
					
						
							|  |  |  | 		$this->load->model('dxcc_entities'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Load the cty file
 | 
					
						
							| 
									
										
										
										
											2020-09-02 03:16:21 +08:00
										 |  |  | 		$xml_data = simplexml_load_file($this->make_update_path("cty.xml")); | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 		 | 
					
						
							|  |  |  | 		//$xml_data->entities->entity->count();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $count = 0; | 
					
						
							|  |  |  | 		foreach ($xml_data->entities->entity as $entity) { | 
					
						
							| 
									
										
										
										
											2020-03-03 19:39:45 +08:00
										 |  |  | 			$startinfo = strtotime($entity->start); | 
					
						
							|  |  |  |             $endinfo = strtotime($entity->end); | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  |              | 
					
						
							| 
									
										
										
										
											2019-05-17 08:59:56 +08:00
										 |  |  |             $start_date = ($startinfo) ? date('Y-m-d H:i:s',$startinfo) : null; | 
					
						
							|  |  |  |             $end_date = ($endinfo) ? date('Y-m-d H:i:s',$endinfo) : null; | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  |          | 
					
						
							|  |  |  |             if(!$entity->cqz) { | 
					
						
							|  |  |  |                 $data = array( | 
					
						
							|  |  |  |                     'prefix' => (string) $entity->call, | 
					
						
							|  |  |  |                     'name' =>  (string) $entity->entity, | 
					
						
							|  |  |  |                 ); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 $data = array( | 
					
						
							|  |  |  |                     'adif' => (int) $entity->adif, | 
					
						
							|  |  |  |                     'name' =>  (string) $entity->name, | 
					
						
							|  |  |  |                     'prefix' => (string)  $entity->prefix, | 
					
						
							| 
									
										
										
										
											2019-05-17 08:59:56 +08:00
										 |  |  |                     'ituz' => (float) $entity->ituz, | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  |                     'cqz' => (int) $entity->cqz, | 
					
						
							|  |  |  |                     'cont' => (string) $entity->cont, | 
					
						
							|  |  |  |                     'long' => (float) $entity->long, | 
					
						
							|  |  |  |                     'lat' => (float) $entity->lat, | 
					
						
							| 
									
										
										
										
											2016-02-24 06:00:35 +08:00
										 |  |  |                 	'start' => $start_date, | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  |                     'end' => $end_date, | 
					
						
							|  |  |  |                 );	 | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |             $this->db->insert('dxcc_entities', $data);  | 
					
						
							|  |  |  |             $count += 1; | 
					
						
							|  |  |  |             if ($count % 10  == 0) | 
					
						
							|  |  |  |                 $this->update_status(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->update_status(); | 
					
						
							|  |  |  | 	    return $count;	 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* | 
					
						
							|  |  |  |      * Load the dxcc exceptions | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 	public function dxcc_exceptions() { | 
					
						
							|  |  |  | 		// Load Database connectors
 | 
					
						
							|  |  |  | 		$this->load->model('dxcc_exceptions'); | 
					
						
							|  |  |  | 		// Load the cty file
 | 
					
						
							| 
									
										
										
										
											2020-09-02 03:16:21 +08:00
										 |  |  | 		$xml_data = simplexml_load_file($this->make_update_path("cty.xml")); | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 		 | 
					
						
							|  |  |  |         $count = 0; | 
					
						
							|  |  |  | 		foreach ($xml_data->exceptions->exception as $record) { | 
					
						
							| 
									
										
										
										
											2018-12-21 22:53:49 +08:00
										 |  |  | 			$startinfo = strtotime($record->start); | 
					
						
							|  |  |  |             $endinfo = strtotime($record->end); | 
					
						
							|  |  |  |              | 
					
						
							| 
									
										
										
										
											2019-05-17 08:59:56 +08:00
										 |  |  |             $start_date = ($startinfo) ? date('Y-m-d H:i:s',$startinfo) : null; | 
					
						
							|  |  |  |             $end_date = ($endinfo) ? date('Y-m-d H:i:s',$endinfo) : null; | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |             $data = array( | 
					
						
							|  |  |  |             	'record' => (int) $record->attributes()->record, | 
					
						
							|  |  |  |             	'call' => (string) $record->call, | 
					
						
							|  |  |  |             	'entity' =>  (string) $record->entity, | 
					
						
							|  |  |  |                 'adif' => (int) $record->adif, | 
					
						
							|  |  |  |                 'cqz' => (int) $record->cqz, | 
					
						
							|  |  |  |                 'cont' => (string) $record->cont, | 
					
						
							|  |  |  |                 'long' => (float) $record->long, | 
					
						
							|  |  |  |                 'lat' => (float) $record->lat, | 
					
						
							|  |  |  |                 'start' => $start_date, | 
					
						
							|  |  |  |                 'end' => $end_date, | 
					
						
							|  |  |  |             ); | 
					
						
							|  |  |  |         | 
					
						
							|  |  |  |             $this->db->insert('dxcc_exceptions', $data);  | 
					
						
							|  |  |  |             $count += 1; | 
					
						
							|  |  |  |             if ($count % 10  == 0) | 
					
						
							|  |  |  |                 $this->update_status(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->update_status(); | 
					
						
							|  |  |  | 	    return $count;	 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* | 
					
						
							|  |  |  |      * Load the dxcc prefixes | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 	public function dxcc_prefixes() { | 
					
						
							|  |  |  | 		// Load Database connectors
 | 
					
						
							|  |  |  | 		$this->load->model('dxcc_prefixes'); | 
					
						
							|  |  |  | 		// Load the cty file
 | 
					
						
							| 
									
										
										
										
											2020-09-02 03:16:21 +08:00
										 |  |  | 		$xml_data = simplexml_load_file($this->make_update_path("cty.xml")); | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 		 | 
					
						
							|  |  |  |         $count = 0; | 
					
						
							|  |  |  | 		foreach ($xml_data->prefixes->prefix as $record) { | 
					
						
							| 
									
										
										
										
											2018-12-21 22:53:49 +08:00
										 |  |  | 			$startinfo = strtotime($record->start); | 
					
						
							|  |  |  |             $endinfo = strtotime($record->end); | 
					
						
							|  |  |  |              | 
					
						
							| 
									
										
										
										
											2019-05-17 08:59:56 +08:00
										 |  |  |             $start_date = ($startinfo) ? date('Y-m-d H:i:s',$startinfo) : null; | 
					
						
							|  |  |  |             $end_date = ($endinfo) ? date('Y-m-d H:i:s',$endinfo) : null; | 
					
						
							| 
									
										
										
										
											2016-02-24 06:00:35 +08:00
										 |  |  |              | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  |             $data = array( | 
					
						
							|  |  |  |             	'record' => (int) $record->attributes()->record, | 
					
						
							|  |  |  |             	'call' => (string) $record->call, | 
					
						
							|  |  |  |             	'entity' =>  (string) $record->entity, | 
					
						
							|  |  |  |                 'adif' => (int) $record->adif, | 
					
						
							|  |  |  |                 'cqz' => (int) $record->cqz, | 
					
						
							|  |  |  |                 'cont' => (string) $record->cont, | 
					
						
							|  |  |  |                 'long' => (float) $record->long, | 
					
						
							|  |  |  |                 'lat' => (float) $record->lat, | 
					
						
							| 
									
										
										
										
											2016-02-24 06:00:35 +08:00
										 |  |  |                 'start' => $start_date, | 
					
						
							|  |  |  |                 'end' => $end_date, | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  |             ); | 
					
						
							|  |  |  |         | 
					
						
							|  |  |  |             $this->db->insert('dxcc_prefixes', $data);  | 
					
						
							|  |  |  |             $count += 1; | 
					
						
							|  |  |  |             if ($count % 10  == 0) | 
					
						
							|  |  |  |                 $this->update_status(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		//print("$count prefixes processed");
 | 
					
						
							|  |  |  |         $this->update_status(); | 
					
						
							|  |  |  | 	    return $count;	 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-09 03:53:14 +08:00
										 |  |  | 	// Updates the DXCC & Exceptions from the Club Log Cty.xml file.
 | 
					
						
							| 
									
										
										
										
											2012-11-20 06:24:10 +08:00
										 |  |  | 	public function dxcc() { | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 	    $this->update_status("Downloading file"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  | 	    // give it 10 minutes...
 | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 	    set_time_limit(600); | 
					
						
							| 
									
										
										
										
											2014-03-03 09:26:26 +08:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2014-03-04 01:14:02 +08:00
										 |  |  | 		// Load Migration data if any.
 | 
					
						
							|  |  |  | 		$this->load->library('migration'); | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 		$this->fix_migrations(); | 
					
						
							|  |  |  | 		$this->migration->latest(); | 
					
						
							| 
									
										
										
										
											2014-03-03 09:26:26 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Download latest file.
 | 
					
						
							| 
									
										
										
										
											2019-10-09 03:53:14 +08:00
										 |  |  | 		$url = "https://cdn.clublog.org/cty.php?api=a11c3235cd74b88212ce726857056939d52372bd"; | 
					
						
							| 
									
										
										
										
											2014-03-03 09:26:26 +08:00
										 |  |  | 		 | 
					
						
							|  |  |  | 		$gz = gzopen($url, 'r'); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  | 		if ($gz === FALSE) { | 
					
						
							| 
									
										
										
										
											2023-08-07 17:47:03 +08:00
										 |  |  |             // If the download from clublog.org fails, try cloudlog.org CDN.
 | 
					
						
							|  |  |  |             $url = "https://cdn.cloudlog.org/clublogxml.gz"; | 
					
						
							|  |  |  |             $gz = gzopen($url, 'r'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // Log failure to log file
 | 
					
						
							|  |  |  |             log_message('info', 'Failed to download cty.xml from clublog.org, trying cloudlog.org CDN'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if ($gz === FALSE) { | 
					
						
							|  |  |  |                 $this->update_status("FAILED: Could not download from clublog.org or cloudlog.org"); | 
					
						
							|  |  |  |                 log_message('error', 'FAILED: Could not download exceptions from clublog.org or cloudlog.org'); | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-03 09:26:26 +08:00
										 |  |  | 		$data = ""; | 
					
						
							|  |  |  | 		while (!gzeof($gz)) { | 
					
						
							|  |  |  | 		  $data .= gzgetc($gz); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		gzclose($gz); | 
					
						
							| 
									
										
										
										
											2020-09-02 03:16:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  | 		if (file_put_contents($this->make_update_path("cty.xml"), $data) === FALSE) { | 
					
						
							| 
									
										
										
										
											2023-07-05 18:34:00 +08:00
										 |  |  | 			$this->update_status("FAILED: Could not write to cty.xml file"); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  | 			return; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-03-03 09:26:26 +08:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2019-10-11 20:58:43 +08:00
										 |  |  | 	    // Clear the tables, ready for new data
 | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 		$this->db->empty_table("dxcc_entities"); | 
					
						
							|  |  |  | 		$this->db->empty_table("dxcc_exceptions"); | 
					
						
							|  |  |  | 		$this->db->empty_table("dxcc_prefixes"); | 
					
						
							|  |  |  | 		$this->update_status(); | 
					
						
							| 
									
										
										
										
											2012-11-20 06:24:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 	    // Parse the three sections of the file and update the tables
 | 
					
						
							|  |  |  | 	    $this->db->trans_start(); | 
					
						
							|  |  |  | 		$this->dxcc_entities(); | 
					
						
							|  |  |  | 		$this->dxcc_exceptions(); | 
					
						
							|  |  |  | 		$this->dxcc_prefixes(); | 
					
						
							|  |  |  | 		$this->db->trans_complete(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->update_status("DONE"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function update_status($done=""){ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($done != "Downloading file"){ | 
					
						
							|  |  |  |             // Check that everything is done?
 | 
					
						
							|  |  |  |             if ($done == ""){ | 
					
						
							|  |  |  |                 $done = "Updating..."; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $html = $done."<br/>"; | 
					
						
							|  |  |  |             $html .= "Dxcc Entities: ".$this->db->count_all('dxcc_entities')."<br/>"; | 
					
						
							|  |  |  |             $html .= "Dxcc Exceptions: ".$this->db->count_all('dxcc_exceptions')."<br/>"; | 
					
						
							|  |  |  |             $html .= "Dxcc Prefixes: ".$this->db->count_all('dxcc_prefixes')."<br/>"; | 
					
						
							|  |  |  |         }else{ | 
					
						
							|  |  |  |             $html = $done."....<br/>"; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-02 03:16:21 +08:00
										 |  |  |         file_put_contents($this->make_update_path("status.html"), $html); | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-11 20:58:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | 	private function fix_migrations(){ | 
					
						
							|  |  |  |         $res = $this->db->query("select version from migrations"); | 
					
						
							|  |  |  |         if ($res->num_rows() >0){ | 
					
						
							|  |  |  |             $row = $res->row(); | 
					
						
							|  |  |  |             $version = $row->version; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if ($version < 7){ | 
					
						
							|  |  |  |                 $this->db->query("update migrations set version=7"); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2012-11-20 06:24:10 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-03-04 01:28:33 +08:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2016-02-24 06:00:35 +08:00
										 |  |  | 	public function check_missing_dxcc($all = false){ | 
					
						
							| 
									
										
										
										
											2016-02-22 16:09:50 +08:00
										 |  |  | 	    $this->load->model('logbook_model'); | 
					
						
							| 
									
										
										
										
											2016-02-24 06:00:35 +08:00
										 |  |  |         $this->logbook_model->check_missing_dxcc_id($all); | 
					
						
							| 
									
										
										
										
											2016-02-22 16:09:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-03-31 09:04:49 +08:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											2023-02-05 00:41:21 +08:00
										 |  |  | 	public function check_missing_continent() { | 
					
						
							|  |  |  | 		$this->load->model('logbook_model'); | 
					
						
							|  |  |  | 		$this->logbook_model->check_missing_continent(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 20:02:08 +08:00
										 |  |  | 	public function update_distances() { | 
					
						
							|  |  |  | 		$this->load->model('logbook_model'); | 
					
						
							|  |  |  | 		$this->logbook_model->update_distances(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-31 09:04:49 +08:00
										 |  |  | 	public function check_missing_grid($all = false){ | 
					
						
							|  |  |  | 	    $this->load->model('logbook_model'); | 
					
						
							|  |  |  |         $this->logbook_model->check_missing_grid_id($all); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-22 16:09:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-11 23:42:18 +08:00
										 |  |  |     public function update_clublog_scp() { | 
					
						
							| 
									
										
										
										
											2020-09-02 03:16:21 +08:00
										 |  |  |         $strFile = $this->make_update_path("clublog_scp.txt"); | 
					
						
							| 
									
										
										
										
											2019-10-11 23:42:18 +08:00
										 |  |  |         $url = "https://cdn.clublog.org/clublog.scp.gz"; | 
					
						
							|  |  |  |         set_time_limit(300); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         echo "Downloading Club Log SCP file...<br>"; | 
					
						
							| 
									
										
										
										
											2019-10-11 23:42:18 +08:00
										 |  |  |         $gz = gzopen($url, 'r'); | 
					
						
							|  |  |  |         if ($gz) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             $data = ""; | 
					
						
							|  |  |  |             while (!gzeof($gz)) { | 
					
						
							|  |  |  |                 $data .= gzgetc($gz); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             gzclose($gz); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             if (file_put_contents($strFile, $data) !== FALSE) | 
					
						
							| 
									
										
										
										
											2019-10-11 23:42:18 +08:00
										 |  |  |             { | 
					
						
							|  |  |  |                 $nCount = count(file($strFile)); | 
					
						
							|  |  |  |                 if ($nCount > 0) | 
					
						
							|  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |                     echo "DONE: " . number_format($nCount) . " callsigns loaded"; | 
					
						
							| 
									
										
										
										
											2019-10-11 23:42:18 +08:00
										 |  |  |                 } else { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |                     echo "FAILED: Empty file"; | 
					
						
							| 
									
										
										
										
											2019-10-11 23:42:18 +08:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |                 echo "FAILED: Could not write to Club Log SCP file"; | 
					
						
							| 
									
										
										
										
											2019-10-11 23:42:18 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             echo "FAILED: Could not connect to Club Log"; | 
					
						
							| 
									
										
										
										
											2019-10-11 23:42:18 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-21 21:02:50 +08:00
										 |  |  |     public function download_lotw_users() { | 
					
						
							|  |  |  |         $contents = file_get_contents('https://lotw.arrl.org/lotw-user-activity.csv', true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if($contents === FALSE) {  | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             echo "Something went wrong with fetching the LoTW users file."; | 
					
						
							| 
									
										
										
										
											2020-09-21 21:02:50 +08:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             $file = './updates/lotw_users.csv'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             if (file_put_contents($file, $contents) !== FALSE) {     // Save our content to the file.
 | 
					
						
							|  |  |  |                 echo "LoTW User Data Saved."; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 echo "FAILED: Could not write to LoTW users file"; | 
					
						
							| 
									
										
										
										
											2020-09-21 21:02:50 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-26 16:38:31 +08:00
										 |  |  |     public function lotw_users() { | 
					
						
							|  |  |  |         $mtime = microtime();  | 
					
						
							|  |  |  |         $mtime = explode(" ",$mtime);  | 
					
						
							|  |  |  |         $mtime = $mtime[1] + $mtime[0];  | 
					
						
							|  |  |  |         $starttime = $mtime;  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $file = 'https://lotw.arrl.org/lotw-user-activity.csv'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $handle = fopen($file, "r"); | 
					
						
							|  |  |  |         if ($handle === FALSE) { | 
					
						
							|  |  |  |             echo "Something went wrong with fetching the LoTW uses file"; | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $this->db->empty_table("lotw_users");  | 
					
						
							|  |  |  |         $i = 0; | 
					
						
							|  |  |  |         $data = fgetcsv($handle,1000,","); | 
					
						
							|  |  |  |         do { | 
					
						
							|  |  |  |             if ($data[0]) { | 
					
						
							|  |  |  |                 $lotwdata[$i]['callsign'] = $data[0]; | 
					
						
							|  |  |  |                 $lotwdata[$i]['lastupload'] = $data[1] . ' ' . $data[2]; | 
					
						
							|  |  |  |                 if (($i % 2000) == 0) { | 
					
						
							|  |  |  |                     $this->db->insert_batch('lotw_users', $lotwdata);  | 
					
						
							|  |  |  |                     unset($lotwdata); | 
					
						
							|  |  |  |                     // echo 'Record ' . $i . '<br />';
 | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $i++; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } while ($data = fgetcsv($handle,1000,",")); | 
					
						
							|  |  |  |         fclose($handle); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->db->insert_batch('lotw_users', $lotwdata);  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $mtime = microtime();  | 
					
						
							|  |  |  |         $mtime = explode(" ",$mtime);  | 
					
						
							|  |  |  |         $mtime = $mtime[1] + $mtime[0];  | 
					
						
							|  |  |  |         $endtime = $mtime;  | 
					
						
							|  |  |  |         $totaltime = ($endtime - $starttime);  | 
					
						
							|  |  |  |         echo "This page was created in ".$totaltime." seconds <br />";  | 
					
						
							|  |  |  |         echo "Records inserted: " . $i . " <br/>"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-21 21:02:50 +08:00
										 |  |  |     public function lotw_check() { | 
					
						
							|  |  |  |         $f = fopen('./updates/lotw_users.csv', "r"); | 
					
						
							|  |  |  |         $result = false; | 
					
						
							|  |  |  |         while ($row = fgetcsv($f)) { | 
					
						
							|  |  |  |             if ($row[0] == '2M0SQL/MM') { | 
					
						
							|  |  |  |                 $result = $row[0]; | 
					
						
							|  |  |  |                 echo "found"; | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         fclose($f); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * Used for autoupdating the DOK file which is used in the QSO entry dialog for autocompletion. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function update_dok() { | 
					
						
							| 
									
										
										
										
											2021-02-03 19:28:58 +08:00
										 |  |  |         $contents = file_get_contents('https://www.df2et.de/cqrlog/dok_and_sdok.txt', true); | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if($contents === FALSE) { | 
					
						
							|  |  |  |             echo "Something went wrong with fetching the DOK file."; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $file = './assets/json/dok.txt'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             if (file_put_contents($file, $contents) !== FALSE) {     // Save our content to the file.
 | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  |                 $nCount = count(file($file)); | 
					
						
							|  |  |  |                 if ($nCount > 0) | 
					
						
							|  |  |  |                 { | 
					
						
							| 
									
										
										
										
											2021-02-03 19:28:58 +08:00
										 |  |  |                     echo "DONE: " . number_format($nCount) . " DOKs and SDOKs saved"; | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  |                 } else { | 
					
						
							|  |  |  |                     echo"FAILED: Empty file"; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |                 echo"FAILED: Could not write to dok.txt file"; | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* | 
					
						
							|  |  |  |      * Used for autoupdating the SOTA file which is used in the QSO entry dialog for autocompletion. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function update_sota() { | 
					
						
							|  |  |  |         $csvfile = 'https://www.sotadata.org.uk/summitslist.csv'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $sotafile = './assets/json/sota.txt'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         $csvhandle = fopen($csvfile,"r"); | 
					
						
							|  |  |  |         if ($csvhandle === FALSE) { | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  |             echo "Something went wrong with fetching the SOTA file"; | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         $data = fgetcsv($csvhandle,1000,","); // Skip line we are not interested in
 | 
					
						
							|  |  |  |         $data = fgetcsv($csvhandle,1000,","); // Skip line we are not interested in
 | 
					
						
							|  |  |  |         $data = fgetcsv($csvhandle,1000,","); | 
					
						
							|  |  |  |         $sotafilehandle = fopen($sotafile, 'w'); | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         if ($sotafilehandle === FALSE) { | 
					
						
							|  |  |  |             echo"FAILED: Could not write to sota.txt file"; | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-07 23:33:24 +08:00
										 |  |  |         $nCount = 0; | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         do { | 
					
						
							|  |  |  |             if ($data[0]) { | 
					
						
							|  |  |  |                 fwrite($sotafilehandle, $data[0].PHP_EOL); | 
					
						
							|  |  |  |                 $nCount++; | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         } while ($data = fgetcsv($csvhandle,1000,",")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         fclose($csvhandle); | 
					
						
							|  |  |  |         fclose($sotafilehandle); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($nCount > 0) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             echo "DONE: " . number_format($nCount) . " SOTA's saved"; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             echo"FAILED: Empty file"; | 
					
						
							| 
									
										
										
										
											2021-01-27 00:54:31 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-17 22:54:04 +08:00
										 |  |  |     /* | 
					
						
							|  |  |  |      * Pulls the WWFF directory for autocompletion in QSO dialogs | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function update_wwff() { | 
					
						
							|  |  |  |         $csvfile = 'https://wwff.co/wwff-data/wwff_directory.csv'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $wwfffile = './assets/json/wwff.txt'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $ch = curl_init(); | 
					
						
							|  |  |  |         curl_setopt($ch, CURLOPT_URL, $csvfile); | 
					
						
							|  |  |  |         curl_setopt($ch, CURLOPT_HEADER, false); | 
					
						
							|  |  |  |         curl_setopt($ch, CURLOPT_USERAGENT, 'Cloudlog Updater'); | 
					
						
							|  |  |  |         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | 
					
						
							|  |  |  |         $csv = curl_exec($ch); | 
					
						
							|  |  |  |         curl_close($ch); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         if ($csv === FALSE) { | 
					
						
							|  |  |  |             echo "Something went wrong with fetching the WWFF file"; | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-08-17 22:54:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $wwfffilehandle = fopen($wwfffile, 'w'); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         if ($wwfffilehandle === FALSE) { | 
					
						
							|  |  |  |             echo"FAILED: Could not write to wwff.txt file"; | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-17 22:54:04 +08:00
										 |  |  |         $data = str_getcsv($csv,"\n"); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         $nCount = 0; | 
					
						
							| 
									
										
										
										
											2022-08-17 22:54:04 +08:00
										 |  |  |         foreach ($data as $idx => $row) { | 
					
						
							|  |  |  |            if ($idx == 0) continue; // Skip line we are not interested in
 | 
					
						
							|  |  |  |            $row = str_getcsv($row, ','); | 
					
						
							|  |  |  |            if ($row[0]) { | 
					
						
							|  |  |  |               fwrite($wwfffilehandle, $row[0].PHP_EOL); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |               $nCount++; | 
					
						
							| 
									
										
										
										
											2022-08-17 22:54:04 +08:00
										 |  |  |            } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         fclose($wwfffilehandle); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if ($nCount > 0) | 
					
						
							| 
									
										
										
										
											2022-08-17 22:54:04 +08:00
										 |  |  |         { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             echo "DONE: " . number_format($nCount) . " WWFF's saved"; | 
					
						
							| 
									
										
										
										
											2022-08-17 22:54:04 +08:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             echo"FAILED: Empty file"; | 
					
						
							| 
									
										
										
										
											2022-08-17 22:54:04 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-01 00:01:57 +08:00
										 |  |  |     public function update_pota() { | 
					
						
							|  |  |  |         $csvfile = 'https://pota.app/all_parks.csv'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $potafile = './assets/json/pota.txt'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $ch = curl_init(); | 
					
						
							|  |  |  |         curl_setopt($ch, CURLOPT_URL, $csvfile); | 
					
						
							|  |  |  |         curl_setopt($ch, CURLOPT_HEADER, false); | 
					
						
							|  |  |  |         curl_setopt($ch, CURLOPT_USERAGENT, 'Cloudlog Updater'); | 
					
						
							|  |  |  |         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | 
					
						
							|  |  |  |         $csv = curl_exec($ch); | 
					
						
							|  |  |  |         curl_close($ch); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         if ($csv === FALSE) { | 
					
						
							|  |  |  |             echo "Something went wrong with fetching the POTA file"; | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-12-01 00:01:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $potafilehandle = fopen($potafile, 'w'); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         if ($potafilehandle === FALSE) { | 
					
						
							|  |  |  |             echo"FAILED: Could not write to pota.txt file"; | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-12-01 00:01:57 +08:00
										 |  |  |         $data = str_getcsv($csv,"\n"); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |         $nCount = 0; | 
					
						
							| 
									
										
										
										
											2022-12-01 00:01:57 +08:00
										 |  |  |         foreach ($data as $idx => $row) { | 
					
						
							|  |  |  |            if ($idx == 0) continue; // Skip line we are not interested in
 | 
					
						
							|  |  |  |            $row = str_getcsv($row, ','); | 
					
						
							|  |  |  |            if ($row[0]) { | 
					
						
							|  |  |  |               fwrite($potafilehandle, $row[0].PHP_EOL); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |               $nCount++; | 
					
						
							| 
									
										
										
										
											2022-12-01 00:01:57 +08:00
										 |  |  |            } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         fclose($potafilehandle); | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if ($nCount > 0) | 
					
						
							| 
									
										
										
										
											2022-12-01 00:01:57 +08:00
										 |  |  |         { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             echo "DONE: " . number_format($nCount) . " POTA's saved"; | 
					
						
							| 
									
										
										
										
											2022-12-01 00:01:57 +08:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2023-02-09 00:32:08 +08:00
										 |  |  |             echo"FAILED: Empty file"; | 
					
						
							| 
									
										
										
										
											2022-12-01 00:01:57 +08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-09-21 21:02:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-20 06:24:10 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-02-17 23:06:43 +08:00
										 |  |  | ?>
 |