Completed
Push — master ( 27c107...d1f57a )
by Yannick
07:44
created

Spotter::updateLatestSpotterData()   A

Complexity

Conditions 3
Paths 6

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 6
nop 10
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) $filter = array_merge($globalStatsFilters[$globalFilterName],$filter);
23
		if (is_array($globalFilter)) $filter = array_merge($globalFilter,$filter);
24
		$filter_query_join = '';
25
		$filter_query_where = '';
26
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
27
			if ($filter['airlines'][0] != '') {
28
				$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";
29
			}
30
		}
31
		
32
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
33
			$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 ";
34
		}
35
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
36
			$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";
37
		}
38
		if (isset($filter['source']) && !empty($filter['source'])) {
39
			$filter_query_where = " WHERE format_source IN ('".implode("','",$filter['source'])."')";
40
		}
41
		if (isset($filter['ident']) && !empty($filter['ident'])) {
42
			$filter_query_where = " WHERE ident = '".$filter['ident']."'";
43
		}
44
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
45
			if ($filter_query_where == '') {
46
				$filter_query_where = " WHERE format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
47
			} else {
48
				$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
49
			}
50
		}
51
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
52
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
53
		$filter_query = $filter_query_join.$filter_query_where;
54
		return $filter_query;
55
	}
56
57
	/**
58
	* Executes the SQL statements to get the spotter information
59
	*
60
	* @param String $query the SQL query
61
	* @param Array $params parameter of the query
62
	* @param String $limitQuery the limit query
63
	* @return Array the spotter information
64
	*
65
	*/
66
	public function getDataFromDB($query, $params = array(), $limitQuery = '')
67
	{
68
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
69
		$Image = new Image($this->db);
70
		$Schedule = new Schedule($this->db);
71
		$ACARS = new ACARS($this->db);
72
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
73
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
74
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
75
		if (!isset($globalVAM)) $globalVAM = FALSE;
76
		date_default_timezone_set('UTC');
77
		
78
		if (!is_string($query))
79
		{
80
			return false;
81
		}
82
		
83
		if ($limitQuery != "")
84
		{
85
			if (!is_string($limitQuery))
86
			{
87
				return false;
88
			}
89
		}
90
91
		
92
		try {
93
			$sth = $this->db->prepare($query.$limitQuery);
94
			$sth->execute($params);
95
		} catch (PDOException $e) {
96
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
97
			exit();
98
		}
99
		
100
	//	$num_rows = count($sth->fetchAll());
101
		$num_rows = 0;
102
103
		$spotter_array = array();
104
		
105
106
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
107
		{
108
			$num_rows++;
109
			$temp_array = array();
110
			if (isset($row['spotter_live_id'])) {
111
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
112
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
113
			} elseif (isset($row['spotter_archive_id'])) {
114
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
115
			} elseif (isset($row['spotter_archive_output_id'])) {
116
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
117
			} elseif (isset($row['spotter_id'])) {
118
				$temp_array['spotter_id'] = $row['spotter_id'];
119
			} else {
120
				$temp_array['spotter_id'] = '';
121
			}
122
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
123
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
124
			$temp_array['ident'] = $row['ident'];
125
			if (isset($row['registration']) && $row['registration'] != '') {
126
				$temp_array['registration'] = $row['registration'];
127
			} elseif (isset($temp_array['modes'])) {
128
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
129
			} else $temp_array['registration'] = '';
130
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
131
			
132
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
133
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
134
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
135
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
136
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
137
			/*
138
			if (Connection->tableExists('countries')) {
139
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
140
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
141
				    $temp_array['country'] = $country_info['name'];
142
				    $temp_array['country_iso2'] = $country_info['iso2'];
143
				}
144
			}
145
			*/
146
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
147
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
148
			if (isset($row['route_stop'])) {
149
				$temp_array['route_stop'] = $row['route_stop'];
150
				if ($row['route_stop'] != '') {
151
					$allroute = explode(' ',$row['route_stop']);
152
			
153
					foreach ($allroute as $route) {
154
						$route_airport_array = $this->getAllAirportInfo($route);
155
						if (isset($route_airport_array[0]['name'])) {
156
							$route_stop_details = array();
157
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
158
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
159
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
160
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
161
							$temp_array['route_stop_details'][] = $route_stop_details;
162
						}
163
					}
164
				}
165
			}
166
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
167
			if (isset($row['heading'])) {
168
				$temp_array['heading'] = $row['heading'];
169
				$heading_direction = $this->parseDirection($row['heading']);
170
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
171
			}
172
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
173
			$temp_array['image'] = "";
174
			$temp_array['image_thumbnail'] = "";
175
			$temp_array['image_source'] = "";
176
			$temp_array['image_copyright'] = "";
177
 
178
			if (isset($row['highlight'])) {
179
				$temp_array['highlight'] = $row['highlight'];
180
			} else $temp_array['highlight'] = '';
181
			
182
			if (isset($row['date'])) {
183
				$dateArray = $this->parseDateString($row['date']);
184
				if ($dateArray['seconds'] < 10)
185
				{
186
					$temp_array['date'] = "a few seconds ago";
187
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
188
				{
189
					$temp_array['date'] = "half a minute ago";
190
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
191
				{
192
					$temp_array['date'] = "about a minute ago";
193
				} elseif ($dateArray['minutes'] < 5)
194
				{
195
					$temp_array['date'] = "a few minutes ago";
196
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
197
				{
198
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
199
				} elseif ($dateArray['hours'] < 2)
200
				{
201
					$temp_array['date'] = "about an hour ago";
202
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
203
				{
204
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
205
				} else {
206
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
207
				}
208
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
209
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
210
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
211
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
212
			}
213
			
214
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
215
				$temp_array['aircraft_name'] = $row['aircraft_name'];
216
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
217
				if (isset($row['aircraft_shadow'])) {
218
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
219
				}
220
			} elseif (isset($row['aircraft_icao'])) {
221
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
222
				if (count($aircraft_array) > 0) {
223
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
224
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
225
				
226
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
227
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
228
					} else $temp_array['aircraft_shadow'] = 'default.png';
229
                                } else {
230
                            		$temp_array['aircraft_shadow'] = 'default.png';
231
					$temp_array['aircraft_name'] = 'N/A';
232
					$temp_array['aircraft_manufacturer'] = 'N/A';
233
                            	}
234
			}
235
			$fromsource = NULL;
236
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
237
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
238
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
239
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
240
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
241
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
242
				if (!is_numeric(substr($row['ident'], 0, 3))) {
243
					if (is_numeric(substr($row['ident'], 2, 1))) {
244
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
245
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
246
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
247
					} else {
248
						$airline_array = $this->getAllAirlineInfo('NA');
249
					}
250
				} else {
251
					$airline_array = $this->getAllAirlineInfo('NA');
252
				}
253
				if (count($airline_array) > 0) {
254
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
255
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
256
					$temp_array['airline_name'] = $airline_array[0]['name'];
257
					$temp_array['airline_country'] = $airline_array[0]['country'];
258
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
259
					$temp_array['airline_type'] = $airline_array[0]['type'];
260
				}
261
			} else {
262
				$temp_array['airline_icao'] = $row['airline_icao'];
263
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
264
				else $temp_array['airline_iata'] = '';
265
				$temp_array['airline_name'] = $row['airline_name'];
266
				$temp_array['airline_country'] = $row['airline_country'];
267
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
268
				else $temp_array['airline_callsign'] = 'N/A';
269
				$temp_array['airline_type'] = $row['airline_type'];
270
			}
271
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
272
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
273
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
274
				if (count($acars_array) > 0) {
275
					$temp_array['acars'] = $acars_array;
276
					//print_r($acars_array);
277
				}
278
			}
279
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
280
				$temp_array['aircraft_owner'] = $row['owner_name'];
281
			}
282
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
283
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
284
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
285
				$temp_array['aircraft_base'] = $owner_info['base'];
286
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
287
			}
288
289
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
290
			{
291
				if ($globalIVAO) {
292
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
293
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
294
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
295
				if (count($image_array) > 0) {
296
					$temp_array['image'] = $image_array[0]['image'];
297
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
298
					$temp_array['image_source'] = $image_array[0]['image_source'];
299
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
300
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
301
						$planespotter_url_array = explode("_", $temp_array['image']);
302
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
303
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
304
					 }
305
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
306
				}
307
			}
308
309
310
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
311
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
312
			}
313
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
314
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
315
			}
316
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
317
				$schedule_array = $Schedule->getSchedule($temp_array['ident']);
318
				//print_r($schedule_array);
319
				if (count($schedule_array) > 0) {
320
					if ($schedule_array['departure_airport_icao'] != '') {
321
						$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
322
						 $temp_array['departure_airport'] = $row['departure_airport_icao'];
323
					}
324
					if ($schedule_array['arrival_airport_icao'] != '') {
325
						$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
326
						$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
327
					}
328
329
					$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
330
					$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
331
				}
332
			} else {
333
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
334
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
335
				}
336
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
337
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
338
				}
339
			}
340
			
341
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
342
			if ($row['departure_airport_icao'] != '') {
343
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
344
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
345
			/*
346
			} elseif ($row['departure_airport_name'] != '') {
347
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
348
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
349
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
350
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
351
			*/
352
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
353
			if (isset($departure_airport_array[0]['name'])) {
354
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
355
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
356
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
357
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
358
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
359
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
360
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
361
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
362
			}
363
364
			/*
365
			if (isset($row['departure_airport_time'])) {
366
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
367
			}
368
			*/
369
			
370
			if ($row['arrival_airport_icao'] != '') {
371
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
372
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
373
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
374
			if (isset($arrival_airport_array[0]['name'])) {
375
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
376
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
377
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
378
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
379
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
380
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
381
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
382
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
383
			}
384
			/*
385
			if (isset($row['arrival_airport_time'])) {
386
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
387
			}
388
			*/
389
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
390
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
391
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
392
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
393
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
394
			if (isset($row['squawk'])) {
395
				$temp_array['squawk'] = $row['squawk'];
396
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
397
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
398
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
399
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
400
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
401
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
402
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
403
			}
404
    			
405
			$temp_array['query_number_rows'] = $num_rows;
406
			
407
			$spotter_array[] = $temp_array;
408
		}
409
		if ($num_rows == 0) return array();
410
		$spotter_array[0]['query_number_rows'] = $num_rows;
411
		return $spotter_array;
412
	}	
413
	
414
	
415
	/**
416
	* Gets all the spotter information
417
	*
418
	* @return Array the spotter information
419
	*
420
	*/
421
	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 = '',$filter = array())
422
	{
423
		global $globalTimezone, $globalDBdriver;
424
		require_once(dirname(__FILE__).'/class.Translation.php');
425
		$Translation = new Translation();
426
427
		date_default_timezone_set('UTC');
428
429
		$query_values = array();
430
		$additional_query = '';
431
		$filter_query = $this->getFilter($filter,true,true);
432
		if ($q != "")
433
		{
434
			if (!is_string($q))
435
			{
436
				return false;
437
			} else {
438
				$q_array = explode(" ", $q);
439
				foreach ($q_array as $q_item){
440
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
441
					$additional_query .= " AND (";
442
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
443
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
444
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
445
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
446
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
447
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
448
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
449
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
450
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
451
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
452
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
453
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
454
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
455
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
456
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
457
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
458
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
459
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
460
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
461
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
462
					$translate = $Translation->ident2icao($q_item);
463
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
464
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
465
					$additional_query .= ")";
466
				}
467
			}
468
		}
469
470
		if ($registration != "")
471
		{
472
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
473
			if (!is_string($registration))
474
			{
475
				return false;
476
			} else {
477
				$additional_query .= " AND spotter_output.registration = :registration";
478
				$query_values = array_merge($query_values,array(':registration' => $registration));
479
			}
480
		}
481
482
		if ($aircraft_icao != "")
483
		{
484
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
485
			if (!is_string($aircraft_icao))
486
			{
487
				return false;
488
			} else {
489
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
490
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
491
			}
492
		}
493
494
		if ($aircraft_manufacturer != "")
495
		{
496
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
497
			if (!is_string($aircraft_manufacturer))
498
			{
499
				return false;
500
			} else {
501
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
502
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
503
			}
504
		}
505
506
		if ($highlights == "true")
507
		{
508
			if (!is_string($highlights))
509
			{
510
				return false;
511
			} else {
512
				$additional_query .= " AND (spotter_output.highlight <> '')";
513
			}
514
		}
515
516
		if ($airline_icao != "")
517
		{
518
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
519
			if (!is_string($airline_icao))
520
			{
521
				return false;
522
			} else {
523
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
524
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
525
			}
526
		}
527
528
		if ($airline_country != "")
529
		{
530
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
531
			if (!is_string($airline_country))
532
			{
533
				return false;
534
			} else {
535
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
536
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
537
			}
538
		}
539
540
		if ($airline_type != "")
541
		{
542
			if (!is_string($airline_type))
543
			{
544
				return false;
545
			} else {
546
				if ($airline_type == "passenger")
547
				{
548
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
549
				}
550
				if ($airline_type == "cargo")
551
				{
552
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
553
				}
554
				if ($airline_type == "military")
555
				{
556
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
557
				}
558
			}
559
		}
560
561
		if ($airport != "")
562
		{
563
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
564
			if (!is_string($airport))
565
			{
566
				return false;
567
			} else {
568
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
569
				$query_values = array_merge($query_values,array(':airport' => $airport));
570
			}
571
		}
572
573
		if ($airport_country != "")
574
		{
575
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
576
			if (!is_string($airport_country))
577
			{
578
				return false;
579
			} else {
580
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
581
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
582
			}
583
		}
584
    
585
		if ($callsign != "")
586
		{
587
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
588
			if (!is_string($callsign))
589
			{
590
				return false;
591
			} else {
592
				$translate = $Translation->ident2icao($callsign);
593
				if ($translate != $callsign) {
594
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
595
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
596
				} else {
597
					$additional_query .= " AND spotter_output.ident = :callsign";
598
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
599
				}
600
			}
601
		}
602
603
		if ($owner != "")
604
		{
605
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
606
			if (!is_string($owner))
607
			{
608
				return false;
609
			} else {
610
				$additional_query .= " AND spotter_output.owner_name = :owner";
611
				$query_values = array_merge($query_values,array(':owner' => $owner));
612
			}
613
		}
614
615
		if ($pilot_name != "")
616
		{
617
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
618
			if (!is_string($pilot_name))
619
			{
620
				return false;
621
			} else {
622
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
623
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
624
			}
625
		}
626
627
		if ($pilot_id != "")
628
		{
629
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
630
			if (!is_string($pilot_id))
631
			{
632
				return false;
633
			} else {
634
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
635
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
636
			}
637
		}
638
639
		if ($departure_airport_route != "")
640
		{
641
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
642
			if (!is_string($departure_airport_route))
643
			{
644
				return false;
645
			} else {
646
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
647
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
648
			}
649
		}
650
651
		if ($arrival_airport_route != "")
652
		{
653
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
654
			if (!is_string($arrival_airport_route))
655
			{
656
				return false;
657
			} else {
658
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
659
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
660
			}
661
		}
662
663
		if ($altitude != "")
664
		{
665
			$altitude_array = explode(",", $altitude);
666
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
667
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
668
669
			if ($altitude_array[1] != "")
670
			{                
671
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
672
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
673
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
674
			} else {
675
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
676
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
677
			}
678
		}
679
680
		if ($date_posted != "")
681
		{
682
			$date_array = explode(",", $date_posted);
683
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
684
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
685
686
			if ($globalTimezone != '') {
687
				date_default_timezone_set($globalTimezone);
688
				$datetime = new DateTime();
689
				$offset = $datetime->format('P');
690
			} else $offset = '+00:00';
691
692
			if ($date_array[1] != "")
693
			{
694
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
695
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
696
				if ($globalDBdriver == 'mysql') {
697
					$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]."' ";
698
				} else {
699
					$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]."' ";
700
				}
701
			} else {
702
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
703
				if ($globalDBdriver == 'mysql') {
704
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
705
				} else {
706
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
707
				}
708
			}
709
		}
710
711
		if ($limit != "")
712
		{
713
			$limit_array = explode(",", $limit);
714
			
715
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
716
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
717
			
718
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
719
			{
720
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
721
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
722
			} else $limit_query = "";
723
		} else $limit_query = "";
724
725
726
		if ($sort != "")
727
		{
728
			$search_orderby_array = $this->getOrderBy();
729
			$orderby_query = $search_orderby_array[$sort]['sql'];
730
		} else {
731
			if ($origLat != "" && $origLon != "" && $dist != "") {
732
				$orderby_query = " ORDER BY distance ASC";
733
			} else {
734
				$orderby_query = " ORDER BY spotter_output.date DESC";
735
			}
736
		}
737
738
		if ($includegeodata == "true")
739
		{
740
			$additional_query .= " AND spotter_output.waypoints <> ''";
741
		}
742
743
744
		if ($origLat != "" && $origLon != "" && $dist != "") {
745
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
746
747
			if ($globalDBdriver == 'mysql') {
748
				$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 
749
						FROM spotter_output, spotter_archive".$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)) 
750
						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;
751
			} else {
752
				$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 
753
						FROM spotter_output, spotter_archive".$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)) 
754
						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;
755
			}
756
		} else {		
757
			$query  = "SELECT spotter_output.* FROM spotter_output ".$filter_query." spotter_output.ident <> '' 
758
					".$additional_query."
759
					".$orderby_query;
760
		}
761
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
762
		return $spotter_array;
763
	}
764
	
765
	
766
	/**
767
	* Gets all the spotter information based on the latest data entry
768
	*
769
	* @return Array the spotter information
770
	*
771
	*/
772
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
773
	{
774
		global $global_query;
775
		
776
		date_default_timezone_set('UTC');
777
778
		$filter_query = $this->getFilter($filter);
779
		
780
		if ($limit != "")
781
		{
782
			$limit_array = explode(",", $limit);
783
			
784
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
785
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
786
			
787
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
788
			{
789
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
790
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
791
			} else $limit_query = "";
792
		} else $limit_query = "";
793
		
794
		if ($sort != "")
795
		{
796
			$search_orderby_array = $this->getOrderBy();
797
			$orderby_query = $search_orderby_array[$sort]['sql'];
798
		} else {
799
			$orderby_query = " ORDER BY spotter_output.date DESC";
800
		}
801
802
		$query  = $global_query.$filter_query." ".$orderby_query;
803
804
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query);
805
806
		return $spotter_array;
807
	}
808
    
809
    
810
    /**
811
	* Gets all the spotter information based on a user's latitude and longitude
812
	*
813
	* @return Array the spotter information
814
	*
815
	*/
816
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
817
	{
818
		date_default_timezone_set('UTC');
819
		$limit_query = '';
820
		if ($lat != "")
821
		{
822
			if (!is_numeric($lat))
823
			{
824
				return false;
825
			}
826
		}
827
        
828
		if ($lng != "")
829
		{
830
			if (!is_numeric($lng))
831
			{
832
				return false;
833
			}
834
		}
835
		
836
		if ($radius != "")
837
		{
838
			if (!is_numeric($radius))
839
			{
840
				return false;
841
			}
842
		}
843
    		$additional_query = '';
844
		if ($interval != "")
845
		{
846
			if (!is_string($interval))
847
			{
848
				return false;
849
			} else {
850
				if ($interval == "30m"){
851
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
852
				} else if ($interval == "1h"){
853
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
854
				} else if ($interval == "3h"){
855
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
856
				} else if ($interval == "6h"){
857
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
858
				} else if ($interval == "12h"){
859
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
860
				} else if ($interval == "24h"){
861
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
862
				} else if ($interval == "7d"){
863
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
864
				} else if ($interval == "30d"){
865
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
866
				} 
867
			}
868
		}
869
870
		$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 
871
                   WHERE spotter_output.latitude <> '' 
872
				   AND spotter_output.longitude <> '' 
873
                   ".$additional_query."
874
                   HAVING distance < :radius  
875
				   ORDER BY distance";
876
877
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
878
879
		return $spotter_array;
880
	}
881
    
882
    
883
    /**
884
	* Gets all the spotter information sorted by the newest aircraft type
885
	*
886
	* @return Array the spotter information
887
	*
888
	*/
889
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
890
	{
891
		global $global_query;
892
		
893
		date_default_timezone_set('UTC');
894
895
		$filter_query = $this->getFilter($filter,true,true);
896
897
		$limit_query = '';
898
		if ($limit != "")
899
		{
900
			$limit_array = explode(",", $limit);
901
			
902
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
903
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
904
			
905
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
906
			{
907
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
908
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
909
			}
910
		}
911
		
912
		if ($sort != "")
913
		{
914
			$search_orderby_array = $this->getOrderBy();
915
			$orderby_query = $search_orderby_array[$sort]['sql'];
916
		} else {
917
			$orderby_query = " ORDER BY spotter_output.date DESC ";
918
		}
919
920
		$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;
921
922
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
923
924
		return $spotter_array;
925
	}
926
    
927
    
928
	/**
929
	* Gets all the spotter information sorted by the newest aircraft registration
930
	*
931
	* @return Array the spotter information
932
	*
933
	*/
934
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
935
	{
936
		global $global_query;
937
		
938
		date_default_timezone_set('UTC');
939
		$filter_query = $this->getFilter($filter,true,true);
940
941
		$limit_query = '';
942
		if ($limit != "")
943
		{
944
			$limit_array = explode(",", $limit);
945
			
946
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
947
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
948
			
949
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
950
			{
951
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
952
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
953
			}
954
		}
955
		
956
		if ($sort != "")
957
		{
958
			$search_orderby_array = $this->getOrderBy();
959
			$orderby_query = $search_orderby_array[$sort]['sql'];
960
		} else {
961
			$orderby_query = " ORDER BY spotter_output.date DESC ";
962
		}
963
964
		$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;
965
966
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
967
968
		return $spotter_array;
969
	}
970
971
972
	/**
973
	* Gets all the spotter information sorted by the newest airline
974
	*
975
	* @return Array the spotter information
976
	*
977
	*/
978
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
979
	{
980
		global $global_query;
981
		
982
		date_default_timezone_set('UTC');
983
		$filter_query = $this->getFilter($filter,true,true);
984
		
985
		$limit_query = '';
986
		if ($limit != "")
987
		{
988
			$limit_array = explode(",", $limit);
989
			
990
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
991
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
992
			
993
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
994
			{
995
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
996
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
997
			}
998
		}
999
		
1000
		if ($sort != "")
1001
		{
1002
			$search_orderby_array = $this->getOrderBy();
1003
			$orderby_query = $search_orderby_array[$sort]['sql'];
1004
		} else {
1005
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1006
		}
1007
1008
		$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;
1009
1010
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1011
1012
		return $spotter_array;
1013
	}
1014
    
1015
    
1016
    /**
1017
	* Gets all the spotter information sorted by the newest departure airport
1018
	*
1019
	* @return Array the spotter information
1020
	*
1021
	*/
1022
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1023
	{
1024
		global $global_query;
1025
		
1026
		date_default_timezone_set('UTC');
1027
		
1028
		$filter_query = $this->getFilter($filter,true,true);
1029
		
1030
		$limit_query = '';
1031
		
1032
		if ($limit != "")
1033
		{
1034
			$limit_array = explode(",", $limit);
1035
			
1036
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1037
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1038
			
1039
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1040
			{
1041
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1042
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1043
			}
1044
		}
1045
		
1046
		if ($sort != "")
1047
		{
1048
			$search_orderby_array = $this->getOrderBy();
1049
			$orderby_query = $search_orderby_array[$sort]['sql'];
1050
		} else {
1051
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1052
		}
1053
1054
		$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;
1055
1056
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1057
1058
		return $spotter_array;
1059
	}
1060
1061
1062
	/**
1063
	* Gets all the spotter information sorted by the newest arrival airport
1064
	*
1065
	* @return Array the spotter information
1066
	*
1067
	*/
1068
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1069
	{
1070
		global $global_query;
1071
		
1072
		date_default_timezone_set('UTC');
1073
		$filter_query = $this->getFilter($filter,true,true);
1074
		$limit_query = '';
1075
		if ($limit != "")
1076
		{
1077
			$limit_array = explode(",", $limit);
1078
			
1079
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1080
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1081
			
1082
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1083
			{
1084
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1085
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1086
			}
1087
		}
1088
		
1089
		if ($sort != "")
1090
		{
1091
			$search_orderby_array = $this->getOrderBy();
1092
			$orderby_query = $search_orderby_array[$sort]['sql'];
1093
		} else {
1094
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1095
		}
1096
1097
		$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;
1098
1099
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1100
1101
		return $spotter_array;
1102
	}
1103
	
1104
1105
	/**
1106
	* Gets all the spotter information based on the spotter id
1107
	*
1108
	* @return Array the spotter information
1109
	*
1110
	*/
1111
	public function getSpotterDataByID($id = '')
1112
	{
1113
		global $global_query;
1114
		
1115
		date_default_timezone_set('UTC');
1116
		if ($id == '') return array();
1117
		$additional_query = "spotter_output.spotter_id = :id";
1118
		$query_values = array(':id' => $id);
1119
1120
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1121
		$query  = $global_query." WHERE ".$additional_query." ";
1122
1123
		$spotter_array = $this->getDataFromDB($query,$query_values);
1124
1125
		return $spotter_array;
1126
	}
1127
1128
	
1129
	
1130
	
1131
	/**
1132
	* Gets all the spotter information based on the callsign
1133
	*
1134
	* @return Array the spotter information
1135
	*
1136
	*/
1137
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1138
	{
1139
		global $global_query;
1140
		
1141
		date_default_timezone_set('UTC');
1142
		
1143
		$query_values = array();
1144
		$limit_query = '';
1145
		$additional_query = '';
1146
		if ($ident != "")
1147
		{
1148
			if (!is_string($ident))
1149
			{
1150
				return false;
1151
			} else {
1152
				$additional_query = " AND (spotter_output.ident = :ident)";
1153
				$query_values = array(':ident' => $ident);
1154
			}
1155
		}
1156
		
1157
		if ($limit != "")
1158
		{
1159
			$limit_array = explode(",", $limit);
1160
			
1161
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1162
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1163
			
1164
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1165
			{
1166
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1167
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1168
			}
1169
		}
1170
1171
		if ($sort != "")
1172
		{
1173
			$search_orderby_array = $this->getOrderBy();
1174
			$orderby_query = $search_orderby_array[$sort]['sql'];
1175
		} else {
1176
			$orderby_query = " ORDER BY spotter_output.date DESC";
1177
		}
1178
1179
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1180
1181
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1182
1183
		return $spotter_array;
1184
	}
1185
	
1186
	
1187
	
1188
	/**
1189
	* Gets all the spotter information based on the aircraft type
1190
	*
1191
	* @return Array the spotter information
1192
	*
1193
	*/
1194
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1195
	{
1196
		global $global_query;
1197
		
1198
		date_default_timezone_set('UTC');
1199
		
1200
		$query_values = array();
1201
		$limit_query = '';
1202
		$additional_query = '';
1203
		$filter_query = $this->getFilter($filter,true,true);
1204
		
1205
		if ($aircraft_type != "")
1206
		{
1207
			if (!is_string($aircraft_type))
1208
			{
1209
				return false;
1210
			} else {
1211
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1212
				$query_values = array(':aircraft_type' => $aircraft_type);
1213
			}
1214
		}
1215
		
1216
		if ($limit != "")
1217
		{
1218
			$limit_array = explode(",", $limit);
1219
			
1220
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1221
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1222
			
1223
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1224
			{
1225
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1226
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1227
			}
1228
		}
1229
1230
		if ($sort != "")
1231
		{
1232
			$search_orderby_array = $this->getOrderBy();
1233
			$orderby_query = $search_orderby_array[$sort]['sql'];
1234
		} else {
1235
			$orderby_query = " ORDER BY spotter_output.date DESC";
1236
		}
1237
1238
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1239
1240
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1241
1242
		return $spotter_array;
1243
	}
1244
	
1245
	
1246
	/**
1247
	* Gets all the spotter information based on the aircraft registration
1248
	*
1249
	* @return Array the spotter information
1250
	*
1251
	*/
1252
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1253
	{
1254
		global $global_query;
1255
		
1256
		date_default_timezone_set('UTC');
1257
		
1258
		$query_values = array();
1259
		$limit_query = '';
1260
		$additional_query = '';
1261
		$filter_query = $this->getFilter($filter,true,true);
1262
		
1263
		if ($registration != "")
1264
		{
1265
			if (!is_string($registration))
1266
			{
1267
				return false;
1268
			} else {
1269
				$additional_query = " AND (spotter_output.registration = :registration)";
1270
				$query_values = array(':registration' => $registration);
1271
			}
1272
		}
1273
		
1274
		if ($limit != "")
1275
		{
1276
			$limit_array = explode(",", $limit);
1277
			
1278
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1279
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1280
			
1281
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1282
			{
1283
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1284
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1285
			}
1286
		}
1287
1288
		if ($sort != "")
1289
		{
1290
			$search_orderby_array = $this->getOrderBy();
1291
			$orderby_query = $search_orderby_array[$sort]['sql'];
1292
		} else {
1293
			$orderby_query = " ORDER BY spotter_output.date DESC";
1294
		}
1295
1296
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1297
1298
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1299
1300
		return $spotter_array;
1301
	}
1302
1303
	
1304
	
1305
	
1306
	/**
1307
	* Gets all the spotter information based on the airline
1308
	*
1309
	* @return Array the spotter information
1310
	*
1311
	*/
1312
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '')
1313
	{
1314
		global $global_query;
1315
		
1316
		date_default_timezone_set('UTC');
1317
1318
		$query_values = array();
1319
		$limit_query = '';
1320
		$additional_query = '';
1321
		
1322
		if ($airline != "")
1323
		{
1324
			if (!is_string($airline))
1325
			{
1326
				return false;
1327
			} else {
1328
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1329
				$query_values = array(':airline' => $airline);
1330
			}
1331
		}
1332
		
1333
		if ($limit != "")
1334
		{
1335
			$limit_array = explode(",", $limit);
1336
			
1337
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1338
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1339
			
1340
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1341
			{
1342
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1343
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1344
			}
1345
		}
1346
		
1347
		if ($sort != "")
1348
		{
1349
			$search_orderby_array = $this->getOrderBy();
1350
			$orderby_query = $search_orderby_array[$sort]['sql'];
1351
		} else {
1352
			$orderby_query = " ORDER BY spotter_output.date DESC";
1353
		}
1354
1355
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1356
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1357
1358
		return $spotter_array;
1359
	}
1360
	
1361
	
1362
	/**
1363
	* Gets all the spotter information based on the airport
1364
	*
1365
	* @return Array the spotter information
1366
	*
1367
	*/
1368
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '')
1369
	{
1370
		global $global_query;
1371
		
1372
		date_default_timezone_set('UTC');
1373
		$query_values = array();
1374
		$limit_query = '';
1375
		$additional_query = '';
1376
		
1377
		if ($airport != "")
1378
		{
1379
			if (!is_string($airport))
1380
			{
1381
				return false;
1382
			} else {
1383
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1384
				$query_values = array(':airport' => $airport);
1385
			}
1386
		}
1387
		
1388
		if ($limit != "")
1389
		{
1390
			$limit_array = explode(",", $limit);
1391
			
1392
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1393
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1394
			
1395
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1396
			{
1397
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1398
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1399
			}
1400
		}
1401
		
1402
		if ($sort != "")
1403
		{
1404
			$search_orderby_array = $this->getOrderBy();
1405
			$orderby_query = $search_orderby_array[$sort]['sql'];
1406
		} else {
1407
			$orderby_query = " ORDER BY spotter_output.date DESC";
1408
		}
1409
1410
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." AND ((spotter_output.departure_airport_icao <> 'NA') AND (spotter_output.arrival_airport_icao <> 'NA')) ".$orderby_query;
1411
1412
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1413
1414
		return $spotter_array;
1415
	}
1416
1417
1418
1419
	/**
1420
	* Gets all the spotter information based on the date
1421
	*
1422
	* @return Array the spotter information
1423
	*
1424
	*/
1425
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1426
	{
1427
		global $global_query, $globalTimezone, $globalDBdriver;
1428
		
1429
		$query_values = array();
1430
		$limit_query = '';
1431
		$additional_query = '';
1432
1433
		$filter_query = '';
1434
		if (isset($filter['source']) && !empty($filter['source'])) {
1435
			$filter_query = " AND format_source IN ('".implode("','",$filter['source'])."')";
1436
		}
1437
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
1438
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_live.flightaware_id";
1439
		}
1440
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
1441
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_live.flightaware_id ";
1442
		}
1443
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
1444
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
1445
		}
1446
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
1447
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) so ON so.flightaware_id = spotter_live.flightaware_id";
1448
		}
1449
	
1450
		
1451
		if ($date != "")
1452
		{
1453
			if ($globalTimezone != '') {
1454
				date_default_timezone_set($globalTimezone);
1455
				$datetime = new DateTime($date);
1456
				$offset = $datetime->format('P');
1457
			} else {
1458
				date_default_timezone_set('UTC');
1459
				$datetime = new DateTime($date);
1460
				$offset = '+00:00';
1461
			}
1462
			if ($globalDBdriver == 'mysql') {
1463
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1464
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1465
			} elseif ($globalDBdriver == 'pgsql') {
1466
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1467
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1468
			}
1469
		}
