Completed
Push — master ( 2b23bd...e29629 )
by Yannick
10:29
created

Spotter   D

Complexity

Total Complexity 1249

Size/Duplication

Total Lines 10225
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
dl 0
loc 10225
rs 4.4102
c 0
b 0
f 0
wmc 1249
lcom 1
cbo 7

221 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
F getFilter() 0 65 38
F getDataFromDB() 0 360 146
F searchSpotterData() 0 343 59
B getLatestSpotterData() 0 36 5
C getLatestSpotterForLayar() 0 65 17
B getNewestSpotterDataSortedByAircraftType() 0 37 5
B getNewestSpotterDataSortedByAircraftRegistration() 0 36 5
B getNewestSpotterDataSortedByAirline() 0 36 5
B getNewestSpotterDataSortedByDepartureAirport() 0 38 5
B getNewestSpotterDataSortedByArrivalAirport() 0 35 5
A getSpotterDataByID() 0 16 2
C getSpotterDataByIdent() 0 48 7
C getSpotterDataByAircraft() 0 50 7
C getSpotterDataByRegistration() 0 51 7
C getSpotterDataByAirline() 0 49 7
C getSpotterDataByAirport() 0 49 7
C getSpotterDataByDate() 0 59 9
C getSpotterDataByCountry() 0 50 7
C getSpotterDataByManufacturer() 0 50 7
C getSpotterDataByRoute() 0 64 9
B getSpotterDataByHighlight() 0 36 5
A getHighlightByRegistration() 0 18 3
A getSquawkUsage() 0 18 2
A getAirportIcao() 0 17 2
A getAirportDistance() 0 18 2
B getAllAirportInfo() 0 43 3
B getAllAirportInfobyCountry() 0 35 4
B getAllAirportInfobyCoord() 0 28 4
B getAllWaypointsInfobyCoord() 0 30 3
C getAllAirlineInfo() 0 58 11
B getAllAircraftInfo() 0 29 2
A getAircraftIcao() 0 22 3
A getAllAircraftType() 0 15 2
A getAllAircraftTypeByRegistration() 0 15 2
A getOperator() 0 14 2
A getRouteInfo() 0 15 3
B getAircraftInfoByRegistration() 0 24 2
A getAircraftOwnerByRegistration() 0 13 2
B getAllFlightsforSitemap() 0 27 1
B getAllManufacturers() 0 25 2
B getAllAircraftTypes() 0 31 2
A getAllAircraftRegistrations() 0 22 2
B getAllSourceName() 0 26 4
C getAllAirlineNames() 0 46 11
A getAllAirlineCountries() 0 23 2
B getAllAirportNames() 0 45 3
B getAllAirportCountries() 0 42 5
C getAllCountries() 0 71 9
A getAllIdents() 0 21 2
B getLast7DaysAirportsDeparture() 0 27 5
B getLast7DaysAirportsDepartureByAirlines() 0 26 5
B getLast7DaysDetectedAirportsDeparture() 0 34 5
B getLast7DaysDetectedAirportsDepartureByAirlines() 0 37 5
B getLast7DaysAirportsArrival() 0 28 5
B getLast7DaysDetectedAirportsArrival() 0 36 5
B getLast7DaysAirportsArrivalByAirlines() 0 27 5
B getLast7DaysDetectedAirportsArrivalByAirlines() 0 39 5
B getAllDates() 0 36 4
A getAllRoutes() 0 23 2
C updateIdentSpotterData() 0 39 8
A updateLatestSpotterData() 0 16 3
F addSpotterData() 0 306 99
B getIdentFromLastHour() 0 27 3
B getRealTimeData() 0 39 5
C countAllAirlines() 0 38 7
C countAllPilots() 0 40 7
C countAllPilotsByAirlines() 0 40 7
C countAllOwners() 0 38 7
C countAllOwnersByAirlines() 0 39 7
B countAllAirlinesByAircraft() 0 28 2
B countAllAirlineCountriesByAircraft() 0 26 2
B countAllAirlinesByAirport() 0 27 2
B countAllAirlineCountriesByAirport() 0 26 2
B countAllAirlinesByManufacturer() 0 26 2
B countAllAirlineCountriesByManufacturer() 0 25 2
B countAllAirlinesByDate() 0 40 4
B countAllAirlineCountriesByDate() 0 39 4
B countAllAirlinesByIdent() 0 27 2
B countAllAirlinesByRoute() 0 29 2
B countAllAirlineCountriesByRoute() 0 28 2
B countAllAirlinesByCountry() 0 26 2
B countAllAirlineCountriesByCountry() 0 25 2
A countAllAirlineCountries() 0 23 3
B countAllFlightOverCountries() 0 56 8
C countAllAircraftTypes() 0 40 7
C countAllAircraftTypesByAirlines() 0 40 7
C countAllAircraftTypesByMonths() 0 40 7
B countAllAircraftRegistrationByAircraft() 0 35 4
B countAllAircraftTypesByAirline() 0 25 2
B countAllAircraftRegistrationByAirline() 0 34 4
B countAllAircraftManufacturerByAirline() 0 24 2
B countAllAircraftTypesByAirport() 0 25 2
B countAllAircraftRegistrationByAirport() 0 33 4
A countAllAircraftManufacturerByAirport() 0 23 2
A countAllAircraftTypesByManufacturer() 0 23 2
B countAllAircraftRegistrationByManufacturer() 0 33 3
B countAllAircraftTypesByDate() 0 38 4
B countAllAircraftRegistrationByDate() 0 47 6
B countAllAircraftManufacturerByDate() 0 38 4
B countAllAircraftTypesByIdent() 0 25 2
B countAllAircraftRegistrationByIdent() 0 36 4
A countAllAircraftManufacturerByIdent() 0 22 2
B countAllAircraftTypesByRoute() 0 26 2
B countAllAircraftRegistrationByRoute() 0 38 4
B countAllAircraftManufacturerByRoute() 0 28 2
B countAllAircraftTypesByCountry() 0 27 2
B countAllAircraftRegistrationByCountry() 0 36 4
B countAllAircraftManufacturerByCountry() 0 26 2
B countAllAircraftManufacturers() 0 26 2
C countAllAircraftRegistrations() 0 52 9
C countAllAircraftRegistrationsByAirlines() 0 53 9
C countAllDepartureAirports() 0 45 7
C countAllDepartureAirportsByAirlines() 0 46 7
C countAllDetectedDepartureAirports() 0 44 7
C countAllDetectedDepartureAirportsByAirlines() 0 46 7
B countAllDepartureAirportsByAirline() 0 29 2
B countAllDepartureAirportCountriesByAirline() 0 26 2
B countAllDepartureAirportsByAircraft() 0 29 2
B countAllDepartureAirportCountriesByAircraft() 0 26 2
B countAllDepartureAirportsByRegistration() 0 29 2
B countAllDepartureAirportCountriesByRegistration() 0 26 2
B countAllDepartureAirportsByAirport() 0 29 2
B countAllDepartureAirportCountriesByAirport() 0 26 2
B countAllDepartureAirportsByManufacturer() 0 29 2
B countAllDepartureAirportCountriesByManufacturer() 0 26 2
B countAllDepartureAirportsByDate() 0 41 4
B countAllDepartureAirportCountriesByDate() 0 38 4
B countAllDepartureAirportsByIdent() 0 29 2
B countAllDepartureAirportCountriesByIdent() 0 26 2
B countAllDepartureAirportsByCountry() 0 30 2
B countAllDepartureAirportCountriesByCountry() 0 26 2
C countAllArrivalAirports() 0 50 8
C countAllArrivalAirportsByAirlines() 0 51 8
C countAllDetectedArrivalAirports() 0 49 8
C countAllDetectedArrivalAirportsByAirlines() 0 51 8
B countAllArrivalAirportsByAirline() 0 28 2
B countAllArrivalAirportCountriesByAirline() 0 27 2
B countAllArrivalAirportsByAircraft() 0 29 2
B countAllArrivalAirportCountriesByAircraft() 0 26 2
B countAllArrivalAirportsByRegistration() 0 30 2
B countAllArrivalAirportCountriesByRegistration() 0 26 2
B countAllArrivalAirportsByAirport() 0 29 2
B countAllArrivalAirportCountriesByAirport() 0 26 2
B countAllArrivalAirportsByManufacturer() 0 29 2
B countAllArrivalAirportCountriesByManufacturer() 0 26 2
B countAllArrivalAirportsByDate() 0 41 4
B countAllArrivalAirportCountriesByDate() 0 38 4
B countAllArrivalAirportsByIdent() 0 29 2
B countAllArrivalAirportCountriesByIdent() 0 26 2
B countAllArrivalAirportsByCountry() 0 29 2
B countAllArrivalAirportCountriesByCountry() 0 26 2
B countAllDepartureCountries() 0 26 2
B countAllArrivalCountries() 0 26 3
B countAllRoutes() 0 33 2
B countAllRoutesByAircraft() 0 32 2
B countAllRoutesByRegistration() 0 33 2
B countAllRoutesByAirline() 0 33 2
B countAllRoutesByAirport() 0 32 2
B countAllRoutesByCountry() 0 32 2
B countAllRoutesByDate() 0 46 4
B countAllRoutesByIdent() 0 33 2
B countAllRoutesByManufacturer() 0 33 2
B countAllRoutesWithWaypoints() 0 34 2
C countAllCallsigns() 0 35 7
C countAllCallsignsByAirlines() 0 35 7
B countAllDates() 0 42 4
B countAllDatesByAirlines() 0 42 4
B countAllDatesLast7Days() 0 39 4
B countAllDatesLastMonth() 0 39 4
B countAllDatesLastMonthByAirlines() 0 41 4
B countAllMonths() 0 39 4
B countAllMonthsByAirlines() 0 42 4
B countAllMilitaryMonths() 0 38 4
B countAllMonthsOwners() 0 39 4
B countAllMonthsOwnersByAirlines() 0 40 4
B countAllMonthsPilots() 0 39 4
B countAllMonthsPilotsByAirlines() 0 40 4
B countAllMonthsAirlines() 0 39 4
B countAllMonthsAircrafts() 0 39 4
B countAllMonthsAircraftsByAirlines() 0 40 4
B countAllMonthsRealArrivals() 0 39 4
B countAllMonthsRealArrivalsByAirlines() 0 40 4
B countAllMonthsLastYear() 0 40 4
B countAllHours() 0 58 6
B countAllHoursByAirlines() 0 58 6
B countAllHoursByAirline() 0 40 4
B countAllHoursByAircraft() 0 39 4
B countAllHoursByRegistration() 0 39 4
B countAllHoursByAirport() 0 39 4
B countAllHoursByManufacturer() 0 39 4
B countAllHoursByDate() 0 39 4
B countAllHoursByIdent() 0 40 4
B countAllHoursByRoute() 0 40 4
B countAllHoursByCountry() 0 39 4
A countOverallAircrafts() 0 9 1
A countOverallArrival() 0 10 1
A countOverallPilots() 0 9 1
A countOverallOwners() 0 9 1
A countOverallFlights() 0 10 1
A countOverallMilitaryFlights() 0 10 1
A countOverallAirlines() 0 10 1
B countAllHoursFromToday() 0 37 4
C getUpcomingFlights() 0 72 9
A getSpotterIDBasedOnFlightAwareID() 0 17 2
B parseDateString() 0 30 2
C parseDirection() 0 75 35
B getAircraftRegistration() 0 24 2
A getAircraftRegistrationBymodeS() 0 17 2
A getAircraftTypeBymodeS() 0 17 3
B getCountryFromLatitudeLongitude() 0 34 6
B getCountryFromISO2() 0 25 6
C convertAircraftRegistration() 0 49 8
B countryFromAircraftRegistration() 0 53 6
A countryFromAircraftRegistrationCode() 0 14 2
A setHighlightFlight() 0 6 1
A getBitlyURL() 0 23 3
A getOrderBy() 0 7 1
F updateFieldsFromOtherTables() 0 86 29
D updateArrivalAirports() 0 41 22
A closestAirports() 0 21 2

How to fix   Complexity   

Complex Class

Complex classes like Spotter often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Spotter, and based on these observations, apply Extract Interface, too.

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $db;
9
	
10
	public function __construct($dbc = null) {
11
		$Connection = new Connection($dbc);
12
		$this->db = $Connection->db();
13
	}
14
15
	/**
16
	* Get SQL query part for filter used
17
	* @param Array $filter the filter
18
	* @return Array the SQL part
19
	*/
20
	public function getFilter($filter = array(),$where = false,$and = false) {
21
		global $globalFilter, $globalStatsFilters, $globalFilterName;
22
		$filters = array();
23
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
24
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
25
				$filters = $globalStatsFilters[$globalFilterName];
26
			} else {
27
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
28
			}
29
		}
30
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
31
		$filter_query_join = '';
32
		$filter_query_where = '';
33
		foreach($filters as $flt) {
34
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
35
				if ($flt['airlines'][0] != '') {
36
					if (isset($flt['source'])) {
37
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
38
					} else {
39
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
40
					}
41
				}
42
			}
43
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
44
				if (isset($flt['source'])) {
45
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
46
				} else {
47
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
48
				}
49
			}
50
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']))) {
51
				if (isset($flt['source'])) {
52
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
53
				}
54
			}
55
		}
56
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
57
			if ($filter['airlines'][0] != '') {
58
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
59
			}
60
		}
61
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
62
			$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_output.flightaware_id ";
63
		}
64
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
65
				$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
66
			}
67
		if (isset($filter['source']) && !empty($filter['source'])) {
68
			$filter_query_where = " WHERE format_source IN ('".implode("','",$filter['source'])."')";
69
		}
70
		if (isset($filter['ident']) && !empty($filter['ident'])) {
71
			$filter_query_where = " WHERE ident = '".$filter['ident']."'";
72
		}
73
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
74
			if ($filter_query_where == '') {
75
				$filter_query_where = " WHERE format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
76
			} else {
77
				$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
78
			}
79
		}
80
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
81
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
82
		$filter_query = $filter_query_join.$filter_query_where;
83
		return $filter_query;
84
	}
85
86
	/**
87
	* Executes the SQL statements to get the spotter information
88
	*
89
	* @param String $query the SQL query
90
	* @param Array $params parameter of the query
91
	* @param String $limitQuery the limit query
92
	* @return Array the spotter information
93
	*
94
	*/
95
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
96
	{
97
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
98
		$Image = new Image($this->db);
99
		$Schedule = new Schedule($this->db);
100
		$ACARS = new ACARS($this->db);
101
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
102
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
103
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
104
		if (!isset($globalVAM)) $globalVAM = FALSE;
105
		date_default_timezone_set('UTC');
106
		
107
		if (!is_string($query))
108
		{
109
			return false;
110
		}
111
		
112
		if ($limitQuery != "")
113
		{
114
			if (!is_string($limitQuery))
115
			{
116
				return false;
117
			}
118
		}
119
120
		
121
		try {
122
			$sth = $this->db->prepare($query.$limitQuery);
123
			$sth->execute($params);
124
		} catch (PDOException $e) {
125
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
126
			exit();
127
		}
128
		
129
	//	$num_rows = count($sth->fetchAll());
130
		$num_rows = 0;
131
132
		$spotter_array = array();
133
		
134
135
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
136
		{
137
			$num_rows++;
138
			$temp_array = array();
139
			if (isset($row['spotter_live_id'])) {
140
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
141
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
142
			} elseif (isset($row['spotter_archive_id'])) {
143
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
144
			} elseif (isset($row['spotter_archive_output_id'])) {
145
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
146
			} elseif (isset($row['spotter_id'])) {
147
				$temp_array['spotter_id'] = $row['spotter_id'];
148
			} else {
149
				$temp_array['spotter_id'] = '';
150
			}
151
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
152
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
153
			$temp_array['ident'] = $row['ident'];
154
			if (isset($row['registration']) && $row['registration'] != '') {
155
				$temp_array['registration'] = $row['registration'];
156
			} elseif (isset($temp_array['modes'])) {
157
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
158
			} else $temp_array['registration'] = '';
159
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
160
			
161
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
162
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
163
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
164
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
165
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
166
			/*
167
			if (Connection->tableExists('countries')) {
168
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
169
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
170
				    $temp_array['country'] = $country_info['name'];
171
				    $temp_array['country_iso2'] = $country_info['iso2'];
172
				}
173
			}
174
			*/
175
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
176
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
177
			if (isset($row['route_stop'])) {
178
				$temp_array['route_stop'] = $row['route_stop'];
179
				if ($row['route_stop'] != '') {
180
					$allroute = explode(' ',$row['route_stop']);
181
			
182
					foreach ($allroute as $route) {
183
						$route_airport_array = $this->getAllAirportInfo($route);
184
						if (isset($route_airport_array[0]['name'])) {
185
							$route_stop_details = array();
186
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
187
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
188
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
189
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
190
							$temp_array['route_stop_details'][] = $route_stop_details;
191
						}
192
					}
193
				}
194
			}
195
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
196
			if (isset($row['heading'])) {
197
				$temp_array['heading'] = $row['heading'];
198
				$heading_direction = $this->parseDirection($row['heading']);
199
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
200
			}
201
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
202
			$temp_array['image'] = "";
203
			$temp_array['image_thumbnail'] = "";
204
			$temp_array['image_source'] = "";
205
			$temp_array['image_copyright'] = "";
206
 
207
			if (isset($row['highlight'])) {
208
				$temp_array['highlight'] = $row['highlight'];
209
			} else $temp_array['highlight'] = '';
210
			
211
			if (isset($row['date'])) {
212
				$dateArray = $this->parseDateString($row['date']);
213
				if ($dateArray['seconds'] < 10)
214
				{
215
					$temp_array['date'] = "a few seconds ago";
216
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
217
				{
218
					$temp_array['date'] = "half a minute ago";
219
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
220
				{
221
					$temp_array['date'] = "about a minute ago";
222
				} elseif ($dateArray['minutes'] < 5)
223
				{
224
					$temp_array['date'] = "a few minutes ago";
225
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
226
				{
227
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
228
				} elseif ($dateArray['hours'] < 2)
229
				{
230
					$temp_array['date'] = "about an hour ago";
231
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
232
				{
233
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
234
				} else {
235
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
236
				}
237
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
238
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
239
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
240
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
241
			}
242
			
243
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
244
				$temp_array['aircraft_name'] = $row['aircraft_name'];
245
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
246
				if (isset($row['aircraft_shadow'])) {
247
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
248
				}
249
			} elseif (isset($row['aircraft_icao'])) {
250
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
251
				if (count($aircraft_array) > 0) {
252
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
253
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
254
				
255
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
256
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
257
					} else $temp_array['aircraft_shadow'] = 'default.png';
258
                                } else {
259
                            		$temp_array['aircraft_shadow'] = 'default.png';
260
					$temp_array['aircraft_name'] = 'N/A';
261
					$temp_array['aircraft_manufacturer'] = 'N/A';
262
                            	}
263
			}
264
			$fromsource = NULL;
265
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
266
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
267
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
268
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
269
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
270
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
271
				if (!is_numeric(substr($row['ident'], 0, 3))) {
272
					if (is_numeric(substr($row['ident'], 2, 1))) {
273
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
274
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
275
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
276
					} else {
277
						$airline_array = $this->getAllAirlineInfo('NA');
278
					}
279
				} else {
280
					$airline_array = $this->getAllAirlineInfo('NA');
281
				}
282
				if (count($airline_array) > 0) {
283
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
284
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
285
					$temp_array['airline_name'] = $airline_array[0]['name'];
286
					$temp_array['airline_country'] = $airline_array[0]['country'];
287
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
288
					$temp_array['airline_type'] = $airline_array[0]['type'];
289
				}
290
			} else {
291
				$temp_array['airline_icao'] = $row['airline_icao'];
292
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
293
				else $temp_array['airline_iata'] = 'N/A';
294
				$temp_array['airline_name'] = $row['airline_name'];
295
				$temp_array['airline_country'] = $row['airline_country'];
296
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
297
				else $temp_array['airline_callsign'] = 'N/A';
298
				$temp_array['airline_type'] = $row['airline_type'];
299
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
300
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
301
					if (count($airline_array) > 0) {
302
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
303
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
304
						$temp_array['airline_name'] = $airline_array[0]['name'];
305
						$temp_array['airline_country'] = $airline_array[0]['country'];
306
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
307
						$temp_array['airline_type'] = $airline_array[0]['type'];
308
					}
309
				}
310
			}
311
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
312
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
313
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
314
				if (count($acars_array) > 0) {
315
					$temp_array['acars'] = $acars_array;
316
					//print_r($acars_array);
317
				}
318
			}
319
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
320
				$temp_array['aircraft_owner'] = $row['owner_name'];
321
			}
322
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
323
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
324
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
325
				$temp_array['aircraft_base'] = $owner_info['base'];
326
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
327
			}
328
329
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
330
			{
331
				if ($globalIVAO) {
332
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
333
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
334
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
335
				if (count($image_array) > 0) {
336
					$temp_array['image'] = $image_array[0]['image'];
337
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
338
					$temp_array['image_source'] = $image_array[0]['image_source'];
339
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
340
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
341
						$planespotter_url_array = explode("_", $temp_array['image']);
342
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
343
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
344
					 }
345
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
346
				}
347
			}
348
349
350
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
351
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
352
			}
353
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
354
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
355
			}
356
			
357
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
358
				if ($schedules === true) {
359
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
360
					//print_r($schedule_array);
361
					if (count($schedule_array) > 0) {
362
						if ($schedule_array['departure_airport_icao'] != '') {
363
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
364
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
365
						}
366
						if ($schedule_array['arrival_airport_icao'] != '') {
367
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
368
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
369
						}
370
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
371
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
372
					}
373
				}
374
			} else {
375
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
376
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
377
				}
378
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
379
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
380
				}
381
			}
382
			
383
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
384
			if ($row['departure_airport_icao'] != '') {
385
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
386
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
387
			/*
388
			} elseif ($row['departure_airport_name'] != '') {
389
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
390
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
391
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
392
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
393
			*/
394
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
395
			if (isset($departure_airport_array[0]['name'])) {
396
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
397
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
398
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
399
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
400
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
401
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
402
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
403
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
404
			}
405
406
			/*
407
			if (isset($row['departure_airport_time'])) {
408
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
409
			}
410
			*/
411
			
412
			if ($row['arrival_airport_icao'] != '') {
413
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
414
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
415
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
416
			if (isset($arrival_airport_array[0]['name'])) {
417
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
418
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
419
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
420
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
421
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
422
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
423
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
424
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
425
			}
426
			/*
427
			if (isset($row['arrival_airport_time'])) {
428
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
429
			}
430
			*/
431
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
432
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
433
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
434
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
435
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
436
			if (isset($row['squawk'])) {
437
				$temp_array['squawk'] = $row['squawk'];
438
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
439
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
440
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
441
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
442
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
443
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
444
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
445
			}
446
    			
447
			$temp_array['query_number_rows'] = $num_rows;
448
			
449
			$spotter_array[] = $temp_array;
450
		}
451
		if ($num_rows == 0) return array();
452
		$spotter_array[0]['query_number_rows'] = $num_rows;
453
		return $spotter_array;
454
	}	
455
	
456
	
457
	/**
458
	* Gets all the spotter information
459
	*
460
	* @return Array the spotter information
461
	*
462
	*/
463
	public function searchSpotterData($q = '', $registration = '', $aircraft_icao = '', $aircraft_manufacturer = '', $highlights = '', $airline_icao = '', $airline_country = '', $airline_type = '', $airport = '', $airport_country = '', $callsign = '', $departure_airport_route = '', $arrival_airport_route = '', $owner = '',$pilot_id = '',$pilot_name = '',$altitude = '', $date_posted = '', $limit = '', $sort = '', $includegeodata = '',$origLat = '',$origLon = '',$dist = '',$filters = array())
464
	{
465
		global $globalTimezone, $globalDBdriver;
466
		require_once(dirname(__FILE__).'/class.Translation.php');
467
		$Translation = new Translation();
468
469
		date_default_timezone_set('UTC');
470
471
		$query_values = array();
472
		$additional_query = '';
473
		$filter_query = $this->getFilter($filters,true,true);
474
		if ($q != "")
475
		{
476
			if (!is_string($q))
477
			{
478
				return false;
479
			} else {
480
				$q_array = explode(" ", $q);
481
				foreach ($q_array as $q_item){
482
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
483
					$additional_query .= " AND (";
484
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
485
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
486
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
487
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
488
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
489
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
490
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
491
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
492
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
493
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
494
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
495
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
496
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
497
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
498
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
499
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
500
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
501
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
502
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
503
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
504
					$translate = $Translation->ident2icao($q_item);
505
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
506
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
507
					$additional_query .= ")";
508
				}
509
			}
510
		}
511
512
		if ($registration != "")
513
		{
514
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
515
			if (!is_string($registration))
516
			{
517
				return false;
518
			} else {
519
				$additional_query .= " AND spotter_output.registration = :registration";
520
				$query_values = array_merge($query_values,array(':registration' => $registration));
521
			}
522
		}
523
524
		if ($aircraft_icao != "")
525
		{
526
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
527
			if (!is_string($aircraft_icao))
528
			{
529
				return false;
530
			} else {
531
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
532
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
533
			}
534
		}
535
536
		if ($aircraft_manufacturer != "")
537
		{
538
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
539
			if (!is_string($aircraft_manufacturer))
540
			{
541
				return false;
542
			} else {
543
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
544
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
545
			}
546
		}
547
548
		if ($highlights == "true")
549
		{
550
			if (!is_string($highlights))
551
			{
552
				return false;
553
			} else {
554
				$additional_query .= " AND (spotter_output.highlight <> '')";
555
			}
556
		}
557
558
		if ($airline_icao != "")
559
		{
560
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
561
			if (!is_string($airline_icao))
562
			{
563
				return false;
564
			} else {
565
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
566
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
567
			}
568
		}
569
570
		if ($airline_country != "")
571
		{
572
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
573
			if (!is_string($airline_country))
574
			{
575
				return false;
576
			} else {
577
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
578
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
579
			}
580
		}
581
582
		if ($airline_type != "")
583
		{
584
			if (!is_string($airline_type))
585
			{
586
				return false;
587
			} else {
588
				if ($airline_type == "passenger")
589
				{
590
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
591
				}
592
				if ($airline_type == "cargo")
593
				{
594
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
595
				}
596
				if ($airline_type == "military")
597
				{
598
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
599
				}
600
			}
601
		}
602
603
		if ($airport != "")
604
		{
605
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
606
			if (!is_string($airport))
607
			{
608
				return false;
609
			} else {
610
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
611
				$query_values = array_merge($query_values,array(':airport' => $airport));
612
			}
613
		}
614
615
		if ($airport_country != "")
616
		{
617
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
618
			if (!is_string($airport_country))
619
			{
620
				return false;
621
			} else {
622
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
623
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
624
			}
625
		}
626
    
627
		if ($callsign != "")
628
		{
629
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
630
			if (!is_string($callsign))
631
			{
632
				return false;
633
			} else {
634
				$translate = $Translation->ident2icao($callsign);
635
				if ($translate != $callsign) {
636
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
637
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
638
				} else {
639
					$additional_query .= " AND spotter_output.ident = :callsign";
640
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
641
				}
642
			}
643
		}
644
645
		if ($owner != "")
646
		{
647
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
648
			if (!is_string($owner))
649
			{
650
				return false;
651
			} else {
652
				$additional_query .= " AND spotter_output.owner_name = :owner";
653
				$query_values = array_merge($query_values,array(':owner' => $owner));
654
			}
655
		}
656
657
		if ($pilot_name != "")
658
		{
659
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
660
			if (!is_string($pilot_name))
661
			{
662
				return false;
663
			} else {
664
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
665
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
666
			}
667
		}
668
669
		if ($pilot_id != "")
670
		{
671
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
672
			if (!is_string($pilot_id))
673
			{
674
				return false;
675
			} else {
676
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
677
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
678
			}
679
		}
680
681
		if ($departure_airport_route != "")
682
		{
683
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
684
			if (!is_string($departure_airport_route))
685
			{
686
				return false;
687
			} else {
688
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
689
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
690
			}
691
		}
692
693
		if ($arrival_airport_route != "")
694
		{
695
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
696
			if (!is_string($arrival_airport_route))
697
			{
698
				return false;
699
			} else {
700
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
701
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
702
			}
703
		}
704
705
		if ($altitude != "")
706
		{
707
			$altitude_array = explode(",", $altitude);
708
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
709
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
710
711
			if ($altitude_array[1] != "")
712
			{                
713
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
714
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
715
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
716
			} else {
717
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
718
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
719
			}
720
		}
721
722
		if ($date_posted != "")
723
		{
724
			$date_array = explode(",", $date_posted);
725
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
726
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
727
728
			if ($globalTimezone != '') {
729
				date_default_timezone_set($globalTimezone);
730
				$datetime = new DateTime();
731
				$offset = $datetime->format('P');
732
			} else $offset = '+00:00';
733
734
			if ($date_array[1] != "")
735
			{
736
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
737
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
738
				if ($globalDBdriver == 'mysql') {
739
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) <= '".$date_array[1]."' ";
740
				} else {
741
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) <= '".$date_array[1]."' ";
742
				}
743
			} else {
744
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
745
				if ($globalDBdriver == 'mysql') {
746
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
747
				} else {
748
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
749
				}
750
			}
751
		}
752
753
		if ($limit != "")
754
		{
755
			$limit_array = explode(",", $limit);
756
			
757
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
758
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
759
			
760
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
761
			{
762
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
763
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
764
			} else $limit_query = "";
765
		} else $limit_query = "";
766
767
768
		if ($sort != "")
769
		{
770
			$search_orderby_array = $this->getOrderBy();
771
			$orderby_query = $search_orderby_array[$sort]['sql'];
772
		} else {
773
			if ($origLat != "" && $origLon != "" && $dist != "") {
774
				$orderby_query = " ORDER BY distance ASC";
775
			} else {
776
				$orderby_query = " ORDER BY spotter_output.date DESC";
777
			}
778
		}
779
780
		if ($includegeodata == "true")
781
		{
782
			$additional_query .= " AND spotter_output.waypoints <> ''";
783
		}
784
785
786
		if ($origLat != "" && $origLon != "" && $dist != "") {
787
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
788
789
			if ($globalDBdriver == 'mysql') {
790
				$query="SELECT spotter_output.*, 1.60935*3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - spotter_archive.latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(spotter_archive.latitude*pi()/180)*POWER(SIN(($origLon-spotter_archive.longitude)*pi()/180/2),2))) as distance 
791
						FROM spotter_archive,spotter_output".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND spotter_archive.longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and spotter_archive.latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
792
						AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - spotter_archive.latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(spotter_archive.latitude*pi()/180)*POWER(SIN(($origLon-spotter_archive.longitude)*pi()/180/2),2)))) < $dist".$orderby_query;
793
			} else {
794
				$query="SELECT spotter_output.*, 1.60935 * 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(spotter_archive.latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(spotter_archive.latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2))) as distance 
795
						FROM spotter_archive,spotter_output".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND CAST(spotter_archive.longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(spotter_archive.latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
796
						AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(spotter_archive.latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(spotter_archive.latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2)))) < $dist".$filter_query.$orderby_query;
797
			}
798
		} else {		
799
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
800
					".$additional_query."
801
					".$orderby_query;
802
		}
803
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
804
		return $spotter_array;
805
	}
806
	
807
	
808
	/**
809
	* Gets all the spotter information based on the latest data entry
810
	*
811
	* @return Array the spotter information
812
	*
813
	*/
814
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
815
	{
816
		global $global_query;
817
		
818
		date_default_timezone_set('UTC');
819
820
		$filter_query = $this->getFilter($filter);
821
		
822
		if ($limit != "")
823
		{
824
			$limit_array = explode(",", $limit);
825
			
826
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
827
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
828
			
829
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
830
			{
831
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
832
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
833
			} else $limit_query = "";
834
		} else $limit_query = "";
835
		
836
		if ($sort != "")
837
		{
838
			$search_orderby_array = $this->getOrderBy();
839
			$orderby_query = $search_orderby_array[$sort]['sql'];
840
		} else {
841
			$orderby_query = " ORDER BY spotter_output.date DESC";
842
		}
843
844
		$query  = $global_query.$filter_query." ".$orderby_query;
845
846
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
847
848
		return $spotter_array;
849
	}
850
    
851
    
852
    /**
853
	* Gets all the spotter information based on a user's latitude and longitude
854
	*
855
	* @return Array the spotter information
856
	*
857
	*/
858
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
859
	{
860
		date_default_timezone_set('UTC');
861
		$limit_query = '';
862
		if ($lat != "")
863
		{
864
			if (!is_numeric($lat))
865
			{
866
				return false;
867
			}
868
		}
869
        
870
		if ($lng != "")
871
		{
872
			if (!is_numeric($lng))
873
			{
874
				return false;
875
			}
876
		}
877
		
878
		if ($radius != "")
879
		{
880
			if (!is_numeric($radius))
881
			{
882
				return false;
883
			}
884
		}
885
    		$additional_query = '';
886
		if ($interval != "")
887
		{
888
			if (!is_string($interval))
889
			{
890
				return false;
891
			} else {
892
				if ($interval == "30m"){
893
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
894
				} else if ($interval == "1h"){
895
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
896
				} else if ($interval == "3h"){
897
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
898
				} else if ($interval == "6h"){
899
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
900
				} else if ($interval == "12h"){
901
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
902
				} else if ($interval == "24h"){
903
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
904
				} else if ($interval == "7d"){
905
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
906
				} else if ($interval == "30d"){
907
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
908
				} 
909
			}
910
		}
911
912
		$query  = "SELECT spotter_output.*, ( 6371 * acos( cos( radians($lat) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( latitude ) ) ) ) AS distance FROM spotter_output 
913
                   WHERE spotter_output.latitude <> '' 
914
				   AND spotter_output.longitude <> '' 
915
                   ".$additional_query."
916
                   HAVING distance < :radius  
917
				   ORDER BY distance";
918
919
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
920
921
		return $spotter_array;
922
	}
923
    
924
    
925
    /**
926
	* Gets all the spotter information sorted by the newest aircraft type
927
	*
928
	* @return Array the spotter information
929
	*
930
	*/
931
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
932
	{
933
		global $global_query;
934
		
935
		date_default_timezone_set('UTC');
936
937
		$filter_query = $this->getFilter($filter,true,true);
938
939
		$limit_query = '';
940
		if ($limit != "")
941
		{
942
			$limit_array = explode(",", $limit);
943
			
944
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
945
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
946
			
947
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
948
			{
949
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
950
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
951
			}
952
		}
953
		
954
		if ($sort != "")
955
		{
956
			$search_orderby_array = $this->getOrderBy();
957
			$orderby_query = $search_orderby_array[$sort]['sql'];
958
		} else {
959
			$orderby_query = " ORDER BY spotter_output.date DESC ";
960
		}
961
962
		$query  = $global_query." ".$filter_query." spotter_output.aircraft_name <> '' GROUP BY spotter_output.aircraft_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
963
964
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
965
966
		return $spotter_array;
967
	}
968
    
969
    
970
	/**
971
	* Gets all the spotter information sorted by the newest aircraft registration
972
	*
973
	* @return Array the spotter information
974
	*
975
	*/
976
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
977
	{
978
		global $global_query;
979
		
980
		date_default_timezone_set('UTC');
981
		$filter_query = $this->getFilter($filter,true,true);
982
983
		$limit_query = '';
984
		if ($limit != "")
985
		{
986
			$limit_array = explode(",", $limit);
987
			
988
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
989
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
990
			
991
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
992
			{
993
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
994
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
995
			}
996
		}
997
		
998
		if ($sort != "")
999
		{
1000
			$search_orderby_array = $this->getOrderBy();
1001
			$orderby_query = $search_orderby_array[$sort]['sql'];
1002
		} else {
1003
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1004
		}
1005
1006
		$query  = $global_query." ".$filter_query." spotter_output.registration <> '' GROUP BY spotter_output.registration,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1007
1008
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1009
1010
		return $spotter_array;
1011
	}
1012
1013
1014
	/**
1015
	* Gets all the spotter information sorted by the newest airline
1016
	*
1017
	* @return Array the spotter information
1018
	*
1019
	*/
1020
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1021
	{
1022
		global $global_query;
1023
		
1024
		date_default_timezone_set('UTC');
1025
		$filter_query = $this->getFilter($filter,true,true);
1026
		
1027
		$limit_query = '';
1028
		if ($limit != "")
1029
		{
1030
			$limit_array = explode(",", $limit);
1031
			
1032
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1033
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1034
			
1035
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1036
			{
1037
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1038
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1039
			}
1040
		}
1041
		
1042
		if ($sort != "")
1043
		{
1044
			$search_orderby_array = $this->getOrderBy();
1045
			$orderby_query = $search_orderby_array[$sort]['sql'];
1046
		} else {
1047
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1048
		}
1049
1050
		$query  = $global_query." ".$filter_query." spotter_output.airline_name <> '' GROUP BY spotter_output.airline_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1051
1052
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1053
1054
		return $spotter_array;
1055
	}
