Completed
Push — master ( 8a4155...eb4f96 )
by Yannick
07:53
created

Spotter::searchSpotterData()   F

Complexity

Conditions 59
Paths > 20000

Size

Total Lines 343
Code Lines 218

Duplication

Lines 0
Ratio 0 %

Importance

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