1470
		
1471
		if ($limit != "")
1472
		{
1473
			$limit_array = explode(",", $limit);
1474
			
1475
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1476
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1477
			
1478
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1479
			{
1480
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1481
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1482
			}
1483
		}
1484
1485
		if ($sort != "")
1486
		{
1487
			$search_orderby_array = $this->getOrderBy();
1488
			$orderby_query = $search_orderby_array[$sort]['sql'];
1489
		} else {
1490
			$orderby_query = " ORDER BY spotter_output.date DESC";
1491
		}
1492
1493
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query.$filter_query." ".$orderby_query;
1494
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1495
		return $spotter_array;
1496
	}
1497
1498
1499
1500
	/**
1501
	* Gets all the spotter information based on the country name
1502
	*
1503
	* @return Array the spotter information
1504
	*
1505
	*/
1506
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '')
1507
	{
1508
		global $global_query;
1509
		
1510
		date_default_timezone_set('UTC');
1511
		
1512
		$query_values = array();
1513
		$limit_query = '';
1514
		$additional_query = '';
1515
		if ($country != "")
1516
		{
1517
			if (!is_string($country))
1518
			{
1519
				return false;
1520
			} else {
1521
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1522
				$additional_query .= " OR spotter_output.airline_country = :country";
1523
				$query_values = array(':country' => $country);
1524
			}
1525
		}
1526
		
1527
		if ($limit != "")
1528
		{
1529
			$limit_array = explode(",", $limit);
1530
			
1531
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1532
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1533
			
1534
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1535
			{
1536
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1537
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1538
			}
1539
		}
1540
					
1541
		if ($sort != "")
1542
		{
1543
			$search_orderby_array = $this->getOrderBy();
1544
			$orderby_query = $search_orderby_array[$sort]['sql'];
1545
		} else {
1546
			$orderby_query = " ORDER BY spotter_output.date DESC";
1547
		}
1548
1549
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1550
1551
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1552
1553
		return $spotter_array;
1554
	}	
1555
	
1556
	
1557
	/**
1558
	* Gets all the spotter information based on the manufacturer name
1559
	*
1560
	* @return Array the spotter information
1561
	*
1562
	*/
1563
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '')
1564
	{
1565
		global $global_query;
1566
		
1567
		date_default_timezone_set('UTC');
1568
		
1569
		$query_values = array();
1570
		$additional_query = '';
1571
		$limit_query = '';
1572
		
1573
		if ($aircraft_manufacturer != "")
1574
		{
1575
			if (!is_string($aircraft_manufacturer))
1576
			{
1577
				return false;
1578
			} else {
1579
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1580
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1581
			}
1582
		}
1583
		
1584
		if ($limit != "")
1585
		{
1586
			$limit_array = explode(",", $limit);
1587
			
1588
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1589
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1590
			
1591
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1592
			{
1593
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1594
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1595
			}
1596
		}
1597
1598
		if ($sort != "")
1599
		{
1600
			$search_orderby_array = $this->getOrderBy();
1601
			$orderby_query = $search_orderby_array[$sort]['sql'];
1602
		} else {
1603
			$orderby_query = " ORDER BY spotter_output.date DESC";
1604
		}
1605
1606
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1607
1608
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1609
1610
		return $spotter_array;
1611
	}
1612
1613
1614
  
1615
  
1616
	/**
1617
	* Gets a list of all aircraft that take a route
1618
	*
1619
	* @param String $departure_airport_icao ICAO code of departure airport
1620
	* @param String $arrival_airport_icao ICAO code of arrival airport
1621
	* @return Array the spotter information
1622
	*
1623
	*/
1624
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '')
1625
	{
1626
		global $global_query;
1627
		
1628
		$query_values = array();
1629
		$additional_query = '';
1630
		$limit_query = '';
1631
		if ($departure_airport_icao != "")
1632
		{
1633
			if (!is_string($departure_airport_icao))
1634
			{
1635
				return false;
1636
			} else {
1637
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1638
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1639
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1640
			}
1641
		}
1642
		
1643
		if ($arrival_airport_icao != "")
1644
		{
1645
			if (!is_string($arrival_airport_icao))
1646
			{
1647
				return false;
1648
			} else {
1649
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1650
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1651
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1652
			}
1653
		}
1654
		
1655
		if ($limit != "")
1656
		{
1657
			$limit_array = explode(",", $limit);
1658
			
1659
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1660
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1661
			
1662
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1663
			{
1664
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1665
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1666
			}
1667
		}
1668
	
1669
		if ($sort != "")
1670
		{
1671
			$search_orderby_array = $this->getOrderBy();
1672
			$orderby_query = $search_orderby_array[$sort]['sql'];
1673
		} else {
1674
			$orderby_query = " ORDER BY spotter_output.date DESC";
1675
		}
1676
1677
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1678
          
1679
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1680
1681
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1682
1683
		return $spotter_array;
1684
	}
1685
	
1686
	
1687
	
1688
	/**
1689
	* Gets all the spotter information based on the special column in the table
1690
	*
1691
	* @return Array the spotter information
1692
	*
1693
	*/
1694
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1695
	{
1696
		global $global_query;
1697
		
1698
		date_default_timezone_set('UTC');
1699
		$filter_query = $this->getFilter($filter,true,true);
1700
		$limit_query = '';
1701
		
1702
		if ($limit != "")
1703
		{
1704
			$limit_array = explode(",", $limit);
1705
			
1706
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1707
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1708
			
1709
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1710
			{
1711
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1712
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1713
			}
1714
		}
1715
		
1716
		if ($sort != "")
1717
		{
1718
			$search_orderby_array = $this->getOrderBy();
1719
			$orderby_query = $search_orderby_array[$sort]['sql'];
1720
		} else {
1721
			$orderby_query = " ORDER BY spotter_output.date DESC";
1722
		}
1723
1724
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1725
1726
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1727
1728
		return $spotter_array;
1729
	}
1730
1731
	/**
1732
	* Gets all the highlight based on a aircraft registration
1733
	*
1734
	* @return String the highlight text
1735
	*
1736
	*/
1737
	public function getHighlightByRegistration($registration,$filter = array())
1738
	{
1739
		global $global_query;
1740
		
1741
		date_default_timezone_set('UTC');
1742
		$filter_query = $this->getFilter($filter,true,true);
1743
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1744
		
1745
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1746
		$sth = $this->db->prepare($query);
1747
		$sth->execute(array(':registration' => $registration));
1748
1749
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1750
		{
1751
			$highlight = $row['highlight'];
1752
		}
1753
		if (isset($highlight)) return $highlight;
1754
	}
1755
1756
	
1757
	/**
1758
	* Gets the squawk usage from squawk code
1759
	*
1760
	* @param String $squawk squawk code
1761
	* @param String $country country
1762
	* @return String usage
1763
	*
1764
	*/
1765
	public function getSquawkUsage($squawk = '',$country = 'FR')
1766
	{
1767
		
1768
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1769
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1770
1771
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1772
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1773
		
1774
		$sth = $this->db->prepare($query);
1775
		$sth->execute($query_values);
1776
    
1777
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1778
		$sth->closeCursor();
1779
		if (count($row) > 0) {
1780
			return $row['usage'];
1781
		} else return '';
1782
	}
1783
1784
	/**
1785
	* Gets the airport icao from the iata
1786
	*
1787
	* @param String $airport_iata the iata code of the airport
1788
	* @return String airport iata
1789
	*
1790
	*/
1791
	public function getAirportIcao($airport_iata = '')
1792
	{
1793
		
1794
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1795
1796
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1797
		$query_values = array(':airport' => $airport_iata);
1798
		
1799
		$sth = $this->db->prepare($query);
1800
		$sth->execute($query_values);
1801
		
1802
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1803
		$sth->closeCursor();
1804
		if (count($row) > 0) {
1805
			return $row['icao'];
1806
		} else return '';
1807
	}
1808
1809
	/**
1810
	* Gets the airport distance
1811
	*
1812
	* @param String $airport_icao the icao code of the airport
1813
	* @param Float $latitude the latitude
1814
	* @param Float $longitude the longitude
1815
	* @return Float distance to the airport
1816
	*
1817
	*/
1818
	public function getAirportDistance($airport_icao,$latitude,$longitude)
1819
	{
1820
		
1821
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
1822
1823
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
1824
		$query_values = array(':airport' => $airport_icao);
1825
		$sth = $this->db->prepare($query);
1826
		$sth->execute($query_values);
1827
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1828
		$sth->closeCursor();
1829
		if (count($row) > 0) {
1830
			$airport_latitude = $row['latitude'];
1831
			$airport_longitude = $row['longitude'];
1832
			$Common = new Common();
1833
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
1834
		} else return '';
1835
	}
1836
	
1837
	/**
1838
	* Gets the airport info based on the icao
1839
	*
1840
	* @param String $airport the icao code of the airport
1841
	* @return Array airport information
1842
	*
1843
	*/
1844
	public function getAllAirportInfo($airport = '')
1845
	{
1846
		
1847
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
1848
1849
		$query_values = array();
1850
		if ($airport == 'NA') {
1851
			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' => ''));
1852
		} elseif ($airport == '') {
1853
			$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";
1854
		} else {
1855
			$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";
1856
			$query_values = array(':airport' => $airport);
1857
		}
1858
		
1859
		$sth = $this->db->prepare($query);
1860
		$sth->execute($query_values);
1861
		/*
1862
		$airport_array = array();
1863
		$temp_array = array();
1864
		
1865
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1866
		{
1867
			$temp_array['name'] = $row['name'];
1868
			$temp_array['city'] = $row['city'];
1869
			$temp_array['country'] = $row['country'];
1870
			$temp_array['iata'] = $row['iata'];
1871
			$temp_array['icao'] = $row['icao'];
1872
			$temp_array['latitude'] = $row['latitude'];
1873
			$temp_array['longitude'] = $row['longitude'];
1874
			$temp_array['altitude'] = $row['altitude'];
1875
			$temp_array['home_link'] = $row['home_link'];
1876
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
1877
			$temp_array['image'] = $row['image'];
1878
			$temp_array['image_thumb'] = $row['image_thumb'];
1879
1880
			$airport_array[] = $temp_array;
1881
		}
1882
1883
		return $airport_array;
1884
		*/
1885
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1886
	}
1887
	
1888
	/**
1889
	* Gets the airport info based on the country
1890
	*
1891
	* @param Array $countries Airports countries
1892
	* @return Array airport information
1893
	*
1894
	*/
1895
	public function getAllAirportInfobyCountry($countries)
1896
	{
1897
		$lst_countries = '';
1898
		foreach ($countries as $country) {
1899
			$country = filter_var($country,FILTER_SANITIZE_STRING);
1900
			if ($lst_countries == '') {
1901
				$lst_countries = "'".$country."'";
1902
			} else {
1903
				$lst_countries .= ",'".$country."'";
1904
			}
1905
		}
1906
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
1907
		
1908
		$sth = $this->db->prepare($query);
1909
		$sth->execute();
1910
    
1911
		$airport_array = array();
1912
		$temp_array = array();
1913
		
1914
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1915
		{
1916
			$temp_array['name'] = $row['name'];
1917
			$temp_array['city'] = $row['city'];
1918
			$temp_array['country'] = $row['country'];
1919
			$temp_array['iata'] = $row['iata'];
1920
			$temp_array['icao'] = $row['icao'];
1921
			$temp_array['latitude'] = $row['latitude'];
1922
			$temp_array['longitude'] = $row['longitude'];
1923
			$temp_array['altitude'] = $row['altitude'];
1924
1925
			$airport_array[] = $temp_array;
1926
		}
1927
1928
		return $airport_array;
1929
	}
1930
	
1931
	/**
1932
	* Gets airports info based on the coord
1933
	*
1934
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
1935
	* @return Array airport information
1936
	*
1937
	*/
1938
	public function getAllAirportInfobyCoord($coord)
1939
	{
1940
		global $globalDBdriver;
1941
		if (is_array($coord)) {
1942
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1943
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1944
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1945
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1946
		} else return array();
1947
		if ($globalDBdriver == 'mysql') {
1948
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1949
		} else {
1950
			$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'";
1951
		}
1952
		$sth = $this->db->prepare($query);
1953
		$sth->execute();
1954
    
1955
		$airport_array = array();
1956
		
1957
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1958
		{
1959
			$temp_array = $row;
1960
1961
			$airport_array[] = $temp_array;
1962
		}
1963
1964
		return $airport_array;
1965
	}
1966
1967
	/**
1968
	* Gets waypoints info based on the coord
1969
	*
1970
	* @param Array $coord waypoints coord
1971
	* @return Array airport information
1972
	*
1973
	*/
1974
	public function getAllWaypointsInfobyCoord($coord)
1975
	{
1976
		if (is_array($coord)) {
1977
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1978
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1979
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1980
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1981
		} else return array();
1982
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
1983
		$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.")";
1984
		//$query  = "SELECT waypoints.* FROM waypoints";
1985
		//$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";
1986
		//$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;
1987
		//$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;
1988
		//echo $query;
1989
		
1990
		$sth = $this->db->prepare($query);
1991
		$sth->execute();
1992
    
1993
		$waypoints_array = array();
1994
		
1995
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1996
		{
1997
			$temp_array = $row;
1998
1999
			$waypoints_array[] = $temp_array;
2000
		}
2001
2002
		return $waypoints_array;
2003
	}
2004
	
2005
	
2006
	/**
2007
	* Gets the airline info based on the icao code or iata code
2008
	*
2009
	* @param String $airline_icao the iata code of the airport
2010
	* @return Array airport information
2011
	*
2012
	*/
2013
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2014
	{
2015
		global $globalUseRealAirlines;
2016
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2017
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2018
		if ($airline_icao == 'NA') {
2019
			$airline_array = array();
2020
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2021
			return $airline_array;
2022
		} else {
2023
			if (strlen($airline_icao) == 2) {
2024
				if ($fromsource === NULL) {
2025
					$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";
2026
				} else {
2027
					$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";
2028
				}
2029
			} else {
2030
				if ($fromsource === NULL) {
2031
					$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";
2032
				} else {
2033
					$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";
2034
				}
2035
			}
2036
			
2037
			$sth = $this->db->prepare($query);
2038
			if ($fromsource === NULL) {
2039
				$sth->execute(array(':airline_icao' => $airline_icao));
2040
			} else {
2041
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2042
			}
2043
                        /*
2044
			$airline_array = array();
2045
			$temp_array = array();
2046
		
2047
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2048
			{
2049
				$temp_array['name'] = $row['name'];
2050
				$temp_array['iata'] = $row['iata'];
2051
				$temp_array['icao'] = $row['icao'];
2052
				$temp_array['callsign'] = $row['callsign'];
2053
				$temp_array['country'] = $row['country'];
2054
				$temp_array['type'] = $row['type'];
2055
				$airline_array[] = $temp_array;
2056
			}
2057
			return $airline_array;
2058
			*/
2059
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2060
			if (empty($result) && $fromsource !== NULL) {
2061
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2062
				$sth = $this->db->prepare($query);
2063
				$sth->execute(array(':fromsource' => $fromsource));
2064
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2065
				$sth->closeCursor();
2066
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2067
			}
2068
			return $result;
2069
		}
2070
	}
2071
	
2072
	
2073
	
2074
	/**
2075
	* Gets the aircraft info based on the aircraft type
2076
	*
2077
	* @param String $aircraft_type the aircraft type
2078
	* @return Array aircraft information
2079
	*
2080
	*/
2081
	public function getAllAircraftInfo($aircraft_type)
2082
	{
2083
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2084
2085
		if ($aircraft_type == 'NA') {
2086
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2087
		}
2088
		$query  = "SELECT aircraft.icao, aircraft.type,aircraft.manufacturer,aircraft.aircraft_shadow FROM aircraft WHERE aircraft.icao = :aircraft_type";
2089
		
2090
		$sth = $this->db->prepare($query);
2091
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2092
		/*
2093
		$aircraft_array = array();
2094
		$temp_array = array();
2095
		
2096
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2097
		{
2098
			$temp_array = array();
2099
			$temp_array['icao'] = $row['icao'];
2100
			$temp_array['type'] = $row['type'];
2101
			$temp_array['manufacturer'] = $row['manufacturer'];
2102
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2103
2104
			$aircraft_array[] = $temp_array;
2105
		}
2106
		return $aircraft_array;
2107
		*/
2108
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2109
	}
2110
2111
	/**
2112
	* Gets the aircraft icao based on the aircraft name/type
2113
	*
2114
	* @param String $aircraft_type the aircraft type
2115
	* @return String aircraft information
2116
	*
2117
	*/
2118
	public function getAircraftIcao($aircraft_type)
2119
	{
2120
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2121
		$all_aircraft = array('737-300' => 'B733',
2122
				'777-200' => 'B772',
2123
				'777-200ER' => 'B772',
2124
				'777-300ER' => 'B77W',
2125
				'c172p' => 'C172',
2126
				'aerostar' => 'AEST',
2127
				'A320-211' => 'A320',
2128
				'747-8i' => 'B748',
2129
				'A380' => 'A388');
2130
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2131
2132
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2133
		$aircraft_type = strtoupper($aircraft_type);
2134
		$sth = $this->db->prepare($query);
2135
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2136
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2137
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2138
		else return '';
2139
	}
2140
	
2141
	/**
2142
	* Gets the aircraft info based on the aircraft ident
2143
	*
2144
	* @param String $aircraft_modes the aircraft ident (hex)
2145
	* @return String aircraft type
2146
	*
2147
	*/
2148
	public function getAllAircraftType($aircraft_modes)
2149
	{
2150
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2151
2152
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
2153
		
2154
		$sth = $this->db->prepare($query);
2155
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2156
2157
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2158
		$sth->closeCursor();
2159
		if (isset($row['icaotypecode'])) {
2160
			return $row['icaotypecode'];
2161
		} else return '';
2162
	}
2163
2164
	/**
2165
	* Gets correct aircraft operator corde
2166
	*
2167
	* @param String $operator the aircraft operator code (callsign)
2168
	* @return String aircraft operator code
2169
	*
2170
	*/
2171
	public function getOperator($operator)
2172
	{
2173
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2174
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2175
		
2176
		$sth = $this->db->prepare($query);
2177
		$sth->execute(array(':operator' => $operator));
2178
2179
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2180
		$sth->closeCursor();
2181
		if (isset($row['operator_correct'])) {
2182
			return $row['operator_correct'];
2183
		} else return $operator;
2184
	}
2185
2186
	/**
2187
	* Gets the aircraft route based on the aircraft callsign
2188
	*
2189
	* @param String $callsign the aircraft callsign
2190
	* @return Array aircraft type
2191
	*
2192
	*/
2193
	public function getRouteInfo($callsign)
2194
	{
2195
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2196
                if ($callsign == '') return array();
2197
		$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";
2198
		
2199
		$sth = $this->db->prepare($query);
2200
		$sth->execute(array(':callsign' => $callsign));
2201
2202
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2203
		$sth->closeCursor();
2204
		if (count($row) > 0) {
2205
			return $row;
2206
		} else return array();
2207
	}
2208
	
2209
	/**
2210
	* Gets the aircraft info based on the aircraft registration
2211
	*
2212
	* @param String $registration the aircraft registration
2213
	* @return Array aircraft information
2214
	*
2215
	*/
2216
	public function getAircraftInfoByRegistration($registration)
2217
	{
2218
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2219
2220
		$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";
2221
		
2222
		$sth = $this->db->prepare($query);
2223
		$sth->execute(array(':registration' => $registration));
2224
2225
		$aircraft_array = array();
2226
		$temp_array = array();
2227
		
2228
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2229
		{
2230
			$temp_array['airline_icao'] = $row['airline_icao'];
2231
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2232
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2233
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2234
2235
			$aircraft_array[] = $temp_array;
2236
		}
2237
2238
		return $aircraft_array;
2239
	}
2240
	
2241
	/**
2242
	* Gets the aircraft owner & base based on the aircraft registration
2243
	*
2244
	* @param String $registration the aircraft registration
2245
	* @return Array aircraft information
2246
	*
2247
	*/
2248
	public function getAircraftOwnerByRegistration($registration)
2249
	{
2250
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2251
		$Connection = new Connection($this->db);
2252
		if ($Connection->tableExists('aircraft_owner')) {
2253
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2254
			$sth = $this->db->prepare($query);
2255
			$sth->execute(array(':registration' => $registration));
2256
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2257
			$sth->closeCursor();
2258
			return $result;
2259
		} else return array();
2260
	}
2261
	
2262
  
2263
  /**
2264
	* Gets all flights (but with only little info)
2265
	*
2266
	* @return Array basic flight information
2267
	*
2268
	*/
2269
	public function getAllFlightsforSitemap()
2270
	{
2271
		//$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 ";
2272
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2273
		
2274
		$sth = $this->db->prepare($query);
2275
		$sth->execute();
2276
                  /*
2277
		$flight_array = array();
2278
		$temp_array = array();
2279
		
2280
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2281
		{
2282
			$temp_array['spotter_id'] = $row['spotter_id'];
2283
//			$temp_array['ident'] = $row['ident'];
2284
//			$temp_array['airline_name'] = $row['airline_name'];
2285
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2286
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2287
			//$temp_array['image'] = $row['image'];
2288
2289
			$flight_array[] = $temp_array;
2290
		}
2291
2292
		return $flight_array;
2293
		*/
2294
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2295
	}
2296
  
2297
	/**
2298
	* Gets a list of all aircraft manufacturers
2299
	*
2300
	* @return Array list of aircraft types
2301
	*
2302
	*/
2303
	public function getAllManufacturers()
2304
	{
2305
		/*
2306
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2307
								FROM spotter_output
2308
								WHERE spotter_output.aircraft_manufacturer <> '' 
2309
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2310
		  */
2311
		
2312
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2313
		$sth = $this->db->prepare($query);
2314
		$sth->execute();
2315
2316
		$manufacturer_array = array();
2317
		$temp_array = array();
2318
		
2319
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2320
		{
2321
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2322
2323
			$manufacturer_array[] = $temp_array;
2324
		}
2325
2326
		return $manufacturer_array;
2327
	}
2328
  
2329
  
2330
  /**
2331
	* Gets a list of all aircraft types
2332
	*
2333
	* @return Array list of aircraft types
2334
	*
2335
	*/
2336
	public function getAllAircraftTypes($filters = array())
2337
	{
2338
		/*
2339
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2340
								FROM spotter_output  
2341
								WHERE spotter_output.aircraft_icao <> '' 
2342
								ORDER BY spotter_output.aircraft_name ASC";
2343
								
2344
		*/
2345
		$filter_query = $this->getFilter($filters,true,true);
2346
		$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";
2347
		
2348
		$sth = $this->db->prepare($query);
2349
		$sth->execute();
2350
2351
		$aircraft_array = array();
2352
		$temp_array = array();
2353
		
2354
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2355
		{
2356
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2357
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2358
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2359
2360
			$aircraft_array[] = $temp_array;
2361
		}
2362
2363
		return $aircraft_array;
2364
	}
2365
	
2366
	
2367
	/**
2368
	* Gets a list of all aircraft registrations
2369
	*
2370
	* @return Array list of aircraft registrations
2371
	*
2372
	*/
2373
	public function getAllAircraftRegistrations($filters = array())
2374
	{
2375
		$filter_query = $this->getFilter($filters,true,true);
2376
		$query  = "SELECT DISTINCT spotter_output.registration 
2377
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2378
				ORDER BY spotter_output.registration ASC";
2379
2380
		$sth = $this->db->prepare($query);
2381
		$sth->execute();
2382
2383
		$aircraft_array = array();
2384
		$temp_array = array();
2385
		
2386
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2387
		{
2388
			$temp_array['registration'] = $row['registration'];
2389
2390
			$aircraft_array[] = $temp_array;
2391
		}
2392
2393
		return $aircraft_array;
2394
	}
2395
2396
	/**
2397
	* Gets all source name
2398
	*
2399
	* @param String type format of source
2400
	* @return Array list of source name
2401
	*
2402
	*/
2403
	public function getAllSourceName($type = '',$filters = array())
2404
	{
2405
		$filter_query = $this->getFilter($filters,true,true);
2406
		$query_values = array();
2407
		$query  = "SELECT DISTINCT spotter_output.source_name 
2408
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2409
		if ($type != '') {
2410
			$query_values = array(':type' => $type);
2411
			$query .= " AND format_source = :type";
2412
		}
2413
		$query .= " ORDER BY spotter_output.source_name ASC";
2414
2415
		$sth = $this->db->prepare($query);
2416
		if (!empty($query_values)) $sth->execute($query_values);
2417
		else $sth->execute();
2418
2419
		$source_array = array();
2420
		$temp_array = array();
2421
		
2422
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2423
		{
2424
			$temp_array['source_name'] = $row['source_name'];
2425
			$source_array[] = $temp_array;
2426
		}
2427
		return $source_array;
2428
	}
2429
2430
2431
2432
	/**
2433
	* Gets a list of all airline names
2434
	*
2435
	* @return Array list of airline names
2436
	*
2437
	*/
2438
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2439
	{
2440
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2441
		$filter_query = $this->getFilter($filters,true,true);
2442
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2443
		if ($airline_type == '' || $airline_type == 'all') {
2444
			/*
2445
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2446
								FROM spotter_output
2447
								WHERE spotter_output.airline_icao <> '' 
2448
								ORDER BY spotter_output.airline_name ASC";
2449
			*/
2450
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2451
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2452
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2453
			if ($forsource === NULL) {
2454
				$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";
2455
				$query_data = array();
2456
			} else {
2457
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2458
				$query_data = array(':forsource' => $forsource);
2459
			}
2460
		} else {
2461
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2462
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2463
					AND spotter_output.airline_type = :airline_type 
2464
					ORDER BY spotter_output.airline_icao ASC";
2465
			$query_data = array(':airline_type' => $airline_type);
2466
		}
2467
		
2468
		$sth = $this->db->prepare($query);
2469
		$sth->execute($query_data);
2470
    
2471
		$airline_array = array();
2472
		$temp_array = array();
2473
		
2474
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2475
		{
2476
			$temp_array['airline_icao'] = $row['airline_icao'];
2477
			$temp_array['airline_name'] = $row['airline_name'];
2478
			$temp_array['airline_type'] = $row['airline_type'];
2479
2480
			$airline_array[] = $temp_array;
2481
		}
2482
		return $airline_array;
2483
	}
2484
	
2485
	
2486
	/**
2487
	* Gets a list of all airline countries
2488
	*
2489
	* @return Array list of airline countries
2490
	*
2491
	*/
2492
	public function getAllAirlineCountries($filters = array())
2493
	{
2494
		$filter_query = $this->getFilter($filters,true,true);
2495
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2496
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2497
				ORDER BY spotter_output.airline_country ASC";
2498
		
2499
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2500
		$sth = $this->db->prepare($query);
2501
		$sth->execute();
2502
2503
		$airline_array = array();
2504
		$temp_array = array();
2505
		
2506
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2507
		{
2508
			$temp_array['airline_country'] = $row['airline_country'];
2509
2510
			$airline_array[] = $temp_array;
2511
		}
2512
2513
		return $airline_array;
2514
	}
2515
2516
	
2517
	
2518
	/**
2519
	* Gets a list of all departure & arrival names
2520
	*
2521
	* @return Array list of airport names
2522
	*
2523
	*/
2524
	public function getAllAirportNames($filters = array())
2525
	{
2526
		$filter_query = $this->getFilter($filters,true,true);
2527
		$airport_array = array();
2528
		$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
2529
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2530
				ORDER BY spotter_output.departure_airport_city ASC";
2531
		
2532
		//$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";
2533
		$sth = $this->db->prepare($query);
2534
		$sth->execute();
2535
2536
		$temp_array = array();
2537
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2538
		{
2539
			$temp_array['airport_icao'] = $row['airport_icao'];
2540
			$temp_array['airport_name'] = $row['airport_name'];
2541
			$temp_array['airport_city'] = $row['airport_city'];
2542
			$temp_array['airport_country'] = $row['airport_country'];
2543
2544
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2545
		}
2546
2547
		$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
2548
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2549
								ORDER BY spotter_output.arrival_airport_city ASC";
2550
					
2551
		$sth = $this->db->prepare($query);
2552
		$sth->execute();
2553
2554
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2555
			{
2556
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2557
		//	{
2558
				$temp_array['airport_icao'] = $row['airport_icao'];
2559
				$temp_array['airport_name'] = $row['airport_name'];
2560
				$temp_array['airport_city'] = $row['airport_city'];
2561
				$temp_array['airport_country'] = $row['airport_country'];
2562
				
2563
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2564
		//	}
2565
		}
2566
2567
		return $airport_array;
2568
	} 
2569
	
2570
	
2571
	/**
2572
	* Gets a list of all departure & arrival airport countries
2573
	*
2574
	* @return Array list of airport countries
2575
	*
2576
	*/
2577
	public function getAllAirportCountries($filters = array())
2578
	{
2579
		$airport_array = array();
2580
					
2581
		  /*
2582
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2583
								FROM spotter_output
2584
								WHERE spotter_output.departure_airport_country <> '' 
2585
								ORDER BY spotter_output.departure_airport_country ASC";
2586
		*/
2587
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2588
		
2589
		$sth = $this->db->prepare($query);
2590
		$sth->execute();
2591
   
2592
		$temp_array = array();
2593
		
2594
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2595
		{
2596
			$temp_array['airport_country'] = $row['airport_country'];
2597
2598
			$airport_array[$row['airport_country']] = $temp_array;
2599
		}
2600
		$filter_query = $this->getFilter($filters,true,true);
2601
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2602
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2603
								ORDER BY spotter_output.arrival_airport_country ASC";
2604
					
2605
		$sth = $this->db->prepare($query);
2606
		$sth->execute();
2607
		
2608
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2609
		{
2610
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2611
			{
2612
				$temp_array['airport_country'] = $row['airport_country'];
2613
				$airport_array[$row['airport_country']] = $temp_array;
2614
			}
2615
		}
2616
2617
		return $airport_array;
2618
	} 
2619
	
2620
	
2621
	
2622
	
2623
	/**
2624
	* Gets a list of all countries (airline, departure airport & arrival airport)
2625
	*
2626
	* @return Array list of countries
2627
	*
2628
	*/
2629
	public function getAllCountries($filters = array())
2630
	{
2631
		$Connection= new Connection($this->db);
2632
		if ($Connection->tableExists('countries')) {
2633
			$query  = "SELECT countries.name AS airport_country
2634
				FROM countries
2635
				ORDER BY countries.name ASC";
2636
			$sth = $this->db->prepare($query);
2637
			$sth->execute();
2638
   
2639
			$temp_array = array();
2640
			$country_array = array();
2641
		
2642
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2643
			{
2644
				$temp_array['country'] = $row['airport_country'];
2645
				$country_array[$row['airport_country']] = $temp_array;
2646
			}
2647
		} else {
2648
			$filter_query = $this->getFilter($filters,true,true);
2649
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2650
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
2651
								ORDER BY spotter_output.departure_airport_country ASC";
2652
2653
			$sth = $this->db->prepare($query);
2654
			$sth->execute();
2655
   
2656
			$temp_array = array();
2657
			$country_array = array();
2658
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2659
			{
2660
				$temp_array['country'] = $row['airport_country'];
2661
				$country_array[$row['airport_country']] = $temp_array;
2662
			}
2663
2664
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2665
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2666
								ORDER BY spotter_output.arrival_airport_country ASC";
2667
					
2668
		$sth = $this->db->prepare($query);
2669
		$sth->execute();
2670
		
2671
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2672
		{
2673
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
2674
			{
2675
				$temp_array['country'] = $row['airport_country'];
2676
				
2677
				$country_array[$row['country']] = $temp_array;
2678
			}
2679
		}
2680
		
2681
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2682
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2683
								ORDER BY spotter_output.airline_country ASC";
2684
					
2685
		$sth = $this->db->prepare($query);
2686
		$sth->execute();
2687
		
2688
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2689
		{
2690
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
2691
			{
2692
				$temp_array['country'] = $row['airline_country'];
2693
				
2694
				$country_array[$row['country']] = $temp_array;
2695
			}
2696
		}
2697
		}  
2698
		return $country_array;
2699
	} 
2700
	
2701
	
2702
	
2703
	
2704
	/**
2705
	* Gets a list of all idents/callsigns
2706
	*
2707
	* @return Array list of ident/callsign names
2708
	*
2709
	*/
2710
	public function getAllIdents($filters = array())
2711
	{
2712
		$filter_query = $this->getFilter($filters,true,true);
2713
		$query  = "SELECT DISTINCT spotter_output.ident
2714
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
2715
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
2716
2717
		$sth = $this->db->prepare($query);
2718
		$sth->execute();
2719
    
2720
		$ident_array = array();
2721
		$temp_array = array();
2722
		
2723
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2724
		{
2725
			$temp_array['ident'] = $row['ident'];
2726
			$ident_array[] = $temp_array;
2727
		}
2728
2729
		return $ident_array;
2730
	}