1056
    
1057
    
1058
    /**
1059
	* Gets all the spotter information sorted by the newest departure airport
1060
	*
1061
	* @return Array the spotter information
1062
	*
1063
	*/
1064
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1065
	{
1066
		global $global_query;
1067
		
1068
		date_default_timezone_set('UTC');
1069
		
1070
		$filter_query = $this->getFilter($filter,true,true);
1071
		
1072
		$limit_query = '';
1073
		
1074
		if ($limit != "")
1075
		{
1076
			$limit_array = explode(",", $limit);
1077
			
1078
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1079
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1080
			
1081
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1082
			{
1083
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1084
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1085
			}
1086
		}
1087
		
1088
		if ($sort != "")
1089
		{
1090
			$search_orderby_array = $this->getOrderBy();
1091
			$orderby_query = $search_orderby_array[$sort]['sql'];
1092
		} else {
1093
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1094
		}
1095
1096
		$query  = $global_query." ".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' GROUP BY spotter_output.departure_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1097
1098
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1099
1100
		return $spotter_array;
1101
	}
1102
1103
1104
	/**
1105
	* Gets all the spotter information sorted by the newest arrival airport
1106
	*
1107
	* @return Array the spotter information
1108
	*
1109
	*/
1110
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1111
	{
1112
		global $global_query;
1113
		
1114
		date_default_timezone_set('UTC');
1115
		$filter_query = $this->getFilter($filter,true,true);
1116
		$limit_query = '';
1117
		if ($limit != "")
1118
		{
1119
			$limit_array = explode(",", $limit);
1120
			
1121
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1122
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1123
			
1124
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1125
			{
1126
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1127
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1128
			}
1129
		}
1130
		
1131
		if ($sort != "")
1132
		{
1133
			$search_orderby_array = $this->getOrderBy();
1134
			$orderby_query = $search_orderby_array[$sort]['sql'];
1135
		} else {
1136
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1137
		}
1138
1139
		$query  = $global_query.$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' GROUP BY spotter_output.arrival_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1140
1141
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1142
1143
		return $spotter_array;
1144
	}
1145
	
1146
1147
	/**
1148
	* Gets all the spotter information based on the spotter id
1149
	*
1150
	* @return Array the spotter information
1151
	*
1152
	*/
1153
	public function getSpotterDataByID($id = '')
1154
	{
1155
		global $global_query;
1156
		
1157
		date_default_timezone_set('UTC');
1158
		if ($id == '') return array();
1159
		$additional_query = "spotter_output.spotter_id = :id";
1160
		$query_values = array(':id' => $id);
1161
1162
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1163
		$query  = $global_query." WHERE ".$additional_query." ";
1164
1165
		$spotter_array = $this->getDataFromDB($query,$query_values);
1166
1167
		return $spotter_array;
1168
	}
1169
1170
	
1171
	
1172
	
1173
	/**
1174
	* Gets all the spotter information based on the callsign
1175
	*
1176
	* @return Array the spotter information
1177
	*
1178
	*/
1179
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1180
	{
1181
		global $global_query;
1182
		
1183
		date_default_timezone_set('UTC');
1184
		
1185
		$query_values = array();
1186
		$limit_query = '';
1187
		$additional_query = '';
1188
		if ($ident != "")
1189
		{
1190
			if (!is_string($ident))
1191
			{
1192
				return false;
1193
			} else {
1194
				$additional_query = " AND (spotter_output.ident = :ident)";
1195
				$query_values = array(':ident' => $ident);
1196
			}
1197
		}
1198
		
1199
		if ($limit != "")
1200
		{
1201
			$limit_array = explode(",", $limit);
1202
			
1203
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1204
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1205
			
1206
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1207
			{
1208
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1209
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1210
			}
1211
		}
1212
1213
		if ($sort != "")
1214
		{
1215
			$search_orderby_array = $this->getOrderBy();
1216
			$orderby_query = $search_orderby_array[$sort]['sql'];
1217
		} else {
1218
			$orderby_query = " ORDER BY spotter_output.date DESC";
1219
		}
1220
1221
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1222
1223
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1224
1225
		return $spotter_array;
1226
	}
1227
	
1228
	
1229
	
1230
	/**
1231
	* Gets all the spotter information based on the aircraft type
1232
	*
1233
	* @return Array the spotter information
1234
	*
1235
	*/
1236
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1237
	{
1238
		global $global_query;
1239
		
1240
		date_default_timezone_set('UTC');
1241
		
1242
		$query_values = array();
1243
		$limit_query = '';
1244
		$additional_query = '';
1245
		$filter_query = $this->getFilter($filter,true,true);
1246
		
1247
		if ($aircraft_type != "")
1248
		{
1249
			if (!is_string($aircraft_type))
1250
			{
1251
				return false;
1252
			} else {
1253
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1254
				$query_values = array(':aircraft_type' => $aircraft_type);
1255
			}
1256
		}
1257
		
1258
		if ($limit != "")
1259
		{
1260
			$limit_array = explode(",", $limit);
1261
			
1262
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1263
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1264
			
1265
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1266
			{
1267
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1268
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1269
			}
1270
		}
1271
1272
		if ($sort != "")
1273
		{
1274
			$search_orderby_array = $this->getOrderBy();
1275
			$orderby_query = $search_orderby_array[$sort]['sql'];
1276
		} else {
1277
			$orderby_query = " ORDER BY spotter_output.date DESC";
1278
		}
1279
1280
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1281
1282
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1283
1284
		return $spotter_array;
1285
	}
1286
	
1287
	
1288
	/**
1289
	* Gets all the spotter information based on the aircraft registration
1290
	*
1291
	* @return Array the spotter information
1292
	*
1293
	*/
1294
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1295
	{
1296
		global $global_query;
1297
		
1298
		date_default_timezone_set('UTC');
1299
		
1300
		$query_values = array();
1301
		$limit_query = '';
1302
		$additional_query = '';
1303
		
1304
		if ($registration != "")
1305
		{
1306
			if (!is_string($registration))
1307
			{
1308
				return false;
1309
			} else {
1310
				$additional_query = " (spotter_output.registration = :registration)";
1311
				$query_values = array(':registration' => $registration);
1312
			}
1313
		}
1314
		
1315
		if ($limit != "")
1316
		{
1317
			$limit_array = explode(",", $limit);
1318
			
1319
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1320
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1321
			
1322
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1323
			{
1324
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1325
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1326
			}
1327
		}
1328
1329
		if ($sort != "")
1330
		{
1331
			$search_orderby_array = $this->getOrderBy();
1332
			$orderby_query = $search_orderby_array[$sort]['sql'];
1333
		} else {
1334
			$orderby_query = " ORDER BY spotter_output.date DESC";
1335
		}
1336
		$filter_query = $this->getFilter($filter,true,true);
1337
1338
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1339
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1340
1341
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1342
1343
		return $spotter_array;
1344
	}
1345
1346
	
1347
	
1348
	
1349
	/**
1350
	* Gets all the spotter information based on the airline
1351
	*
1352
	* @return Array the spotter information
1353
	*
1354
	*/
1355
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1356
	{
1357
		global $global_query;
1358
		
1359
		date_default_timezone_set('UTC');
1360
1361
		$query_values = array();
1362
		$limit_query = '';
1363
		$additional_query = '';
1364
		$filter_query = $this->getFilter($filters,true,true);
1365
		
1366
		if ($airline != "")
1367
		{
1368
			if (!is_string($airline))
1369
			{
1370
				return false;
1371
			} else {
1372
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1373
				$query_values = array(':airline' => $airline);
1374
			}
1375
		}
1376
		
1377
		if ($limit != "")
1378
		{
1379
			$limit_array = explode(",", $limit);
1380
			
1381
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1382
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1383
			
1384
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1385
			{
1386
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1387
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1388
			}
1389
		}
1390
		
1391
		if ($sort != "")
1392
		{
1393
			$search_orderby_array = $this->getOrderBy();
1394
			$orderby_query = $search_orderby_array[$sort]['sql'];
1395
		} else {
1396
			$orderby_query = " ORDER BY spotter_output.date DESC";
1397
		}
1398
1399
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1400
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1401
1402
		return $spotter_array;
1403
	}
1404
	
1405
	
1406
	/**
1407
	* Gets all the spotter information based on the airport
1408
	*
1409
	* @return Array the spotter information
1410
	*
1411
	*/
1412
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1413
	{
1414
		global $global_query;
1415
		
1416
		date_default_timezone_set('UTC');
1417
		$query_values = array();
1418
		$limit_query = '';
1419
		$additional_query = '';
1420
		$filter_query = $this->getFilter($filters,true,true);
1421
		
1422
		if ($airport != "")
1423
		{
1424
			if (!is_string($airport))
1425
			{
1426
				return false;
1427
			} else {
1428
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1429
				$query_values = array(':airport' => $airport);
1430
			}
1431
		}
1432
		
1433
		if ($limit != "")
1434
		{
1435
			$limit_array = explode(",", $limit);
1436
			
1437
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1438
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1439
			
1440
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1441
			{
1442
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1443
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1444
			}
1445
		}
1446
		
1447
		if ($sort != "")
1448
		{
1449
			$search_orderby_array = $this->getOrderBy();
1450
			$orderby_query = $search_orderby_array[$sort]['sql'];
1451
		} else {
1452
			$orderby_query = " ORDER BY spotter_output.date DESC";
1453
		}
1454
1455
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." AND ((spotter_output.departure_airport_icao <> 'NA') AND (spotter_output.arrival_airport_icao <> 'NA')) ".$orderby_query;
1456
1457
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1458
1459
		return $spotter_array;
1460
	}
1461
1462
1463
1464
	/**
1465
	* Gets all the spotter information based on the date
1466
	*
1467
	* @return Array the spotter information
1468
	*
1469
	*/
1470
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1471
	{
1472
		global $global_query, $globalTimezone, $globalDBdriver;
1473
		
1474
		$query_values = array();
1475
		$limit_query = '';
1476
		$additional_query = '';
1477
1478
		$filter_query = $this->getFilter($filter,true,true);
1479
		
1480
		if ($date != "")
1481
		{
1482
			if ($globalTimezone != '') {
1483
				date_default_timezone_set($globalTimezone);
1484
				$datetime = new DateTime($date);
1485
				$offset = $datetime->format('P');
1486
			} else {
1487
				date_default_timezone_set('UTC');
1488
				$datetime = new DateTime($date);
1489
				$offset = '+00:00';
1490
			}
1491
			if ($globalDBdriver == 'mysql') {
1492
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1493
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1494
			} elseif ($globalDBdriver == 'pgsql') {
1495
				//$globalTimezone = 'UTC';
1496
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1497
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1498
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1499
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1500
			}
1501
		}
1502
		
1503
		if ($limit != "")
1504
		{
1505
			$limit_array = explode(",", $limit);
1506
			
1507
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1508
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1509
			
1510
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1511
			{
1512
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1513
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1514
			}
1515
		}
1516
1517
		if ($sort != "")
1518
		{
1519
			$search_orderby_array = $this->getOrderBy();
1520
			$orderby_query = $search_orderby_array[$sort]['sql'];
1521
		} else {
1522
			$orderby_query = " ORDER BY spotter_output.date DESC";
1523
		}
1524
1525
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1526
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1527
		return $spotter_array;
1528
	}
1529
1530
1531
1532
	/**
1533
	* Gets all the spotter information based on the country name
1534
	*
1535
	* @return Array the spotter information
1536
	*
1537
	*/
1538
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1539
	{
1540
		global $global_query;
1541
		
1542
		date_default_timezone_set('UTC');
1543
		
1544
		$query_values = array();
1545
		$limit_query = '';
1546
		$additional_query = '';
1547
		$filter_query = $this->getFilter($filters,true,true);
1548
		if ($country != "")
1549
		{
1550
			if (!is_string($country))
1551
			{
1552
				return false;
1553
			} else {
1554
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1555
				$additional_query .= " OR spotter_output.airline_country = :country";
1556
				$query_values = array(':country' => $country);
1557
			}
1558
		}
1559
		
1560
		if ($limit != "")
1561
		{
1562
			$limit_array = explode(",", $limit);
1563
			
1564
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1565
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1566
			
1567
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1568
			{
1569
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1570
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1571
			}
1572
		}
1573
					
1574
		if ($sort != "")
1575
		{
1576
			$search_orderby_array = $this->getOrderBy();
1577
			$orderby_query = $search_orderby_array[$sort]['sql'];
1578
		} else {
1579
			$orderby_query = " ORDER BY spotter_output.date DESC";
1580
		}
1581
1582
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1583
1584
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1585
1586
		return $spotter_array;
1587
	}	
1588
	
1589
	
1590
	/**
1591
	* Gets all the spotter information based on the manufacturer name
1592
	*
1593
	* @return Array the spotter information
1594
	*
1595
	*/
1596
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1597
	{
1598
		global $global_query;
1599
		
1600
		date_default_timezone_set('UTC');
1601
		
1602
		$query_values = array();
1603
		$additional_query = '';
1604
		$limit_query = '';
1605
		$filter_query = $this->getFilter($filters,true,true);
1606
		
1607
		if ($aircraft_manufacturer != "")
1608
		{
1609
			if (!is_string($aircraft_manufacturer))
1610
			{
1611
				return false;
1612
			} else {
1613
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1614
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1615
			}
1616
		}
1617
		
1618
		if ($limit != "")
1619
		{
1620
			$limit_array = explode(",", $limit);
1621
			
1622
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1623
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1624
			
1625
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1626
			{
1627
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1628
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1629
			}
1630
		}
1631
1632
		if ($sort != "")
1633
		{
1634
			$search_orderby_array = $this->getOrderBy();
1635
			$orderby_query = $search_orderby_array[$sort]['sql'];
1636
		} else {
1637
			$orderby_query = " ORDER BY spotter_output.date DESC";
1638
		}
1639
1640
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1641
1642
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1643
1644
		return $spotter_array;
1645
	}
1646
1647
1648
  
1649
  
1650
	/**
1651
	* Gets a list of all aircraft that take a route
1652
	*
1653
	* @param String $departure_airport_icao ICAO code of departure airport
1654
	* @param String $arrival_airport_icao ICAO code of arrival airport
1655
	* @return Array the spotter information
1656
	*
1657
	*/
1658
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1659
	{
1660
		global $global_query;
1661
		
1662
		$query_values = array();
1663
		$additional_query = '';
1664
		$limit_query = '';
1665
		$filter_query = $this->getFilter($filters,true,true);
1666
		if ($departure_airport_icao != "")
1667
		{
1668
			if (!is_string($departure_airport_icao))
1669
			{
1670
				return false;
1671
			} else {
1672
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1673
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1674
				//$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao AND spotter_output.real_departure_airport_icao IS NULL) OR spotter_output.real_departure_airport_icao = :departure_airport_icao";
1675
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1676
			}
1677
		}
1678
		
1679
		if ($arrival_airport_icao != "")
1680
		{
1681
			if (!is_string($arrival_airport_icao))
1682
			{
1683
				return false;
1684
			} else {
1685
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1686
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1687
				//$additional_query .= " AND ((spotter_output.arrival_airport_icao = :arrival_airport_icao AND spotter_output.real_arrival_airport_icao IS NULL) OR spotter_output.real_arrival_airport_icao = :arrival_airport_icao)";
1688
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1689
			}
1690
		}
1691
		
1692
		if ($limit != "")
1693
		{
1694
			$limit_array = explode(",", $limit);
1695
			
1696
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1697
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1698
			
1699
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1700
			{
1701
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1702
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1703
			}
1704
		}
1705
	
1706
		if ($sort != "")
1707
		{
1708
			$search_orderby_array = $this->getOrderBy();
1709
			$orderby_query = $search_orderby_array[$sort]['sql'];
1710
		} else {
1711
			$orderby_query = " ORDER BY spotter_output.date DESC";
1712
		}
1713
1714
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1715
          
1716
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1717
1718
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1719
1720
		return $spotter_array;
1721
	}
1722
	
1723
	
1724
	
1725
	/**
1726
	* Gets all the spotter information based on the special column in the table
1727
	*
1728
	* @return Array the spotter information
1729
	*
1730
	*/
1731
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1732
	{
1733
		global $global_query;
1734
		
1735
		date_default_timezone_set('UTC');
1736
		$filter_query = $this->getFilter($filter,true,true);
1737
		$limit_query = '';
1738
		
1739
		if ($limit != "")
1740
		{
1741
			$limit_array = explode(",", $limit);
1742
			
1743
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1744
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1745
			
1746
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1747
			{
1748
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1749
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1750
			}
1751
		}
1752
		
1753
		if ($sort != "")
1754
		{
1755
			$search_orderby_array = $this->getOrderBy();
1756
			$orderby_query = $search_orderby_array[$sort]['sql'];
1757
		} else {
1758
			$orderby_query = " ORDER BY spotter_output.date DESC";
1759
		}
1760
1761
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1762
1763
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1764
1765
		return $spotter_array;
1766
	}
1767
1768
	/**
1769
	* Gets all the highlight based on a aircraft registration
1770
	*
1771
	* @return String the highlight text
1772
	*
1773
	*/
1774
	public function getHighlightByRegistration($registration,$filter = array())
1775
	{
1776
		global $global_query;
1777
		
1778
		date_default_timezone_set('UTC');
1779
		$filter_query = $this->getFilter($filter,true,true);
1780
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1781
		
1782
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1783
		$sth = $this->db->prepare($query);
1784
		$sth->execute(array(':registration' => $registration));
1785
1786
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1787
		{
1788
			$highlight = $row['highlight'];
1789
		}
1790
		if (isset($highlight)) return $highlight;
1791
	}
1792
1793
	
1794
	/**
1795
	* Gets the squawk usage from squawk code
1796
	*
1797
	* @param String $squawk squawk code
1798
	* @param String $country country
1799
	* @return String usage
1800
	*
1801
	*/
1802
	public function getSquawkUsage($squawk = '',$country = 'FR')
1803
	{
1804
		
1805
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1806
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1807
1808
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1809
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1810
		
1811
		$sth = $this->db->prepare($query);
1812
		$sth->execute($query_values);
1813
    
1814
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1815
		$sth->closeCursor();
1816
		if (count($row) > 0) {
1817
			return $row['usage'];
1818
		} else return '';
1819
	}
1820
1821
	/**
1822
	* Gets the airport icao from the iata
1823
	*
1824
	* @param String $airport_iata the iata code of the airport
1825
	* @return String airport iata
1826
	*
1827
	*/
1828
	public function getAirportIcao($airport_iata = '')
1829
	{
1830
		
1831
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1832
1833
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1834
		$query_values = array(':airport' => $airport_iata);
1835
		
1836
		$sth = $this->db->prepare($query);
1837
		$sth->execute($query_values);
1838
		
1839
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1840
		$sth->closeCursor();
1841
		if (count($row) > 0) {
1842
			return $row['icao'];
1843
		} else return '';
1844
	}
1845
1846
	/**
1847
	* Gets the airport distance
1848
	*
1849
	* @param String $airport_icao the icao code of the airport
1850
	* @param Float $latitude the latitude
1851
	* @param Float $longitude the longitude
1852
	* @return Float distance to the airport
1853
	*
1854
	*/
1855
	public function getAirportDistance($airport_icao,$latitude,$longitude)
1856
	{
1857
		
1858
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
1859
1860
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
1861
		$query_values = array(':airport' => $airport_icao);
1862
		$sth = $this->db->prepare($query);
1863
		$sth->execute($query_values);
1864
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1865
		$sth->closeCursor();
1866
		if (count($row) > 0) {
1867
			$airport_latitude = $row['latitude'];
1868
			$airport_longitude = $row['longitude'];
1869
			$Common = new Common();
1870
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
1871
		} else return '';
1872
	}
1873
	
1874
	/**
1875
	* Gets the airport info based on the icao
1876
	*
1877
	* @param String $airport the icao code of the airport
1878
	* @return Array airport information
1879
	*
1880
	*/
1881
	public function getAllAirportInfo($airport = '')
1882
	{
1883
		
1884
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
1885
1886
		$query_values = array();
1887
		if ($airport == 'NA') {
1888
			return array(array('name' => 'Not available','city' => 'N/A', 'country' => 'N/A','iata' => 'NA','icao' => 'NA','altitude' => NULL,'latitude' => 0,'longitude' => 0,'type' => 'NA','home_link' => '','wikipedia_link' => '','image_thumb' => '', 'image' => ''));
1889
		} elseif ($airport == '') {
1890
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport";
1891
		} else {
1892
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport WHERE airport.icao = :airport LIMIT 1";
1893
			$query_values = array(':airport' => $airport);
1894
		}
1895
		
1896
		$sth = $this->db->prepare($query);
1897
		$sth->execute($query_values);
1898
		/*
1899
		$airport_array = array();
1900
		$temp_array = array();
1901
		
1902
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1903
		{
1904
			$temp_array['name'] = $row['name'];
1905
			$temp_array['city'] = $row['city'];
1906
			$temp_array['country'] = $row['country'];
1907
			$temp_array['iata'] = $row['iata'];
1908
			$temp_array['icao'] = $row['icao'];
1909
			$temp_array['latitude'] = $row['latitude'];
1910
			$temp_array['longitude'] = $row['longitude'];
1911
			$temp_array['altitude'] = $row['altitude'];
1912
			$temp_array['home_link'] = $row['home_link'];
1913
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
1914
			$temp_array['image'] = $row['image'];
1915
			$temp_array['image_thumb'] = $row['image_thumb'];
1916
1917
			$airport_array[] = $temp_array;
1918
		}
1919
1920
		return $airport_array;
1921
		*/
1922
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1923
	}
1924
	
1925
	/**
1926
	* Gets the airport info based on the country
1927
	*
1928
	* @param Array $countries Airports countries
1929
	* @return Array airport information
1930
	*
1931
	*/
1932
	public function getAllAirportInfobyCountry($countries)
1933
	{
1934
		$lst_countries = '';
1935
		foreach ($countries as $country) {
1936
			$country = filter_var($country,FILTER_SANITIZE_STRING);
1937
			if ($lst_countries == '') {
1938
				$lst_countries = "'".$country."'";
1939
			} else {
1940
				$lst_countries .= ",'".$country."'";
1941
			}
1942
		}
1943
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
1944
		
1945
		$sth = $this->db->prepare($query);
1946
		$sth->execute();
1947
    
1948
		$airport_array = array();
1949
		$temp_array = array();
1950
		
1951
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1952
		{
1953
			$temp_array['name'] = $row['name'];
1954
			$temp_array['city'] = $row['city'];
1955
			$temp_array['country'] = $row['country'];
1956
			$temp_array['iata'] = $row['iata'];
1957
			$temp_array['icao'] = $row['icao'];
1958
			$temp_array['latitude'] = $row['latitude'];
1959
			$temp_array['longitude'] = $row['longitude'];
1960
			$temp_array['altitude'] = $row['altitude'];
1961
1962
			$airport_array[] = $temp_array;
1963
		}
1964
1965
		return $airport_array;
1966
	}
1967
	
1968
	/**
1969
	* Gets airports info based on the coord
1970
	*
1971
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
1972
	* @return Array airport information
1973
	*
1974
	*/
1975
	public function getAllAirportInfobyCoord($coord)
1976
	{
1977
		global $globalDBdriver;
1978
		if (is_array($coord)) {
1979
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1980
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1981
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1982
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1983
		} else return array();
1984
		if ($globalDBdriver == 'mysql') {
1985
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1986
		} else {
1987
			$query  = "SELECT airport.* FROM airport WHERE CAST(airport.latitude AS FLOAT) BETWEEN ".$minlat." AND ".$maxlat." AND CAST(airport.longitude AS FLOAT) BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1988
		}
1989
		$sth = $this->db->prepare($query);
1990
		$sth->execute();
1991
    
1992
		$airport_array = array();
1993
		
1994
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1995
		{
1996
			$temp_array = $row;
1997
1998
			$airport_array[] = $temp_array;
1999
		}
2000
2001
		return $airport_array;
2002
	}
2003
2004
	/**
2005
	* Gets waypoints info based on the coord
2006
	*
2007
	* @param Array $coord waypoints coord
2008
	* @return Array airport information
2009
	*
2010
	*/
2011
	public function getAllWaypointsInfobyCoord($coord)
2012
	{
2013
		if (is_array($coord)) {
2014
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2015
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2016
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2017
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2018
		} else return array();
2019
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2020
		$query  = "SELECT waypoints.* FROM waypoints WHERE (waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong.") OR (waypoints.latitude_end BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_end BETWEEN ".$minlong." AND ".$maxlong.")";
2021
		//$query  = "SELECT waypoints.* FROM waypoints";
2022
		//$query  = "SELECT waypoints.* FROM waypoints INNER JOIN (SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong.") w ON w.name_end = waypoints.name_begin OR w.name_begin = waypoints.name_begin OR w.name_begin = waypoints.name_end OR w.name_end = waypoints.name_end";
2023
		//$query = "SELECT * FROM waypoints LEFT JOIN waypoints w ON waypoints.name_end = w.name_begin WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2024
		//$query = "SELECT z.name_begin as name_begin, z.name_end as name_end, z.latitude_begin as latitude_begin, z.longitude_begin as longitude_begin, z.latitude_end as latitude_end, z.longitude_end as longitude_end, z.segment_name as segment_name, w.name_end as name_end_seg2, w.latitude_end as latitude_end_seg2, w.longitude_end as longitude_end_seg2, w.segment_name as segment_name_seg2 FROM waypoints z INNER JOIN waypoints w ON z.name_end = w.name_begin WHERE z.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND z.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2025
		//echo $query;
2026
		
2027
		$sth = $this->db->prepare($query);
2028
		$sth->execute();
2029
    
2030
		$waypoints_array = array();
2031
		
2032
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2033
		{
2034
			$temp_array = $row;
2035
2036
			$waypoints_array[] = $temp_array;
2037
		}
2038
2039
		return $waypoints_array;
2040
	}
2041
	
2042
	
2043
	/**
2044
	* Gets the airline info based on the icao code or iata code
2045
	*
2046
	* @param String $airline_icao the iata code of the airport
2047
	* @return Array airport information
2048
	*
2049
	*/
2050
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2051
	{
2052
		global $globalUseRealAirlines;
2053
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2054
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2055
		if ($airline_icao == 'NA') {
2056
			$airline_array = array();
2057
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2058
			return $airline_array;
2059
		} else {
2060
			if (strlen($airline_icao) == 2) {
2061
				if ($fromsource === NULL) {
2062
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2063
				} else {
2064
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource = :fromsource LIMIT 1";
2065
				}
2066
			} else {
2067
				if ($fromsource === NULL) {
2068
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2069
				} else {
2070
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource = :fromsource LIMIT 1";
2071
				}
2072
			}
2073
			
2074
			$sth = $this->db->prepare($query);
2075
			if ($fromsource === NULL) {
2076
				$sth->execute(array(':airline_icao' => $airline_icao));
2077
			} else {
2078
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2079
			}
2080
                        /*
2081
			$airline_array = array();
2082
			$temp_array = array();
2083
		
2084
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2085
			{
2086
				$temp_array['name'] = $row['name'];
2087
				$temp_array['iata'] = $row['iata'];
2088
				$temp_array['icao'] = $row['icao'];
2089
				$temp_array['callsign'] = $row['callsign'];
2090
				$temp_array['country'] = $row['country'];
2091
				$temp_array['type'] = $row['type'];
2092
				$airline_array[] = $temp_array;
2093
			}
2094
			return $airline_array;
2095
			*/
2096
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2097
			if (empty($result) && $fromsource !== NULL) {
2098
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2099
				$sth = $this->db->prepare($query);
2100
				$sth->execute(array(':fromsource' => $fromsource));
2101
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2102
				$sth->closeCursor();
2103
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2104
			}
2105
			return $result;
2106
		}
2107
	}
2108
	
2109
	
2110
	
2111
	/**
2112
	* Gets the aircraft info based on the aircraft type
2113
	*
2114
	* @param String $aircraft_type the aircraft type
2115
	* @return Array aircraft information
2116
	*
2117
	*/
2118
	public function getAllAircraftInfo($aircraft_type)
2119
	{
2120
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2121
2122
		if ($aircraft_type == 'NA') {
2123
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2124
		}
2125
		$query  = "SELECT aircraft.icao, aircraft.type,aircraft.manufacturer,aircraft.aircraft_shadow, aircraft.official_page, aircraft.aircraft_description, aircraft.engine_type, aircraft.engine_count, aircraft.wake_category FROM aircraft WHERE aircraft.icao = :aircraft_type";
2126
		
2127
		$sth = $this->db->prepare($query);
2128
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2129
		/*
2130
		$aircraft_array = array();
2131
		$temp_array = array();
2132
		
2133
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2134
		{
2135
			$temp_array = array();
2136
			$temp_array['icao'] = $row['icao'];
2137
			$temp_array['type'] = $row['type'];
2138
			$temp_array['manufacturer'] = $row['manufacturer'];
2139
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2140
2141
			$aircraft_array[] = $temp_array;
2142
		}
2143
		return $aircraft_array;
2144
		*/
2145
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2146
	}
2147
2148
	/**
2149
	* Gets the aircraft icao based on the aircraft name/type
2150
	*
2151
	* @param String $aircraft_type the aircraft type
2152
	* @return String aircraft information
2153
	*
2154
	*/
2155
	public function getAircraftIcao($aircraft_type)
2156
	{
2157
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2158
		$all_aircraft = array('737-300' => 'B733',
2159
				'777-200' => 'B772',
2160
				'777-200ER' => 'B772',
2161
				'777-300ER' => 'B77W',
2162
				'c172p' => 'C172',
2163
				'aerostar' => 'AEST',
2164
				'A320-211' => 'A320',
2165
				'747-8i' => 'B748',
2166
				'A380' => 'A388');
2167
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2168
2169
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2170
		$aircraft_type = strtoupper($aircraft_type);
2171
		$sth = $this->db->prepare($query);
2172
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2173
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2174
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2175
		else return '';
2176
	}
2177
	
2178
	/**
2179
	* Gets the aircraft info based on the aircraft modes
2180
	*
2181
	* @param String $aircraft_modes the aircraft ident (hex)
2182
	* @return String aircraft type
2183
	*
2184
	*/
2185
	public function getAllAircraftType($aircraft_modes)
2186
	{
2187
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2188
2189
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
2190
		
2191
		$sth = $this->db->prepare($query);
2192
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2193
2194
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2195
		$sth->closeCursor();
2196
		if (isset($row['icaotypecode'])) {
2197
			return $row['icaotypecode'];
2198
		} else return '';
2199
	}
2200
2201
	/**
2202
	* Gets the aircraft info based on the aircraft registration
2203
	*
2204
	* @param String $registration the aircraft registration
2205
	* @return String aircraft type
2206
	*
2207
	*/
2208
	public function getAllAircraftTypeByRegistration($registration)
2209
	{
2210
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2211
2212
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2213
		
2214
		$sth = $this->db->prepare($query);
2215
		$sth->execute(array(':registration' => $registration));
2216
2217
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2218
		$sth->closeCursor();
2219
		if (isset($row['icaotypecode'])) {
2220
			return $row['icaotypecode'];
2221
		} else return '';
2222
	}
2223
2224
	/**
2225
	* Gets correct aircraft operator corde
2226
	*
2227
	* @param String $operator the aircraft operator code (callsign)
2228
	* @return String aircraft operator code
2229
	*
2230
	*/
2231
	public function getOperator($operator)
2232
	{
2233
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2234
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2235
		
2236
		$sth = $this->db->prepare($query);
2237
		$sth->execute(array(':operator' => $operator));
2238
2239
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2240
		$sth->closeCursor();
2241
		if (isset($row['operator_correct'])) {
2242
			return $row['operator_correct'];
2243
		} else return $operator;
2244
	}
2245
2246
	/**
2247
	* Gets the aircraft route based on the aircraft callsign
2248
	*
2249
	* @param String $callsign the aircraft callsign
2250
	* @return Array aircraft type
2251
	*
2252
	*/
2253
	public function getRouteInfo($callsign)
2254
	{
2255
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2256
                if ($callsign == '') return array();
2257
		$query  = "SELECT routes.Operator_ICAO, routes.FromAirport_ICAO, routes.ToAirport_ICAO, routes.RouteStop, routes.FromAirport_Time, routes.ToAirport_Time FROM routes WHERE CallSign = :callsign LIMIT 1";
2258
		
2259
		$sth = $this->db->prepare($query);
2260
		$sth->execute(array(':callsign' => $callsign));
2261
2262
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2263
		$sth->closeCursor();
2264
		if (count($row) > 0) {
2265
			return $row;
2266
		} else return array();
2267
	}
2268
	
2269
	/**
2270
	* Gets the aircraft info based on the aircraft registration
2271
	*
2272
	* @param String $registration the aircraft registration
2273
	* @return Array aircraft information
2274
	*
2275
	*/
2276
	public function getAircraftInfoByRegistration($registration)
2277
	{
2278
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2279
2280
		$query  = "SELECT spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_icao FROM spotter_output WHERE spotter_output.registration = :registration";
2281
		
2282
		$sth = $this->db->prepare($query);
2283
		$sth->execute(array(':registration' => $registration));
2284
2285
		$aircraft_array = array();
2286
		$temp_array = array();
2287
		
2288
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2289
		{
2290
			$temp_array['airline_icao'] = $row['airline_icao'];
2291
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2292
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2293
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2294
2295
			$aircraft_array[] = $temp_array;
2296
		}
2297
2298
		return $aircraft_array;
2299
	}
2300
	
2301
	/**
2302
	* Gets the aircraft owner & base based on the aircraft registration
2303
	*
2304
	* @param String $registration the aircraft registration
2305
	* @return Array aircraft information
2306
	*
2307
	*/
2308
	public function getAircraftOwnerByRegistration($registration)
2309
	{
2310
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2311
		$Connection = new Connection($this->db);
2312
		if ($Connection->tableExists('aircraft_owner')) {
2313
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2314
			$sth = $this->db->prepare($query);
2315
			$sth->execute(array(':registration' => $registration));
2316
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2317
			$sth->closeCursor();
2318
			return $result;
2319
		} else return array();
2320
	}
2321
	
2322
  
2323
  /**
2324
	* Gets all flights (but with only little info)
2325
	*
2326
	* @return Array basic flight information
2327
	*
2328
	*/
2329
	public function getAllFlightsforSitemap()
2330
	{
2331
		//$query  = "SELECT spotter_output.spotter_id, spotter_output.ident, spotter_output.airline_name, spotter_output.aircraft_name, spotter_output.aircraft_icao FROM spotter_output ORDER BY LIMIT ";
2332
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2333
		
2334
		$sth = $this->db->prepare($query);
2335
		$sth->execute();
2336
                  /*
2337
		$flight_array = array();
2338
		$temp_array = array();
2339
		
2340
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2341
		{
2342
			$temp_array['spotter_id'] = $row['spotter_id'];
2343
//			$temp_array['ident'] = $row['ident'];
2344
//			$temp_array['airline_name'] = $row['airline_name'];
2345
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2346
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2347
			//$temp_array['image'] = $row['image'];
2348
2349
			$flight_array[] = $temp_array;
2350
		}
2351
2352
		return $flight_array;
2353
		*/
2354
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2355
	}
2356
  
2357
	/**
2358
	* Gets a list of all aircraft manufacturers
2359
	*
2360
	* @return Array list of aircraft types
2361
	*
2362
	*/
2363
	public function getAllManufacturers()
2364
	{
2365
		/*
2366
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2367
								FROM spotter_output
2368
								WHERE spotter_output.aircraft_manufacturer <> '' 
2369
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2370
		  */
2371
		
2372
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2373
		$sth = $this->db->prepare($query);
2374
		$sth->execute();
2375
2376
		$manufacturer_array = array();
2377
		$temp_array = array();
2378
		
2379
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2380
		{
2381
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2382
2383
			$manufacturer_array[] = $temp_array;
2384
		}
2385
2386
		return $manufacturer_array;
2387
	}
2388
  
2389
  
2390
  /**
2391
	* Gets a list of all aircraft types
2392
	*
2393
	* @return Array list of aircraft types
2394
	*
2395
	*/
2396
	public function getAllAircraftTypes($filters = array())
0 ignored issues
show
Unused Code introduced by
The parameter $filters is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2397
	{
2398
		/*
2399
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2400
								FROM spotter_output  
2401
								WHERE spotter_output.aircraft_icao <> '' 
2402
								ORDER BY spotter_output.aircraft_name ASC";
2403
								
2404
		*/
2405
		//$filter_query = $this->getFilter($filters,true,true);
2406
		//$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft".$filter_query." icao <> '' ORDER BY aircraft_manufacturer ASC";
2407
2408
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2409
		
2410
		$sth = $this->db->prepare($query);
2411
		$sth->execute();
2412
2413
		$aircraft_array = array();
2414
		$temp_array = array();
2415
		
2416
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2417
		{
2418
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2419
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2420
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2421
2422
			$aircraft_array[] = $temp_array;
2423
		}
2424
2425
		return $aircraft_array;
2426
	}
