2011-06-17 13:52:00 +01:00
< ? php
class DXCC extends CI_Model {
/**
* Function : mostactive
* Information : Returns the most active band
**/
function info ( $callsign )
{
$exceptions = $this -> db -> query ( '
SELECT *
2021-04-05 15:26:20 -06:00
FROM `dxcc_exceptions`
2011-06-17 13:52:00 +01:00
WHERE `prefix` = \ '' . $callsign . ' \ '
2014-09-25 23:09:44 +01:00
LIMIT 1
2011-06-17 13:52:00 +01:00
' );
2014-09-25 23:09:44 +01:00
2011-06-17 13:52:00 +01:00
if ( $exceptions -> num_rows () > 0 )
{
return $exceptions ;
} else {
2014-09-25 23:09:44 +01:00
2011-06-17 13:52:00 +01:00
$query = $this -> db -> query ( '
SELECT *
2019-06-24 17:34:01 +01:00
FROM dxcc_entities
2014-09-25 23:09:44 +01:00
WHERE prefix = SUBSTRING ( \ '' . $callsign . ' \ ' , 1 , LENGTH ( prefix ) )
2011-06-17 13:52:00 +01:00
ORDER BY LENGTH ( prefix ) DESC
2014-09-25 23:09:44 +01:00
LIMIT 1
2011-06-17 13:52:00 +01:00
' );
2014-09-25 23:09:44 +01:00
2011-06-17 13:52:00 +01:00
return $query ;
}
}
2014-09-25 23:09:44 +01:00
2016-02-15 17:46:33 +00:00
function search (){
print_r ( $this -> input -> get ());
return ;
}
2012-11-19 22:24:10 +00:00
function empty_table ( $table ) {
2014-09-25 23:09:44 +01:00
$this -> db -> empty_table ( $table );
2012-11-19 22:24:10 +00:00
}
2019-01-01 19:14:25 +00:00
2020-10-16 20:02:54 +02:00
/*
2021-09-09 20:59:51 +02:00
* Fetches a list of all dxcc ' s , both current and deleted
2020-10-16 20:02:54 +02:00
*/
2019-01-01 19:14:25 +00:00
function list () {
$this -> db -> order_by ( 'name' , 'ASC' );
return $this -> db -> get ( 'dxcc_entities' );
}
2020-03-03 12:39:45 +01:00
2020-10-16 20:02:54 +02:00
/*
* Fetches a list of all current dxcc ' s ( non - deleted )
*/
function list_current () {
$this -> db -> where ( 'end' , null );
$this -> db -> order_by ( 'name' , 'ASC' );
return $this -> db -> get ( 'dxcc_entities' );
}
2025-08-09 21:14:39 +01:00
/* Optimized method to get count of current DXCC entities without loading all records */
function get_total_dxcc_count () {
$this -> db -> where ( 'end' , null );
return $this -> db -> count_all_results ( 'dxcc_entities' );
}
2020-03-03 12:39:45 +01:00
function get_dxcc_array ( $dxccArray , $bands , $postdata ) {
$CI =& get_instance ();
2021-09-09 20:59:51 +02:00
$CI -> load -> model ( 'logbooks_model' );
$logbooks_locations_array = $CI -> logbooks_model -> list_logbook_relationships ( $this -> session -> userdata ( 'active_station_logbook' ));
2021-11-14 17:11:59 +01:00
if ( ! $logbooks_locations_array ) {
return null ;
}
2026-06-24 22:26:11 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
2020-03-03 12:39:45 +01:00
2023-01-18 13:51:46 +01:00
$qsl = " " ;
if ( $postdata [ 'confirmed' ] != NULL ) {
if ( $postdata [ 'qsl' ] != NULL ) {
$qsl .= " Q " ;
}
if ( $postdata [ 'lotw' ] != NULL ) {
$qsl .= " L " ;
}
if ( $postdata [ 'eqsl' ] != NULL ) {
$qsl .= " E " ;
}
}
2020-03-03 12:39:45 +01:00
foreach ( $bands as $band ) { // Looping through bands and entities to generate the array needed for display
foreach ( $dxccArray as $dxcc ) {
2022-09-20 12:18:40 +02:00
$dxccMatrix [ $dxcc -> adif ][ 'name' ] = ucwords ( strtolower ( $dxcc -> name ), " - (/ " );
2020-03-03 12:39:45 +01:00
$dxccMatrix [ $dxcc -> adif ][ 'Dxccprefix' ] = $dxcc -> prefix ;
2020-03-05 17:09:53 +01:00
if ( $postdata [ 'includedeleted' ])
2023-05-14 16:00:22 +02:00
$dxccMatrix [ $dxcc -> adif ][ 'Deleted' ] = isset ( $dxcc -> Enddate ) ? 1 : 0 ;
2020-03-03 12:39:45 +01:00
$dxccMatrix [ $dxcc -> adif ][ $band ] = '-' ;
}
// If worked is checked, we add worked entities to the array
if ( $postdata [ 'worked' ] != NULL ) {
2021-09-09 20:59:51 +02:00
$workedDXCC = $this -> getDxccBandWorked ( $location_list , $band , $postdata );
2020-03-03 12:39:45 +01:00
foreach ( $workedDXCC as $wdxcc ) {
2026-01-06 22:34:05 +00:00
$dxccMatrix [ $wdxcc -> dxcc ][ $band ] = '<div class="bg-danger awardsBgDanger" ><a href=\'javascript:viewDxccQsosByStatus(' . $wdxcc -> dxcc . ', "W")\'>W</a></div>' ;
2020-03-03 12:39:45 +01:00
}
}
// If confirmed is checked, we add confirmed entities to the array
if ( $postdata [ 'confirmed' ] != NULL ) {
2021-09-09 20:59:51 +02:00
$confirmedDXCC = $this -> getDxccBandConfirmed ( $location_list , $band , $postdata );
2020-03-03 12:39:45 +01:00
foreach ( $confirmedDXCC as $cdxcc ) {
2026-01-06 22:34:05 +00:00
$dxccMatrix [ $cdxcc -> dxcc ][ $band ] = '<div class="bg-success awardsBgSuccess"><a href=\'javascript:viewDxccQsosByStatus(' . $cdxcc -> dxcc . ', "C")\'>C</a></div>' ;
2020-03-03 12:39:45 +01:00
}
}
}
// We want to remove the worked dxcc's in the list, since we do not want to display them
if ( $postdata [ 'worked' ] == NULL ) {
2021-09-09 20:59:51 +02:00
$workedDxcc = $this -> getDxccWorked ( $location_list , $postdata );
2020-03-03 12:39:45 +01:00
foreach ( $workedDxcc as $wdxcc ) {
if ( array_key_exists ( $wdxcc -> dxcc , $dxccMatrix )) {
unset ( $dxccMatrix [ $wdxcc -> dxcc ]);
}
}
}
// We want to remove the confirmed dxcc's in the list, since we do not want to display them
if ( $postdata [ 'confirmed' ] == NULL ) {
2021-09-09 20:59:51 +02:00
$confirmedDxcc = $this -> getDxccConfirmed ( $location_list , $postdata );
2020-03-03 12:39:45 +01:00
foreach ( $confirmedDxcc as $cdxcc ) {
if ( array_key_exists ( $cdxcc -> dxcc , $dxccMatrix )) {
unset ( $dxccMatrix [ $cdxcc -> dxcc ]);
}
}
}
2020-03-05 15:16:46 +01:00
if ( isset ( $dxccMatrix )) {
2020-03-03 12:39:45 +01:00
return $dxccMatrix ;
}
else {
return 0 ;
}
}
2021-09-09 20:59:51 +02:00
function getDxccBandConfirmed ( $location_list , $band , $postdata ) {
2020-03-03 12:39:45 +01:00
$sql = " select adif as dxcc, name from dxcc_entities
join (
2020-03-03 14:50:59 +00:00
select col_dxcc from " . $this->config ->item('table_name'). " thcv
2021-09-09 20:59:51 +02:00
where station_id in ( " . $location_list .
" ) and col_dxcc > 0 " ;
2020-03-03 12:39:45 +01:00
2022-11-11 19:23:41 +01:00
$sql .= $this -> addBandToQuery ( $band );
2020-03-03 12:39:45 +01:00
2026-06-24 22:26:11 +01:00
$sql .= $this -> addModeToQuery ( $postdata [ 'mode' ]);
2020-12-13 09:18:47 +01:00
2026-05-03 22:48:10 +01:00
$sql .= $this -> addYearToQuery ( $postdata );
2020-03-03 12:39:45 +01:00
$sql .= $this -> addQslToQuery ( $postdata );
$sql .= " group by col_dxcc
) x on dxcc_entities . adif = x . col_dxcc " ;
2020-03-05 15:48:50 +01:00
if ( $postdata [ 'includedeleted' ] == NULL ) {
2020-03-03 12:39:45 +01:00
$sql .= " and dxcc_entities.end is null " ;
}
$sql .= $this -> addContinentsToQuery ( $postdata );
$query = $this -> db -> query ( $sql );
return $query -> result ();
}
2021-09-09 20:59:51 +02:00
function getDxccBandWorked ( $location_list , $band , $postdata ) {
2020-03-03 12:39:45 +01:00
$sql = " select adif as dxcc, name from dxcc_entities
join (
2020-03-03 14:50:59 +00:00
select col_dxcc from " . $this->config ->item('table_name'). " thcv
2021-09-09 20:59:51 +02:00
where station_id in ( " . $location_list .
" ) and col_dxcc > 0 " ;
2020-03-03 12:39:45 +01:00
2022-11-11 19:23:41 +01:00
$sql .= $this -> addBandToQuery ( $band );
2020-03-03 12:39:45 +01:00
2026-06-24 22:26:11 +01:00
$sql .= $this -> addModeToQuery ( $postdata [ 'mode' ]);
2020-12-13 09:18:47 +01:00
2026-05-03 22:48:10 +01:00
$sql .= $this -> addYearToQuery ( $postdata );
2020-03-03 12:39:45 +01:00
$sql .= " group by col_dxcc
) x on dxcc_entities . adif = x . col_dxcc " ;;
2020-03-05 15:48:50 +01:00
if ( $postdata [ 'includedeleted' ] == NULL ) {
2020-03-03 12:39:45 +01:00
$sql .= " and dxcc_entities.end is null " ;
}
$sql .= $this -> addContinentsToQuery ( $postdata );
$query = $this -> db -> query ( $sql );
return $query -> result ();
}
2022-11-11 19:23:41 +01:00
function addBandToQuery ( $band ) {
2026-07-20 22:08:53 +01:00
$sql = '' ;
2026-07-21 13:16:10 +01:00
$propModeBands = array ( 'SAT' , 'EME' );
2026-07-20 22:08:53 +01:00
if ( is_array ( $band )) {
$selectedBands = array_values ( array_unique ( array_filter ( $band , function ( $value ) {
return $value !== NULL && $value !== '' ;
})));
if ( count ( $selectedBands ) === 0 ) {
return ' and 1 = 0' ;
}
2026-07-21 13:16:10 +01:00
$selectedPropModes = array_values ( array_intersect ( $selectedBands , $propModeBands ));
$terrestrialBands = array_values ( array_diff ( $selectedBands , $propModeBands ));
$hasPropModes = count ( $selectedPropModes ) > 0 ;
$propModesList = " ' " . implode ( " ',' " , array_map ( array ( $this -> db , 'escape_str' ), $selectedPropModes )) . " ' " ;
2026-07-20 22:08:53 +01:00
2026-07-21 13:16:10 +01:00
if ( $hasPropModes && count ( $terrestrialBands ) > 0 ) {
2026-07-20 22:08:53 +01:00
$bandslots_list = " ' " . implode ( " ',' " , array_map ( array ( $this -> db , 'escape_str' ), $terrestrialBands )) . " ' " ;
2026-07-21 13:16:10 +01:00
$sql .= " and ((col_prop_mode in ( " . $propModesList . " )) or (col_prop_mode not in ('SAT', 'EME') and col_band in ( " . $bandslots_list . " ))) " ;
} else if ( $hasPropModes ) {
$sql .= " and col_prop_mode in ( " . $propModesList . " ) " ;
2026-07-20 22:08:53 +01:00
} else if ( count ( $terrestrialBands ) > 0 ) {
$bandslots_list = " ' " . implode ( " ',' " , array_map ( array ( $this -> db , 'escape_str' ), $terrestrialBands )) . " ' " ;
2026-07-21 13:16:10 +01:00
$sql .= " and col_prop_mode not in ('SAT', 'EME') " ;
2026-07-20 22:08:53 +01:00
$sql .= " and col_band in ( " . $bandslots_list . " ) " ;
} else {
$sql .= ' and 1 = 0' ;
}
return $sql ;
}
if ( $band != 'All' ) {
2026-06-24 22:26:11 +01:00
$safeBand = $this -> db -> escape_str ( $band );
2026-07-21 13:16:10 +01:00
if ( in_array ( $band , $propModeBands , true )) {
2026-06-24 22:26:11 +01:00
$sql .= " and col_prop_mode =' " . $safeBand . " ' " ;
2026-07-20 22:08:53 +01:00
} else {
2026-07-21 13:16:10 +01:00
$sql .= " and col_prop_mode not in ('SAT', 'EME') " ;
2026-06-24 22:26:11 +01:00
$sql .= " and col_band =' " . $safeBand . " ' " ;
2026-07-20 22:08:53 +01:00
}
}
return $sql ;
}
2022-11-11 19:23:41 +01:00
2026-06-24 22:26:11 +01:00
function addModeToQuery ( $mode ) {
if ( $mode == 'All' ) {
return '' ;
}
$safeMode = $this -> db -> escape_str ( $mode );
return " and (col_mode = ' " . $safeMode . " ' or col_submode = ' " . $safeMode . " ') " ;
}
2026-05-03 22:48:10 +01:00
function addYearToQuery ( $postdata ) {
$sql = '' ;
if ( ! empty ( $postdata [ 'year' ]) && $postdata [ 'year' ] !== 'All' ) {
$year = ( int ) $postdata [ 'year' ];
$sql .= " and YEAR(col_time_on) = " . $year ;
}
return $sql ;
}
function get_worked_years () {
$CI =& get_instance ();
$CI -> load -> model ( 'logbooks_model' );
$logbooks_locations_array = $CI -> logbooks_model -> list_logbook_relationships ( $this -> session -> userdata ( 'active_station_logbook' ));
if ( ! $logbooks_locations_array ) {
return [];
}
2026-06-24 22:26:11 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
2026-05-03 22:48:10 +01:00
$sql = " SELECT DISTINCT YEAR(col_time_on) as year FROM " . $this -> config -> item ( 'table_name' ) .
" WHERE station_id IN ( " . $location_list . " ) AND col_dxcc > 0 AND col_time_on IS NOT NULL ORDER BY year DESC " ;
$query = $this -> db -> query ( $sql );
return array_column ( $query -> result_array (), 'year' );
}
2020-03-03 12:39:45 +01:00
function fetchDxcc ( $postdata ) {
$CI =& get_instance ();
2021-09-09 20:59:51 +02:00
$CI -> load -> model ( 'logbooks_model' );
$logbooks_locations_array = $CI -> logbooks_model -> list_logbook_relationships ( $this -> session -> userdata ( 'active_station_logbook' ));
2021-11-14 17:11:59 +01:00
if ( ! $logbooks_locations_array ) {
return null ;
}
2026-06-24 22:26:11 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
2020-03-03 12:39:45 +01:00
2026-01-06 22:34:05 +00:00
$sql = " select adif, prefix, name, cont, date(end) Enddate, date(start) Startdate, lat, `long`
2020-03-03 12:39:45 +01:00
from dxcc_entities " ;
if ( $postdata [ 'notworked' ] == NULL ) {
2021-09-09 20:59:51 +02:00
$sql .= " join (select col_dxcc from " . $this -> config -> item ( 'table_name' ) . " where station_id in ( " . $location_list . " ) and col_dxcc > 0 " ;
2020-03-03 12:39:45 +01:00
2026-06-24 22:26:11 +01:00
$sql .= $this -> addBandToQuery ( $postdata [ 'band' ]);
2020-03-03 12:39:45 +01:00
2026-06-24 22:26:11 +01:00
$sql .= $this -> addModeToQuery ( $postdata [ 'mode' ]);
2020-12-13 09:18:47 +01:00
2020-03-03 12:39:45 +01:00
$sql .= ' group by col_dxcc) x on dxcc_entities.adif = x.col_dxcc' ;
}
$sql .= " where 1 = 1 " ;
2020-03-05 15:48:50 +01:00
if ( $postdata [ 'includedeleted' ] == NULL ) {
2020-03-03 12:39:45 +01:00
$sql .= " and end is null " ;
}
$sql .= $this -> addContinentsToQuery ( $postdata );
$sql .= ' order by prefix' ;
$query = $this -> db -> query ( $sql );
return $query -> result ();
}
2021-09-09 20:59:51 +02:00
function getDxccWorked ( $location_list , $postdata ) {
2020-03-03 12:39:45 +01:00
$sql = " SELECT adif as dxcc FROM dxcc_entities
join (
2021-07-24 14:31:16 +02:00
select col_dxcc
2020-03-03 14:50:59 +00:00
from " . $this->config ->item('table_name'). " thcv
2021-09-09 20:59:51 +02:00
where station_id in ( " . $location_list .
" ) and col_dxcc > 0 " ;
2020-03-03 12:39:45 +01:00
2022-11-11 19:23:41 +01:00
$sql .= $this -> addBandToQuery ( $postdata [ 'band' ]);
2020-03-03 12:39:45 +01:00
2026-06-24 22:26:11 +01:00
$sql .= $this -> addModeToQuery ( $postdata [ 'mode' ]);
2020-12-13 09:18:47 +01:00
2026-05-03 22:48:10 +01:00
$sql .= $this -> addYearToQuery ( $postdata );
2021-09-09 20:59:51 +02:00
$sql .= " and not exists (select 1 from " . $this -> config -> item ( 'table_name' ) . " where station_id in ( " . $location_list . " ) and col_dxcc = thcv.col_dxcc and col_dxcc > 0 " ;
2020-03-03 12:39:45 +01:00
2022-11-11 19:23:41 +01:00
$sql .= $this -> addBandToQuery ( $postdata [ 'band' ]);
2020-03-03 12:39:45 +01:00
2026-06-24 22:26:11 +01:00
$sql .= $this -> addModeToQuery ( $postdata [ 'mode' ]);
2020-12-13 09:18:47 +01:00
2026-05-03 22:48:10 +01:00
$sql .= $this -> addYearToQuery ( $postdata );
2020-03-03 12:39:45 +01:00
$sql .= $this -> addQslToQuery ( $postdata );
$sql .= ')' ;
$sql .= " group by col_dxcc
) ll on dxcc_entities . adif = ll . col_dxcc
where 1 = 1 " ;
2021-12-31 14:05:33 +01:00
if ( $postdata [ 'includedeleted' ] == NULL ) {
2020-03-03 12:39:45 +01:00
$sql .= " and dxcc_entities.end is null " ;
}
$sql .= $this -> addContinentsToQuery ( $postdata );
$query = $this -> db -> query ( $sql );
return $query -> result ();
}
2021-09-09 20:59:51 +02:00
function getDxccConfirmed ( $location_list , $postdata ) {
2020-03-03 12:39:45 +01:00
$sql = " SELECT adif as dxcc FROM dxcc_entities
join (
2021-07-24 14:31:16 +02:00
select col_dxcc
2020-03-03 14:50:59 +00:00
from " . $this->config ->item('table_name'). " thcv
2021-09-09 20:59:51 +02:00
where station_id in ( " . $location_list .
" ) and col_dxcc > 0 " ;
2020-03-03 12:39:45 +01:00
2022-11-11 19:23:41 +01:00
$sql .= $this -> addBandToQuery ( $postdata [ 'band' ]);
2020-03-03 12:39:45 +01:00
2026-06-24 22:26:11 +01:00
$sql .= $this -> addModeToQuery ( $postdata [ 'mode' ]);
2020-12-13 09:18:47 +01:00
2026-05-03 22:48:10 +01:00
$sql .= $this -> addYearToQuery ( $postdata );
2020-03-03 12:39:45 +01:00
$sql .= $this -> addQslToQuery ( $postdata );
$sql .= " group by col_dxcc
) ll on dxcc_entities . adif = ll . col_dxcc
where 1 = 1 " ;
2021-12-31 14:05:33 +01:00
if ( $postdata [ 'includedeleted' ] == NULL ) {
2020-03-03 12:39:45 +01:00
$sql .= " and dxcc_entities.end is null " ;
}
$sql .= $this -> addContinentsToQuery ( $postdata );
$query = $this -> db -> query ( $sql );
return $query -> result ();
}
// Made function instead of repeating this several times
function addQslToQuery ( $postdata ) {
$sql = '' ;
2023-01-18 13:51:46 +01:00
$qsl = array ();
if ( $postdata [ 'lotw' ] != NULL || $postdata [ 'qsl' ] != NULL || $postdata [ 'eqsl' ] != NULL ) {
$sql .= ' and (' ;
if ( $postdata [ 'qsl' ] != NULL ) {
array_push ( $qsl , " col_qsl_rcvd = 'Y' " );
}
if ( $postdata [ 'lotw' ] != NULL ) {
array_push ( $qsl , " col_lotw_qsl_rcvd = 'Y' " );
}
if ( $postdata [ 'eqsl' ] != NULL ) {
array_push ( $qsl , " col_eqsl_qsl_rcvd = 'Y' " );
}
$sql .= implode ( ' or ' , $qsl );
$sql .= ')' ;
2020-03-03 12:39:45 +01:00
}
return $sql ;
}
// Made function instead of repeating this several times
function addContinentsToQuery ( $postdata ) {
$sql = '' ;
if ( $postdata [ 'Africa' ] == NULL ) {
$sql .= " and cont <> 'AF' " ;
}
if ( $postdata [ 'Europe' ] == NULL ) {
$sql .= " and cont <> 'EU' " ;
}
if ( $postdata [ 'Asia' ] == NULL ) {
$sql .= " and cont <> 'AS' " ;
}
if ( $postdata [ 'SouthAmerica' ] == NULL ) {
$sql .= " and cont <> 'SA' " ;
}
if ( $postdata [ 'NorthAmerica' ] == NULL ) {
$sql .= " and cont <> 'NA' " ;
}
if ( $postdata [ 'Oceania' ] == NULL ) {
$sql .= " and cont <> 'OC' " ;
}
if ( $postdata [ 'Antarctica' ] == NULL ) {
$sql .= " and cont <> 'AN' " ;
}
return $sql ;
}
2021-07-24 14:31:16 +02:00
2020-08-19 17:42:42 +02:00
/*
* Function gets worked and confirmed summary on each band on the active stationprofile
*/
2021-12-31 14:05:33 +01:00
function get_dxcc_summary ( $bands , $postdata )
2020-08-19 17:42:42 +02:00
{
$CI =& get_instance ();
2021-09-09 20:59:51 +02:00
$CI -> load -> model ( 'logbooks_model' );
$logbooks_locations_array = $CI -> logbooks_model -> list_logbook_relationships ( $this -> session -> userdata ( 'active_station_logbook' ));
2021-11-14 17:11:59 +01:00
if ( ! $logbooks_locations_array ) {
return null ;
}
2026-06-24 22:26:11 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
2020-08-25 15:53:20 +01:00
2020-08-19 17:42:42 +02:00
foreach ( $bands as $band ) {
2021-12-31 14:05:33 +01:00
$worked = $this -> getSummaryByBand ( $band , $postdata , $location_list );
$confirmed = $this -> getSummaryByBandConfirmed ( $band , $postdata , $location_list );
2020-08-19 17:42:42 +02:00
$dxccSummary [ 'worked' ][ $band ] = $worked [ 0 ] -> count ;
$dxccSummary [ 'confirmed' ][ $band ] = $confirmed [ 0 ] -> count ;
}
2021-12-31 14:05:33 +01:00
$workedTotal = $this -> getSummaryByBand ( $postdata [ 'band' ], $postdata , $location_list );
$confirmedTotal = $this -> getSummaryByBandConfirmed ( $postdata [ 'band' ], $postdata , $location_list );
2020-10-14 13:03:21 +02:00
$dxccSummary [ 'worked' ][ 'Total' ] = $workedTotal [ 0 ] -> count ;
$dxccSummary [ 'confirmed' ][ 'Total' ] = $confirmedTotal [ 0 ] -> count ;
2020-08-19 17:42:42 +02:00
return $dxccSummary ;
}
2021-12-31 14:05:33 +01:00
function getSummaryByBand ( $band , $postdata , $location_list )
2020-08-19 17:42:42 +02:00
{
$sql = " SELECT count(distinct thcv.col_dxcc) as count FROM " . $this -> config -> item ( 'table_name' ) . " thcv " ;
2021-12-31 14:05:33 +01:00
$sql .= " join dxcc_entities d on thcv.col_dxcc = d.adif " ;
2020-08-19 17:42:42 +02:00
2021-09-09 20:59:51 +02:00
$sql .= " where station_id in ( " . $location_list . " ) and col_dxcc > 0 " ;
2020-08-19 17:42:42 +02:00
2026-07-20 22:08:53 +01:00
if ( is_array ( $band )) {
$sql .= $this -> addBandToQuery ( $band );
} else if ( $band == 'SAT' ) {
2026-06-24 22:26:11 +01:00
$sql .= " and thcv.col_prop_mode =' " . $this -> db -> escape_str ( $band ) . " ' " ;
2020-10-14 13:03:21 +02:00
} else if ( $band == 'All' ) {
2022-09-07 20:40:31 +02:00
$this -> load -> model ( 'bands' );
$bandslots = $this -> bands -> get_worked_bands ( 'dxcc' );
2026-06-24 22:26:11 +01:00
$bandslots_list = " ' " . implode ( " ',' " , array_map ( array ( $this -> db , 'escape_str' ), $bandslots )) . " ' " ;
2022-09-07 20:40:31 +02:00
$sql .= " and thcv.col_band in ( " . $bandslots_list . " ) " .
" and thcv.col_prop_mode !='SAT' " ;
2020-08-19 17:42:42 +02:00
} else {
$sql .= " and thcv.col_prop_mode !='SAT' " ;
2026-06-24 22:26:11 +01:00
$sql .= " and thcv.col_band =' " . $this -> db -> escape_str ( $band ) . " ' " ;
2020-08-19 17:42:42 +02:00
}
2021-12-31 14:05:33 +01:00
2026-06-24 22:26:11 +01:00
$sql .= $this -> addModeToQuery ( $postdata [ 'mode' ]);
2021-12-31 14:05:33 +01:00
if ( $postdata [ 'includedeleted' ] == NULL ) {
$sql .= " and d.end is null " ;
}
$sql .= $this -> addContinentsToQuery ( $postdata );
2020-08-19 17:42:42 +02:00
$query = $this -> db -> query ( $sql );
return $query -> result ();
}
2021-12-31 14:05:33 +01:00
function getSummaryByBandConfirmed ( $band , $postdata , $location_list )
2020-08-19 17:42:42 +02:00
{
$sql = " SELECT count(distinct thcv.col_dxcc) as count FROM " . $this -> config -> item ( 'table_name' ) . " thcv " ;
2021-12-31 14:05:33 +01:00
$sql .= " join dxcc_entities d on thcv.col_dxcc = d.adif " ;
2020-08-19 17:42:42 +02:00
2021-09-09 20:59:51 +02:00
$sql .= " where station_id in ( " . $location_list . " ) " ;
2020-08-19 17:42:42 +02:00
2026-07-20 22:08:53 +01:00
if ( is_array ( $band )) {
$sql .= $this -> addBandToQuery ( $band );
} else if ( $band == 'SAT' ) {
2026-06-24 22:26:11 +01:00
$sql .= " and thcv.col_prop_mode =' " . $this -> db -> escape_str ( $band ) . " ' " ;
2020-10-14 13:03:21 +02:00
} else if ( $band == 'All' ) {
2022-09-07 20:40:31 +02:00
$this -> load -> model ( 'bands' );
$bandslots = $this -> bands -> get_worked_bands ( 'dxcc' );
2026-06-24 22:26:11 +01:00
$bandslots_list = " ' " . implode ( " ',' " , array_map ( array ( $this -> db , 'escape_str' ), $bandslots )) . " ' " ;
2022-09-07 20:40:31 +02:00
$sql .= " and thcv.col_band in ( " . $bandslots_list . " ) " .
" and thcv.col_prop_mode !='SAT' " ;
2020-08-19 17:42:42 +02:00
} else {
$sql .= " and thcv.col_prop_mode !='SAT' " ;
2026-06-24 22:26:11 +01:00
$sql .= " and thcv.col_band =' " . $this -> db -> escape_str ( $band ) . " ' " ;
2020-08-19 17:42:42 +02:00
}
2026-06-24 22:26:11 +01:00
$sql .= $this -> addModeToQuery ( $postdata [ 'mode' ]);
2021-12-31 14:05:33 +01:00
$sql .= $this -> addQslToQuery ( $postdata );
if ( $postdata [ 'includedeleted' ] == NULL ) {
$sql .= " and d.end is null " ;
}
$sql .= $this -> addContinentsToQuery ( $postdata );
2020-08-19 17:42:42 +02:00
$query = $this -> db -> query ( $sql );
return $query -> result ();
}
2021-07-24 14:31:16 +02:00
2020-09-01 17:49:34 +01:00
function lookup_country ( $country )
2020-08-25 15:53:20 +01:00
{
$query = $this -> db -> query ( '
SELECT *
FROM dxcc_entities
WHERE name = " '. $country .' "
ORDER BY LENGTH ( prefix ) DESC
LIMIT 1
' );
return $query -> row ();
}
2026-01-06 22:34:05 +00:00
/*
* Get continent breakdown for DXCC statistics
*/
function get_continent_breakdown ( $dxccArray ) {
$continents = array (
'Africa' => 0 ,
'Antarctica' => 0 ,
'Asia' => 0 ,
'Europe' => 0 ,
'NorthAmerica' => 0 ,
'SouthAmerica' => 0 ,
'Oceania' => 0
);
if ( ! $dxccArray ) {
return $continents ;
}
// Map continent codes to names
$continentMap = array (
'AF' => 'Africa' ,
'AN' => 'Antarctica' ,
'AS' => 'Asia' ,
'EU' => 'Europe' ,
'NA' => 'NorthAmerica' ,
'SA' => 'SouthAmerica' ,
'OC' => 'Oceania'
);
foreach ( $dxccArray as $dxcc ) {
if ( isset ( $dxcc -> cont ) && isset ( $continentMap [ $dxcc -> cont ])) {
$continentName = $continentMap [ $dxcc -> cont ];
$continents [ $continentName ] ++ ;
}
}
return $continents ;
}
/*
* Get overall DXCC statistics
*/
function get_dxcc_statistics ( $dxcc_array , $postdata ) {
$stats = array (
'total_worked' => 0 ,
'total_confirmed' => 0 ,
'worked_by_continent' => array (
'Africa' => 0 ,
'Antarctica' => 0 ,
'Asia' => 0 ,
'Europe' => 0 ,
'NorthAmerica' => 0 ,
'SouthAmerica' => 0 ,
'Oceania' => 0
),
'confirmed_by_continent' => array (
'Africa' => 0 ,
'Antarctica' => 0 ,
'Asia' => 0 ,
'Europe' => 0 ,
'NorthAmerica' => 0 ,
'SouthAmerica' => 0 ,
'Oceania' => 0
),
'milestones' => array (
100 => false ,
200 => false ,
300 => false
)
);
if ( ! $dxcc_array ) {
return $stats ;
}
// Get DXCC entities to map continents
$dxcc_result = $this -> db -> get ( 'dxcc_entities' ) -> result_array ();
$all_dxcc = array ();
foreach ( $dxcc_result as $row ) {
$all_dxcc [ $row [ 'adif' ]] = $row ;
}
// Map continent codes to names
$continentMap = array (
'AF' => 'Africa' ,
'AN' => 'Antarctica' ,
'AS' => 'Asia' ,
'EU' => 'Europe' ,
'NA' => 'NorthAmerica' ,
'SA' => 'SouthAmerica' ,
'OC' => 'Oceania'
);
// Count worked DXCC from array
$worked_count = 0 ;
$confirmed_count = 0 ;
foreach ( $dxcc_array as $adif => $entity ) {
// Check if this DXCC has any confirmed contacts (any cell with 'bg-success')
$is_worked = false ;
$is_confirmed = false ;
foreach ( $entity as $key => $value ) {
if ( is_string ( $value ) && strpos ( $value , 'bg-success' ) !== false ) {
$is_confirmed = true ;
$is_worked = true ;
break ;
}
if ( is_string ( $value ) && strpos ( $value , 'bg-danger' ) !== false ) {
$is_worked = true ;
}
}
if ( $is_worked ) {
$worked_count ++ ;
}
if ( $is_confirmed ) {
$confirmed_count ++ ;
}
// Map continent stats
if ( isset ( $all_dxcc [ $adif ]) && isset ( $all_dxcc [ $adif ][ 'cont' ])) {
$cont_code = $all_dxcc [ $adif ][ 'cont' ];
$continent = isset ( $continentMap [ $cont_code ]) ? $continentMap [ $cont_code ] : null ;
if ( $continent ) {
if ( $is_confirmed ) {
$stats [ 'confirmed_by_continent' ][ $continent ] ++ ;
}
if ( $is_worked ) {
$stats [ 'worked_by_continent' ][ $continent ] ++ ;
}
}
}
}
$stats [ 'total_worked' ] = $worked_count ;
$stats [ 'total_confirmed' ] = $confirmed_count ;
// Check milestone achievements
$stats [ 'milestones' ][ 100 ] = $stats [ 'total_worked' ] >= 100 ;
$stats [ 'milestones' ][ 200 ] = $stats [ 'total_worked' ] >= 200 ;
$stats [ 'milestones' ][ 300 ] = $stats [ 'total_worked' ] >= 300 ;
return $stats ;
}
2011-06-17 13:52:00 +01:00
}
2014-09-25 23:09:44 +01:00
?>