2731
2732
	/**
2733
	* Get a list of flights from airport since 7 days
2734
	* @return Array number, icao, name and city of airports
2735
	*/
2736
2737
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
2738
		global $globalTimezone, $globalDBdriver;
2739
		$filter_query = $this->getFilter($filters,true,true);
2740
		if ($globalTimezone != '') {
2741
			date_default_timezone_set($globalTimezone);
2742
			$datetime = new DateTime();
2743
			$offset = $datetime->format('P');
2744
		} else $offset = '+00:00';
2745
		if ($airport_icao == '') {
2746
			if ($globalDBdriver == 'mysql') {
2747
				$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' 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";
2748
			} else {
2749
				$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' 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";
2750
			}
2751
			$sth = $this->db->prepare($query);
2752
			$sth->execute(array(':offset' => $offset));
2753
		} else {
2754
			if ($globalDBdriver == 'mysql') {
2755
				$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";
2756
			} else {
2757
				$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";
2758
			}
2759
			$sth = $this->db->prepare($query);
2760
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2761
		}
2762
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2763
	}
2764
2765
	/**
2766
	* Get a list of flights from airport since 7 days
2767
	* @return Array number, icao, name and city of airports
2768
	*/
2769
2770
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
2771
		global $globalTimezone, $globalDBdriver;
2772
		if ($globalTimezone != '') {
2773
			date_default_timezone_set($globalTimezone);
2774
			$datetime = new DateTime();
2775
			$offset = $datetime->format('P');
2776
		} else $offset = '+00:00';
2777
		if ($airport_icao == '') {
2778
			if ($globalDBdriver == 'mysql') {
2779
				$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 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";
2780
			} else {
2781
				$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 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";
2782
			}
2783
			$sth = $this->db->prepare($query);
2784
			$sth->execute(array(':offset' => $offset));
2785
		} else {
2786
			if ($globalDBdriver == 'mysql') {
2787
				$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";
2788
			} else {
2789
				$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";
2790
			}
2791
			$sth = $this->db->prepare($query);
2792
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2793
		}
2794
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2795
	}
2796
2797
	/**
2798
	* Get a list of flights from detected airport since 7 days
2799
	* @return Array number, icao, name and city of airports
2800
	*/
2801
2802
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '') {
2803
		global $globalTimezone, $globalDBdriver;
2804
		if ($globalTimezone != '') {
2805
			date_default_timezone_set($globalTimezone);
2806
			$datetime = new DateTime();
2807
			$offset = $datetime->format('P');
2808
		} else $offset = '+00:00';
2809
		if ($airport_icao == '') {
2810
			if ($globalDBdriver == 'mysql') {
2811
				$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 
2812
				FROM `spotter_output`, airport 
2813
				WHERE 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' 
2814
				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";
2815
			} else {
2816
				$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 
2817
				FROM spotter_output, airport 
2818
				WHERE 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' 
2819
				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";
2820
			}
2821
			$sth = $this->db->prepare($query);
2822
			$sth->execute(array(':offset' => $offset));
2823
		} else {
2824
			if ($globalDBdriver == 'mysql') {
2825
				$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 
2826
				FROM `spotter_output`, airport 
2827
				WHERE 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 
2828
				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";
2829
			} else {
2830
				$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 
2831
				FROM spotter_output, airport 
2832
				WHERE 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";
2833
			}
2834
			$sth = $this->db->prepare($query);
2835
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2836
		}
2837
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2838
	}
2839
2840
	/**
2841
	* Get a list of flights from detected airport since 7 days
2842
	* @return Array number, icao, name and city of airports
2843
	*/
2844
2845
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
2846
		global $globalTimezone, $globalDBdriver;
2847
		if ($globalTimezone != '') {
2848
			date_default_timezone_set($globalTimezone);
2849
			$datetime = new DateTime();
2850
			$offset = $datetime->format('P');
2851
		} else $offset = '+00:00';
2852
		if ($airport_icao == '') {
2853
			if ($globalDBdriver == 'mysql') {
2854
				$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 
2855
				FROM `spotter_output`, airport 
2856
				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' 
2857
				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";
2858
			} else {
2859
				$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 
2860
				FROM spotter_output, airport 
2861
				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' 
2862
				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";
2863
			}
2864
			$sth = $this->db->prepare($query);
2865
			$sth->execute(array(':offset' => $offset));
2866
		} else {
2867
			if ($globalDBdriver == 'mysql') {
2868
				$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 
2869
				FROM `spotter_output`, airport 
2870
				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 
2871
				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";
2872
			} else {
2873
				$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 
2874
				FROM spotter_output, airport 
2875
				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";
2876
			}
2877
			$sth = $this->db->prepare($query);
2878
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2879
		}
2880
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2881
	}
2882
2883
2884
	/**
2885
	* Get a list of flights to airport since 7 days
2886
	* @return Array number, icao, name and city of airports
2887
	*/
2888
2889
	public function getLast7DaysAirportsArrival($airport_icao = '') {
2890
		global $globalTimezone, $globalDBdriver;
2891
		if ($globalTimezone != '') {
2892
			date_default_timezone_set($globalTimezone);
2893
			$datetime = new DateTime();
2894
			$offset = $datetime->format('P');
2895
		} else $offset = '+00:00';
2896
		if ($airport_icao == '') {
2897
			if ($globalDBdriver == 'mysql') {
2898
				$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` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' 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";
2899
			} else {
2900
				$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 WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' 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";
2901
			}
2902
			$sth = $this->db->prepare($query);
2903
			$sth->execute(array(':offset' => $offset));
2904
		} else {
2905
			if ($globalDBdriver == 'mysql') {
2906
				$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` WHERE 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";
2907
			} else {
2908
				$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 WHERE 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";
2909
			}
2910
			$sth = $this->db->prepare($query);
2911
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2912
		}
2913
		
2914
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2915
	}
2916
2917
2918
	/**
2919
	* Get a list of flights detected to airport since 7 days
2920
	* @return Array number, icao, name and city of airports
2921
	*/
2922
2923
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '') {
2924
		global $globalTimezone, $globalDBdriver;
2925
		if ($globalTimezone != '') {
2926
			date_default_timezone_set($globalTimezone);
2927
			$datetime = new DateTime();
2928
			$offset = $datetime->format('P');
2929
		} else $offset = '+00:00';
2930
		if ($airport_icao == '') {
2931
			if ($globalDBdriver == 'mysql') {
2932
				$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 
2933
				FROM `spotter_output`, airport 
2934
				WHERE airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' 
2935
				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";
2936
			} else {
2937
				$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 
2938
				FROM spotter_output, airport 
2939
				WHERE 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' 
2940
				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";
2941
			}
2942
			$sth = $this->db->prepare($query);
2943
			$sth->execute(array(':offset' => $offset));
2944
		} else {
2945
			if ($globalDBdriver == 'mysql') {
2946
				$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 
2947
				FROM `spotter_output`, airport 
2948
				WHERE 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 
2949
				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";
2950
			} else {
2951
				$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 
2952
				FROM spotter_output, airport 
2953
				WHERE 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 
2954
				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";
2955
			}
2956
			$sth = $this->db->prepare($query);
2957
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2958
		}
2959
		
2960
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2961
	}
2962
2963
2964
	/**
2965
	* Get a list of flights to airport since 7 days
2966
	* @return Array number, icao, name and city of airports
2967
	*/
2968
2969
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
2970
		global $globalTimezone, $globalDBdriver;
2971
		if ($globalTimezone != '') {
2972
			date_default_timezone_set($globalTimezone);
2973
			$datetime = new DateTime();
2974
			$offset = $datetime->format('P');
2975
		} else $offset = '+00:00';
2976
		if ($airport_icao == '') {
2977
			if ($globalDBdriver == 'mysql') {
2978
				$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 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";
2979
			} else {
2980
				$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 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";
2981
			}
2982
			$sth = $this->db->prepare($query);
2983
			$sth->execute(array(':offset' => $offset));
2984
		} else {
2985
			if ($globalDBdriver == 'mysql') {
2986
				$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";
2987
			} else {
2988
				$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";
2989
			}
2990
			$sth = $this->db->prepare($query);
2991
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2992
		}
2993
		
2994
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2995
	}
2996
2997
2998
	/**
2999
	* Get a list of flights detected to airport since 7 days
3000
	* @return Array number, icao, name and city of airports
3001
	*/
3002
3003
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3004
		global $globalTimezone, $globalDBdriver;
3005
		if ($globalTimezone != '') {
3006
			date_default_timezone_set($globalTimezone);
3007
			$datetime = new DateTime();
3008
			$offset = $datetime->format('P');
3009
		} else $offset = '+00:00';
3010
		if ($airport_icao == '') {
3011
			if ($globalDBdriver == 'mysql') {
3012
				$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 
3013
				FROM `spotter_output`, airport 
3014
				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' 
3015
				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";
3016
			} else {
3017
				$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 
3018
				FROM spotter_output, airport 
3019
				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' 
3020
				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";
3021
			}
3022
			$sth = $this->db->prepare($query);
3023
			$sth->execute(array(':offset' => $offset));
3024
		} else {
3025
			if ($globalDBdriver == 'mysql') {
3026
				$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 
3027
				FROM `spotter_output`, airport 
3028
				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 
3029
				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";
3030
			} else {
3031
				$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 
3032
				FROM spotter_output, airport 
3033
				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 
3034
				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";
3035
			}
3036
			$sth = $this->db->prepare($query);
3037
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3038
		}
3039
		
3040
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3041
	}
3042
3043
3044
	/**
3045
	* Gets a list of all dates
3046
	*
3047
	* @return Array list of date names
3048
	*
3049
	*/
3050
	public function getAllDates()
3051
	{
3052
		global $globalTimezone, $globalDBdriver;
3053
		if ($globalTimezone != '') {
3054
			date_default_timezone_set($globalTimezone);
3055
			$datetime = new DateTime();
3056
			$offset = $datetime->format('P');
3057
		} else $offset = '+00:00';
3058
3059
		if ($globalDBdriver == 'mysql') {
3060
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3061
								FROM spotter_output
3062
								WHERE spotter_output.date <> '' 
3063
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3064
		} else {
3065
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3066
								FROM spotter_output
3067
								WHERE spotter_output.date <> '' 
3068
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3069
		}
3070
		
3071
		$sth = $this->db->prepare($query);
3072
		$sth->execute(array(':offset' => $offset));
3073
    
3074
		$date_array = array();
3075
		$temp_array = array();
3076
		
3077
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3078
		{
3079
			$temp_array['date'] = $row['date'];
3080
3081
			$date_array[] = $temp_array;
3082
		}
3083
3084
		return $date_array;
3085
	}
3086
	
3087
	
3088
	
3089
	/**
3090
	* Gets all route combinations
3091
	*
3092
	* @return Array the route list
3093
	*
3094
	*/
3095
	public function getAllRoutes()
3096
	{
3097
		$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 
3098
				FROM spotter_output
3099
				WHERE spotter_output.ident <> '' 
3100
				GROUP BY route
3101
				ORDER BY route ASC";
3102
3103
		$sth = $this->db->prepare($query);
3104
		$sth->execute();
3105
3106
		$routes_array = array();
3107
		$temp_array = array();
3108
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3109
		{
3110
			$temp_array['route'] = $row['route'];
3111
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3112
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3113
3114
			$routes_array[] = $temp_array;
3115
		}
3116
		return $routes_array;
3117
	}
3118
3119
	/**
3120
	* Update ident spotter data
3121
	*
3122
	* @param String $flightaware_id the ID from flightaware
3123
	* @param String $ident the flight ident
3124
	* @return String success or false
3125
	*
3126
	*/	
3127
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3128
	{
3129
		if (!is_numeric(substr($ident, 0, 3)))
3130
		{
3131
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3132
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3133
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3134
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3135
			} else {
3136
				$airline_array = $this->getAllAirlineInfo("NA");
3137
			}
3138
			if (count($airline_array) == 0) {
3139
				$airline_array = $this->getAllAirlineInfo("NA");
3140
			}
3141
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3142
				$airline_array = $this->getAllAirlineInfo("NA");
3143
			}
3144
		} else {
3145
			$airline_array = $this->getAllAirlineInfo("NA");
3146
		}
3147
                $airline_name = $airline_array[0]['name'];
3148
                $airline_icao = $airline_array[0]['icao'];
3149
                $airline_country = $airline_array[0]['country'];
3150
                $airline_type = $airline_array[0]['type'];
3151
3152
3153
		$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';
3154
                $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);
3155
3156
		try {
3157
			$sth = $this->db->prepare($query);
3158
			$sth->execute($query_values);
3159
		} catch (PDOException $e) {
3160
			return "error : ".$e->getMessage();
3161
		}
3162
		
3163
		return "success";
3164
3165
	}
3166
	/**
3167
	* Update latest spotter data
3168
	*
3169
	* @param String $flightaware_id the ID from flightaware
3170
	* @param String $ident the flight ident
3171
	* @param String $arrival_airport_icao the arrival airport
3172
	* @return String success or false
3173
	*
3174
	*/	
3175
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3176
	{
3177
		if ($groundspeed == '') $groundspeed = NULL;
3178
		$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';
3179
                $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);
3180
3181
		try {
3182
			$sth = $this->db->prepare($query);
3183
			$sth->execute($query_values);
3184
		} catch (PDOException $e) {
3185
			return "error : ".$e->getMessage();
3186
		}
3187
		
3188
		return "success";
3189
3190
	}
3191
3192
	/**
3193
	* Adds a new spotter data
3194
	*
3195
	* @param String $flightaware_id the ID from flightaware
3196
	* @param String $ident the flight ident
3197
	* @param String $aircraft_icao the aircraft type
3198
	* @param String $departure_airport_icao the departure airport
3199
	* @param String $arrival_airport_icao the arrival airport
3200
	* @param String $latitude latitude of flight
3201
	* @param String $longitude latitude of flight
3202
	* @param String $waypoints waypoints of flight
3203
	* @param String $altitude altitude of flight
3204
	* @param String $heading heading of flight
3205
	* @param String $groundspeed speed of flight
3206
	* @param String $date date of flight
3207
	* @param String $departure_airport_time departure time of flight
3208
	* @param String $arrival_airport_time arrival time of flight
3209
	* @param String $squawk squawk code of flight
3210
	* @param String $route_stop route stop of flight
3211
	* @param String $highlight highlight or not
3212
	* @param String $ModeS ModesS code of flight
3213
	* @param String $registration registration code of flight
3214
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3215
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3216
	* @param String $verticalrate vertival rate of flight
3217
	* @return String success or false
3218
	*/
3219
	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 = '')
3220
	{
3221
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3222
		
3223
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3224
		$Image = new Image($this->db);
3225
		$Common = new Common();
3226
		
3227
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3228
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3229
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3230
		if (!isset($globalVAM)) $globalVAM = FALSE;
3231
		date_default_timezone_set('UTC');
3232
		
3233
		//getting the registration
3234
		if ($flightaware_id != "" && $registration == '')
3235
		{
3236
			if (!is_string($flightaware_id))
3237
			{
3238
				return false;
3239
			} else {
3240
				if ($ModeS != '') {
3241
					$timeelapsed = microtime(true);
3242
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3243
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3244
				} else {
3245
					$myhex = explode('-',$flightaware_id);
3246
					if (count($myhex) > 0) {
3247
						$timeelapsed = microtime(true);
3248
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3249
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3250
					}
3251
				}
3252
			}
3253
		}
3254
		$fromsource = NULL;
3255
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3256
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3257
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3258
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3259
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3260
		//getting the airline information
3261
		if ($ident != "")
3262
		{
3263
			if (!is_string($ident))
3264
			{
3265
				return false;
3266
			} else {
3267
				if (!is_numeric(substr($ident, 0, 3)))
3268
				{
3269
					$timeelapsed = microtime(true);
3270
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3271
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3272
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3273
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3274
					} else {
3275
						$airline_array = $this->getAllAirlineInfo("NA");
3276
					}
3277
					if (count($airline_array) == 0) {
3278
						$airline_array = $this->getAllAirlineInfo("NA");
3279
					}
3280
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3281
						$airline_array = $this->getAllAirlineInfo("NA");
3282
					}
3283
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3284
3285
				} else {
3286
					$timeelapsed = microtime(true);
3287
					$airline_array = $this->getAllAirlineInfo("NA");
3288
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3289
				}
3290
			}
3291
		} else $airline_array = array();
3292
		
3293
		//getting the aircraft information
3294
		$aircraft_array = array();
3295
		if ($aircraft_icao != "")
3296
		{
3297
			if (!is_string($aircraft_icao))
3298
			{
3299
				return false;
3300
			} else {
3301
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3302
				{
3303
					$timeelapsed = microtime(true);
3304
					$aircraft_array = $this->getAllAircraftInfo("NA");
3305
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3306
				} else {
3307
					$timeelapsed = microtime(true);
3308
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3309
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3310
				}
3311
			}
3312
		} else {
3313
			if ($ModeS != '') {
3314
				$timeelapsed = microtime(true);
3315
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3316
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3317
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3318
				{
3319
					$timeelapsed = microtime(true);
3320
					$aircraft_array = $this->getAllAircraftInfo("NA");
3321
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3322
				} else {
3323
					$timeelapsed = microtime(true);
3324
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3325
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3326
				}
3327
			}
3328
		}
3329
		
3330
		//getting the departure airport information
3331
		$departure_airport_array = array();
3332
		if ($departure_airport_icao != "")
3333
		{
3334
			if (!is_string($departure_airport_icao))
3335
			{
3336
				return false;
3337
			} else {
3338
				$timeelapsed = microtime(true);
3339
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3340
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3341
			}
3342
		}
3343
		
3344
		//getting the arrival airport information
3345
		$arrival_airport_array = array();
3346
		if ($arrival_airport_icao != "")
3347
		{
3348
			if (!is_string($arrival_airport_icao))
3349
			{
3350
				return false;
3351
			} else {
3352
				$timeelapsed = microtime(true);
3353
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3354
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3355
			}
3356
		}
3357
3358
						
3359
		if ($latitude != "")
3360
		{
3361
			if (!is_numeric($latitude))
3362
			{
3363
				return false;
3364
			}
3365
		}
3366
		
3367
		if ($longitude != "")
3368
		{
3369
			if (!is_numeric($longitude))
3370
			{
3371
				return false;
3372
			}
3373
		}
3374
		
3375
		if ($waypoints != "")
3376
		{
3377
			if (!is_string($waypoints))
3378
			{
3379
				return false;
3380
			}
3381
		}
3382
		
3383
		if ($altitude != "")
3384
		{
3385
			if (!is_numeric($altitude))
3386
			{
3387
				return false;
3388
			}
3389
		} else $altitude = 0;
3390
		
3391
		if ($heading != "")
3392
		{
3393
			if (!is_numeric($heading))
3394
			{
3395
				return false;
3396
			}
3397
		}
3398
		
3399
		if ($groundspeed != "")
3400
		{
3401
			if (!is_numeric($groundspeed))
3402
			{
3403
				return false;
3404
			}
3405
		}
3406
3407
    
3408
		if ($date == "")
3409
		{
3410
			$date = date("Y-m-d H:i:s", time());
3411
		}
3412
3413
		//getting the aircraft image
3414
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3415
		{
3416
			$timeelapsed = microtime(true);
3417
			$image_array = $Image->getSpotterImage($registration);
3418
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3419
			if (!isset($image_array[0]['registration']))
3420
			{
3421
				//echo "Add image !!!! \n";
3422
				$Image->addSpotterImage($registration);
3423
			}
3424
			$timeelapsed = microtime(true);
3425
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3426
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3427
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3428
		}
3429
    
3430
		if ($globalIVAO && $aircraft_icao != '')
3431
		{
3432
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3433
            		else $airline_icao = '';
3434
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3435
			if (!isset($image_array[0]['registration']))
3436
			{
3437
				//echo "Add image !!!! \n";
3438
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3439
			}
3440
		}
3441
    
3442
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3443
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3444
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3445
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3446
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3447
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3448
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3449
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3450
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3451
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3452
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3453
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3454
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3455
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3456
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3457
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3458
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3459
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3460
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3461
	
3462
		if (count($airline_array) == 0) 
3463
		{
3464
                        $airline_array = $this->getAllAirlineInfo('NA');
3465
                }
3466
                if (count($aircraft_array) == 0) 
3467
                {
3468
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3469
                }
3470
                if (count($departure_airport_array) == 0) 
3471
                {
3472
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3473
                }
3474
                if (count($arrival_airport_array) == 0) 
3475
                {
3476
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3477
                }
3478
                if ($registration == '') $registration = 'NA';
3479
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3480
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3481
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3482
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3483
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3484
                $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) 
3485
                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)";
3486
3487
                $airline_name = $airline_array[0]['name'];
3488
                $airline_icao = $airline_array[0]['icao'];
3489
                $airline_country = $airline_array[0]['country'];
3490
                $airline_type = $airline_array[0]['type'];
3491
		if ($airline_type == '') {
3492
			$timeelapsed = microtime(true);
3493
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3494
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3495
		}
3496
		if ($airline_type == null) $airline_type = '';
3497
                $aircraft_type = $aircraft_array[0]['type'];
3498
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3499
                $departure_airport_name = $departure_airport_array[0]['name'];
3500
                $departure_airport_city = $departure_airport_array[0]['city'];
3501
                $departure_airport_country = $departure_airport_array[0]['country'];
3502
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3503
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3504
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3505
                $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);
3506
3507
		try {
3508
		        
3509
			$sth = $this->db->prepare($query);
3510
			$sth->execute($query_values);
3511
			$this->db = null;
3512
		} catch (PDOException $e) {
3513
		    return "error : ".$e->getMessage();
3514
		}
3515
		
3516
		return "success";
3517
3518
	}
3519
	
3520
  
3521
	/**
3522
	* Gets the aircraft ident within the last hour
3523
	*
3524
	* @return String the ident
3525
	*
3526
	*/
3527
	public function getIdentFromLastHour($ident)
3528
	{
3529
		global $globalDBdriver, $globalTimezone;
3530
		if ($globalDBdriver == 'mysql') {
3531
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3532
								WHERE spotter_output.ident = :ident 
3533
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3534
								AND spotter_output.date < UTC_TIMESTAMP()";
3535
			$query_data = array(':ident' => $ident);
3536
		} else {
3537
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3538
								WHERE spotter_output.ident = :ident 
3539
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3540
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3541
			$query_data = array(':ident' => $ident);
3542
    		}
3543
		
3544
		$sth = $this->db->prepare($query);
3545
		$sth->execute($query_data);
3546
    		$ident_result='';
3547
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3548
		{
3549
			$ident_result = $row['ident'];
3550
		}
3551
3552
		return $ident_result;
3553
	}
3554
	
3555
	
3556
	/**
3557
	* Gets the aircraft data from the last 20 seconds
3558
	*
3559
	* @return Array the spotter data
3560
	*
3561
	*/
3562
	public function getRealTimeData($q = '')
3563
	{
3564
		global $globalDBdriver;
3565
		$additional_query = '';
3566
		if ($q != "")
3567
		{
3568
			if (!is_string($q))
3569
			{
3570
				return false;
3571
			} else {
3572
				$q_array = explode(" ", $q);
3573
				foreach ($q_array as $q_item){
3574
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3575
					$additional_query .= " AND (";
3576
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3577
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3578
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3579
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3580
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3581
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3582
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3583
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3584
					$additional_query .= ")";
3585
				}
3586
			}
3587
		}
3588
		if ($globalDBdriver == 'mysql') {
3589
			$query  = "SELECT spotter_output.* FROM spotter_output 
3590
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3591
				AND spotter_output.date < UTC_TIMESTAMP()";
3592
		} else {
3593
			$query  = "SELECT spotter_output.* FROM spotter_output 
3594
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3595
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3596
		}
3597
		$spotter_array = $this->getDataFromDB($query, array());
3598
3599
		return $spotter_array;
3600
	}
3601
	
3602
	
3603
	
3604
	 /**
3605
	* Gets all airlines that have flown over
3606
	*
3607
	* @return Array the airline list
3608
	*
3609
	*/
3610
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3611
	{
3612
		global $globalDBdriver;
3613
		$filter_query = $this->getFilter($filters,true,true);
3614
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3615
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA' ";
3616
		if ($olderthanmonths > 0) {
3617
			if ($globalDBdriver == 'mysql') {
3618
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3619
			} else {
3620
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3621
			}
3622
		}
3623
                if ($sincedate != '') {
3624
			if ($globalDBdriver == 'mysql') {
3625
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3626
			} else {
3627
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3628
			}
3629
		}
3630
		$query .= "GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3631
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3632
		
3633
		$sth = $this->db->prepare($query);
3634
		$sth->execute();
3635
 
3636
		$airline_array = array();
3637
		$temp_array = array();
3638
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3639
		{
3640
			$temp_array['airline_name'] = $row['airline_name'];
3641
			$temp_array['airline_icao'] = $row['airline_icao'];
3642
			$temp_array['airline_count'] = $row['airline_count'];
3643
			$temp_array['airline_country'] = $row['airline_country'];
3644
			$airline_array[] = $temp_array;
3645
		}
3646
		return $airline_array;
3647
	}
3648
3649
	 /**
3650
	* Gets all pilots that have flown over
3651
	*
3652
	* @return Array the pilots list
3653
	*
3654
	*/
3655
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3656
	{
3657
		global $globalDBdriver;
3658
		$filter_query = $this->getFilter($filters,true,true);
3659
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count
3660
		 			FROM spotter_output".$filter_query." spotter_output.pilot_id <> '' ";
3661
                if ($olderthanmonths > 0) {
3662
            		if ($globalDBdriver == 'mysql') {
3663
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3664
			} else {
3665
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3666
			}
3667
		}
3668
                if ($sincedate != '') {
3669
            		if ($globalDBdriver == 'mysql') {
3670
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3671
			} else {
3672
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3673
			}
3674
		}
3675
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name ORDER BY pilot_count DESC";
3676
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3677
      
3678
		
3679
		$sth = $this->db->prepare($query);
3680
		$sth->execute();
3681
      
3682
		$airline_array = array();
3683
		$temp_array = array();
3684
        
3685
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3686
		{
3687
			$temp_array['pilot_name'] = $row['pilot_name'];
3688
			$temp_array['pilot_id'] = $row['pilot_id'];
3689
			$temp_array['pilot_count'] = $row['pilot_count'];
3690
			$airline_array[] = $temp_array;
3691
		}
3692
		return $airline_array;
3693
	}
3694
	
3695
		 /**
3696
	* Gets all pilots that have flown over
3697
	*
3698
	* @return Array the pilots list
3699
	*
3700
	*/
3701
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
3702
	{
3703
		global $globalDBdriver;
3704
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count
3705
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
3706
                if ($olderthanmonths > 0) {
3707
            		if ($globalDBdriver == 'mysql') {
3708
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3709
			} else {
3710
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3711
			}
3712
		}
3713
                if ($sincedate != '') {
3714
            		if ($globalDBdriver == 'mysql') {
3715
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3716
			} else {
3717
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3718
			}
3719
		}
3720
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name ORDER BY pilot_count DESC";
3721
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3722
      
3723
		
3724
		$sth = $this->db->prepare($query);
3725
		$sth->execute();
3726
      
3727
		$airline_array = array();
3728
		$temp_array = array();
3729
        
3730
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3731
		{
3732
			$temp_array['pilot_name'] = $row['pilot_name'];
3733
			$temp_array['pilot_id'] = $row['pilot_id'];
3734
			$temp_array['pilot_count'] = $row['pilot_count'];
3735
			$temp_array['airline_icao'] = $row['airline_icao'];
3736
			$airline_array[] = $temp_array;
3737
		}
3738
		return $airline_array;
3739
	}
3740
	
3741
	 /**
3742
	* Gets all owner that have flown over
3743
	*
3744
	* @return Array the pilots list
3745
	*
3746
	*/
3747
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3748
	{
3749
		global $globalDBdriver;
3750
		$filter_query = $this->getFilter($filters,true,true);
3751
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3752
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3753
                if ($olderthanmonths > 0) {
3754
            		if ($globalDBdriver == 'mysql') {
3755
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3756
			} else {
3757
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3758
			}
3759
		}
3760
                if ($sincedate != '') {
3761
            		if ($globalDBdriver == 'mysql') {
3762
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3763
			} else {
3764
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3765
			}
3766
		}
3767
		$query .= "GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
3768
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3769
      
3770
		
3771
		$sth = $this->db->prepare($query);
3772
		$sth->execute();
3773
      
3774
		$airline_array = array();
3775
		$temp_array = array();
3776
        
3777
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3778
		{
3779
			$temp_array['owner_name'] = $row['owner_name'];
3780
			$temp_array['owner_count'] = $row['owner_count'];
3781
			$airline_array[] = $temp_array;
3782
		}
3783
		return $airline_array;
3784
	}
3785
	
3786
	 /**
3787
	* Gets all owner that have flown over
3788
	*
3789
	* @return Array the pilots list
3790
	*
3791
	*/
3792
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3793
	{
3794
		global $globalDBdriver;
3795
		$filter_query = $this->getFilter($filters,true,true);
3796
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3797
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3798
                if ($olderthanmonths > 0) {
3799
            		if ($globalDBdriver == 'mysql') {
3800
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3801
			} else {
3802
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3803
			}
3804
		}
3805
                if ($sincedate != '') {
3806
            		if ($globalDBdriver == 'mysql') {
3807
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3808
			} else {
3809
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3810
			}
3811
		}
3812
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
3813
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3814
      
3815
		
3816
		$sth = $this->db->prepare($query);
3817
		$sth->execute();
3818
      
3819
		$airline_array = array();
3820
		$temp_array = array();
3821
        
3822
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3823
		{
3824
			$temp_array['owner_name'] = $row['owner_name'];
3825
			$temp_array['owner_count'] = $row['owner_count'];
3826
			$temp_array['airline_icao'] = $row['airline_icao'];
3827
			$airline_array[] = $temp_array;
3828
		}
3829
		return $airline_array;
3830
	}
3831
3832
	/**
3833
	* Gets all airlines that have flown over by aircraft
3834
	*
3835
	* @return Array the airline list
3836
	*
3837
	*/
3838
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
3839
	{
3840
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3841
		$filter_query = $this->getFilter($filters,true,true);
3842
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3843
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
3844
                    GROUP BY spotter_output.airline_name
3845
					ORDER BY airline_count DESC";
3846
      
3847
		
3848
		$sth = $this->db->prepare($query);
3849
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3850
      
3851
		$airline_array = array();
3852
		$temp_array = array();
3853
        
3854
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3855
		{
3856
			$temp_array['airline_name'] = $row['airline_name'];
3857
			$temp_array['airline_icao'] = $row['airline_icao'];
3858
			$temp_array['airline_count'] = $row['airline_count'];
3859
			$temp_array['airline_country'] = $row['airline_country'];
3860
3861
			$airline_array[] = $temp_array;
3862
		}
3863
3864
		return $airline_array;
3865
	}
3866
3867
3868
	/**
3869
	* Gets all airline countries that have flown over by aircraft
3870
	*
3871
	* @return Array the airline country list
3872
	*
3873
	*/
3874
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
3875
	{
3876
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3877
		$filter_query = $this->getFilter($filters,true,true);
3878
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3879
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
3880
                    GROUP BY spotter_output.airline_country
3881
					ORDER BY airline_country_count DESC
3882
					LIMIT 10 OFFSET 0";
3883
      
3884
		
3885
		$sth = $this->db->prepare($query);
3886
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3887
      
3888
		$airline_country_array = array();
3889
		$temp_array = array();
3890
        
3891
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3892
		{
3893
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3894
			$temp_array['airline_country'] = $row['airline_country'];
3895
 
3896
			$airline_country_array[] = $temp_array;
3897
		}
3898
		return $airline_country_array;
3899
	}
3900
3901
3902
	
3903
	
3904
	/**
3905
	* Gets all airlines that have flown over by airport
3906
	*
3907
	* @return Array the airline list
3908
	*
3909
	*/
3910
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
3911
	{
3912
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
3913
		$filter_query = $this->getFilter($filters,true,true);
3914
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3915
		 			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 ) 
3916
                    GROUP BY spotter_output.airline_name
3917
					ORDER BY airline_count DESC";
3918
      
3919
		
3920
		$sth = $this->db->prepare($query);
3921
		$sth->execute(array(':airport_icao' => $airport_icao));
3922
      
3923
		$airline_array = array();
3924
		$temp_array = array();
3925
        
3926
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3927
		{
3928
			$temp_array['airline_name'] = $row['airline_name'];
3929
			$temp_array['airline_icao'] = $row['airline_icao'];
3930
			$temp_array['airline_count'] = $row['airline_count'];
3931
			$temp_array['airline_country'] = $row['airline_country'];
3932
3933
			$airline_array[] = $temp_array;
3934
		}
3935
		return $airline_array;
3936
	}
3937
3938
3939
	/**
3940
	* Gets all airline countries that have flown over by airport icao
3941
	*
3942
	* @return Array the airline country list
3943
	*
3944
	*/