2427
	
2428
	
2429
	/**
2430
	* Gets a list of all aircraft registrations
2431
	*
2432
	* @return Array list of aircraft registrations
2433
	*
2434
	*/
2435
	public function getAllAircraftRegistrations($filters = array())
2436
	{
2437
		$filter_query = $this->getFilter($filters,true,true);
2438
		$query  = "SELECT DISTINCT spotter_output.registration 
2439
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2440
				ORDER BY spotter_output.registration ASC";
2441
2442
		$sth = $this->db->prepare($query);
2443
		$sth->execute();
2444
2445
		$aircraft_array = array();
2446
		$temp_array = array();
2447
		
2448
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2449
		{
2450
			$temp_array['registration'] = $row['registration'];
2451
2452
			$aircraft_array[] = $temp_array;
2453
		}
2454
2455
		return $aircraft_array;
2456
	}
2457
2458
	/**
2459
	* Gets all source name
2460
	*
2461
	* @param String type format of source
2462
	* @return Array list of source name
2463
	*
2464
	*/
2465
	public function getAllSourceName($type = '',$filters = array())
2466
	{
2467
		$filter_query = $this->getFilter($filters,true,true);
2468
		$query_values = array();
2469
		$query  = "SELECT DISTINCT spotter_output.source_name 
2470
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2471
		if ($type != '') {
2472
			$query_values = array(':type' => $type);
2473
			$query .= " AND format_source = :type";
2474
		}
2475
		$query .= " ORDER BY spotter_output.source_name ASC";
2476
2477
		$sth = $this->db->prepare($query);
2478
		if (!empty($query_values)) $sth->execute($query_values);
2479
		else $sth->execute();
2480
2481
		$source_array = array();
2482
		$temp_array = array();
2483
		
2484
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2485
		{
2486
			$temp_array['source_name'] = $row['source_name'];
2487
			$source_array[] = $temp_array;
2488
		}
2489
		return $source_array;
2490
	}
2491
2492
2493
2494
	/**
2495
	* Gets a list of all airline names
2496
	*
2497
	* @return Array list of airline names
2498
	*
2499
	*/
2500
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2501
	{
2502
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2503
		$filter_query = $this->getFilter($filters,true,true);
2504
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2505
		if ($airline_type == '' || $airline_type == 'all') {
2506
			/*
2507
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2508
								FROM spotter_output
2509
								WHERE spotter_output.airline_icao <> '' 
2510
								ORDER BY spotter_output.airline_name ASC";
2511
			*/
2512
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2513
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2514
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2515
			if ($forsource === NULL) {
2516
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource IS NULL ORDER BY name ASC";
2517
				$query_data = array();
2518
			} else {
2519
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2520
				$query_data = array(':forsource' => $forsource);
2521
			}
2522
		} else {
2523
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2524
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2525
					AND spotter_output.airline_type = :airline_type 
2526
					ORDER BY spotter_output.airline_icao ASC";
2527
			$query_data = array(':airline_type' => $airline_type);
2528
		}
2529
		
2530
		$sth = $this->db->prepare($query);
2531
		$sth->execute($query_data);
2532
    
2533
		$airline_array = array();
2534
		$temp_array = array();
2535
		
2536
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2537
		{
2538
			$temp_array['airline_icao'] = $row['airline_icao'];
2539
			$temp_array['airline_name'] = $row['airline_name'];
2540
			$temp_array['airline_type'] = $row['airline_type'];
2541
2542
			$airline_array[] = $temp_array;
2543
		}
2544
		return $airline_array;
2545
	}
2546
	
2547
	
2548
	/**
2549
	* Gets a list of all airline countries
2550
	*
2551
	* @return Array list of airline countries
2552
	*
2553
	*/
2554
	public function getAllAirlineCountries($filters = array())
2555
	{
2556
		$filter_query = $this->getFilter($filters,true,true);
2557
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2558
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2559
				ORDER BY spotter_output.airline_country ASC";
2560
		
2561
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2562
		$sth = $this->db->prepare($query);
2563
		$sth->execute();
2564
2565
		$airline_array = array();
2566
		$temp_array = array();
2567
		
2568
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2569
		{
2570
			$temp_array['airline_country'] = $row['airline_country'];
2571
2572
			$airline_array[] = $temp_array;
2573
		}
2574
2575
		return $airline_array;
2576
	}
2577
2578
	
2579
	
2580
	/**
2581
	* Gets a list of all departure & arrival names
2582
	*
2583
	* @return Array list of airport names
2584
	*
2585
	*/
2586
	public function getAllAirportNames($filters = array())
2587
	{
2588
		$filter_query = $this->getFilter($filters,true,true);
2589
		$airport_array = array();
2590
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao AS airport_icao, spotter_output.departure_airport_name AS airport_name, spotter_output.departure_airport_city AS airport_city, spotter_output.departure_airport_country AS airport_country
2591
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2592
				ORDER BY spotter_output.departure_airport_city ASC";
2593
		
2594
		//$query = "SELECT DISTINCT icao AS airport_icao, name AS airport_name, city AS airport_city, country AS airport_country FROM airport ORDER BY city ASC";
2595
		$sth = $this->db->prepare($query);
2596
		$sth->execute();
2597
2598
		$temp_array = array();
2599
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2600
		{
2601
			$temp_array['airport_icao'] = $row['airport_icao'];
2602
			$temp_array['airport_name'] = $row['airport_name'];
2603
			$temp_array['airport_city'] = $row['airport_city'];
2604
			$temp_array['airport_country'] = $row['airport_country'];
2605
2606
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2607
		}
2608
2609
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao AS airport_icao, spotter_output.arrival_airport_name AS airport_name, spotter_output.arrival_airport_city AS airport_city, spotter_output.arrival_airport_country AS airport_country
2610
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2611
								ORDER BY spotter_output.arrival_airport_city ASC";
2612
					
2613
		$sth = $this->db->prepare($query);
2614
		$sth->execute();
2615
2616
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2617
			{
2618
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2619
		//	{
2620
				$temp_array['airport_icao'] = $row['airport_icao'];
2621
				$temp_array['airport_name'] = $row['airport_name'];
2622
				$temp_array['airport_city'] = $row['airport_city'];
2623
				$temp_array['airport_country'] = $row['airport_country'];
2624
				
2625
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2626
		//	}
2627
		}
2628
2629
		return $airport_array;
2630
	} 
2631
	
2632
	
2633
	/**
2634
	* Gets a list of all departure & arrival airport countries
2635
	*
2636
	* @return Array list of airport countries
2637
	*
2638
	*/
2639
	public function getAllAirportCountries($filters = array())
2640
	{
2641
		$airport_array = array();
2642
					
2643
		  /*
2644
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2645
								FROM spotter_output
2646
								WHERE spotter_output.departure_airport_country <> '' 
2647
								ORDER BY spotter_output.departure_airport_country ASC";
2648
		*/
2649
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2650
		
2651
		$sth = $this->db->prepare($query);
2652
		$sth->execute();
2653
   
2654
		$temp_array = array();
2655
		
2656
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2657
		{
2658
			$temp_array['airport_country'] = $row['airport_country'];
2659
2660
			$airport_array[$row['airport_country']] = $temp_array;
2661
		}
2662
		$filter_query = $this->getFilter($filters,true,true);
2663
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2664
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2665
								ORDER BY spotter_output.arrival_airport_country ASC";
2666
					
2667
		$sth = $this->db->prepare($query);
2668
		$sth->execute();
2669
		
2670
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2671
		{
2672
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2673
			{
2674
				$temp_array['airport_country'] = $row['airport_country'];
2675
				$airport_array[$row['airport_country']] = $temp_array;
2676
			}
2677
		}
2678
2679
		return $airport_array;
2680
	} 
2681
	
2682
	
2683
	
2684
	
2685
	/**
2686
	* Gets a list of all countries (airline, departure airport & arrival airport)
2687
	*
2688
	* @return Array list of countries
2689
	*
2690
	*/
2691
	public function getAllCountries($filters = array())
2692
	{
2693
		$Connection= new Connection($this->db);
2694
		if ($Connection->tableExists('countries')) {
2695
			$query  = "SELECT countries.name AS airport_country
2696
				FROM countries
2697
				ORDER BY countries.name ASC";
2698
			$sth = $this->db->prepare($query);
2699
			$sth->execute();
2700
   
2701
			$temp_array = array();
2702
			$country_array = array();
2703
		
2704
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2705
			{
2706
				$temp_array['country'] = $row['airport_country'];
2707
				$country_array[$row['airport_country']] = $temp_array;
2708
			}
2709
		} else {
2710
			$filter_query = $this->getFilter($filters,true,true);
2711
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2712
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
2713
								ORDER BY spotter_output.departure_airport_country ASC";
2714
2715
			$sth = $this->db->prepare($query);
2716
			$sth->execute();
2717
   
2718
			$temp_array = array();
2719
			$country_array = array();
2720
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2721
			{
2722
				$temp_array['country'] = $row['airport_country'];
2723
				$country_array[$row['airport_country']] = $temp_array;
2724
			}
2725
2726
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2727
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2728
								ORDER BY spotter_output.arrival_airport_country ASC";
2729
					
2730
		$sth = $this->db->prepare($query);
2731
		$sth->execute();
2732
		
2733
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2734
		{
2735
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
2736
			{
2737
				$temp_array['country'] = $row['airport_country'];
2738
				
2739
				$country_array[$row['country']] = $temp_array;
2740
			}
2741
		}
2742
		
2743
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2744
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2745
								ORDER BY spotter_output.airline_country ASC";
2746
					
2747
		$sth = $this->db->prepare($query);
2748
		$sth->execute();
2749
		
2750
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2751
		{
2752
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
2753
			{
2754
				$temp_array['country'] = $row['airline_country'];
2755
				
2756
				$country_array[$row['country']] = $temp_array;
2757
			}
2758
		}
2759
		}  
2760
		return $country_array;
2761
	} 
2762
	
2763
	
2764
	
2765
	
2766
	/**
2767
	* Gets a list of all idents/callsigns
2768
	*
2769
	* @return Array list of ident/callsign names
2770
	*
2771
	*/
2772
	public function getAllIdents($filters = array())
2773
	{
2774
		$filter_query = $this->getFilter($filters,true,true);
2775
		$query  = "SELECT DISTINCT spotter_output.ident
2776
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
2777
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
2778
2779
		$sth = $this->db->prepare($query);
2780
		$sth->execute();
2781
    
2782
		$ident_array = array();
2783
		$temp_array = array();
2784
		
2785
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2786
		{
2787
			$temp_array['ident'] = $row['ident'];
2788
			$ident_array[] = $temp_array;
2789
		}
2790
2791
		return $ident_array;
2792
	}
2793
2794
	/**
2795
	* Get a list of flights from airport since 7 days
2796
	* @return Array number, icao, name and city of airports
2797
	*/
2798
2799
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
2800
		global $globalTimezone, $globalDBdriver;
2801
		$filter_query = $this->getFilter($filters,true,true);
2802
		if ($globalTimezone != '') {
2803
			date_default_timezone_set($globalTimezone);
2804
			$datetime = new DateTime();
2805
			$offset = $datetime->format('P');
2806
		} else $offset = '+00:00';
2807
		if ($airport_icao == '') {
2808
			if ($globalDBdriver == 'mysql') {
2809
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2810
			} else {
2811
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2812
			}
2813
			$sth = $this->db->prepare($query);
2814
			$sth->execute(array(':offset' => $offset));
2815
		} else {
2816
			if ($globalDBdriver == 'mysql') {
2817
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2818
			} else {
2819
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2820
			}
2821
			$sth = $this->db->prepare($query);
2822
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2823
		}
2824
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2825
	}
2826
2827
	/**
2828
	* Get a list of flights from airport since 7 days
2829
	* @return Array number, icao, name and city of airports
2830
	*/
2831
2832
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
2833
		global $globalTimezone, $globalDBdriver;
2834
		if ($globalTimezone != '') {
2835
			date_default_timezone_set($globalTimezone);
2836
			$datetime = new DateTime();
2837
			$offset = $datetime->format('P');
2838
		} else $offset = '+00:00';
2839
		if ($airport_icao == '') {
2840
			if ($globalDBdriver == 'mysql') {
2841
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2842
			} else {
2843
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' AND departure_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2844
			}
2845
			$sth = $this->db->prepare($query);
2846
			$sth->execute(array(':offset' => $offset));
2847
		} else {
2848
			if ($globalDBdriver == 'mysql') {
2849
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2850
			} else {
2851
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2852
			}
2853
			$sth = $this->db->prepare($query);
2854
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2855
		}
2856
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2857
	}
2858
2859
	/**
2860
	* Get a list of flights from detected airport since 7 days
2861
	* @return Array number, icao, name and city of airports
2862
	*/
2863
2864
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
2865
		global $globalTimezone, $globalDBdriver;
2866
		$filter_query = $this->getFilter($filters,true,true);
2867
		if ($globalTimezone != '') {
2868
			date_default_timezone_set($globalTimezone);
2869
			$datetime = new DateTime();
2870
			$offset = $datetime->format('P');
2871
		} else $offset = '+00:00';
2872
		if ($airport_icao == '') {
2873
			if ($globalDBdriver == 'mysql') {
2874
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2875
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
2876
				GROUP BY real_departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2877
			} else {
2878
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2879
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
2880
				GROUP BY real_departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2881
			}
2882
			$sth = $this->db->prepare($query);
2883
			$sth->execute(array(':offset' => $offset));
2884
		} else {
2885
			if ($globalDBdriver == 'mysql') {
2886
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2887
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
2888
				GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2889
			} else {
2890
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2891
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2892
			}
2893
			$sth = $this->db->prepare($query);
2894
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2895
		}
2896
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2897
	}
2898
2899
	/**
2900
	* Get a list of flights from detected airport since 7 days
2901
	* @return Array number, icao, name and city of airports
2902
	*/
2903
2904
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
2905
		global $globalTimezone, $globalDBdriver;
2906
		if ($globalTimezone != '') {
2907
			date_default_timezone_set($globalTimezone);
2908
			$datetime = new DateTime();
2909
			$offset = $datetime->format('P');
2910
		} else $offset = '+00:00';
2911
		if ($airport_icao == '') {
2912
			if ($globalDBdriver == 'mysql') {
2913
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2914
				FROM `spotter_output`, airport 
2915
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
2916
				GROUP BY spotter_output.airline_icao, real_departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2917
			} else {
2918
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2919
				FROM spotter_output, airport 
2920
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao <> 'NA' AND real_departure_airport_icao <> '' 
2921
				GROUP BY spotter_output.airline_icao, real_departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2922
			}
2923
			$sth = $this->db->prepare($query);
2924
			$sth->execute(array(':offset' => $offset));
2925
		} else {
2926
			if ($globalDBdriver == 'mysql') {
2927
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2928
				FROM `spotter_output`, airport 
2929
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
2930
				GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2931
			} else {
2932
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2933
				FROM spotter_output, airport 
2934
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao = :airport_icao GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2935
			}
2936
			$sth = $this->db->prepare($query);
2937
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2938
		}
2939
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2940
	}
2941
2942
2943
	/**
2944
	* Get a list of flights to airport since 7 days
2945
	* @return Array number, icao, name and city of airports
2946
	*/
2947
2948
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
2949
		global $globalTimezone, $globalDBdriver;
2950
		$filter_query = $this->getFilter($filters,true,true);
2951
		if ($globalTimezone != '') {
2952
			date_default_timezone_set($globalTimezone);
2953
			$datetime = new DateTime();
2954
			$offset = $datetime->format('P');
2955
		} else $offset = '+00:00';
2956
		if ($airport_icao == '') {
2957
			if ($globalDBdriver == 'mysql') {
2958
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' GROUP BY arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2959
			} else {
2960
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' GROUP BY arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2961
			}
2962
			$sth = $this->db->prepare($query);
2963
			$sth->execute(array(':offset' => $offset));
2964
		} else {
2965
			if ($globalDBdriver == 'mysql') {
2966
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao GROUP BY arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2967
			} else {
2968
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao GROUP BY arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2969
			}
2970
			$sth = $this->db->prepare($query);
2971
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2972
		}
2973
		
2974
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2975
	}
2976
2977
2978
	/**
2979
	* Get a list of flights detected to airport since 7 days
2980
	* @return Array number, icao, name and city of airports
2981
	*/
2982
2983
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
2984
		global $globalTimezone, $globalDBdriver;
2985
		$filter_query = $this->getFilter($filters,true,true);
2986
		if ($globalTimezone != '') {
2987
			date_default_timezone_set($globalTimezone);
2988
			$datetime = new DateTime();
2989
			$offset = $datetime->format('P');
2990
		} else $offset = '+00:00';
2991
		if ($airport_icao == '') {
2992
			if ($globalDBdriver == 'mysql') {
2993
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2994
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
2995
				GROUP BY real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
2996
			} else {
2997
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2998
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
2999
				GROUP BY real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3000
			}
3001
			$sth = $this->db->prepare($query);
3002
			$sth->execute(array(':offset' => $offset));
3003
		} else {
3004
			if ($globalDBdriver == 'mysql') {
3005
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3006
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
3007
				GROUP BY real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3008
			} else {
3009
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3010
				FROM airport, spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
3011
				GROUP BY real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3012
			}
3013
			$sth = $this->db->prepare($query);
3014
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3015
		}
3016
		
3017
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3018
	}
3019
3020
3021
	/**
3022
	* Get a list of flights to airport since 7 days
3023
	* @return Array number, icao, name and city of airports
3024
	*/
3025
3026
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3027
		global $globalTimezone, $globalDBdriver;
3028
		if ($globalTimezone != '') {
3029
			date_default_timezone_set($globalTimezone);
3030
			$datetime = new DateTime();
3031
			$offset = $datetime->format('P');
3032
		} else $offset = '+00:00';
3033
		if ($airport_icao == '') {
3034
			if ($globalDBdriver == 'mysql') {
3035
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3036
			} else {
3037
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3038
			}
3039
			$sth = $this->db->prepare($query);
3040
			$sth->execute(array(':offset' => $offset));
3041
		} else {
3042
			if ($globalDBdriver == 'mysql') {
3043
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3044
			} else {
3045
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
3046
			}
3047
			$sth = $this->db->prepare($query);
3048
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3049
		}
3050
		
3051
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3052
	}
3053
3054
3055
	/**
3056
	* Get a list of flights detected to airport since 7 days
3057
	* @return Array number, icao, name and city of airports
3058
	*/
3059
3060
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3061
		global $globalTimezone, $globalDBdriver;
3062
		if ($globalTimezone != '') {
3063
			date_default_timezone_set($globalTimezone);
3064
			$datetime = new DateTime();
3065
			$offset = $datetime->format('P');
3066
		} else $offset = '+00:00';
3067
		if ($airport_icao == '') {
3068
			if ($globalDBdriver == 'mysql') {
3069
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3070
				FROM `spotter_output`, airport 
3071
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3072
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3073
			} else {
3074
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3075
				FROM spotter_output, airport 
3076
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3077
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3078
			}
3079
			$sth = $this->db->prepare($query);
3080
			$sth->execute(array(':offset' => $offset));
3081
		} else {
3082
			if ($globalDBdriver == 'mysql') {
3083
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3084
				FROM `spotter_output`, airport 
3085
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
3086
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3087
			} else {
3088
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3089
				FROM spotter_output, airport 
3090
				WHERE spotter_output.airline_icao <> '' AND  airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
3091
				GROUP BY spotter_output.airline_icao,real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3092
			}
3093
			$sth = $this->db->prepare($query);
3094
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3095
		}
3096
		
3097
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3098
	}
3099
3100
3101
	/**
3102
	* Gets a list of all dates
3103
	*
3104
	* @return Array list of date names
3105
	*
3106
	*/
3107
	public function getAllDates()
3108
	{
3109
		global $globalTimezone, $globalDBdriver;
3110
		if ($globalTimezone != '') {
3111
			date_default_timezone_set($globalTimezone);
3112
			$datetime = new DateTime();
3113
			$offset = $datetime->format('P');
3114
		} else $offset = '+00:00';
3115
3116
		if ($globalDBdriver == 'mysql') {
3117
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3118
								FROM spotter_output
3119
								WHERE spotter_output.date <> '' 
3120
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3121
		} else {
3122
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3123
								FROM spotter_output
3124
								WHERE spotter_output.date <> '' 
3125
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3126
		}
3127
		
3128
		$sth = $this->db->prepare($query);
3129
		$sth->execute(array(':offset' => $offset));
3130
    
3131
		$date_array = array();
3132
		$temp_array = array();
3133
		
3134
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3135
		{
3136
			$temp_array['date'] = $row['date'];
3137
3138
			$date_array[] = $temp_array;
3139
		}
3140
3141
		return $date_array;
3142
	}
3143
	
3144
	
3145
	
3146
	/**
3147
	* Gets all route combinations
3148
	*
3149
	* @return Array the route list
3150
	*
3151
	*/
3152
	public function getAllRoutes()
3153
	{
3154
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route,  spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao 
3155
				FROM spotter_output
3156
				WHERE spotter_output.ident <> '' 
3157
				GROUP BY route
3158
				ORDER BY route ASC";
3159
3160
		$sth = $this->db->prepare($query);
3161
		$sth->execute();
3162
3163
		$routes_array = array();
3164
		$temp_array = array();
3165
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3166
		{
3167
			$temp_array['route'] = $row['route'];
3168
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3169
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3170
3171
			$routes_array[] = $temp_array;
3172
		}
3173
		return $routes_array;
3174
	}
3175
3176
	/**
3177
	* Update ident spotter data
3178
	*
3179
	* @param String $flightaware_id the ID from flightaware
3180
	* @param String $ident the flight ident
3181
	* @return String success or false
3182
	*
3183
	*/	
3184
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3185
	{
3186
		if (!is_numeric(substr($ident, 0, 3)))
3187
		{
3188
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3189
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3190
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3191
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3192
			} else {
3193
				$airline_array = $this->getAllAirlineInfo("NA");
3194
			}
3195
			if (count($airline_array) == 0) {
3196
				$airline_array = $this->getAllAirlineInfo("NA");
3197
			}
3198
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3199
				$airline_array = $this->getAllAirlineInfo("NA");
3200
			}
3201
		} else {
3202
			$airline_array = $this->getAllAirlineInfo("NA");
3203
		}
3204
                $airline_name = $airline_array[0]['name'];
3205
                $airline_icao = $airline_array[0]['icao'];
3206
                $airline_country = $airline_array[0]['country'];
3207
                $airline_type = $airline_array[0]['type'];
3208
3209
3210
		$query = 'UPDATE spotter_output SET ident = :ident, airline_name = :airline_name, airline_icao = :airline_icao, airline_country = :airline_country, airline_type = :airline_type WHERE flightaware_id = :flightaware_id';
3211
                $query_values = array(':flightaware_id' => $flightaware_id,':ident' => $ident,':airline_name' => $airline_name,':airline_icao' => $airline_icao,':airline_country' => $airline_country,':airline_type' => $airline_type);
3212
3213
		try {
3214
			$sth = $this->db->prepare($query);
3215
			$sth->execute($query_values);
3216
		} catch (PDOException $e) {
3217
			return "error : ".$e->getMessage();
3218
		}
3219
		
3220
		return "success";
3221
3222
	}
3223
	/**
3224
	* Update latest spotter data
3225
	*
3226
	* @param String $flightaware_id the ID from flightaware
3227
	* @param String $ident the flight ident
3228
	* @param String $arrival_airport_icao the arrival airport
3229
	* @return String success or false
3230
	*
3231
	*/	
3232
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3233
	{
3234
		if ($groundspeed == '') $groundspeed = NULL;
3235
		$query = 'UPDATE spotter_output SET ident = :ident, last_latitude = :last_latitude, last_longitude = :last_longitude, last_altitude = :last_altitude, last_ground = :last_ground, last_seen = :last_seen, real_arrival_airport_icao = :real_arrival_airport_icao, real_arrival_airport_time = :real_arrival_airport_time, last_ground_speed = :last_ground_speed WHERE flightaware_id = :flightaware_id';
3236
                $query_values = array(':flightaware_id' => $flightaware_id,':real_arrival_airport_icao' => $arrival_airport_icao,':last_latitude' => $latitude,':last_longitude' => $longitude, ':last_altitude' => $altitude,':last_ground_speed' => $groundspeed,':last_seen' => $date,':real_arrival_airport_time' => $arrival_airport_time, ':last_ground' => $ground, ':ident' => $ident);
3237
3238
		try {
3239
			$sth = $this->db->prepare($query);
3240
			$sth->execute($query_values);
3241
		} catch (PDOException $e) {
3242
			return "error : ".$e->getMessage();
3243
		}
3244
		
3245
		return "success";
3246
3247
	}
3248
3249
	/**
3250
	* Adds a new spotter data
3251
	*
3252
	* @param String $flightaware_id the ID from flightaware
3253
	* @param String $ident the flight ident
3254
	* @param String $aircraft_icao the aircraft type
3255
	* @param String $departure_airport_icao the departure airport
3256
	* @param String $arrival_airport_icao the arrival airport
3257
	* @param String $latitude latitude of flight
3258
	* @param String $longitude latitude of flight
3259
	* @param String $waypoints waypoints of flight
3260
	* @param String $altitude altitude of flight
3261
	* @param String $heading heading of flight
3262
	* @param String $groundspeed speed of flight
3263
	* @param String $date date of flight
3264
	* @param String $departure_airport_time departure time of flight
3265
	* @param String $arrival_airport_time arrival time of flight
3266
	* @param String $squawk squawk code of flight
3267
	* @param String $route_stop route stop of flight
3268
	* @param String $highlight highlight or not
3269
	* @param String $ModeS ModesS code of flight
3270
	* @param String $registration registration code of flight
3271
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3272
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3273
	* @param String $verticalrate vertival rate of flight
3274
	* @return String success or false
3275
	*/
3276
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '')
3277
	{
3278
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3279
		
3280
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3281
		$Image = new Image($this->db);
3282
		$Common = new Common();
3283
		
3284
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3285
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3286
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3287
		if (!isset($globalVAM)) $globalVAM = FALSE;
3288
		date_default_timezone_set('UTC');
3289
		
3290
		//getting the registration
3291
		if ($flightaware_id != "" && $registration == '')
3292
		{
3293
			if (!is_string($flightaware_id))
3294
			{
3295
				return false;
3296
			} else {
3297
				if ($ModeS != '') {
3298
					$timeelapsed = microtime(true);
3299
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3300
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3301
				} else {
3302
					$myhex = explode('-',$flightaware_id);
3303
					if (count($myhex) > 0) {
3304
						$timeelapsed = microtime(true);
3305
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3306
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3307
					}
3308
				}
3309
			}
3310
		}
3311
		$fromsource = NULL;
3312
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3313
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3314
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3315
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3316
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3317
		//getting the airline information
3318
		if ($ident != "")
3319
		{
3320
			if (!is_string($ident))
3321
			{
3322
				return false;
3323
			} else {
3324
				if (!is_numeric(substr($ident, 0, 3)) && !((substr($ident, 0, 3) == 'OGN' || substr($ident, 0, 3) == 'FLR' || substr($ident, 0, 3) == 'ICA') && $format_source == 'aprs'))
3325
				{
3326
					$timeelapsed = microtime(true);
3327
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3328
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3329
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3330
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3331
					} else {
3332
						$airline_array = $this->getAllAirlineInfo("NA");
3333
					}
3334
					if (count($airline_array) == 0) {
3335
						$airline_array = $this->getAllAirlineInfo("NA");
3336
					}
3337
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3338
						$airline_array = $this->getAllAirlineInfo("NA");
3339
					}
3340
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3341
3342
				} else {
3343
					$timeelapsed = microtime(true);
3344
					$airline_array = $this->getAllAirlineInfo("NA");
3345
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3346
				}
3347
			}
3348
		} else $airline_array = array();
3349
		
3350
		//getting the aircraft information
3351
		$aircraft_array = array();
3352
		if ($aircraft_icao != "")
3353
		{
3354
			if (!is_string($aircraft_icao))
3355
			{
3356
				return false;
3357
			} else {
3358
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3359
				{
3360
					$timeelapsed = microtime(true);
3361
					$aircraft_array = $this->getAllAircraftInfo("NA");
3362
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3363
				} else {
3364
					$timeelapsed = microtime(true);
3365
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3366
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3367
				}
3368
			}
3369
		} else {
3370
			if ($ModeS != '') {
3371
				$timeelapsed = microtime(true);
3372
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3373
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3374
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3375
				{
3376
					$timeelapsed = microtime(true);
3377
					$aircraft_array = $this->getAllAircraftInfo("NA");
3378
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3379
				} else {
3380
					$timeelapsed = microtime(true);
3381
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3382
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3383
				}
3384
			}
3385
		}
3386
		
3387
		//getting the departure airport information
3388
		$departure_airport_array = array();
3389
		$departure_airport_icao = trim($departure_airport_icao);
3390
		if ($departure_airport_icao != "")
3391
		{
3392
			if (!is_string($departure_airport_icao))
3393
			{
3394
				return false;
3395
			} else {
3396
				$timeelapsed = microtime(true);
3397
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3398
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3399
			}
3400
		}
3401
		
3402
		//getting the arrival airport information
3403
		$arrival_airport_array = array();
3404
		$arrival_airport_icao = trim($arrival_airport_icao);
3405
		if ($arrival_airport_icao != "")
3406
		{
3407
			if (!is_string($arrival_airport_icao))
3408
			{
3409
				return false;
3410
			} else {
3411
				$timeelapsed = microtime(true);
3412
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3413
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3414
			}
3415
		}
3416
3417
						
3418
		if ($latitude != "")
3419
		{
3420
			if (!is_numeric($latitude))
3421
			{
3422
				return false;
3423
			}
3424
		}
3425
		
3426
		if ($longitude != "")
3427
		{
3428
			if (!is_numeric($longitude))
3429
			{
3430
				return false;
3431
			}
3432
		}
3433
		
3434
		if ($waypoints != "")
3435
		{
3436
			if (!is_string($waypoints))
3437
			{
3438
				return false;
3439
			}
3440
		}
3441
		
3442
		if ($altitude != "")
3443
		{
3444
			if (!is_numeric($altitude))
3445
			{
3446
				return false;
3447
			}
3448
		} else $altitude = 0;
3449
		
3450
		if ($heading != "")
3451
		{
3452
			if (!is_numeric($heading))
3453
			{
3454
				return false;
3455
			}
3456
		}
3457
		
3458
		if ($groundspeed != "")
3459
		{
3460
			if (!is_numeric($groundspeed))
3461
			{
3462
				return false;
3463
			}
3464
		}
3465
3466
    
3467
		if ($date == "")
3468
		{
3469
			$date = date("Y-m-d H:i:s", time());
3470
		}
3471
3472
		//getting the aircraft image
3473
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3474
		{
3475
			$timeelapsed = microtime(true);
3476
			$image_array = $Image->getSpotterImage($registration);
3477
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3478
			if (!isset($image_array[0]['registration']))
3479
			{
3480
				//echo "Add image !!!! \n";
3481
				$Image->addSpotterImage($registration);
3482
			}
3483
			$timeelapsed = microtime(true);
3484
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3485
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3486
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3487
		}
3488
    
3489
		if ($globalIVAO && $aircraft_icao != '')
3490
		{
3491
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3492
            		else $airline_icao = '';
3493
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3494
			if (!isset($image_array[0]['registration']))
3495
			{
3496
				//echo "Add image !!!! \n";
3497
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3498
			}
3499
		}
3500
    
3501
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3502
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3503
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3504
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3505
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3506
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3507
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3508
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3509
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3510
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3511
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3512
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3513
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3514
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3515
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3516
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3517
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3518
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3519
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3520
	
3521
		if (count($airline_array) == 0) 
3522
		{
3523
                        $airline_array = $this->getAllAirlineInfo('NA');
3524
                }
3525
                if (count($aircraft_array) == 0) 
3526
                {
3527
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3528
                }
3529
                if (count($departure_airport_array) == 0) 
3530
                {
3531
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3532
                }
3533
                if (count($arrival_airport_array) == 0) 
3534
                {
3535
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3536
                }
3537
                if ($registration == '') $registration = 'NA';
3538
                if ($latitude == '' && $longitude == '') {
3539
            		$latitude = 0;
3540
            		$longitude = 0;
3541
            	}
3542
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3543
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3544
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3545
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3546
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3547
                $query  = "INSERT INTO spotter_output (flightaware_id, ident, registration, airline_name, airline_icao, airline_country, airline_type, aircraft_icao, aircraft_name, aircraft_manufacturer, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, latitude, longitude, waypoints, altitude, heading, ground_speed, date, departure_airport_time, arrival_airport_time, squawk, route_stop,highlight,ModeS, pilot_id, pilot_name, verticalrate, owner_name, ground, format_source, source_name) 
3548
                VALUES (:flightaware_id,:ident,:registration,:airline_name,:airline_icao,:airline_country,:airline_type,:aircraft_icao,:aircraft_type,:aircraft_manufacturer,:departure_airport_icao,:departure_airport_name,:departure_airport_city,:departure_airport_country, :arrival_airport_icao, :arrival_airport_name, :arrival_airport_city, :arrival_airport_country, :latitude,:longitude,:waypoints,:altitude,:heading,:groundspeed,:date, :departure_airport_time, :arrival_airport_time, :squawk, :route_stop, :highlight, :ModeS, :pilot_id, :pilot_name, :verticalrate, :owner_name,:ground, :format_source, :source_name)";
3549
3550
                $airline_name = $airline_array[0]['name'];
3551
                $airline_icao = $airline_array[0]['icao'];
3552
                $airline_country = $airline_array[0]['country'];
3553
                $airline_type = $airline_array[0]['type'];
3554
		if ($airline_type == '') {
3555
			$timeelapsed = microtime(true);
3556
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3557
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3558
		}
3559
		if ($airline_type == null) $airline_type = '';
3560
                $aircraft_type = $aircraft_array[0]['type'];
3561
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3562
                $departure_airport_name = $departure_airport_array[0]['name'];
3563
                $departure_airport_city = $departure_airport_array[0]['city'];
3564
                $departure_airport_country = $departure_airport_array[0]['country'];
3565
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3566
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3567
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3568
                $query_values = array(':flightaware_id' => $flightaware_id,':ident' => $ident, ':registration' => $registration,':airline_name' => $airline_name,':airline_icao' => $airline_icao,':airline_country' => $airline_country,':airline_type' => $airline_type,':aircraft_icao' => $aircraft_icao,':aircraft_type' => $aircraft_type,':aircraft_manufacturer' => $aircraft_manufacturer,':departure_airport_icao' => $departure_airport_icao,':departure_airport_name' => $departure_airport_name,':departure_airport_city' => $departure_airport_city,':departure_airport_country' => $departure_airport_country,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_name' => $arrival_airport_name,':arrival_airport_city' => $arrival_airport_city,':arrival_airport_country' => $arrival_airport_country,':latitude' => $latitude,':longitude' => $longitude, ':waypoints' => $waypoints,':altitude' => $altitude,':heading' => $heading,':groundspeed' => $groundspeed,':date' => $date,':departure_airport_time' => $departure_airport_time,':arrival_airport_time' => $arrival_airport_time, ':squawk' => $squawk, ':route_stop' => $route_stop, ':highlight' => $highlight, ':ModeS' => $ModeS, ':pilot_id' => $pilot_id, ':pilot_name' => $pilot_name, ':verticalrate' => $verticalrate, ':owner_name' => $aircraft_owner, ':format_source' => $format_source, ':ground' => $ground, ':source_name' => $source_name);
3569
3570
		try {
3571
		        
3572
			$sth = $this->db->prepare($query);
3573
			$sth->execute($query_values);
3574
			$this->db = null;
3575
		} catch (PDOException $e) {
3576
		    return "error : ".$e->getMessage();
3577
		}
3578
		
3579
		return "success";
3580
3581
	}
3582
	
3583
  
3584
	/**
3585
	* Gets the aircraft ident within the last hour
3586
	*
3587
	* @return String the ident
3588
	*
3589
	*/
3590
	public function getIdentFromLastHour($ident)
3591
	{
3592
		global $globalDBdriver, $globalTimezone;
3593
		if ($globalDBdriver == 'mysql') {
3594
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3595
								WHERE spotter_output.ident = :ident 
3596
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3597
								AND spotter_output.date < UTC_TIMESTAMP()";
3598
			$query_data = array(':ident' => $ident);
3599
		} else {
3600
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3601
								WHERE spotter_output.ident = :ident 
3602
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3603
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3604
			$query_data = array(':ident' => $ident);
3605
    		}
3606
		
3607
		$sth = $this->db->prepare($query);
3608
		$sth->execute($query_data);
3609
    		$ident_result='';
3610
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3611
		{
3612
			$ident_result = $row['ident'];
3613
		}
3614
3615
		return $ident_result;
3616
	}
