Completed
Push — master ( 3bb709...adf80b )
by Yannick
05:18
created

Spotter::countAllFlightOverCountries()   B

Complexity

Conditions 8
Paths 37

Size

Total Lines 56
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 32
nc 37
nop 4
dl 0
loc 56
rs 7.3333
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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