3945
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
3946
	{
3947
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
3948
		$filter_query = $this->getFilter($filters,true,true);
3949
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3950
		 			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 )
3951
					GROUP BY spotter_output.airline_country
3952
					ORDER BY airline_country_count DESC
3953
					LIMIT 10 OFFSET 0";
3954
3955
		
3956
		$sth = $this->db->prepare($query);
3957
		$sth->execute(array(':airport_icao' => $airport_icao));
3958
3959
		$airline_country_array = array();
3960
		$temp_array = array();
3961
        
3962
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3963
		{
3964
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3965
			$temp_array['airline_country'] = $row['airline_country'];
3966
 
3967
			$airline_country_array[] = $temp_array;
3968
		}
3969
		return $airline_country_array;
3970
	}
3971
3972
3973
	/**
3974
	* Gets all airlines that have flown over by aircraft manufacturer
3975
	*
3976
	* @return Array the airline list
3977
	*
3978
	*/
3979
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
3980
	{
3981
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
3982
		$filter_query = $this->getFilter($filters,true,true);
3983
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3984
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
3985
					GROUP BY spotter_output.airline_name
3986
					ORDER BY airline_count DESC";
3987
 
3988
		$sth = $this->db->prepare($query);
3989
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
3990
 
3991
		$airline_array = array();
3992
		$temp_array = array();
3993
        
3994
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3995
		{
3996
			$temp_array['airline_name'] = $row['airline_name'];
3997
			$temp_array['airline_icao'] = $row['airline_icao'];
3998
			$temp_array['airline_count'] = $row['airline_count'];
3999
			$temp_array['airline_country'] = $row['airline_country'];
4000
4001
			$airline_array[] = $temp_array;
4002
		}
4003
		return $airline_array;
4004
	}
4005
4006
4007
4008
	/**
4009
	* Gets all airline countries that have flown over by aircraft manufacturer
4010
	*
4011
	* @return Array the airline country list
4012
	*
4013
	*/
4014
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4015
	{
4016
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4017
		$filter_query = $this->getFilter($filters,true,true);
4018
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4019
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4020
					GROUP BY spotter_output.airline_country
4021
					ORDER BY airline_country_count DESC
4022
					LIMIT 10 OFFSET 0";
4023
      
4024
		
4025
		$sth = $this->db->prepare($query);
4026
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4027
4028
		$airline_country_array = array();
4029
		$temp_array = array();
4030
        
4031
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4032
		{
4033
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4034
			$temp_array['airline_country'] = $row['airline_country'];
4035
			$airline_country_array[] = $temp_array;
4036
		}
4037
		return $airline_country_array;
4038
	}
4039
4040
4041
	/**
4042
	* Gets all airlines that have flown over by date
4043
	*
4044
	* @return Array the airline list
4045
	*
4046
	*/
4047
	public function countAllAirlinesByDate($date,$filters = array())
4048
	{
4049
		global $globalTimezone, $globalDBdriver;
4050
		$filter_query = $this->getFilter($filters,true,true);
4051
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4052
		if ($globalTimezone != '') {
4053
			date_default_timezone_set($globalTimezone);
4054
			$datetime = new DateTime($date);
4055
			$offset = $datetime->format('P');
4056
		} else $offset = '+00:00';
4057
4058
		if ($globalDBdriver == 'mysql') {
4059
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4060
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4061
					GROUP BY spotter_output.airline_name
4062
					ORDER BY airline_count DESC";
4063
		} else {
4064
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4065
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4066
					GROUP BY spotter_output.airline_name
4067
					ORDER BY airline_count DESC";
4068
		}
4069
		
4070
		$sth = $this->db->prepare($query);
4071
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4072
4073
		$airline_array = array();
4074
		$temp_array = array();
4075
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4076
		{
4077
			$temp_array['airline_name'] = $row['airline_name'];
4078
			$temp_array['airline_icao'] = $row['airline_icao'];
4079
			$temp_array['airline_count'] = $row['airline_count'];
4080
			$temp_array['airline_country'] = $row['airline_country'];
4081
 
4082
			$airline_array[] = $temp_array;
4083
		}
4084
4085
		return $airline_array;
4086
	}	
4087
	
4088
	
4089
	/**
4090
	* Gets all airline countries that have flown over by date
4091
	*
4092
	* @return Array the airline country list
4093
	*
4094
	*/
4095
	public function countAllAirlineCountriesByDate($date,$filters = array())
4096
	{
4097
		global $globalTimezone, $globalDBdriver;
4098
		$filter_query = $this->getFilter($filters,true,true);
4099
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4100
		if ($globalTimezone != '') {
4101
			date_default_timezone_set($globalTimezone);
4102
			$datetime = new DateTime($date);
4103
			$offset = $datetime->format('P');
4104
		} else $offset = '+00:00';
4105
		
4106
		if ($globalDBdriver == 'mysql') {
4107
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4108
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4109
					GROUP BY spotter_output.airline_country
4110
					ORDER BY airline_country_count DESC
4111
					LIMIT 10 OFFSET 0";
4112
		} else {
4113
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4114
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4115
					GROUP BY spotter_output.airline_country
4116
					ORDER BY airline_country_count DESC
4117
					LIMIT 10 OFFSET 0";
4118
		}
4119
4120
		$sth = $this->db->prepare($query);
4121
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4122
 
4123
		$airline_country_array = array();
4124
		$temp_array = array();
4125
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4126
		{
4127
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4128
			$temp_array['airline_country'] = $row['airline_country'];
4129
4130
			$airline_country_array[] = $temp_array;
4131
		}
4132
		return $airline_country_array;
4133
	}
4134
4135
4136
	/**
4137
	* Gets all airlines that have flown over by ident/callsign
4138
	*
4139
	* @return Array the airline list
4140
	*
4141
	*/
4142
	public function countAllAirlinesByIdent($ident,$filters = array())
4143
	{
4144
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4145
		$filter_query = $this->getFilter($filters,true,true);
4146
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4147
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4148
				GROUP BY spotter_output.airline_name
4149
				ORDER BY airline_count DESC";
4150
      
4151
		
4152
		$sth = $this->db->prepare($query);
4153
		$sth->execute(array(':ident' => $ident));
4154
      
4155
		$airline_array = array();
4156
		$temp_array = array();
4157
        
4158
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4159
		{
4160
			$temp_array['airline_name'] = $row['airline_name'];
4161
			$temp_array['airline_icao'] = $row['airline_icao'];
4162
			$temp_array['airline_count'] = $row['airline_count'];
4163
			$temp_array['airline_country'] = $row['airline_country'];
4164
4165
			$airline_array[] = $temp_array;
4166
		}
4167
		return $airline_array;
4168
	}
4169
4170
	/**
4171
	* Gets all airlines that have flown over by route
4172
	*
4173
	* @return Array the airline list
4174
	*
4175
	*/
4176
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4177
	{
4178
		$filter_query = $this->getFilter($filters,true,true);
4179
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4180
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4181
4182
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4183
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4184
					GROUP BY spotter_output.airline_name
4185
					ORDER BY airline_count DESC";
4186
      
4187
		
4188
		$sth = $this->db->prepare($query);
4189
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4190
      
4191
		$airline_array = array();
4192
		$temp_array = array();
4193
        
4194
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4195
		{
4196
			$temp_array['airline_name'] = $row['airline_name'];
4197
			$temp_array['airline_icao'] = $row['airline_icao'];
4198
			$temp_array['airline_count'] = $row['airline_count'];
4199
			$temp_array['airline_country'] = $row['airline_country'];
4200
4201
			$airline_array[] = $temp_array;
4202
		}
4203
		return $airline_array;
4204
	}
4205
4206
	/**
4207
	* Gets all airline countries that have flown over by route
4208
	*
4209
	* @return Array the airline country list
4210
	*
4211
	*/
4212
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4213
	{
4214
		$filter_query = $this->getFilter($filters,true,true);
4215
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4216
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4217
      
4218
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4219
		 		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) 
4220
				GROUP BY spotter_output.airline_country
4221
				ORDER BY airline_country_count DESC
4222
				LIMIT 10 OFFSET 0";
4223
      
4224
		
4225
		$sth = $this->db->prepare($query);
4226
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4227
      
4228
		$airline_country_array = array();
4229
		$temp_array = array();
4230
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4231
		{
4232
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4233
			$temp_array['airline_country'] = $row['airline_country'];
4234
4235
			$airline_country_array[] = $temp_array;
4236
		}
4237
4238
		return $airline_country_array;
4239
	}
4240
4241
4242
	/**
4243
	* Gets all airlines that have flown over by country
4244
	*
4245
	* @return Array the airline list
4246
	*
4247
	*/
4248
	public function countAllAirlinesByCountry($country,$filters = array())
4249
	{
4250
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4251
		$filter_query = $this->getFilter($filters,true,true);
4252
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4253
		 		FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4254
				GROUP BY spotter_output.airline_name
4255
				ORDER BY airline_count DESC";
4256
      
4257
		
4258
		$sth = $this->db->prepare($query);
4259
		$sth->execute(array(':country' => $country));
4260
4261
		$airline_array = array();
4262
		$temp_array = array();
4263
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4264
		{
4265
			$temp_array['airline_name'] = $row['airline_name'];
4266
			$temp_array['airline_icao'] = $row['airline_icao'];
4267
			$temp_array['airline_count'] = $row['airline_count'];
4268
			$temp_array['airline_country'] = $row['airline_country'];
4269
 
4270
			$airline_array[] = $temp_array;
4271
		}
4272
		return $airline_array;
4273
	}
4274
4275
4276
	/**
4277
	* Gets all airline countries that have flown over by country
4278
	*
4279
	* @return Array the airline country list
4280
	*
4281
	*/
4282
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4283
	{
4284
		$filter_query = $this->getFilter($filters,true,true);
4285
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4286
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4287
		 		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 
4288
				GROUP BY spotter_output.airline_country
4289
				ORDER BY airline_country_count DESC
4290
				LIMIT 10 OFFSET 0";
4291
      
4292
		
4293
		$sth = $this->db->prepare($query);
4294
		$sth->execute(array(':country' => $country));
4295
4296
		$airline_country_array = array();
4297
		$temp_array = array();
4298
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4299
		{
4300
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4301
			$temp_array['airline_country'] = $row['airline_country'];
4302
4303
			$airline_country_array[] = $temp_array;
4304
		}
4305
		return $airline_country_array;
4306
	}
4307
4308
4309
	/**
4310
	* Gets all airlines countries
4311
	*
4312
	* @return Array the airline country list
4313
	*
4314
	*/
4315
	public function countAllAirlineCountries($limit = true, $filters = array())
4316
	{
4317
		$filter_query = $this->getFilter($filters,true,true);
4318
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4319
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA' 
4320
					GROUP BY spotter_output.airline_country
4321
					ORDER BY airline_country_count DESC";
4322
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4323
      
4324
		$sth = $this->db->prepare($query);
4325
		$sth->execute();
4326
4327
		$airline_array = array();
4328
		$temp_array = array();
4329
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4330
		{
4331
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4332
			$temp_array['airline_country'] = $row['airline_country'];
4333
4334
			$airline_array[] = $temp_array;
4335
		}
4336
		return $airline_array;
4337
	}
4338
4339
	/**
4340
	* Gets all number of flight over countries
4341
	*
4342
	* @return Array the airline country list
4343
	*
4344
	*/
4345
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '')
4346
	{
4347
		global $globalDBdriver;
4348
		//$filter_query = $this->getFilter($filters,true,true);
4349
		$Connection= new Connection($this->db);
4350
		if (!$Connection->tableExists('countries')) return array();
4351
		/*
4352
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4353
					FROM countries c, spotter_output s
4354
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4355
		*/
4356
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4357
					FROM countries c, spotter_live s
4358
					WHERE c.iso2 = s.over_country ";
4359
                if ($olderthanmonths > 0) {
4360
			if ($globalDBdriver == 'mysql') {
4361
				$query .= 'AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4362
			} else {
4363
				$query .= "AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4364
			}
4365
		}
4366
                if ($sincedate != '') {
4367
            		if ($globalDBdriver == 'mysql') {
4368
				$query .= "AND spotter_live.date > '".$sincedate."' ";
4369
			} else {
4370
				$query .= "AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
4371
			}
4372
		}
4373
4374
		$query .= "GROUP BY c.name ORDER BY nb DESC";
4375
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4376
      
4377
		
4378
		$sth = $this->db->prepare($query);
4379
		$sth->execute();
4380
 
4381
		$flight_array = array();
4382
		$temp_array = array();
4383
        
4384
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4385
		{
4386
			$temp_array['flight_count'] = $row['nb'];
4387
			$temp_array['flight_country'] = $row['name'];
4388
			$temp_array['flight_country_iso3'] = $row['iso3'];
4389
			$temp_array['flight_country_iso2'] = $row['iso2'];
4390
			$flight_array[] = $temp_array;
4391
		}
4392
		return $flight_array;
4393
	}
4394
	
4395
	
4396
	/**
4397
	* Gets all aircraft types that have flown over
4398
	*
4399
	* @return Array the aircraft list
4400
	*
4401
	*/
4402
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4403
	{
4404
		global $globalDBdriver;
4405
		$filter_query = $this->getFilter($filters,true,true);
4406
4407
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4408
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
4409
		if ($olderthanmonths > 0) {
4410
			if ($globalDBdriver == 'mysql') {
4411
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4412
			} else {
4413
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4414
			}
4415
		}
4416
		if ($sincedate != '') {
4417
			if ($globalDBdriver == 'mysql') {
4418
				$query .= " AND spotter_output.date > '".$sincedate."'";
4419
			} else {
4420
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4421
			}
4422
		}
4423
4424
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4425
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4426
 
4427
		$sth = $this->db->prepare($query);
4428
		$sth->execute();
4429
4430
		$aircraft_array = array();
4431
		$temp_array = array();
4432
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4433
		{
4434
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4435
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4436
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4437
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4438
			$aircraft_array[] = $temp_array;
4439
		}
4440
		return $aircraft_array;
4441
	}
4442
4443
	/**
4444
	* Gets all aircraft types that have flown over by airline
4445
	*
4446
	* @return Array the aircraft list
4447
	*
4448
	*/
4449
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4450
	{
4451
		global $globalDBdriver;
4452
		$filter_query = $this->getFilter($filters,true,true);
4453
		$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 
4454
		    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' ";
4455
		if ($olderthanmonths > 0) {
4456
			if ($globalDBdriver == 'mysql') {
4457
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4458
			} else {
4459
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4460
			}
4461
		}
4462
		if ($sincedate != '') {
4463
			if ($globalDBdriver == 'mysql') {
4464
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4465
			} else {
4466
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4467
			}
4468
		}
4469
4470
		$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";
4471
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4472
 
4473
		$sth = $this->db->prepare($query);
4474
		$sth->execute();
4475
4476
		$aircraft_array = array();
4477
		$temp_array = array();
4478
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4479
		{
4480
			$temp_array['airline_icao'] = $row['airline_icao'];
4481
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4482
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4483
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4484
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4485
			$aircraft_array[] = $temp_array;
4486
		}
4487
		return $aircraft_array;
4488
	}
4489
4490
4491
	/**
4492
	* Gets all aircraft registration that have flown over by aircaft icao
4493
	*
4494
	* @return Array the aircraft list
4495
	*
4496
	*/
4497
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
4498
	{
4499
		$Image = new Image($this->db);
4500
		$filter_query = $this->getFilter($filters,true,true);
4501
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4502
4503
		$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  
4504
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
4505
				GROUP BY spotter_output.registration 
4506
				ORDER BY registration_count DESC";
4507
4508
		$sth = $this->db->prepare($query);
4509
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4510
4511
		$aircraft_array = array();
4512
		$temp_array = array();
4513
        
4514
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4515
		{
4516
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4517
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4518
			$temp_array['registration'] = $row['registration'];
4519
			$temp_array['airline_name'] = $row['airline_name'];
4520
			$temp_array['image_thumbnail'] = "";
4521
			if($row['registration'] != "")
4522
			{
4523
				$image_array = $Image->getSpotterImage($row['registration']);
4524
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4525
			}
4526
			$temp_array['registration_count'] = $row['registration_count'];
4527
4528
			$aircraft_array[] = $temp_array;
4529
		}
4530
		return $aircraft_array;
4531
	}
4532
4533
4534
	/**
4535
	* Gets all aircraft types that have flown over by airline icao
4536
	*
4537
	* @return Array the aircraft list
4538
	*
4539
	*/
4540
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
4541
	{
4542
		$filter_query = $this->getFilter($filters,true,true);
4543
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4544
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4545
				FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
4546
				GROUP BY spotter_output.aircraft_name 
4547
				ORDER BY aircraft_icao_count DESC";
4548
4549
		$sth = $this->db->prepare($query);
4550
		$sth->execute(array(':airline_icao' => $airline_icao));
4551
4552
		$aircraft_array = array();
4553
		$temp_array = array();
4554
4555
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4556
		{
4557
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4558
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4559
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4560
4561
			$aircraft_array[] = $temp_array;
4562
		}
4563
		return $aircraft_array;
4564
	}
4565
4566
4567
	/**
4568
	* Gets all aircraft registration that have flown over by airline icao
4569
	*
4570
	* @return Array the aircraft list
4571
	*
4572
	*/
4573
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
4574
	{
4575
		$filter_query = $this->getFilter($filters,true,true);
4576
		$Image = new Image($this->db);
4577
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4578
4579
		$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   
4580
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
4581
				GROUP BY spotter_output.registration 
4582
				ORDER BY registration_count DESC";
4583
4584
		$sth = $this->db->prepare($query);
4585
		$sth->execute(array(':airline_icao' => $airline_icao));
4586
4587
		$aircraft_array = array();
4588
		$temp_array = array();
4589
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4590
		{
4591
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4592
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4593
			$temp_array['registration'] = $row['registration'];
4594
			$temp_array['airline_name'] = $row['airline_name'];
4595
			$temp_array['image_thumbnail'] = "";
4596
			if($row['registration'] != "")
4597
			{
4598
				$image_array = $Image->getSpotterImage($row['registration']);
4599
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4600
			}
4601
			$temp_array['registration_count'] = $row['registration_count'];
4602
4603
			$aircraft_array[] = $temp_array;
4604
		}
4605
		return $aircraft_array;
4606
	}
4607
4608
4609
	/**
4610
	* Gets all aircraft manufacturer that have flown over by airline icao
4611
	*
4612
	* @return Array the aircraft list
4613
	*
4614
	*/
4615
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
4616
	{
4617
		$filter_query = $this->getFilter($filters,true,true);
4618
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4619
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4620
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
4621
				GROUP BY spotter_output.aircraft_manufacturer 
4622
				ORDER BY aircraft_manufacturer_count DESC";
4623
4624
		$sth = $this->db->prepare($query);
4625
		$sth->execute(array(':airline_icao' => $airline_icao));
4626
4627
		$aircraft_array = array();
4628
		$temp_array = array();
4629
4630
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4631
		{
4632
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4633
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4634
4635
			$aircraft_array[] = $temp_array;
4636
		}
4637
		return $aircraft_array;
4638
	}
4639
4640
4641
	/**
4642
	* Gets all aircraft types that have flown over by airline icao
4643
	*
4644
	* @return Array the aircraft list
4645
	*
4646
	*/
4647
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
4648
	{
4649
		$filter_query = $this->getFilter($filters,true,true);
4650
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4651
4652
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4653
				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) 
4654
				GROUP BY spotter_output.aircraft_name 
4655
				ORDER BY aircraft_icao_count DESC";
4656
 
4657
		$sth = $this->db->prepare($query);
4658
		$sth->execute(array(':airport_icao' => $airport_icao));
4659
4660
		$aircraft_array = array();
4661
		$temp_array = array();
4662
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4663
		{
4664
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4665
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4666
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4667
4668
			$aircraft_array[] = $temp_array;
4669
		}
4670
		return $aircraft_array;
4671
	}
4672
4673
4674
	/**
4675
	* Gets all aircraft registration that have flown over by airport icao
4676
	*
4677
	* @return Array the aircraft list
4678
	*
4679
	*/
4680
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
4681
	{
4682
		$filter_query = $this->getFilter($filters,true,true);
4683
		$Image = new Image($this->db);
4684
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4685
4686
		$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  
4687
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
4688
                    GROUP BY spotter_output.registration 
4689
					ORDER BY registration_count DESC";
4690
4691
		
4692
		$sth = $this->db->prepare($query);
4693
		$sth->execute(array(':airport_icao' => $airport_icao));
4694
4695
		$aircraft_array = array();
4696
		$temp_array = array();
4697
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4698
		{
4699
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4700
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4701
			$temp_array['registration'] = $row['registration'];
4702
			$temp_array['airline_name'] = $row['airline_name'];
4703
			$temp_array['image_thumbnail'] = "";
4704
			if($row['registration'] != "")
4705
			{
4706
				$image_array = $Image->getSpotterImage($row['registration']);
4707
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4708
			}
4709
			$temp_array['registration_count'] = $row['registration_count'];
4710
			$aircraft_array[] = $temp_array;
4711
		}
4712
		return $aircraft_array;
4713
	}
4714
	
4715
	
4716
	/**
4717
	* Gets all aircraft manufacturer that have flown over by airport icao
4718
	*
4719
	* @return Array the aircraft list
4720
	*
4721
	*/
4722
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
4723
	{
4724
		$filter_query = $this->getFilter($filters,true,true);
4725
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4726
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4727
                    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)  
4728
                    GROUP BY spotter_output.aircraft_manufacturer 
4729
					ORDER BY aircraft_manufacturer_count DESC";
4730
4731
		
4732
		$sth = $this->db->prepare($query);
4733
		$sth->execute(array(':airport_icao' => $airport_icao));
4734
4735
		$aircraft_array = array();
4736
		$temp_array = array();
4737
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4738
		{
4739
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4740
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4741
			$aircraft_array[] = $temp_array;
4742
		}
4743
		return $aircraft_array;
4744
	}
4745
4746
	/**
4747
	* Gets all aircraft types that have flown over by aircraft manufacturer
4748
	*
4749
	* @return Array the aircraft list
4750
	*
4751
	*/
4752
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
4753
	{
4754
		$filter_query = $this->getFilter($filters,true,true);
4755
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4756
4757
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4758
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
4759
                    GROUP BY spotter_output.aircraft_name 
4760
					ORDER BY aircraft_icao_count DESC";
4761
4762
		$sth = $this->db->prepare($query);
4763
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4764
		$aircraft_array = array();
4765
		$temp_array = array();
4766
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4767
		{
4768
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4769
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4770
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4771
			$aircraft_array[] = $temp_array;
4772
		}
4773
		return $aircraft_array;
4774
	}
4775
4776
4777
	/**
4778
	* Gets all aircraft registration that have flown over by aircaft manufacturer
4779
	*
4780
	* @return Array the aircraft list
4781
	*
4782
	*/
4783
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
4784
	{
4785
		$filter_query = $this->getFilter($filters,true,true);
4786
		$Image = new Image($this->db);
4787
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4788
4789
		$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   
4790
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
4791
                    GROUP BY spotter_output.registration 
4792
					ORDER BY registration_count DESC";
4793
4794
		
4795
		$sth = $this->db->prepare($query);
4796
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4797
		$aircraft_array = array();
4798
		$temp_array = array();
4799
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4800
		{
4801
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4802
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4803
			$temp_array['registration'] = $row['registration'];
4804
			$temp_array['airline_name'] = $row['airline_name'];
4805
			$temp_array['image_thumbnail'] = "";
4806
			if($row['registration'] != "")
4807
			{
4808
				$image_array = $Image->getSpotterImage($row['registration']);
4809
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4810
			}
4811
			$temp_array['registration_count'] = $row['registration_count'];
4812
			$aircraft_array[] = $temp_array;
4813
		}
4814
		return $aircraft_array;
4815
	}
4816
4817
	/**
4818
	* Gets all aircraft types that have flown over by date
4819
	*
4820
	* @return Array the aircraft list
4821
	*
4822
	*/
4823
	public function countAllAircraftTypesByDate($date,$filters = array())
4824
	{
4825
		global $globalTimezone, $globalDBdriver;
4826
		$filter_query = $this->getFilter($filters,true,true);
4827
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4828
		if ($globalTimezone != '') {
4829
			date_default_timezone_set($globalTimezone);
4830
			$datetime = new DateTime($date);
4831
			$offset = $datetime->format('P');
4832
		} else $offset = '+00:00';
4833
4834
		if ($globalDBdriver == 'mysql') {
4835
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4836
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
4837
					GROUP BY spotter_output.aircraft_name 
4838
					ORDER BY aircraft_icao_count DESC";
4839
		} else {
4840
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4841
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
4842
					GROUP BY spotter_output.aircraft_name 
4843
					ORDER BY aircraft_icao_count DESC";
4844
		}
4845
		
4846
		$sth = $this->db->prepare($query);
4847
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4848
4849
		$aircraft_array = array();
4850
		$temp_array = array();
4851
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4852
		{
4853
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4854
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4855
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4856
4857
			$aircraft_array[] = $temp_array;
4858
		}
4859
		return $aircraft_array;
4860
	}
4861
4862
4863
	/**
4864
	* Gets all aircraft registration that have flown over by date
4865
	*
4866
	* @return Array the aircraft list
4867
	*
4868
	*/
4869
	public function countAllAircraftRegistrationByDate($date,$filters = array())
4870
	{
4871
		global $globalTimezone, $globalDBdriver;
4872
		$filter_query = $this->getFilter($filters,true,true);
4873
		$Image = new Image($this->db);
4874
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4875
		if ($globalTimezone != '') {
4876
			date_default_timezone_set($globalTimezone);
4877
			$datetime = new DateTime($date);
4878
			$offset = $datetime->format('P');
4879
		} else $offset = '+00:00';
4880
4881
		if ($globalDBdriver == 'mysql') {
4882
			$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    
4883
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4884
					GROUP BY spotter_output.registration 
4885
					ORDER BY registration_count DESC";
4886
		} else {
4887
			$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    
4888
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4889
					GROUP BY spotter_output.registration 
4890
					ORDER BY registration_count DESC";
4891
		}
4892
		
4893
		$sth = $this->db->prepare($query);
4894
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4895
4896
		$aircraft_array = array();
4897
		$temp_array = array();
4898
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4899
		{
4900
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4901
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4902
			$temp_array['registration'] = $row['registration'];
4903
			$temp_array['airline_name'] = $row['airline_name'];
4904
			$temp_array['image_thumbnail'] = "";
4905
			if($row['registration'] != "")
4906
			{
4907
				$image_array = $Image->getSpotterImage($row['registration']);
4908
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4909
			}
4910
			$temp_array['registration_count'] = $row['registration_count'];
4911
 
4912
			$aircraft_array[] = $temp_array;
4913
		}
4914
		return $aircraft_array;
4915
	}
4916
4917
4918
	/**
4919
	* Gets all aircraft manufacturer that have flown over by date
4920
	*
4921
	* @return Array the aircraft manufacturer list
4922
	*
4923
	*/
4924
	public function countAllAircraftManufacturerByDate($date,$filters = array())
4925
	{
4926
		global $globalTimezone, $globalDBdriver;
4927
		$filter_query = $this->getFilter($filters,true,true);
4928
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4929
		if ($globalTimezone != '') {
4930
			date_default_timezone_set($globalTimezone);
4931
			$datetime = new DateTime($date);
4932
			$offset = $datetime->format('P');
4933
		} else $offset = '+00:00';
4934
4935
		if ($globalDBdriver == 'mysql') {
4936
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4937
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4938
				GROUP BY spotter_output.aircraft_manufacturer 
4939
				ORDER BY aircraft_manufacturer_count DESC";
4940
		} else {
4941
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4942
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4943
				GROUP BY spotter_output.aircraft_manufacturer 
4944
				ORDER BY aircraft_manufacturer_count DESC";
4945
		}
4946
		
4947
		$sth = $this->db->prepare($query);
4948
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4949
4950
		$aircraft_array = array();
4951
		$temp_array = array();
4952
4953
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4954
		{
4955
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4956
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4957
4958
			$aircraft_array[] = $temp_array;
4959
		}
4960
		return $aircraft_array;
4961
	}
4962
4963
4964
	/**
4965
	* Gets all aircraft types that have flown over by ident/callsign
4966
	*
4967
	* @return Array the aircraft list
4968
	*
4969
	*/
4970
	public function countAllAircraftTypesByIdent($ident,$filters = array())
4971
	{
4972
		$filter_query = $this->getFilter($filters,true,true);
4973
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4974
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4975
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
4976
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
4977
				ORDER BY aircraft_icao_count DESC";
4978
4979
		$sth = $this->db->prepare($query);
4980
		$sth->execute(array(':ident' => $ident));
4981
      
4982
		$aircraft_array = array();
4983
		$temp_array = array();
4984
4985
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4986
		{
4987
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4988
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4989
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4990
4991
			$aircraft_array[] = $temp_array;
4992
		}
4993
		return $aircraft_array;
4994
	}
4995
4996
4997
	/**
4998
	* Gets all aircraft registration that have flown over by ident/callsign
4999
	*
5000
	* @return Array the aircraft list
5001
	*
5002
	*/
5003
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5004
	{
5005
		$filter_query = $this->getFilter($filters,true,true);
5006
		$Image = new Image($this->db);
5007
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5008
5009
		$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  
5010
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5011
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5012
		    ORDER BY registration_count DESC";
5013
5014
		
5015
		$sth = $this->db->prepare($query);
5016
		$sth->execute(array(':ident' => $ident));
5017
      
5018
		$aircraft_array = array();
5019
		$temp_array = array();
5020
        
5021
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5022
		{
5023
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5024
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5025
			$temp_array['registration'] = $row['registration'];
5026
			$temp_array['airline_name'] = $row['airline_name'];
5027
			$temp_array['image_thumbnail'] = "";
5028
			if($row['registration'] != "")
5029
			{
5030
				$image_array = $Image->getSpotterImage($row['registration']);
5031
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5032
				else $temp_array['image_thumbnail'] = '';
5033
			}
5034
			$temp_array['registration_count'] = $row['registration_count'];
5035
			$aircraft_array[] = $temp_array;
5036
		}
5037
		return $aircraft_array;
5038
	}
5039
5040
5041
	/**
5042
	* Gets all aircraft manufacturer that have flown over by ident/callsign
5043
	*
5044
	* @return Array the aircraft manufacturer list
5045
	*
5046
	*/
5047
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
5048
	{
5049
		$filter_query = $this->getFilter($filters,true,true);
5050
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5051
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5052
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
5053
                    GROUP BY spotter_output.aircraft_manufacturer 
5054
					ORDER BY aircraft_manufacturer_count DESC";
5055
5056
		
5057
		$sth = $this->db->prepare($query);
5058
		$sth->execute(array(':ident' => $ident));
5059
		$aircraft_array = array();
5060
		$temp_array = array();
5061
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5062
		{
5063
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5064
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5065
			$aircraft_array[] = $temp_array;
5066
		}
5067
		return $aircraft_array;
5068
	}
5069
5070
5071
	/**
5072
	* Gets all aircraft types that have flown over by route
5073
	*
5074
	* @return Array the aircraft list
5075
	*
5076
	*/
5077
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5078
	{
5079
		$filter_query = $this->getFilter($filters,true,true);
5080
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5081
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5082
		
5083
5084
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5085
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
5086
                    GROUP BY spotter_output.aircraft_name 
5087
					ORDER BY aircraft_icao_count DESC";
5088
 
5089
		
5090
		$sth = $this->db->prepare($query);
5091
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5092
		$aircraft_array = array();
5093
		$temp_array = array();
5094
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5095
		{
5096
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5097
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5098
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5099
			$aircraft_array[] = $temp_array;
5100
		}
5101
		return $aircraft_array;
5102
	}
5103
5104
	/**
5105
	* Gets all aircraft registration that have flown over by route
5106
	*
5107
	* @return Array the aircraft list
5108
	*
5109
	*/
5110
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5111
	{
5112
		$filter_query = $this->getFilter($filters,true,true);
5113
		$Image = new Image($this->db);
5114
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5115
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5116
5117
		$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   
5118
                    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)   
5119
                    GROUP BY spotter_output.registration 
5120
					ORDER BY registration_count DESC";
5121
5122
		
5123
		$sth = $this->db->prepare($query);
5124
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5125
      
5126
		$aircraft_array = array();
5127
		$temp_array = array();
5128
        
5129
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5130
		{
5131
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5132
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5133
			$temp_array['registration'] = $row['registration'];
5134
			$temp_array['airline_name'] = $row['airline_name'];
5135
			$temp_array['image_thumbnail'] = "";
5136
			if($row['registration'] != "")
5137
			{
5138
				$image_array = $Image->getSpotterImage($row['registration']);
5139
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5140
			}
5141
			$temp_array['registration_count'] = $row['registration_count'];
5142
          
5143
			$aircraft_array[] = $temp_array;
5144
		}
5145
5146
		return $aircraft_array;
5147
	}
5148
	
5149
	
