2023-09-11 16:59:05 +02:00
< ? php
class Activated_gridmap_model extends CI_Model {
2026-07-17 13:44:06 +01:00
function get_band_confirmed ( $band , $mode , $qsl , $lotw , $eqsl , $qrz , $sat , $sat_orbit = 'All' ) {
2023-09-11 16:59:05 +02:00
$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 null ;
}
Sanitize and escape query inputs in models
Sanitize location lists and escape query parameters across multiple models to prevent SQL injection and fix query formatting. Changes include: converting location arrays to comma-separated integer lists (array_map('intval')) instead of quoted implode, adding escape_str for band/mode/sat, adding a sanitize_location_list helper and early-return checks in CQ, escaping band lists, and updating Adif_data date where clauses to use $this->db->escape(..., NULL, FALSE). Files modified: Accumulate_model, Activated_gridmap_model, Adif_data, Cq, and Gridmap_model.
2026-06-24 22:19:35 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
$band = $this -> db -> escape_str ( $band );
$mode = $this -> db -> escape_str ( $mode );
$sat = $this -> db -> escape_str ( $sat );
2026-07-17 13:44:06 +01:00
$sat_orbit = $this -> db -> escape_str ( $sat_orbit );
2023-09-11 16:59:05 +02:00
$sql = 'SELECT DISTINCT station_gridsquare AS GRID_SQUARES, COL_BAND FROM '
. 'station_profile JOIN ' . $this -> config -> item ( 'table_name' ) . ' on ' . $this -> config -> item ( 'table_name' ) . '.station_id = station_profile.station_id '
2023-11-30 09:54:03 +00:00
. 'WHERE station_profile.station_gridsquare != "" '
. 'AND station_profile.station_id in (' . $location_list . ')' ;
2023-09-11 16:59:05 +02:00
if ( $band != 'All' ) {
if ( $band == 'SAT' ) {
$sql .= " and col_prop_mode =' " . $band . " ' " ;
2026-07-17 13:44:06 +01:00
$sql .= $this -> getSatelliteOrbitFilterSql ( $sat_orbit );
2023-09-11 16:59:05 +02:00
if ( $sat != 'All' ) {
$sql .= " and col_sat_name =' " . $sat . " ' " ;
}
}
else {
$sql .= " and col_prop_mode !='SAT' " ;
$sql .= " and col_band =' " . $band . " ' " ;
}
}
if ( $mode != 'All' ) {
$sql .= " and (col_mode =' " . $mode . " ' or col_submode =' " . $mode . " ') " ;
}
2023-12-08 12:51:10 +00:00
$sql .= $this -> addQslToQuery ( $qsl , $lotw , $eqsl , $qrz );
2023-09-15 23:56:43 +02:00
return $this -> db -> query ( $sql );
2023-09-11 16:59:05 +02:00
}
2026-07-17 13:44:06 +01:00
function get_band ( $band , $mode , $qsl , $lotw , $eqsl , $qrz , $sat , $sat_orbit = 'All' ) {
2023-09-11 16:59:05 +02:00
$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 null ;
}
Sanitize and escape query inputs in models
Sanitize location lists and escape query parameters across multiple models to prevent SQL injection and fix query formatting. Changes include: converting location arrays to comma-separated integer lists (array_map('intval')) instead of quoted implode, adding escape_str for band/mode/sat, adding a sanitize_location_list helper and early-return checks in CQ, escaping band lists, and updating Adif_data date where clauses to use $this->db->escape(..., NULL, FALSE). Files modified: Accumulate_model, Activated_gridmap_model, Adif_data, Cq, and Gridmap_model.
2026-06-24 22:19:35 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
$band = $this -> db -> escape_str ( $band );
$mode = $this -> db -> escape_str ( $mode );
$sat = $this -> db -> escape_str ( $sat );
2026-07-17 13:44:06 +01:00
$sat_orbit = $this -> db -> escape_str ( $sat_orbit );
2023-09-11 16:59:05 +02:00
$sql = 'SELECT DISTINCT station_gridsquare AS GRID_SQUARES, COL_BAND FROM '
. 'station_profile JOIN ' . $this -> config -> item ( 'table_name' ) . ' on ' . $this -> config -> item ( 'table_name' ) . '.station_id = station_profile.station_id '
2023-11-30 09:54:03 +00:00
. 'WHERE station_profile.station_gridsquare != "" '
. 'AND station_profile.station_id in (' . $location_list . ')' ;
2023-09-11 16:59:05 +02:00
if ( $band != 'All' ) {
if ( $band == 'SAT' ) {
$sql .= " and col_prop_mode =' " . $band . " ' " ;
2026-07-17 13:44:06 +01:00
$sql .= $this -> getSatelliteOrbitFilterSql ( $sat_orbit );
2023-09-11 16:59:05 +02:00
if ( $sat != 'All' ) {
$sql .= " and col_sat_name =' " . $sat . " ' " ;
}
}
else {
$sql .= " and col_prop_mode !='SAT' " ;
$sql .= " and col_band =' " . $band . " ' " ;
}
}
if ( $mode != 'All' ) {
$sql .= " and (col_mode =' " . $mode . " ' or col_submode =' " . $mode . " ') " ;
}
return $this -> db -> query ( $sql );
}
2026-07-17 13:44:06 +01:00
function get_band_worked_vucc_squares ( $band , $mode , $qsl , $lotw , $eqsl , $qrz , $sat , $sat_orbit = 'All' ) {
2023-09-11 16:59:05 +02:00
$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 null ;
}
Sanitize and escape query inputs in models
Sanitize location lists and escape query parameters across multiple models to prevent SQL injection and fix query formatting. Changes include: converting location arrays to comma-separated integer lists (array_map('intval')) instead of quoted implode, adding escape_str for band/mode/sat, adding a sanitize_location_list helper and early-return checks in CQ, escaping band lists, and updating Adif_data date where clauses to use $this->db->escape(..., NULL, FALSE). Files modified: Accumulate_model, Activated_gridmap_model, Adif_data, Cq, and Gridmap_model.
2026-06-24 22:19:35 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
$band = $this -> db -> escape_str ( $band );
$mode = $this -> db -> escape_str ( $mode );
$sat = $this -> db -> escape_str ( $sat );
2026-07-17 13:44:06 +01:00
$sat_orbit = $this -> db -> escape_str ( $sat_orbit );
2023-09-11 16:59:05 +02:00
$sql = 'SELECT distinct COL_VUCC_GRIDS, COL_BAND FROM '
. $this -> config -> item ( 'table_name' )
. ' WHERE station_id in ('
. $location_list . ') AND COL_VUCC_GRIDS != ""' ;
if ( $band != 'All' ) {
if ( $band == 'SAT' ) {
$sql .= " and col_prop_mode =' " . $band . " ' " ;
2026-07-17 13:44:06 +01:00
$sql .= $this -> getSatelliteOrbitFilterSql ( $sat_orbit );
2023-09-11 16:59:05 +02:00
if ( $sat != 'All' ) {
$sql .= " and col_sat_name =' " . $sat . " ' " ;
}
}
else {
$sql .= " and col_prop_mode !='SAT' " ;
$sql .= " and col_band =' " . $band . " ' " ;
}
}
if ( $mode != 'All' ) {
$sql .= " and (col_mode =' " . $mode . " ' or col_submode =' " . $mode . " ') " ;
}
return null ;
return $this -> db -> query ( $sql );
}
2026-07-17 13:44:06 +01:00
function get_band_confirmed_vucc_squares ( $band , $mode , $qsl , $lotw , $eqsl , $qrz , $sat , $sat_orbit = 'All' ) {
2023-09-11 16:59:05 +02:00
$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 null ;
}
Sanitize and escape query inputs in models
Sanitize location lists and escape query parameters across multiple models to prevent SQL injection and fix query formatting. Changes include: converting location arrays to comma-separated integer lists (array_map('intval')) instead of quoted implode, adding escape_str for band/mode/sat, adding a sanitize_location_list helper and early-return checks in CQ, escaping band lists, and updating Adif_data date where clauses to use $this->db->escape(..., NULL, FALSE). Files modified: Accumulate_model, Activated_gridmap_model, Adif_data, Cq, and Gridmap_model.
2026-06-24 22:19:35 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
$band = $this -> db -> escape_str ( $band );
$mode = $this -> db -> escape_str ( $mode );
$sat = $this -> db -> escape_str ( $sat );
2026-07-17 13:44:06 +01:00
$sat_orbit = $this -> db -> escape_str ( $sat_orbit );
2023-09-11 16:59:05 +02:00
$sql = 'SELECT distinct COL_VUCC_GRIDS, COL_BAND FROM '
. $this -> config -> item ( 'table_name' )
. ' WHERE station_id in ('
. $location_list . ') AND COL_VUCC_GRIDS != ""' ;
if ( $band != 'All' ) {
if ( $band == 'SAT' ) {
$sql .= " and col_prop_mode =' " . $band . " ' " ;
2026-07-17 13:44:06 +01:00
$sql .= $this -> getSatelliteOrbitFilterSql ( $sat_orbit );
2023-09-11 16:59:05 +02:00
if ( $sat != 'All' ) {
$sql .= " and col_sat_name =' " . $sat . " ' " ;
}
}
else {
$sql .= " and col_prop_mode !='SAT' " ;
$sql .= " and col_band =' " . $band . " ' " ;
}
}
if ( $mode != 'All' ) {
$sql .= " and (col_mode =' " . $mode . " ' or col_submode =' " . $mode . " ') " ;
}
2023-12-08 12:51:10 +00:00
$sql .= $this -> addQslToQuery ( $qsl , $lotw , $eqsl , $qrz );
2023-09-11 16:59:05 +02:00
return null ;
return $this -> db -> query ( $sql );
}
2026-07-17 13:44:06 +01:00
function get_satellite_breakdown ( $band , $mode , $qsl , $lotw , $eqsl , $qrz , $sat , $sat_orbit = 'All' , $confirmed = false ) {
$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 array (
'total' => 0 ,
'LEO' => 0 ,
'MEO' => 0 ,
'GEO' => 0 ,
);
}
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
$band = $this -> db -> escape_str ( $band );
$mode = $this -> db -> escape_str ( $mode );
$sat = $this -> db -> escape_str ( $sat );
$sat_orbit = $this -> db -> escape_str ( $sat_orbit );
$sql = 'SELECT DISTINCT station_gridsquare AS GRID_SQUARES, COL_SAT_NAME FROM ' . $this -> config -> item ( 'table_name' )
. ' JOIN station_profile ON ' . $this -> config -> item ( 'table_name' ) . '.station_id = station_profile.station_id'
. ' WHERE station_profile.station_gridsquare != ""'
. ' AND station_profile.station_id in (' . $location_list . ')'
. ' AND col_prop_mode =\'SAT\'' ;
if ( $band != 'All' ) {
if ( $band == 'SAT' ) {
$sql .= $this -> getSatelliteOrbitFilterSql ( $sat_orbit );
if ( $sat != 'All' ) {
$sql .= " and col_sat_name =' " . $sat . " ' " ;
}
} else {
$sql .= " and col_prop_mode !='SAT' " ;
$sql .= " and col_band =' " . $band . " ' " ;
}
}
if ( $mode != 'All' ) {
$sql .= " and (col_mode =' " . $mode . " ' or col_submode =' " . $mode . " ') " ;
}
if ( $confirmed ) {
$sql .= $this -> addQslToQuery ( $qsl , $lotw , $eqsl , $qrz );
}
$query = $this -> db -> query ( $sql );
$categories = array (
'LEO' => array (),
'MEO' => array (),
'GEO' => array (),
);
$unique_grids = array ();
if ( $query && $query -> num_rows () > 0 ) {
foreach ( $query -> result () as $row ) {
$grid = strtoupper ( substr (( string ) $row -> GRID_SQUARES , 0 , 4 ));
$satellite = strtoupper ( trim (( string ) $row -> COL_SAT_NAME ));
$category = $this -> get_satellite_category ( $satellite );
if ( $grid !== '' && ! in_array ( $grid , $unique_grids , true )) {
$unique_grids [] = $grid ;
}
if ( $grid !== '' && ! in_array ( $grid , $categories [ $category ], true )) {
$categories [ $category ][] = $grid ;
}
}
}
return array (
'total' => count ( $unique_grids ),
'LEO' => count ( $categories [ 'LEO' ]),
'MEO' => count ( $categories [ 'MEO' ]),
'GEO' => count ( $categories [ 'GEO' ]),
);
}
function get_satellite_category ( $satellite_name ) {
if ( $satellite_name === 'IO-117' ) {
return 'MEO' ;
}
if ( $satellite_name === 'QO-100' ) {
return 'GEO' ;
}
return 'LEO' ;
}
function getSatelliteOrbitFilterSql ( $sat_orbit ) {
if ( $sat_orbit === 'MEO' ) {
return " and col_sat_name = 'IO-117' " ;
}
if ( $sat_orbit === 'GEO' ) {
return " and col_sat_name = 'QO-100' " ;
}
if ( $sat_orbit === 'LEO' ) {
return " and col_sat_name not in ('IO-117', 'QO-100') " ;
}
return '' ;
}
2023-12-08 12:51:10 +00:00
// Adds confirmation to query
function addQslToQuery ( $qsl , $lotw , $eqsl , $qrz ) {
$sql = '' ;
if ( $lotw == " true " ) {
$sql .= " or col_lotw_qsl_sent = 'Y' " ;
}
if ( $qsl == " true " ) {
$sql .= " or col_qsl_sent = 'Y' " ;
}
if ( $eqsl == " true " ) {
$sql .= " or col_eqsl_qsl_sent = 'Y' " ;
}
if ( $qrz == " true " ) {
$sql .= " or col_qrzcom_qso_upload_status = 'Y' " ;
}
if ( $sql != '' ) {
$sql = 'and (1=0 ' . $sql . ')' ;
}
return $sql ;
}
2023-09-11 16:59:05 +02:00
/*
* Get ' s the worked modes from the log
*/
function get_worked_modes () {
$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 null ;
}
Sanitize and escape query inputs in models
Sanitize location lists and escape query parameters across multiple models to prevent SQL injection and fix query formatting. Changes include: converting location arrays to comma-separated integer lists (array_map('intval')) instead of quoted implode, adding escape_str for band/mode/sat, adding a sanitize_location_list helper and early-return checks in CQ, escaping band lists, and updating Adif_data date where clauses to use $this->db->escape(..., NULL, FALSE). Files modified: Accumulate_model, Activated_gridmap_model, Adif_data, Cq, and Gridmap_model.
2026-06-24 22:19:35 +01:00
$location_list = implode ( ',' , array_map ( 'intval' , $logbooks_locations_array ));
2023-09-11 16:59:05 +02:00
// get all worked modes from database
$data = $this -> db -> query (
" 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 "
);
$results = array ();
foreach ( $data -> result () as $row ) {
array_push ( $results , $row -> COL_MODE );
}
$data = $this -> db -> query (
" 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 "
);
foreach ( $data -> result () as $row ) {
if ( ! in_array ( $row , $results )) {
array_push ( $results , $row -> COL_SUBMODE );
}
}
asort ( $results );
return $results ;
}
}