3617
	
3618
	
3619
	/**
3620
	* Gets the aircraft data from the last 20 seconds
3621
	*
3622
	* @return Array the spotter data
3623
	*
3624
	*/
3625
	public function getRealTimeData($q = '')
3626
	{
3627
		global $globalDBdriver;
3628
		$additional_query = '';
3629
		if ($q != "")
3630
		{
3631
			if (!is_string($q))
3632
			{
3633
				return false;
3634
			} else {
3635
				$q_array = explode(" ", $q);
3636
				foreach ($q_array as $q_item){
3637
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3638
					$additional_query .= " AND (";
3639
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3640
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3641
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3642
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3643
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3644
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3645
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3646
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3647
					$additional_query .= ")";
3648
				}
3649
			}
3650
		}
3651
		if ($globalDBdriver == 'mysql') {
3652
			$query  = "SELECT spotter_output.* FROM spotter_output 
3653
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3654
				AND spotter_output.date < UTC_TIMESTAMP()";
3655
		} else {
3656
			$query  = "SELECT spotter_output.* FROM spotter_output 
3657
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3658
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3659
		}
3660
		$spotter_array = $this->getDataFromDB($query, array());
3661
3662
		return $spotter_array;
3663
	}
3664
	
3665
	
3666
	
3667
	 /**
3668
	* Gets all airlines that have flown over
3669
	*
3670
	* @return Array the airline list
3671
	*
3672
	*/
3673
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3674
	{
3675
		global $globalDBdriver;
3676
		$filter_query = $this->getFilter($filters,true,true);
3677
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3678
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA' ";
3679
		if ($olderthanmonths > 0) {
3680
			if ($globalDBdriver == 'mysql') {
3681
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3682
			} else {
3683
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3684
			}
3685
		}
3686
                if ($sincedate != '') {
3687
			if ($globalDBdriver == 'mysql') {
3688
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3689
			} else {
3690
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3691
			}
3692
		}
3693
		$query .= "GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3694
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3695
		
3696
		$sth = $this->db->prepare($query);
3697
		$sth->execute();
3698
 
3699
		$airline_array = array();
3700
		$temp_array = array();
3701
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3702
		{
3703
			$temp_array['airline_name'] = $row['airline_name'];
3704
			$temp_array['airline_icao'] = $row['airline_icao'];
3705
			$temp_array['airline_count'] = $row['airline_count'];
3706
			$temp_array['airline_country'] = $row['airline_country'];
3707
			$airline_array[] = $temp_array;
3708
		}
3709
		return $airline_array;
3710
	}
3711
3712
	 /**
3713
	* Gets all pilots that have flown over
3714
	*
3715
	* @return Array the pilots list
3716
	*
3717
	*/
3718
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3719
	{
3720
		global $globalDBdriver;
3721
		$filter_query = $this->getFilter($filters,true,true);
3722
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
3723
		 			FROM spotter_output".$filter_query." spotter_output.pilot_id <> '' ";
3724
                if ($olderthanmonths > 0) {
3725
            		if ($globalDBdriver == 'mysql') {
3726
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3727
			} else {
3728
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3729
			}
3730
		}
3731
                if ($sincedate != '') {
3732
            		if ($globalDBdriver == 'mysql') {
3733
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3734
			} else {
3735
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3736
			}
3737
		}
3738
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
3739
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3740
      
3741
		
3742
		$sth = $this->db->prepare($query);
3743
		$sth->execute();
3744
      
3745
		$airline_array = array();
3746
		$temp_array = array();
3747
        
3748
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3749
		{
3750
			$temp_array['pilot_name'] = $row['pilot_name'];
3751
			$temp_array['pilot_id'] = $row['pilot_id'];
3752
			$temp_array['pilot_count'] = $row['pilot_count'];
3753
			$temp_array['format_source'] = $row['format_source'];
3754
			$airline_array[] = $temp_array;
3755
		}
3756
		return $airline_array;
3757
	}
3758
	
3759
		 /**
3760
	* Gets all pilots that have flown over
3761
	*
3762
	* @return Array the pilots list
3763
	*
3764
	*/
3765
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
3766
	{
3767
		global $globalDBdriver;
3768
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
3769
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
3770
                if ($olderthanmonths > 0) {
3771
            		if ($globalDBdriver == 'mysql') {
3772
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3773
			} else {
3774
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3775
			}
3776
		}
3777
                if ($sincedate != '') {
3778
            		if ($globalDBdriver == 'mysql') {
3779
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3780
			} else {
3781
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3782
			}
3783
		}
3784
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
3785
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3786
      
3787
		
3788
		$sth = $this->db->prepare($query);
3789
		$sth->execute();
3790
      
3791
		$airline_array = array();
3792
		$temp_array = array();
3793
        
3794
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3795
		{
3796
			$temp_array['pilot_name'] = $row['pilot_name'];
3797
			$temp_array['pilot_id'] = $row['pilot_id'];
3798
			$temp_array['pilot_count'] = $row['pilot_count'];
3799
			$temp_array['airline_icao'] = $row['airline_icao'];
3800
			$temp_array['format_source'] = $row['format_source'];
3801
			$airline_array[] = $temp_array;
3802
		}
3803
		return $airline_array;
3804
	}
3805
	
3806
	 /**
3807
	* Gets all owner that have flown over
3808
	*
3809
	* @return Array the pilots list
3810
	*
3811
	*/
3812
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3813
	{
3814
		global $globalDBdriver;
3815
		$filter_query = $this->getFilter($filters,true,true);
3816
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3817
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3818
                if ($olderthanmonths > 0) {
3819
            		if ($globalDBdriver == 'mysql') {
3820
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3821
			} else {
3822
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3823
			}
3824
		}
3825
                if ($sincedate != '') {
3826
            		if ($globalDBdriver == 'mysql') {
3827
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3828
			} else {
3829
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3830
			}
3831
		}
3832
		$query .= "GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
3833
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3834
      
3835
		
3836
		$sth = $this->db->prepare($query);
3837
		$sth->execute();
3838
      
3839
		$airline_array = array();
3840
		$temp_array = array();
3841
        
3842
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3843
		{
3844
			$temp_array['owner_name'] = $row['owner_name'];
3845
			$temp_array['owner_count'] = $row['owner_count'];
3846
			$airline_array[] = $temp_array;
3847
		}
3848
		return $airline_array;
3849
	}
3850
	
3851
	 /**
3852
	* Gets all owner that have flown over
3853
	*
3854
	* @return Array the pilots list
3855
	*
3856
	*/
3857
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3858
	{
3859
		global $globalDBdriver;
3860
		$filter_query = $this->getFilter($filters,true,true);
3861
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3862
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3863
                if ($olderthanmonths > 0) {
3864
            		if ($globalDBdriver == 'mysql') {
3865
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3866
			} else {
3867
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3868
			}
3869
		}
3870
                if ($sincedate != '') {
3871
            		if ($globalDBdriver == 'mysql') {
3872
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3873
			} else {
3874
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3875
			}
3876
		}
3877
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
3878
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3879
      
3880
		
3881
		$sth = $this->db->prepare($query);
3882
		$sth->execute();
3883
      
3884
		$airline_array = array();
3885
		$temp_array = array();
3886
        
3887
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3888
		{
3889
			$temp_array['owner_name'] = $row['owner_name'];
3890
			$temp_array['owner_count'] = $row['owner_count'];
3891
			$temp_array['airline_icao'] = $row['airline_icao'];
3892
			$airline_array[] = $temp_array;
3893
		}
3894
		return $airline_array;
3895
	}
3896
3897
	/**
3898
	* Gets all airlines that have flown over by aircraft
3899
	*
3900
	* @return Array the airline list
3901
	*
3902
	*/
3903
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
3904
	{
3905
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3906
		$filter_query = $this->getFilter($filters,true,true);
3907
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3908
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
3909
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
3910
			    ORDER BY airline_count DESC";
3911
      
3912
		
3913
		$sth = $this->db->prepare($query);
3914
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3915
      
3916
		$airline_array = array();
3917
		$temp_array = array();
3918
        
3919
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3920
		{
3921
			$temp_array['airline_name'] = $row['airline_name'];
3922
			$temp_array['airline_icao'] = $row['airline_icao'];
3923
			$temp_array['airline_count'] = $row['airline_count'];
3924
			$temp_array['airline_country'] = $row['airline_country'];
3925
3926
			$airline_array[] = $temp_array;
3927
		}
3928
3929
		return $airline_array;
3930
	}
3931
3932
3933
	/**
3934
	* Gets all airline countries that have flown over by aircraft
3935
	*
3936
	* @return Array the airline country list
3937
	*
3938
	*/
3939
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
3940
	{
3941
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3942
		$filter_query = $this->getFilter($filters,true,true);
3943
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3944
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
3945
                    GROUP BY spotter_output.airline_country
3946
					ORDER BY airline_country_count DESC
3947
					LIMIT 10 OFFSET 0";
3948
      
3949
		
3950
		$sth = $this->db->prepare($query);
3951
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3952
      
3953
		$airline_country_array = array();
3954
		$temp_array = array();
3955
        
3956
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3957
		{
3958
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3959
			$temp_array['airline_country'] = $row['airline_country'];
3960
 
3961
			$airline_country_array[] = $temp_array;
3962
		}
3963
		return $airline_country_array;
3964
	}
3965
3966
3967
	
3968
	
3969
	/**
3970
	* Gets all airlines that have flown over by airport
3971
	*
3972
	* @return Array the airline list
3973
	*
3974
	*/
3975
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
3976
	{
3977
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
3978
		$filter_query = $this->getFilter($filters,true,true);
3979
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3980
		    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao ) 
3981
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
3982
		    ORDER BY airline_count DESC";
3983
      
3984
		
3985
		$sth = $this->db->prepare($query);
3986
		$sth->execute(array(':airport_icao' => $airport_icao));
3987
      
3988
		$airline_array = array();
3989
		$temp_array = array();
3990
        
3991
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3992
		{
3993
			$temp_array['airline_name'] = $row['airline_name'];
3994
			$temp_array['airline_icao'] = $row['airline_icao'];
3995
			$temp_array['airline_count'] = $row['airline_count'];
3996
			$temp_array['airline_country'] = $row['airline_country'];
3997
3998
			$airline_array[] = $temp_array;
3999
		}
4000
		return $airline_array;
4001
	}
4002
4003
4004
	/**
4005
	* Gets all airline countries that have flown over by airport icao
4006
	*
4007
	* @return Array the airline country list
4008
	*
4009
	*/
4010
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4011
	{
4012
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4013
		$filter_query = $this->getFilter($filters,true,true);
4014
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4015
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
4016
					GROUP BY spotter_output.airline_country
4017
					ORDER BY airline_country_count DESC
4018
					LIMIT 10 OFFSET 0";
4019
4020
		
4021
		$sth = $this->db->prepare($query);
4022
		$sth->execute(array(':airport_icao' => $airport_icao));
4023
4024
		$airline_country_array = array();
4025
		$temp_array = array();
4026
        
4027
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4028
		{
4029
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4030
			$temp_array['airline_country'] = $row['airline_country'];
4031
 
4032
			$airline_country_array[] = $temp_array;
4033
		}
4034
		return $airline_country_array;
4035
	}
4036
4037
4038
	/**
4039
	* Gets all airlines that have flown over by aircraft manufacturer
4040
	*
4041
	* @return Array the airline list
4042
	*
4043
	*/
4044
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4045
	{
4046
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4047
		$filter_query = $this->getFilter($filters,true,true);
4048
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4049
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4050
					GROUP BY spotter_output.airline_name
4051
					ORDER BY airline_count DESC";
4052
 
4053
		$sth = $this->db->prepare($query);
4054
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4055
 
4056
		$airline_array = array();
4057
		$temp_array = array();
4058
        
4059
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4060
		{
4061
			$temp_array['airline_name'] = $row['airline_name'];
4062
			$temp_array['airline_icao'] = $row['airline_icao'];
4063
			$temp_array['airline_count'] = $row['airline_count'];
4064
			$temp_array['airline_country'] = $row['airline_country'];
4065
4066
			$airline_array[] = $temp_array;
4067
		}
4068
		return $airline_array;
4069
	}
4070
4071
4072
4073
	/**
4074
	* Gets all airline countries that have flown over by aircraft manufacturer
4075
	*
4076
	* @return Array the airline country list
4077
	*
4078
	*/
4079
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4080
	{
4081
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4082
		$filter_query = $this->getFilter($filters,true,true);
4083
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4084
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4085
					GROUP BY spotter_output.airline_country
4086
					ORDER BY airline_country_count DESC
4087
					LIMIT 10 OFFSET 0";
4088
      
4089
		
4090
		$sth = $this->db->prepare($query);
4091
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4092
4093
		$airline_country_array = array();
4094
		$temp_array = array();
4095
        
4096
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4097
		{
4098
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4099
			$temp_array['airline_country'] = $row['airline_country'];
4100
			$airline_country_array[] = $temp_array;
4101
		}
4102
		return $airline_country_array;
4103
	}
4104
4105
4106
	/**
4107
	* Gets all airlines that have flown over by date
4108
	*
4109
	* @return Array the airline list
4110
	*
4111
	*/
4112
	public function countAllAirlinesByDate($date,$filters = array())
4113
	{
4114
		global $globalTimezone, $globalDBdriver;
4115
		$filter_query = $this->getFilter($filters,true,true);
4116
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4117
		if ($globalTimezone != '') {
4118
			date_default_timezone_set($globalTimezone);
4119
			$datetime = new DateTime($date);
4120
			$offset = $datetime->format('P');
4121
		} else $offset = '+00:00';
4122
4123
		if ($globalDBdriver == 'mysql') {
4124
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4125
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4126
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4127
					ORDER BY airline_count DESC";
4128
		} else {
4129
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4130
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4131
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4132
					ORDER BY airline_count DESC";
4133
		}
4134
		
4135
		$sth = $this->db->prepare($query);
4136
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4137
4138
		$airline_array = array();
4139
		$temp_array = array();
4140
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4141
		{
4142
			$temp_array['airline_name'] = $row['airline_name'];
4143
			$temp_array['airline_icao'] = $row['airline_icao'];
4144
			$temp_array['airline_count'] = $row['airline_count'];
4145
			$temp_array['airline_country'] = $row['airline_country'];
4146
 
4147
			$airline_array[] = $temp_array;
4148
		}
4149
4150
		return $airline_array;
4151
	}	
4152
	
4153
	
4154
	/**
4155
	* Gets all airline countries that have flown over by date
4156
	*
4157
	* @return Array the airline country list
4158
	*
4159
	*/
4160
	public function countAllAirlineCountriesByDate($date,$filters = array())
4161
	{
4162
		global $globalTimezone, $globalDBdriver;
4163
		$filter_query = $this->getFilter($filters,true,true);
4164
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4165
		if ($globalTimezone != '') {
4166
			date_default_timezone_set($globalTimezone);
4167
			$datetime = new DateTime($date);
4168
			$offset = $datetime->format('P');
4169
		} else $offset = '+00:00';
4170
		
4171
		if ($globalDBdriver == 'mysql') {
4172
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4173
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4174
					GROUP BY spotter_output.airline_country
4175
					ORDER BY airline_country_count DESC
4176
					LIMIT 10 OFFSET 0";
4177
		} else {
4178
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4179
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4180
					GROUP BY spotter_output.airline_country
4181
					ORDER BY airline_country_count DESC
4182
					LIMIT 10 OFFSET 0";
4183
		}
4184
4185
		$sth = $this->db->prepare($query);
4186
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4187
 
4188
		$airline_country_array = array();
4189
		$temp_array = array();
4190
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4191
		{
4192
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4193
			$temp_array['airline_country'] = $row['airline_country'];
4194
4195
			$airline_country_array[] = $temp_array;
4196
		}
4197
		return $airline_country_array;
4198
	}
4199
4200
4201
	/**
4202
	* Gets all airlines that have flown over by ident/callsign
4203
	*
4204
	* @return Array the airline list
4205
	*
4206
	*/
4207
	public function countAllAirlinesByIdent($ident,$filters = array())
4208
	{
4209
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4210
		$filter_query = $this->getFilter($filters,true,true);
4211
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4212
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4213
				GROUP BY spotter_output.airline_name
4214
				ORDER BY airline_count DESC";
4215
      
4216
		
4217
		$sth = $this->db->prepare($query);
4218
		$sth->execute(array(':ident' => $ident));
4219
      
4220
		$airline_array = array();
4221
		$temp_array = array();
4222
        
4223
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4224
		{
4225
			$temp_array['airline_name'] = $row['airline_name'];
4226
			$temp_array['airline_icao'] = $row['airline_icao'];
4227
			$temp_array['airline_count'] = $row['airline_count'];
4228
			$temp_array['airline_country'] = $row['airline_country'];
4229
4230
			$airline_array[] = $temp_array;
4231
		}
4232
		return $airline_array;
4233
	}
4234
4235
	/**
4236
	* Gets all airlines that have flown over by route
4237
	*
4238
	* @return Array the airline list
4239
	*
4240
	*/
4241
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4242
	{
4243
		$filter_query = $this->getFilter($filters,true,true);
4244
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4245
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4246
4247
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4248
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4249
					GROUP BY spotter_output.airline_name
4250
					ORDER BY airline_count DESC";
4251
      
4252
		
4253
		$sth = $this->db->prepare($query);
4254
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4255
      
4256
		$airline_array = array();
4257
		$temp_array = array();
4258
        
4259
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4260
		{
4261
			$temp_array['airline_name'] = $row['airline_name'];
4262
			$temp_array['airline_icao'] = $row['airline_icao'];
4263
			$temp_array['airline_count'] = $row['airline_count'];
4264
			$temp_array['airline_country'] = $row['airline_country'];
4265
4266
			$airline_array[] = $temp_array;
4267
		}
4268
		return $airline_array;
4269
	}
4270
4271
	/**
4272
	* Gets all airline countries that have flown over by route
4273
	*
4274
	* @return Array the airline country list
4275
	*
4276
	*/
4277
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4278
	{
4279
		$filter_query = $this->getFilter($filters,true,true);
4280
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4281
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4282
      
4283
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4284
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4285
				GROUP BY spotter_output.airline_country
4286
				ORDER BY airline_country_count DESC
4287
				LIMIT 10 OFFSET 0";
4288
      
4289
		
4290
		$sth = $this->db->prepare($query);
4291
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4292
      
4293
		$airline_country_array = array();
4294
		$temp_array = array();
4295
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4296
		{
4297
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4298
			$temp_array['airline_country'] = $row['airline_country'];
4299
4300
			$airline_country_array[] = $temp_array;
4301
		}
4302
4303
		return $airline_country_array;
4304
	}
4305
4306
4307
	/**
4308
	* Gets all airlines that have flown over by country
4309
	*
4310
	* @return Array the airline list
4311
	*
4312
	*/
4313
	public function countAllAirlinesByCountry($country,$filters = array())
4314
	{
4315
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4316
		$filter_query = $this->getFilter($filters,true,true);
4317
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4318
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4319
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4320
			    ORDER BY airline_count DESC";
4321
      
4322
		
4323
		$sth = $this->db->prepare($query);
4324
		$sth->execute(array(':country' => $country));
4325
4326
		$airline_array = array();
4327
		$temp_array = array();
4328
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4329
		{
4330
			$temp_array['airline_name'] = $row['airline_name'];
4331
			$temp_array['airline_icao'] = $row['airline_icao'];
4332
			$temp_array['airline_count'] = $row['airline_count'];
4333
			$temp_array['airline_country'] = $row['airline_country'];
4334
 
4335
			$airline_array[] = $temp_array;
4336
		}
4337
		return $airline_array;
4338
	}
4339
4340
4341
	/**
4342
	* Gets all airline countries that have flown over by country
4343
	*
4344
	* @return Array the airline country list
4345
	*
4346
	*/
4347
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4348
	{
4349
		$filter_query = $this->getFilter($filters,true,true);
4350
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4351
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4352
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
4353
				GROUP BY spotter_output.airline_country
4354
				ORDER BY airline_country_count DESC
4355
				LIMIT 10 OFFSET 0";
4356
      
4357
		
4358
		$sth = $this->db->prepare($query);
4359
		$sth->execute(array(':country' => $country));
4360
4361
		$airline_country_array = array();
4362
		$temp_array = array();
4363
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4364
		{
4365
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4366
			$temp_array['airline_country'] = $row['airline_country'];
4367
4368
			$airline_country_array[] = $temp_array;
4369
		}
4370
		return $airline_country_array;
4371
	}
4372
4373
4374
	/**
4375
	* Gets all airlines countries
4376
	*
4377
	* @return Array the airline country list
4378
	*
4379
	*/
4380
	public function countAllAirlineCountries($limit = true, $filters = array())
4381
	{
4382
		$filter_query = $this->getFilter($filters,true,true);
4383
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4384
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA' 
4385
					GROUP BY spotter_output.airline_country
4386
					ORDER BY airline_country_count DESC";
4387
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4388
      
4389
		$sth = $this->db->prepare($query);
4390
		$sth->execute();
4391
4392
		$airline_array = array();
4393
		$temp_array = array();
4394
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4395
		{
4396
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4397
			$temp_array['airline_country'] = $row['airline_country'];
4398
4399
			$airline_array[] = $temp_array;
4400
		}
4401
		return $airline_array;
4402
	}
4403
4404
	/**
4405
	* Gets all number of flight over countries
4406
	*
4407
	* @return Array the airline country list
4408
	*
4409
	*/
4410
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4411
	{
4412
		global $globalDBdriver;
4413
		//$filter_query = $this->getFilter($filters,true,true);
4414
		$Connection= new Connection($this->db);
4415
		if (!$Connection->tableExists('countries')) return array();
4416
		/*
4417
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4418
					FROM countries c, spotter_output s
4419
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4420
		*/
4421
/*
4422
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4423
					FROM countries c, spotter_live s
4424
					WHERE c.iso2 = s.over_country ";
4425
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spottrer_live) l ON c.iso2 = l.over_country ";
4426
*/
4427
		require_once('class.SpotterLive.php');
4428
		$SpotterLive = new SpotterLive();
4429
		$filter_query = $SpotterLive->getFilter($filters,true,true);
4430
		$filter_query .= ' over_country IS NOT NULL';
4431
                if ($olderthanmonths > 0) {
4432
			if ($globalDBdriver == 'mysql') {
4433
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4434
			} else {
4435
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4436
			}
4437
		}
4438
                if ($sincedate != '') {
4439
            		if ($globalDBdriver == 'mysql') {
4440
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
4441
			} else {
4442
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
4443
			}
4444
		}
4445
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spotter_live".$filter_query.") l ON c.iso2 = l.over_country ";
4446
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
4447
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4448
      
4449
		
4450
		$sth = $this->db->prepare($query);
4451
		$sth->execute();
4452
 
4453
		$flight_array = array();
4454
		$temp_array = array();
4455
        
4456
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4457
		{
4458
			$temp_array['flight_count'] = $row['nb'];
4459
			$temp_array['flight_country'] = $row['name'];
4460
			$temp_array['flight_country_iso3'] = $row['iso3'];
4461
			$temp_array['flight_country_iso2'] = $row['iso2'];
4462
			$flight_array[] = $temp_array;
4463
		}
4464
		return $flight_array;
4465
	}
4466
	
4467
	
4468
	/**
4469
	* Gets all aircraft types that have flown over
4470
	*
4471
	* @return Array the aircraft list
4472
	*
4473
	*/
4474
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4475
	{
4476
		global $globalDBdriver;
4477
		$filter_query = $this->getFilter($filters,true,true);
4478
4479
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4480
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
4481
		if ($olderthanmonths > 0) {
4482
			if ($globalDBdriver == 'mysql') {
4483
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4484
			} else {
4485
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4486
			}
4487
		}
4488
		if ($sincedate != '') {
4489
			if ($globalDBdriver == 'mysql') {
4490
				$query .= " AND spotter_output.date > '".$sincedate."'";
4491
			} else {
4492
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4493
			}
4494
		}
4495
4496
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4497
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4498
 
4499
		$sth = $this->db->prepare($query);
4500
		$sth->execute();
4501
4502
		$aircraft_array = array();
4503
		$temp_array = array();
4504
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4505
		{
4506
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4507
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4508
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4509
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4510
			$aircraft_array[] = $temp_array;
4511
		}
4512
		return $aircraft_array;
4513
	}
4514
4515
	/**
4516
	* Gets all aircraft types that have flown over by airline
4517
	*
4518
	* @return Array the aircraft list
4519
	*
4520
	*/
4521
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4522
	{
4523
		global $globalDBdriver;
4524
		$filter_query = $this->getFilter($filters,true,true);
4525
		$query  = "SELECT spotter_output.airline_icao, spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4526
		    FROM spotter_output".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA' ";
4527
		if ($olderthanmonths > 0) {
4528
			if ($globalDBdriver == 'mysql') {
4529
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4530
			} else {
4531
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4532
			}
4533
		}
4534
		if ($sincedate != '') {
4535
			if ($globalDBdriver == 'mysql') {
4536
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4537
			} else {
4538
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4539
			}
4540
		}
4541
4542
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4543
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4544
 
4545
		$sth = $this->db->prepare($query);
4546
		$sth->execute();
4547
4548
		$aircraft_array = array();
4549
		$temp_array = array();
4550
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4551
		{
4552
			$temp_array['airline_icao'] = $row['airline_icao'];
4553
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4554
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4555
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4556
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4557
			$aircraft_array[] = $temp_array;
4558
		}
4559
		return $aircraft_array;
4560
	}
4561
4562
	/**
4563
	* Gets all aircraft types that have flown over by months
4564
	*
4565
	* @return Array the aircraft list
4566
	*
4567
	*/
4568
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4569
	{
4570
		global $globalDBdriver;
4571
		$filter_query = $this->getFilter($filters,true,true);
4572
		$query  = "SELECT EXTRACT(month from spotter_output.date) as month, EXTRACT(year from spotter_output.date) as year,spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4573
		    FROM spotter_output".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA' ";
4574
		if ($olderthanmonths > 0) {
4575
			if ($globalDBdriver == 'mysql') {
4576
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4577
			} else {
4578
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4579
			}
4580
		}
4581
		if ($sincedate != '') {
4582
			if ($globalDBdriver == 'mysql') {
4583
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4584
			} else {
4585
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4586
			}
4587
		}
4588
4589
		$query .= "GROUP BY EXTRACT(month from spotter_output.date), EXTRACT(year from spotter_output.date), spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4590
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4591
 
4592
		$sth = $this->db->prepare($query);
4593
		$sth->execute();
4594
4595
		$aircraft_array = array();
4596
		$temp_array = array();
4597
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4598
		{
4599
			//$temp_array['airline_icao'] = $row['airline_icao'];
4600
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4601
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4602
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4603
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4604
			$aircraft_array[] = $temp_array;
4605
		}
4606
		return $aircraft_array;
4607
	}
4608
4609
4610
	/**
4611
	* Gets all aircraft registration that have flown over by aircaft icao
4612
	*
4613
	* @return Array the aircraft list
4614
	*
4615
	*/
4616
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
4617
	{
4618
		$Image = new Image($this->db);
4619
		$filter_query = $this->getFilter($filters,true,true);
4620
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4621
4622
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
4623
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
4624
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
4625
				ORDER BY registration_count DESC";
4626
4627
		$sth = $this->db->prepare($query);
4628
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4629
4630
		$aircraft_array = array();
4631
		$temp_array = array();
4632
        
4633
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4634
		{
4635
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4636
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4637
			$temp_array['registration'] = $row['registration'];
4638
			$temp_array['airline_name'] = $row['airline_name'];
4639
			$temp_array['image_thumbnail'] = "";
4640
			if($row['registration'] != "")
4641
			{
4642
				$image_array = $Image->getSpotterImage($row['registration']);
4643
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4644
			}
4645
			$temp_array['registration_count'] = $row['registration_count'];
4646
4647
			$aircraft_array[] = $temp_array;
4648
		}
4649
		return $aircraft_array;
4650
	}
4651
4652
4653
	/**
4654
	* Gets all aircraft types that have flown over by airline icao
4655
	*
4656
	* @return Array the aircraft list
4657
	*
4658
	*/
4659
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
4660
	{
4661
		$filter_query = $this->getFilter($filters,true,true);
4662
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4663
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4664
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
4665
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4666
			    ORDER BY aircraft_icao_count DESC";
4667
4668
		$sth = $this->db->prepare($query);
4669
		$sth->execute(array(':airline_icao' => $airline_icao));
4670
4671
		$aircraft_array = array();
4672
		$temp_array = array();
4673
4674
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4675
		{
4676
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4677
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4678
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4679
4680
			$aircraft_array[] = $temp_array;
4681
		}
4682
		return $aircraft_array;
4683
	}
4684
4685
4686
	/**
4687
	* Gets all aircraft registration that have flown over by airline icao
4688
	*
4689
	* @return Array the aircraft list
4690
	*
4691
	*/
4692
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
4693
	{
4694
		$filter_query = $this->getFilter($filters,true,true);
4695
		$Image = new Image($this->db);
4696
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4697
4698
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
4699
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
4700
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
4701
			    ORDER BY registration_count DESC";
4702
4703
		$sth = $this->db->prepare($query);
4704
		$sth->execute(array(':airline_icao' => $airline_icao));
4705
4706
		$aircraft_array = array();
4707
		$temp_array = array();
4708
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4709
		{
4710
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4711
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4712
			$temp_array['registration'] = $row['registration'];
4713
			$temp_array['airline_name'] = $row['airline_name'];
4714
			$temp_array['image_thumbnail'] = "";
4715
			if($row['registration'] != "")
4716
			{
4717
				$image_array = $Image->getSpotterImage($row['registration']);
4718
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4719
			}
4720
			$temp_array['registration_count'] = $row['registration_count'];
4721
4722
			$aircraft_array[] = $temp_array;
4723
		}
4724
		return $aircraft_array;
4725
	}
4726
4727
4728
	/**
4729
	* Gets all aircraft manufacturer that have flown over by airline icao
4730
	*
4731
	* @return Array the aircraft list
4732
	*
4733
	*/
4734
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
4735
	{
4736
		$filter_query = $this->getFilter($filters,true,true);
4737
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4738
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4739
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
4740
				GROUP BY spotter_output.aircraft_manufacturer 
4741
				ORDER BY aircraft_manufacturer_count DESC";
4742
4743
		$sth = $this->db->prepare($query);
4744
		$sth->execute(array(':airline_icao' => $airline_icao));
4745
4746
		$aircraft_array = array();
4747
		$temp_array = array();
4748
4749
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4750
		{
4751
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4752
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4753
4754
			$aircraft_array[] = $temp_array;
4755
		}
4756
		return $aircraft_array;
4757
	}
4758
4759
4760
	/**
4761
	* Gets all aircraft types that have flown over by airline icao
4762
	*
4763
	* @return Array the aircraft list
4764
	*
4765
	*/
4766
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
4767
	{
4768
		$filter_query = $this->getFilter($filters,true,true);
4769
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4770
4771
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4772
				FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao) 
4773
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4774
				ORDER BY aircraft_icao_count DESC";
4775
 
4776
		$sth = $this->db->prepare($query);
4777
		$sth->execute(array(':airport_icao' => $airport_icao));
4778
4779
		$aircraft_array = array();
4780
		$temp_array = array();
4781
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4782
		{
4783
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4784
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4785
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4786
4787
			$aircraft_array[] = $temp_array;
4788
		}
4789
		return $aircraft_array;
4790
	}
4791
4792
4793
	/**
4794
	* Gets all aircraft registration that have flown over by airport icao
4795
	*
4796
	* @return Array the aircraft list
4797
	*
4798
	*/
4799
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
4800
	{
4801
		$filter_query = $this->getFilter($filters,true,true);
4802
		$Image = new Image($this->db);
4803
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4804
4805
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
4806
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
4807
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
4808
		    ORDER BY registration_count DESC";
4809
4810
		$sth = $this->db->prepare($query);
4811
		$sth->execute(array(':airport_icao' => $airport_icao));
4812
4813
		$aircraft_array = array();
4814
		$temp_array = array();
4815
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4816
		{
4817
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4818
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4819
			$temp_array['registration'] = $row['registration'];
4820
			$temp_array['airline_name'] = $row['airline_name'];
4821
			$temp_array['image_thumbnail'] = "";
4822
			if($row['registration'] != "")
4823
			{
4824
				$image_array = $Image->getSpotterImage($row['registration']);
4825
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4826
			}
4827
			$temp_array['registration_count'] = $row['registration_count'];
4828
			$aircraft_array[] = $temp_array;
4829
		}
4830
		return $aircraft_array;
4831
	}
4832
	
4833
	
4834
	/**
4835
	* Gets all aircraft manufacturer that have flown over by airport icao
4836
	*
4837
	* @return Array the aircraft list
4838
	*
4839
	*/
4840
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
4841
	{
4842
		$filter_query = $this->getFilter($filters,true,true);
4843
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4844
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4845
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)  
4846
                    GROUP BY spotter_output.aircraft_manufacturer 
4847
					ORDER BY aircraft_manufacturer_count DESC";
4848
4849
		
4850
		$sth = $this->db->prepare($query);
4851
		$sth->execute(array(':airport_icao' => $airport_icao));
4852
4853
		$aircraft_array = array();
4854
		$temp_array = array();
4855
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4856
		{
4857
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4858
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4859
			$aircraft_array[] = $temp_array;
4860
		}
4861
		return $aircraft_array;
4862
	}
4863
4864
	/**
4865
	* Gets all aircraft types that have flown over by aircraft manufacturer
4866
	*
4867
	* @return Array the aircraft list
4868
	*
4869
	*/
4870
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
4871
	{
4872
		$filter_query = $this->getFilter($filters,true,true);
4873
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4874
4875
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4876
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
4877
                    GROUP BY spotter_output.aircraft_name 
4878
					ORDER BY aircraft_icao_count DESC";
4879
4880
		$sth = $this->db->prepare($query);
4881
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4882
		$aircraft_array = array();
4883
		$temp_array = array();
4884
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4885
		{
4886
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4887
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4888
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4889
			$aircraft_array[] = $temp_array;
4890
		}
4891
		return $aircraft_array;
4892
	}
4893
4894
4895
	/**
4896
	* Gets all aircraft registration that have flown over by aircaft manufacturer
4897
	*
4898
	* @return Array the aircraft list
4899
	*
4900
	*/
4901
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
4902
	{
4903
		$filter_query = $this->getFilter($filters,true,true);
4904
		$Image = new Image($this->db);
4905
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4906
4907
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
4908
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
4909
                    GROUP BY spotter_output.registration 
4910
					ORDER BY registration_count DESC";
4911
4912
		
4913
		$sth = $this->db->prepare($query);
4914
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4915
		$aircraft_array = array();
4916
		$temp_array = array();
4917
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4918
		{
4919
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4920
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4921
			$temp_array['registration'] = $row['registration'];
4922
			$temp_array['airline_name'] = $row['airline_name'];
4923
			$temp_array['image_thumbnail'] = "";
4924
			if($row['registration'] != "")
4925
			{
4926
				$image_array = $Image->getSpotterImage($row['registration']);
4927
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4928
			}
4929
			$temp_array['registration_count'] = $row['registration_count'];
4930
			$aircraft_array[] = $temp_array;
4931
		}
4932
		return $aircraft_array;
4933
	}
4934
4935
	/**
4936
	* Gets all aircraft types that have flown over by date
4937
	*
4938
	* @return Array the aircraft list
4939
	*
4940
	*/
4941
	public function countAllAircraftTypesByDate($date,$filters = array())
4942
	{
4943
		global $globalTimezone, $globalDBdriver;
4944
		$filter_query = $this->getFilter($filters,true,true);
4945
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4946
		if ($globalTimezone != '') {
4947
			date_default_timezone_set($globalTimezone);
4948
			$datetime = new DateTime($date);
4949
			$offset = $datetime->format('P');
4950
		} else $offset = '+00:00';
4951
4952
		if ($globalDBdriver == 'mysql') {
4953
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4954
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
4955
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4956
					ORDER BY aircraft_icao_count DESC";
4957
		} else {
4958
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4959
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
4960
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4961
					ORDER BY aircraft_icao_count DESC";
4962
		}
4963
		
4964
		$sth = $this->db->prepare($query);
4965
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4966
4967
		$aircraft_array = array();
4968
		$temp_array = array();
4969
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4970
		{
4971
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4972
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4973
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4974
4975
			$aircraft_array[] = $temp_array;
4976
		}
4977
		return $aircraft_array;
4978
	}
4979
4980
4981
	/**
4982
	* Gets all aircraft registration that have flown over by date
4983
	*
4984
	* @return Array the aircraft list
4985
	*
4986
	*/