5150
	/**
5151
	* Gets all aircraft manufacturer that have flown over by route
5152
	*
5153
	* @return Array the aircraft manufacturer list
5154
	*
5155
	*/
5156
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5157
	{
5158
		$filter_query = $this->getFilter($filters,true,true);
5159
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5160
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5161
5162
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5163
                    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) 
5164
                    GROUP BY spotter_output.aircraft_manufacturer 
5165
					ORDER BY aircraft_manufacturer_count DESC";
5166
5167
		
5168
		$sth = $this->db->prepare($query);
5169
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5170
      
5171
		$aircraft_array = array();
5172
		$temp_array = array();
5173
        
5174
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5175
		{
5176
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5177
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5178
          
5179
			$aircraft_array[] = $temp_array;
5180
		}
5181
5182
		return $aircraft_array;
5183
	}	
5184
5185
	
5186
	
5187
	
5188
	/**
5189
	* Gets all aircraft types that have flown over by country
5190
	*
5191
	* @return Array the aircraft list
5192
	*
5193
	*/
5194
	public function countAllAircraftTypesByCountry($country,$filters = array())
5195
	{
5196
		$filter_query = $this->getFilter($filters,true,true);
5197
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5198
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5199
                    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
5200
                    GROUP BY spotter_output.aircraft_name 
5201
			ORDER BY aircraft_icao_count DESC";
5202
 
5203
		
5204
		$sth = $this->db->prepare($query);
5205
		$sth->execute(array(':country' => $country));
5206
      
5207
		$aircraft_array = array();
5208
		$temp_array = array();
5209
        
5210
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5211
		{
5212
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5213
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5214
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5215
          
5216
			$aircraft_array[] = $temp_array;
5217
		}
5218
5219
		return $aircraft_array;
5220
	}
5221
5222
5223
	/**
5224
	* Gets all aircraft registration that have flown over by country
5225
	*
5226
	* @return Array the aircraft list
5227
	*
5228
	*/
5229
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
5230
	{
5231
		$filter_query = $this->getFilter($filters,true,true);
5232
		$Image = new Image($this->db);
5233
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5234
		$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 
5235
                    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)    
5236
                    GROUP BY spotter_output.registration 
5237
					ORDER BY registration_count DESC";
5238
5239
		
5240
		$sth = $this->db->prepare($query);
5241
		$sth->execute(array(':country' => $country));
5242
      
5243
		$aircraft_array = array();
5244
		$temp_array = array();
5245
        
5246
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5247
		{
5248
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5249
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5250
			$temp_array['registration'] = $row['registration'];
5251
			$temp_array['airline_name'] = $row['airline_name'];
5252
			$temp_array['image_thumbnail'] = "";
5253
			if($row['registration'] != "")
5254
			{
5255
				$image_array = $Image->getSpotterImage($row['registration']);
5256
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5257
			}
5258
			$temp_array['registration_count'] = $row['registration_count'];
5259
          
5260
			$aircraft_array[] = $temp_array;
5261
		}
5262
5263
		return $aircraft_array;
5264
	}
5265
	
5266
	
5267
	/**
5268
	* Gets all aircraft manufacturer that have flown over by country
5269
	*
5270
	* @return Array the aircraft manufacturer list
5271
	*
5272
	*/
5273
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
5274
	{
5275
		$filter_query = $this->getFilter($filters,true,true);
5276
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5277
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5278
                    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) 
5279
                    GROUP BY spotter_output.aircraft_manufacturer 
5280
					ORDER BY aircraft_manufacturer_count DESC";
5281
5282
		
5283
		$sth = $this->db->prepare($query);
5284
		$sth->execute(array(':country' => $country));
5285
      
5286
		$aircraft_array = array();
5287
		$temp_array = array();
5288
        
5289
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5290
		{
5291
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5292
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5293
          
5294
			$aircraft_array[] = $temp_array;
5295
		}
5296
5297
		return $aircraft_array;
5298
	}	
5299
	
5300
	
5301
	
5302
	/**
5303
	* Gets all aircraft manufacturers that have flown over
5304
	*
5305
	* @return Array the aircraft list
5306
	*
5307
	*/
5308
	public function countAllAircraftManufacturers($filters = array())
5309
	{
5310
		$filter_query = $this->getFilter($filters,true,true);
5311
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5312
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
5313
                $query .= " GROUP BY spotter_output.aircraft_manufacturer
5314
					ORDER BY aircraft_manufacturer_count DESC
5315
					LIMIT 10";
5316
      
5317
		
5318
		$sth = $this->db->prepare($query);
5319
		$sth->execute();
5320
      
5321
		$manufacturer_array = array();
5322
		$temp_array = array();
5323
        
5324
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5325
		{
5326
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5327
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5328
          
5329
			$manufacturer_array[] = $temp_array;
5330
		}
5331
5332
		return $manufacturer_array;
5333
	}
5334
	
5335
	
5336
	
5337
	/**
5338
	* Gets all aircraft registrations that have flown over
5339
	*
5340
	* @return Array the aircraft list
5341
	*
5342
	*/
5343
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5344
	{
5345
		global $globalDBdriver;
5346
		$Image = new Image($this->db);
5347
		$filter_query = $this->getFilter($filters,true,true);
5348
		$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    
5349
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
5350
                if ($olderthanmonths > 0) {
5351
            		if ($globalDBdriver == 'mysql') {
5352
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5353
			} else {
5354
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5355
			}
5356
		}
5357
                if ($sincedate != '') {
5358
            		if ($globalDBdriver == 'mysql') {
5359
				$query .= " AND spotter_output.date > '".$sincedate."'";
5360
			} else {
5361
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5362
			}
5363
		}
5364
5365
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5366
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5367
                $query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
5368
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5369
		
5370
		$sth = $this->db->prepare($query);
5371
		$sth->execute();
5372
      
5373
		$aircraft_array = array();
5374
		$temp_array = array();
5375
        
5376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5377
		{
5378
			$temp_array['registration'] = $row['registration'];
5379
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5380
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5381
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5382
			$temp_array['airline_name'] = $row['airline_name'];
5383
			$temp_array['image_thumbnail'] = "";
5384
			if($row['registration'] != "")
5385
			{
5386
				$image_array = $Image->getSpotterImage($row['registration']);
5387
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5388
			}
5389
          
5390
			$aircraft_array[] = $temp_array;
5391
		}
5392
5393
		return $aircraft_array;
5394
	}
5395
5396
5397
	/**
5398
	* Gets all aircraft registrations that have flown over
5399
	*
5400
	* @return Array the aircraft list
5401
	*
5402
	*/
5403
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5404
	{
5405
		global $globalDBdriver;
5406
		$filter_query = $this->getFilter($filters,true,true);
5407
		$Image = new Image($this->db);
5408
		$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    
5409
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
5410
                if ($olderthanmonths > 0) {
5411
            		if ($globalDBdriver == 'mysql') {
5412
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5413
			} else {
5414
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5415
			}
5416
		}
5417
                if ($sincedate != '') {
5418
            		if ($globalDBdriver == 'mysql') {
5419
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5420
			} else {
5421
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5422
			}
5423
		}
5424
5425
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5426
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5427
                $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";
5428
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5429
		
5430
		$sth = $this->db->prepare($query);
5431
		$sth->execute();
5432
      
5433
		$aircraft_array = array();
5434
		$temp_array = array();
5435
        
5436
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5437
		{
5438
			$temp_array['registration'] = $row['registration'];
5439
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5440
			$temp_array['airline_icao'] = $row['airline_icao'];
5441
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5442
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5443
			$temp_array['airline_name'] = $row['airline_name'];
5444
			$temp_array['image_thumbnail'] = "";
5445
			if($row['registration'] != "")
5446
			{
5447
				$image_array = $Image->getSpotterImage($row['registration']);
5448
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5449
			}
5450
          
5451
			$aircraft_array[] = $temp_array;
5452
		}
5453
5454
		return $aircraft_array;
5455
	}
5456
	
5457
	
5458
	/**
5459
	* Gets all departure airports of the airplanes that have flown over
5460
	*
5461
	* @return Array the airport list
5462
	*
5463
	*/
5464
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5465
	{
5466
		global $globalDBdriver;
5467
		$filter_query = $this->getFilter($filters,true,true);
5468
		$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 
5469
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA'";
5470
                if ($olderthanmonths > 0) {
5471
            		if ($globalDBdriver == 'mysql') {
5472
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5473
			} else {
5474
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5475
			}
5476
                }
5477
                if ($sincedate != '') {
5478
            		if ($globalDBdriver == 'mysql') {
5479
				$query .= " AND spotter_output.date > '".$sincedate."'";
5480
			} else {
5481
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5482
			}
5483
		}
5484
5485
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5486
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5487
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5488
				ORDER BY airport_departure_icao_count DESC";
5489
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5490
      
5491
		$sth = $this->db->prepare($query);
5492
		$sth->execute();
5493
      
5494
		$airport_array = array();
5495
		$temp_array = array();
5496
        
5497
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5498
		{
5499
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5500
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5501
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5502
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5503
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5504
          
5505
			$airport_array[] = $temp_array;
5506
		}
5507
		return $airport_array;
5508
	}
5509
5510
	/**
5511
	* Gets all departure airports of the airplanes that have flown over
5512
	*
5513
	* @return Array the airport list
5514
	*
5515
	*/
5516
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5517
	{
5518
		global $globalDBdriver;
5519
		$filter_query = $this->getFilter($filters,true,true);
5520
		$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 
5521
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' ";
5522
                if ($olderthanmonths > 0) {
5523
            		if ($globalDBdriver == 'mysql') {
5524
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5525
			} else {
5526
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5527
			}
5528
                }
5529
                if ($sincedate != '') {
5530
            		if ($globalDBdriver == 'mysql') {
5531
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5532
			} else {
5533
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5534
			}
5535
		}
5536
5537
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5538
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5539
                $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
5540
				ORDER BY airport_departure_icao_count DESC";
5541
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5542
      
5543
		$sth = $this->db->prepare($query);
5544
		$sth->execute();
5545
      
5546
		$airport_array = array();
5547
		$temp_array = array();
5548
        
5549
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5550
		{
5551
			$temp_array['airline_icao'] = $row['airline_icao'];
5552
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5553
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5554
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5555
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5556
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5557
          
5558
			$airport_array[] = $temp_array;
5559
		}
5560
		return $airport_array;
5561
	}
5562
5563
	/**
5564
	* Gets all detected departure airports of the airplanes that have flown over
5565
	*
5566
	* @return Array the airport list
5567
	*
5568
	*/
5569
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5570
	{
5571
		global $globalDBdriver;
5572
		$filter_query = $this->getFilter($filters,true,true);
5573
		$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
5574
				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";
5575
                if ($olderthanmonths > 0) {
5576
            		if ($globalDBdriver == 'mysql') {
5577
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5578
			} else {
5579
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5580
			}
5581
                }
5582
                if ($sincedate != '') {
5583
            		if ($globalDBdriver == 'mysql') {
5584
				$query .= " AND spotter_output.date > '".$sincedate."'";
5585
			} else {
5586
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5587
			}
5588
		}
5589
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5590
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5591
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5592
				ORDER BY airport_departure_icao_count DESC";
5593
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5594
    		echo $query;
5595
		$sth = $this->db->prepare($query);
5596
		$sth->execute();
5597
      
5598
		$airport_array = array();
5599
		$temp_array = array();
5600
        
5601
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5602
		{
5603
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5604
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5605
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5606
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5607
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5608
          
5609
			$airport_array[] = $temp_array;
5610
		}
5611
		return $airport_array;
5612
	}
5613
	
5614
	/**
5615
	* Gets all detected departure airports of the airplanes that have flown over
5616
	*
5617
	* @return Array the airport list
5618
	*
5619
	*/
5620
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5621
	{
5622
		global $globalDBdriver;
5623
		$filter_query = $this->getFilter($filters,true,true);
5624
		$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
5625
				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 ";
5626
                if ($olderthanmonths > 0) {
5627
            		if ($globalDBdriver == 'mysql') {
5628
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5629
			} else {
5630
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5631
			}
5632
                }
5633
                if ($sincedate != '') {
5634
            		if ($globalDBdriver == 'mysql') {
5635
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5636
			} else {
5637
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
5638
			}
5639
		}
5640
5641
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5642
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5643
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5644
				ORDER BY airport_departure_icao_count DESC";
5645
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5646
      
5647
		$sth = $this->db->prepare($query);
5648
		$sth->execute();
5649
      
5650
		$airport_array = array();
5651
		$temp_array = array();
5652
        
5653
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5654
		{
5655
			$temp_array['airline_icao'] = $row['airline_icao'];
5656
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5657
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5658
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5659
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5660
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5661
          
5662
			$airport_array[] = $temp_array;
5663
		}
5664
		return $airport_array;
5665
	}	
5666
	
5667
	/**
5668
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
5669
	*
5670
	* @return Array the airport list
5671
	*
5672
	*/
5673
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
5674
	{
5675
		$filter_query = $this->getFilter($filters,true,true);
5676
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5677
		$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 
5678
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao 
5679
                    GROUP BY spotter_output.departure_airport_icao
5680
					ORDER BY airport_departure_icao_count DESC";
5681
      
5682
		
5683
		$sth = $this->db->prepare($query);
5684
		$sth->execute(array(':airline_icao' => $airline_icao));
5685
      
5686
		$airport_array = array();
5687
		$temp_array = array();
5688
        
5689
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5690
		{
5691
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5692
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5693
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5694
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5695
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5696
          
5697
			$airport_array[] = $temp_array;
5698
		}
5699
5700
		return $airport_array;
5701
	}
5702
	
5703
	
5704
	
5705
	/**
5706
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
5707
	*
5708
	* @return Array the airport list
5709
	*
5710
	*/
5711
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
5712
	{
5713
		$filter_query = $this->getFilter($filters,true,true);
5714
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5715
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5716
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
5717
                    GROUP BY spotter_output.departure_airport_country
5718
					ORDER BY airport_departure_country_count DESC";
5719
      
5720
		
5721
		$sth = $this->db->prepare($query);
5722
		$sth->execute(array(':airline_icao' => $airline_icao));
5723
      
5724
		$airport_array = array();
5725
		$temp_array = array();
5726
        
5727
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5728
		{
5729
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5730
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5731
          
5732
			$airport_array[] = $temp_array;
5733
		}
5734
5735
		return $airport_array;
5736
	}
5737
	
5738
	
5739
	
5740
	/**
5741
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
5742
	*
5743
	* @return Array the airport list
5744
	*
5745
	*/
5746
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
5747
	{
5748
		$filter_query = $this->getFilter($filters,true,true);
5749
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5750
		$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 
5751
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao 
5752
                    GROUP BY spotter_output.departure_airport_icao
5753
					ORDER BY airport_departure_icao_count DESC";
5754
      
5755
		
5756
		$sth = $this->db->prepare($query);
5757
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5758
      
5759
		$airport_array = array();
5760
		$temp_array = array();
5761
        
5762
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5763
		{
5764
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5765
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5766
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5767
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5768
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5769
          
5770
			$airport_array[] = $temp_array;
5771
		}
5772
5773
		return $airport_array;
5774
	}
5775
	
5776
	
5777
	/**
5778
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
5779
	*
5780
	* @return Array the airport list
5781
	*
5782
	*/
5783
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
5784
	{
5785
		$filter_query = $this->getFilter($filters,true,true);
5786
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5787
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5788
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
5789
                    GROUP BY spotter_output.departure_airport_country
5790
					ORDER BY airport_departure_country_count DESC";
5791
      
5792
		
5793
		$sth = $this->db->prepare($query);
5794
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5795
      
5796
		$airport_array = array();
5797
		$temp_array = array();
5798
        
5799
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5800
		{
5801
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5802
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5803
          
5804
			$airport_array[] = $temp_array;
5805
		}
5806
5807
		return $airport_array;
5808
	}
5809
	
5810
	
5811
	/**
5812
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
5813
	*
5814
	* @return Array the airport list
5815
	*
5816
	*/
5817
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
5818
	{
5819
		$filter_query = $this->getFilter($filters,true,true);
5820
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5821
		$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 
5822
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.registration = :registration 
5823
                    GROUP BY spotter_output.departure_airport_icao
5824
					ORDER BY airport_departure_icao_count DESC";
5825
      
5826
		
5827
		$sth = $this->db->prepare($query);
5828
		$sth->execute(array(':registration' => $registration));
5829
      
5830
		$airport_array = array();
5831
		$temp_array = array();
5832
        
5833
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5834
		{
5835
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5836
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5837
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5838
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5839
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5840
          
5841
			$airport_array[] = $temp_array;
5842
		}
5843
5844
		return $airport_array;
5845
	}
5846
	
5847
	
5848
	/**
5849
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
5850
	*
5851
	* @return Array the airport list
5852
	*
5853
	*/
5854
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
5855
	{
5856
		$filter_query = $this->getFilter($filters,true,true);
5857
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5858
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5859
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
5860
                    GROUP BY spotter_output.departure_airport_country
5861
					ORDER BY airport_departure_country_count DESC";
5862
      
5863
		
5864
		$sth = $this->db->prepare($query);
5865
		$sth->execute(array(':registration' => $registration));
5866
      
5867
		$airport_array = array();
5868
		$temp_array = array();
5869
        
5870
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5871
		{
5872
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5873
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5874
          
5875
			$airport_array[] = $temp_array;
5876
		}
5877
5878
		return $airport_array;
5879
	}
5880
	
5881
	
5882
	/**
5883
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
5884
	*
5885
	* @return Array the airport list
5886
	*
5887
	*/
5888
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
5889
	{
5890
		$filter_query = $this->getFilter($filters,true,true);
5891
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5892
		$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 
5893
			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 
5894
                    GROUP BY spotter_output.departure_airport_icao
5895
					ORDER BY airport_departure_icao_count DESC";
5896
      
5897
		
5898
		$sth = $this->db->prepare($query);
5899
		$sth->execute(array(':airport_icao' => $airport_icao));
5900
      
5901
		$airport_array = array();
5902
		$temp_array = array();
5903
        
5904
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5905
		{
5906
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5907
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5908
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5909
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5910
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5911
          
5912
			$airport_array[] = $temp_array;
5913
		}
5914
5915
		return $airport_array;
5916
	}
5917
	
5918
	
5919
	/**
5920
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
5921
	*
5922
	* @return Array the airport list
5923
	*
5924
	*/
5925
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
5926
	{
5927
		$filter_query = $this->getFilter($filters,true,true);
5928
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5929
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5930
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
5931
                    GROUP BY spotter_output.departure_airport_country
5932
					ORDER BY airport_departure_country_count DESC";
5933
      
5934
		
5935
		$sth = $this->db->prepare($query);
5936
		$sth->execute(array(':airport_icao' => $airport_icao));
5937
      
5938
		$airport_array = array();
5939
		$temp_array = array();
5940
        
5941
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5942
		{
5943
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5944
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5945
          
5946
			$airport_array[] = $temp_array;
5947
		}
5948
5949
		return $airport_array;
5950
	}
5951
	
5952
	
5953
	
5954
	/**
5955
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
5956
	*
5957
	* @return Array the airport list
5958
	*
5959
	*/
5960
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
5961
	{
5962
		$filter_query = $this->getFilter($filters,true,true);
5963
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5964
		$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 
5965
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
5966
                    GROUP BY spotter_output.departure_airport_icao
5967
					ORDER BY airport_departure_icao_count DESC";
5968
      
5969
		
5970
		$sth = $this->db->prepare($query);
5971
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5972
      
5973
		$airport_array = array();
5974
		$temp_array = array();
5975
        
5976
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5977
		{
5978
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5979
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5980
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5981
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5982
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5983
          
5984
			$airport_array[] = $temp_array;
5985
		}
5986
5987
		return $airport_array;
5988
	}
5989
	
5990
	
5991
	/**
5992
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
5993
	*
5994
	* @return Array the airport list
5995
	*
5996
	*/
5997
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
5998
	{
5999
		$filter_query = $this->getFilter($filters,true,true);
6000
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6001
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6002
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6003
                    GROUP BY spotter_output.departure_airport_country
6004
					ORDER BY airport_departure_country_count DESC";
6005
      
6006
		
6007
		$sth = $this->db->prepare($query);
6008
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6009
      
6010
		$airport_array = array();
6011
		$temp_array = array();
6012
        
6013
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6014
		{
6015
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6016
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6017
          
6018
			$airport_array[] = $temp_array;
6019
		}
6020
6021
		return $airport_array;
6022
	}
6023
	
6024
	
6025
	/**
6026
	* Gets all departure airports of the airplanes that have flown over based on a date
6027
	*
6028
	* @return Array the airport list
6029
	*
6030
	*/
6031
	public function countAllDepartureAirportsByDate($date,$filters = array())
6032
	{
6033
		global $globalTimezone, $globalDBdriver;
6034
		$filter_query = $this->getFilter($filters,true,true);
6035
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6036
		if ($globalTimezone != '') {
6037
			date_default_timezone_set($globalTimezone);
6038
			$datetime = new DateTime($date);
6039
			$offset = $datetime->format('P');
6040
		} else $offset = '+00:00';
6041
6042
		if ($globalDBdriver == 'mysql') {
6043
			$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 
6044
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
6045
					GROUP BY spotter_output.departure_airport_icao
6046
					ORDER BY airport_departure_icao_count DESC";
6047
		} else {
6048
			$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 
6049
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
6050
					GROUP BY spotter_output.departure_airport_icao
6051
					ORDER BY airport_departure_icao_count DESC";
6052
		}
6053
6054
		$sth = $this->db->prepare($query);
6055
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6056
      
6057
		$airport_array = array();
6058
		$temp_array = array();
6059
        
6060
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6061
		{
6062
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6063
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6064
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6065
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6066
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6067
          
6068
			$airport_array[] = $temp_array;
6069
		}
6070
		return $airport_array;
6071
	}
6072
	
6073
	
6074
	
6075
	/**
6076
	* Gets all departure airports by country of the airplanes that have flown over based on a date
6077
	*
6078
	* @return Array the airport list
6079
	*
6080
	*/
6081
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
6082
	{
6083
		global $globalTimezone, $globalDBdriver;
6084
		$filter_query = $this->getFilter($filters,true,true);
6085
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6086
		if ($globalTimezone != '') {
6087
			date_default_timezone_set($globalTimezone);
6088
			$datetime = new DateTime($date);
6089
			$offset = $datetime->format('P');
6090
		} else $offset = '+00:00';
6091
6092
		if ($globalDBdriver == 'mysql') {
6093
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6094
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6095
					GROUP BY spotter_output.departure_airport_country
6096
					ORDER BY airport_departure_country_count DESC";
6097
		} else {
6098
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6099
					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 
6100
					GROUP BY spotter_output.departure_airport_country
6101
					ORDER BY airport_departure_country_count DESC";
6102
		}
6103
		
6104
		$sth = $this->db->prepare($query);
6105
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6106
      
6107
		$airport_array = array();
6108
		$temp_array = array();
6109
        
6110
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6111
		{
6112
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6113
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6114
          
6115
			$airport_array[] = $temp_array;
6116
		}
6117
		return $airport_array;
6118
	}
6119
	
6120
	
6121
	
6122
	/**
6123
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
6124
	*
6125
	* @return Array the airport list
6126
	*
6127
	*/
6128
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
6129
	{
6130
		$filter_query = $this->getFilter($filters,true,true);
6131
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6132
		$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 
6133
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.ident = :ident 
6134
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6135
		    ORDER BY airport_departure_icao_count DESC";
6136
      
6137
		
6138
		$sth = $this->db->prepare($query);
6139
		$sth->execute(array(':ident' => $ident));
6140
      
6141
		$airport_array = array();
6142
		$temp_array = array();
6143
        
6144
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6145
		{
6146
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6147
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6148
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6149
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6150
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6151
          
6152
			$airport_array[] = $temp_array;
6153
		}
6154
6155
		return $airport_array;
6156
	}
6157
	
6158
	
6159
	
6160
	/**
6161
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
6162
	*
6163
	* @return Array the airport list
6164
	*
6165
	*/
6166
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
6167
	{
6168
		$filter_query = $this->getFilter($filters,true,true);
6169
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6170
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6171
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
6172
                    GROUP BY spotter_output.departure_airport_country
6173
					ORDER BY airport_departure_country_count DESC";
6174
      
6175
		
6176
		$sth = $this->db->prepare($query);
6177
		$sth->execute(array(':ident' => $ident));
6178
      
6179
		$airport_array = array();
6180
		$temp_array = array();
6181
        
6182
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6183
		{
6184
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6185
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6186
          
6187
			$airport_array[] = $temp_array;
6188
		}
6189
6190
		return $airport_array;
6191
	}
6192
	
6193
	
6194
	
6195
	/**
6196
	* Gets all departure airports of the airplanes that have flown over based on a country
6197
	*
6198
	* @return Array the airport list
6199
	*
6200
	*/
6201
	public function countAllDepartureAirportsByCountry($country,$filters = array())
6202
	{
6203
		$filter_query = $this->getFilter($filters,true,true);
6204
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6205
6206
		$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 
6207
			FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
6208
                    GROUP BY spotter_output.departure_airport_icao
6209
					ORDER BY airport_departure_icao_count DESC";
6210
      
6211
		
6212
		$sth = $this->db->prepare($query);
6213
		$sth->execute(array(':country' => $country));
6214
      
6215
		$airport_array = array();
6216
		$temp_array = array();
6217
        
6218
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6219
		{
6220
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6221
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6222
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6223
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6224
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6225
          
6226
			$airport_array[] = $temp_array;
6227
		}
6228
6229
		return $airport_array;
6230
	}
6231
6232
6233
	/**
6234
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6235
	*
6236
	* @return Array the airport list
6237
	*
6238
	*/
6239
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
6240
	{
6241
		$filter_query = $this->getFilter($filters,true,true);
6242
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6243
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6244
			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 
6245
                    GROUP BY spotter_output.departure_airport_country
6246
					ORDER BY airport_departure_country_count DESC";
6247
      
6248
		
6249
		$sth = $this->db->prepare($query);
6250
		$sth->execute(array(':country' => $country));
6251
      
6252
		$airport_array = array();
6253
		$temp_array = array();
6254
        
6255
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6256
		{
6257
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6258
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6259
          
6260
			$airport_array[] = $temp_array;
6261
		}
6262
6263
		return $airport_array;
6264
	}
6265
	
6266
6267
	/**
6268
	* Gets all arrival airports of the airplanes that have flown over
6269
	*
6270
	* @return Array the airport list
6271
	*
6272
	*/
6273
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6274
	{
6275
		global $globalDBdriver;
6276
		$filter_query = $this->getFilter($filters,true,true);
6277
		$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 
6278
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA'";
6279
                if ($olderthanmonths > 0) {
6280
            		if ($globalDBdriver == 'mysql') {
6281
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6282
			} else {
6283
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6284
			}
6285
                if ($sincedate != '') {
6286
            		if ($globalDBdriver == 'mysql') {
6287
				$query .= " AND spotter_output.date > '".$sincedate."'";
6288
			} else {
6289
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6290
			}
6291
		}
6292
            		if ($globalDBdriver == 'mysql') {
6293
				$query .= " AND spotter_output.date > '".$sincedate."'";
6294
			} else {
6295
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6296
			}
6297
		}
6298
6299
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6300
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6301
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6302
					ORDER BY airport_arrival_icao_count DESC";
6303
		if ($limit) $query .= " LIMIT 10";
6304
      
6305
		
6306
		$sth = $this->db->prepare($query);
6307
		$sth->execute();
6308
      
6309
		$airport_array = array();
6310
		$temp_array = array();
6311
        
6312
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6313
		{
6314
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6315
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6316
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6317
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6318
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6319
          
6320
			if ($icaoaskey) {
6321
				$icao = $row['arrival_airport_icao'];
6322
				$airport_array[$icao] = $temp_array;
6323
			} else $airport_array[] = $temp_array;
6324
		}
6325
6326
		return $airport_array;
6327
	}
6328
6329
	/**
6330
	* Gets all arrival airports of the airplanes that have flown over
6331
	*
6332
	* @return Array the airport list
6333
	*
6334
	*/
6335
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6336
	{
6337
		global $globalDBdriver;
6338
		$filter_query = $this->getFilter($filters,true,true);
6339
		$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 
6340
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' ";
6341
                if ($olderthanmonths > 0) {
6342
            		if ($globalDBdriver == 'mysql') {
6343
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6344
			} else {
6345
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6346
			}
6347
                if ($sincedate != '') {
6348
            		if ($globalDBdriver == 'mysql') {
6349
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6350
			} else {
6351
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6352
			}
6353
		}
6354
            		if ($globalDBdriver == 'mysql') {
6355
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6356
			} else {
6357
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6358
			}
6359
		}
6360
6361
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6362
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6363
                $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
6364
					ORDER BY airport_arrival_icao_count DESC";
6365
		if ($limit) $query .= " LIMIT 10";
6366
      
6367
		
6368
		$sth = $this->db->prepare($query);
6369
		$sth->execute();
6370
      
6371
		$airport_array = array();
6372
		$temp_array = array();
6373
        
6374
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6375
		{
6376
			$temp_array['airline_icao'] = $row['airline_icao'];
6377
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6378
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6379
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6380
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6381
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6382
          
6383
			if ($icaoaskey) {
6384
				$icao = $row['arrival_airport_icao'];
6385
				$airport_array[$icao] = $temp_array;
6386
			} else $airport_array[] = $temp_array;
6387
		}
6388
6389
		return $airport_array;
6390
	}
6391
6392
6393
	/**
6394
	* Gets all detected arrival airports of the airplanes that have flown over
6395
	*
6396
	* @return Array the airport list
6397
	*
6398
	*/
6399
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
6400
	{
6401
		global $globalDBdriver;
6402
		$filter_query = $this->getFilter($filters,true,true);
6403
		$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 
6404
			FROM spotter_output, airport".$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";
6405
                if ($olderthanmonths > 0) {
6406
            		if ($globalDBdriver == 'mysql') {
6407
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6408
			} else {
6409
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6410
			}
6411
                if ($sincedate != '') {
6412
            		if ($globalDBdriver == 'mysql') {
6413
				$query .= " AND spotter_output.date > '".$sincedate."'";
6414
			} else {
6415
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6416
			}
6417
		}
6418
            		if ($globalDBdriver == 'mysql') {
6419
				$query .= " AND spotter_output.date > '".$sincedate."'";
6420
			} else {
6421
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6422
			}
6423
		}
6424
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6425
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6426
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6427
					ORDER BY airport_arrival_icao_count DESC";
6428
		if ($limit) $query .= " LIMIT 10";
6429
      
6430
		
6431
		$sth = $this->db->prepare($query);
6432
		$sth->execute();
6433
      
6434
		$airport_array = array();
6435
		$temp_array = array();
6436
        
6437
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6438
		{
6439
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6440
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6441
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6442
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6443
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6444
          
6445
			if ($icaoaskey) {
6446
				$icao = $row['arrival_airport_icao'];
6447
				$airport_array[$icao] = $temp_array;
6448
			} else $airport_array[] = $temp_array;
6449
		}
6450
6451
		return $airport_array;
6452
	}
6453
	
6454
	/**
6455
	* Gets all detected arrival airports of the airplanes that have flown over
6456
	*
6457
	* @return Array the airport list
6458
	*
6459
	*/
6460
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
6461
	{
6462
		global $globalDBdriver;
6463
		$filter_query = $this->getFilter($filters,true,true);
6464
		$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 
6465
			FROM spotter_output, airport".$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 ";
6466
                if ($olderthanmonths > 0) {
6467
            		if ($globalDBdriver == 'mysql') {
6468
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6469
			} else {
6470
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6471
			}
6472
                if ($sincedate != '') {
6473
            		if ($globalDBdriver == 'mysql') {
6474
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6475
			} else {
6476
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6477
			}
6478
		}
6479
            		if ($globalDBdriver == 'mysql') {
6480
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6481
			} else {
6482
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6483
			}
6484
		}
6485
6486
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6487
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6488
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6489
					ORDER BY airport_arrival_icao_count DESC";
6490
		if ($limit) $query .= " LIMIT 10";
6491
      
6492
		
6493
		$sth = $this->db->prepare($query);
6494
		$sth->execute();
6495
      
6496
		$airport_array = array();
6497
		$temp_array = array();
6498
        
6499
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6500
		{
6501
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6502
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6503
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6504
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6505
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6506
			$temp_array['airline_icao'] = $row['airline_icao'];
6507
          
6508
			if ($icaoaskey) {
6509
				$icao = $row['arrival_airport_icao'];
6510
				$airport_array[$icao] = $temp_array;
6511
			} else $airport_array[] = $temp_array;
6512
		}
6513
6514
		return $airport_array;
6515
	}	
6516
	
6517
	/**
6518
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
6519
	*
6520
	* @return Array the airport list
6521
	*
6522
	*/
