2021-03-14 10:11:21 +01:00
< ? php
class Lookup_model extends CI_Model {
2026-06-24 22:29:00 +01:00
private function normalize_location_list ( $location_list ) {
if ( is_array ( $location_list )) {
return implode ( ',' , array_map ( 'intval' , $location_list ));
}
$parts = explode ( ',' , ( string ) $location_list );
$ids = array ();
foreach ( $parts as $part ) {
$trimmed = trim ( $part , " \t \n \r \0 \x0B ' \" " );
if ( is_numeric ( $trimmed )) {
$ids [] = ( int ) $trimmed ;
}
}
return implode ( ',' , array_values ( array_unique ( $ids )));
}
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
function getSearchResult ( $queryinfo ){
2026-06-24 22:29:00 +01:00
$queryinfo [ 'location_list' ] = $this -> normalize_location_list ( $queryinfo [ 'location_list' ]);
if ( $queryinfo [ 'location_list' ] === '' ) {
return array ();
}
2021-09-10 23:13:25 +02:00
$modes = $this -> get_worked_modes ( $queryinfo [ 'location_list' ]);
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
return $this -> getResultFromDatabase ( $queryinfo , $modes );
2021-03-14 10:11:21 +01:00
}
2021-03-17 18:23:01 +01:00
function getResultFromDatabase ( $queryinfo , $modes ) {
2026-06-24 22:29:00 +01:00
$resultArray = array ();
2021-03-14 10:11:21 +01:00
// Creating an empty array with all the bands and modes from the database
foreach ( $modes as $mode ) {
2021-03-17 18:23:01 +01:00
foreach ( $queryinfo [ 'bands' ] as $band ) {
2021-03-14 10:11:21 +01:00
$resultArray [ $mode ][ $band ] = '-' ;
}
}
// Populating array with worked band/mode combinations
2021-03-17 18:23:01 +01:00
$worked = $this -> getQueryData ( $queryinfo , 'worked' );
2021-03-14 10:11:21 +01:00
foreach ( $worked as $w ) {
2023-02-18 09:58:54 +01:00
if ( in_array ( $w -> col_band , $queryinfo [ 'bands' ])) {
$resultArray [ $w -> col_mode ][ $w -> col_band ] = 'W' ;
}
2021-03-14 10:11:21 +01:00
}
// Populating array with confirmed band/mode combinations
2021-03-17 18:23:01 +01:00
$confirmed = $this -> getQueryData ( $queryinfo , 'confirmed' );
2021-03-14 10:11:21 +01:00
foreach ( $confirmed as $c ) {
2023-02-18 09:58:54 +01:00
if ( in_array ( $c -> col_band , $queryinfo [ 'bands' ])) {
$resultArray [ $c -> col_mode ][ $c -> col_band ] = 'C' ;
}
2021-03-14 10:11:21 +01:00
}
2026-03-26 22:26:47 +00:00
// Filter out modes that have no worked or confirmed QSOs for this entity
$filteredArray = [];
foreach ( $resultArray as $mode => $bands ) {
$hasData = false ;
foreach ( $bands as $bandValue ) {
if ( $bandValue !== '-' ) {
$hasData = true ;
break ;
}
}
if ( $hasData ) {
$filteredArray [ $mode ] = $bands ;
}
}
if ( ! ( isset ( $filteredArray ))) $filteredArray = [];
return $filteredArray ;
2021-03-14 10:11:21 +01:00
}
/*
* Builds query depending on what we are searching for
*/
2021-03-17 18:23:01 +01:00
function getQueryData ( $queryinfo , $confirmedtype ) {
2026-06-24 22:29:00 +01:00
$location_list = $this -> normalize_location_list ( $queryinfo [ 'location_list' ]);
if ( $location_list === '' ) {
return array ();
}
$queryinfo [ 'location_list' ] = $location_list ;
2021-03-14 11:56:45 +01:00
// If user inputs longer grid than 4 chars, we use only the first 4
2021-03-17 18:23:01 +01:00
if ( strlen ( $queryinfo [ 'grid' ]) > 4 ) {
$fixedgrid = substr ( $queryinfo [ 'grid' ], 0 , 4 );
2021-03-14 11:56:45 +01:00
}
else {
2021-03-17 18:23:01 +01:00
$fixedgrid = $queryinfo [ 'grid' ];
2021-03-14 11:56:45 +01:00
}
2021-03-17 18:23:01 +01:00
$sqlquerytypestring = '' ;
switch ( $queryinfo [ 'type' ]) {
2026-06-24 22:29:00 +01:00
case 'dxcc' : $sqlquerytypestring .= " and col_dxcc = " . ( int ) $queryinfo [ 'dxcc' ]; break ;
case 'iota' : $sqlquerytypestring .= " and col_iota = ' " . $this -> db -> escape_str ( $queryinfo [ 'iota' ]) . " ' " ; break ;
case 'vucc' : $sqlquerytypestring .= " and (col_gridsquare like '% " . $this -> db -> escape_like_str ( $fixedgrid ) . " %' or col_vucc_grids like '% " . $this -> db -> escape_like_str ( $fixedgrid ) . " %') " ; break ;
case 'cq' : $sqlquerytypestring .= " and col_cqz = " . ( int ) $queryinfo [ 'cqz' ]; break ;
case 'was' : $sqlquerytypestring .= " and col_state = ' " . $this -> db -> escape_str ( $queryinfo [ 'was' ]) . " ' and COL_DXCC in ('291', '6', '110') " ;; break ;
case 'sota' : $sqlquerytypestring .= " and col_sota_ref = ' " . $this -> db -> escape_str ( $queryinfo [ 'sota' ]) . " ' " ; break ;
case 'wwff' : $sqlquerytypestring .= " and col_sig = 'WWFF' and col_sig_info = ' " . $this -> db -> escape_str ( $queryinfo [ 'wwff' ]) . " ' " ; break ;
2021-03-17 18:23:01 +01:00
default : break ;
}
$sqlqueryconfirmationstring = '' ;
if ( $confirmedtype == 'confirmed' ) {
$sqlqueryconfirmationstring .= " and (col_qsl_rcvd = 'Y' or col_lotw_qsl_rcvd = 'Y') " ;
}
// Fetching info for all modes and bands except satellite
2026-06-24 22:29:00 +01:00
$sql = " SELECT distinct col_band, lower(col_mode) as col_mode FROM " . $this -> config -> item ( 'table_name' ) . " thcv " ;
2021-03-14 10:11:21 +01:00
2021-09-10 23:13:25 +02:00
$sql .= " where station_id in ( " . $queryinfo [ 'location_list' ] . " ) " ;
2021-03-14 10:11:21 +01:00
$sql .= " and coalesce(col_submode, '') = '' " ;
$sql .= " and col_prop_mode != 'SAT' " ;
2021-03-17 18:23:01 +01:00
$sql .= $sqlquerytypestring ;
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
$sql .= $sqlqueryconfirmationstring ;
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
// Fetching info for all sub_modes and bands except satellite
2021-03-14 10:11:21 +01:00
$sql .= " union SELECT distinct col_band, lower(col_submode) as col_mode FROM " . $this -> config -> item ( 'table_name' ) . " thcv " ;
2021-09-10 23:13:25 +02:00
$sql .= " where station_id in ( " . $queryinfo [ 'location_list' ] . " ) " ;
2021-03-14 10:11:21 +01:00
$sql .= " and coalesce(col_submode, '') <> '' " ;
$sql .= " and col_prop_mode != 'SAT' " ;
2021-03-17 18:23:01 +01:00
$sql .= $sqlquerytypestring ;
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
$sql .= $sqlqueryconfirmationstring ;
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
// Fetching info for all modes on satellite
2021-03-14 10:11:21 +01:00
$sql .= " union SELECT distinct 'SAT' col_band, lower(col_mode) as col_mode FROM " . $this -> config -> item ( 'table_name' ) . " thcv " ;
2021-09-10 23:13:25 +02:00
$sql .= " where station_id in ( " . $queryinfo [ 'location_list' ] . " ) " ;
2021-03-14 10:11:21 +01:00
$sql .= " and coalesce(col_submode, '') = '' " ;
$sql .= " and col_prop_mode = 'SAT' " ;
2021-03-17 18:23:01 +01:00
$sql .= $sqlquerytypestring ;
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
$sql .= $sqlqueryconfirmationstring ;
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
// Fetching info for all sub_modes on satellite
2021-03-14 10:11:21 +01:00
$sql .= " union SELECT distinct 'SAT' col_band, lower(col_submode) as col_mode FROM " . $this -> config -> item ( 'table_name' ) . " thcv " ;
2021-09-10 23:13:25 +02:00
$sql .= " where station_id in ( " . $queryinfo [ 'location_list' ] . " ) " ;
2021-03-14 10:11:21 +01:00
$sql .= " and coalesce(col_submode, '') <> '' " ;
$sql .= " and col_prop_mode = 'SAT' " ;
2021-03-17 18:23:01 +01:00
$sql .= $sqlquerytypestring ;
2021-03-14 10:11:21 +01:00
2021-03-17 18:23:01 +01:00
$sql .= $sqlqueryconfirmationstring ;
2021-03-14 10:11:21 +01:00
$query = $this -> db -> query ( $sql );
return $query -> result ();
}
/*
* Get ' s the worked modes from the log
*/
2021-09-10 23:13:25 +02:00
function get_worked_modes ( $location_list )
2021-03-14 10:11:21 +01:00
{
2026-06-24 22:29:00 +01:00
$location_list = $this -> normalize_location_list ( $location_list );
if ( $location_list === '' ) {
return array ();
}
2021-03-14 10:11:21 +01:00
// get all worked modes from database
$data = $this -> db -> query (
2021-09-10 23:13:25 +02:00
" SELECT distinct LOWER(`COL_MODE`) as `COL_MODE` FROM ` " . $this -> config -> item ( 'table_name' ) . " ` WHERE station_id in ( " . $location_list . " ) order by COL_MODE ASC "
2021-03-14 10:11:21 +01:00
);
$results = array ();
foreach ( $data -> result () as $row ) {
array_push ( $results , $row -> COL_MODE );
}
$data = $this -> db -> query (
2021-09-10 23:13:25 +02:00
" SELECT distinct LOWER(`COL_SUBMODE`) as `COL_SUBMODE` FROM ` " . $this -> config -> item ( 'table_name' ) . " ` WHERE station_id in ( " . $location_list . " ) and coalesce(COL_SUBMODE, '') <> '' order by COL_SUBMODE ASC "
2021-03-14 10:11:21 +01:00
);
foreach ( $data -> result () as $row ) {
if ( ! in_array ( $row , $results )) {
array_push ( $results , $row -> COL_SUBMODE );
}
}
return $results ;
}
}