114 行
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			114 行
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php | ||
|  | 
 | ||
|  | use Cloudlog\Dxcc\Dxcc; | ||
|  | 
 | ||
|  | class Dxcluster_model extends CI_Model { | ||
|  |     public function dxc_spotlist($band = '20m', $maxage = 60, $de = '') { | ||
|  | 		$this->load->helper(array('psr4_autoloader')); | ||
|  | 	    $CI =& get_instance(); | ||
|  | 	    if ( ($this->optionslib->get_option('dxcache_url') != '') ) { | ||
|  | 		    $dxcache_url = $this->optionslib->get_option('dxcache_url').'/spots/'; | ||
|  | 		    $CI->load->model('logbooks_model'); | ||
|  | 			$CI->load->model('logbook_model'); | ||
|  | 		    $logbooks_locations_array = $CI->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook')); | ||
|  | 
 | ||
|  | 		    // CURL Functions
 | ||
|  | 		    $ch = curl_init(); | ||
|  | 		    curl_setopt($ch, CURLOPT_URL, $dxcache_url); | ||
|  | 		    curl_setopt($ch, CURLOPT_USERAGENT, 'Cloudlog DXLookup'); | ||
|  | 		    curl_setopt($ch, CURLOPT_HEADER, false); | ||
|  | 		    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
|  | 		    $jsonraw = curl_exec($ch); | ||
|  | 		    curl_close($ch); | ||
|  | 		    $json = json_decode($jsonraw); | ||
|  | 			$date = date('Ymd', time()); | ||
|  | 
 | ||
|  | 			$dxccObj = new DXCC($date); | ||
|  | 
 | ||
|  | 		    // Create JSON object
 | ||
|  | 		    if (strlen($jsonraw)>20) { | ||
|  | 			    $spotsout=[]; | ||
|  | 			    foreach($json as $singlespot){ | ||
|  | 				    $spotband = $CI->frequency->GetBand($singlespot->frequency*1000); | ||
|  | 				    $singlespot->band=$spotband; | ||
|  | 				    if ($band != $spotband) { continue; } | ||
|  | 				    $datetimecurrent = new DateTime("now", new DateTimeZone('UTC')); // Today's Date/Time
 | ||
|  | 				    $datetimespot = new DateTime($singlespot->when, new DateTimeZone('UTC')); | ||
|  | 				    $spotage = $datetimecurrent->diff($datetimespot); | ||
|  | 				    $minutes = $spotage->days * 24 * 60; | ||
|  | 				    $minutes += $spotage->h * 60; | ||
|  | 				    $minutes += $spotage->i; | ||
|  | 				    $singlespot->age=$minutes; | ||
|  | 
 | ||
|  | 
 | ||
|  | 				    if ($minutes<=$maxage) { | ||
|  | 					    if (!(property_exists($singlespot,'dxcc_spotted'))) {	// Check if we already have dxcc of spotted
 | ||
|  | 					    	$dxcc=$dxccObj->dxcc_lookup($singlespot->spotted,date('Ymd', time())); | ||
|  | 					    	$singlespot->dxcc_spotted=$dxcc; | ||
|  | 					    } | ||
|  | 					    if (!(property_exists($singlespot,'dxcc_spotter'))) {	// Check if we already have dxcc of spotter
 | ||
|  | 					    	$dxcc=$dxccObj->dxcc_lookup($singlespot->spotter,date('Ymd', time())); | ||
|  | 					    	$singlespot->dxcc_spotter=$dxcc; | ||
|  | 					    } | ||
|  | 					    if ( ($de != '') && (array_key_exists('cont',$dxcc)) ){ | ||
|  | 						    if ($de == $dxcc['cont']) { | ||
|  | 							    $singlespot->worked_call = ($this->logbook_model->check_if_callsign_worked_in_logbook($singlespot->spotted, $logbooks_locations_array, $singlespot->band) == 1); | ||
|  | 							    array_push($spotsout,$singlespot); | ||
|  | 						    } | ||
|  | 					    } else { | ||
|  | 						    $singlespot->worked_call = ($this->logbook_model->check_if_callsign_worked_in_logbook($singlespot->spotted, $logbooks_locations_array, $singlespot->band) == 1); | ||
|  | 						    array_push($spotsout,$singlespot); | ||
|  | 					    } | ||
|  | 				    } | ||
|  | 			    } | ||
|  | 			    return ($spotsout); | ||
|  | 		    } else { | ||
|  | 			    return ''; | ||
|  | 		    } | ||
|  | 	    } else { | ||
|  | 		    return ''; | ||
|  | 	    } | ||
|  |     } | ||
|  | 
 | ||
|  |     public function dxc_qrg_lookup($qrg, $maxage = 120) { | ||
|  | 		$this->load->helper(array('psr4_autoloader')); | ||
|  | 	    if ( ($this->optionslib->get_option('dxcache_url') != '') && (is_numeric($qrg)) ) { | ||
|  | 		    $dxcache_url = $this->optionslib->get_option('dxcache_url').'/spot/'.$qrg; | ||
|  | 
 | ||
|  | 		    // CURL Functions
 | ||
|  | 		    $ch = curl_init(); | ||
|  | 		    curl_setopt($ch, CURLOPT_URL, $dxcache_url); | ||
|  | 		    curl_setopt($ch, CURLOPT_USERAGENT, 'Cloudlog DXLookup by QRG'); | ||
|  | 		    curl_setopt($ch, CURLOPT_HEADER, false); | ||
|  | 		    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
|  | 		    $jsonraw = curl_exec($ch); | ||
|  | 		    curl_close($ch); | ||
|  | 		    $json = json_decode($jsonraw); | ||
|  | 
 | ||
|  | 			$date = date('Ymd', time()); | ||
|  | 
 | ||
|  | 			$dxccObj = new DXCC($date); | ||
|  | 
 | ||
|  | 		    // Create JSON object
 | ||
|  | 			if (strlen($jsonraw)>20) { | ||
|  | 			    $datetimecurrent = new DateTime("now", new DateTimeZone('UTC')); // Today's Date/Time
 | ||
|  | 			    $datetimespot = new DateTime($json->when, new DateTimeZone('UTC')); | ||
|  | 			    $spotage = $datetimecurrent->diff($datetimespot); | ||
|  | 			    $minutes = $spotage->days * 24 * 60; | ||
|  | 			    $minutes += $spotage->h * 60; | ||
|  | 			    $minutes += $spotage->i; | ||
|  | 			    $json->age=$minutes; | ||
|  | 			    if ($minutes<=$maxage) { | ||
|  | 				    $dxcc=$dxccObj->dxcc_lookup($json->spotter,date('Ymd', time())); | ||
|  | 				    $json->dxcc_spotter=$dxcc; | ||
|  | 				    return ($json); | ||
|  | 			    } else { | ||
|  | 				    return ''; | ||
|  | 			    } | ||
|  | 		    } else { | ||
|  | 			    return ''; | ||
|  | 		    } | ||
|  | 	    } | ||
|  |     } | ||
|  | } |