2021-03-14 10:11:21 +01:00
< ? php
class Lookup_model extends CI_Model {
2025-07-03 15:48:59 +02:00
function getSatResult ( $queryinfo ){
2026-07-11 16:30:21 +02:00
$resultArray = [];
2025-07-03 15:48:59 +02:00
foreach ( $queryinfo [ 'sats' ] as $sat ) {
$resultArray [ $sat ] = '-' ;
}
$sql = " SELECT DISTINCT(COL_SAT_NAME) FROM " . $this -> config -> item ( 'table_name' ) . " WHERE COL_PROP_MODE = 'SAT' AND COL_CALL = ?; " ;
$binds [] = $queryinfo [ 'callsign' ];
$query = $this -> db -> query ( $sql , $binds );
foreach ( $query -> result () as $workedsat ) {
$resultArray [ $workedsat -> COL_SAT_NAME ] = 'W' ;
}
$sql = " SELECT DISTINCT(COL_SAT_NAME) FROM " . $this -> config -> item ( 'table_name' ) . " WHERE COL_PROP_MODE = 'SAT' AND COL_CALL = ? " ;
$sql .= $this -> buildConfirmationString ( 'confirmed' );
$query = $this -> db -> query ( $sql , $binds );
foreach ( $query -> result () as $confirmedsat ) {
$resultArray [ $confirmedsat -> COL_SAT_NAME ] = 'C' ;
}
return $resultArray ;
}
2021-03-17 18:23:01 +01:00
function getSearchResult ( $queryinfo ){
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
}
2026-01-13 20:45:08 +01:00
function getDxccForVucc ( $grid ) {
$fixedgrid = ( strlen ( $grid ) > 4 ) ? substr ( $grid , 0 , 4 ) : $grid ;
$sql = " select name from dxcc_entities
join vuccgrids on dxcc_entities . adif = vuccgrids . adif
where gridsquare = ? " ;
$binds [] = $fixedgrid ;
$query = $this -> db -> query ( $sql , $binds );
$dxccArray = [];
foreach ( $query -> result () as $row ) {
$dxccArray [] = ucwords ( strtolower ( $row -> name ), " - (/ " );
}
return $dxccArray ;
}
2026-08-08 18:59:30 +02:00
/* Like getDxccForVucc , but returns adif + name rows ( the flag is added by the
* caller via the DxccFlag library ) . Powers the activation - planner grid flag . */
function getDxccForVuccGrid ( $grid ) {
$fixedgrid = ( strlen ( $grid ) > 4 ) ? substr ( $grid , 0 , 4 ) : $grid ;
$sql = " select dxcc_entities.adif, dxcc_entities.name from dxcc_entities
join vuccgrids on dxcc_entities . adif = vuccgrids . adif
where gridsquare = ? " ;
$query = $this -> db -> query ( $sql , array ( $fixedgrid ));
return $query -> result ();
}
2021-03-17 18:23:01 +01:00
function getResultFromDatabase ( $queryinfo , $modes ) {
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
}
2024-01-01 09:50:29 +00:00
if ( ! ( isset ( $resultArray ))) $resultArray = [];
2021-03-14 10:11:21 +01:00
return $resultArray ;
}
2025-01-23 08:29:06 +00:00
/*
* Builds information - where - part of query depending on what we are searching for
*/
2025-02-04 11:01:22 +01:00
private function build_info_query ( $queryinfo , & $binds ) {
2025-01-23 08:29:06 +00:00
$sqlquerytypestring = '' ;
2025-02-04 11:01:22 +01:00
if ( strlen ( $queryinfo [ 'grid' ]) > 4 ) {
$fixedgrid = substr ( $queryinfo [ 'grid' ], 0 , 4 );
}
else {
$fixedgrid = $queryinfo [ 'grid' ];
}
2025-01-23 08:29:06 +00:00
switch ( $queryinfo [ 'type' ]) {
2025-02-04 11:01:22 +01:00
case 'dxcc' :
2025-01-23 08:29:06 +00:00
$sqlquerytypestring .= " and col_dxcc = ? " ;
2025-03-23 17:17:08 +01:00
$binds [] = $queryinfo [ 'dxcc' ];
2025-01-23 08:29:06 +00:00
break ;
2025-02-04 11:01:22 +01:00
case 'iota' :
2025-01-23 08:29:06 +00:00
$sqlquerytypestring .= " and col_iota = ? " ;
2025-03-23 17:17:08 +01:00
$binds [] = $queryinfo [ 'iota' ];
2025-01-23 08:29:06 +00:00
break ;
2025-02-04 11:01:22 +01:00
case 'vucc' :
2025-01-23 08:29:06 +00:00
$sqlquerytypestring .= " and (col_gridsquare like ? or col_vucc_grids like ?) " ;
2025-03-23 17:17:08 +01:00
$binds [] = '%' . $fixedgrid . '%' ;
$binds [] = '%' . $fixedgrid . '%' ;
2025-01-23 08:29:06 +00:00
break ;
2025-02-04 11:01:22 +01:00
case 'cq' :
2025-01-23 08:29:06 +00:00
$sqlquerytypestring .= " and col_cqz = ? " ;
2025-03-23 17:17:08 +01:00
$binds [] = $queryinfo [ 'cqz' ];
2025-01-23 08:29:06 +00:00
break ;
2025-02-04 11:01:22 +01:00
case 'was' :
$sqlquerytypestring .= " and col_state = ? and COL_DXCC in ('291', '6', '110') " ;
2025-03-23 17:17:08 +01:00
$binds [] = $queryinfo [ 'was' ];
2025-01-23 08:29:06 +00:00
break ;
2025-02-04 11:01:22 +01:00
case 'sota' :
2025-01-23 08:29:06 +00:00
$sqlquerytypestring .= " and col_sota_ref = ? " ;
2025-03-23 17:17:08 +01:00
$binds [] = $queryinfo [ 'sota' ];
break ;
case 'pota' :
$sqlquerytypestring .= " and col_pota_ref = ? " ;
$binds [] = $queryinfo [ 'pota' ];
2025-01-23 08:29:06 +00:00
break ;
2025-02-04 11:01:22 +01:00
case 'wwff' :
2025-02-04 18:38:01 +01:00
$sqlquerytypestring .= " and col_wwff_ref = ? " ;
2025-03-23 17:17:08 +01:00
$binds [] = $queryinfo [ 'wwff' ];
2025-01-23 08:29:06 +00:00
break ;
2025-02-04 11:01:22 +01:00
case 'itu' :
2025-01-23 08:29:06 +00:00
$sqlquerytypestring .= " and col_ituz = ? " ;
2025-03-23 17:17:08 +01:00
$binds [] = $queryinfo [ 'ituz' ];
2025-01-23 08:29:06 +00:00
break ;
2025-02-04 11:01:22 +01:00
case 'continent' :
$sqlquerytypestring .= " and col_cont = ? " ;
2025-03-23 17:17:08 +01:00
$binds [] = $queryinfo [ 'continent' ];
2025-02-04 11:01:22 +01:00
break ;
2025-07-01 14:24:13 +02:00
case 'dok' :
$sqlquerytypestring .= " and col_darc_dok = ? " ;
$binds [] = $queryinfo [ 'dok' ];
break ;
2025-01-23 08:29:06 +00:00
default : break ;
}
return $sqlquerytypestring ;
}
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 ) {
2021-03-14 11:56:45 +01:00
// If user inputs longer grid than 4 chars, we use only the first 4
2025-03-23 17:17:08 +01:00
$binds = [];
2021-03-14 11:56:45 +01:00
2021-03-17 18:23:01 +01:00
$sqlquerytypestring = '' ;
2025-07-03 15:48:59 +02:00
$sqlqueryconfirmationstring = $this -> buildConfirmationString ( $confirmedtype );
2021-03-17 18:23:01 +01:00
// Fetching info for all modes and bands except satellite
2021-03-14 10:11:21 +01:00
$sql = " SELECT distinct 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' " ;
2025-01-23 08:29:06 +00:00
$sql .= $this -> build_info_query ( $queryinfo , $binds );
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' " ;
2025-01-23 08:29:06 +00:00
$sql .= $this -> build_info_query ( $queryinfo , $binds );
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' " ;
2025-01-23 08:29:06 +00:00
$sql .= $this -> build_info_query ( $queryinfo , $binds );
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' " ;
2025-01-23 08:29:06 +00:00
$sql .= $this -> build_info_query ( $queryinfo , $binds );
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
2025-01-23 08:29:06 +00:00
$query = $this -> db -> query ( $sql , $binds );
2021-03-14 10:11:21 +01:00
return $query -> result ();
}
2025-07-03 15:48:59 +02:00
function buildConfirmationString ( $confirmedtype ) {
if ( $confirmedtype == 'confirmed' ) {
$user_default_confirmation = $this -> session -> userdata ( 'user_default_confirmation' );
$extrawhere = '' ;
if ( isset ( $user_default_confirmation ) && strpos ( $user_default_confirmation , 'Q' ) !== false ) {
$extrawhere = " COL_QSL_RCVD='Y' " ;
}
if ( isset ( $user_default_confirmation ) && strpos ( $user_default_confirmation , 'L' ) !== false ) {
if ( $extrawhere != '' ) {
$extrawhere .= " OR " ;
}
$extrawhere .= " COL_LOTW_QSL_RCVD='Y' " ;
}
if ( isset ( $user_default_confirmation ) && strpos ( $user_default_confirmation , 'E' ) !== false ) {
if ( $extrawhere != '' ) {
$extrawhere .= " OR " ;
}
$extrawhere .= " COL_EQSL_QSL_RCVD='Y' " ;
}
if ( isset ( $user_default_confirmation ) && strpos ( $user_default_confirmation , 'Z' ) !== false ) {
if ( $extrawhere != '' ) {
$extrawhere .= " OR " ;
}
$extrawhere .= " COL_QRZCOM_QSO_DOWNLOAD_STATUS='Y' " ;
}
2026-08-10 14:09:44 +02:00
if ( isset ( $user_default_confirmation ) && strpos ( $user_default_confirmation , 'C' ) !== false ) {
if ( $extrawhere != '' ) {
$extrawhere .= " OR " ;
}
$extrawhere .= " COL_CLUBLOG_QSO_DOWNLOAD_STATUS='Y' " ;
}
2025-07-03 15:48:59 +02:00
if (( $confirmedtype == 'confirmed' ) && ( $extrawhere != '' )){
$sqlqueryconfirmationstring = " and ( " . $extrawhere . " ) " ;
} else {
$sqlqueryconfirmationstring = ' and (1=0)' ;
}
} else {
$sqlqueryconfirmationstring = '' ;
}
return $sqlqueryconfirmationstring ;
}
2021-03-14 10:11:21 +01:00
/*
* 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
{
// 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 ;
}
}