4987
	public function countAllAircraftRegistrationByDate($date,$filters = array())
4988
	{
4989
		global $globalTimezone, $globalDBdriver;
4990
		$filter_query = $this->getFilter($filters,true,true);
4991
		$Image = new Image($this->db);
4992
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4993
		if ($globalTimezone != '') {
4994
			date_default_timezone_set($globalTimezone);
4995
			$datetime = new DateTime($date);
4996
			$offset = $datetime->format('P');
4997
		} else $offset = '+00:00';
4998
4999
		if ($globalDBdriver == 'mysql') {
5000
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5001
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5002
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5003
					ORDER BY registration_count DESC";
5004
		} else {
5005
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name    
5006
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5007
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5008
					ORDER BY registration_count DESC";
5009
		}
5010
		
5011
		$sth = $this->db->prepare($query);
5012
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5013
5014
		$aircraft_array = array();
5015
		$temp_array = array();
5016
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5017
		{
5018
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5019
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5020
			$temp_array['registration'] = $row['registration'];
5021
			$temp_array['airline_name'] = $row['airline_name'];
5022
			$temp_array['image_thumbnail'] = "";
5023
			if($row['registration'] != "")
5024
			{
5025
				$image_array = $Image->getSpotterImage($row['registration']);
5026
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5027
			}
5028
			$temp_array['registration_count'] = $row['registration_count'];
5029
 
5030
			$aircraft_array[] = $temp_array;
5031
		}
5032
		return $aircraft_array;
5033
	}
5034
5035
5036
	/**
5037
	* Gets all aircraft manufacturer that have flown over by date
5038
	*
5039
	* @return Array the aircraft manufacturer list
5040
	*
5041
	*/
5042
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5043
	{
5044
		global $globalTimezone, $globalDBdriver;
5045
		$filter_query = $this->getFilter($filters,true,true);
5046
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5047
		if ($globalTimezone != '') {
5048
			date_default_timezone_set($globalTimezone);
5049
			$datetime = new DateTime($date);
5050
			$offset = $datetime->format('P');
5051
		} else $offset = '+00:00';
5052
5053
		if ($globalDBdriver == 'mysql') {
5054
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5055
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5056
				GROUP BY spotter_output.aircraft_manufacturer 
5057
				ORDER BY aircraft_manufacturer_count DESC";
5058
		} else {
5059
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5060
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5061
				GROUP BY spotter_output.aircraft_manufacturer 
5062
				ORDER BY aircraft_manufacturer_count DESC";
5063
		}
5064
		
5065
		$sth = $this->db->prepare($query);
5066
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5067
5068
		$aircraft_array = array();
5069
		$temp_array = array();
5070
5071
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5072
		{
5073
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5074
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5075
5076
			$aircraft_array[] = $temp_array;
5077
		}
5078
		return $aircraft_array;
5079
	}
5080
5081
5082
	/**
5083
	* Gets all aircraft types that have flown over by ident/callsign
5084
	*
5085
	* @return Array the aircraft list
5086
	*
5087
	*/
5088
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5089
	{
5090
		$filter_query = $this->getFilter($filters,true,true);
5091
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5092
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5093
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5094
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5095
				ORDER BY aircraft_icao_count DESC";
5096
5097
		$sth = $this->db->prepare($query);
5098
		$sth->execute(array(':ident' => $ident));
5099
      
5100
		$aircraft_array = array();
5101
		$temp_array = array();
5102
5103
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5104
		{
5105
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5106
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5107
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5108
5109
			$aircraft_array[] = $temp_array;
5110
		}
5111
		return $aircraft_array;
5112
	}
5113
5114
5115
	/**
5116
	* Gets all aircraft registration that have flown over by ident/callsign
5117
	*
5118
	* @return Array the aircraft list
5119
	*
5120
	*/
5121
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5122
	{
5123
		$filter_query = $this->getFilter($filters,true,true);
5124
		$Image = new Image($this->db);
5125
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5126
5127
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5128
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5129
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5130
		    ORDER BY registration_count DESC";
5131
5132
		
5133
		$sth = $this->db->prepare($query);
5134
		$sth->execute(array(':ident' => $ident));
5135
      
5136
		$aircraft_array = array();
5137
		$temp_array = array();
5138
        
5139
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5140
		{
5141
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5142
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5143
			$temp_array['registration'] = $row['registration'];
5144
			$temp_array['airline_name'] = $row['airline_name'];
5145
			$temp_array['image_thumbnail'] = "";
5146
			if($row['registration'] != "")
5147
			{
5148
				$image_array = $Image->getSpotterImage($row['registration']);
5149
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5150
				else $temp_array['image_thumbnail'] = '';
5151
			}
5152
			$temp_array['registration_count'] = $row['registration_count'];
5153
			$aircraft_array[] = $temp_array;
5154
		}
5155
		return $aircraft_array;
5156
	}
5157
5158
5159
	/**
5160
	* Gets all aircraft manufacturer that have flown over by ident/callsign
5161
	*
5162
	* @return Array the aircraft manufacturer list
5163
	*
5164
	*/
5165
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
5166
	{
5167
		$filter_query = $this->getFilter($filters,true,true);
5168
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5169
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5170
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
5171
                    GROUP BY spotter_output.aircraft_manufacturer 
5172
					ORDER BY aircraft_manufacturer_count DESC";
5173
5174
		
5175
		$sth = $this->db->prepare($query);
5176
		$sth->execute(array(':ident' => $ident));
5177
		$aircraft_array = array();
5178
		$temp_array = array();
5179
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5180
		{
5181
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5182
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5183
			$aircraft_array[] = $temp_array;
5184
		}
5185
		return $aircraft_array;
5186
	}
5187
5188
5189
	/**
5190
	* Gets all aircraft types that have flown over by route
5191
	*
5192
	* @return Array the aircraft list
5193
	*
5194
	*/
5195
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5196
	{
5197
		$filter_query = $this->getFilter($filters,true,true);
5198
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5199
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5200
		
5201
5202
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5203
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
5204
                    GROUP BY spotter_output.aircraft_name 
5205
					ORDER BY aircraft_icao_count DESC";
5206
 
5207
		
5208
		$sth = $this->db->prepare($query);
5209
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5210
		$aircraft_array = array();
5211
		$temp_array = array();
5212
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5213
		{
5214
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5215
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5216
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5217
			$aircraft_array[] = $temp_array;
5218
		}
5219
		return $aircraft_array;
5220
	}
5221
5222
	/**
5223
	* Gets all aircraft registration that have flown over by route
5224
	*
5225
	* @return Array the aircraft list
5226
	*
5227
	*/
5228
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5229
	{
5230
		$filter_query = $this->getFilter($filters,true,true);
5231
		$Image = new Image($this->db);
5232
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5233
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5234
5235
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
5236
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)   
5237
                    GROUP BY spotter_output.registration 
5238
					ORDER BY registration_count DESC";
5239
5240
		
5241
		$sth = $this->db->prepare($query);
5242
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5243
      
5244
		$aircraft_array = array();
5245
		$temp_array = array();
5246
        
5247
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5248
		{
5249
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5250
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5251
			$temp_array['registration'] = $row['registration'];
5252
			$temp_array['airline_name'] = $row['airline_name'];
5253
			$temp_array['image_thumbnail'] = "";
5254
			if($row['registration'] != "")
5255
			{
5256
				$image_array = $Image->getSpotterImage($row['registration']);
5257
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5258
			}
5259
			$temp_array['registration_count'] = $row['registration_count'];
5260
          
5261
			$aircraft_array[] = $temp_array;
5262
		}
5263
5264
		return $aircraft_array;
5265
	}
5266
	
5267
	
5268
	/**
5269
	* Gets all aircraft manufacturer that have flown over by route
5270
	*
5271
	* @return Array the aircraft manufacturer list
5272
	*
5273
	*/
5274
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5275
	{
5276
		$filter_query = $this->getFilter($filters,true,true);
5277
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5278
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5279
5280
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5281
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
5282
                    GROUP BY spotter_output.aircraft_manufacturer 
5283
					ORDER BY aircraft_manufacturer_count DESC";
5284
5285
		
5286
		$sth = $this->db->prepare($query);
5287
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5288
      
5289
		$aircraft_array = array();
5290
		$temp_array = array();
5291
        
5292
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5293
		{
5294
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5295
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5296
          
5297
			$aircraft_array[] = $temp_array;
5298
		}
5299
5300
		return $aircraft_array;
5301
	}	
5302
5303
	
5304
	
5305
	
5306
	/**
5307
	* Gets all aircraft types that have flown over by country
5308
	*
5309
	* @return Array the aircraft list
5310
	*
5311
	*/
5312
	public function countAllAircraftTypesByCountry($country,$filters = array())
5313
	{
5314
		$filter_query = $this->getFilter($filters,true,true);
5315
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5316
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5317
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
5318
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5319
			    ORDER BY aircraft_icao_count DESC";
5320
 
5321
		
5322
		$sth = $this->db->prepare($query);
5323
		$sth->execute(array(':country' => $country));
5324
      
5325
		$aircraft_array = array();
5326
		$temp_array = array();
5327
        
5328
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5329
		{
5330
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5331
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5332
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5333
          
5334
			$aircraft_array[] = $temp_array;
5335
		}
5336
5337
		return $aircraft_array;
5338
	}
5339
5340
5341
	/**
5342
	* Gets all aircraft registration that have flown over by country
5343
	*
5344
	* @return Array the aircraft list
5345
	*
5346
	*/
5347
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
5348
	{
5349
		$filter_query = $this->getFilter($filters,true,true);
5350
		$Image = new Image($this->db);
5351
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5352
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5353
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country)    
5354
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5355
			    ORDER BY registration_count DESC";
5356
5357
		
5358
		$sth = $this->db->prepare($query);
5359
		$sth->execute(array(':country' => $country));
5360
      
5361
		$aircraft_array = array();
5362
		$temp_array = array();
5363
        
5364
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5365
		{
5366
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5367
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5368
			$temp_array['registration'] = $row['registration'];
5369
			$temp_array['airline_name'] = $row['airline_name'];
5370
			$temp_array['image_thumbnail'] = "";
5371
			if($row['registration'] != "")
5372
			{
5373
				$image_array = $Image->getSpotterImage($row['registration']);
5374
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5375
			}
5376
			$temp_array['registration_count'] = $row['registration_count'];
5377
          
5378
			$aircraft_array[] = $temp_array;
5379
		}
5380
5381
		return $aircraft_array;
5382
	}
5383
	
5384
	
5385
	/**
5386
	* Gets all aircraft manufacturer that have flown over by country
5387
	*
5388
	* @return Array the aircraft manufacturer list
5389
	*
5390
	*/
5391
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
5392
	{
5393
		$filter_query = $this->getFilter($filters,true,true);
5394
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5395
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5396
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country) 
5397
                    GROUP BY spotter_output.aircraft_manufacturer 
5398
					ORDER BY aircraft_manufacturer_count DESC";
5399
5400
		
5401
		$sth = $this->db->prepare($query);
5402
		$sth->execute(array(':country' => $country));
5403
      
5404
		$aircraft_array = array();
5405
		$temp_array = array();
5406
        
5407
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5408
		{
5409
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5410
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5411
          
5412
			$aircraft_array[] = $temp_array;
5413
		}
5414
5415
		return $aircraft_array;
5416
	}	
5417
	
5418
	
5419
	
5420
	/**
5421
	* Gets all aircraft manufacturers that have flown over
5422
	*
5423
	* @return Array the aircraft list
5424
	*
5425
	*/
5426
	public function countAllAircraftManufacturers($filters = array())
5427
	{
5428
		$filter_query = $this->getFilter($filters,true,true);
5429
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5430
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
5431
                $query .= " GROUP BY spotter_output.aircraft_manufacturer
5432
					ORDER BY aircraft_manufacturer_count DESC
5433
					LIMIT 10";
5434
      
5435
		
5436
		$sth = $this->db->prepare($query);
5437
		$sth->execute();
5438
      
5439
		$manufacturer_array = array();
5440
		$temp_array = array();
5441
        
5442
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5443
		{
5444
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5445
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5446
          
5447
			$manufacturer_array[] = $temp_array;
5448
		}
5449
5450
		return $manufacturer_array;
5451
	}
5452
	
5453
	
5454
	
5455
	/**
5456
	* Gets all aircraft registrations that have flown over
5457
	*
5458
	* @return Array the aircraft list
5459
	*
5460
	*/
5461
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5462
	{
5463
		global $globalDBdriver;
5464
		$Image = new Image($this->db);
5465
		$filter_query = $this->getFilter($filters,true,true);
5466
		$query  = "SELECT DISTINCT spotter_output.registration, COUNT(spotter_output.registration) AS aircraft_registration_count, spotter_output.aircraft_icao,  spotter_output.aircraft_name, spotter_output.airline_name    
5467
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
5468
                if ($olderthanmonths > 0) {
5469
            		if ($globalDBdriver == 'mysql') {
5470
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5471
			} else {
5472
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5473
			}
5474
		}
5475
                if ($sincedate != '') {
5476
            		if ($globalDBdriver == 'mysql') {
5477
				$query .= " AND spotter_output.date > '".$sincedate."'";
5478
			} else {
5479
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5480
			}
5481
		}
5482
5483
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5484
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5485
                $query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
5486
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5487
		
5488
		$sth = $this->db->prepare($query);
5489
		$sth->execute();
5490
      
5491
		$aircraft_array = array();
5492
		$temp_array = array();
5493
        
5494
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5495
		{
5496
			$temp_array['registration'] = $row['registration'];
5497
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5498
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5499
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5500
			$temp_array['airline_name'] = $row['airline_name'];
5501
			$temp_array['image_thumbnail'] = "";
5502
			if($row['registration'] != "")
5503
			{
5504
				$image_array = $Image->getSpotterImage($row['registration']);
5505
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5506
			}
5507
          
5508
			$aircraft_array[] = $temp_array;
5509
		}
5510
5511
		return $aircraft_array;
5512
	}
5513
5514
5515
	/**
5516
	* Gets all aircraft registrations that have flown over
5517
	*
5518
	* @return Array the aircraft list
5519
	*
5520
	*/
5521
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5522
	{
5523
		global $globalDBdriver;
5524
		$filter_query = $this->getFilter($filters,true,true);
5525
		$Image = new Image($this->db);
5526
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.registration, COUNT(spotter_output.registration) AS aircraft_registration_count, spotter_output.aircraft_icao,  spotter_output.aircraft_name, spotter_output.airline_name    
5527
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
5528
                if ($olderthanmonths > 0) {
5529
            		if ($globalDBdriver == 'mysql') {
5530
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5531
			} else {
5532
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5533
			}
5534
		}
5535
                if ($sincedate != '') {
5536
            		if ($globalDBdriver == 'mysql') {
5537
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5538
			} else {
5539
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5540
			}
5541
		}
5542
5543
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5544
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5545
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
5546
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5547
		
5548
		$sth = $this->db->prepare($query);
5549
		$sth->execute();
5550
      
5551
		$aircraft_array = array();
5552
		$temp_array = array();
5553
        
5554
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5555
		{
5556
			$temp_array['registration'] = $row['registration'];
5557
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5558
			$temp_array['airline_icao'] = $row['airline_icao'];
5559
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5560
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5561
			$temp_array['airline_name'] = $row['airline_name'];
5562
			$temp_array['image_thumbnail'] = "";
5563
			if($row['registration'] != "")
5564
			{
5565
				$image_array = $Image->getSpotterImage($row['registration']);
5566
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5567
			}
5568
          
5569
			$aircraft_array[] = $temp_array;
5570
		}
5571
5572
		return $aircraft_array;
5573
	}
5574
	
5575
	
5576
	/**
5577
	* Gets all departure airports of the airplanes that have flown over
5578
	*
5579
	* @return Array the airport list
5580
	*
5581
	*/
5582
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5583
	{
5584
		global $globalDBdriver;
5585
		$filter_query = $this->getFilter($filters,true,true);
5586
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5587
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
5588
                if ($olderthanmonths > 0) {
5589
            		if ($globalDBdriver == 'mysql') {
5590
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5591
			} else {
5592
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5593
			}
5594
                }
5595
                if ($sincedate != '') {
5596
            		if ($globalDBdriver == 'mysql') {
5597
				$query .= " AND spotter_output.date > '".$sincedate."'";
5598
			} else {
5599
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5600
			}
5601
		}
5602
5603
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5604
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5605
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5606
				ORDER BY airport_departure_icao_count DESC";
5607
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5608
      
5609
		$sth = $this->db->prepare($query);
5610
		$sth->execute();
5611
      
5612
		$airport_array = array();
5613
		$temp_array = array();
5614
        
5615
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5616
		{
5617
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5618
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5619
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5620
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5621
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5622
          
5623
			$airport_array[] = $temp_array;
5624
		}
5625
		return $airport_array;
5626
	}
5627
5628
	/**
5629
	* Gets all departure airports of the airplanes that have flown over
5630
	*
5631
	* @return Array the airport list
5632
	*
5633
	*/
5634
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5635
	{
5636
		global $globalDBdriver;
5637
		$filter_query = $this->getFilter($filters,true,true);
5638
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5639
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' ";
5640
                if ($olderthanmonths > 0) {
5641
            		if ($globalDBdriver == 'mysql') {
5642
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5643
			} else {
5644
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5645
			}
5646
                }
5647
                if ($sincedate != '') {
5648
            		if ($globalDBdriver == 'mysql') {
5649
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5650
			} else {
5651
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5652
			}
5653
		}
5654
5655
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5656
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5657
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5658
				ORDER BY airport_departure_icao_count DESC";
5659
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5660
      
5661
		$sth = $this->db->prepare($query);
5662
		$sth->execute();
5663
      
5664
		$airport_array = array();
5665
		$temp_array = array();
5666
        
5667
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5668
		{
5669
			$temp_array['airline_icao'] = $row['airline_icao'];
5670
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5671
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5672
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5673
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5674
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5675
          
5676
			$airport_array[] = $temp_array;
5677
		}
5678
		return $airport_array;
5679
	}
5680
5681
	/**
5682
	* Gets all detected departure airports of the airplanes that have flown over
5683
	*
5684
	* @return Array the airport list
5685
	*
5686
	*/
5687
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5688
	{
5689
		global $globalDBdriver;
5690
		$filter_query = $this->getFilter($filters,true,true);
5691
		$query  = "SELECT DISTINCT spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country
5692
				FROM airport, spotter_output".$filter_query." spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao";
5693
                if ($olderthanmonths > 0) {
5694
            		if ($globalDBdriver == 'mysql') {
5695
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5696
			} else {
5697
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5698
			}
5699
                }
5700
                if ($sincedate != '') {
5701
            		if ($globalDBdriver == 'mysql') {
5702
				$query .= " AND spotter_output.date > '".$sincedate."'";
5703
			} else {
5704
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5705
			}
5706
		}
5707
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5708
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5709
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5710
				ORDER BY airport_departure_icao_count DESC";
5711
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5712
    		//echo $query;
5713
		$sth = $this->db->prepare($query);
5714
		$sth->execute();
5715
      
5716
		$airport_array = array();
5717
		$temp_array = array();
5718
        
5719
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5720
		{
5721
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5722
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5723
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5724
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5725
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5726
          
5727
			$airport_array[] = $temp_array;
5728
		}
5729
		return $airport_array;
5730
	}
5731
	
5732
	/**
5733
	* Gets all detected departure airports of the airplanes that have flown over
5734
	*
5735
	* @return Array the airport list
5736
	*
5737
	*/
5738
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5739
	{
5740
		global $globalDBdriver;
5741
		$filter_query = $this->getFilter($filters,true,true);
5742
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country
5743
				FROM airport, spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao ";
5744
                if ($olderthanmonths > 0) {
5745
            		if ($globalDBdriver == 'mysql') {
5746
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5747
			} else {
5748
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5749
			}
5750
                }
5751
                if ($sincedate != '') {
5752
            		if ($globalDBdriver == 'mysql') {
5753
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5754
			} else {
5755
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
5756
			}
5757
		}
5758
5759
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5760
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5761
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5762
				ORDER BY airport_departure_icao_count DESC";
5763
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5764
      
5765
		$sth = $this->db->prepare($query);
5766
		$sth->execute();
5767
      
5768
		$airport_array = array();
5769
		$temp_array = array();
5770
        
5771
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5772
		{
5773
			$temp_array['airline_icao'] = $row['airline_icao'];
5774
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5775
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5776
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5777
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5778
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5779
          
5780
			$airport_array[] = $temp_array;
5781
		}
5782
		return $airport_array;
5783
	}	
5784
	
5785
	/**
5786
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
5787
	*
5788
	* @return Array the airport list
5789
	*
5790
	*/
5791
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
5792
	{
5793
		$filter_query = $this->getFilter($filters,true,true);
5794
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5795
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5796
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao AND spotter_output.departure_airport_icao <> '' 
5797
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5798
			    ORDER BY airport_departure_icao_count DESC";
5799
      
5800
		
5801
		$sth = $this->db->prepare($query);
5802
		$sth->execute(array(':airline_icao' => $airline_icao));
5803
      
5804
		$airport_array = array();
5805
		$temp_array = array();
5806
        
5807
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5808
		{
5809
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5810
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5811
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5812
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5813
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5814
          
5815
			$airport_array[] = $temp_array;
5816
		}
5817
5818
		return $airport_array;
5819
	}
5820
	
5821
	
5822
	
5823
	/**
5824
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
5825
	*
5826
	* @return Array the airport list
5827
	*
5828
	*/
5829
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
5830
	{
5831
		$filter_query = $this->getFilter($filters,true,true);
5832
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5833
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5834
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
5835
                    GROUP BY spotter_output.departure_airport_country
5836
					ORDER BY airport_departure_country_count DESC";
5837
      
5838
		
5839
		$sth = $this->db->prepare($query);
5840
		$sth->execute(array(':airline_icao' => $airline_icao));
5841
      
5842
		$airport_array = array();
5843
		$temp_array = array();
5844
        
5845
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5846
		{
5847
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5848
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5849
          
5850
			$airport_array[] = $temp_array;
5851
		}
5852
5853
		return $airport_array;
5854
	}
5855
	
5856
	
5857
	
5858
	/**
5859
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
5860
	*
5861
	* @return Array the airport list
5862
	*
5863
	*/
5864
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
5865
	{
5866
		$filter_query = $this->getFilter($filters,true,true);
5867
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5868
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5869
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao AND spotter_output.departure_airport_icao <> '' 
5870
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5871
			    ORDER BY airport_departure_icao_count DESC";
5872
      
5873
		
5874
		$sth = $this->db->prepare($query);
5875
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5876
      
5877
		$airport_array = array();
5878
		$temp_array = array();
5879
        
5880
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5881
		{
5882
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5883
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5884
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5885
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5886
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5887
          
5888
			$airport_array[] = $temp_array;
5889
		}
5890
5891
		return $airport_array;
5892
	}
5893
	
5894
	
5895
	/**
5896
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
5897
	*
5898
	* @return Array the airport list
5899
	*
5900
	*/
5901
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
5902
	{
5903
		$filter_query = $this->getFilter($filters,true,true);
5904
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5905
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5906
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
5907
                    GROUP BY spotter_output.departure_airport_country
5908
					ORDER BY airport_departure_country_count DESC";
5909
      
5910
		
5911
		$sth = $this->db->prepare($query);
5912
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5913
      
5914
		$airport_array = array();
5915
		$temp_array = array();
5916
        
5917
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5918
		{
5919
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5920
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5921
          
5922
			$airport_array[] = $temp_array;
5923
		}
5924
5925
		return $airport_array;
5926
	}
5927
	
5928
	
5929
	/**
5930
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
5931
	*
5932
	* @return Array the airport list
5933
	*
5934
	*/
5935
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
5936
	{
5937
		$filter_query = $this->getFilter($filters,true,true);
5938
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5939
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5940
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.registration = :registration AND spotter_output.departure_airport_icao <> '' 
5941
                    GROUP BY spotter_output.departure_airport_icao
5942
					ORDER BY airport_departure_icao_count DESC";
5943
      
5944
		
5945
		$sth = $this->db->prepare($query);
5946
		$sth->execute(array(':registration' => $registration));
5947
      
5948
		$airport_array = array();
5949
		$temp_array = array();
5950
        
5951
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5952
		{
5953
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5954
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5955
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5956
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5957
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5958
          
5959
			$airport_array[] = $temp_array;
5960
		}
5961
5962
		return $airport_array;
5963
	}
5964
	
5965
	
5966
	/**
5967
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
5968
	*
5969
	* @return Array the airport list
5970
	*
5971
	*/
5972
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
5973
	{
5974
		$filter_query = $this->getFilter($filters,true,true);
5975
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5976
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5977
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
5978
                    GROUP BY spotter_output.departure_airport_country
5979
					ORDER BY airport_departure_country_count DESC";
5980
      
5981
		
5982
		$sth = $this->db->prepare($query);
5983
		$sth->execute(array(':registration' => $registration));
5984
      
5985
		$airport_array = array();
5986
		$temp_array = array();
5987
        
5988
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5989
		{
5990
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5991
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5992
          
5993
			$airport_array[] = $temp_array;
5994
		}
5995
5996
		return $airport_array;
5997
	}
5998
	
5999
	
6000
	/**
6001
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
6002
	*
6003
	* @return Array the airport list
6004
	*
6005
	*/
6006
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
6007
	{
6008
		$filter_query = $this->getFilter($filters,true,true);
6009
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6010
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6011
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao = :airport_icao AND spotter_output.departure_airport_icao <> '' 
6012
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6013
			    ORDER BY airport_departure_icao_count DESC";
6014
      
6015
		
6016
		$sth = $this->db->prepare($query);
6017
		$sth->execute(array(':airport_icao' => $airport_icao));
6018
      
6019
		$airport_array = array();
6020
		$temp_array = array();
6021
        
6022
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6023
		{
6024
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6025
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6026
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6027
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6028
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6029
          
6030
			$airport_array[] = $temp_array;
6031
		}
6032
6033
		return $airport_array;
6034
	}
6035
	
6036
	
6037
	/**
6038
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
6039
	*
6040
	* @return Array the airport list
6041
	*
6042
	*/
6043
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
6044
	{
6045
		$filter_query = $this->getFilter($filters,true,true);
6046
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6047
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6048
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
6049
                    GROUP BY spotter_output.departure_airport_country
6050
					ORDER BY airport_departure_country_count DESC";
6051
      
6052
		
6053
		$sth = $this->db->prepare($query);
6054
		$sth->execute(array(':airport_icao' => $airport_icao));
6055
      
6056
		$airport_array = array();
6057
		$temp_array = array();
6058
        
6059
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6060
		{
6061
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6062
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6063
          
6064
			$airport_array[] = $temp_array;
6065
		}
6066
6067
		return $airport_array;
6068
	}
6069
	
6070
	
6071
	
6072
	/**
6073
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
6074
	*
6075
	* @return Array the airport list
6076
	*
6077
	*/
6078
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6079
	{
6080
		$filter_query = $this->getFilter($filters,true,true);
6081
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6082
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6083
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer AND spotter_output.departure_airport_icao <> '' 
6084
                    GROUP BY spotter_output.departure_airport_icao
6085
					ORDER BY airport_departure_icao_count DESC";
6086
      
6087
		
6088
		$sth = $this->db->prepare($query);
6089
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6090
      
6091
		$airport_array = array();
6092
		$temp_array = array();
6093
        
6094
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6095
		{
6096
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6097
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6098
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6099
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6100
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6101
          
6102
			$airport_array[] = $temp_array;
6103
		}
6104
6105
		return $airport_array;
6106
	}
6107
	
6108
	
6109
	/**
6110
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
6111
	*
6112
	* @return Array the airport list
6113
	*
6114
	*/
6115
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6116
	{
6117
		$filter_query = $this->getFilter($filters,true,true);
6118
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6119
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6120
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6121
                    GROUP BY spotter_output.departure_airport_country
6122
					ORDER BY airport_departure_country_count DESC";
6123
      
6124
		
6125
		$sth = $this->db->prepare($query);
6126
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6127
      
6128
		$airport_array = array();
6129
		$temp_array = array();
6130
        
6131
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6132
		{
6133
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6134
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6135
          
6136
			$airport_array[] = $temp_array;
6137
		}
6138
6139
		return $airport_array;
6140
	}
6141
	
6142
	
6143
	/**
6144
	* Gets all departure airports of the airplanes that have flown over based on a date
6145
	*
6146
	* @return Array the airport list
6147
	*
6148
	*/
6149
	public function countAllDepartureAirportsByDate($date,$filters = array())
6150
	{
6151
		global $globalTimezone, $globalDBdriver;
6152
		$filter_query = $this->getFilter($filters,true,true);
6153
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6154
		if ($globalTimezone != '') {
6155
			date_default_timezone_set($globalTimezone);
6156
			$datetime = new DateTime($date);
6157
			$offset = $datetime->format('P');
6158
		} else $offset = '+00:00';
6159
6160
		if ($globalDBdriver == 'mysql') {
6161
			$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6162
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
6163
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6164
					ORDER BY airport_departure_icao_count DESC";
6165
		} else {
6166
			$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6167
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
6168
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6169
					ORDER BY airport_departure_icao_count DESC";
6170
		}
6171
6172
		$sth = $this->db->prepare($query);
6173
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6174
      
6175
		$airport_array = array();
6176
		$temp_array = array();
6177
        
6178
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6179
		{
6180
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6181
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6182
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6183
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6184
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6185
          
6186
			$airport_array[] = $temp_array;
6187
		}
6188
		return $airport_array;
6189
	}
6190
	
6191
	
6192
	
6193
	/**
6194
	* Gets all departure airports by country of the airplanes that have flown over based on a date
6195
	*
6196
	* @return Array the airport list
6197
	*
6198
	*/
6199
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
6200
	{
6201
		global $globalTimezone, $globalDBdriver;
6202
		$filter_query = $this->getFilter($filters,true,true);
6203
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6204
		if ($globalTimezone != '') {
6205
			date_default_timezone_set($globalTimezone);
6206
			$datetime = new DateTime($date);
6207
			$offset = $datetime->format('P');
6208
		} else $offset = '+00:00';
6209
6210
		if ($globalDBdriver == 'mysql') {
6211
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6212
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6213
					GROUP BY spotter_output.departure_airport_country
6214
					ORDER BY airport_departure_country_count DESC";
6215
		} else {
6216
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6217
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
6218
					GROUP BY spotter_output.departure_airport_country
6219
					ORDER BY airport_departure_country_count DESC";
6220
		}
6221
		
6222
		$sth = $this->db->prepare($query);
6223
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6224
      
6225
		$airport_array = array();
6226
		$temp_array = array();
6227
        
6228
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6229
		{
6230
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6231
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6232
          
6233
			$airport_array[] = $temp_array;
6234
		}
6235
		return $airport_array;
6236
	}
6237
	
6238
	
6239
	
6240
	/**
6241
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
6242
	*
6243
	* @return Array the airport list
6244
	*
6245
	*/
6246
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
6247
	{
6248
		$filter_query = $this->getFilter($filters,true,true);
6249
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6250
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6251
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.ident = :ident 
6252
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6253
		    ORDER BY airport_departure_icao_count DESC";
6254
      
6255
		
6256
		$sth = $this->db->prepare($query);
6257
		$sth->execute(array(':ident' => $ident));
6258
      
6259
		$airport_array = array();
6260
		$temp_array = array();
6261
        
6262
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6263
		{
6264
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6265
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6266
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6267
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6268
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6269
          
6270
			$airport_array[] = $temp_array;
6271
		}
6272
6273
		return $airport_array;
6274
	}
6275
	
6276
	
6277
	
6278
	/**
6279
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
6280
	*
6281
	* @return Array the airport list
6282
	*
6283
	*/
6284
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
6285
	{
6286
		$filter_query = $this->getFilter($filters,true,true);
6287
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6288
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6289
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
6290
                    GROUP BY spotter_output.departure_airport_country
6291
					ORDER BY airport_departure_country_count DESC";
6292
      
6293
		
6294
		$sth = $this->db->prepare($query);
6295
		$sth->execute(array(':ident' => $ident));
6296
      
6297
		$airport_array = array();
6298
		$temp_array = array();
6299
        
6300
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6301
		{
6302
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6303
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6304
          
6305
			$airport_array[] = $temp_array;
6306
		}
6307
6308
		return $airport_array;
6309
	}
6310
	
6311
	
6312
	
6313
	/**
6314
	* Gets all departure airports of the airplanes that have flown over based on a country
6315
	*
6316
	* @return Array the airport list
6317
	*
6318
	*/
6319
	public function countAllDepartureAirportsByCountry($country,$filters = array())
6320
	{
6321
		$filter_query = $this->getFilter($filters,true,true);
6322
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6323
6324
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6325
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
6326
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6327
			    ORDER BY airport_departure_icao_count DESC";
6328
      
6329
		
6330
		$sth = $this->db->prepare($query);
6331
		$sth->execute(array(':country' => $country));
6332
      
6333
		$airport_array = array();
6334
		$temp_array = array();
6335
        
6336
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6337
		{
6338
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6339
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6340
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6341
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6342
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6343
          
6344
			$airport_array[] = $temp_array;
6345
		}
6346
6347
		return $airport_array;
6348
	}
6349
6350
6351
	/**
6352
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6353
	*
6354
	* @return Array the airport list
6355
	*
6356
	*/
6357
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
6358
	{
6359
		$filter_query = $this->getFilter($filters,true,true);
6360
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6361
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6362
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6363
                    GROUP BY spotter_output.departure_airport_country
6364
					ORDER BY airport_departure_country_count DESC";
6365
      
6366
		
6367
		$sth = $this->db->prepare($query);
6368
		$sth->execute(array(':country' => $country));
6369
      
6370
		$airport_array = array();
6371
		$temp_array = array();
6372
        
6373
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6374
		{
6375
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6376
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6377
          
6378
			$airport_array[] = $temp_array;
6379
		}
6380
6381
		return $airport_array;
6382
	}
6383
	
6384
6385
	/**
6386
	* Gets all arrival airports of the airplanes that have flown over
6387
	*
6388
	* @param Boolean $limit Limit result to 10 or not
6389
	* @param Integer $olderthanmonths Only show result older than x months
6390
	* @param String $sincedate Only show result since x date
6391
	* @param Boolean $icaoaskey Show result by ICAO
6392
	* @param Array $filters Filter used here
6393
	* @return Array the airport list
6394
	*
6395
	*/
6396
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6397
	{
6398
		global $globalDBdriver;
6399
		$filter_query = $this->getFilter($filters,true,true);
6400
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6401
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
6402
                if ($olderthanmonths > 0) {
6403
            		if ($globalDBdriver == 'mysql') {
6404
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6405
			} else {
6406
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6407
			}
6408
		}
6409
                if ($sincedate != '') {
6410
            		if ($globalDBdriver == 'mysql') {
6411
				$query .= " AND spotter_output.date > '".$sincedate."'";
6412
			} else {
6413
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6414
			}
6415
		}
6416
6417
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6418
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6419
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6420
					ORDER BY airport_arrival_icao_count DESC";
6421
		if ($limit) $query .= " LIMIT 10";
6422
      
6423
		
6424
		$sth = $this->db->prepare($query);
6425
		$sth->execute();
6426
      
6427
		$airport_array = array();
6428
		$temp_array = array();
6429
        
6430
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6431
		{
6432
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6433
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6434
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6435
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6436
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6437
          
6438
			if ($icaoaskey) {
6439
				$icao = $row['arrival_airport_icao'];
6440
				$airport_array[$icao] = $temp_array;
6441
			} else $airport_array[] = $temp_array;
6442
		}
6443
6444
		return $airport_array;
6445
	}
6446
6447
	/**
6448
	* Gets all arrival airports of the airplanes that have flown over
6449
	*
6450
	* @return Array the airport list
6451
	*
6452
	*/
6453
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6454
	{
6455
		global $globalDBdriver;
6456
		$filter_query = $this->getFilter($filters,true,true);
6457
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6458
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' ";
6459
                if ($olderthanmonths > 0) {
6460
            		if ($globalDBdriver == 'mysql') {
6461
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6462
			} else {
6463
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6464
			}
6465
		}
6466
                if ($sincedate != '') {
6467
            		if ($globalDBdriver == 'mysql') {
6468
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6469
			} else {
6470
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6471
			}
6472
		}
6473
6474
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6475
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6476
                $query .= "GROUP BY spotter_output.airline_icao,spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6477
					ORDER BY airport_arrival_icao_count DESC";
6478
		if ($limit) $query .= " LIMIT 10";
6479
      
6480
		
6481
		$sth = $this->db->prepare($query);
6482
		$sth->execute();
6483
      
6484
		$airport_array = array();
6485
		$temp_array = array();
6486
        
6487
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6488
		{
6489
			$temp_array['airline_icao'] = $row['airline_icao'];
6490
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6491
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6492
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6493
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6494
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6495
          
6496
			if ($icaoaskey) {
6497
				$icao = $row['arrival_airport_icao'];
6498
				$airport_array[$icao] = $temp_array;
6499
			} else $airport_array[] = $temp_array;
6500
		}
6501
6502
		return $airport_array;
6503
	}