6523
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
6524
	{
6525
		$filter_query = $this->getFilter($filters,true,true);
6526
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6527
		$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 
6528
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao 
6529
                    GROUP BY spotter_output.arrival_airport_icao
6530
					ORDER BY airport_arrival_icao_count DESC";
6531
		
6532
		$sth = $this->db->prepare($query);
6533
		$sth->execute(array(':airline_icao' => $airline_icao));
6534
      
6535
		$airport_array = array();
6536
		$temp_array = array();
6537
        
6538
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6539
		{
6540
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6541
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6542
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6543
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6544
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6545
          
6546
			$airport_array[] = $temp_array;
6547
		}
6548
6549
		return $airport_array;
6550
	}
6551
	
6552
	
6553
	/**
6554
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
6555
	*
6556
	* @return Array the airport list
6557
	*
6558
	*/
6559
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
6560
	{
6561
		$filter_query = $this->getFilter($filters,true,true);
6562
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6563
					
6564
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6565
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6566
                    GROUP BY spotter_output.arrival_airport_country
6567
					ORDER BY airport_arrival_country_count DESC";
6568
      
6569
		
6570
		$sth = $this->db->prepare($query);
6571
		$sth->execute(array(':airline_icao' => $airline_icao));
6572
      
6573
		$airport_array = array();
6574
		$temp_array = array();
6575
        
6576
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6577
		{
6578
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6579
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6580
          
6581
			$airport_array[] = $temp_array;
6582
		}
6583
6584
		return $airport_array;
6585
	}
6586
	
6587
	
6588
	/**
6589
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
6590
	*
6591
	* @return Array the airport list
6592
	*
6593
	*/
6594
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
6595
	{
6596
		$filter_query = $this->getFilter($filters,true,true);
6597
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6598
		$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 
6599
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao 
6600
                    GROUP BY spotter_output.arrival_airport_icao
6601
					ORDER BY airport_arrival_icao_count DESC";
6602
      
6603
		
6604
		$sth = $this->db->prepare($query);
6605
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6606
      
6607
		$airport_array = array();
6608
		$temp_array = array();
6609
        
6610
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6611
		{
6612
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6613
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6614
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6615
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6616
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6617
          
6618
			$airport_array[] = $temp_array;
6619
		}
6620
6621
		return $airport_array;
6622
	}
6623
	
6624
	
6625
	
6626
	/**
6627
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
6628
	*
6629
	* @return Array the airport list
6630
	*
6631
	*/
6632
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
6633
	{
6634
		$filter_query = $this->getFilter($filters,true,true);
6635
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6636
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6637
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6638
                    GROUP BY spotter_output.arrival_airport_country
6639
					ORDER BY airport_arrival_country_count DESC";
6640
      
6641
		
6642
		$sth = $this->db->prepare($query);
6643
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6644
      
6645
		$airport_array = array();
6646
		$temp_array = array();
6647
        
6648
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6649
		{
6650
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6651
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6652
          
6653
			$airport_array[] = $temp_array;
6654
		}
6655
6656
		return $airport_array;
6657
	}
6658
	
6659
	
6660
	/**
6661
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
6662
	*
6663
	* @return Array the airport list
6664
	*
6665
	*/
6666
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
6667
	{
6668
		$filter_query = $this->getFilter($filters,true,true);
6669
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6670
6671
		$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 
6672
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.registration = :registration 
6673
                    GROUP BY spotter_output.arrival_airport_icao
6674
					ORDER BY airport_arrival_icao_count DESC";
6675
      
6676
		
6677
		$sth = $this->db->prepare($query);
6678
		$sth->execute(array(':registration' => $registration));
6679
      
6680
		$airport_array = array();
6681
		$temp_array = array();
6682
        
6683
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6684
		{
6685
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6686
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6687
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6688
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6689
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6690
          
6691
			$airport_array[] = $temp_array;
6692
		}
6693
6694
		return $airport_array;
6695
	}
6696
	
6697
	
6698
	/**
6699
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
6700
	*
6701
	* @return Array the airport list
6702
	*
6703
	*/
6704
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
6705
	{
6706
		$filter_query = $this->getFilter($filters,true,true);
6707
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6708
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6709
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
6710
                    GROUP BY spotter_output.arrival_airport_country
6711
					ORDER BY airport_arrival_country_count DESC";
6712
      
6713
		
6714
		$sth = $this->db->prepare($query);
6715
		$sth->execute(array(':registration' => $registration));
6716
      
6717
		$airport_array = array();
6718
		$temp_array = array();
6719
        
6720
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6721
		{
6722
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6723
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6724
          
6725
			$airport_array[] = $temp_array;
6726
		}
6727
6728
		return $airport_array;
6729
	}
6730
	
6731
	
6732
	
6733
	/**
6734
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
6735
	*
6736
	* @return Array the airport list
6737
	*
6738
	*/
6739
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
6740
	{
6741
		$filter_query = $this->getFilter($filters,true,true);
6742
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6743
		$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 
6744
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.departure_airport_icao = :airport_icao 
6745
                    GROUP BY spotter_output.arrival_airport_icao
6746
					ORDER BY airport_arrival_icao_count DESC";
6747
      
6748
		
6749
		$sth = $this->db->prepare($query);
6750
		$sth->execute(array(':airport_icao' => $airport_icao));
6751
      
6752
		$airport_array = array();
6753
		$temp_array = array();
6754
        
6755
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6756
		{
6757
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6758
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6759
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6760
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6761
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6762
          
6763
			$airport_array[] = $temp_array;
6764
		}
6765
6766
		return $airport_array;
6767
	}
6768
	
6769
	
6770
	/**
6771
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
6772
	*
6773
	* @return Array the airport list
6774
	*
6775
	*/
6776
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
6777
	{
6778
		$filter_query = $this->getFilter($filters,true,true);
6779
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6780
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6781
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
6782
                    GROUP BY spotter_output.arrival_airport_country
6783
					ORDER BY airport_arrival_country_count DESC";
6784
      
6785
		
6786
		$sth = $this->db->prepare($query);
6787
		$sth->execute(array(':airport_icao' => $airport_icao));
6788
      
6789
		$airport_array = array();
6790
		$temp_array = array();
6791
        
6792
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6793
		{
6794
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6795
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6796
          
6797
			$airport_array[] = $temp_array;
6798
		}
6799
6800
		return $airport_array;
6801
	}
6802
	
6803
	
6804
	/**
6805
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
6806
	*
6807
	* @return Array the airport list
6808
	*
6809
	*/
6810
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6811
	{
6812
		$filter_query = $this->getFilter($filters,true,true);
6813
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6814
		$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 
6815
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6816
                    GROUP BY spotter_output.arrival_airport_icao
6817
					ORDER BY airport_arrival_icao_count DESC";
6818
      
6819
		
6820
		$sth = $this->db->prepare($query);
6821
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6822
      
6823
		$airport_array = array();
6824
		$temp_array = array();
6825
        
6826
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6827
		{
6828
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6829
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6830
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6831
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6832
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6833
          
6834
			$airport_array[] = $temp_array;
6835
		}
6836
6837
		return $airport_array;
6838
	}
6839
	
6840
	
6841
	
6842
	/**
6843
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
6844
	*
6845
	* @return Array the airport list
6846
	*
6847
	*/
6848
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6849
	{
6850
		$filter_query = $this->getFilter($filters,true,true);
6851
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6852
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6853
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6854
                    GROUP BY spotter_output.arrival_airport_country
6855
					ORDER BY airport_arrival_country_count DESC";
6856
      
6857
		
6858
		$sth = $this->db->prepare($query);
6859
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6860
      
6861
		$airport_array = array();
6862
		$temp_array = array();
6863
        
6864
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6865
		{
6866
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6867
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6868
          
6869
			$airport_array[] = $temp_array;
6870
		}
6871
6872
		return $airport_array;
6873
	}
6874
	
6875
	
6876
	
6877
	/**
6878
	* Gets all arrival airports of the airplanes that have flown over based on a date
6879
	*
6880
	* @return Array the airport list
6881
	*
6882
	*/
6883
	public function countAllArrivalAirportsByDate($date,$filters = array())
6884
	{
6885
		global $globalTimezone, $globalDBdriver;
6886
		$filter_query = $this->getFilter($filters,true,true);
6887
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6888
		if ($globalTimezone != '') {
6889
			date_default_timezone_set($globalTimezone);
6890
			$datetime = new DateTime($date);
6891
			$offset = $datetime->format('P');
6892
		} else $offset = '+00:00';
6893
6894
		if ($globalDBdriver == 'mysql') {
6895
			$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 
6896
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
6897
					GROUP BY spotter_output.arrival_airport_icao
6898
					ORDER BY airport_arrival_icao_count DESC";
6899
		} else {
6900
			$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 
6901
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
6902
					GROUP BY spotter_output.arrival_airport_icao
6903
					ORDER BY airport_arrival_icao_count DESC";
6904
		}
6905
		
6906
		$sth = $this->db->prepare($query);
6907
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6908
      
6909
		$airport_array = array();
6910
		$temp_array = array();
6911
        
6912
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6913
		{
6914
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6915
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6916
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6917
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6918
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6919
          
6920
			$airport_array[] = $temp_array;
6921
		}
6922
		return $airport_array;
6923
	}
6924
	
6925
	
6926
	
6927
	/**
6928
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
6929
	*
6930
	* @return Array the airport list
6931
	*
6932
	*/
6933
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
6934
	{
6935
		global $globalTimezone, $globalDBdriver;
6936
		$filter_query = $this->getFilter($filters,true,true);
6937
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6938
		if ($globalTimezone != '') {
6939
			date_default_timezone_set($globalTimezone);
6940
			$datetime = new DateTime($date);
6941
			$offset = $datetime->format('P');
6942
		} else $offset = '+00:00';
6943
6944
		if ($globalDBdriver == 'mysql') {
6945
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6946
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6947
					GROUP BY spotter_output.arrival_airport_country
6948
					ORDER BY airport_arrival_country_count DESC";
6949
		} else {
6950
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6951
					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 
6952
					GROUP BY spotter_output.arrival_airport_country
6953
					ORDER BY airport_arrival_country_count DESC";
6954
		}
6955
		
6956
		$sth = $this->db->prepare($query);
6957
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6958
      
6959
		$airport_array = array();
6960
		$temp_array = array();
6961
        
6962
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6963
		{
6964
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6965
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6966
          
6967
			$airport_array[] = $temp_array;
6968
		}
6969
		return $airport_array;
6970
	}
6971
	
6972
	
6973
	
6974
	/**
6975
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
6976
	*
6977
	* @return Array the airport list
6978
	*
6979
	*/
6980
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
6981
	{
6982
		$filter_query = $this->getFilter($filters,true,true);
6983
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6984
		$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 
6985
		    FROM spotter_output".$filter_query." WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.ident = :ident  
6986
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6987
		    ORDER BY airport_arrival_icao_count DESC";
6988
      
6989
		
6990
		$sth = $this->db->prepare($query);
6991
		$sth->execute(array(':ident' => $ident));
6992
      
6993
		$airport_array = array();
6994
		$temp_array = array();
6995
        
6996
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6997
		{
6998
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6999
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7000
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7001
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7002
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7003
          
7004
			$airport_array[] = $temp_array;
7005
		}
7006
7007
		return $airport_array;
7008
	}
7009
	
7010
	
7011
	/**
7012
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
7013
	*
7014
	* @return Array the airport list
7015
	*
7016
	*/
7017
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
7018
	{
7019
		$filter_query = $this->getFilter($filters,true,true);
7020
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7021
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7022
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
7023
                    GROUP BY spotter_output.arrival_airport_country
7024
					ORDER BY airport_arrival_country_count DESC";
7025
      
7026
		
7027
		$sth = $this->db->prepare($query);
7028
		$sth->execute(array(':ident' => $ident));
7029
      
7030
		$airport_array = array();
7031
		$temp_array = array();
7032
        
7033
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7034
		{
7035
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7036
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7037
          
7038
			$airport_array[] = $temp_array;
7039
		}
7040
7041
		return $airport_array;
7042
	}
7043
	
7044
	
7045
	
7046
	/**
7047
	* Gets all arrival airports of the airplanes that have flown over based on a country
7048
	*
7049
	* @return Array the airport list
7050
	*
7051
	*/
7052
	public function countAllArrivalAirportsByCountry($country,$filters = array())
7053
	{
7054
		$filter_query = $this->getFilter($filters,true,true);
7055
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7056
		$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 
7057
			FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
7058
                    GROUP BY spotter_output.arrival_airport_icao
7059
					ORDER BY airport_arrival_icao_count DESC";
7060
      
7061
		
7062
		$sth = $this->db->prepare($query);
7063
		$sth->execute(array(':country' => $country));
7064
      
7065
		$airport_array = array();
7066
		$temp_array = array();
7067
        
7068
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7069
		{
7070
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7071
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7072
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7073
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7074
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7075
          
7076
			$airport_array[] = $temp_array;
7077
		}
7078
7079
		return $airport_array;
7080
	}
7081
	
7082
	
7083
	/**
7084
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
7085
	*
7086
	* @return Array the airport list
7087
	*
7088
	*/
7089
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
7090
	{
7091
		$filter_query = $this->getFilter($filters,true,true);
7092
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7093
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7094
			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 
7095
                    GROUP BY spotter_output.arrival_airport_country
7096
					ORDER BY airport_arrival_country_count DESC";
7097
      
7098
		
7099
		$sth = $this->db->prepare($query);
7100
		$sth->execute(array(':country' => $country));
7101
      
7102
		$airport_array = array();
7103
		$temp_array = array();
7104
        
7105
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7106
		{
7107
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7108
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7109
          
7110
			$airport_array[] = $temp_array;
7111
		}
7112
7113
		return $airport_array;
7114
	}
7115
7116
7117
7118
	/**
7119
	* Counts all airport departure countries
7120
	*
7121
	* @return Array the airport departure list
7122
	*
7123
	*/
7124
	public function countAllDepartureCountries($filters = array())
7125
	{
7126
		$filter_query = $this->getFilter($filters,true,true);
7127
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7128
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA'";
7129
		$query .= " GROUP BY spotter_output.departure_airport_country
7130
					ORDER BY airport_departure_country_count DESC
7131
					LIMIT 10 OFFSET 0";
7132
      
7133
		
7134
		$sth = $this->db->prepare($query);
7135
		$sth->execute();
7136
      
7137
		$airport_array = array();
7138
		$temp_array = array();
7139
        
7140
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7141
		{
7142
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7143
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7144
          
7145
			$airport_array[] = $temp_array;
7146
		}
7147
7148
		return $airport_array;
7149
	}
7150
	
7151
	
7152
	/**
7153
	* Counts all airport arrival countries
7154
	*
7155
	* @return Array the airport arrival list
7156
	*
7157
	*/
7158
	public function countAllArrivalCountries($limit = true,$filters = array())
