2020-10-04 21:41:01 +02:00
< ? php
if ( ! defined ( 'BASEPATH' )) exit ( 'No direct script access allowed' );
class Accumulate_model extends CI_Model
{
2024-08-26 06:21:49 +00:00
function get_accumulated_data ( $band , $award , $mode , $propmode , $period ) {
2024-02-09 18:12:28 +01:00
$this -> load -> model ( 'logbooks_model' );
$logbooks_locations_array = $this -> logbooks_model -> list_logbook_relationships ( $this -> session -> userdata ( 'active_station_logbook' ));
2021-09-10 22:59:10 +02:00
2021-11-14 17:33:24 +01:00
if ( ! $logbooks_locations_array ) {
return array ();
}
2024-02-09 18:12:28 +01:00
$location_list = " ' " . implode ( " ',' " , $logbooks_locations_array ) . " ' " ;
2020-10-04 21:41:01 +02:00
2020-10-06 21:12:14 +02:00
switch ( $award ) {
2024-02-09 18:12:28 +01:00
case 'dxcc' :
2024-08-26 05:39:50 +00:00
$result = $this -> get_accumulated_dxcc ( $band , $mode , $propmode , $period , $location_list );
2024-02-09 18:12:28 +01:00
break ;
case 'was' :
2024-08-26 05:39:50 +00:00
$result = $this -> get_accumulated_was ( $band , $mode , $propmode , $period , $location_list );
2024-02-09 18:12:28 +01:00
break ;
case 'iota' :
2024-08-26 05:39:50 +00:00
$result = $this -> get_accumulated_iota ( $band , $mode , $propmode , $period , $location_list );
2024-02-09 18:12:28 +01:00
break ;
case 'waz' :
2024-08-26 05:39:50 +00:00
$result = $this -> get_accumulated_waz ( $band , $mode , $propmode , $period , $location_list );
2024-02-09 18:12:28 +01:00
break ;
2024-07-15 05:58:04 +00:00
case 'vucc' :
2024-08-26 05:39:50 +00:00
$result = $this -> get_accumulated_vucc ( $band , $mode , $propmode , $period , $location_list );
2024-07-15 05:58:04 +00:00
break ;
2024-07-23 10:26:51 +00:00
case 'waja' :
2024-08-26 05:39:50 +00:00
$result = $this -> get_accumulated_waja ( $band , $mode , $propmode , $period , $location_list );
2024-07-23 10:26:51 +00:00
break ;
2020-10-06 21:12:14 +02:00
}
return $result ;
}
2024-08-26 05:39:50 +00:00
function get_accumulated_dxcc ( $band , $mode , $propmode , $period , $location_list ) {
2024-08-12 12:02:16 +00:00
$binding = [];
if ( $period == " year " ) {
$sql = " select year(thcv.col_time_on) year " ;
} else if ( $period == " month " ) {
$sql = " select date_format(col_time_on, '%Y-%m') year " ;
}
2020-10-04 21:41:01 +02:00
2024-08-12 12:02:16 +00:00
$sql .= " , coalesce(y.tot, 0) tot
from " . $this->config ->item('table_name') . " thcv
left outer join (
select count ( col_dxcc ) as tot , year
from ( select distinct " ;
2022-09-03 18:01:36 +02:00
2024-08-12 12:02:16 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) " ;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') " ;
}
2022-09-03 18:01:36 +02:00
2024-08-12 12:02:16 +00:00
$sql .= " year, col_dxcc
from " . $this->config ->item('table_name') .
" where col_dxcc > 0 and station_id in ( " . $location_list . " ) " ;
2022-09-03 18:01:36 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:02:16 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:02:16 +00:00
}
}
2020-10-04 21:41:01 +02:00
2024-08-26 05:39:50 +00:00
2024-08-12 12:02:16 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2020-10-08 11:45:41 +02:00
2024-08-12 12:02:16 +00:00
$sql .= " order by year
) x
where not exists ( select 1 from " . $this->config ->item('table_name') . " where " ;
2024-02-09 18:12:28 +01:00
2024-08-12 12:02:16 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) < year " ;;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') < year " ;;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:02:16 +00:00
$sql .= " and col_dxcc = x.col_dxcc " ;
2024-02-09 18:12:28 +01:00
2024-08-12 12:02:16 +00:00
if ( $band != 'All' ) {
if ( $band == 'SAT' ) {
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else {
$sql .= " and col_prop_mode !='SAT' " ;
$sql .= " and col_band = ? " ;
$binding [] = $band ;
}
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:02:16 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2020-10-08 11:45:41 +02:00
2024-08-12 12:02:16 +00:00
$sql .= " and station_id in ( " . $location_list . " ))
group by year
order by year " ;
2021-09-10 22:59:10 +02:00
2024-08-12 12:02:16 +00:00
if ( $period == " year " ) {
$sql .= " ) y on year(thcv.col_time_on) = y.year " ;
} else if ( $period == " month " ) {
$sql .= " ) y on date_format(col_time_on, '%Y-%m') = y.year " ;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:02:16 +00:00
$sql .= " where thcv.col_dxcc > 0 " ;
2022-09-03 18:01:36 +02:00
2024-08-12 12:02:16 +00:00
if ( $band != 'All' ) {
if ( $band == 'SAT' ) {
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else {
$sql .= " and col_prop_mode !='SAT' " ;
$sql .= " and col_band = ? " ;
$binding [] = $band ;
}
}
2022-09-03 18:01:36 +02:00
2024-08-12 12:02:16 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:02:16 +00:00
$sql .= " and station_id in ( " . $location_list . " ) " ;
2022-09-03 18:01:36 +02:00
2024-08-12 12:02:16 +00:00
if ( $period == " year " ) {
$sql .= " group by year(thcv.col_time_on), y.tot
order by year ( thcv . col_time_on ) " ;
} else if ( $period == " month " ) {
$sql .= " group by date_format(col_time_on, '%Y-%m'), y.tot
order by date_format ( col_time_on , '%Y-%m' ) " ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:02:16 +00:00
$query = $this -> db -> query ( $sql , $binding );
2020-10-06 21:12:14 +02:00
2024-08-12 12:02:16 +00:00
return $this -> count_and_add_accumulated_total ( $query -> result ());
2022-09-03 18:01:36 +02:00
}
2024-08-12 12:26:12 +00:00
function count_and_add_accumulated_total ( $array ) {
2022-09-03 18:01:36 +02:00
$counter = 0 ;
for ( $i = 0 ; $i < count ( $array ); $i ++ ) {
$array [ $i ] -> total = $array [ $i ] -> tot + $counter ;
$counter = $array [ $i ] -> total ;
}
return $array ;
2020-10-06 21:12:14 +02:00
}
2024-08-26 05:39:50 +00:00
function get_accumulated_waja ( $band , $mode , $propmode , $period , $location_list ) {
2024-08-12 12:26:12 +00:00
$binding = [];
2024-07-23 10:26:51 +00:00
if ( $period == " year " ) {
$sql = " select year(thcv.col_time_on) year " ;
} else if ( $period == " month " ) {
$sql = " select date_format(col_time_on, '%Y-%m') year " ;
}
$sql .= " , coalesce(y.tot, 0) tot
from " . $this->config ->item('table_name') . " thcv
left outer join (
select count ( col_state ) as tot , year
from ( select distinct " ;
if ( $period == " year " ) {
$sql .= " year(col_time_on) " ;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') " ;
}
$sql .= " year, col_state
from " . $this->config ->item('table_name') .
" where station_id in ( " . $location_list . " ) " ;
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-07-23 10:26:51 +00:00
}
}
if ( $mode != 'All' ) {
2024-08-12 12:26:12 +00:00
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
2024-07-23 10:26:51 +00:00
}
$sql .= " and COL_DXCC in ('339') and trim(coalesce(col_state,'')) != '' " ;
$sql .= " order by year
) x
where not exists ( select 1 from " . $this->config ->item('table_name') . " where " ;
if ( $period == " year " ) {
$sql .= " year(col_time_on) < year " ;;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') < year " ;;
}
$sql .= " and col_state = x.col_state " ;
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-07-23 10:26:51 +00:00
}
}
2024-08-26 05:39:50 +00:00
2024-07-23 10:26:51 +00:00
if ( $mode != 'All' ) {
2024-08-12 12:26:12 +00:00
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
2024-07-23 10:26:51 +00:00
}
$sql .= " and COL_DXCC in ('339') " ;
$sql .= " and station_id in ( " . $location_list . " ))
group by year
order by year " ;
if ( $period == " year " ) {
$sql .= " ) y on year(thcv.col_time_on) = y.year " ;
} else if ( $period == " month " ) {
$sql .= " ) y on date_format(col_time_on, '%Y-%m') = y.year " ;
}
$sql .= " where station_id in ( " . $location_list . " ) " ;
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-07-23 10:26:51 +00:00
}
}
if ( $mode != 'All' ) {
2024-08-12 12:26:12 +00:00
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
2024-07-23 10:26:51 +00:00
}
if ( $period == " year " ) {
$sql .= " group by year(thcv.col_time_on), y.tot
order by year ( thcv . col_time_on ) " ;
} else if ( $period == " month " ) {
$sql .= " group by date_format(col_time_on, '%Y-%m'), y.tot
order by date_format ( col_time_on , '%Y-%m' ) " ;
}
2024-08-12 12:26:12 +00:00
$query = $this -> db -> query ( $sql , $binding );
2024-07-23 10:26:51 +00:00
return $this -> count_and_add_accumulated_total ( $query -> result ());
}
2024-08-26 05:39:50 +00:00
function get_accumulated_was ( $band , $mode , $propmode , $period , $location_list ) {
2024-08-22 16:13:54 +02:00
$binding = [];
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql = " select year(thcv.col_time_on) year " ;
} else if ( $period == " month " ) {
$sql = " select date_format(col_time_on, '%Y-%m') year " ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " , coalesce(y.tot, 0) tot
from " . $this->config ->item('table_name') . " thcv
left outer join (
select count ( col_state ) as tot , year
from ( select distinct " ;
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) " ;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') " ;
}
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " year, col_state
from " . $this->config ->item('table_name') .
" where station_id in ( " . $location_list . " ) " ;
2020-10-06 21:12:14 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2020-10-08 11:45:41 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " and COL_DXCC in ('291', '6', '110') " ;
$sql .= " and COL_STATE in ('AK','AL','AR','AZ','CA','CO','CT','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY') " ;
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
$sql .= " order by year
) x
where not exists ( select 1 from " . $this->config ->item('table_name') . " where " ;
if ( $period == " year " ) {
$sql .= " year(col_time_on) < year " ;;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') < year " ;;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
$sql .= " and col_state = x.col_state " ;
2024-02-09 18:12:28 +01:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2020-10-08 11:45:41 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " and COL_DXCC in ('291', '6', '110') " ;
$sql .= " and COL_STATE in ('AK','AL','AR','AZ','CA','CO','CT','DE','FL','GA','HI','IA','ID','IL','IN','KS','KY','LA','MA','MD','ME','MI','MN','MO','MS','MT','NC','ND','NE','NH','NJ','NM','NV','NY','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VA','VT','WA','WI','WV','WY') " ;
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " and station_id in ( " . $location_list . " ))
group by year
order by year " ;
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " ) y on year(thcv.col_time_on) = y.year " ;
} else if ( $period == " month " ) {
$sql .= " ) y on date_format(col_time_on, '%Y-%m') = y.year " ;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
$sql .= " where station_id in ( " . $location_list . " ) " ;
2022-09-03 21:00:54 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " group by year(thcv.col_time_on), y.tot
order by year ( thcv . col_time_on ) " ;
} else if ( $period == " month " ) {
$sql .= " group by date_format(col_time_on, '%Y-%m'), y.tot
order by date_format ( col_time_on , '%Y-%m' ) " ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$query = $this -> db -> query ( $sql , $binding );
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
return $this -> count_and_add_accumulated_total ( $query -> result ());
2020-10-06 21:12:14 +02:00
}
2024-08-26 05:39:50 +00:00
function get_accumulated_iota ( $band , $mode , $propmode , $period , $location_list ) {
2024-08-12 12:26:12 +00:00
$binding = [];
if ( $period == " year " ) {
$sql = " select year(thcv.col_time_on) year " ;
} else if ( $period == " month " ) {
$sql = " select date_format(col_time_on, '%Y-%m') year " ;
}
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " , coalesce(y.tot, 0) tot
from " . $this->config ->item('table_name') . " thcv
left outer join (
select count ( col_iota ) as tot , year
from ( select distinct " ;
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) " ;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') " ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " year, col_iota
from " . $this->config ->item('table_name') .
" where station_id in ( " . $location_list . " ) " ;
2020-10-06 21:12:14 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2020-10-08 11:45:41 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
$sql .= " order by year
) x
where not exists ( select 1 from " . $this->config ->item('table_name') . " where " ;
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) < year " ;;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') < year " ;;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
$sql .= " and col_iota = x.col_iota " ;
2022-09-03 21:00:54 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " and station_id in ( " . $location_list . " ))
group by year
order by year " ;
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " ) y on year(thcv.col_time_on) = y.year " ;
} else if ( $period == " month " ) {
$sql .= " ) y on date_format(col_time_on, '%Y-%m') = y.year " ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " where station_id in ( " . $location_list . " ) " ;
2020-10-06 21:12:14 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " group by year(thcv.col_time_on), y.tot
order by year ( thcv . col_time_on ) " ;
} else if ( $period == " month " ) {
$sql .= " group by date_format(col_time_on, '%Y-%m'), y.tot
order by date_format ( col_time_on , '%Y-%m' ) " ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$query = $this -> db -> query ( $sql , $binding );
return $this -> count_and_add_accumulated_total ( $query -> result ());
2020-10-06 21:12:14 +02:00
}
2024-08-26 05:39:50 +00:00
function get_accumulated_waz ( $band , $mode , $propmode , $period , $location_list ) {
2024-08-12 12:26:12 +00:00
$binding = [];
if ( $period == " year " ) {
$sql = " select year(thcv.col_time_on) year " ;
} else if ( $period == " month " ) {
$sql = " select date_format(col_time_on, '%Y-%m') year " ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " , coalesce(y.tot, 0) tot
from " . $this->config ->item('table_name') . " thcv
left outer join (
select count ( col_cqz ) as tot , year
from ( select distinct " ;
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) " ;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') " ;
}
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " year, col_cqz
from " . $this->config ->item('table_name') .
" where station_id in ( " . $location_list . " ) " ;
2020-10-06 21:12:14 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2020-10-08 11:45:41 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
$sql .= " order by year
) x
where not exists ( select 1 from " . $this->config ->item('table_name') . " where " ;
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) < year " ;;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') < year " ;;
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
$sql .= " and col_cqz = x.col_cqz " ;
2022-09-03 21:00:54 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2022-09-03 21:00:54 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " and station_id in ( " . $location_list . " ))
group by year
order by year " ;
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " ) y on year(thcv.col_time_on) = y.year " ;
} else if ( $period == " month " ) {
$sql .= " ) y on date_format(col_time_on, '%Y-%m') = y.year " ;
}
2020-10-06 21:12:14 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " where station_id in ( " . $location_list . " ) " ;
2020-10-06 21:12:14 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2024-02-09 18:12:28 +01:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2020-10-04 21:41:01 +02:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " group by year(thcv.col_time_on), y.tot
order by year ( thcv . col_time_on ) " ;
} else if ( $period == " month " ) {
$sql .= " group by date_format(col_time_on, '%Y-%m'), y.tot
order by date_format ( col_time_on , '%Y-%m' ) " ;
}
2020-10-04 21:41:01 +02:00
2024-08-12 12:26:12 +00:00
$query = $this -> db -> query ( $sql , $binding );
return $this -> count_and_add_accumulated_total ( $query -> result ());
2020-10-04 21:41:01 +02:00
}
2024-07-15 05:58:04 +00:00
2024-08-26 05:39:50 +00:00
function get_accumulated_vucc ( $band , $mode , $propmode , $period , $location_list ) {
2024-07-16 09:27:43 +02:00
$dbversion = $this -> db -> version ();
$dbversion = explode ( '.' , $dbversion );
$sql = " " ;
if ( $dbversion [ 0 ] >= " 8 " ) {
2024-08-26 05:39:50 +00:00
$query = $this -> fastquery ( $band , $mode , $propmode , $period , $location_list );
2024-07-16 09:27:43 +02:00
return $query -> result ();
} else {
2024-08-26 05:39:50 +00:00
$query = $this -> slowquery ( $band , $mode , $propmode , $period , $location_list );
2024-07-16 09:27:43 +02:00
return $this -> count_and_add_accumulated_total ( $query -> result ());
}
}
2024-08-26 05:39:50 +00:00
function fastquery ( $band , $mode , $propmode , $period , $location_list ) {
2024-08-12 12:26:12 +00:00
$binding = [];
$sql = " WITH firstseen AS (
SELECT substr ( col_gridsquare , 1 , 4 ) as grid , " ;
2024-07-16 09:27:43 +02:00
2024-08-12 12:26:12 +00:00
if ( $period == " year " ) {
$sql .= " MIN(year(col_time_on)) year " ;
} else if ( $period == " month " ) {
$sql .= " MIN(date_format(col_time_on, '%Y-%m')) year " ;
}
2024-07-16 09:27:43 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " from " . $this -> config -> item ( 'table_name' ) . " thcv
where coalesce ( col_gridsquare , '' ) <> ''
and station_id in ( " . $location_list . " ) " ;
2024-07-16 09:27:43 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2024-07-16 09:27:43 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2024-07-16 20:05:09 +02:00
2024-08-12 12:26:12 +00:00
$sql .= " GROUP BY 1
union all
select substr ( grid , 1 , 4 ) as grid , year
from (
select TRIM ( SUBSTRING_INDEX ( SUBSTRING_INDEX ( COL_VUCC_GRIDS , ',' , x . x ), ',' , - 1 )) as grid , " ;
if ( $period == " year " ) {
$sql .= " MIN(year(col_time_on)) year " ;
} else if ( $period == " month " ) {
$sql .= " MIN(date_format(col_time_on, '%Y-%m')) year " ;
}
$sql .= " from " . $this -> config -> item ( 'table_name' ) . " thcv
cross join (
select 1 as x
union all
select 2
union all
select 3
union all
select 4 ) x
where
x . x <= length ( COL_VUCC_GRIDS ) - length ( replace ( COL_VUCC_GRIDS , ',' , '' )) + 1
and coalesce ( COL_VUCC_GRIDS , '' ) <> ''
and station_id in ( " . $location_list . " ) " ;
2024-07-16 20:05:09 +02:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:26:12 +00:00
$sql .= " and col_band = ? " ;
$binding [] = $band ;
2024-08-26 05:39:50 +00:00
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:26:12 +00:00
}
}
2024-07-16 20:05:09 +02:00
2024-08-12 12:26:12 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
$sql .= " GROUP BY 1) as z
2024-07-16 20:05:09 +02:00
)
2024-07-17 10:55:04 +02:00
, z as (
SELECT grid , row_number () OVER ( partition by grid ORDER BY grid asc , year asc ) as rn , year
FROM firstseen
) select DISTINCT COUNT ( grid ) OVER ( ORDER BY year ) as total , year from z where rn = 1
2024-08-12 12:26:12 +00:00
" ;
2024-07-16 09:27:43 +02:00
2024-08-12 12:26:12 +00:00
$query = $this -> db -> query ( $sql , $binding );
return $query ;
}
2024-07-16 09:27:43 +02:00
2024-08-26 05:39:50 +00:00
function slowquery ( $band , $mode , $propmode , $period , $location_list ) {
2024-08-12 12:26:12 +00:00
$binding = [];
2024-08-12 12:02:16 +00:00
$sql = " " ;
if ( $period == " year " ) {
$sql = " select year(thcv.col_time_on) year " ;
} else if ( $period == " month " ) {
$sql = " select date_format(col_time_on, '%Y-%m') year " ;
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
$sql .= " , coalesce(y.tot, 0) tot
from " . $this->config ->item('table_name') . " thcv
left outer join (
select count ( substr ( col_gridsquare , 1 , 4 )) as tot , year
from ( select distinct " ;
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) " ;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') " ;
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
$sql .= " year, substr(col_gridsquare,1,4) as col_gridsquare
from " . $this->config ->item('table_name') .
" where station_id in ( " . $location_list . " ) " ;
2024-07-15 05:58:04 +00:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:02:16 +00:00
$sql .= " and col_band = ? " ;
2024-08-26 05:39:50 +00:00
$binding [] = $band ;
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:02:16 +00:00
}
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
$sql .= " order by year
) x
where not exists ( select 1 from " . $this->config ->item('table_name') . " where " ;
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
if ( $period == " year " ) {
$sql .= " year(col_time_on) < year " ;;
} else if ( $period == " month " ) {
$sql .= " date_format(col_time_on, '%Y-%m') < year " ;;
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
$sql .= " and substr(col_gridsquare,1,4) = substr(x.col_gridsquare,1,4) " ;
2024-07-15 05:58:04 +00:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:02:16 +00:00
$sql .= " and col_band = ? " ;
2024-08-26 05:39:50 +00:00
$binding [] = $band ;
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:02:16 +00:00
}
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
$sql .= " and station_id in ( " . $location_list . " ))
group by year
order by year " ;
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
if ( $period == " year " ) {
$sql .= " ) y on year(thcv.col_time_on) = y.year " ;
} else if ( $period == " month " ) {
$sql .= " ) y on date_format(col_time_on, '%Y-%m') = y.year " ;
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
$sql .= " where station_id in ( " . $location_list . " ) " ;
2024-07-15 05:58:04 +00:00
2024-08-26 05:39:50 +00:00
if ( $band == 'SAT' ) { // Left for compatibility reasons
$sql .= " and col_prop_mode = ? " ;
$binding [] = $band ;
} else { // Not SAT
if ( $band != 'All' ) { // Band set? Take care of it
2024-08-12 12:02:16 +00:00
$sql .= " and col_band = ? " ;
2024-08-26 05:39:50 +00:00
$binding [] = $band ;
}
if ( $propmode == 'NoSAT' ) { // All without SAT
$sql .= " and col_prop_mode !='SAT' " ;
} elseif ( $propmode == 'None' ) { // Empty Propmode
$sql .= " and (trim(col_prop_mode)='' or col_prop_mode is null) " ;
} elseif ( $propmode == 'All' ) { // Dont care for propmode
; // No Prop-Filter
} else { // Propmode set, take care of it
$sql .= " and col_prop_mode = ? " ;
$binding [] = $propmode ;
2024-08-12 12:02:16 +00:00
}
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
if ( $mode != 'All' ) {
$sql .= " and (col_mode = ? or col_submode = ?) " ;
$binding [] = $mode ;
$binding [] = $mode ;
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:02:16 +00:00
if ( $period == " year " ) {
$sql .= " group by year(thcv.col_time_on), y.tot
order by year ( thcv . col_time_on ) " ;
} else if ( $period == " month " ) {
$sql .= " group by date_format(col_time_on, '%Y-%m'), y.tot
order by date_format ( col_time_on , '%Y-%m' ) " ;
}
2024-07-15 05:58:04 +00:00
2024-08-12 12:26:12 +00:00
$query = $this -> db -> query ( $sql , $binding );
return $query ;
2024-08-12 12:02:16 +00:00
}
2024-07-15 05:58:04 +00:00
2024-02-09 18:12:28 +01:00
}