6504
6505
6506
	/**
6507
	* Gets all detected arrival airports of the airplanes that have flown over
6508
	*
6509
	* @return Array the airport list
6510
	*
6511
	*/
6512
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
6513
	{
6514
		global $globalDBdriver;
6515
		$filter_query = $this->getFilter($filters,true,true);
6516
		$query  = "SELECT DISTINCT spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country 
6517
			FROM airport,spotter_output".$filter_query." spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao";
6518
                if ($olderthanmonths > 0) {
6519
            		if ($globalDBdriver == 'mysql') {
6520
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6521
			} else {
6522
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6523
			}
6524
		}
6525
                if ($sincedate != '') {
6526
            		if ($globalDBdriver == 'mysql') {
6527
				$query .= " AND spotter_output.date > '".$sincedate."'";
6528
			} else {
6529
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6530
			}
6531
		}
6532
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6533
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6534
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6535
					ORDER BY airport_arrival_icao_count DESC";
6536
		if ($limit) $query .= " LIMIT 10";
6537
      
6538
		
6539
		$sth = $this->db->prepare($query);
6540
		$sth->execute();
6541
      
6542
		$airport_array = array();
6543
		$temp_array = array();
6544
        
6545
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6546
		{
6547
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6548
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6549
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6550
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6551
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6552
          
6553
			if ($icaoaskey) {
6554
				$icao = $row['arrival_airport_icao'];
6555
				$airport_array[$icao] = $temp_array;
6556
			} else $airport_array[] = $temp_array;
6557
		}
6558
6559
		return $airport_array;
6560
	}
6561
	
6562
	/**
6563
	* Gets all detected arrival airports of the airplanes that have flown over
6564
	*
6565
	* @return Array the airport list
6566
	*
6567
	*/
6568
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
6569
	{
6570
		global $globalDBdriver;
6571
		$filter_query = $this->getFilter($filters,true,true);
6572
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country 
6573
			FROM airport,spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao ";
6574
                if ($olderthanmonths > 0) {
6575
            		if ($globalDBdriver == 'mysql') {
6576
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6577
			} else {
6578
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6579
			}
6580
		}
6581
                if ($sincedate != '') {
6582
            		if ($globalDBdriver == 'mysql') {
6583
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6584
			} else {
6585
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6586
			}
6587
		}
6588
6589
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6590
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6591
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6592
					ORDER BY airport_arrival_icao_count DESC";
6593
		if ($limit) $query .= " LIMIT 10";
6594
      
6595
		
6596
		$sth = $this->db->prepare($query);
6597
		$sth->execute();
6598
      
6599
		$airport_array = array();
6600
		$temp_array = array();
6601
        
6602
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6603
		{
6604
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6605
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6606
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6607
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6608
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6609
			$temp_array['airline_icao'] = $row['airline_icao'];
6610
          
6611
			if ($icaoaskey) {
6612
				$icao = $row['arrival_airport_icao'];
6613
				$airport_array[$icao] = $temp_array;
6614
			} else $airport_array[] = $temp_array;
6615
		}
6616
6617
		return $airport_array;
6618
	}	
6619
	
6620
	/**
6621
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
6622
	*
6623
	* @return Array the airport list
6624
	*
6625
	*/
6626
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
6627
	{
6628
		$filter_query = $this->getFilter($filters,true,true);
6629
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6630
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6631
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.airline_icao = :airline_icao 
6632
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6633
			    ORDER BY airport_arrival_icao_count DESC";
6634
		
6635
		$sth = $this->db->prepare($query);
6636
		$sth->execute(array(':airline_icao' => $airline_icao));
6637
      
6638
		$airport_array = array();
6639
		$temp_array = array();
6640
        
6641
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6642
		{
6643
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6644
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6645
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6646
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6647
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6648
          
6649
			$airport_array[] = $temp_array;
6650
		}
6651
6652
		return $airport_array;
6653
	}
6654
	
6655
	
6656
	/**
6657
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
6658
	*
6659
	* @return Array the airport list
6660
	*
6661
	*/
6662
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
6663
	{
6664
		$filter_query = $this->getFilter($filters,true,true);
6665
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6666
					
6667
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6668
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6669
                    GROUP BY spotter_output.arrival_airport_country
6670
					ORDER BY airport_arrival_country_count DESC";
6671
      
6672
		
6673
		$sth = $this->db->prepare($query);
6674
		$sth->execute(array(':airline_icao' => $airline_icao));
6675
      
6676
		$airport_array = array();
6677
		$temp_array = array();
6678
        
6679
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6680
		{
6681
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6682
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6683
          
6684
			$airport_array[] = $temp_array;
6685
		}
6686
6687
		return $airport_array;
6688
	}
6689
	
6690
	
6691
	/**
6692
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
6693
	*
6694
	* @return Array the airport list
6695
	*
6696
	*/
6697
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
6698
	{
6699
		$filter_query = $this->getFilter($filters,true,true);
6700
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6701
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6702
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
6703
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6704
			    ORDER BY airport_arrival_icao_count DESC";
6705
      
6706
		
6707
		$sth = $this->db->prepare($query);
6708
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6709
      
6710
		$airport_array = array();
6711
		$temp_array = array();
6712
        
6713
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6714
		{
6715
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6716
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6717
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6718
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6719
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6720
          
6721
			$airport_array[] = $temp_array;
6722
		}
6723
6724
		return $airport_array;
6725
	}
6726
	
6727
	
6728
	
6729
	/**
6730
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
6731
	*
6732
	* @return Array the airport list
6733
	*
6734
	*/
6735
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
6736
	{
6737
		$filter_query = $this->getFilter($filters,true,true);
6738
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6739
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6740
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6741
                    GROUP BY spotter_output.arrival_airport_country
6742
					ORDER BY airport_arrival_country_count DESC";
6743
      
6744
		
6745
		$sth = $this->db->prepare($query);
6746
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6747
      
6748
		$airport_array = array();
6749
		$temp_array = array();
6750
        
6751
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6752
		{
6753
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6754
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6755
          
6756
			$airport_array[] = $temp_array;
6757
		}
6758
6759
		return $airport_array;
6760
	}
6761
	
6762
	
6763
	/**
6764
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
6765
	*
6766
	* @return Array the airport list
6767
	*
6768
	*/
6769
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
6770
	{
6771
		$filter_query = $this->getFilter($filters,true,true);
6772
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6773
6774
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6775
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.registration = :registration 
6776
                    GROUP BY spotter_output.arrival_airport_icao
6777
					ORDER BY airport_arrival_icao_count DESC";
6778
      
6779
		
6780
		$sth = $this->db->prepare($query);
6781
		$sth->execute(array(':registration' => $registration));
6782
      
6783
		$airport_array = array();
6784
		$temp_array = array();
6785
        
6786
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6787
		{
6788
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6789
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6790
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6791
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6792
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6793
          
6794
			$airport_array[] = $temp_array;
6795
		}
6796
6797
		return $airport_array;
6798
	}
6799
	
6800
	
6801
	/**
6802
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
6803
	*
6804
	* @return Array the airport list
6805
	*
6806
	*/
6807
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
6808
	{
6809
		$filter_query = $this->getFilter($filters,true,true);
6810
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6811
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6812
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
6813
                    GROUP BY spotter_output.arrival_airport_country
6814
					ORDER BY airport_arrival_country_count DESC";
6815
      
6816
		
6817
		$sth = $this->db->prepare($query);
6818
		$sth->execute(array(':registration' => $registration));
6819
      
6820
		$airport_array = array();
6821
		$temp_array = array();
6822
        
6823
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6824
		{
6825
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6826
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6827
          
6828
			$airport_array[] = $temp_array;
6829
		}
6830
6831
		return $airport_array;
6832
	}
6833
	
6834
	
6835
	
6836
	/**
6837
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
6838
	*
6839
	* @return Array the airport list
6840
	*
6841
	*/
6842
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
6843
	{
6844
		$filter_query = $this->getFilter($filters,true,true);
6845
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6846
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6847
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.departure_airport_icao = :airport_icao 
6848
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6849
			    ORDER BY airport_arrival_icao_count DESC";
6850
      
6851
		
6852
		$sth = $this->db->prepare($query);
6853
		$sth->execute(array(':airport_icao' => $airport_icao));
6854
      
6855
		$airport_array = array();
6856
		$temp_array = array();
6857
        
6858
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6859
		{
6860
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6861
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6862
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6863
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6864
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6865
          
6866
			$airport_array[] = $temp_array;
6867
		}
6868
6869
		return $airport_array;
6870
	}
6871
	
6872
	
6873
	/**
6874
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
6875
	*
6876
	* @return Array the airport list
6877
	*
6878
	*/
6879
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
6880
	{
6881
		$filter_query = $this->getFilter($filters,true,true);
6882
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6883
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6884
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
6885
                    GROUP BY spotter_output.arrival_airport_country
6886
					ORDER BY airport_arrival_country_count DESC";
6887
      
6888
		
6889
		$sth = $this->db->prepare($query);
6890
		$sth->execute(array(':airport_icao' => $airport_icao));
6891
      
6892
		$airport_array = array();
6893
		$temp_array = array();
6894
        
6895
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6896
		{
6897
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6898
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6899
          
6900
			$airport_array[] = $temp_array;
6901
		}
6902
6903
		return $airport_array;
6904
	}
6905
	
6906
	
6907
	/**
6908
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
6909
	*
6910
	* @return Array the airport list
6911
	*
6912
	*/
6913
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6914
	{
6915
		$filter_query = $this->getFilter($filters,true,true);
6916
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6917
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6918
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6919
                    GROUP BY spotter_output.arrival_airport_icao
6920
					ORDER BY airport_arrival_icao_count DESC";
6921
      
6922
		
6923
		$sth = $this->db->prepare($query);
6924
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6925
      
6926
		$airport_array = array();
6927
		$temp_array = array();
6928
        
6929
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6930
		{
6931
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6932
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6933
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6934
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6935
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6936
          
6937
			$airport_array[] = $temp_array;
6938
		}
6939
6940
		return $airport_array;
6941
	}
6942
	
6943
	
6944
	
6945
	/**
6946
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
6947
	*
6948
	* @return Array the airport list
6949
	*
6950
	*/
6951
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6952
	{
6953
		$filter_query = $this->getFilter($filters,true,true);
6954
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6955
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6956
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6957
                    GROUP BY spotter_output.arrival_airport_country
6958
					ORDER BY airport_arrival_country_count DESC";
6959
      
6960
		
6961
		$sth = $this->db->prepare($query);
6962
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6963
      
6964
		$airport_array = array();
6965
		$temp_array = array();
6966
        
6967
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6968
		{
6969
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6970
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6971
          
6972
			$airport_array[] = $temp_array;
6973
		}
6974
6975
		return $airport_array;
6976
	}
6977
	
6978
	
6979
	
6980
	/**
6981
	* Gets all arrival airports of the airplanes that have flown over based on a date
6982
	*
6983
	* @return Array the airport list
6984
	*
6985
	*/
6986
	public function countAllArrivalAirportsByDate($date,$filters = array())
6987
	{
6988
		global $globalTimezone, $globalDBdriver;
6989
		$filter_query = $this->getFilter($filters,true,true);
6990
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6991
		if ($globalTimezone != '') {
6992
			date_default_timezone_set($globalTimezone);
6993
			$datetime = new DateTime($date);
6994
			$offset = $datetime->format('P');
6995
		} else $offset = '+00:00';
6996
6997
		if ($globalDBdriver == 'mysql') {
6998
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6999
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
7000
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7001
					ORDER BY airport_arrival_icao_count DESC";
7002
		} else {
7003
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7004
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
7005
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7006
					ORDER BY airport_arrival_icao_count DESC";
7007
		}
7008
		
7009
		$sth = $this->db->prepare($query);
7010
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7011
      
7012
		$airport_array = array();
7013
		$temp_array = array();
7014
        
7015
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7016
		{
7017
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7018
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7019
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7020
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7021
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7022
          
7023
			$airport_array[] = $temp_array;
7024
		}
7025
		return $airport_array;
7026
	}
7027
	
7028
	
7029
	
7030
	/**
7031
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
7032
	*
7033
	* @return Array the airport list
7034
	*
7035
	*/
7036
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
7037
	{
7038
		global $globalTimezone, $globalDBdriver;
7039
		$filter_query = $this->getFilter($filters,true,true);
7040
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7041
		if ($globalTimezone != '') {
7042
			date_default_timezone_set($globalTimezone);
7043
			$datetime = new DateTime($date);
7044
			$offset = $datetime->format('P');
7045
		} else $offset = '+00:00';
7046
7047
		if ($globalDBdriver == 'mysql') {
7048
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7049
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7050
					GROUP BY spotter_output.arrival_airport_country
7051
					ORDER BY airport_arrival_country_count DESC";
7052
		} else {
7053
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7054
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
7055
					GROUP BY spotter_output.arrival_airport_country
7056
					ORDER BY airport_arrival_country_count DESC";
7057
		}
7058
		
7059
		$sth = $this->db->prepare($query);
7060
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7061
      
7062
		$airport_array = array();
7063
		$temp_array = array();
7064
        
7065
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7066
		{
7067
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7068
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7069
          
7070
			$airport_array[] = $temp_array;
7071
		}
7072
		return $airport_array;
7073
	}
7074
	
7075
	
7076
	
7077
	/**
7078
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
7079
	*
7080
	* @return Array the airport list
7081
	*
7082
	*/
7083
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
7084
	{
7085
		$filter_query = $this->getFilter($filters,true,true);
7086
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7087
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7088
		    FROM spotter_output".$filter_query." WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.ident = :ident  
7089
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7090
		    ORDER BY airport_arrival_icao_count DESC";
7091
      
7092
		
7093
		$sth = $this->db->prepare($query);
7094
		$sth->execute(array(':ident' => $ident));
7095
      
7096
		$airport_array = array();
7097
		$temp_array = array();
7098
        
7099
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7100
		{
7101
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7102
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7103
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7104
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7105
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7106
          
7107
			$airport_array[] = $temp_array;
7108
		}
7109
7110
		return $airport_array;
7111
	}
7112
	
7113
	
7114
	/**
7115
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
7116
	*
7117
	* @return Array the airport list
7118
	*
7119
	*/
7120
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
7121
	{
7122
		$filter_query = $this->getFilter($filters,true,true);
7123
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7124
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7125
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
7126
                    GROUP BY spotter_output.arrival_airport_country
7127
					ORDER BY airport_arrival_country_count DESC";
7128
      
7129
		
7130
		$sth = $this->db->prepare($query);
7131
		$sth->execute(array(':ident' => $ident));
7132
      
7133
		$airport_array = array();
7134
		$temp_array = array();
7135
        
7136
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7137
		{
7138
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7139
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7140
          
7141
			$airport_array[] = $temp_array;
7142
		}
7143
7144
		return $airport_array;
7145
	}
7146
	
7147
	
7148
	
7149
	/**
7150
	* Gets all arrival airports of the airplanes that have flown over based on a country
7151
	*
7152
	* @return Array the airport list
7153
	*
7154
	*/
7155
	public function countAllArrivalAirportsByCountry($country,$filters = array())
7156
	{
7157
		$filter_query = $this->getFilter($filters,true,true);
7158
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7159
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7160
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
7161
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7162
			    ORDER BY airport_arrival_icao_count DESC";
7163
      
7164
		
7165
		$sth = $this->db->prepare($query);
7166
		$sth->execute(array(':country' => $country));
7167
      
7168
		$airport_array = array();
7169
		$temp_array = array();
7170
        
7171
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7172
		{
7173
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7174
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7175
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7176
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7177
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7178
          
7179
			$airport_array[] = $temp_array;
7180
		}
7181
7182
		return $airport_array;
7183
	}
7184
	
7185
	
7186
	/**
7187
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
7188
	*
7189
	* @return Array the airport list
7190
	*
7191
	*/
7192
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
7193
	{
7194
		$filter_query = $this->getFilter($filters,true,true);
7195
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7196
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7197
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
7198
                    GROUP BY spotter_output.arrival_airport_country
7199
					ORDER BY airport_arrival_country_count DESC";
7200
      
7201
		
7202
		$sth = $this->db->prepare($query);
7203
		$sth->execute(array(':country' => $country));
7204
      
7205
		$airport_array = array();
7206
		$temp_array = array();
7207
        
7208
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7209
		{
7210
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7211
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7212
          
7213
			$airport_array[] = $temp_array;
7214
		}
7215
7216
		return $airport_array;
7217
	}
7218
7219
7220
7221
	/**
7222
	* Counts all airport departure countries
7223
	*
7224
	* @return Array the airport departure list
7225
	*
7226
	*/
7227
	public function countAllDepartureCountries($filters = array())
7228
	{
7229
		$filter_query = $this->getFilter($filters,true,true);
7230
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7231
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
7232
		$query .= " GROUP BY spotter_output.departure_airport_country
7233
					ORDER BY airport_departure_country_count DESC
7234
					LIMIT 10 OFFSET 0";
7235
      
7236
		
7237
		$sth = $this->db->prepare($query);
7238
		$sth->execute();
7239
      
7240
		$airport_array = array();
7241
		$temp_array = array();
7242
        
7243
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7244
		{
7245
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7246
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7247
          
7248
			$airport_array[] = $temp_array;
7249
		}
7250
7251
		return $airport_array;
7252
	}
7253
	
7254
	
7255
	/**
7256
	* Counts all airport arrival countries
7257
	*
7258
	* @return Array the airport arrival list
7259
	*
7260
	*/
7261
	public function countAllArrivalCountries($limit = true,$filters = array())
7262
	{
7263
		$filter_query = $this->getFilter($filters,true,true);
7264
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7265
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7266
		$query .= " GROUP BY spotter_output.arrival_airport_country
7267
					ORDER BY airport_arrival_country_count DESC";
7268
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7269
      
7270
		
7271
		$sth = $this->db->prepare($query);
7272
		$sth->execute();
7273
      
7274
		$airport_array = array();
7275
		$temp_array = array();
7276
        
7277
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7278
		{
7279
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7280
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7281
          
7282
			$airport_array[] = $temp_array;
7283
		}
7284
7285
		return $airport_array;
7286
	}
7287
7288
7289
7290
7291
7292
	/**
7293
	* Gets all route combinations
7294
	*
7295
	* @return Array the route list
7296
	*
7297
	*/
7298
	public function countAllRoutes($filters = array())
7299
	{
7300
		$filter_query = $this->getFilter($filters,true,true);
7301
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7302
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''
7303
                    GROUP BY route,spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7304
                    ORDER BY route_count DESC
7305
		    LIMIT 10 OFFSET 0";
7306
      
7307
		
7308
		$sth = $this->db->prepare($query);
7309
		$sth->execute();
7310
      
7311
		$routes_array = array();
7312
		$temp_array = array();
7313
        
7314
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7315
		{
7316
			$temp_array['route_count'] = $row['route_count'];
7317
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7318
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7319
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7320
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7321
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7322
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7323
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7324
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7325
          
7326
			$routes_array[] = $temp_array;
7327
		}
7328
7329
		return $routes_array;
7330
	}
7331
	
7332
	
7333
	
7334
	
7335
	/**
7336
	* Gets all route combinations based on an aircraft
7337
	*
7338
	* @return Array the route list
7339
	*
7340
	*/
7341
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
7342
	{
7343
		$filter_query = $this->getFilter($filters,true,true);
7344
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7345
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7346
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7347
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7348
			    ORDER BY route_count DESC";
7349
		
7350
		$sth = $this->db->prepare($query);
7351
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7352
      
7353
		$routes_array = array();
7354
		$temp_array = array();
7355
        
7356
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7357
		{
7358
			$temp_array['route_count'] = $row['route_count'];
7359
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7360
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7361
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7362
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7363
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7364
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7365
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7366
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7367
          
7368
			$routes_array[] = $temp_array;
7369
		}
7370
7371
		return $routes_array;
7372
	}
7373
	
7374
	
7375
	/**
7376
	* Gets all route combinations based on an aircraft registration
7377
	*
7378
	* @return Array the route list
7379
	*
7380
	*/
7381
	public function countAllRoutesByRegistration($registration, $filters = array())
7382
	{
7383
		$filter_query = $this->getFilter($filters,true,true);
7384
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
7385
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7386
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
7387
                    GROUP BY route
7388
                    ORDER BY route_count DESC";
7389
      
7390
		
7391
		$sth = $this->db->prepare($query);
7392
		$sth->execute(array(':registration' => $registration));
7393
      
7394
		$routes_array = array();
7395
		$temp_array = array();
7396
        
7397
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7398
		{
7399
			$temp_array['route_count'] = $row['route_count'];
7400
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7401
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7402
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7403
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7404
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7405
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7406
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7407
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7408
          
7409
			$routes_array[] = $temp_array;
7410
		}
7411
7412
		return $routes_array;
7413
	}
7414
	
7415
	
7416
	
7417
	/**
7418
	* Gets all route combinations based on an airline
7419
	*
7420
	* @return Array the route list
7421
	*
7422
	*/
7423
	public function countAllRoutesByAirline($airline_icao, $filters = array())
7424
	{
7425
		$filter_query = $this->getFilter($filters,true,true);
7426
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7427
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7428
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
7429
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7430
			    ORDER BY route_count DESC";
7431
      
7432
		
7433
		$sth = $this->db->prepare($query);
7434
		$sth->execute(array(':airline_icao' => $airline_icao));
7435
      
7436
		$routes_array = array();
7437
		$temp_array = array();
7438
        
7439
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7440
		{
7441
			$temp_array['route_count'] = $row['route_count'];
7442
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7443
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7444
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7445
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7446
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7447
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7448
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7449
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7450
          
7451
			$routes_array[] = $temp_array;
7452
		}
7453
7454
		return $routes_array;
7455
	}
7456
	
7457
	
7458
	
7459
	/**
7460
	* Gets all route combinations based on an airport
7461
	*
7462
	* @return Array the route list
7463
	*
7464
	*/
7465
	public function countAllRoutesByAirport($airport_icao, $filters = array())
7466
	{
7467
		$filter_query = $this->getFilter($filters,true,true);
7468
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7469
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7470
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
7471
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7472
			    ORDER BY route_count DESC";
7473
		
7474
		$sth = $this->db->prepare($query);
7475
		$sth->execute(array(':airport_icao' => $airport_icao));
7476
      
7477
		$routes_array = array();
7478
		$temp_array = array();
7479
        
7480
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7481
		{
7482
			$temp_array['route_count'] = $row['route_count'];
7483
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7484
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7485
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7486
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7487
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7488
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7489
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7490
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7491
          
7492
			$routes_array[] = $temp_array;
7493
		}
7494
7495
		return $routes_array;
7496
	}
7497
	
7498
	
7499
	
7500
	/**
7501
	* Gets all route combinations based on an country
7502
	*
7503
	* @return Array the route list
7504
	*
7505
	*/
7506
	public function countAllRoutesByCountry($country, $filters = array())
7507
	{
7508
		$filter_query = $this->getFilter($filters,true,true);
7509
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7510
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7511
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
7512
			    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7513
			    ORDER BY route_count DESC";
7514
		
7515
		$sth = $this->db->prepare($query);
7516
		$sth->execute(array(':country' => $country));
7517
      
7518
		$routes_array = array();
7519
		$temp_array = array();
7520
        
7521
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7522
		{
7523
			$temp_array['route_count'] = $row['route_count'];
7524
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7525
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7526
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7527
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7528
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7529
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7530
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7531
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7532
          
7533
			$routes_array[] = $temp_array;
7534
		}
7535
7536
		return $routes_array;
7537
	}
7538
7539
7540
	/**
7541
	* Gets all route combinations based on an date
7542
	*
7543
	* @return Array the route list
7544
	*
7545
	*/
7546
	public function countAllRoutesByDate($date, $filters = array())
7547
	{
7548
		global $globalTimezone, $globalDBdriver;
7549
		$filter_query = $this->getFilter($filters,true,true);
7550
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7551
		if ($globalTimezone != '') {
7552
			date_default_timezone_set($globalTimezone);
7553
			$datetime = new DateTime($date);
7554
			$offset = $datetime->format('P');
7555
		} else $offset = '+00:00';
7556
		
7557
		if ($globalDBdriver == 'mysql') {
7558
			$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7559
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
7560
				    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7561
				    ORDER BY route_count DESC";
7562
		} else {
7563
			$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7564
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
7565
				    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7566
				    ORDER BY route_count DESC";
7567
		}
7568
		
7569
		$sth = $this->db->prepare($query);
7570
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7571
      
7572
		$routes_array = array();
7573
		$temp_array = array();
7574
        
7575
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7576
		{
7577
			$temp_array['route_count'] = $row['route_count'];
7578
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7579
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7580
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7581
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7582
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7583
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7584
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7585
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7586
          
7587
			$routes_array[] = $temp_array;
7588
		}
7589
7590
		return $routes_array;
7591
	}
7592
	
7593
	
7594
	/**
7595
	* Gets all route combinations based on an ident/callsign
7596
	*
7597
	* @return Array the route list
7598
	*
7599
	*/
7600
	public function countAllRoutesByIdent($ident, $filters = array())
7601
	{
7602
		$filter_query = $this->getFilter($filters,true,true);
7603
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7604
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7605
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
7606
                    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7607
                    ORDER BY route_count DESC";
7608
      
7609
		
7610
		$sth = $this->db->prepare($query);
7611
		$sth->execute(array(':ident' => $ident));
7612
      
7613
		$routes_array = array();
7614
		$temp_array = array();
7615
        
7616
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7617
		{
7618
			$temp_array['route_count'] = $row['route_count'];
7619
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7620
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7621
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7622
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7623
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7624
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7625
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7626
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7627
          
7628
			$routes_array[] = $temp_array;
7629
		}
7630
7631
		return $routes_array;
7632
	}
7633
	
7634
	
7635
	/**
7636
	* Gets all route combinations based on an manufacturer
7637
	*
7638
	* @return Array the route list
7639
	*
7640
	*/
7641
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
7642
	{
7643
		$filter_query = $this->getFilter($filters,true,true);
7644
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7645
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7646
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
7647
                    GROUP BY route
7648
                    ORDER BY route_count DESC";
7649
      
7650
		
7651
		$sth = $this->db->prepare($query);
7652
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7653
      
7654
		$routes_array = array();
7655
		$temp_array = array();
7656
        
7657
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7658
		{
7659
			$temp_array['route_count'] = $row['route_count'];
7660
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7661
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7662
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7663
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7664
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7665
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7666
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7667
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7668
          
7669
			$routes_array[] = $temp_array;
7670
		}
7671
7672
		return $routes_array;
7673
	}
7674
7675
	
7676
	
7677
	/**
7678
	* Gets all route combinations with waypoints
7679
	*
7680
	* @return Array the route list
7681
	*
7682
	*/
7683
	public function countAllRoutesWithWaypoints($filters = array())
7684
	{
7685
		$filter_query = $this->getFilter($filters,true,true);
7686
		$query  = "SELECT DISTINCT spotter_output.waypoints AS route, count(spotter_output.waypoints) AS route_count, spotter_output.spotter_id, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7687
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
7688
                    GROUP BY route, spotter_output.spotter_id, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7689
                    ORDER BY route_count DESC
7690
		    LIMIT 10 OFFSET 0";
7691
      
7692
		
7693
		$sth = $this->db->prepare($query);
7694
		$sth->execute();
7695
      
7696
		$routes_array = array();
7697
		$temp_array = array();
7698
        
7699
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7700
		{
7701
			$temp_array['spotter_id'] = $row['spotter_id'];
7702
			$temp_array['route_count'] = $row['route_count'];
7703
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7704
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7705
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7706
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7707
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7708
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7709
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7710
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7711
          
7712
			$routes_array[] = $temp_array;
7713
		}
7714
7715
		return $routes_array;
7716
	}
7717
	
7718
	/**
7719
	* Gets all callsigns that have flown over
7720
	*
7721
	* @return Array the callsign list
7722
	*
7723
	*/
7724
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
7725
	{
7726
		global $globalDBdriver;
7727
		$filter_query = $this->getFilter($filters,true,true);
7728
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
7729
                    FROM spotter_output".$filter_query." spotter_output.ident <> '' ";
7730
		 if ($olderthanmonths > 0) {
7731
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
7732
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7733
		}
7734
		if ($sincedate != '') {
7735
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
7736
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7737
		}
7738
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7739
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7740
      		
7741
		$sth = $this->db->prepare($query);
7742
		$sth->execute();
7743
      
7744
		$callsign_array = array();
7745
		$temp_array = array();
7746
        
7747
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7748
		{
7749
			$temp_array['callsign_icao'] = $row['ident'];
7750
			$temp_array['airline_name'] = $row['airline_name'];
7751
			$temp_array['airline_icao'] = $row['airline_icao'];
7752
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7753
          
7754
			$callsign_array[] = $temp_array;
7755
		}
7756
7757
		return $callsign_array;
7758
	}
7759
7760
	/**
7761
	* Gets all callsigns that have flown over
7762
	*
7763
	* @return Array the callsign list
7764
	*
7765
	*/
7766
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
7767
	{
7768
		global $globalDBdriver;
7769
		$filter_query = $this->getFilter($filters,true,true);
7770
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
7771
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
7772
		 if ($olderthanmonths > 0) {
7773
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7774
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7775
		}
7776
		if ($sincedate != '') {
7777
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
7778
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
7779
		}
7780
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7781
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7782
      		
7783
		$sth = $this->db->prepare($query);
7784
		$sth->execute();
7785
      
7786
		$callsign_array = array();
7787
		$temp_array = array();
7788
        
7789
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7790
		{
7791
			$temp_array['callsign_icao'] = $row['ident'];
7792
			$temp_array['airline_name'] = $row['airline_name'];
7793
			$temp_array['airline_icao'] = $row['airline_icao'];
7794
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7795
          
7796
			$callsign_array[] = $temp_array;
7797
		}
7798
7799
		return $callsign_array;
7800
	}
7801
7802
7803
7804
7805
	/**
7806
	* Counts all dates
7807
	*
7808
	* @return Array the date list
7809
	*
7810
	*/
7811
	public function countAllDates($filters = array())
7812
	{
7813
		global $globalTimezone, $globalDBdriver;
7814
		if ($globalTimezone != '') {
7815
			date_default_timezone_set($globalTimezone);
7816
			$datetime = new DateTime();
7817
			$offset = $datetime->format('P');
7818
		} else $offset = '+00:00';
7819
7820
		if ($globalDBdriver == 'mysql') {
7821
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7822
								FROM spotter_output";
7823
			$query .= $this->getFilter($filters);
7824
			$query .= " GROUP BY date_name 
7825
								ORDER BY date_count DESC
7826
								LIMIT 10 OFFSET 0";
7827
		} else {
7828
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7829
								FROM spotter_output";
7830
			$query .= $this->getFilter($filters);
7831
			$query .= " GROUP BY date_name 
7832
								ORDER BY date_count DESC
7833
								LIMIT 10 OFFSET 0";
7834
		}
7835
      
7836
		
7837
		$sth = $this->db->prepare($query);
7838
		$sth->execute(array(':offset' => $offset));
7839
      
7840
		$date_array = array();
7841
		$temp_array = array();
7842
        
7843
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7844
		{
7845
			$temp_array['date_name'] = $row['date_name'];
7846
			$temp_array['date_count'] = $row['date_count'];
7847
7848
			$date_array[] = $temp_array;
7849
		}
7850
7851
		return $date_array;
7852
	}
7853
	
7854
	/**
7855
	* Counts all dates
7856
	*
7857
	* @return Array the date list
7858
	*
7859
	*/
7860
	public function countAllDatesByAirlines($filters = array())
7861
	{
7862
		global $globalTimezone, $globalDBdriver;
7863
		if ($globalTimezone != '') {
7864
			date_default_timezone_set($globalTimezone);
7865
			$datetime = new DateTime();
7866
			$offset = $datetime->format('P');
7867
		} else $offset = '+00:00';
7868
		$filter_query = $this->getFilter($filters,true,true);
7869
		if ($globalDBdriver == 'mysql') {
7870
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7871
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
7872
								GROUP BY spotter_output.airline_icao, date_name 
7873
								ORDER BY date_count DESC
7874
								LIMIT 10 OFFSET 0";
7875
		} else {
7876
			$query  = "SELECT spotter_output.airline_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7877
								FROM spotter_output 
7878
								WHERE spotter_output.airline_icao <> '' 
7879
								GROUP BY spotter_output.airline_icao, date_name 
7880
								ORDER BY date_count DESC
7881
								LIMIT 10 OFFSET 0";
7882
		}
7883
      
7884
		
7885
		$sth = $this->db->prepare($query);
7886
		$sth->execute(array(':offset' => $offset));
7887
      
7888
		$date_array = array();
7889
		$temp_array = array();
7890
        
7891
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7892
		{
7893
			$temp_array['date_name'] = $row['date_name'];
7894
			$temp_array['date_count'] = $row['date_count'];
7895
			$temp_array['airline_icao'] = $row['airline_icao'];
7896
7897
			$date_array[] = $temp_array;
7898
		}
7899
7900
		return $date_array;
7901
	}	
7902
	
7903
	/**
7904
	* Counts all dates during the last 7 days
7905
	*
7906
	* @return Array the date list
7907
	*
7908
	*/
7909
	public function countAllDatesLast7Days($filters = array())
7910
	{
7911
		global $globalTimezone, $globalDBdriver;
7912
		if ($globalTimezone != '') {
7913
			date_default_timezone_set($globalTimezone);
7914
			$datetime = new DateTime();
7915
			$offset = $datetime->format('P');
7916
		} else $offset = '+00:00';
7917
		$filter_query = $this->getFilter($filters,true,true);
7918
		if ($globalDBdriver == 'mysql') {
7919
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7920
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
7921
			$query .= " GROUP BY date_name 
7922
								ORDER BY spotter_output.date ASC";
7923
			$query_data = array(':offset' => $offset);
7924
		} else {
7925
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7926
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
7927
			$query .= " GROUP BY date_name 
7928
								ORDER BY date_name ASC";
7929
			$query_data = array(':offset' => $offset);
7930
    		}
7931
		
7932
		$sth = $this->db->prepare($query);
7933
		$sth->execute($query_data);
7934
      
7935
		$date_array = array();
7936
		$temp_array = array();
7937
        
7938
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7939
		{
7940
			$temp_array['date_name'] = $row['date_name'];
7941
			$temp_array['date_count'] = $row['date_count'];
7942
          
7943
			$date_array[] = $temp_array;
7944
		}
7945
7946
		return $date_array;
7947
	}
7948
7949
	/**
7950
	* Counts all dates during the last month
7951
	*
7952
	* @return Array the date list
7953
	*
7954
	*/
7955
	public function countAllDatesLastMonth($filters = array())
7956
	{
7957
		global $globalTimezone, $globalDBdriver;
7958
		if ($globalTimezone != '') {
7959
			date_default_timezone_set($globalTimezone);
7960
			$datetime = new DateTime();
7961
			$offset = $datetime->format('P');
7962
		} else $offset = '+00:00';
7963
		$filter_query = $this->getFilter($filters,true,true);
7964
		if ($globalDBdriver == 'mysql') {
7965
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7966
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
7967
			$query .= " GROUP BY date_name 
7968
								ORDER BY spotter_output.date ASC";
7969
			$query_data = array(':offset' => $offset);
7970
		} else {
7971
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7972
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
7973
			$query .= " GROUP BY date_name 
7974
								ORDER BY date_name ASC";
7975
			$query_data = array(':offset' => $offset);
7976
    		}
7977
		
7978
		$sth = $this->db->prepare($query);
7979
		$sth->execute($query_data);
7980
      
7981
		$date_array = array();
7982
		$temp_array = array();
7983
        
7984
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7985
		{
7986
			$temp_array['date_name'] = $row['date_name'];
7987
			$temp_array['date_count'] = $row['date_count'];
7988
          
7989
			$date_array[] = $temp_array;
7990
		}
7991
7992
		return $date_array;
7993
	}
7994
7995
7996
	/**
7997
	* Counts all dates during the last month
7998
	*
7999
	* @return Array the date list
8000
	*
8001
	*/
8002
	public function countAllDatesLastMonthByAirlines($filters = array())
