Completed
Push — master ( 65bea5...fd736f )
by Yannick
09:26
created

Spotter::addSpotterData()   F

Complexity

Conditions 91
Paths > 20000

Size

Total Lines 299
Code Lines 188

Duplication

Lines 0
Ratio 0 %

Importance

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