7159
	{
7160
		$filter_query = $this->getFilter($filters,true,true);
7161
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7162
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA'";
7163
		$query .= " GROUP BY spotter_output.arrival_airport_country
7164
					ORDER BY airport_arrival_country_count DESC";
7165
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7166
      
7167
		
7168
		$sth = $this->db->prepare($query);
7169
		$sth->execute();
7170
      
7171
		$airport_array = array();
7172
		$temp_array = array();
7173
        
7174
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7175
		{
7176
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
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
7188
7189
	/**
7190
	* Gets all route combinations
7191
	*
7192
	* @return Array the route list
7193
	*
7194
	*/
7195
	public function countAllRoutes($filters = array())
7196
	{
7197
		$filter_query = $this->getFilter($filters,true,true);
7198
		$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
7199
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> 'NA'
7200
                    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
7201
                    ORDER BY route_count DESC
7202
		    LIMIT 10 OFFSET 0";
7203
      
7204
		
7205
		$sth = $this->db->prepare($query);
7206
		$sth->execute();
7207
      
7208
		$routes_array = array();
7209
		$temp_array = array();
7210
        
7211
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7212
		{
7213
			$temp_array['route_count'] = $row['route_count'];
7214
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7215
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7216
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7217
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7218
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7219
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7220
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7221
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7222
          
7223
			$routes_array[] = $temp_array;
7224
		}
7225
7226
		return $routes_array;
7227
	}
7228
	
7229
	
7230
	
7231
	
7232
	/**
7233
	* Gets all route combinations based on an aircraft
7234
	*
7235
	* @return Array the route list
7236
	*
7237
	*/
7238
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
7239
	{
7240
		$filter_query = $this->getFilter($filters,true,true);
7241
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7242
		$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
7243
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7244
                    GROUP BY route
7245
                    ORDER BY route_count DESC";
7246
		
7247
		$sth = $this->db->prepare($query);
7248
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7249
      
7250
		$routes_array = array();
7251
		$temp_array = array();
7252
        
7253
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7254
		{
7255
			$temp_array['route_count'] = $row['route_count'];
7256
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7257
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7258
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7259
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7260
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7261
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7262
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7263
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7264
          
7265
			$routes_array[] = $temp_array;
7266
		}
7267
7268
		return $routes_array;
7269
	}
7270
	
7271
	
7272
	/**
7273
	* Gets all route combinations based on an aircraft registration
7274
	*
7275
	* @return Array the route list
7276
	*
7277
	*/
7278
	public function countAllRoutesByRegistration($registration, $filters = array())
7279
	{
7280
		$filter_query = $this->getFilter($filters,true,true);
7281
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
7282
		$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
7283
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
7284
                    GROUP BY route
7285
                    ORDER BY route_count DESC";
7286
      
7287
		
7288
		$sth = $this->db->prepare($query);
7289
		$sth->execute(array(':registration' => $registration));
7290
      
7291
		$routes_array = array();
7292
		$temp_array = array();
7293
        
7294
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7295
		{
7296
			$temp_array['route_count'] = $row['route_count'];
7297
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7298
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7299
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7300
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7301
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7302
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7303
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7304
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7305
          
7306
			$routes_array[] = $temp_array;
7307
		}
7308
7309
		return $routes_array;
7310
	}
7311
	
7312
	
7313
	
7314
	/**
7315
	* Gets all route combinations based on an airline
7316
	*
7317
	* @return Array the route list
7318
	*
7319
	*/
7320
	public function countAllRoutesByAirline($airline_icao, $filters = array())
7321
	{
7322
		$filter_query = $this->getFilter($filters,true,true);
7323
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7324
		$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
7325
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
7326
                    GROUP BY route
7327
                    ORDER BY route_count DESC";
7328
      
7329
		
7330
		$sth = $this->db->prepare($query);
7331
		$sth->execute(array(':airline_icao' => $airline_icao));
7332
      
7333
		$routes_array = array();
7334
		$temp_array = array();
7335
        
7336
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7337
		{
7338
			$temp_array['route_count'] = $row['route_count'];
7339
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7340
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7341
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7342
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7343
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7344
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7345
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7346
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7347
          
7348
			$routes_array[] = $temp_array;
7349
		}
7350
7351
		return $routes_array;
7352
	}
7353
	
7354
	
7355
	
7356
	/**
7357
	* Gets all route combinations based on an airport
7358
	*
7359
	* @return Array the route list
7360
	*
7361
	*/
7362
	public function countAllRoutesByAirport($airport_icao, $filters = array())
7363
	{
7364
		$filter_query = $this->getFilter($filters,true,true);
7365
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7366
		$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
7367
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
7368
                    GROUP BY route
7369
                    ORDER BY route_count DESC";
7370
		
7371
		$sth = $this->db->prepare($query);
7372
		$sth->execute(array(':airport_icao' => $airport_icao));
7373
      
7374
		$routes_array = array();
7375
		$temp_array = array();
7376
        
7377
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7378
		{
7379
			$temp_array['route_count'] = $row['route_count'];
7380
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7381
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7382
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7383
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7384
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7385
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7386
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7387
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7388
          
7389
			$routes_array[] = $temp_array;
7390
		}
7391
7392
		return $routes_array;
7393
	}
7394
	
7395
	
7396
	
7397
	/**
7398
	* Gets all route combinations based on an country
7399
	*
7400
	* @return Array the route list
7401
	*
7402
	*/
7403
	public function countAllRoutesByCountry($country, $filters = array())
7404
	{
7405
		$filter_query = $this->getFilter($filters,true,true);
7406
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7407
		$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
7408
			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 
7409
                    GROUP BY route
7410
                    ORDER BY route_count DESC";
7411
		
7412
		$sth = $this->db->prepare($query);
7413
		$sth->execute(array(':country' => $country));
7414
      
7415
		$routes_array = array();
7416
		$temp_array = array();
7417
        
7418
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7419
		{
7420
			$temp_array['route_count'] = $row['route_count'];
7421
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7422
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7423
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7424
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7425
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7426
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7427
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7428
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7429
          
7430
			$routes_array[] = $temp_array;
7431
		}
7432
7433
		return $routes_array;
7434
	}
7435
7436
7437
	/**
7438
	* Gets all route combinations based on an date
7439
	*
7440
	* @return Array the route list
7441
	*
7442
	*/
7443
	public function countAllRoutesByDate($date, $filters = array())
7444
	{
7445
		global $globalTimezone, $globalDBdriver;
7446
		$filter_query = $this->getFilter($filters,true,true);
7447
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7448
		if ($globalTimezone != '') {
7449
			date_default_timezone_set($globalTimezone);
7450
			$datetime = new DateTime($date);
7451
			$offset = $datetime->format('P');
7452
		} else $offset = '+00:00';
7453
		
7454
		if ($globalDBdriver == 'mysql') {
7455
			$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
7456
					FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
7457
					GROUP BY route
7458
					ORDER BY route_count DESC";
7459
		} else {
7460
			$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
7461
					FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
7462
					GROUP BY route
7463
					ORDER BY route_count DESC";
7464
		}
7465
		
7466
		$sth = $this->db->prepare($query);
7467
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7468
      
7469
		$routes_array = array();
7470
		$temp_array = array();
7471
        
7472
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7473
		{
7474
			$temp_array['route_count'] = $row['route_count'];
7475
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7476
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7477
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7478
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7479
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7480
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7481
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7482
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7483
          
7484
			$routes_array[] = $temp_array;
7485
		}
7486
7487
		return $routes_array;
7488
	}
7489
	
7490
	
7491
	/**
7492
	* Gets all route combinations based on an ident/callsign
7493
	*
7494
	* @return Array the route list
7495
	*
7496
	*/
7497
	public function countAllRoutesByIdent($ident, $filters = array())
7498
	{
7499
		$filter_query = $this->getFilter($filters,true,true);
7500
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7501
		$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
7502
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
7503
                    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
7504
                    ORDER BY route_count DESC";
7505
      
7506
		
7507
		$sth = $this->db->prepare($query);
7508
		$sth->execute(array(':ident' => $ident));
7509
      
7510
		$routes_array = array();
7511
		$temp_array = array();
7512
        
7513
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7514
		{
7515
			$temp_array['route_count'] = $row['route_count'];
7516
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7517
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7518
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7519
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7520
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7521
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7522
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7523
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7524
          
7525
			$routes_array[] = $temp_array;
7526
		}
7527
7528
		return $routes_array;
7529
	}
7530
	
7531
	
7532
	/**
7533
	* Gets all route combinations based on an manufacturer
7534
	*
7535
	* @return Array the route list
7536
	*
7537
	*/
7538
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
7539
	{
7540
		$filter_query = $this->getFilter($filters,true,true);
7541
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7542
		$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
7543
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
7544
                    GROUP BY route
7545
                    ORDER BY route_count DESC";
7546
      
7547
		
7548
		$sth = $this->db->prepare($query);
7549
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7550
      
7551
		$routes_array = array();
7552
		$temp_array = array();
7553
        
7554
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7555
		{
7556
			$temp_array['route_count'] = $row['route_count'];
7557
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7558
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7559
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7560
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7561
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7562
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7563
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7564
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7565
          
7566
			$routes_array[] = $temp_array;
7567
		}
7568
7569
		return $routes_array;
7570
	}
7571
7572
	
7573
	
7574
	/**
7575
	* Gets all route combinations with waypoints
7576
	*
7577
	* @return Array the route list
7578
	*
7579
	*/
7580
	public function countAllRoutesWithWaypoints($filters = array())
7581
	{
7582
		$filter_query = $this->getFilter($filters,true,true);
7583
		$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
7584
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
7585
                    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
7586
                    ORDER BY route_count DESC
7587
		    LIMIT 10 OFFSET 0";
7588
      
7589
		
7590
		$sth = $this->db->prepare($query);
7591
		$sth->execute();
7592
      
7593
		$routes_array = array();
7594
		$temp_array = array();
7595
        
7596
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7597
		{
7598
			$temp_array['spotter_id'] = $row['spotter_id'];
7599
			$temp_array['route_count'] = $row['route_count'];
7600
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7601
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7602
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7603
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7604
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7605
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7606
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7607
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7608
          
7609
			$routes_array[] = $temp_array;
7610
		}
7611
7612
		return $routes_array;
7613
	}
7614
	
7615
	/**
7616
	* Gets all callsigns that have flown over
7617
	*
7618
	* @return Array the callsign list
7619
	*
7620
	*/
7621
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
7622
	{
7623
		global $globalDBdriver;
7624
		$filter_query = $this->getFilter($filters,true,true);
7625
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
7626
                    FROM spotter_output".$filter_query." spotter_output.ident <> '' ";
7627
		 if ($olderthanmonths > 0) {
7628
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
7629
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7630
		}
7631
		if ($sincedate != '') {
7632
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
7633
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7634
		}
7635
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7636
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7637
      		
7638
		$sth = $this->db->prepare($query);
7639
		$sth->execute();
7640
      
7641
		$callsign_array = array();
7642
		$temp_array = array();
7643
        
7644
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7645
		{
7646
			$temp_array['callsign_icao'] = $row['ident'];
7647
			$temp_array['airline_name'] = $row['airline_name'];
7648
			$temp_array['airline_icao'] = $row['airline_icao'];
7649
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7650
          
7651
			$callsign_array[] = $temp_array;
7652
		}
7653
7654
		return $callsign_array;
7655
	}
7656
7657
	/**
7658
	* Gets all callsigns that have flown over
7659
	*
7660
	* @return Array the callsign list
7661
	*
7662
	*/
7663
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
7664
	{
7665
		global $globalDBdriver;
7666
		$filter_query = $this->getFilter($filters,true,true);
7667
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
7668
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
7669
		 if ($olderthanmonths > 0) {
7670
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7671
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7672
		}
7673
		if ($sincedate != '') {
7674
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
7675
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
7676
		}
7677
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7678
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7679
      		
7680
		$sth = $this->db->prepare($query);
7681
		$sth->execute();
7682
      
7683
		$callsign_array = array();
7684
		$temp_array = array();
7685
        
7686
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7687
		{
7688
			$temp_array['callsign_icao'] = $row['ident'];
7689
			$temp_array['airline_name'] = $row['airline_name'];
7690
			$temp_array['airline_icao'] = $row['airline_icao'];
7691
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7692
          
7693
			$callsign_array[] = $temp_array;
7694
		}
7695
7696
		return $callsign_array;
7697
	}
7698
7699
7700
7701
7702
	/**
7703
	* Counts all dates
7704
	*
7705
	* @return Array the date list
7706
	*
7707
	*/
7708
	public function countAllDates($filters = array())
7709
	{
7710
		global $globalTimezone, $globalDBdriver;
7711
		if ($globalTimezone != '') {
7712
			date_default_timezone_set($globalTimezone);
7713
			$datetime = new DateTime();
7714
			$offset = $datetime->format('P');
7715
		} else $offset = '+00:00';
7716
7717
		if ($globalDBdriver == 'mysql') {
7718
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7719
								FROM spotter_output";
7720
			$query .= $this->getFilter($filters);
7721
			$query .= " GROUP BY date_name 
7722
								ORDER BY date_count DESC
7723
								LIMIT 10 OFFSET 0";
7724
		} else {
7725
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7726
								FROM spotter_output";
7727
			$query .= $this->getFilter($filters);
7728
			$query .= " GROUP BY date_name 
7729
								ORDER BY date_count DESC
7730
								LIMIT 10 OFFSET 0";
7731
		}
7732
      
7733
		
7734
		$sth = $this->db->prepare($query);
7735
		$sth->execute(array(':offset' => $offset));
7736
      
7737
		$date_array = array();
7738
		$temp_array = array();
7739
        
7740
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7741
		{
7742
			$temp_array['date_name'] = $row['date_name'];
7743
			$temp_array['date_count'] = $row['date_count'];
7744
7745
			$date_array[] = $temp_array;
7746
		}
7747
7748
		return $date_array;
7749
	}
7750
	
7751
	/**
7752
	* Counts all dates
7753
	*
7754
	* @return Array the date list
7755
	*
7756
	*/
7757
	public function countAllDatesByAirlines($filters = array())
7758
	{
7759
		global $globalTimezone, $globalDBdriver;
7760
		if ($globalTimezone != '') {
7761
			date_default_timezone_set($globalTimezone);
7762
			$datetime = new DateTime();
7763
			$offset = $datetime->format('P');
7764
		} else $offset = '+00:00';
7765
		$filter_query = $this->getFilter($filters,true,true);
7766
		if ($globalDBdriver == 'mysql') {
7767
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7768
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
7769
								GROUP BY spotter_output.airline_icao, date_name 
7770
								ORDER BY date_count DESC
7771
								LIMIT 10 OFFSET 0";
7772
		} else {
7773
			$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
7774
								FROM spotter_output 
7775
								WHERE spotter_output.airline_icao <> '' 
7776
								GROUP BY spotter_output.airline_icao, date_name 
7777
								ORDER BY date_count DESC
7778
								LIMIT 10 OFFSET 0";
7779
		}
7780
      
7781
		
7782
		$sth = $this->db->prepare($query);
7783
		$sth->execute(array(':offset' => $offset));
7784
      
7785
		$date_array = array();
7786
		$temp_array = array();
7787
        
7788
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7789
		{
7790
			$temp_array['date_name'] = $row['date_name'];
7791
			$temp_array['date_count'] = $row['date_count'];
7792
			$temp_array['airline_icao'] = $row['airline_icao'];
7793
7794
			$date_array[] = $temp_array;
7795
		}
7796
7797
		return $date_array;
7798
	}	
7799
	
7800
	/**
7801
	* Counts all dates during the last 7 days
7802
	*
7803
	* @return Array the date list
7804
	*
7805
	*/
7806
	public function countAllDatesLast7Days($filters = array())
7807
	{
7808
		global $globalTimezone, $globalDBdriver;
7809
		if ($globalTimezone != '') {
7810
			date_default_timezone_set($globalTimezone);
7811
			$datetime = new DateTime();
7812
			$offset = $datetime->format('P');
7813
		} else $offset = '+00:00';
7814
		$filter_query = $this->getFilter($filters,true,true);
7815
		if ($globalDBdriver == 'mysql') {
7816
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7817
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
7818
			$query .= " GROUP BY date_name 
7819
								ORDER BY spotter_output.date ASC";
7820
			$query_data = array(':offset' => $offset);
7821
		} else {
7822
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7823
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
7824
			$query .= " GROUP BY date_name 
7825
								ORDER BY date_name ASC";
7826
			$query_data = array(':offset' => $offset);
7827
    		}
7828
		
7829
		$sth = $this->db->prepare($query);
7830
		$sth->execute($query_data);
7831
      
7832
		$date_array = array();
7833
		$temp_array = array();
7834
        
7835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7836
		{
7837
			$temp_array['date_name'] = $row['date_name'];
7838
			$temp_array['date_count'] = $row['date_count'];
7839
          
7840
			$date_array[] = $temp_array;
7841
		}
7842
7843
		return $date_array;
7844
	}
7845
7846
	/**
7847
	* Counts all dates during the last month
7848
	*
7849
	* @return Array the date list
7850
	*
7851
	*/
7852
	public function countAllDatesLastMonth($filters = array())
7853
	{
7854
		global $globalTimezone, $globalDBdriver;
7855
		if ($globalTimezone != '') {
7856
			date_default_timezone_set($globalTimezone);
7857
			$datetime = new DateTime();
7858
			$offset = $datetime->format('P');
7859
		} else $offset = '+00:00';
7860
		$filter_query = $this->getFilter($filters,true,true);
7861
		if ($globalDBdriver == 'mysql') {
7862
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7863
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
7864
			$query .= " GROUP BY date_name 
7865
								ORDER BY spotter_output.date ASC";
7866
			$query_data = array(':offset' => $offset);
7867
		} else {
7868
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7869
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
7870
			$query .= " GROUP BY date_name 
7871
								ORDER BY date_name ASC";
7872
			$query_data = array(':offset' => $offset);
7873
    		}
7874
		
7875
		$sth = $this->db->prepare($query);
7876
		$sth->execute($query_data);
7877
      
7878
		$date_array = array();
7879
		$temp_array = array();
7880
        
7881
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7882
		{
7883
			$temp_array['date_name'] = $row['date_name'];
7884
			$temp_array['date_count'] = $row['date_count'];
7885
          
7886
			$date_array[] = $temp_array;
7887
		}
7888
7889
		return $date_array;
7890
	}
7891
7892
7893
	/**
7894
	* Counts all dates during the last month
7895
	*
7896
	* @return Array the date list
7897
	*
7898
	*/
7899
	public function countAllDatesLastMonthByAirlines($filters = array())
7900
	{
7901
		global $globalTimezone, $globalDBdriver;
7902
		$filter_query = $this->getFilter($filters,true,true);
7903
		if ($globalTimezone != '') {
7904
			date_default_timezone_set($globalTimezone);
7905
			$datetime = new DateTime();
7906
			$offset = $datetime->format('P');
7907
		} else $offset = '+00:00';
7908
		
7909
		if ($globalDBdriver == 'mysql') {
7910
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7911
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
7912
								GROUP BY spotter_output.airline_icao, date_name 
7913
								ORDER BY spotter_output.date ASC";
7914
			$query_data = array(':offset' => $offset);
7915
		} else {
7916
			$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
7917
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
7918
								GROUP BY spotter_output.airline_icao, date_name 
7919
								ORDER BY date_name ASC";
7920
			$query_data = array(':offset' => $offset);
7921
    		}
7922
		
7923
		$sth = $this->db->prepare($query);
7924
		$sth->execute($query_data);
7925
      
7926
		$date_array = array();
7927
		$temp_array = array();
7928
        
7929
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7930
		{
7931
			$temp_array['date_name'] = $row['date_name'];
7932
			$temp_array['date_count'] = $row['date_count'];
7933
			$temp_array['airline_icao'] = $row['airline_icao'];
7934
          
7935
			$date_array[] = $temp_array;
7936
		}
7937
7938
		return $date_array;
7939
	}
7940
	
7941
7942
	/**
7943
	* Counts all month
7944
	*
7945
	* @return Array the month list
7946
	*
7947
	*/
7948
	public function countAllMonths($filters = array())
7949
	{
7950
		global $globalTimezone, $globalDBdriver;
7951
		if ($globalTimezone != '') {
7952
			date_default_timezone_set($globalTimezone);
7953
			$datetime = new DateTime();
7954
			$offset = $datetime->format('P');
7955
		} else $offset = '+00:00';
7956
7957
		if ($globalDBdriver == 'mysql') {
7958
			$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
7959
								FROM spotter_output";
7960
			$query .= $this->getFilter($filters);
7961
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
7962
		} else {
7963
			$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
7964
								FROM spotter_output";
7965
			$query .= $this->getFilter($filters);
7966
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
7967
		}
7968
      
7969
		
7970
		$sth = $this->db->prepare($query);
7971
		$sth->execute(array(':offset' => $offset));
7972
      
7973
		$date_array = array();
7974
		$temp_array = array();
7975
        
7976
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7977
		{
7978
			$temp_array['month_name'] = $row['month_name'];
7979
			$temp_array['year_name'] = $row['year_name'];
7980
			$temp_array['date_count'] = $row['date_count'];
7981
7982
			$date_array[] = $temp_array;
7983
		}
7984
7985
		return $date_array;
7986
	}
7987
7988
	/**
7989
	* Counts all month
7990
	*
7991
	* @return Array the month list
7992
	*
7993
	*/
7994
	public function countAllMonthsByAirlines($filters = array())
7995
	{
7996
		global $globalTimezone, $globalDBdriver;
7997
		$filter_query = $this->getFilter($filters,true,true);
7998
		if ($globalTimezone != '') {
7999
			date_default_timezone_set($globalTimezone);
8000
			$datetime = new DateTime();
8001
			$offset = $datetime->format('P');
8002
		} else $offset = '+00:00';
8003
8004
		if ($globalDBdriver == 'mysql') {
8005
			$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
8006
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8007
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8008
								ORDER BY date_count DESC";
8009
		} else {
8010
			$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
8011
								FROM spotter_output 
8012
								WHERE spotter_output.airline_icao <> '' 
8013
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8014
								ORDER BY date_count DESC";
8015
		}
8016
      
8017
		
8018
		$sth = $this->db->prepare($query);
8019
		$sth->execute(array(':offset' => $offset));
8020
      
8021
		$date_array = array();
8022
		$temp_array = array();
8023
        
8024
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8025
		{
8026
			$temp_array['month_name'] = $row['month_name'];
8027
			$temp_array['year_name'] = $row['year_name'];
8028
			$temp_array['date_count'] = $row['date_count'];
8029
			$temp_array['airline_icao'] = $row['airline_icao'];
8030
8031
			$date_array[] = $temp_array;
8032
		}
8033
8034
		return $date_array;
8035
	}
8036
8037
	/**
8038
	* Counts all military month
8039
	*
8040
	* @return Array the month list
8041
	*
8042
	*/
8043
	public function countAllMilitaryMonths($filters = array())
8044
	{
8045
		global $globalTimezone, $globalDBdriver;
8046
		if ($globalTimezone != '') {
8047
			date_default_timezone_set($globalTimezone);
8048
			$datetime = new DateTime();
8049
			$offset = $datetime->format('P');
8050
		} else $offset = '+00:00';
8051
		$filter_query = $this->getFilter($filters,true,true);
8052
		if ($globalDBdriver == 'mysql') {
8053
			$query  = "SELECT YEAR(CONVERT_TZ(s.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(s.date,'+00:00', :offset)) AS month_name, count(*) as date_count
8054
								FROM spotter_output s".$filter_query." s.airline_type = 'military'
8055
								GROUP BY year_name, month_name 
8056
								ORDER BY date_count DESC";
8057
		} else {
8058
			$query  = "SELECT EXTRACT(YEAR FROM s.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM s.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
8059
								FROM spotter_output s".$filter_query." s.airline_type = 'military'
8060
								GROUP BY year_name, month_name 
8061
								ORDER BY date_count DESC";
8062
		}
8063
		
8064
		$sth = $this->db->prepare($query);
8065
		$sth->execute(array(':offset' => $offset));
8066
      
8067
		$date_array = array();
8068
		$temp_array = array();
8069
        
8070
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8071
		{
8072
			$temp_array['month_name'] = $row['month_name'];
8073
			$temp_array['year_name'] = $row['year_name'];
8074
			$temp_array['date_count'] = $row['date_count'];
8075
8076
			$date_array[] = $temp_array;
8077
		}
8078
8079
		return $date_array;
8080
	}
8081
	
8082
	/**
8083
	* Counts all month owners
8084
	*
8085
	* @return Array the month list
8086
	*
8087
	*/
8088
	public function countAllMonthsOwners($filters = array())
8089
	{
8090
		global $globalTimezone, $globalDBdriver;
8091
		if ($globalTimezone != '') {
8092
			date_default_timezone_set($globalTimezone);
8093
			$datetime = new DateTime();
8094
			$offset = $datetime->format('P');
8095
		} else $offset = '+00:00';
8096
		$filter_query = $this->getFilter($filters,true,true);
8097
8098
		if ($globalDBdriver == 'mysql') {
8099
			$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
8100
								FROM spotter_output".$filter_query." owner_name <> ''
8101
								GROUP BY year_name, month_name
8102
								ORDER BY date_count DESC";
8103
		} else {
8104
			$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
8105
								FROM spotter_output".$filter_query." owner_name <> ''
8106
								GROUP BY year_name, month_name
8107
								ORDER BY date_count DESC";
8108
		}
8109
		
8110
		$sth = $this->db->prepare($query);
8111
		$sth->execute(array(':offset' => $offset));
8112
      
8113
		$date_array = array();
8114
		$temp_array = array();
8115
        
8116
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8117
		{
8118
			$temp_array['month_name'] = $row['month_name'];
8119
			$temp_array['year_name'] = $row['year_name'];
8120
			$temp_array['date_count'] = $row['date_count'];
8121
8122
			$date_array[] = $temp_array;
8123
		}
8124
8125
		return $date_array;
8126
	}
8127
	
8128
	/**
8129
	* Counts all month owners
8130
	*
8131
	* @return Array the month list
8132
	*
8133
	*/
8134
	public function countAllMonthsOwnersByAirlines($filters = array())
8135
	{
8136
		global $globalTimezone, $globalDBdriver;
8137
		$filter_query = $this->getFilter($filters,true,true);
8138
		if ($globalTimezone != '') {
8139
			date_default_timezone_set($globalTimezone);
8140
			$datetime = new DateTime();
8141
			$offset = $datetime->format('P');
8142
		} else $offset = '+00:00';
8143
8144
		if ($globalDBdriver == 'mysql') {
8145
			$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
8146
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8147
								GROUP BY spotter_output.airline_icao, year_name, month_name
8148
								ORDER BY date_count DESC";
8149
		} else {
8150
			$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
8151
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8152
								GROUP BY spotter_output.airline_icao, year_name, month_name
8153
								ORDER BY date_count DESC";
8154
		}
8155
		
8156
		$sth = $this->db->prepare($query);
8157
		$sth->execute(array(':offset' => $offset));
8158
      
8159
		$date_array = array();
8160
		$temp_array = array();
8161
        
8162
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8163
		{
8164
			$temp_array['month_name'] = $row['month_name'];
8165
			$temp_array['year_name'] = $row['year_name'];
8166
			$temp_array['date_count'] = $row['date_count'];
8167
			$temp_array['airline_icao'] = $row['airline_icao'];
8168
8169
			$date_array[] = $temp_array;
8170
		}
8171
8172
		return $date_array;
8173
	}
8174
8175
	/**
8176
	* Counts all month pilot
8177
	*
8178
	* @return Array the month list
8179
	*
8180
	*/
8181
	public function countAllMonthsPilots($filters = array())
8182
	{
8183
		global $globalTimezone, $globalDBdriver;
8184
		if ($globalTimezone != '') {
8185
			date_default_timezone_set($globalTimezone);
8186
			$datetime = new DateTime();
8187
			$offset = $datetime->format('P');
8188
		} else $offset = '+00:00';
8189
		$filter_query = $this->getFilter($filters,true,true);
8190
8191
		if ($globalDBdriver == 'mysql') {
8192
			$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
8193
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8194
								GROUP BY year_name, month_name
8195
								ORDER BY date_count DESC";
8196
		} else {
8197
			$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
8198
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8199
								GROUP BY year_name, month_name
8200
								ORDER BY date_count DESC";
8201
		}
8202
		
8203
		$sth = $this->db->prepare($query);
8204
		$sth->execute(array(':offset' => $offset));
8205
      
8206
		$date_array = array();
8207
		$temp_array = array();
8208
        
8209
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8210
		{
8211
			$temp_array['month_name'] = $row['month_name'];
8212
			$temp_array['year_name'] = $row['year_name'];
8213
			$temp_array['date_count'] = $row['date_count'];
8214
8215
			$date_array[] = $temp_array;
8216
		}
8217
8218
		return $date_array;
8219
	}
8220
	
8221
	/**
8222
	* Counts all month pilot
8223
	*
8224
	* @return Array the month list
8225
	*
8226
	*/
8227
	public function countAllMonthsPilotsByAirlines($filters = array())
8228
	{
8229
		global $globalTimezone, $globalDBdriver;
8230
		$filter_query = $this->getFilter($filters,true,true);
8231
		if ($globalTimezone != '') {
8232
			date_default_timezone_set($globalTimezone);
8233
			$datetime = new DateTime();
8234
			$offset = $datetime->format('P');
8235
		} else $offset = '+00:00';
8236
8237
		if ($globalDBdriver == 'mysql') {
8238
			$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
8239
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8240
								GROUP BY spotter_output.airline_icao,year_name, month_name
8241
								ORDER BY date_count DESC";
8242
		} else {
8243
			$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
8244
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8245
								GROUP BY spotter_output.airline_icao, year_name, month_name
8246
								ORDER BY date_count DESC";
8247
		}
8248
		
8249
		$sth = $this->db->prepare($query);
8250
		$sth->execute(array(':offset' => $offset));
8251
      
8252
		$date_array = array();
8253
		$temp_array = array();
8254
        
8255
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8256
		{
8257
			$temp_array['month_name'] = $row['month_name'];
8258
			$temp_array['year_name'] = $row['year_name'];
8259
			$temp_array['date_count'] = $row['date_count'];
8260
			$temp_array['airline_icao'] = $row['airline_icao'];
8261
8262
			$date_array[] = $temp_array;
8263
		}
8264
8265
		return $date_array;
8266
	}
8267
8268
	/**
8269
	* Counts all month airline
8270
	*
8271
	* @return Array the month list
8272
	*
8273
	*/
8274
	public function countAllMonthsAirlines($filters = array())
8275
	{
8276
		global $globalTimezone, $globalDBdriver;
8277
		$filter_query = $this->getFilter($filters,true,true);
8278
		if ($globalTimezone != '') {
8279
			date_default_timezone_set($globalTimezone);
8280
			$datetime = new DateTime();
8281
			$offset = $datetime->format('P');
8282
		} else $offset = '+00:00';
8283
8284
		if ($globalDBdriver == 'mysql') {
8285
			$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
8286
								FROM spotter_output".$filter_query." airline_icao <> '' 
8287
								GROUP BY year_name, month_name
8288
								ORDER BY date_count DESC";
8289
		} else {
8290
			$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
8291
								FROM spotter_output".$filter_query." airline_icao <> '' 
8292
								GROUP BY year_name, month_name
8293
								ORDER BY date_count DESC";
8294
		}
8295
		
8296
		$sth = $this->db->prepare($query);
8297
		$sth->execute(array(':offset' => $offset));
8298
      
8299
		$date_array = array();
8300
		$temp_array = array();
8301
        
8302
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8303
		{
8304
			$temp_array['month_name'] = $row['month_name'];
8305
			$temp_array['year_name'] = $row['year_name'];
8306
			$temp_array['date_count'] = $row['date_count'];
8307
8308
			$date_array[] = $temp_array;
8309
		}
8310
8311
		return $date_array;
8312
	}
8313
	
8314
	/**
8315
	* Counts all month aircraft
8316
	*
8317
	* @return Array the month list
8318
	*
8319
	*/
8320
	public function countAllMonthsAircrafts($filters = array())
8321
	{
8322
		global $globalTimezone, $globalDBdriver;
8323
		if ($globalTimezone != '') {
8324
			date_default_timezone_set($globalTimezone);
8325
			$datetime = new DateTime();
8326
			$offset = $datetime->format('P');
8327
		} else $offset = '+00:00';
8328
		$filter_query = $this->getFilter($filters,true,true);
8329
8330
		if ($globalDBdriver == 'mysql') {
8331
			$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
8332
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
8333
								GROUP BY year_name, month_name
8334
								ORDER BY date_count DESC";
8335
		} else {
8336
			$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
8337
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
8338
								GROUP BY year_name, month_name
8339
								ORDER BY date_count DESC";
8340
		}
8341
		
8342
		$sth = $this->db->prepare($query);
8343
		$sth->execute(array(':offset' => $offset));
8344
      
8345
		$date_array = array();
8346
		$temp_array = array();
8347
        
8348
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8349
		{
8350
			$temp_array['month_name'] = $row['month_name'];
8351
			$temp_array['year_name'] = $row['year_name'];
8352
			$temp_array['date_count'] = $row['date_count'];
8353
8354
			$date_array[] = $temp_array;
8355
		}
8356
8357
		return $date_array;
8358
	}
8359
	
8360
8361
	/**
8362
	* Counts all month aircraft
8363
	*
8364
	* @return Array the month list
8365
	*
8366
	*/
8367
	public function countAllMonthsAircraftsByAirlines($filters = array())
8368
	{
8369
		global $globalTimezone, $globalDBdriver;
8370
		$filter_query = $this->getFilter($filters,true,true);
8371
		if ($globalTimezone != '') {
8372
			date_default_timezone_set($globalTimezone);
8373
			$datetime = new DateTime();
8374
			$offset = $datetime->format('P');
8375
		} else $offset = '+00:00';
8376
8377
		if ($globalDBdriver == 'mysql') {
8378
			$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
8379
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
8380
								GROUP BY spotter_output.airline_icao, year_name, month_name
8381
								ORDER BY date_count DESC";
8382
		} else {
8383
			$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
8384
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
8385
								GROUP BY spotter_output.airline_icao, year_name, month_name
8386
								ORDER BY date_count DESC";
8387
		}
8388
		
8389
		$sth = $this->db->prepare($query);
8390
		$sth->execute(array(':offset' => $offset));
8391
      
8392
		$date_array = array();
8393
		$temp_array = array();
8394
        
8395
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8396
		{
8397
			$temp_array['month_name'] = $row['month_name'];
8398
			$temp_array['year_name'] = $row['year_name'];
8399
			$temp_array['date_count'] = $row['date_count'];
8400
			$temp_array['airline_icao'] = $row['airline_icao'];
8401
8402
			$date_array[] = $temp_array;
8403
		}
8404
8405
		return $date_array;
8406
	}
8407
8408
	/**
8409
	* Counts all month real arrival
8410
	*
8411
	* @return Array the month list
8412
	*
8413
	*/
8414
	public function countAllMonthsRealArrivals($filters = array())
8415
	{
8416
		global $globalTimezone, $globalDBdriver;
8417
		if ($globalTimezone != '') {
8418
			date_default_timezone_set($globalTimezone);
8419
			$datetime = new DateTime();
8420
			$offset = $datetime->format('P');
8421
		} else $offset = '+00:00';
8422
		$filter_query = $this->getFilter($filters,true,true);
8423
8424
		if ($globalDBdriver == 'mysql') {
8425
			$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
8426
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
8427
								GROUP BY year_name, month_name
8428
								ORDER BY date_count DESC";
8429
		} else {
8430
			$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
8431
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
8432
								GROUP BY year_name, month_name
8433
								ORDER BY date_count DESC";
8434
		}
8435
		
8436
		$sth = $this->db->prepare($query);
8437
		$sth->execute(array(':offset' => $offset));
8438
      
8439
		$date_array = array();
8440
		$temp_array = array();
8441
        
8442
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8443
		{
8444
			$temp_array['month_name'] = $row['month_name'];
8445
			$temp_array['year_name'] = $row['year_name'];
8446
			$temp_array['date_count'] = $row['date_count'];
8447
8448
			$date_array[] = $temp_array;
8449
		}
8450
8451
		return $date_array;
8452
	}
8453
	
8454
8455
	/**
8456
	* Counts all month real arrival
8457
	*
8458
	* @return Array the month list
8459
	*
8460
	*/
8461
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
8462
	{
8463
		global $globalTimezone, $globalDBdriver;
8464
		$filter_query = $this->getFilter($filters,true,true);
8465
		if ($globalTimezone != '') {
8466
			date_default_timezone_set($globalTimezone);
8467
			$datetime = new DateTime();
8468
			$offset = $datetime->format('P');
8469
		} else $offset = '+00:00';
8470
8471
		if ($globalDBdriver == 'mysql') {
8472
			$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
8473
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
8474
								GROUP BY spotter_output.airline_icao, year_name, month_name
8475
								ORDER BY date_count DESC";
8476
		} else {
8477
			$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
8478
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
8479
								GROUP BY spotter_output.airline_icao, year_name, month_name
8480
								ORDER BY date_count DESC";
8481
		}
8482
		
8483
		$sth = $this->db->prepare($query);
8484
		$sth->execute(array(':offset' => $offset));
8485
      
8486
		$date_array = array();
8487
		$temp_array = array();
8488
        
8489
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8490
		{
8491
			$temp_array['month_name'] = $row['month_name'];
8492
			$temp_array['year_name'] = $row['year_name'];
8493
			$temp_array['date_count'] = $row['date_count'];
8494
			$temp_array['airline_icao'] = $row['airline_icao'];
8495
8496
			$date_array[] = $temp_array;
8497
		}
8498
8499
		return $date_array;
8500
	}
8501
	
8502
8503
	/**
8504
	* Counts all dates during the last year
8505
	*
8506
	* @return Array the date list
8507
	*
8508
	*/
8509
	public function countAllMonthsLastYear($filters)
8510
	{
8511
		global $globalTimezone, $globalDBdriver;
8512
		if ($globalTimezone != '') {
8513
			date_default_timezone_set($globalTimezone);
8514
			$datetime = new DateTime();
8515
			$offset = $datetime->format('P');
8516
		} else $offset = '+00:00';
8517
		$filter_query = $this->getFilter($filters,true,true);
8518
		if ($globalDBdriver == 'mysql') {
8519
			$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
8520
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
8521
			$query .= " GROUP BY year_name, month_name
8522
								ORDER BY year_name, month_name ASC";
8523
			$query_data = array(':offset' => $offset);
8524
		} else {
8525
			$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
8526
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
8527
			$query .= " GROUP BY year_name, month_name
8528
								ORDER BY year_name, month_name ASC";
8529
			$query_data = array(':offset' => $offset);
8530
    		}
8531
		
8532
		$sth = $this->db->prepare($query);
8533
		$sth->execute($query_data);
8534
      
8535
		$date_array = array();
8536
		$temp_array = array();
8537
        
8538
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8539
		{
8540
			$temp_array['year_name'] = $row['year_name'];
8541
			$temp_array['month_name'] = $row['month_name'];
8542
			$temp_array['date_count'] = $row['date_count'];
8543
          
8544
			$date_array[] = $temp_array;
8545
		}
8546
8547
		return $date_array;
8548
	}
8549
	
8550
	
8551
	
8552
	/**
8553
	* Counts all hours
8554
	*
8555
	* @return Array the hour list
8556
	*
8557
	*/
8558
	public function countAllHours($orderby,$filters = array())
8559
	{
8560
		global $globalTimezone, $globalDBdriver;
8561
		if ($globalTimezone != '') {
8562
			date_default_timezone_set($globalTimezone);
8563
			$datetime = new DateTime();
8564
			$offset = $datetime->format('P');
8565
		} else $offset = '+00:00';
8566
8567
		$orderby_sql = '';
8568
		if ($orderby == "hour")
8569
		{
8570
			$orderby_sql = "ORDER BY hour_name ASC";
8571
		}
8572
		if ($orderby == "count")
8573
		{
8574
			$orderby_sql = "ORDER BY hour_count DESC";
8575
		}
8576
		
8577
		if ($globalDBdriver == 'mysql') {
8578
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8579
								FROM spotter_output";
8580
			$query .= $this->getFilter($filters);
8581
			$query .= " GROUP BY hour_name 
8582
								".$orderby_sql;
8583
8584
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
8585
								FROM spotter_output 
8586
								GROUP BY hour_name 
8587
								".$orderby_sql."
8588
								LIMIT 10 OFFSET 00";
8589
  */    
8590
		$query_data = array(':offset' => $offset);
8591
		} else {
8592
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8593
								FROM spotter_output";
8594
			$query .= $this->getFilter($filters);
8595
			$query .= " GROUP BY hour_name 
8596
								".$orderby_sql;
8597
			$query_data = array(':offset' => $offset);
8598
		}
8599
		
8600
		$sth = $this->db->prepare($query);
8601
		$sth->execute($query_data);
8602
      
8603
		$hour_array = array();
8604
		$temp_array = array();
8605
        
8606
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8607
		{
8608
			$temp_array['hour_name'] = $row['hour_name'];
8609
			$temp_array['hour_count'] = $row['hour_count'];
8610
          
8611
			$hour_array[] = $temp_array;
8612
		}
8613
8614
		return $hour_array;
8615
	}
8616
	
8617
	/**
8618
	* Counts all hours
8619
	*
8620
	* @return Array the hour list
8621
	*
8622
	*/
8623
	public function countAllHoursByAirlines($orderby, $filters = array())
8624
	{
8625
		global $globalTimezone, $globalDBdriver;
8626
		$filter_query = $this->getFilter($filters,true,true);
8627
		if ($globalTimezone != '') {
8628
			date_default_timezone_set($globalTimezone);
8629
			$datetime = new DateTime();
8630
			$offset = $datetime->format('P');
8631
		} else $offset = '+00:00';
8632
8633
		$orderby_sql = '';
8634
		if ($orderby == "hour")
8635
		{
8636
			$orderby_sql = "ORDER BY hour_name ASC";
8637
		}
8638
		if ($orderby == "count")
8639
		{
8640
			$orderby_sql = "ORDER BY hour_count DESC";
8641
		}
8642
		
8643
		if ($globalDBdriver == 'mysql') {
8644
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8645
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8646
								GROUP BY spotter_output.airline_icao, hour_name 
8647
								".$orderby_sql;
8648
8649
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
8650
								FROM spotter_output 
8651
								GROUP BY hour_name 
8652
								".$orderby_sql."
8653
								LIMIT 10 OFFSET 00";
8654
  */    
8655
		$query_data = array(':offset' => $offset);
8656
		} else {
8657
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8658
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8659
								GROUP BY spotter_output.airline_icao, hour_name 
8660
								".$orderby_sql;
8661
			$query_data = array(':offset' => $offset);
8662
		}
8663
		
8664
		$sth = $this->db->prepare($query);
8665
		$sth->execute($query_data);
8666
      
8667
		$hour_array = array();
8668
		$temp_array = array();
8669
        
8670
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8671
		{
8672
			$temp_array['hour_name'] = $row['hour_name'];
8673
			$temp_array['hour_count'] = $row['hour_count'];
8674
			$temp_array['airline_icao'] = $row['airline_icao'];
8675
          
8676
			$hour_array[] = $temp_array;
8677
		}
8678
8679
		return $hour_array;
8680
	}
8681
8682
8683
8684
	/**
8685
	* Counts all hours by airline
8686
	*
8687
	* @return Array the hour list
8688
	*
8689
	*/
8690
	public function countAllHoursByAirline($airline_icao, $filters = array())
8691
	{
8692
		global $globalTimezone, $globalDBdriver;
8693
		$filter_query = $this->getFilter($filters,true,true);
8694
		if ($globalTimezone != '') {
8695
			date_default_timezone_set($globalTimezone);
8696
			$datetime = new DateTime();
8697
			$offset = $datetime->format('P');
8698
		} else $offset = '+00:00';
8699
8700
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8701
8702
		if ($globalDBdriver == 'mysql') {
8703
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8704
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
8705
								GROUP BY hour_name 
8706
								ORDER BY hour_name ASC";
8707
		} else {
8708
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8709
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
8710
								GROUP BY hour_name 
8711
								ORDER BY hour_name ASC";
8712
		}
8713
		
8714
		$sth = $this->db->prepare($query);
8715
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
8716
      
8717
		$hour_array = array();
8718
		$temp_array = array();
8719
        
8720
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8721
		{
8722
			$temp_array['hour_name'] = $row['hour_name'];
8723
			$temp_array['hour_count'] = $row['hour_count'];
8724
          
8725
			$hour_array[] = $temp_array;
8726
		}
8727
8728
		return $hour_array;
8729
	}
8730
	
8731
	
8732
	
8733
	
8734
	/**
8735
	* Counts all hours by aircraft
8736
	*
8737
	* @return Array the hour list
8738
	*
8739
	*/
8740
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
8741
	{
8742
		global $globalTimezone, $globalDBdriver;
8743
		$filter_query = $this->getFilter($filters,true,true);
8744
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8745
		if ($globalTimezone != '') {
8746
			date_default_timezone_set($globalTimezone);
8747
			$datetime = new DateTime();
8748
			$offset = $datetime->format('P');
8749
		} else $offset = '+00:00';
8750
8751
		if ($globalDBdriver == 'mysql') {
8752
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8753
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
8754
								GROUP BY hour_name 
8755
								ORDER BY hour_name ASC";
8756
		} else {
8757
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8758
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
8759
								GROUP BY hour_name 
8760
								ORDER BY hour_name ASC";
8761
		}
8762
		
8763
		$sth = $this->db->prepare($query);
8764
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
8765
      
8766
		$hour_array = array();
8767
		$temp_array = array();
8768
        
8769
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8770
		{
8771
			$temp_array['hour_name'] = $row['hour_name'];
8772
			$temp_array['hour_count'] = $row['hour_count'];
8773
          
8774
			$hour_array[] = $temp_array;
8775
		}
8776
8777
		return $hour_array;
8778
	}
8779
	
8780
	
8781
	/**
8782
	* Counts all hours by aircraft registration
8783
	*
8784
	* @return Array the hour list
8785
	*
8786
	*/
8787
	public function countAllHoursByRegistration($registration, $filters = array())
8788
	{
8789
		global $globalTimezone, $globalDBdriver;
8790
		$filter_query = $this->getFilter($filters,true,true);
8791
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8792
		if ($globalTimezone != '') {
8793
			date_default_timezone_set($globalTimezone);
8794
			$datetime = new DateTime();
8795
			$offset = $datetime->format('P');
8796
		} else $offset = '+00:00';
8797
8798
		if ($globalDBdriver == 'mysql') {
8799
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8800
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
8801
								GROUP BY hour_name 
8802
								ORDER BY hour_name ASC";
8803
		} else {
8804
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8805
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
8806
								GROUP BY hour_name 
8807
								ORDER BY hour_name ASC";
8808
		}
8809
		
8810
		$sth = $this->db->prepare($query);
8811
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
8812
      
8813
		$hour_array = array();
8814
		$temp_array = array();
8815
        
8816
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8817
		{
8818
			$temp_array['hour_name'] = $row['hour_name'];
8819
			$temp_array['hour_count'] = $row['hour_count'];
8820
          
8821
			$hour_array[] = $temp_array;
8822
		}
8823
8824
		return $hour_array;
8825
	}
8826
	
8827
	
8828
	/**
8829
	* Counts all hours by airport
8830
	*
8831
	* @return Array the hour list
8832
	*
8833
	*/
8834
	public function countAllHoursByAirport($airport_icao, $filters = array())
8835
	{
8836
		global $globalTimezone, $globalDBdriver;
8837
		$filter_query = $this->getFilter($filters,true,true);
8838
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8839
		if ($globalTimezone != '') {
8840
			date_default_timezone_set($globalTimezone);
8841
			$datetime = new DateTime();
8842
			$offset = $datetime->format('P');
8843
		} else $offset = '+00:00';
8844
8845
		if ($globalDBdriver == 'mysql') {
8846
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8847
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8848
								GROUP BY hour_name 
8849
								ORDER BY hour_name ASC";
8850
		} else {
8851
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8852
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8853
								GROUP BY hour_name 
8854
								ORDER BY hour_name ASC";
8855
		}
8856
		
8857
		$sth = $this->db->prepare($query);
8858
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
8859
      
8860
		$hour_array = array();
8861
		$temp_array = array();
8862
        
8863
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8864
		{
8865
			$temp_array['hour_name'] = $row['hour_name'];
8866
			$temp_array['hour_count'] = $row['hour_count'];
8867
          
8868
			$hour_array[] = $temp_array;
8869
		}
8870
8871
		return $hour_array;
8872
	}
8873
	
8874
	
8875
	
8876
	/**
8877
	* Counts all hours by manufacturer
8878
	*
8879
	* @return Array the hour list
8880
	*
8881
	*/
8882
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
8883
	{
8884
		global $globalTimezone, $globalDBdriver;
8885
		$filter_query = $this->getFilter($filters,true,true);
8886
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8887
		if ($globalTimezone != '') {
8888
			date_default_timezone_set($globalTimezone);
8889
			$datetime = new DateTime();
8890
			$offset = $datetime->format('P');
8891
		} else $offset = '+00:00';
8892
8893
		if ($globalDBdriver == 'mysql') {
8894
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8895
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
8896
								GROUP BY hour_name 
8897
								ORDER BY hour_name ASC";
8898
		} else {
8899
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8900
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
8901
								GROUP BY hour_name 
8902
								ORDER BY hour_name ASC";
8903
		}
8904
		
8905
		$sth = $this->db->prepare($query);
8906
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
8907
      
8908
		$hour_array = array();
8909
		$temp_array = array();
8910
        
8911
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8912
		{
8913
			$temp_array['hour_name'] = $row['hour_name'];
8914
			$temp_array['hour_count'] = $row['hour_count'];
8915
          
8916
			$hour_array[] = $temp_array;
8917
		}
8918
8919
		return $hour_array;
8920
	}
8921
	
8922
	
8923
	
8924
	/**
8925
	* Counts all hours by date
8926
	*
8927
	* @return Array the hour list
8928
	*
8929
	*/
8930
	public function countAllHoursByDate($date, $filters = array())
8931
	{
8932
		global $globalTimezone, $globalDBdriver;
8933
		$filter_query = $this->getFilter($filters,true,true);
8934
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8935
		if ($globalTimezone != '') {
8936
			date_default_timezone_set($globalTimezone);
8937
			$datetime = new DateTime($date);
8938
			$offset = $datetime->format('P');
8939
		} else $offset = '+00:00';
8940
8941
		if ($globalDBdriver == 'mysql') {
8942
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8943
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
8944
								GROUP BY hour_name 
8945
								ORDER BY hour_name ASC";
8946
		} else {
8947
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8948
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
8949
								GROUP BY hour_name 
8950
								ORDER BY hour_name ASC";
8951
		}
8952
		
8953
		$sth = $this->db->prepare($query);
8954
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8955
      
8956
		$hour_array = array();
8957
		$temp_array = array();
8958
        
8959
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8960
		{
8961
			$temp_array['hour_name'] = $row['hour_name'];
8962
			$temp_array['hour_count'] = $row['hour_count'];
8963
          
8964
			$hour_array[] = $temp_array;
8965
		}
8966
8967
		return $hour_array;
8968
	}
8969
	
8970
	
8971
	
8972
	/**
8973
	* Counts all hours by a ident/callsign
8974
	*
8975
	* @return Array the hour list
8976
	*
8977
	*/
8978
	public function countAllHoursByIdent($ident, $filters = array())
8979
	{
8980
		global $globalTimezone, $globalDBdriver;
8981
		$filter_query = $this->getFilter($filters,true,true);
8982
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8983
		if ($globalTimezone != '') {
8984
			date_default_timezone_set($globalTimezone);
8985
			$datetime = new DateTime();
8986
			$offset = $datetime->format('P');
8987
		} else $offset = '+00:00';
8988
8989
		if ($globalDBdriver == 'mysql') {
8990
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8991
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
8992
								GROUP BY hour_name 
8993
								ORDER BY hour_name ASC";
8994
		} else {
8995
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8996
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
8997
								GROUP BY hour_name 
8998
								ORDER BY hour_name ASC";
8999
		}
9000
      
9001
		
9002
		$sth = $this->db->prepare($query);
9003
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
9004
      
9005
		$hour_array = array();
9006
		$temp_array = array();
9007
        
9008
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9009
		{
9010
			$temp_array['hour_name'] = $row['hour_name'];
9011
			$temp_array['hour_count'] = $row['hour_count'];
9012
          
9013
			$hour_array[] = $temp_array;
9014
		}
9015
9016
		return $hour_array;
9017
	}
9018
	
9019
	
9020
	
9021
	/**
9022
	* Counts all hours by route
9023
	*
9024
	* @return Array the hour list
9025
	*
9026
	*/
9027
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
9028
	{
9029
		global $globalTimezone, $globalDBdriver;
9030
		$filter_query = $this->getFilter($filters,true,true);
9031
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
9032
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
9033
		if ($globalTimezone != '') {
9034
			date_default_timezone_set($globalTimezone);
9035
			$datetime = new DateTime();
9036
			$offset = $datetime->format('P');
9037
		} else $offset = '+00:00';
9038
9039
		if ($globalDBdriver == 'mysql') {
9040
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9041
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9042
								GROUP BY hour_name 
9043
								ORDER BY hour_name ASC";
9044
		} else {
9045
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9046
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9047
								GROUP BY hour_name 
9048
								ORDER BY hour_name ASC";
9049
		}
9050
		
9051
		$sth = $this->db->prepare($query);
9052
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
9053
      
9054
		$hour_array = array();
9055
		$temp_array = array();
9056
        
9057
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9058
		{
9059
			$temp_array['hour_name'] = $row['hour_name'];
9060
			$temp_array['hour_count'] = $row['hour_count'];
9061
          
9062
			$hour_array[] = $temp_array;
9063
		}
9064
9065
		return $hour_array;
9066
	}
9067
	
9068
	
9069
	/**
9070
	* Counts all hours by country
9071
	*
9072
	* @return Array the hour list
9073
	*
9074
	*/
9075
	public function countAllHoursByCountry($country, $filters = array())
9076
	{
9077
		global $globalTimezone, $globalDBdriver;
9078
		$filter_query = $this->getFilter($filters,true,true);
9079
		$country = filter_var($country,FILTER_SANITIZE_STRING);
9080
		if ($globalTimezone != '') {
9081
			date_default_timezone_set($globalTimezone);
9082
			$datetime = new DateTime();
9083
			$offset = $datetime->format('P');
9084
		} else $offset = '+00:00';
9085
9086
		if ($globalDBdriver == 'mysql') {
9087
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9088
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9089
								GROUP BY hour_name 
9090
								ORDER BY hour_name ASC";
9091
		} else {
9092
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9093
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9094
								GROUP BY hour_name 
9095
								ORDER BY hour_name ASC";
9096
		}
9097
		
9098
		$sth = $this->db->prepare($query);
9099
		$sth->execute(array(':country' => $country,':offset' => $offset));
9100
      
9101
		$hour_array = array();
9102
		$temp_array = array();
9103
        
9104
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9105
		{
9106
			$temp_array['hour_name'] = $row['hour_name'];
9107
			$temp_array['hour_count'] = $row['hour_count'];
9108
          
9109
			$hour_array[] = $temp_array;
9110
		}
9111
9112
		return $hour_array;
9113
	}
9114
9115
9116
9117
9118
	/**
9119
	* Counts all aircraft that have flown over
9120
	*
9121
	* @return Integer the number of aircrafts
9122
	*
9123
	*/
9124
	public function countOverallAircrafts($filters = array())
9125
	{
9126
		$filter_query = $this->getFilter($filters,true,true);
9127
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
9128
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9129
		$sth = $this->db->prepare($query);
9130
		$sth->execute();
9131
		return $sth->fetchColumn();
9132
	}
9133
9134
	/**
9135
	* Counts all flight that really arrival
9136
	*
9137
	* @return Integer the number of aircrafts
9138
	*
9139
	*/
9140
	public function countOverallArrival($filters = array())
9141
	{
9142
		$filter_query = $this->getFilter($filters,true,true);
9143
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
9144
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
9145
		
9146
		$sth = $this->db->prepare($query);
9147
		$sth->execute();
9148
		return $sth->fetchColumn();
9149
	}
9150
9151
	/**
9152
	* Counts all pilots that have flown over
9153
	*
9154
	* @return Integer the number of pilots
9155
	*
9156
	*/
9157
	public function countOverallPilots($filters = array())
9158
	{
9159
		$filter_query = $this->getFilter($filters,true,true);
9160
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
9161
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
9162
		$sth = $this->db->prepare($query);
9163
		$sth->execute();
9164
		return $sth->fetchColumn();
9165
	}
9166
9167
	/**
9168
	* Counts all owners that have flown over
9169
	*
9170
	* @return Integer the number of owners
9171
	*
9172
	*/
9173
	public function countOverallOwners($filters = array())
9174
	{
9175
		$filter_query = $this->getFilter($filters,true,true);
9176
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
9177
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
9178
		$sth = $this->db->prepare($query);
9179
		$sth->execute();
9180
		return $sth->fetchColumn();
9181
	}
9182
	
9183
	
9184
	/**
9185
	* Counts all flights that have flown over
9186
	*
9187
	* @return Integer the number of flights
9188
	*
9189
	*/
9190
	public function countOverallFlights($filters = array())
9191
	{
9192
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
9193
                    FROM spotter_output";
9194
		$query .= $this->getFilter($filters);
9195
		//echo $query;
9196
		$sth = $this->db->prepare($query);
9197
		$sth->execute();
9198
		return $sth->fetchColumn();
9199
	}
9200
	
9201
	/**
9202
	* Counts all military flights that have flown over
9203
	*
9204
	* @return Integer the number of flights
9205
	*
9206
	*/
9207
	public function countOverallMilitaryFlights($filters = array())
9208
	{
9209
		$filter_query = $this->getFilter($filters,true,true);
9210
		$query  = "SELECT COUNT(s.spotter_id) AS flight_count  
9211
                    FROM spotter_output s, airlines a".$filter_query." s.airline_icao = a.icao AND a.type = 'military'";
9212
      
9213
		$sth = $this->db->prepare($query);
9214
		$sth->execute();
9215
		return $sth->fetchColumn();
9216
	}
9217
	
9218
	
9219
	
9220
	/**
9221
	* Counts all airlines that have flown over
9222
	*
9223
	* @return Integer the number of airlines
9224
	*
9225
	*/
9226
	public function countOverallAirlines($filters = array())
9227
	{
9228
		$query  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
9229
							FROM spotter_output";
9230
      
9231
		$query .= $this->getFilter($filters);
9232
		$sth = $this->db->prepare($query);
9233
		$sth->execute();
9234
		return $sth->fetchColumn();
9235
	}
9236
9237
  
9238
	/**
9239
	* Counts all hours of today
9240
	*
9241
	* @return Array the hour list
9242
	*
9243
	*/
9244
	public function countAllHoursFromToday($filters = array())
9245
	{
9246
		global $globalTimezone, $globalDBdriver;
9247
		$filter_query = $this->getFilter($filters,true,true);
9248
		if ($globalTimezone != '') {
9249
			date_default_timezone_set($globalTimezone);
9250
			$datetime = new DateTime();
9251
			$offset = $datetime->format('P');
9252
		} else $offset = '+00:00';
9253
9254
		if ($globalDBdriver == 'mysql') {
9255
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9256
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
9257
								GROUP BY hour_name 
9258
								ORDER BY hour_name ASC";
9259
		} else {
9260
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9261
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
9262
								GROUP BY hour_name 
9263
								ORDER BY hour_name ASC";
9264
		}
9265
		
9266
		$sth = $this->db->prepare($query);
9267
		$sth->execute(array(':offset' => $offset));
9268
      
9269
		$hour_array = array();
9270
		$temp_array = array();
9271
        
9272
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9273
		{
9274
			$temp_array['hour_name'] = $row['hour_name'];
9275
			$temp_array['hour_count'] = $row['hour_count'];
9276
			$hour_array[] = $temp_array;
9277
		}
9278
9279
		return $hour_array;
9280
	}
9281
    
9282
	/**
9283
	* Gets all the spotter information based on calculated upcoming flights
9284
	*
9285
	* @return Array the spotter information
9286
	*
9287
	*/
9288
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
9289
	{
9290
		global $global_query, $globalDBdriver, $globalTimezone;
9291
		$filter_query = $this->getFilter($filters,true,true);
9292
		date_default_timezone_set('UTC');
9293
		$limit_query = '';
9294
		if ($limit != "")
9295
		{
9296
			$limit_array = explode(",", $limit);
9297
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
9298
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
9299
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
9300
			{
9301
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
9302
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
9303
			}
9304
		}
9305
		$currentHour = date("G");
9306
		$next3Hours = date("G", strtotime("+3 hour"));
9307
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
9308
		if ($currentHour >= 21 && $next3Hours >= 00)
9309
		{
9310
			$next3Hours = 24;
9311
		}
9312
		$currentDayofWeek = date("l");
9313
		if ($globalDBdriver == 'mysql') {
9314
			if ($sort != "")
9315
			{
9316
				$search_orderby_array = $this->getOrderBy();
9317
				$orderby_query = $search_orderby_array[$sort]['sql'];
9318
			} else {
9319
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
9320
			}
9321
/*
9322
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
9323
			    FROM spotter_output
9324
			    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'
9325
			    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";
9326
*/
9327
/*			$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
9328
			    FROM spotter_output
9329
			    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'
9330
			    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";
9331
*/
9332
			$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 
9333
			    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'
9334
			    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
9335
			    HAVING count(spotter_output.ident) > 5$orderby_query";
9336
9337
			$spotter_array = $this->getDataFromDB($query.$limit_query);
9338
		} else {
9339
			if ($sort != "")
9340
			{
9341
				$search_orderby_array = $this->getOrderBy();
9342
				$orderby_query = $search_orderby_array[$sort]['sql'];
9343
			} else {
9344
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
9345
			}
9346
			$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') 
9347
			    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 <> '' 
9348
			    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')
9349
			    HAVING count(spotter_output.ident) > 5$orderby_query";
9350
			//echo $query;
9351
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
9352
			/*
9353
			$sth = $this->db->prepare($query);
9354
			$sth->execute(array(':timezone' => $globalTimezone));
9355
			return $sth->fetchAll(PDO::FETCH_ASSOC);
9356
			*/
9357
		}
9358
		return $spotter_array;
9359
	}
9360
    
9361
    
9362
     /**
9363
	* Gets the Barrie Spotter ID based on the FlightAware ID
9364
	*
9365
	* @return Integer the Barrie Spotter ID
9366
q	*
9367
	*/
9368
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
9369
	{
9370
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
9371
9372
		$query  = "SELECT spotter_output.spotter_id
9373
								FROM spotter_output 
9374
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
9375
        
9376
		
9377
		$sth = $this->db->prepare($query);
9378
		$sth->execute();
9379
9380
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9381
		{
9382
			return $row['spotter_id'];
9383
		}
9384
	}
9385
  
9386
 
9387
	/**
9388
	* Parses a date string
9389
	*
9390
	* @param String $dateString the date string
9391
	* @param String $timezone the timezone of a user
9392
	* @return Array the time information
9393
	*
9394
	*/
9395
	public function parseDateString($dateString, $timezone = '')
9396
	{
9397
		$time_array = array();
9398
	
9399
		if ($timezone != "")
9400
		{
9401
			date_default_timezone_set($timezone);
9402
		}
9403
		
9404
		$current_date = date("Y-m-d H:i:s");
9405
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
9406
		
9407
		$diff = abs(strtotime($current_date) - strtotime($date));
9408
9409
		$time_array['years'] = floor($diff / (365*60*60*24)); 
9410
		$years = $time_array['years'];
9411
		
9412
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
9413
		$months = $time_array['months'];
9414
		
9415
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
9416
		$days = $time_array['days'];
9417
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
9418
		$hours = $time_array['hours'];
9419
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
9420
		$minutes = $time_array['minutes'];
9421
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
9422
		
9423
		return $time_array;	
9424
	}	
9425
	
9426
	
9427
	
9428
	
9429
	/**
9430
	* Parses the direction degrees to working
9431
	*
9432
	* @param Float $direction the direction in degrees
9433
	* @return Array the direction information
9434
	*
9435
	*/
9436
	public function parseDirection($direction = 0)
9437
	{
9438
		if ($direction == '') $direction = 0;
9439
		$direction_array = array();
9440
		$temp_array = array();
9441
9442
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
9443
		{
9444
			$temp_array['direction_degree'] = $direction;
9445
			$temp_array['direction_shortname'] = "N";
9446
			$temp_array['direction_fullname'] = "North";
9447
		} elseif ($direction >= 22.5 && $direction < 45){
9448
			$temp_array['direction_degree'] = $direction;
9449
			$temp_array['direction_shortname'] = "NNE";
9450
			$temp_array['direction_fullname'] = "North-Northeast";
9451
		} elseif ($direction >= 45 && $direction < 67.5){
9452
			$temp_array['direction_degree'] = $direction;
9453
			$temp_array['direction_shortname'] = "NE";
9454
			$temp_array['direction_fullname'] = "Northeast";
9455
		} elseif ($direction >= 67.5 && $direction < 90){
9456
			$temp_array['direction_degree'] = $direction;
9457
			$temp_array['direction_shortname'] = "ENE";
9458
			$temp_array['direction_fullname'] = "East-Northeast";
9459
		} elseif ($direction >= 90 && $direction < 112.5){
9460
			$temp_array['direction_degree'] = $direction;
9461
			$temp_array['direction_shortname'] = "E";
9462
			$temp_array['direction_fullname'] = "East";
9463
		} elseif ($direction >= 112.5 && $direction < 135){
9464
			$temp_array['direction_degree'] = $direction;
9465
			$temp_array['direction_shortname'] = "ESE";
9466
			$temp_array['direction_fullname'] = "East-Southeast";
9467
		} elseif ($direction >= 135 && $direction < 157.5){
9468
			$temp_array['direction_degree'] = $direction;
9469
			$temp_array['direction_shortname'] = "SE";
9470
			$temp_array['direction_fullname'] = "Southeast";
9471
		} elseif ($direction >= 157.5 && $direction < 180){
9472
			$temp_array['direction_degree'] = $direction;
9473
			$temp_array['direction_shortname'] = "SSE";
9474
			$temp_array['direction_fullname'] = "South-Southeast";
9475
		} elseif ($direction >= 180 && $direction < 202.5){
9476
			$temp_array['direction_degree'] = $direction;
9477
			$temp_array['direction_shortname'] = "S";
9478
			$temp_array['direction_fullname'] = "South";
9479
		} elseif ($direction >= 202.5 && $direction < 225){
9480
			$temp_array['direction_degree'] = $direction;
9481
			$temp_array['direction_shortname'] = "SSW";
9482
			$temp_array['direction_fullname'] = "South-Southwest";
9483
		} elseif ($direction >= 225 && $direction < 247.5){
9484
			$temp_array['direction_degree'] = $direction;
9485
			$temp_array['direction_shortname'] = "SW";
9486
			$temp_array['direction_fullname'] = "Southwest";
9487
		} elseif ($direction >= 247.5 && $direction < 270){
9488
			$temp_array['direction_degree'] = $direction;
9489
			$temp_array['direction_shortname'] = "WSW";
9490
			$temp_array['direction_fullname'] = "West-Southwest";
9491
		} elseif ($direction >= 270 && $direction < 292.5){
9492
			$temp_array['direction_degree'] = $direction;
9493
			$temp_array['direction_shortname'] = "W";
9494
			$temp_array['direction_fullname'] = "West";
9495
		} elseif ($direction >= 292.5 && $direction < 315){
9496
			$temp_array['direction_degree'] = $direction;
9497
			$temp_array['direction_shortname'] = "WNW";
9498
			$temp_array['direction_fullname'] = "West-Northwest";
9499
		} elseif ($direction >= 315 && $direction < 337.5){
9500
			$temp_array['direction_degree'] = $direction;
9501
			$temp_array['direction_shortname'] = "NW";
9502
			$temp_array['direction_fullname'] = "Northwest";
9503
		} elseif ($direction >= 337.5 && $direction < 360){
9504
			$temp_array['direction_degree'] = $direction;
9505
			$temp_array['direction_shortname'] = "NNW";
9506
			$temp_array['direction_fullname'] = "North-Northwest";
9507
		}
9508
		$direction_array[] = $temp_array;
9509
		return $direction_array;
9510
	}
9511
	
9512
	
9513
	/**
9514
	* Gets the aircraft registration
9515
	*
9516
	* @param String $flightaware_id the flight aware id
9517
	* @return String the aircraft registration
9518
	*
9519
	*/
9520
	
9521
	public function getAircraftRegistration($flightaware_id)
9522
	{
9523
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
9524
        
9525
		$options = array(
9526
			'trace' => true,
9527
			'exceptions' => 0,
9528
			'login' => $globalFlightAwareUsername,
9529
			'password' => $globalFlightAwarePassword,
9530
		);
9531
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
9532
		
9533
		$params = array('faFlightID' => $flightaware_id);
9534
		$result = $client->AirlineFlightInfo($params);
9535
		
9536
		if (isset($result->AirlineFlightInfoResult))
9537
		{
9538
			$registration = $result->AirlineFlightInfoResult->tailnumber;
9539
		} else return '';
9540
		
9541
		$registration = $this->convertAircraftRegistration($registration);
9542
		
9543
		return $registration;
9544
	}
9545
9546
9547
	/**
9548
	* Gets the aircraft registration from ModeS
9549
	*
9550
	* @param String $aircraft_modes the flight ModeS in hex
9551
	* @return String the aircraft registration
9552
	*
9553
	*/
9554
	public function getAircraftRegistrationBymodeS($aircraft_modes)
9555
	{
9556
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
9557
	
9558
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
9559
		
9560
		$sth = $this->db->prepare($query);
9561
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
9562
    
9563
		$row = $sth->fetch(PDO::FETCH_ASSOC);
9564
		$sth->closeCursor();
9565
		if (count($row) > 0) {
9566
		    //return $row['Registration'];
9567
		    return $row['registration'];
9568
		} else return '';
9569
	
9570
	}
9571
9572
	/**
9573
	* Gets the aircraft type from ModeS
9574
	*
9575
	* @param String $aircraft_modes the flight ModeS in hex
9576
	* @return String the aircraft type
9577
	*
9578
	*/
9579
	public function getAircraftTypeBymodeS($aircraft_modes)
9580
	{
9581
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
9582
	
9583
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
9584
		
9585
		$sth = $this->db->prepare($query);
9586
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
9587
    
9588
		$row = $sth->fetch(PDO::FETCH_ASSOC);
9589
		$sth->closeCursor();
9590
		if (count($row) > 0) {
9591
		    if ($row['type_flight'] == null) return '';
9592
		    else return $row['type_flight'];
9593
		} else return '';
9594
	
9595
	}
9596
9597
	/**
9598
	* Gets Countrie from latitude/longitude
9599
	*
9600
	* @param Float $latitude latitute of the flight
9601
	* @param Float $longitude longitute of the flight
9602
	* @return String the countrie
9603
	*/
9604
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
9605
	{
9606
		global $globalDBdriver, $globalDebug;
9607
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
9608
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
9609
	
9610
		$Connection = new Connection($this->db);
9611
		if (!$Connection->tableExists('countries')) return '';
9612
	
9613
		try {
9614
			/*
9615
			if ($globalDBdriver == 'mysql') {
9616
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
9617
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
9618
			}
9619
			*/
9620
			// This query seems to work both for MariaDB and PostgreSQL
9621
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
9622
		
9623
			$sth = $this->db->prepare($query);
9624
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
9625
			$sth->execute();
9626
    
9627
			$row = $sth->fetch(PDO::FETCH_ASSOC);
9628
			$sth->closeCursor();
9629
			if (count($row) > 0) {
9630
				return $row;
9631
			} else return '';
9632
		} catch (PDOException $e) {
9633
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
9634
			return '';
9635
		}
9636
	
9637
	}
9638
9639
	/**
9640
	* converts the registration code using the country prefix
9641
	*
9642
	* @param String $registration the aircraft registration
9643
	* @return String the aircraft registration
9644
	*
9645
	*/
9646
	public function convertAircraftRegistration($registration)
9647
	{
9648
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9649
		$registration_prefix = '';
9650
		$registration_1 = substr($registration, 0, 1);
9651
		$registration_2 = substr($registration, 0, 2);
9652
9653
		//first get the prefix based on two characters
9654
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
9655
      
9656
		
9657
		$sth = $this->db->prepare($query);
9658
		$sth->execute(array(':registration_2' => $registration_2));
9659
        
9660
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9661
		{
9662
			$registration_prefix = $row['registration_prefix'];
9663
		}
9664
9665
		//if we didn't find a two chracter prefix lets just search the one with one character
9666
		if ($registration_prefix == '')
9667
		{
9668
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
9669
			$sth = $this->db->prepare($query);
9670
			$sth->execute(array(':registration_1' => $registration_1));
9671
	        
9672
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9673
			{
9674
				$registration_prefix = $row['registration_prefix'];
9675
			}
9676
		}
9677
9678
		//determine which characters are being used and convert the registration code appropiately
9679
		if (strlen($registration_prefix) == 1)
9680
		{
9681
			if (0 === strpos($registration, 'N')) {
9682
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
9683
			} else {
9684
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
9685
			}
9686
		} else if(strlen($registration_prefix) == 2){
9687
			if (0 === strpos($registration, 'N')) {
9688
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
9689
			} else {
9690
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
9691
			}
9692
		}
9693
		return $registration;
9694
	}
9695
9696
	/**
9697
	* Country from the registration code
9698
	*
9699
	* @param String $registration the aircraft registration
9700
	* @return String the country
9701
	*
9702
	*/
9703
	public function countryFromAircraftRegistration($registration)
9704
	{
9705
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9706
		
9707
		$registration_prefix = '';
9708
		$registration_test = explode('-',$registration);
9709
		$country = '';
9710
		if ($registration_test[0] != $registration) {
9711
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
9712
	      
9713
			$sth = $this->db->prepare($query);
9714
			$sth->execute(array(':registration_1' => $registration_test[0]));
9715
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9716
			{
9717
				//$registration_prefix = $row['registration_prefix'];
9718
				$country = $row['country'];
9719
			}
9720
		} else {
9721
    			$registration_1 = substr($registration, 0, 1);
9722
		        $registration_2 = substr($registration, 0, 2);
9723
9724
			$country = '';
9725
			//first get the prefix based on two characters
9726
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
9727
      
9728
			
9729
			$sth = $this->db->prepare($query);
9730
			$sth->execute(array(':registration_2' => $registration_2));
9731
        
9732
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9733
			{
9734
				$registration_prefix = $row['registration_prefix'];
9735
				$country = $row['country'];
9736
			}
9737
9738
			//if we didn't find a two chracter prefix lets just search the one with one character
9739
			if ($registration_prefix == "")
9740
			{
9741
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
9742
	      
9743
				$sth = $this->db->prepare($query);
9744
				$sth->execute(array(':registration_1' => $registration_1));
9745
	        
9746
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
9747
				{
9748
					//$registration_prefix = $row['registration_prefix'];
9749
					$country = $row['country'];
9750
				}
9751
			}
9752
		}
9753
    
9754
		return $country;
9755
	}
9756
	
9757
	/**
9758
	* Set a new highlight value for a flight
9759
	*
9760
	* @param String $flightaware_id flightaware_id from spotter_output table
9761
	* @param String $highlight New highlight value
9762
	*/
9763
	public function setHighlightFlight($flightaware_id,$highlight) {
9764
		
9765
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
9766
		$sth = $this->db->prepare($query);
9767
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
9768
	}
9769
	
9770
	/**
9771
	* Gets the short url from bit.ly
9772
	*
9773
	* @param String $url the full url
9774
	* @return String the bit.ly url
9775
	*
9776
	*/
9777
	public function getBitlyURL($url)
9778
	{
9779
		global $globalBitlyAccessToken;
9780
		
9781
		if ($globalBitlyAccessToken == '') return $url;
9782
        
9783
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
9784
		
9785
		$ch = curl_init();
9786
		curl_setopt($ch, CURLOPT_HEADER, 0);
9787
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
9788
		curl_setopt($ch, CURLOPT_URL, $google_url);
9789
		$bitly_data = curl_exec($ch);
9790
		curl_close($ch);
9791
		
9792
		$bitly_data = json_decode($bitly_data);
9793
		$bitly_url = '';
9794
		if ($bitly_data->status_txt = "OK"){
9795
			$bitly_url = $bitly_data->data->url;
9796
		}
9797
9798
		return $bitly_url;
9799
	}
9800
9801
9802
	public function getOrderBy()
9803
	{
9804
		$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"));
9805
		
9806
		return $orderby;
9807
		
9808
	}
9809
    
9810
/*
9811
	public function importFromFlightAware()
9812
	{
9813
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
9814
		$Spotter = new Spotter($this->db);
9815
		$SpotterLive = new SpotterLive($this->db);
9816
		$options = array(
9817
		            'trace' => true,
9818
		            'exceptions' => 0,
9819
		            'login' => $globalFlightAwareUsername,
9820
		            'password' => $globalFlightAwarePassword,
9821
		);
9822
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
9823
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
9824
		$result = $client->SearchBirdseyeInFlight($params);
9825
		$dataFound = false;
9826
		$ignoreImport = false;
9827
		if (isset($result->SearchBirdseyeInFlightResult))
9828
		{
9829
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
9830
			{
9831
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
9832
				{
9833
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
9834
					{
9835
						foreach($globalAirportIgnore as $airportIgnore)
9836
						{
9837
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
9838
							{
9839
								$ignoreImport = true; 
9840
							}
9841
						}
9842
						if ($ignoreImport == false)
9843
						{
9844
							$flightaware_id = $aircraft->faFlightID;
9845
							$ident = $aircraft->ident;
9846
							$aircraft_type = $aircraft->type;
9847
							$departure_airport = $aircraft->origin;
9848
							$arrival_airport = $aircraft->destination;
9849
							$latitude = $aircraft->latitude;
9850
							$longitude = $aircraft->longitude;
9851
							$waypoints = $aircraft->waypoints;
9852
							$altitude = $aircraft->altitude;
9853
							$heading = $aircraft->heading;
9854
							$groundspeed = $aircraft->groundspeed;
9855
							$dataFound = true;
9856
							//gets the callsign from the last hour
9857
							$last_hour_ident = $this->getIdentFromLastHour($ident);
9858
							//change the departure/arrival airport to NA if its not available
9859
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
9860
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
9861
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
9862
							if($last_hour_ident == "")
9863
							{
9864
								//adds the spotter data for the archive
9865
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
9866
							}
9867
9868
							//adds the spotter LIVE data
9869
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
9870
						}
9871
					}
9872
					$ignoreImport = false;
9873
				}
9874
			} else {
9875
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
9876
				{
9877
					foreach($globalAirportIgnore as $airportIgnore)
9878
					{
9879
						foreach($globalAirportIgnore as $airportIgnore)
9880
						{
9881
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
9882
							{
9883
								$ignoreImport = true; 
9884
							}
9885
						}
9886
						if ($ignoreImport == false)
9887
						{
9888
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
9889
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
9890
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
9891
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
9892
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
9893
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
9894
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
9895
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
9896
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
9897
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
9898
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
9899
							$dataFound = true;
9900
							//gets the callsign from the last hour
9901
							$last_hour_ident = $this->getIdentFromLastHour($ident);
9902
							//change the departure/arrival airport to NA if its not available
9903
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
9904
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
9905
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
9906
							if($last_hour_ident == "")
9907
							{
9908
								//adds the spotter data for the archive
9909
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
9910
							}
9911
							//adds the spotter LIVE data
9912
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
9913
						}
9914
						$ignoreImport = false;
9915
					}
9916
				}
9917
			}
9918
		} 
9919
	}
9920
*/
9921
9922
	// Update flights data when new data in DB
9923
	public function updateFieldsFromOtherTables()
9924
	{
9925
		global $globalDebug, $globalDBdriver;
9926
		$Image = new Image($this->db);
9927
		
9928
9929
		// routes
9930
		if ($globalDebug) print "Routes...\n";
9931
		if ($globalDBdriver == 'mysql') {
9932
			$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)";
9933
		} else {
9934
			$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'";
9935
		}
9936
		$sth = $this->db->prepare($query);
9937
		$sth->execute();
9938
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9939
		{
9940
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
9941
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
9942
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
9943
				$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";
9944
				$sthu = $this->db->prepare($update_query);
9945
				$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']));
9946
			}
9947
		}
9948
		
9949
		if ($globalDebug) print "Airlines...\n";
9950
		//airlines
9951
		if ($globalDBdriver == 'mysql') {
9952
			$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)";
9953
		} elseif ($globalDBdriver == 'pgsql') {
9954
			$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'";
9955
		}