8003
	{
8004
		global $globalTimezone, $globalDBdriver;
8005
		$filter_query = $this->getFilter($filters,true,true);
8006
		if ($globalTimezone != '') {
8007
			date_default_timezone_set($globalTimezone);
8008
			$datetime = new DateTime();
8009
			$offset = $datetime->format('P');
8010
		} else $offset = '+00:00';
8011
		
8012
		if ($globalDBdriver == 'mysql') {
8013
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8014
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
8015
								GROUP BY spotter_output.airline_icao, date_name 
8016
								ORDER BY spotter_output.date ASC";
8017
			$query_data = array(':offset' => $offset);
8018
		} else {
8019
			$query  = "SELECT spotter_output.airline_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
8020
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
8021
								GROUP BY spotter_output.airline_icao, date_name 
8022
								ORDER BY date_name ASC";
8023
			$query_data = array(':offset' => $offset);
8024
    		}
8025
		
8026
		$sth = $this->db->prepare($query);
8027
		$sth->execute($query_data);
8028
      
8029
		$date_array = array();
8030
		$temp_array = array();
8031
        
8032
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8033
		{
8034
			$temp_array['date_name'] = $row['date_name'];
8035
			$temp_array['date_count'] = $row['date_count'];
8036
			$temp_array['airline_icao'] = $row['airline_icao'];
8037
          
8038
			$date_array[] = $temp_array;
8039
		}
8040
8041
		return $date_array;
8042
	}
8043
	
8044
8045
	/**
8046
	* Counts all month
8047
	*
8048
	* @return Array the month list
8049
	*
8050
	*/
8051
	public function countAllMonths($filters = array())
8052
	{
8053
		global $globalTimezone, $globalDBdriver;
8054
		if ($globalTimezone != '') {
8055
			date_default_timezone_set($globalTimezone);
8056
			$datetime = new DateTime();
8057
			$offset = $datetime->format('P');
8058
		} else $offset = '+00:00';
8059
8060
		if ($globalDBdriver == 'mysql') {
8061
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
8062
								FROM spotter_output";
8063
			$query .= $this->getFilter($filters);
8064
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
8065
		} else {
8066
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
8067
								FROM spotter_output";
8068
			$query .= $this->getFilter($filters);
8069
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
8070
		}
8071
      
8072
		
8073
		$sth = $this->db->prepare($query);
8074
		$sth->execute(array(':offset' => $offset));
8075
      
8076
		$date_array = array();
8077
		$temp_array = array();
8078
        
8079
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8080
		{
8081
			$temp_array['month_name'] = $row['month_name'];
8082
			$temp_array['year_name'] = $row['year_name'];
8083
			$temp_array['date_count'] = $row['date_count'];
8084
8085
			$date_array[] = $temp_array;
8086
		}
8087
8088
		return $date_array;
8089
	}
8090
8091
	/**
8092
	* Counts all month
8093
	*
8094
	* @return Array the month list
8095
	*
8096
	*/
8097
	public function countAllMonthsByAirlines($filters = array())
8098
	{
8099
		global $globalTimezone, $globalDBdriver;
8100
		$filter_query = $this->getFilter($filters,true,true);
8101
		if ($globalTimezone != '') {
8102
			date_default_timezone_set($globalTimezone);
8103
			$datetime = new DateTime();
8104
			$offset = $datetime->format('P');
8105
		} else $offset = '+00:00';
8106
8107
		if ($globalDBdriver == 'mysql') {
8108
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
8109
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8110
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8111
								ORDER BY date_count DESC";
8112
		} else {
8113
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
8114
								FROM spotter_output 
8115
								WHERE spotter_output.airline_icao <> '' 
8116
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8117
								ORDER BY date_count DESC";
8118
		}
8119
      
8120
		
8121
		$sth = $this->db->prepare($query);
8122
		$sth->execute(array(':offset' => $offset));
8123
      
8124
		$date_array = array();
8125
		$temp_array = array();
8126
        
8127
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8128
		{
8129
			$temp_array['month_name'] = $row['month_name'];
8130
			$temp_array['year_name'] = $row['year_name'];
8131
			$temp_array['date_count'] = $row['date_count'];
8132
			$temp_array['airline_icao'] = $row['airline_icao'];
8133
8134
			$date_array[] = $temp_array;
8135
		}
8136
8137
		return $date_array;
8138
	}
8139
8140
	/**
8141
	* Counts all military month
8142
	*
8143
	* @return Array the month list
8144
	*
8145
	*/
8146
	public function countAllMilitaryMonths($filters = array())
8147
	{
8148
		global $globalTimezone, $globalDBdriver;
8149
		if ($globalTimezone != '') {
8150
			date_default_timezone_set($globalTimezone);
8151
			$datetime = new DateTime();
8152
			$offset = $datetime->format('P');
8153
		} else $offset = '+00:00';
8154
		$filter_query = $this->getFilter($filters,true,true);
8155
		if ($globalDBdriver == 'mysql') {
8156
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
8157
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
8158
								GROUP BY year_name, month_name 
8159
								ORDER BY date_count DESC";
8160
		} else {
8161
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
8162
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
8163
								GROUP BY year_name, month_name 
8164
								ORDER BY date_count DESC";
8165
		}
8166
		
8167
		$sth = $this->db->prepare($query);
8168
		$sth->execute(array(':offset' => $offset));
8169
      
8170
		$date_array = array();
8171
		$temp_array = array();
8172
        
8173
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8174
		{
8175
			$temp_array['month_name'] = $row['month_name'];
8176
			$temp_array['year_name'] = $row['year_name'];
8177
			$temp_array['date_count'] = $row['date_count'];
8178
8179
			$date_array[] = $temp_array;
8180
		}
8181
8182
		return $date_array;
8183
	}
8184
	
8185
	/**
8186
	* Counts all month owners
8187
	*
8188
	* @return Array the month list
8189
	*
8190
	*/
8191
	public function countAllMonthsOwners($filters = array())
8192
	{
8193
		global $globalTimezone, $globalDBdriver;
8194
		if ($globalTimezone != '') {
8195
			date_default_timezone_set($globalTimezone);
8196
			$datetime = new DateTime();
8197
			$offset = $datetime->format('P');
8198
		} else $offset = '+00:00';
8199
		$filter_query = $this->getFilter($filters,true,true);
8200
8201
		if ($globalDBdriver == 'mysql') {
8202
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct owner_name) as date_count
8203
								FROM spotter_output".$filter_query." owner_name <> ''
8204
								GROUP BY year_name, month_name
8205
								ORDER BY date_count DESC";
8206
		} else {
8207
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct owner_name) as date_count
8208
								FROM spotter_output".$filter_query." owner_name <> ''
8209
								GROUP BY year_name, month_name
8210
								ORDER BY date_count DESC";
8211
		}
8212
		
8213
		$sth = $this->db->prepare($query);
8214
		$sth->execute(array(':offset' => $offset));
8215
      
8216
		$date_array = array();
8217
		$temp_array = array();
8218
        
8219
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8220
		{
8221
			$temp_array['month_name'] = $row['month_name'];
8222
			$temp_array['year_name'] = $row['year_name'];
8223
			$temp_array['date_count'] = $row['date_count'];
8224
8225
			$date_array[] = $temp_array;
8226
		}
8227
8228
		return $date_array;
8229
	}
8230
	
8231
	/**
8232
	* Counts all month owners
8233
	*
8234
	* @return Array the month list
8235
	*
8236
	*/
8237
	public function countAllMonthsOwnersByAirlines($filters = array())
8238
	{
8239
		global $globalTimezone, $globalDBdriver;
8240
		$filter_query = $this->getFilter($filters,true,true);
8241
		if ($globalTimezone != '') {
8242
			date_default_timezone_set($globalTimezone);
8243
			$datetime = new DateTime();
8244
			$offset = $datetime->format('P');
8245
		} else $offset = '+00:00';
8246
8247
		if ($globalDBdriver == 'mysql') {
8248
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct owner_name) as date_count
8249
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8250
								GROUP BY spotter_output.airline_icao, year_name, month_name
8251
								ORDER BY date_count DESC";
8252
		} else {
8253
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct owner_name) as date_count
8254
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8255
								GROUP BY spotter_output.airline_icao, year_name, month_name
8256
								ORDER BY date_count DESC";
8257
		}
8258
		
8259
		$sth = $this->db->prepare($query);
8260
		$sth->execute(array(':offset' => $offset));
8261
      
8262
		$date_array = array();
8263
		$temp_array = array();
8264
        
8265
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8266
		{
8267
			$temp_array['month_name'] = $row['month_name'];
8268
			$temp_array['year_name'] = $row['year_name'];
8269
			$temp_array['date_count'] = $row['date_count'];
8270
			$temp_array['airline_icao'] = $row['airline_icao'];
8271
8272
			$date_array[] = $temp_array;
8273
		}
8274
8275
		return $date_array;
8276
	}
8277
8278
	/**
8279
	* Counts all month pilot
8280
	*
8281
	* @return Array the month list
8282
	*
8283
	*/
8284
	public function countAllMonthsPilots($filters = array())
8285
	{
8286
		global $globalTimezone, $globalDBdriver;
8287
		if ($globalTimezone != '') {
8288
			date_default_timezone_set($globalTimezone);
8289
			$datetime = new DateTime();
8290
			$offset = $datetime->format('P');
8291
		} else $offset = '+00:00';
8292
		$filter_query = $this->getFilter($filters,true,true);
8293
8294
		if ($globalDBdriver == 'mysql') {
8295
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct pilot_id) as date_count
8296
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8297
								GROUP BY year_name, month_name
8298
								ORDER BY date_count DESC";
8299
		} else {
8300
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct pilot_id) as date_count
8301
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8302
								GROUP BY year_name, month_name
8303
								ORDER BY date_count DESC";
8304
		}
8305
		
8306
		$sth = $this->db->prepare($query);
8307
		$sth->execute(array(':offset' => $offset));
8308
      
8309
		$date_array = array();
8310
		$temp_array = array();
8311
        
8312
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8313
		{
8314
			$temp_array['month_name'] = $row['month_name'];
8315
			$temp_array['year_name'] = $row['year_name'];
8316
			$temp_array['date_count'] = $row['date_count'];
8317
8318
			$date_array[] = $temp_array;
8319
		}
8320
8321
		return $date_array;
8322
	}
8323
	
8324
	/**
8325
	* Counts all month pilot
8326
	*
8327
	* @return Array the month list
8328
	*
8329
	*/
8330
	public function countAllMonthsPilotsByAirlines($filters = array())
8331
	{
8332
		global $globalTimezone, $globalDBdriver;
8333
		$filter_query = $this->getFilter($filters,true,true);
8334
		if ($globalTimezone != '') {
8335
			date_default_timezone_set($globalTimezone);
8336
			$datetime = new DateTime();
8337
			$offset = $datetime->format('P');
8338
		} else $offset = '+00:00';
8339
8340
		if ($globalDBdriver == 'mysql') {
8341
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct pilot_id) as date_count
8342
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8343
								GROUP BY spotter_output.airline_icao,year_name, month_name
8344
								ORDER BY date_count DESC";
8345
		} else {
8346
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct pilot_id) as date_count
8347
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8348
								GROUP BY spotter_output.airline_icao, year_name, month_name
8349
								ORDER BY date_count DESC";
8350
		}
8351
		
8352
		$sth = $this->db->prepare($query);
8353
		$sth->execute(array(':offset' => $offset));
8354
      
8355
		$date_array = array();
8356
		$temp_array = array();
8357
        
8358
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8359
		{
8360
			$temp_array['month_name'] = $row['month_name'];
8361
			$temp_array['year_name'] = $row['year_name'];
8362
			$temp_array['date_count'] = $row['date_count'];
8363
			$temp_array['airline_icao'] = $row['airline_icao'];
8364
8365
			$date_array[] = $temp_array;
8366
		}
8367
8368
		return $date_array;
8369
	}
8370
8371
	/**
8372
	* Counts all month airline
8373
	*
8374
	* @return Array the month list
8375
	*
8376
	*/
8377
	public function countAllMonthsAirlines($filters = array())
8378
	{
8379
		global $globalTimezone, $globalDBdriver;
8380
		$filter_query = $this->getFilter($filters,true,true);
8381
		if ($globalTimezone != '') {
8382
			date_default_timezone_set($globalTimezone);
8383
			$datetime = new DateTime();
8384
			$offset = $datetime->format('P');
8385
		} else $offset = '+00:00';
8386
8387
		if ($globalDBdriver == 'mysql') {
8388
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct airline_icao) as date_count
8389
								FROM spotter_output".$filter_query." airline_icao <> '' 
8390
								GROUP BY year_name, month_name
8391
								ORDER BY date_count DESC";
8392
		} else {
8393
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct airline_icao) as date_count
8394
								FROM spotter_output".$filter_query." airline_icao <> '' 
8395
								GROUP BY year_name, month_name
8396
								ORDER BY date_count DESC";
8397
		}
8398
		
8399
		$sth = $this->db->prepare($query);
8400
		$sth->execute(array(':offset' => $offset));
8401
      
8402
		$date_array = array();
8403
		$temp_array = array();
8404
        
8405
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8406
		{
8407
			$temp_array['month_name'] = $row['month_name'];
8408
			$temp_array['year_name'] = $row['year_name'];
8409
			$temp_array['date_count'] = $row['date_count'];
8410
8411
			$date_array[] = $temp_array;
8412
		}
8413
8414
		return $date_array;
8415
	}
8416
	
8417
	/**
8418
	* Counts all month aircraft
8419
	*
8420
	* @return Array the month list
8421
	*
8422
	*/
8423
	public function countAllMonthsAircrafts($filters = array())
8424
	{
8425
		global $globalTimezone, $globalDBdriver;
8426
		if ($globalTimezone != '') {
8427
			date_default_timezone_set($globalTimezone);
8428
			$datetime = new DateTime();
8429
			$offset = $datetime->format('P');
8430
		} else $offset = '+00:00';
8431
		$filter_query = $this->getFilter($filters,true,true);
8432
8433
		if ($globalDBdriver == 'mysql') {
8434
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct aircraft_icao) as date_count
8435
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
8436
								GROUP BY year_name, month_name
8437
								ORDER BY date_count DESC";
8438
		} else {
8439
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct aircraft_icao) as date_count
8440
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
8441
								GROUP BY year_name, month_name
8442
								ORDER BY date_count DESC";
8443
		}
8444
		
8445
		$sth = $this->db->prepare($query);
8446
		$sth->execute(array(':offset' => $offset));
8447
      
8448
		$date_array = array();
8449
		$temp_array = array();
8450
        
8451
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8452
		{
8453
			$temp_array['month_name'] = $row['month_name'];
8454
			$temp_array['year_name'] = $row['year_name'];
8455
			$temp_array['date_count'] = $row['date_count'];
8456
8457
			$date_array[] = $temp_array;
8458
		}
8459
8460
		return $date_array;
8461
	}
8462
	
8463
8464
	/**
8465
	* Counts all month aircraft
8466
	*
8467
	* @return Array the month list
8468
	*
8469
	*/
8470
	public function countAllMonthsAircraftsByAirlines($filters = array())
8471
	{
8472
		global $globalTimezone, $globalDBdriver;
8473
		$filter_query = $this->getFilter($filters,true,true);
8474
		if ($globalTimezone != '') {
8475
			date_default_timezone_set($globalTimezone);
8476
			$datetime = new DateTime();
8477
			$offset = $datetime->format('P');
8478
		} else $offset = '+00:00';
8479
8480
		if ($globalDBdriver == 'mysql') {
8481
			$query  = "SELECT spotter_output.airline_icao,YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct aircraft_icao) as date_count
8482
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
8483
								GROUP BY spotter_output.airline_icao, year_name, month_name
8484
								ORDER BY date_count DESC";
8485
		} else {
8486
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct aircraft_icao) as date_count
8487
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
8488
								GROUP BY spotter_output.airline_icao, year_name, month_name
8489
								ORDER BY date_count DESC";
8490
		}
8491
		
8492
		$sth = $this->db->prepare($query);
8493
		$sth->execute(array(':offset' => $offset));
8494
      
8495
		$date_array = array();
8496
		$temp_array = array();
8497
        
8498
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8499
		{
8500
			$temp_array['month_name'] = $row['month_name'];
8501
			$temp_array['year_name'] = $row['year_name'];
8502
			$temp_array['date_count'] = $row['date_count'];
8503
			$temp_array['airline_icao'] = $row['airline_icao'];
8504
8505
			$date_array[] = $temp_array;
8506
		}
8507
8508
		return $date_array;
8509
	}
8510
8511
	/**
8512
	* Counts all month real arrival
8513
	*
8514
	* @return Array the month list
8515
	*
8516
	*/
8517
	public function countAllMonthsRealArrivals($filters = array())
8518
	{
8519
		global $globalTimezone, $globalDBdriver;
8520
		if ($globalTimezone != '') {
8521
			date_default_timezone_set($globalTimezone);
8522
			$datetime = new DateTime();
8523
			$offset = $datetime->format('P');
8524
		} else $offset = '+00:00';
8525
		$filter_query = $this->getFilter($filters,true,true);
8526
8527
		if ($globalDBdriver == 'mysql') {
8528
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(real_arrival_airport_icao) as date_count
8529
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
8530
								GROUP BY year_name, month_name
8531
								ORDER BY date_count DESC";
8532
		} else {
8533
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(real_arrival_airport_icao) as date_count
8534
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
8535
								GROUP BY year_name, month_name
8536
								ORDER BY date_count DESC";
8537
		}
8538
		
8539
		$sth = $this->db->prepare($query);
8540
		$sth->execute(array(':offset' => $offset));
8541
      
8542
		$date_array = array();
8543
		$temp_array = array();
8544
        
8545
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8546
		{
8547
			$temp_array['month_name'] = $row['month_name'];
8548
			$temp_array['year_name'] = $row['year_name'];
8549
			$temp_array['date_count'] = $row['date_count'];
8550
8551
			$date_array[] = $temp_array;
8552
		}
8553
8554
		return $date_array;
8555
	}
8556
	
8557
8558
	/**
8559
	* Counts all month real arrival
8560
	*
8561
	* @return Array the month list
8562
	*
8563
	*/
8564
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
8565
	{
8566
		global $globalTimezone, $globalDBdriver;
8567
		$filter_query = $this->getFilter($filters,true,true);
8568
		if ($globalTimezone != '') {
8569
			date_default_timezone_set($globalTimezone);
8570
			$datetime = new DateTime();
8571
			$offset = $datetime->format('P');
8572
		} else $offset = '+00:00';
8573
8574
		if ($globalDBdriver == 'mysql') {
8575
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(real_arrival_airport_icao) as date_count
8576
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
8577
								GROUP BY spotter_output.airline_icao, year_name, month_name
8578
								ORDER BY date_count DESC";
8579
		} else {
8580
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(real_arrival_airport_icao) as date_count
8581
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
8582
								GROUP BY spotter_output.airline_icao, year_name, month_name
8583
								ORDER BY date_count DESC";
8584
		}
8585
		
8586
		$sth = $this->db->prepare($query);
8587
		$sth->execute(array(':offset' => $offset));
8588
      
8589
		$date_array = array();
8590
		$temp_array = array();
8591
        
8592
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8593
		{
8594
			$temp_array['month_name'] = $row['month_name'];
8595
			$temp_array['year_name'] = $row['year_name'];
8596
			$temp_array['date_count'] = $row['date_count'];
8597
			$temp_array['airline_icao'] = $row['airline_icao'];
8598
8599
			$date_array[] = $temp_array;
8600
		}
8601
8602
		return $date_array;
8603
	}
8604
	
8605
8606
	/**
8607
	* Counts all dates during the last year
8608
	*
8609
	* @return Array the date list
8610
	*
8611
	*/
8612
	public function countAllMonthsLastYear($filters)
8613
	{
8614
		global $globalTimezone, $globalDBdriver;
8615
		if ($globalTimezone != '') {
8616
			date_default_timezone_set($globalTimezone);
8617
			$datetime = new DateTime();
8618
			$offset = $datetime->format('P');
8619
		} else $offset = '+00:00';
8620
		$filter_query = $this->getFilter($filters,true,true);
8621
		if ($globalDBdriver == 'mysql') {
8622
			$query  = "SELECT MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name, count(*) as date_count
8623
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
8624
			$query .= " GROUP BY year_name, month_name
8625
								ORDER BY year_name, month_name ASC";
8626
			$query_data = array(':offset' => $offset);
8627
		} else {
8628
			$query  = "SELECT EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name, count(*) as date_count
8629
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
8630
			$query .= " GROUP BY year_name, month_name
8631
								ORDER BY year_name, month_name ASC";
8632
			$query_data = array(':offset' => $offset);
8633
    		}
8634
		
8635
		$sth = $this->db->prepare($query);
8636
		$sth->execute($query_data);
8637
      
8638
		$date_array = array();
8639
		$temp_array = array();
8640
        
8641
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8642
		{
8643
			$temp_array['year_name'] = $row['year_name'];
8644
			$temp_array['month_name'] = $row['month_name'];
8645
			$temp_array['date_count'] = $row['date_count'];
8646
          
8647
			$date_array[] = $temp_array;
8648
		}
8649
8650
		return $date_array;
8651
	}
8652
	
8653
	
8654
	
8655
	/**
8656
	* Counts all hours
8657
	*
8658
	* @return Array the hour list
8659
	*
8660
	*/
8661
	public function countAllHours($orderby,$filters = array())
8662
	{
8663
		global $globalTimezone, $globalDBdriver;
8664
		if ($globalTimezone != '') {
8665
			date_default_timezone_set($globalTimezone);
8666
			$datetime = new DateTime();
8667
			$offset = $datetime->format('P');
8668
		} else $offset = '+00:00';
8669
8670
		$orderby_sql = '';
8671
		if ($orderby == "hour")
8672
		{
8673
			$orderby_sql = "ORDER BY hour_name ASC";
8674
		}
8675
		if ($orderby == "count")
8676
		{
8677
			$orderby_sql = "ORDER BY hour_count DESC";
8678
		}
8679
		
8680
		if ($globalDBdriver == 'mysql') {
8681
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8682
								FROM spotter_output";
8683
			$query .= $this->getFilter($filters);
8684
			$query .= " GROUP BY hour_name 
8685
								".$orderby_sql;
8686
8687
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
8688
								FROM spotter_output 
8689
								GROUP BY hour_name 
8690
								".$orderby_sql."
8691
								LIMIT 10 OFFSET 00";
8692
  */    
8693
		$query_data = array(':offset' => $offset);
8694
		} else {
8695
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8696
								FROM spotter_output";
8697
			$query .= $this->getFilter($filters);
8698
			$query .= " GROUP BY hour_name 
8699
								".$orderby_sql;
8700
			$query_data = array(':offset' => $offset);
8701
		}
8702
		
8703
		$sth = $this->db->prepare($query);
8704
		$sth->execute($query_data);
8705
      
8706
		$hour_array = array();
8707
		$temp_array = array();
8708
        
8709
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8710
		{
8711
			$temp_array['hour_name'] = $row['hour_name'];
8712
			$temp_array['hour_count'] = $row['hour_count'];
8713
          
8714
			$hour_array[] = $temp_array;
8715
		}
8716
8717
		return $hour_array;
8718
	}
8719
	
8720
	/**
8721
	* Counts all hours
8722
	*
8723
	* @return Array the hour list
8724
	*
8725
	*/
8726
	public function countAllHoursByAirlines($orderby, $filters = array())
8727
	{
8728
		global $globalTimezone, $globalDBdriver;
8729
		$filter_query = $this->getFilter($filters,true,true);
8730
		if ($globalTimezone != '') {
8731
			date_default_timezone_set($globalTimezone);
8732
			$datetime = new DateTime();
8733
			$offset = $datetime->format('P');
8734
		} else $offset = '+00:00';
8735
8736
		$orderby_sql = '';
8737
		if ($orderby == "hour")
8738
		{
8739
			$orderby_sql = "ORDER BY hour_name ASC";
8740
		}
8741
		if ($orderby == "count")
8742
		{
8743
			$orderby_sql = "ORDER BY hour_count DESC";
8744
		}
8745
		
8746
		if ($globalDBdriver == 'mysql') {
8747
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8748
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8749
								GROUP BY spotter_output.airline_icao, hour_name 
8750
								".$orderby_sql;
8751
8752
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
8753
								FROM spotter_output 
8754
								GROUP BY hour_name 
8755
								".$orderby_sql."
8756
								LIMIT 10 OFFSET 00";
8757
  */    
8758
		$query_data = array(':offset' => $offset);
8759
		} else {
8760
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8761
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8762
								GROUP BY spotter_output.airline_icao, hour_name 
8763
								".$orderby_sql;
8764
			$query_data = array(':offset' => $offset);
8765
		}
8766
		
8767
		$sth = $this->db->prepare($query);
8768
		$sth->execute($query_data);
8769
      
8770
		$hour_array = array();
8771
		$temp_array = array();
8772
        
8773
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8774
		{
8775
			$temp_array['hour_name'] = $row['hour_name'];
8776
			$temp_array['hour_count'] = $row['hour_count'];
8777
			$temp_array['airline_icao'] = $row['airline_icao'];
8778
          
8779
			$hour_array[] = $temp_array;
8780
		}
8781
8782
		return $hour_array;
8783
	}
8784
8785
8786
8787
	/**
8788
	* Counts all hours by airline
8789
	*
8790
	* @return Array the hour list
8791
	*
8792
	*/
8793
	public function countAllHoursByAirline($airline_icao, $filters = array())
8794
	{
8795
		global $globalTimezone, $globalDBdriver;
8796
		$filter_query = $this->getFilter($filters,true,true);
8797
		if ($globalTimezone != '') {
8798
			date_default_timezone_set($globalTimezone);
8799
			$datetime = new DateTime();
8800
			$offset = $datetime->format('P');
8801
		} else $offset = '+00:00';
8802
8803
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8804
8805
		if ($globalDBdriver == 'mysql') {
8806
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8807
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
8808
								GROUP BY hour_name 
8809
								ORDER BY hour_name ASC";
8810
		} else {
8811
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8812
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
8813
								GROUP BY hour_name 
8814
								ORDER BY hour_name ASC";
8815
		}
8816
		
8817
		$sth = $this->db->prepare($query);
8818
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
8819
      
8820
		$hour_array = array();
8821
		$temp_array = array();
8822
        
8823
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8824
		{
8825
			$temp_array['hour_name'] = $row['hour_name'];
8826
			$temp_array['hour_count'] = $row['hour_count'];
8827
          
8828
			$hour_array[] = $temp_array;
8829
		}
8830
8831
		return $hour_array;
8832
	}
8833
	
8834
	
8835
	
8836
	
8837
	/**
8838
	* Counts all hours by aircraft
8839
	*
8840
	* @return Array the hour list
8841
	*
8842
	*/
8843
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
8844
	{
8845
		global $globalTimezone, $globalDBdriver;
8846
		$filter_query = $this->getFilter($filters,true,true);
8847
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8848
		if ($globalTimezone != '') {
8849
			date_default_timezone_set($globalTimezone);
8850
			$datetime = new DateTime();
8851
			$offset = $datetime->format('P');
8852
		} else $offset = '+00:00';
8853
8854
		if ($globalDBdriver == 'mysql') {
8855
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8856
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
8857
								GROUP BY hour_name 
8858
								ORDER BY hour_name ASC";
8859
		} else {
8860
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8861
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
8862
								GROUP BY hour_name 
8863
								ORDER BY hour_name ASC";
8864
		}
8865
		
8866
		$sth = $this->db->prepare($query);
8867
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
8868
      
8869
		$hour_array = array();
8870
		$temp_array = array();
8871
        
8872
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8873
		{
8874
			$temp_array['hour_name'] = $row['hour_name'];
8875
			$temp_array['hour_count'] = $row['hour_count'];
8876
          
8877
			$hour_array[] = $temp_array;
8878
		}
8879
8880
		return $hour_array;
8881
	}
8882
	
8883
	
8884
	/**
8885
	* Counts all hours by aircraft registration
8886
	*
8887
	* @return Array the hour list
8888
	*
8889
	*/
8890
	public function countAllHoursByRegistration($registration, $filters = array())
8891
	{
8892
		global $globalTimezone, $globalDBdriver;
8893
		$filter_query = $this->getFilter($filters,true,true);
8894
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8895
		if ($globalTimezone != '') {
8896
			date_default_timezone_set($globalTimezone);
8897
			$datetime = new DateTime();
8898
			$offset = $datetime->format('P');
8899
		} else $offset = '+00:00';
8900
8901
		if ($globalDBdriver == 'mysql') {
8902
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8903
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
8904
								GROUP BY hour_name 
8905
								ORDER BY hour_name ASC";
8906
		} else {
8907
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8908
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
8909
								GROUP BY hour_name 
8910
								ORDER BY hour_name ASC";
8911
		}
8912
		
8913
		$sth = $this->db->prepare($query);
8914
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
8915
      
8916
		$hour_array = array();
8917
		$temp_array = array();
8918
        
8919
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8920
		{
8921
			$temp_array['hour_name'] = $row['hour_name'];
8922
			$temp_array['hour_count'] = $row['hour_count'];
8923
          
8924
			$hour_array[] = $temp_array;
8925
		}
8926
8927
		return $hour_array;
8928
	}
8929
	
8930
	
8931
	/**
8932
	* Counts all hours by airport
8933
	*
8934
	* @return Array the hour list
8935
	*
8936
	*/
8937
	public function countAllHoursByAirport($airport_icao, $filters = array())
8938
	{
8939
		global $globalTimezone, $globalDBdriver;
8940
		$filter_query = $this->getFilter($filters,true,true);
8941
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8942
		if ($globalTimezone != '') {
8943
			date_default_timezone_set($globalTimezone);
8944
			$datetime = new DateTime();
8945
			$offset = $datetime->format('P');
8946
		} else $offset = '+00:00';
8947
8948
		if ($globalDBdriver == 'mysql') {
8949
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8950
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8951
								GROUP BY hour_name 
8952
								ORDER BY hour_name ASC";
8953
		} else {
8954
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8955
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8956
								GROUP BY hour_name 
8957
								ORDER BY hour_name ASC";
8958
		}
8959
		
8960
		$sth = $this->db->prepare($query);
8961
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
8962
      
8963
		$hour_array = array();
8964
		$temp_array = array();
8965
        
8966
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8967
		{
8968
			$temp_array['hour_name'] = $row['hour_name'];
8969
			$temp_array['hour_count'] = $row['hour_count'];
8970
          
8971
			$hour_array[] = $temp_array;
8972
		}
8973
8974
		return $hour_array;
8975
	}
8976
	
8977
	
8978
	
8979
	/**
8980
	* Counts all hours by manufacturer
8981
	*
8982
	* @return Array the hour list
8983
	*
8984
	*/
8985
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
8986
	{
8987
		global $globalTimezone, $globalDBdriver;
8988
		$filter_query = $this->getFilter($filters,true,true);
8989
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8990
		if ($globalTimezone != '') {
8991
			date_default_timezone_set($globalTimezone);
8992
			$datetime = new DateTime();
8993
			$offset = $datetime->format('P');
8994
		} else $offset = '+00:00';
8995
8996
		if ($globalDBdriver == 'mysql') {
8997
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8998
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
8999
								GROUP BY hour_name 
9000
								ORDER BY hour_name ASC";
9001
		} else {
9002
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9003
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
9004
								GROUP BY hour_name 
9005
								ORDER BY hour_name ASC";
9006
		}
9007
		
9008
		$sth = $this->db->prepare($query);
9009
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
9010
      
9011
		$hour_array = array();
9012
		$temp_array = array();
9013
        
9014
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9015
		{
9016
			$temp_array['hour_name'] = $row['hour_name'];
9017
			$temp_array['hour_count'] = $row['hour_count'];
9018
          
9019
			$hour_array[] = $temp_array;
9020
		}
9021
9022
		return $hour_array;
9023
	}
9024
	
9025
	
9026
	
9027
	/**
9028
	* Counts all hours by date
9029
	*
9030
	* @return Array the hour list
9031
	*
9032
	*/
9033
	public function countAllHoursByDate($date, $filters = array())
9034
	{
9035
		global $globalTimezone, $globalDBdriver;
9036
		$filter_query = $this->getFilter($filters,true,true);
9037
		$date = filter_var($date,FILTER_SANITIZE_STRING);
9038
		if ($globalTimezone != '') {
9039
			date_default_timezone_set($globalTimezone);
9040
			$datetime = new DateTime($date);
9041
			$offset = $datetime->format('P');
9042
		} else $offset = '+00:00';
9043
9044
		if ($globalDBdriver == 'mysql') {
9045
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9046
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
9047
								GROUP BY hour_name 
9048
								ORDER BY hour_name ASC";
9049
		} else {
9050
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9051
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
9052
								GROUP BY hour_name 
9053
								ORDER BY hour_name ASC";
9054
		}
9055
		
9056
		$sth = $this->db->prepare($query);
9057
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9058
      
9059
		$hour_array = array();
9060
		$temp_array = array();
9061
        
9062
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9063
		{
9064
			$temp_array['hour_name'] = $row['hour_name'];
9065
			$temp_array['hour_count'] = $row['hour_count'];
9066
          
9067
			$hour_array[] = $temp_array;
9068
		}
9069
9070
		return $hour_array;
9071
	}
9072
	
9073
	
9074
	
9075
	/**
9076
	* Counts all hours by a ident/callsign
9077
	*
9078
	* @return Array the hour list
9079
	*
9080
	*/
9081
	public function countAllHoursByIdent($ident, $filters = array())
9082
	{
9083
		global $globalTimezone, $globalDBdriver;
9084
		$filter_query = $this->getFilter($filters,true,true);
9085
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9086
		if ($globalTimezone != '') {
9087
			date_default_timezone_set($globalTimezone);
9088
			$datetime = new DateTime();
9089
			$offset = $datetime->format('P');
9090
		} else $offset = '+00:00';
9091
9092
		if ($globalDBdriver == 'mysql') {
9093
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9094
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
9095
								GROUP BY hour_name 
9096
								ORDER BY hour_name ASC";
9097
		} else {
9098
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9099
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
9100
								GROUP BY hour_name 
9101
								ORDER BY hour_name ASC";
9102
		}
9103
      
9104
		
9105
		$sth = $this->db->prepare($query);
9106
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
9107
      
9108
		$hour_array = array();
9109
		$temp_array = array();
9110
        
9111
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9112
		{
9113
			$temp_array['hour_name'] = $row['hour_name'];
9114
			$temp_array['hour_count'] = $row['hour_count'];
9115
          
9116
			$hour_array[] = $temp_array;
9117
		}
9118
9119
		return $hour_array;
9120
	}
9121
	
9122
	
9123
	
9124
	/**
9125
	* Counts all hours by route
9126
	*
9127
	* @return Array the hour list
9128
	*
9129
	*/
9130
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
9131
	{
9132
		global $globalTimezone, $globalDBdriver;
9133
		$filter_query = $this->getFilter($filters,true,true);
9134
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
9135
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
9136
		if ($globalTimezone != '') {
9137
			date_default_timezone_set($globalTimezone);
9138
			$datetime = new DateTime();
9139
			$offset = $datetime->format('P');
9140
		} else $offset = '+00:00';
9141
9142
		if ($globalDBdriver == 'mysql') {
9143
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9144
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9145
								GROUP BY hour_name 
9146
								ORDER BY hour_name ASC";
9147
		} else {
9148
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9149
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9150
								GROUP BY hour_name 
9151
								ORDER BY hour_name ASC";
9152
		}
9153
		
9154
		$sth = $this->db->prepare($query);
9155
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
9156
      
9157
		$hour_array = array();
9158
		$temp_array = array();
9159
        
9160
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9161
		{
9162
			$temp_array['hour_name'] = $row['hour_name'];
9163
			$temp_array['hour_count'] = $row['hour_count'];
9164
          
9165
			$hour_array[] = $temp_array;
9166
		}
9167
9168
		return $hour_array;
9169
	}
9170
	
9171
	
9172
	/**
9173
	* Counts all hours by country
9174
	*
9175
	* @return Array the hour list
9176
	*
9177
	*/
9178
	public function countAllHoursByCountry($country, $filters = array())
9179
	{
9180
		global $globalTimezone, $globalDBdriver;
9181
		$filter_query = $this->getFilter($filters,true,true);
9182
		$country = filter_var($country,FILTER_SANITIZE_STRING);
9183
		if ($globalTimezone != '') {
9184
			date_default_timezone_set($globalTimezone);
9185
			$datetime = new DateTime();
9186
			$offset = $datetime->format('P');
9187
		} else $offset = '+00:00';
9188
9189
		if ($globalDBdriver == 'mysql') {
9190
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9191
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9192
								GROUP BY hour_name 
9193
								ORDER BY hour_name ASC";
9194
		} else {
9195
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9196
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9197
								GROUP BY hour_name 
9198
								ORDER BY hour_name ASC";
9199
		}
9200
		
9201
		$sth = $this->db->prepare($query);
9202
		$sth->execute(array(':country' => $country,':offset' => $offset));
9203
      
9204
		$hour_array = array();
9205
		$temp_array = array();
9206
        
9207
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9208
		{
9209
			$temp_array['hour_name'] = $row['hour_name'];
9210
			$temp_array['hour_count'] = $row['hour_count'];
9211
          
9212
			$hour_array[] = $temp_array;
9213
		}
9214
9215
		return $hour_array;
9216
	}
