Completed
Push — master ( ca27eb...c19723 )
by Yannick
10:42
created

Spotter::addSpotterData()   F

Complexity

Conditions 89
Paths > 20000

Size

Total Lines 298
Code Lines 187

Duplication

Lines 0
Ratio 0 %

Importance

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