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

Spotter::addSpotterData()   F

Complexity

Conditions 99
Paths > 20000

Size

Total Lines 304
Code Lines 192

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 99
eloc 192
nc 429496.7295
nop 25
dl 0
loc 304
rs 2
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

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:

Many Parameters

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

There are several approaches to avoid long parameter lists:

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $db;
9
	
10
	public function __construct($dbc = null) {
11
		$Connection = new Connection($dbc);
12
		$this->db = $Connection->db();
13
	}
14
15
	/**
16
	* Get SQL query part for filter used
17
	* @param Array $filter the filter
18
	* @return Array the SQL part
19
	*/
20
	public function getFilter($filter = array(),$where = false,$and = false) {
21
		global $globalFilter, $globalStatsFilters, $globalFilterName;
22
		$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
?>