9956
		$sth = $this->db->prepare($query);
9957
		$sth->execute();
9958
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9959
		{
9960
			if (is_numeric(substr($row['ident'], -1, 1)))
9961
			{
9962
				$fromsource = NULL;
9963
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
9964
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
9965
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
9966
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
9967
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
9968
				if (isset($airline_array[0]['name'])) {
9969
					$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";
9970
					$sthu = $this->db->prepare($update_query);
9971
					$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']));
9972
				}
9973
			}
9974
		}
9975
9976
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
9977
		//duplicate modes
9978
		$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";
9979
		$sth = $this->db->prepare($query);
9980
		$sth->execute();
9981
		
9982
		if ($globalDebug) print "Aircraft...\n";
9983
		//aircraft
9984
		if ($globalDBdriver == 'mysql') {
9985
			$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)";
9986
		} elseif ($globalDBdriver == 'pgsql') {
9987
			$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'";
9988
		}
9989
		$sth = $this->db->prepare($query);
9990
		$sth->execute();
9991
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9992
		{
9993
			if ($row['aircraft_icao'] != '') {
9994
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
9995
				if ($row['registration'] != ""){
9996
					$image_array = $Image->getSpotterImage($row['registration']);
9997
					if (count($image_array) == 0) {
9998
						$Image->addSpotterImage($row['registration']);
9999
					}
10000
				}
10001
				if (count($aircraft_name) > 0) {
10002
					$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";
10003
					$sthu = $this->db->prepare($update_query);
10004
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
10005
				}
10006
			}
10007
		}
10008
	}	
10009
10010
	// Update arrival airports for data already in DB
10011
	public function updateArrivalAirports()
10012
	{
10013
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
10014
		$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";
10015
		$sth = $this->db->prepare($query);
10016
		$sth->execute();
10017
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10018
		{
10019
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
10020
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
10021
				$airport_icao = '';
10022
				 if (isset($closestAirports[0])) {
10023
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
10024
						$airport_icao = $closestAirports[0]['icao'];
10025
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10026
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
10027
						foreach ($closestAirports as $airport) {
10028
							if ($row['arrival_airport_icao'] == $airport['icao']) {
10029
								$airport_icao = $airport['icao'];
10030
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10031
								break;
10032
							}
10033
						}
10034
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
10035
						$airport_icao = $closestAirports[0]['icao'];
10036
						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";
10037
					} else {
10038
						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";
10039
					}
10040
				} else {
10041
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
10042
				}
10043
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
10044
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
10045
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
10046
					$sthu = $this->db->prepare($update_query);
10047
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
10048
				}
10049
			}
10050
		}
10051
	}
10052
	
10053
	public function closestAirports($origLat,$origLon,$dist = 10) {
10054
		global $globalDBdriver;
10055
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
10056
/*
10057
		$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 
10058
                      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)) 
10059
                      having distance < $dist ORDER BY distance limit 100;";
10060
*/
10061
		if ($globalDBdriver == 'mysql') {
10062
			$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 
10063
	                      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)) 
10064
	                      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;";
10065
                } else {
10066
			$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 
10067
	                      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)) 
10068
	                      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;";
10069
    		}
10070
		$sth = $this->db->prepare($query);
10071
		$sth->execute();
10072
		return $sth->fetchAll(PDO::FETCH_ASSOC);
10073
	}
10074
}
10075
/*
10076
$Spotter = new Spotter();
10077
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
10078
*/
10079
/*
10080
$Spotter = new Spotter();
10081
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
10082
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
10083
print_r($da);
10084
print_r($aa);
10085
print_r(array_merge($da,$aa));
10086
*/
10087
?>