9217
9218
9219
9220
9221
	/**
9222
	* Counts all aircraft that have flown over
9223
	*
9224
	* @return Integer the number of aircrafts
9225
	*
9226
	*/
9227
	public function countOverallAircrafts($filters = array())
9228
	{
9229
		$filter_query = $this->getFilter($filters,true,true);
9230
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
9231
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9232
		$sth = $this->db->prepare($query);
9233
		$sth->execute();
9234
		return $sth->fetchColumn();
9235
	}
9236
9237
	/**
9238
	* Counts all flight that really arrival
9239
	*
9240
	* @return Integer the number of aircrafts
9241
	*
9242
	*/
9243
	public function countOverallArrival($filters = array())
9244
	{
9245
		$filter_query = $this->getFilter($filters,true,true);
9246
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
9247
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
9248
		
9249
		$sth = $this->db->prepare($query);
9250
		$sth->execute();
9251
		return $sth->fetchColumn();
9252
	}
9253
9254
	/**
9255
	* Counts all pilots that have flown over
9256
	*
9257
	* @return Integer the number of pilots
9258
	*
9259
	*/
9260
	public function countOverallPilots($filters = array())
9261
	{
9262
		$filter_query = $this->getFilter($filters,true,true);
9263
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
9264
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
9265
		$sth = $this->db->prepare($query);
9266
		$sth->execute();
9267
		return $sth->fetchColumn();
9268
	}
9269
9270
	/**
9271
	* Counts all owners that have flown over
9272
	*
9273
	* @return Integer the number of owners
9274
	*
9275
	*/
9276
	public function countOverallOwners($filters = array())
9277
	{
9278
		$filter_query = $this->getFilter($filters,true,true);
9279
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
9280
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
9281
		$sth = $this->db->prepare($query);
9282
		$sth->execute();
9283
		return $sth->fetchColumn();
9284
	}
9285
	
9286
	
9287
	/**
9288
	* Counts all flights that have flown over
9289
	*
9290
	* @return Integer the number of flights
9291
	*
9292
	*/
9293
	public function countOverallFlights($filters = array())
9294
	{
9295
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
9296
                    FROM spotter_output";
9297
		$query .= $this->getFilter($filters);
9298
		//echo $query;
9299
		$sth = $this->db->prepare($query);
9300
		$sth->execute();
9301
		return $sth->fetchColumn();
9302
	}
9303
	
9304
	/**
9305
	* Counts all military flights that have flown over
9306
	*
9307
	* @return Integer the number of flights
9308
	*
9309
	*/
9310
	public function countOverallMilitaryFlights($filters = array())
9311
	{
9312
		$filter_query = $this->getFilter($filters,true,true);
9313
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
9314
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
9315
      
9316
		$sth = $this->db->prepare($query);
9317
		$sth->execute();
9318
		return $sth->fetchColumn();
9319
	}
9320
	
9321
	
9322
	
9323
	/**
9324
	* Counts all airlines that have flown over
9325
	*
9326
	* @return Integer the number of airlines
9327
	*
9328
	*/
9329
	public function countOverallAirlines($filters = array())
9330
	{
9331
		$query  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
9332
							FROM spotter_output";
9333
      
9334
		$query .= $this->getFilter($filters);
9335
		$sth = $this->db->prepare($query);
9336
		$sth->execute();
9337
		return $sth->fetchColumn();
9338
	}
9339
9340
  
9341
	/**
9342
	* Counts all hours of today
9343
	*
9344
	* @return Array the hour list
9345
	*
9346
	*/
9347
	public function countAllHoursFromToday($filters = array())
9348
	{
9349
		global $globalTimezone, $globalDBdriver;
9350
		$filter_query = $this->getFilter($filters,true,true);
9351
		if ($globalTimezone != '') {
9352
			date_default_timezone_set($globalTimezone);
9353
			$datetime = new DateTime();
9354
			$offset = $datetime->format('P');
9355
		} else $offset = '+00:00';
9356
9357
		if ($globalDBdriver == 'mysql') {
9358
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9359
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
9360
								GROUP BY hour_name 
9361
								ORDER BY hour_name ASC";
9362
		} else {
9363
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9364
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
9365
								GROUP BY hour_name 
9366
								ORDER BY hour_name ASC";
9367
		}
9368
		
9369
		$sth = $this->db->prepare($query);
9370
		$sth->execute(array(':offset' => $offset));
9371
      
9372
		$hour_array = array();
9373
		$temp_array = array();
9374
        
9375
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9376
		{
9377
			$temp_array['hour_name'] = $row['hour_name'];
9378
			$temp_array['hour_count'] = $row['hour_count'];
9379
			$hour_array[] = $temp_array;
9380
		}
9381
9382
		return $hour_array;
9383
	}
9384
    
9385
	/**
9386
	* Gets all the spotter information based on calculated upcoming flights
9387
	*
9388
	* @return Array the spotter information
9389
	*
9390
	*/
9391
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
9392
	{
9393
		global $global_query, $globalDBdriver, $globalTimezone;
9394
		$filter_query = $this->getFilter($filters,true,true);
9395
		date_default_timezone_set('UTC');
9396
		$limit_query = '';
9397
		if ($limit != "")
9398
		{
9399
			$limit_array = explode(",", $limit);
9400
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
9401
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
9402
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
9403
			{
9404
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
9405
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
9406
			}
9407
		}
9408
		$currentHour = date("G");
9409
		$next3Hours = date("G", strtotime("+3 hour"));
9410
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
9411
		if ($currentHour >= 21 && $next3Hours >= 00)
9412
		{
9413
			$next3Hours = 24;
9414
		}
9415
		$currentDayofWeek = date("l");
9416
		if ($globalDBdriver == 'mysql') {
9417
			if ($sort != "")
9418
			{
9419
				$search_orderby_array = $this->getOrderBy();
9420
				$orderby_query = $search_orderby_array[$sort]['sql'];
9421
			} else {
9422
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
9423
			}
9424
/*
9425
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
9426
			    FROM spotter_output
9427
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
9428
			    GROUP BY spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time HAVING count(spotter_output.ident) > 10 $orderby_query";
9429
*/
9430
/*			$query = "SELECT spotter_output.ident, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time, count(spotter_output.ident) as ident_count
9431
			    FROM spotter_output
9432
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
9433
			    GROUP BY spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time HAVING count(spotter_output.ident) > 10 $orderby_query";
9434
*/
9435
			$query = "SELECT spotter_output.ident, spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, count(spotter_output.ident) as ident_count 
9436
			    FROM spotter_output".$filter_query." DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
9437
			    GROUP BY spotter_output.ident,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time
9438
			    HAVING count(spotter_output.ident) > 5$orderby_query";
9439
9440
			$spotter_array = $this->getDataFromDB($query.$limit_query);
9441
		} else {
9442
			if ($sort != "")
9443
			{
9444
				$search_orderby_array = $this->getOrderBy();
9445
				$orderby_query = $search_orderby_array[$sort]['sql'];
9446
			} else {
9447
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
9448
			}
9449
			$query = "SELECT spotter_output.ident, spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, count(spotter_output.ident) as ident_count, to_char(spotter_output.date,'HH') 
9450
			    FROM spotter_output".$filter_query." DATE_PART('dow', spotter_output.date) = DATE_PART('dow', date 'now' AT TIME ZONE :timezone) AND EXTRACT (HOUR FROM spotter_output.date AT TIME ZONE :timezone) >= '$currentHour' AND EXTRACT (HOUR FROM spotter_output.date AT TIME ZONE :timezone) <= '$next3Hours' AND ident <> '' 
9451
			    GROUP BY spotter_output.ident,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, to_char(spotter_output.date,'HH')
9452
			    HAVING count(spotter_output.ident) > 5$orderby_query";
9453
			//echo $query;
9454
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
9455
			/*
9456
			$sth = $this->db->prepare($query);
9457
			$sth->execute(array(':timezone' => $globalTimezone));
9458
			return $sth->fetchAll(PDO::FETCH_ASSOC);
9459
			*/
9460
		}
9461
		return $spotter_array;
9462
	}
9463
    
9464
    
9465
     /**
9466
	* Gets the Barrie Spotter ID based on the FlightAware ID
9467
	*
9468
	* @return Integer the Barrie Spotter ID
9469
q	*
9470
	*/
9471
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
9472
	{
9473
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
9474
9475
		$query  = "SELECT spotter_output.spotter_id
9476
								FROM spotter_output 
9477
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
9478
        
9479
		
9480
		$sth = $this->db->prepare($query);
9481
		$sth->execute();
9482
9483
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9484
		{
9485
			return $row['spotter_id'];
9486
		}
9487
	}
9488
  
9489
 
9490
	/**
9491
	* Parses a date string
9492
	*
9493
	* @param String $dateString the date string
9494
	* @param String $timezone the timezone of a user
9495
	* @return Array the time information
9496
	*
9497
	*/
9498
	public function parseDateString($dateString, $timezone = '')
9499
	{
9500
		$time_array = array();
9501
	
9502
		if ($timezone != "")
9503
		{
9504
			date_default_timezone_set($timezone);
9505
		}
9506
		
9507
		$current_date = date("Y-m-d H:i:s");
9508
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
9509
		
9510
		$diff = abs(strtotime($current_date) - strtotime($date));
9511
9512
		$time_array['years'] = floor($diff / (365*60*60*24)); 
9513
		$years = $time_array['years'];
9514
		
9515
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
9516
		$months = $time_array['months'];
9517
		
9518
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
9519
		$days = $time_array['days'];
9520
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
9521
		$hours = $time_array['hours'];
9522
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
9523
		$minutes = $time_array['minutes'];
9524
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
9525
		
9526
		return $time_array;	
9527
	}	
9528
	
9529
	
9530
	
9531
	
9532
	/**
9533
	* Parses the direction degrees to working
9534
	*
9535
	* @param Float $direction the direction in degrees
9536
	* @return Array the direction information
9537
	*
9538
	*/
9539
	public function parseDirection($direction = 0)
9540
	{
9541
		if ($direction == '') $direction = 0;
9542
		$direction_array = array();
9543
		$temp_array = array();
9544
9545
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
9546
		{
9547
			$temp_array['direction_degree'] = $direction;
9548
			$temp_array['direction_shortname'] = "N";
9549
			$temp_array['direction_fullname'] = "North";
9550
		} elseif ($direction >= 22.5 && $direction < 45){
9551
			$temp_array['direction_degree'] = $direction;
9552
			$temp_array['direction_shortname'] = "NNE";
9553
			$temp_array['direction_fullname'] = "North-Northeast";
9554
		} elseif ($direction >= 45 && $direction < 67.5){
9555
			$temp_array['direction_degree'] = $direction;
9556
			$temp_array['direction_shortname'] = "NE";
9557
			$temp_array['direction_fullname'] = "Northeast";
9558
		} elseif ($direction >= 67.5 && $direction < 90){
9559
			$temp_array['direction_degree'] = $direction;
9560
			$temp_array['direction_shortname'] = "ENE";
9561
			$temp_array['direction_fullname'] = "East-Northeast";
9562
		} elseif ($direction >= 90 && $direction < 112.5){
9563
			$temp_array['direction_degree'] = $direction;
9564
			$temp_array['direction_shortname'] = "E";
9565
			$temp_array['direction_fullname'] = "East";
9566
		} elseif ($direction >= 112.5 && $direction < 135){
9567
			$temp_array['direction_degree'] = $direction;
9568
			$temp_array['direction_shortname'] = "ESE";
9569
			$temp_array['direction_fullname'] = "East-Southeast";
9570
		} elseif ($direction >= 135 && $direction < 157.5){
9571
			$temp_array['direction_degree'] = $direction;
9572
			$temp_array['direction_shortname'] = "SE";
9573
			$temp_array['direction_fullname'] = "Southeast";
9574
		} elseif ($direction >= 157.5 && $direction < 180){
9575
			$temp_array['direction_degree'] = $direction;
9576
			$temp_array['direction_shortname'] = "SSE";
9577
			$temp_array['direction_fullname'] = "South-Southeast";
9578
		} elseif ($direction >= 180 && $direction < 202.5){
9579
			$temp_array['direction_degree'] = $direction;
9580
			$temp_array['direction_shortname'] = "S";
9581
			$temp_array['direction_fullname'] = "South";
9582
		} elseif ($direction >= 202.5 && $direction < 225){
9583
			$temp_array['direction_degree'] = $direction;
9584
			$temp_array['direction_shortname'] = "SSW";
9585
			$temp_array['direction_fullname'] = "South-Southwest";
9586
		} elseif ($direction >= 225 && $direction < 247.5){
9587
			$temp_array['direction_degree'] = $direction;
9588
			$temp_array['direction_shortname'] = "SW";
9589
			$temp_array['direction_fullname'] = "Southwest";
9590
		} elseif ($direction >= 247.5 && $direction < 270){
9591
			$temp_array['direction_degree'] = $direction;
9592
			$temp_array['direction_shortname'] = "WSW";
9593
			$temp_array['direction_fullname'] = "West-Southwest";
9594
		} elseif ($direction >= 270 && $direction < 292.5){
9595
			$temp_array['direction_degree'] = $direction;
9596
			$temp_array['direction_shortname'] = "W";
9597
			$temp_array['direction_fullname'] = "West";
9598
		} elseif ($direction >= 292.5 && $direction < 315){
9599
			$temp_array['direction_degree'] = $direction;
9600
			$temp_array['direction_shortname'] = "WNW";
9601
			$temp_array['direction_fullname'] = "West-Northwest";
9602
		} elseif ($direction >= 315 && $direction < 337.5){
9603
			$temp_array['direction_degree'] = $direction;
9604
			$temp_array['direction_shortname'] = "NW";
9605
			$temp_array['direction_fullname'] = "Northwest";
9606
		} elseif ($direction >= 337.5 && $direction < 360){
9607
			$temp_array['direction_degree'] = $direction;
9608
			$temp_array['direction_shortname'] = "NNW";
9609
			$temp_array['direction_fullname'] = "North-Northwest";
9610
		}
9611
		$direction_array[] = $temp_array;
9612
		return $direction_array;
9613
	}
9614
	
9615
	
9616
	/**
9617
	* Gets the aircraft registration
9618
	*
9619
	* @param String $flightaware_id the flight aware id
9620
	* @return String the aircraft registration
9621
	*
9622
	*/
9623
	
9624
	public function getAircraftRegistration($flightaware_id)
9625
	{
9626
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
9627
        
9628
		$options = array(
9629
			'trace' => true,
9630
			'exceptions' => 0,
9631
			'login' => $globalFlightAwareUsername,
9632
			'password' => $globalFlightAwarePassword,
9633
		);
9634
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
9635
		
9636
		$params = array('faFlightID' => $flightaware_id);
9637
		$result = $client->AirlineFlightInfo($params);
9638
		
9639
		if (isset($result->AirlineFlightInfoResult))
9640
		{
9641
			$registration = $result->AirlineFlightInfoResult->tailnumber;
9642
		} else return '';
9643
		
9644
		$registration = $this->convertAircraftRegistration($registration);
9645
		
9646
		return $registration;
9647
	}
9648
9649
9650
	/**
9651
	* Gets the aircraft registration from ModeS
9652
	*
9653
	* @param String $aircraft_modes the flight ModeS in hex
9654
	* @return String the aircraft registration
9655
	*
9656
	*/
9657
	public function getAircraftRegistrationBymodeS($aircraft_modes)
9658
	{
9659
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
9660
	
9661
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
9662
		
9663
		$sth = $this->db->prepare($query);
9664
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
9665
    
9666
		$row = $sth->fetch(PDO::FETCH_ASSOC);
9667
		$sth->closeCursor();
9668
		if (count($row) > 0) {
9669
		    //return $row['Registration'];
9670
		    return $row['registration'];
9671
		} else return '';
9672
	
9673
	}
9674
9675
	/**
9676
	* Gets the aircraft type from ModeS
9677
	*
9678
	* @param String $aircraft_modes the flight ModeS in hex
9679
	* @return String the aircraft type
9680
	*
9681
	*/
9682
	public function getAircraftTypeBymodeS($aircraft_modes)
9683
	{
9684
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
9685
	
9686
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
9687
		
9688
		$sth = $this->db->prepare($query);
9689
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
9690
    
9691
		$row = $sth->fetch(PDO::FETCH_ASSOC);
9692
		$sth->closeCursor();
9693
		if (count($row) > 0) {
9694
		    if ($row['type_flight'] == null) return '';
9695
		    else return $row['type_flight'];
9696
		} else return '';
9697
	
9698
	}
9699
9700
	/**
9701
	* Gets Country from latitude/longitude
9702
	*
9703
	* @param Float $latitude latitute of the flight
9704
	* @param Float $longitude longitute of the flight
9705
	* @return String the countrie
9706
	*/
9707
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
9708
	{
9709
		global $globalDBdriver, $globalDebug;
9710
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
9711
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
9712
	
9713
		$Connection = new Connection($this->db);
9714
		if (!$Connection->tableExists('countries')) return '';
9715
	
9716
		try {
9717
			/*
9718
			if ($globalDBdriver == 'mysql') {
9719
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
9720
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
9721
			}
9722
			*/
9723
			// This query seems to work both for MariaDB and PostgreSQL
9724
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
9725
		
9726
			$sth = $this->db->prepare($query);
9727
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
9728
			$sth->execute();
9729
    
9730
			$row = $sth->fetch(PDO::FETCH_ASSOC);
9731
			$sth->closeCursor();
9732
			if (count($row) > 0) {
9733
				return $row;
9734
			} else return '';
9735
		} catch (PDOException $e) {
9736
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
9737
			return '';
9738
		}
9739
	
9740
	}
9741
9742
	/**
9743
	* Gets Country from iso2
9744
	*
9745
	* @param String $iso2 ISO2 country code
9746
	* @return String the countrie
9747
	*/
9748
	public function getCountryFromISO2($iso2)
9749
	{
9750
		global $globalDBdriver, $globalDebug;
9751
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
9752
	
9753
		$Connection = new Connection($this->db);
9754
		if (!$Connection->tableExists('countries')) return '';
9755
	
9756
		try {
9757
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
9758
		
9759
			$sth = $this->db->prepare($query);
9760
			$sth->execute(array(':iso2' => $iso2));
9761
    
9762
			$row = $sth->fetch(PDO::FETCH_ASSOC);
9763
			$sth->closeCursor();
9764
			if (count($row) > 0) {
9765
				return $row;
9766
			} else return '';
9767
		} catch (PDOException $e) {
9768
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
9769
			return '';
9770
		}
9771
	
9772
	}
9773
9774
	/**
9775
	* converts the registration code using the country prefix
9776
	*
9777
	* @param String $registration the aircraft registration
9778
	* @return String the aircraft registration
9779
	*
9780
	*/
9781
	public function convertAircraftRegistration($registration)
9782
	{
9783
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9784
		$registration_prefix = '';
9785
		$registration_1 = substr($registration, 0, 1);
9786
		$registration_2 = substr($registration, 0, 2);
9787
9788
		//first get the prefix based on two characters
9789
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
9790
      
9791
		
9792
		$sth = $this->db->prepare($query);
9793
		$sth->execute(array(':registration_2' => $registration_2));
9794
        
9795
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9796
		{
9797
			$registration_prefix = $row['registration_prefix'];
9798
		}
9799
9800
		//if we didn't find a two chracter prefix lets just search the one with one character
9801
		if ($registration_prefix == '')
9802
		{
9803
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
9804
			$sth = $this->db->prepare($query);
9805
			$sth->execute(array(':registration_1' => $registration_1));
9806
	        
9807
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9808
			{
9809
				$registration_prefix = $row['registration_prefix'];
9810
			}
9811
		}
9812
9813
		//determine which characters are being used and convert the registration code appropiately
9814
		if (strlen($registration_prefix) == 1)
9815
		{
9816
			if (0 === strpos($registration, 'N')) {
9817
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
9818
			} else {
9819
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
9820
			}
9821
		} else if(strlen($registration_prefix) == 2){
9822
			if (0 === strpos($registration, 'N')) {
9823
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
9824
			} else {
9825
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
9826
			}
9827
		}
9828
		return $registration;
9829
	}
9830
9831
	/**
9832
	* Country from the registration code
9833
	*
9834
	* @param String $registration the aircraft registration
9835
	* @return String the country
9836
	*
9837
	*/
9838
	public function countryFromAircraftRegistration($registration)
9839
	{
9840
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9841
		
9842
		$registration_prefix = '';
9843
		$registration_test = explode('-',$registration);
9844
		$country = '';
9845
		if ($registration_test[0] != $registration) {
9846
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
9847
	      
9848
			$sth = $this->db->prepare($query);
9849
			$sth->execute(array(':registration_1' => $registration_test[0]));
9850
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9851
			{
9852
				//$registration_prefix = $row['registration_prefix'];
9853
				$country = $row['country'];
9854
			}
9855
		} else {
9856
    			$registration_1 = substr($registration, 0, 1);
9857
		        $registration_2 = substr($registration, 0, 2);
9858
9859
			$country = '';
9860
			//first get the prefix based on two characters
9861
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
9862
      
9863
			
9864
			$sth = $this->db->prepare($query);
9865
			$sth->execute(array(':registration_2' => $registration_2));
9866
        
9867
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9868
			{
9869
				$registration_prefix = $row['registration_prefix'];
9870
				$country = $row['country'];
9871
			}
9872
9873
			//if we didn't find a two chracter prefix lets just search the one with one character
9874
			if ($registration_prefix == "")
9875
			{
9876
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
9877
	      
9878
				$sth = $this->db->prepare($query);
9879
				$sth->execute(array(':registration_1' => $registration_1));
9880
	        
9881
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
9882
				{
9883
					//$registration_prefix = $row['registration_prefix'];
9884
					$country = $row['country'];
9885
				}
9886
			}
9887
		}
9888
    
9889
		return $country;
9890
	}
9891
9892
	/**
9893
	* Country from the registration code
9894
	*
9895
	* @param String $registration the aircraft registration
9896
	* @return String the country
9897
	*
9898
	*/
9899
	public function countryFromAircraftRegistrationCode($registration)
9900
	{
9901
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9902
		
9903
		$country = '';
9904
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
9905
		$sth = $this->db->prepare($query);
9906
		$sth->execute(array(':registration' => $registration));
9907
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9908
		{
9909
			$country = $row['country'];
9910
		}
9911
		return $country;
9912
	}
9913
	
9914
	/**
9915
	* Set a new highlight value for a flight
9916
	*
9917
	* @param String $flightaware_id flightaware_id from spotter_output table
9918
	* @param String $highlight New highlight value
9919
	*/
9920
	public function setHighlightFlight($flightaware_id,$highlight) {
9921
		
9922
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
9923
		$sth = $this->db->prepare($query);
9924
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
9925
	}
9926
	
9927
	/**
9928
	* Gets the short url from bit.ly
9929
	*
9930
	* @param String $url the full url
9931
	* @return String the bit.ly url
9932
	*
9933
	*/
9934
	public function getBitlyURL($url)
9935
	{
9936
		global $globalBitlyAccessToken;
9937
		
9938
		if ($globalBitlyAccessToken == '') return $url;
9939
        
9940
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
9941
		
9942
		$ch = curl_init();
9943
		curl_setopt($ch, CURLOPT_HEADER, 0);
9944
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
9945
		curl_setopt($ch, CURLOPT_URL, $google_url);
9946
		$bitly_data = curl_exec($ch);
9947
		curl_close($ch);
9948
		
9949
		$bitly_data = json_decode($bitly_data);
9950
		$bitly_url = '';
9951
		if ($bitly_data->status_txt = "OK"){
9952
			$bitly_url = $bitly_data->data->url;
9953
		}
9954
9955
		return $bitly_url;
9956
	}
9957
9958
9959
	public function getOrderBy()
9960
	{
9961
		$orderby = array("aircraft_asc" => array("key" => "aircraft_asc", "value" => "Aircraft Type - ASC", "sql" => "ORDER BY spotter_output.aircraft_icao ASC"), "aircraft_desc" => array("key" => "aircraft_desc", "value" => "Aircraft Type - DESC", "sql" => "ORDER BY spotter_output.aircraft_icao DESC"),"manufacturer_asc" => array("key" => "manufacturer_asc", "value" => "Aircraft Manufacturer - ASC", "sql" => "ORDER BY spotter_output.aircraft_manufacturer ASC"), "manufacturer_desc" => array("key" => "manufacturer_desc", "value" => "Aircraft Manufacturer - DESC", "sql" => "ORDER BY spotter_output.aircraft_manufacturer DESC"),"airline_name_asc" => array("key" => "airline_name_asc", "value" => "Airline Name - ASC", "sql" => "ORDER BY spotter_output.airline_name ASC"), "airline_name_desc" => array("key" => "airline_name_desc", "value" => "Airline Name - DESC", "sql" => "ORDER BY spotter_output.airline_name DESC"), "ident_asc" => array("key" => "ident_asc", "value" => "Ident - ASC", "sql" => "ORDER BY spotter_output.ident ASC"), "ident_desc" => array("key" => "ident_desc", "value" => "Ident - DESC", "sql" => "ORDER BY spotter_output.ident DESC"), "airport_departure_asc" => array("key" => "airport_departure_asc", "value" => "Departure Airport - ASC", "sql" => "ORDER BY spotter_output.departure_airport_city ASC"), "airport_departure_desc" => array("key" => "airport_departure_desc", "value" => "Departure Airport - DESC", "sql" => "ORDER BY spotter_output.departure_airport_city DESC"), "airport_arrival_asc" => array("key" => "airport_arrival_asc", "value" => "Arrival Airport - ASC", "sql" => "ORDER BY spotter_output.arrival_airport_city ASC"), "airport_arrival_desc" => array("key" => "airport_arrival_desc", "value" => "Arrival Airport - DESC", "sql" => "ORDER BY spotter_output.arrival_airport_city DESC"), "date_asc" => array("key" => "date_asc", "value" => "Date - ASC", "sql" => "ORDER BY spotter_output.date ASC"), "date_desc" => array("key" => "date_desc", "value" => "Date - DESC", "sql" => "ORDER BY spotter_output.date DESC"),"distance_asc" => array("key" => "distance_asc","value" => "Distance - ASC","sql" => "ORDER BY distance ASC"),"distance_desc" => array("key" => "distance_desc","value" => "Distance - DESC","sql" => "ORDER BY distance DESC"));
9962
		
9963
		return $orderby;
9964
		
9965
	}
9966
    
9967
/*
9968
	public function importFromFlightAware()
9969
	{
9970
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
9971
		$Spotter = new Spotter($this->db);
9972
		$SpotterLive = new SpotterLive($this->db);
9973
		$options = array(
9974
		            'trace' => true,
9975
		            'exceptions' => 0,
9976
		            'login' => $globalFlightAwareUsername,
9977
		            'password' => $globalFlightAwarePassword,
9978
		);
9979
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
9980
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
9981
		$result = $client->SearchBirdseyeInFlight($params);
9982
		$dataFound = false;
9983
		$ignoreImport = false;
9984
		if (isset($result->SearchBirdseyeInFlightResult))
9985
		{
9986
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
9987
			{
9988
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
9989
				{
9990
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
9991
					{
9992
						foreach($globalAirportIgnore as $airportIgnore)
9993
						{
9994
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
9995
							{
9996
								$ignoreImport = true; 
9997
							}
9998
						}
9999
						if ($ignoreImport == false)
10000
						{
10001
							$flightaware_id = $aircraft->faFlightID;
10002
							$ident = $aircraft->ident;
10003
							$aircraft_type = $aircraft->type;
10004
							$departure_airport = $aircraft->origin;
10005
							$arrival_airport = $aircraft->destination;
10006
							$latitude = $aircraft->latitude;
10007
							$longitude = $aircraft->longitude;
10008
							$waypoints = $aircraft->waypoints;
10009
							$altitude = $aircraft->altitude;
10010
							$heading = $aircraft->heading;
10011
							$groundspeed = $aircraft->groundspeed;
10012
							$dataFound = true;
10013
							//gets the callsign from the last hour
10014
							$last_hour_ident = $this->getIdentFromLastHour($ident);
10015
							//change the departure/arrival airport to NA if its not available
10016
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
10017
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
10018
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
10019
							if($last_hour_ident == "")
10020
							{
10021
								//adds the spotter data for the archive
10022
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10023
							}
10024
10025
							//adds the spotter LIVE data
10026
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10027
						}
10028
					}
10029
					$ignoreImport = false;
10030
				}
10031
			} else {
10032
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
10033
				{
10034
					foreach($globalAirportIgnore as $airportIgnore)
10035
					{
10036
						foreach($globalAirportIgnore as $airportIgnore)
10037
						{
10038
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
10039
							{
10040
								$ignoreImport = true; 
10041
							}
10042
						}
10043
						if ($ignoreImport == false)
10044
						{
10045
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
10046
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
10047
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
10048
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
10049
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
10050
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
10051
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
10052
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
10053
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
10054
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
10055
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
10056
							$dataFound = true;
10057
							//gets the callsign from the last hour
10058
							$last_hour_ident = $this->getIdentFromLastHour($ident);
10059
							//change the departure/arrival airport to NA if its not available
10060
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
10061
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
10062
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
10063
							if($last_hour_ident == "")
10064
							{
10065
								//adds the spotter data for the archive
10066
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10067
							}
10068
							//adds the spotter LIVE data
10069
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10070
						}
10071
						$ignoreImport = false;
10072
					}
10073
				}
10074
			}
10075
		} 
10076
	}
10077
*/
10078
10079
	// Update flights data when new data in DB
10080
	public function updateFieldsFromOtherTables()
10081
	{
10082
		global $globalDebug, $globalDBdriver;
10083
		$Image = new Image($this->db);
10084
		
10085
10086
		// routes
10087
		if ($globalDebug) print "Routes...\n";
10088
		if ($globalDBdriver == 'mysql') {
10089
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15 DAY)";
10090
		} else {
10091
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
10092
		}
10093
		$sth = $this->db->prepare($query);
10094
		$sth->execute();
10095
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10096
		{
10097
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
10098
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
10099
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
10100
				$update_query="UPDATE spotter_output SET departure_airport_icao = :fromicao, arrival_airport_icao = :toicao, departure_airport_name = :departure_airport_name, departure_airport_city = :departure_airport_city, departure_airport_country = :departure_airport_country, arrival_airport_name = :arrival_airport_name, arrival_airport_city = :arrival_airport_city, arrival_airport_country = :arrival_airport_country WHERE spotter_id = :spotter_id";
10101
				$sthu = $this->db->prepare($update_query);
10102
				$sthu->execute(array(':fromicao' => $row['fromairport_icao'],':toicao' => $row['toairport_icao'],':spotter_id' => $row['spotter_id'],':departure_airport_name' => $departure_airport_array[0]['name'],':departure_airport_city' => $departure_airport_array[0]['city'],':departure_airport_country' => $departure_airport_array[0]['country'],':arrival_airport_name' => $arrival_airport_array[0]['name'],':arrival_airport_city' => $arrival_airport_array[0]['city'],':arrival_airport_country' => $arrival_airport_array[0]['country']));
10103
			}
10104
		}
10105
		
10106
		if ($globalDebug) print "Airlines...\n";
10107
		//airlines
10108
		if ($globalDBdriver == 'mysql') {
10109
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15 DAY)";
10110
		} elseif ($globalDBdriver == 'pgsql') {
10111
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
10112
		}
10113
		$sth = $this->db->prepare($query);
10114
		$sth->execute();
10115
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10116
		{
10117
			if (is_numeric(substr($row['ident'], -1, 1)))
10118
			{
10119
				$fromsource = NULL;
10120
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
10121
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
10122
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
10123
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
10124
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
10125
				if (isset($airline_array[0]['name'])) {
10126
					$update_query  = "UPDATE spotter_output SET spotter_output.airline_name = :airline_name, spotter_output.airline_icao = :airline_icao, spotter_output.airline_country = :airline_country, spotter_output.airline_type = :airline_type WHERE spotter_output.spotter_id = :spotter_id";
10127
					$sthu = $this->db->prepare($update_query);
10128
					$sthu->execute(array(':airline_name' => $airline_array[0]['name'],':airline_icao' => $airline_array[0]['icao'], ':airline_country' => $airline_array[0]['country'], ':airline_type' => $airline_array[0]['type'], ':spotter_id' => $row['spotter_id']));
10129
				}
10130
			}
10131
		}
10132
10133
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
10134
		//duplicate modes
10135
		$query = "DELETE aircraft_modes FROM aircraft_modes LEFT OUTER JOIN (SELECT max(`AircraftID`) as `AircraftID`,`ModeS` FROM `aircraft_modes` group by ModeS) as KeepRows ON aircraft_modes.AircraftID = KeepRows.AircraftID WHERE KeepRows.AircraftID IS NULL";
10136
		$sth = $this->db->prepare($query);
10137
		$sth->execute();
10138
		
10139
		if ($globalDebug) print "Aircraft...\n";
10140
		//aircraft
10141
		if ($globalDBdriver == 'mysql') {
10142
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
10143
		} elseif ($globalDBdriver == 'pgsql') {
10144
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INERVAL '15 DAYS'";
10145
		}
10146
		$sth = $this->db->prepare($query);
10147
		$sth->execute();
10148
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10149
		{
10150
			if ($row['aircraft_icao'] != '') {
10151
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
10152
				if ($row['registration'] != ""){
10153
					$image_array = $Image->getSpotterImage($row['registration']);
10154
					if (!isset($image_array[0]['registration'])) {
10155
						$Image->addSpotterImage($row['registration']);
10156
					}
10157
				}
10158
				if (count($aircraft_name) > 0) {
10159
					$update_query  = "UPDATE spotter_output SET spotter_output.aircraft_name = :aircraft_name, spotter_output.aircraft_manufacturer = :aircraft_manufacturer WHERE spotter_output.spotter_id = :spotter_id";
10160
					$sthu = $this->db->prepare($update_query);
10161
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
10162
				}
10163
			}
10164
		}
10165
	}	
10166
10167
	// Update arrival airports for data already in DB
10168
	public function updateArrivalAirports()
10169
	{
10170
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
10171
		$query = "SELECT spotter_output.spotter_id, spotter_output.last_latitude, spotter_output.last_longitude, spotter_output.last_altitude, spotter_output.arrival_airport_icao, spotter_output.real_arrival_airport_icao FROM spotter_output";
10172
		$sth = $this->db->prepare($query);
10173
		$sth->execute();
10174
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10175
		{
10176
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
10177
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
10178
				$airport_icao = '';
10179
				 if (isset($closestAirports[0])) {
10180
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
10181
						$airport_icao = $closestAirports[0]['icao'];
10182
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10183
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
10184
						foreach ($closestAirports as $airport) {
10185
							if ($row['arrival_airport_icao'] == $airport['icao']) {
10186
								$airport_icao = $airport['icao'];
10187
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10188
								break;
10189
							}
10190
						}
10191
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
10192
						$airport_icao = $closestAirports[0]['icao'];
10193
						if ($globalDebug) echo "\o/ NP --++ Find arrival airport. Airport ICAO : ".$airport_icao." !  Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist." - Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.($row['last_altitude']*100)."\n";
10194
					} else {
10195
						if ($globalDebug) echo "----- Can't find arrival airport. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist." - Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.($row['last_altitude']*100)."\n";
10196
					}
10197
				} else {
10198
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
10199
				}
10200
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
10201
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
10202
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
10203
					$sthu = $this->db->prepare($update_query);
10204
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
10205
				}
10206
			}
10207
		}
10208
	}
10209
	
10210
	public function closestAirports($origLat,$origLon,$dist = 10) {
10211
		global $globalDBdriver;
10212
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
10213
/*
10214
		$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - abs(latitude))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(abs(latitude)*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2))) as distance 
10215
                      FROM airport WHERE longitude between ($origLon-$dist/abs(cos(radians($origLat))*69)) and ($origLon+$dist/abs(cos(radians($origLat))*69)) and latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
10216
                      having distance < $dist ORDER BY distance limit 100;";
10217
*/
10218
		if ($globalDBdriver == 'mysql') {
10219
			$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(latitude*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2))) as distance 
10220
	                      FROM airport WHERE longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
10221
	                      AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(latitude*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2)))) < $dist ORDER BY distance limit 100;";
10222
                } else {
10223
			$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(longitude as double precision))*pi()/180/2),2))) as distance 
10224
	                      FROM airport WHERE CAST(longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
10225
	                      AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(longitude as double precision))*pi()/180/2),2)))) < $dist ORDER BY distance limit 100;";
10226
    		}
10227
		$sth = $this->db->prepare($query);
10228
		$sth->execute();
10229
		return $sth->fetchAll(PDO::FETCH_ASSOC);
10230
	}
10231
}
10232
/*
10233
$Spotter = new Spotter();
10234
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
10235
*/
10236
/*
10237
$Spotter = new Spotter();
10238
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
10239
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
10240
print_r($da);
10241
print_r($aa);
10242
print_r(array_merge($da,$aa));
10243
*/
10244
?>