Completed
Push — master ( 4e1bb4...a8508e )
by Yannick
06:01
created

Spotter::getAllFlightsforSitemap()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 0
dl 0
loc 27
rs 8.8571
c 0
b 0
f 0
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
	* Executes the SQL statements to get the spotter information
17
	*
18
	* @param String $query the SQL query
19
	* @param Array $params parameter of the query
20
	* @param String $limitQuery the limit query
21
	* @return Array the spotter information
22
	*
23
	*/
24
	public function getDataFromDB($query, $params = array(), $limitQuery = '')
25
	{
26
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS;
27
		$Image = new Image($this->db);
28
		$Schedule = new Schedule($this->db);
29
		$ACARS = new ACARS($this->db);
30
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
31
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
32
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
33
		date_default_timezone_set('UTC');
34
		
35
		if (!is_string($query))
36
		{
37
			return false;
38
		}
39
		
40
		if ($limitQuery != "")
41
		{
42
			if (!is_string($limitQuery))
43
			{
44
				return false;
45
			}
46
		}
47
48
		
49
		try {
50
			$sth = $this->db->prepare($query.$limitQuery);
51
			$sth->execute($params);
52
		} catch (PDOException $e) {
53
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
54
			exit();
55
		}
56
		
57
	//	$num_rows = count($sth->fetchAll());
58
		$num_rows = 0;
59
60
		$spotter_array = array();
61
		
62
63
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
64
		{
65
			$num_rows++;
66
			$temp_array = array();
67
			if (isset($row['spotter_live_id'])) {
68
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
69
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
70
			} elseif (isset($row['spotter_archive_id'])) {
71
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
72
			} elseif (isset($row['spotter_archive_output_id'])) {
73
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
74
			} elseif (isset($row['spotter_id'])) {
75
				$temp_array['spotter_id'] = $row['spotter_id'];
76
			} else {
77
				$temp_array['spotter_id'] = '';
78
			}
79
			$temp_array['flightaware_id'] = $row['flightaware_id'];
80
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
81
			$temp_array['ident'] = $row['ident'];
82
			if (isset($row['registration']) && $row['registration'] != '') {
83
				$temp_array['registration'] = $row['registration'];
84
			} elseif (isset($temp_array['modes'])) {
85
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
86
			} else $temp_array['registration'] = '';
87
			$temp_array['aircraft_type'] = $row['aircraft_icao'];
88
			
89
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
90
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
91
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
92
			$temp_array['latitude'] = $row['latitude'];
93
			$temp_array['longitude'] = $row['longitude'];
94
			/*
95
			if (Connection->tableExists('countries')) {
96
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
97
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
98
				    $temp_array['country'] = $country_info['name'];
99
				    $temp_array['country_iso2'] = $country_info['iso2'];
100
				}
101
			}
102
			*/
103
			$temp_array['waypoints'] = $row['waypoints'];
104
			$temp_array['format_source'] = $row['format_source'];
105
			if (isset($row['route_stop'])) {
106
				$temp_array['route_stop'] = $row['route_stop'];
107
				if ($row['route_stop'] != '') {
108
					$allroute = explode(' ',$row['route_stop']);
109
			
110
					foreach ($allroute as $route) {
111
						$route_airport_array = $this->getAllAirportInfo($route);
112
						if (isset($route_airport_array[0]['name'])) {
113
							$route_stop_details = array();
114
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
115
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
116
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
117
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
118
							$temp_array['route_stop_details'][] = $route_stop_details;
119
						}
120
					}
121
				}
122
			}
123
			$temp_array['altitude'] = $row['altitude'];
124
			$temp_array['heading'] = $row['heading'];
125
			$heading_direction = $this->parseDirection($row['heading']);
126
			if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
127
			$temp_array['ground_speed'] = $row['ground_speed'];
128
			$temp_array['image'] = "";
129
			$temp_array['image_thumbnail'] = "";
130
			$temp_array['image_source'] = "";
131
			$temp_array['image_copyright'] = "";
132
 
133
			if (isset($row['highlight'])) {
134
				$temp_array['highlight'] = $row['highlight'];
135
			} else $temp_array['highlight'] = '';
136
			
137
			$dateArray = $this->parseDateString($row['date']);
138
			if ($dateArray['seconds'] < 10)
139
			{
140
				$temp_array['date'] = "a few seconds ago";
141
			} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
142
			{
143
				$temp_array['date'] = "half a minute ago";
144
			} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
145
			{
146
				$temp_array['date'] = "about a minute ago";
147
			} elseif ($dateArray['minutes'] < 5)
148
			{
149
				$temp_array['date'] = "a few minutes ago";
150
			} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
151
			{
152
				$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
153
			} elseif ($dateArray['hours'] < 2)
154
			{
155
				$temp_array['date'] = "about an hour ago";
156
			} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
157
			{
158
				$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
159
			} else {
160
				$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
161
			}
162
			$temp_array['date_minutes_past'] = $dateArray['minutes'];
163
			$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
164
			$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
165
			$temp_array['date_unix'] = strtotime($row['date']." UTC");
166
			
167
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
168
				$temp_array['aircraft_name'] = $row['aircraft_name'];
169
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
170
				if (isset($row['aircraft_shadow'])) {
171
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
172
				}
173
			} else {
174
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
175
				if (count($aircraft_array) > 0) {
176
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
177
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
178
				
179
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
180
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
181
					} else $temp_array['aircraft_shadow'] = 'default.png';
182
                                } else {
183
                            		$temp_array['aircraft_shadow'] = 'default.png';
184
					$temp_array['aircraft_name'] = 'N/A';
185
					$temp_array['aircraft_manufacturer'] = 'N/A';
186
                            	}
187
			}
188
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
189
				if (!is_numeric(substr($row['ident'], 0, 3))) {
190
					if (is_numeric(substr($row['ident'], 2, 1))) {
191
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2));
192
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
193
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3));
194
					} else {
195
						$airline_array = $this->getAllAirlineInfo('NA');
196
					}
197
				} else {
198
					$airline_array = $this->getAllAirlineInfo('NA');
199
				}
200
				if (count($airline_array) > 0) {
201
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
202
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
203
					$temp_array['airline_name'] = $airline_array[0]['name'];
204
					$temp_array['airline_country'] = $airline_array[0]['country'];
205
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
206
					$temp_array['airline_type'] = $airline_array[0]['type'];
207
				}
208
			} else {
209
				$temp_array['airline_icao'] = $row['airline_icao'];
210
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
211
				else $temp_array['airline_iata'] = '';
212
				$temp_array['airline_name'] = $row['airline_name'];
213
				$temp_array['airline_country'] = $row['airline_country'];
214
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
215
				else $temp_array['airline_callsign'] = 'N/A';
216
				$temp_array['airline_type'] = $row['airline_type'];
217
			}
218
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
219
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
220
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
221
				if (count($acars_array) > 0) {
222
					$temp_array['acars'] = $acars_array;
223
					//print_r($acars_array);
224
				}
225
			}
226
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
227
				$temp_array['aircraft_owner'] = $row['owner_name'];
228
			}
229
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !isset($temp_array['aircraft_owner'])) {
230
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
231
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
232
				$temp_array['aircraft_base'] = $owner_info['base'];
233
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
234
			}
235
236
			if($temp_array['registration'] != "" || ($globalIVAO && $temp_array['aircraft_type'] != ''))
237
			{
238
				if ($globalIVAO) {
239
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
240
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
241
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
242
				if (count($image_array) > 0) {
243
					$temp_array['image'] = $image_array[0]['image'];
244
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
245
					$temp_array['image_source'] = $image_array[0]['image_source'];
246
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
247
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
248
						$planespotter_url_array = explode("_", $temp_array['image']);
249
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
250
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
251
					 }
252
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
253
				}
254
			}
255
256
257
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
258
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
259
			}
260
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
261
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
262
			}
263
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS)) {
264
				$schedule_array = $Schedule->getSchedule($temp_array['ident']);
265
				//print_r($schedule_array);
266
				if (count($schedule_array) > 0) {
267
					if ($schedule_array['departure_airport_icao'] != '') {
268
						$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
269
						 $temp_array['departure_airport'] = $row['departure_airport_icao'];
270
					}
271
					if ($schedule_array['arrival_airport_icao'] != '') {
272
						$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
273
						$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
274
					}
275
276
					$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
277
					$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
278
				}
279
			} else {
280
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
281
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
282
				}
283
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
284
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
285
				}
286
			}
287
			
288
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
289
			if ($row['departure_airport_icao'] != '') {
290
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
291
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
292
			/*
293
			} elseif ($row['departure_airport_name'] != '') {
294
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
295
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
296
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
297
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
298
			*/
299
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
300
			if (isset($departure_airport_array[0]['name'])) {
301
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
302
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
303
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
304
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
305
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
306
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
307
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
308
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
309
			}
310
311
			/*
312
			if (isset($row['departure_airport_time'])) {
313
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
314
			}
315
			*/
316
			
317
			if ($row['arrival_airport_icao'] != '') {
318
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
319
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
320
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
321
			if (isset($arrival_airport_array[0]['name'])) {
322
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
323
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
324
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
325
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
326
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
327
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
328
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
329
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
330
			}
331
			/*
332
			if (isset($row['arrival_airport_time'])) {
333
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
334
			}
335
			*/
336
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
337
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
338
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
339
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
340
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
341
			if (isset($row['squawk'])) {
342
				$temp_array['squawk'] = $row['squawk'];
343
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
344
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
345
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
346
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
347
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
348
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
349
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
350
			}
351
    			
352
			$temp_array['query_number_rows'] = $num_rows;
353
			
354
			$spotter_array[] = $temp_array;
355
		}
356
		if ($num_rows == 0) return array();
357
		$spotter_array[0]['query_number_rows'] = $num_rows;
358
		return $spotter_array;
359
	}	
360
	
361
	
362
	/**
363
	* Gets all the spotter information
364
	*
365
	* @return Array the spotter information
366
	*
367
	*/
368
	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 = '')
369
	{
370
		global $globalTimezone, $globalDBdriver;
371
		require_once(dirname(__FILE__).'/class.Translation.php');
372
		$Translation = new Translation();
373
374
		date_default_timezone_set('UTC');
375
376
		$query_values = array();
377
		$additional_query = '';
378
		if ($q != "")
379
		{
380
			if (!is_string($q))
381
			{
382
				return false;
383
			} else {
384
				$q_array = explode(" ", $q);
385
				foreach ($q_array as $q_item){
386
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
387
					$additional_query .= " AND (";
388
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
389
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
390
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
391
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
392
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
393
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
394
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
395
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
396
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
397
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
398
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
399
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
400
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
401
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
402
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
403
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
404
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
405
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
406
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
407
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
408
					$translate = $Translation->ident2icao($q_item);
409
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
410
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
411
					$additional_query .= ")";
412
				}
413
			}
414
		}
415
416
		if ($registration != "")
417
		{
418
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
419
			if (!is_string($registration))
420
			{
421
				return false;
422
			} else {
423
				$additional_query .= " AND spotter_output.registration = :registration";
424
				$query_values = array_merge($query_values,array(':registration' => $registration));
425
			}
426
		}
427
428
		if ($aircraft_icao != "")
429
		{
430
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
431
			if (!is_string($aircraft_icao))
432
			{
433
				return false;
434
			} else {
435
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
436
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
437
			}
438
		}
439
440
		if ($aircraft_manufacturer != "")
441
		{
442
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
443
			if (!is_string($aircraft_manufacturer))
444
			{
445
				return false;
446
			} else {
447
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
448
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
449
			}
450
		}
451
452
		if ($highlights == "true")
453
		{
454
			if (!is_string($highlights))
455
			{
456
				return false;
457
			} else {
458
				$additional_query .= " AND (spotter_output.highlight <> '')";
459
			}
460
		}
461
462
		if ($airline_icao != "")
463
		{
464
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
465
			if (!is_string($airline_icao))
466
			{
467
				return false;
468
			} else {
469
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
470
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
471
			}
472
		}
473
474
		if ($airline_country != "")
475
		{
476
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
477
			if (!is_string($airline_country))
478
			{
479
				return false;
480
			} else {
481
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
482
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
483
			}
484
		}
485
486
		if ($airline_type != "")
487
		{
488
			if (!is_string($airline_type))
489
			{
490
				return false;
491
			} else {
492
				if ($airline_type == "passenger")
493
				{
494
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
495
				}
496
				if ($airline_type == "cargo")
497
				{
498
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
499
				}
500
				if ($airline_type == "military")
501
				{
502
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
503
				}
504
			}
505
		}
506
507
		if ($airport != "")
508
		{
509
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
510
			if (!is_string($airport))
511
			{
512
				return false;
513
			} else {
514
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
515
				$query_values = array_merge($query_values,array(':airport' => $airport));
516
			}
517
		}
518
519
		if ($airport_country != "")
520
		{
521
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
522
			if (!is_string($airport_country))
523
			{
524
				return false;
525
			} else {
526
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
527
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
528
			}
529
		}
530
    
531
		if ($callsign != "")
532
		{
533
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
534
			if (!is_string($callsign))
535
			{
536
				return false;
537
			} else {
538
				$translate = $Translation->ident2icao($callsign);
539
				if ($translate != $callsign) {
540
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
541
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
542
				} else {
543
					$additional_query .= " AND spotter_output.ident = :callsign";
544
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
545
				}
546
			}
547
		}
548
549
		if ($owner != "")
550
		{
551
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
552
			if (!is_string($owner))
553
			{
554
				return false;
555
			} else {
556
				$additional_query .= " AND spotter_output.owner_name = :owner";
557
				$query_values = array_merge($query_values,array(':owner' => $owner));
558
			}
559
		}
560
561
		if ($pilot_name != "")
562
		{
563
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
564
			if (!is_string($pilot_name))
565
			{
566
				return false;
567
			} else {
568
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
569
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
570
			}
571
		}
572
573
		if ($pilot_id != "")
574
		{
575
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
576
			if (!is_string($pilot_id))
577
			{
578
				return false;
579
			} else {
580
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
581
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
582
			}
583
		}
584
585
		if ($departure_airport_route != "")
586
		{
587
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
588
			if (!is_string($departure_airport_route))
589
			{
590
				return false;
591
			} else {
592
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
593
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
594
			}
595
		}
596
597
		if ($arrival_airport_route != "")
598
		{
599
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
600
			if (!is_string($arrival_airport_route))
601
			{
602
				return false;
603
			} else {
604
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
605
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
606
			}
607
		}
608
609
		if ($altitude != "")
610
		{
611
			$altitude_array = explode(",", $altitude);
612
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
613
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
614
615
			if ($altitude_array[1] != "")
616
			{                
617
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
618
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
619
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
620
			} else {
621
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
622
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
623
			}
624
		}
625
626
		if ($date_posted != "")
627
		{
628
			$date_array = explode(",", $date_posted);
629
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
630
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
631
632
			if ($globalTimezone != '') {
633
				date_default_timezone_set($globalTimezone);
634
				$datetime = new DateTime();
635
				$offset = $datetime->format('P');
636
			} else $offset = '+00:00';
637
638
			if ($date_array[1] != "")
639
			{
640
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
641
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
642
				if ($globalDBdriver == 'mysql') {
643
					$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]."' ";
644
				} else {
645
					$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]."' ";
646
				}
647
			} else {
648
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
649
				if ($globalDBdriver == 'mysql') {
650
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
651
				} else {
652
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
653
				}
654
			}
655
		}
656
657
		if ($limit != "")
658
		{
659
			$limit_array = explode(",", $limit);
660
			
661
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
662
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
663
			
664
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
665
			{
666
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
667
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
668
			} else $limit_query = "";
669
		} else $limit_query = "";
670
671
672
		if ($sort != "")
673
		{
674
			$search_orderby_array = $this->getOrderBy();
675
			$orderby_query = $search_orderby_array[$sort]['sql'];
676
		} else {
677
			if ($origLat != "" && $origLon != "" && $dist != "") {
678
				$orderby_query = "  ORDER BY distance ASC";
679
			} else {
680
				$orderby_query = " ORDER BY spotter_output.date DESC";
681
			}
682
		}
683
684
		if ($includegeodata == "true")
685
		{
686
			$additional_query .= " AND spotter_output.waypoints <> ''";
687
		}
688
689
690
		if ($origLat != "" && $origLon != "" && $dist != "") {
691
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
692
693
			if ($globalDBdriver == 'mysql') {
694
				$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 
695
						FROM spotter_output, spotter_archive WHERE 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)) 
696
						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;
697
			} else {
698
				$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 
699
						FROM spotter_output, spotter_archive WHERE 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)) 
700
						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".$orderby_query;
701
			}
702
		} else {		
703
			$query  = "SELECT spotter_output.* FROM spotter_output 
704
					WHERE spotter_output.ident <> '' 
705
					".$additional_query."
706
					".$orderby_query;
707
		}
708
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
709
		return $spotter_array;
710
	}
711
	
712
	
713
	/**
714
	* Gets all the spotter information based on the latest data entry
715
	*
716
	* @return Array the spotter information
717
	*
718
	*/
719
	public function getLatestSpotterData($limit = '', $sort = '')
720
	{
721
		global $global_query;
722
		
723
		date_default_timezone_set('UTC');
724
		
725
		if ($limit != "")
726
		{
727
			$limit_array = explode(",", $limit);
728
			
729
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
730
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
731
			
732
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
733
			{
734
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
735
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
736
			} else $limit_query = "";
737
		} else $limit_query = "";
738
		
739
		if ($sort != "")
740
		{
741
			$search_orderby_array = $this->getOrderBy();
742
			$orderby_query = $search_orderby_array[$sort]['sql'];
743
		} else {
744
			$orderby_query = " ORDER BY spotter_output.date DESC";
745
		}
746
747
		$query  = $global_query." ".$orderby_query;
748
749
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query);
750
751
		return $spotter_array;
752
	}
753
    
754
    
755
    /**
756
	* Gets all the spotter information based on a user's latitude and longitude
757
	*
758
	* @return Array the spotter information
759
	*
760
	*/
761
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
762
	{
763
		date_default_timezone_set('UTC');
764
		$limit_query = '';
765
		if ($lat != "")
766
		{
767
			if (!is_numeric($lat))
768
			{
769
				return false;
770
			}
771
		}
772
        
773
		if ($lng != "")
774
		{
775
			if (!is_numeric($lng))
776
			{
777
				return false;
778
			}
779
		}
780
		
781
		if ($radius != "")
782
		{
783
			if (!is_numeric($radius))
784
			{
785
				return false;
786
			}
787
		}
788
    		$additional_query = '';
789
		if ($interval != "")
790
		{
791
			if (!is_string($interval))
792
			{
793
				return false;
794
			} else {
795
				if ($interval == "30m"){
796
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
797
				} else if ($interval == "1h"){
798
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
799
				} else if ($interval == "3h"){
800
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
801
				} else if ($interval == "6h"){
802
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
803
				} else if ($interval == "12h"){
804
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
805
				} else if ($interval == "24h"){
806
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
807
				} else if ($interval == "7d"){
808
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
809
				} else if ($interval == "30d"){
810
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
811
				} 
812
			}
813
		}
814
815
		$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 
816
                   WHERE spotter_output.latitude <> '' 
817
				   AND spotter_output.longitude <> '' 
818
                   ".$additional_query."
819
                   HAVING distance < :radius  
820
				   ORDER BY distance";
821
822
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
823
824
		return $spotter_array;
825
	}
826
    
827
    
828
    /**
829
	* Gets all the spotter information sorted by the newest aircraft type
830
	*
831
	* @return Array the spotter information
832
	*
833
	*/
834
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '')
835
	{
836
		global $global_query;
837
		
838
		date_default_timezone_set('UTC');
839
		$limit_query = '';
840
		if ($limit != "")
841
		{
842
			$limit_array = explode(",", $limit);
843
			
844
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
845
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
846
			
847
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
848
			{
849
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
850
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
851
			}
852
		}
853
		
854
		if ($sort != "")
855
		{
856
			$search_orderby_array = $this->getOrderBy();
857
			$orderby_query = $search_orderby_array[$sort]['sql'];
858
		} else {
859
			$orderby_query = " ORDER BY spotter_output.date DESC ";
860
		}
861
862
		$query  = $global_query." WHERE 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;
863
864
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
865
866
		return $spotter_array;
867
	}
868
    
869
    
870
    /**
871
	* Gets all the spotter information sorted by the newest aircraft registration
872
	*
873
	* @return Array the spotter information
874
	*
875
	*/
876
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '')
877
	{
878
		global $global_query;
879
		
880
		date_default_timezone_set('UTC');
881
		$limit_query = '';
882
		
883
		if ($limit != "")
884
		{
885
			$limit_array = explode(",", $limit);
886
			
887
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
888
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
889
			
890
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
891
			{
892
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
893
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
894
			}
895
		}
896
		
897
		if ($sort != "")
898
		{
899
			$search_orderby_array = $this->getOrderBy();
900
			$orderby_query = $search_orderby_array[$sort]['sql'];
901
		} else {
902
			$orderby_query = " ORDER BY spotter_output.date DESC ";
903
		}
904
905
		$query  = $global_query." WHERE 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;
906
907
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
908
909
		return $spotter_array;
910
	}
911
    
912
    
913
    /**
914
	* Gets all the spotter information sorted by the newest airline
915
	*
916
	* @return Array the spotter information
917
	*
918
	*/
919
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '')
920
	{
921
		global $global_query;
922
		
923
		date_default_timezone_set('UTC');
924
		$limit_query = '';
925
		if ($limit != "")
926
		{
927
			$limit_array = explode(",", $limit);
928
			
929
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
930
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
931
			
932
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
933
			{
934
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
935
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
936
			}
937
		}
938
		
939
		if ($sort != "")
940
		{
941
			$search_orderby_array = $this->getOrderBy();
942
			$orderby_query = $search_orderby_array[$sort]['sql'];
943
		} else {
944
			$orderby_query = " ORDER BY spotter_output.date DESC ";
945
		}
946
947
		$query  = $global_query." WHERE 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;
948
949
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
950
951
		return $spotter_array;
952
	}
953
    
954
    
955
    /**
956
	* Gets all the spotter information sorted by the newest departure airport
957
	*
958
	* @return Array the spotter information
959
	*
960
	*/
961
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '')
962
	{
963
		global $global_query;
964
		
965
		date_default_timezone_set('UTC');
966
		$limit_query = '';
967
		
968
		if ($limit != "")
969
		{
970
			$limit_array = explode(",", $limit);
971
			
972
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
973
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
974
			
975
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
976
			{
977
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
978
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
979
			}
980
		}
981
		
982
		if ($sort != "")
983
		{
984
			$search_orderby_array = $this->getOrderBy();
985
			$orderby_query = $search_orderby_array[$sort]['sql'];
986
		} else {
987
			$orderby_query = " ORDER BY spotter_output.date DESC ";
988
		}
989
990
		$query  = $global_query." WHERE 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;
991
992
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
993
994
		return $spotter_array;
995
	}
996
    
997
    
998
    /**
999
	* Gets all the spotter information sorted by the newest arrival airport
1000
	*
1001
	* @return Array the spotter information
1002
	*
1003
	*/
1004
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '')
1005
	{
1006
		global $global_query;
1007
		
1008
		date_default_timezone_set('UTC');
1009
		$limit_query = '';
1010
		
1011
		if ($limit != "")
1012
		{
1013
			$limit_array = explode(",", $limit);
1014
			
1015
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1016
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1017
			
1018
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1019
			{
1020
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1021
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1022
			}
1023
		}
1024
		
1025
		if ($sort != "")
1026
		{
1027
			$search_orderby_array = $this->getOrderBy();
1028
			$orderby_query = $search_orderby_array[$sort]['sql'];
1029
		} else {
1030
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1031
		}
1032
1033
		$query  = $global_query." WHERE 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;
1034
1035
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1036
1037
		return $spotter_array;
1038
	}
1039
	
1040
1041
	/**
1042
	* Gets all the spotter information based on the spotter id
1043
	*
1044
	* @return Array the spotter information
1045
	*
1046
	*/
1047
	public function getSpotterDataByID($id = '')
1048
	{
1049
		global $global_query;
1050
		
1051
		date_default_timezone_set('UTC');
1052
		$query_values = array();
1053
		$additional_query = '';
1054
		if ($id != "")
1055
		{
1056
			if (!is_string($id))
1057
			{
1058
				return false;
1059
			} else {
1060
				$additional_query = " AND (spotter_output.spotter_id = :id)";
1061
				$query_values = array(':id' => $id);
1062
			}
1063
		}
1064
1065
		$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1066
1067
		$spotter_array = $this->getDataFromDB($query,$query_values);
1068
1069
		return $spotter_array;
1070
	}
1071
1072
	
1073
	
1074
	
1075
	/**
1076
	* Gets all the spotter information based on the callsign
1077
	*
1078
	* @return Array the spotter information
1079
	*
1080
	*/
1081
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1082
	{
1083
		global $global_query;
1084
		
1085
		date_default_timezone_set('UTC');
1086
		
1087
		$query_values = array();
1088
		$limit_query = '';
1089
		$additional_query = '';
1090
		if ($ident != "")
1091
		{
1092
			if (!is_string($ident))
1093
			{
1094
				return false;
1095
			} else {
1096
				$additional_query = " AND (spotter_output.ident = :ident)";
1097
				$query_values = array(':ident' => $ident);
1098
			}
1099
		}
1100
		
1101
		if ($limit != "")
1102
		{
1103
			$limit_array = explode(",", $limit);
1104
			
1105
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1106
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1107
			
1108
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1109
			{
1110
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1111
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1112
			}
1113
		}
1114
1115
		if ($sort != "")
1116
		{
1117
			$search_orderby_array = $this->getOrderBy();
1118
			$orderby_query = $search_orderby_array[$sort]['sql'];
1119
		} else {
1120
			$orderby_query = " ORDER BY spotter_output.date DESC";
1121
		}
1122
1123
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1124
1125
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1126
1127
		return $spotter_array;
1128
	}
1129
	
1130
	
1131
	
1132
	/**
1133
	* Gets all the spotter information based on the aircraft type
1134
	*
1135
	* @return Array the spotter information
1136
	*
1137
	*/
1138
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '')
1139
	{
1140
		global $global_query;
1141
		
1142
		date_default_timezone_set('UTC');
1143
		
1144
		$query_values = array();
1145
		$limit_query = '';
1146
		$additional_query = '';
1147
		
1148
		if ($aircraft_type != "")
1149
		{
1150
			if (!is_string($aircraft_type))
1151
			{
1152
				return false;
1153
			} else {
1154
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1155
				$query_values = array(':aircraft_type' => $aircraft_type);
1156
			}
1157
		}
1158
		
1159
		if ($limit != "")
1160
		{
1161
			$limit_array = explode(",", $limit);
1162
			
1163
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1164
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1165
			
1166
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1167
			{
1168
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1169
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1170
			}
1171
		}
1172
1173
		if ($sort != "")
1174
		{
1175
			$search_orderby_array = $this->getOrderBy();
1176
			$orderby_query = $search_orderby_array[$sort]['sql'];
1177
		} else {
1178
			$orderby_query = " ORDER BY spotter_output.date DESC";
1179
		}
1180
1181
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1182
1183
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1184
1185
		return $spotter_array;
1186
	}
1187
	
1188
	
1189
	/**
1190
	* Gets all the spotter information based on the aircraft registration
1191
	*
1192
	* @return Array the spotter information
1193
	*
1194
	*/
1195
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '')
1196
	{
1197
		global $global_query;
1198
		
1199
		date_default_timezone_set('UTC');
1200
		
1201
		$query_values = array();
1202
		$limit_query = '';
1203
		$additional_query = '';
1204
		
1205
		if ($registration != "")
1206
		{
1207
			if (!is_string($registration))
1208
			{
1209
				return false;
1210
			} else {
1211
				$additional_query = " AND (spotter_output.registration = :registration)";
1212
				$query_values = array(':registration' => $registration);
1213
			}
1214
		}
1215
		
1216
		if ($limit != "")
1217
		{
1218
			$limit_array = explode(",", $limit);
1219
			
1220
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1221
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1222
			
1223
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1224
			{
1225
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1226
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1227
			}
1228
		}
1229
1230
		if ($sort != "")
1231
		{
1232
			$search_orderby_array = $this->getOrderBy();
1233
			$orderby_query = $search_orderby_array[$sort]['sql'];
1234
		} else {
1235
			$orderby_query = " ORDER BY spotter_output.date DESC";
1236
		}
1237
1238
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1239
1240
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1241
1242
		return $spotter_array;
1243
	}
1244
1245
	
1246
	
1247
	
1248
	/**
1249
	* Gets all the spotter information based on the airline
1250
	*
1251
	* @return Array the spotter information
1252
	*
1253
	*/
1254
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '')
1255
	{
1256
		global $global_query;
1257
		
1258
		date_default_timezone_set('UTC');
1259
1260
		$query_values = array();
1261
		$limit_query = '';
1262
		$additional_query = '';
1263
		
1264
		if ($airline != "")
1265
		{
1266
			if (!is_string($airline))
1267
			{
1268
				return false;
1269
			} else {
1270
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1271
				$query_values = array(':airline' => $airline);
1272
			}
1273
		}
1274
		
1275
		if ($limit != "")
1276
		{
1277
			$limit_array = explode(",", $limit);
1278
			
1279
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1280
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1281
			
1282
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1283
			{
1284
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1285
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1286
			}
1287
		}
1288
		
1289
		if ($sort != "")
1290
		{
1291
			$search_orderby_array = $this->getOrderBy();
1292
			$orderby_query = $search_orderby_array[$sort]['sql'];
1293
		} else {
1294
			$orderby_query = " ORDER BY spotter_output.date DESC";
1295
		}
1296
1297
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1298
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1299
1300
		return $spotter_array;
1301
	}
1302
	
1303
	
1304
	/**
1305
	* Gets all the spotter information based on the airport
1306
	*
1307
	* @return Array the spotter information
1308
	*
1309
	*/
1310
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '')
1311
	{
1312
		global $global_query;
1313
		
1314
		date_default_timezone_set('UTC');
1315
		$query_values = array();
1316
		$limit_query = '';
1317
		$additional_query = '';
1318
		
1319
		if ($airport != "")
1320
		{
1321
			if (!is_string($airport))
1322
			{
1323
				return false;
1324
			} else {
1325
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1326
				$query_values = array(':airport' => $airport);
1327
			}
1328
		}
1329
		
1330
		if ($limit != "")
1331
		{
1332
			$limit_array = explode(",", $limit);
1333
			
1334
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1335
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1336
			
1337
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1338
			{
1339
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1340
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1341
			}
1342
		}
1343
		
1344
		if ($sort != "")
1345
		{
1346
			$search_orderby_array = $this->getOrderBy();
1347
			$orderby_query = $search_orderby_array[$sort]['sql'];
1348
		} else {
1349
			$orderby_query = " ORDER BY spotter_output.date DESC";
1350
		}
1351
1352
		$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;
1353
1354
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1355
1356
		return $spotter_array;
1357
	}
1358
1359
1360
1361
	/**
1362
	* Gets all the spotter information based on the date
1363
	*
1364
	* @return Array the spotter information
1365
	*
1366
	*/
1367
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '')
1368
	{
1369
		global $global_query, $globalTimezone, $globalDBdriver;
1370
		
1371
		$query_values = array();
1372
		$limit_query = '';
1373
		$additional_query = '';
1374
		
1375
		if ($date != "")
1376
		{
1377
			if ($globalTimezone != '') {
1378
				date_default_timezone_set($globalTimezone);
1379
				$datetime = new DateTime($date);
1380
				$offset = $datetime->format('P');
1381
			} else {
1382
				date_default_timezone_set('UTC');
1383
				$datetime = new DateTime($date);
1384
				$offset = '+00:00';
1385
			}
1386
			if ($globalDBdriver == 'mysql') {
1387
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1388
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1389
			} elseif ($globalDBdriver == 'pgsql') {
1390
				$additional_query = " AND spotter_output.date AT TIME ZONE :timezone = :date ";
1391
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1392
			}
1393
		}
1394
		
1395
		if ($limit != "")
1396
		{
1397
			$limit_array = explode(",", $limit);
1398
			
1399
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1400
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1401
			
1402
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1403
			{
1404
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1405
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1406
			}
1407
		}
1408
1409
		if ($sort != "")
1410
		{
1411
			$search_orderby_array = $this->getOrderBy();
1412
			$orderby_query = $search_orderby_array[$sort]['sql'];
1413
		} else {
1414
			$orderby_query = " ORDER BY spotter_output.date DESC";
1415
		}
1416
1417
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1418
		
1419
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1420
1421
		return $spotter_array;
1422
	}
1423
1424
1425
1426
	/**
1427
	* Gets all the spotter information based on the country name
1428
	*
1429
	* @return Array the spotter information
1430
	*
1431
	*/
1432
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '')
1433
	{
1434
		global $global_query;
1435
		
1436
		date_default_timezone_set('UTC');
1437
		
1438
		$query_values = array();
1439
		$limit_query = '';
1440
		$additional_query = '';
1441
		if ($country != "")
1442
		{
1443
			if (!is_string($country))
1444
			{
1445
				return false;
1446
			} else {
1447
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1448
				$additional_query .= " OR spotter_output.airline_country = :country";
1449
				$query_values = array(':country' => $country);
1450
			}
1451
		}
1452
		
1453
		if ($limit != "")
1454
		{
1455
			$limit_array = explode(",", $limit);
1456
			
1457
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1458
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1459
			
1460
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1461
			{
1462
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1463
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1464
			}
1465
		}
1466
					
1467
		if ($sort != "")
1468
		{
1469
			$search_orderby_array = $this->getOrderBy();
1470
			$orderby_query = $search_orderby_array[$sort]['sql'];
1471
		} else {
1472
			$orderby_query = " ORDER BY spotter_output.date DESC";
1473
		}
1474
1475
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1476
1477
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1478
1479
		return $spotter_array;
1480
	}	
1481
	
1482
	
1483
	/**
1484
	* Gets all the spotter information based on the manufacturer name
1485
	*
1486
	* @return Array the spotter information
1487
	*
1488
	*/
1489
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '')
1490
	{
1491
		global $global_query;
1492
		
1493
		date_default_timezone_set('UTC');
1494
		
1495
		$query_values = array();
1496
		$additional_query = '';
1497
		$limit_query = '';
1498
		
1499
		if ($aircraft_manufacturer != "")
1500
		{
1501
			if (!is_string($aircraft_manufacturer))
1502
			{
1503
				return false;
1504
			} else {
1505
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1506
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1507
			}
1508
		}
1509
		
1510
		if ($limit != "")
1511
		{
1512
			$limit_array = explode(",", $limit);
1513
			
1514
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1515
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1516
			
1517
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1518
			{
1519
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1520
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1521
			}
1522
		}
1523
1524
		if ($sort != "")
1525
		{
1526
			$search_orderby_array = $this->getOrderBy();
1527
			$orderby_query = $search_orderby_array[$sort]['sql'];
1528
		} else {
1529
			$orderby_query = " ORDER BY spotter_output.date DESC";
1530
		}
1531
1532
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1533
1534
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1535
1536
		return $spotter_array;
1537
	}
1538
1539
1540
  
1541
  
1542
	/**
1543
	* Gets a list of all aircraft that take a route
1544
	*
1545
	* @param String $departure_airport_icao ICAO code of departure airport
1546
	* @param String $arrival_airport_icao ICAO code of arrival airport
1547
	* @return Array the spotter information
1548
	*
1549
	*/
1550
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '')
1551
	{
1552
		global $global_query;
1553
		
1554
		$query_values = array();
1555
		$additional_query = '';
1556
		$limit_query = '';
1557
		if ($departure_airport_icao != "")
1558
		{
1559
			if (!is_string($departure_airport_icao))
1560
			{
1561
				return false;
1562
			} else {
1563
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1564
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1565
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1566
			}
1567
		}
1568
		
1569
		if ($arrival_airport_icao != "")
1570
		{
1571
			if (!is_string($arrival_airport_icao))
1572
			{
1573
				return false;
1574
			} else {
1575
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1576
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1577
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1578
			}
1579
		}
1580
		
1581
		if ($limit != "")
1582
		{
1583
			$limit_array = explode(",", $limit);
1584
			
1585
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1586
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1587
			
1588
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1589
			{
1590
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1591
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1592
			}
1593
		}
1594
	
1595
		if ($sort != "")
1596
		{
1597
			$search_orderby_array = $this->getOrderBy();
1598
			$orderby_query = $search_orderby_array[$sort]['sql'];
1599
		} else {
1600
			$orderby_query = " ORDER BY spotter_output.date DESC";
1601
		}
1602
1603
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1604
          
1605
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1606
1607
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1608
1609
		return $spotter_array;
1610
	}
1611
	
1612
	
1613
	
1614
	/**
1615
	* Gets all the spotter information based on the special column in the table
1616
	*
1617
	* @return Array the spotter information
1618
	*
1619
	*/
1620
	public function getSpotterDataByHighlight($limit = '', $sort = '')
1621
	{
1622
		global $global_query;
1623
		
1624
		date_default_timezone_set('UTC');
1625
		$limit_query = '';
1626
		
1627
		if ($limit != "")
1628
		{
1629
			$limit_array = explode(",", $limit);
1630
			
1631
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1632
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1633
			
1634
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1635
			{
1636
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1637
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1638
			}
1639
		}
1640
		
1641
		if ($sort != "")
1642
		{
1643
			$search_orderby_array = $this->getOrderBy();
1644
			$orderby_query = $search_orderby_array[$sort]['sql'];
1645
		} else {
1646
			$orderby_query = " ORDER BY spotter_output.date DESC";
1647
		}
1648
1649
		$query  = $global_query." WHERE spotter_output.highlight <> '' ".$orderby_query;
1650
1651
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1652
1653
		return $spotter_array;
1654
	}
1655
    
1656
    
1657
    
1658
    /**
1659
	* Gets all the highlight based on a aircraft registration
1660
	*
1661
	* @return String the highlight text
1662
	*
1663
	*/
1664
	public function getHighlightByRegistration($registration)
1665
	{
1666
		global $global_query;
1667
		
1668
		date_default_timezone_set('UTC');
1669
		
1670
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1671
1672
		
1673
		$query  = $global_query." WHERE spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1674
		$sth = $this->db->prepare($query);
1675
		$sth->execute(array(':registration' => $registration));
1676
1677
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1678
		{
1679
			$highlight = $row['highlight'];
1680
		}
1681
		if (isset($highlight)) return $highlight;
1682
	}
1683
1684
	
1685
	/**
1686
	* Gets the squawk usage from squawk code
1687
	*
1688
	* @param String $squawk squawk code
1689
	* @param String $country country
1690
	* @return String usage
1691
	*
1692
	*/
1693
	public function getSquawkUsage($squawk = '',$country = 'FR')
1694
	{
1695
		
1696
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1697
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1698
1699
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1700
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1701
		
1702
		$sth = $this->db->prepare($query);
1703
		$sth->execute($query_values);
1704
    
1705
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1706
		if (count($row) > 0) {
1707
			return $row['usage'];
1708
		} else return '';
1709
	}
1710
1711
	/**
1712
	* Gets the airport icao from the iata
1713
	*
1714
	* @param String $airport_iata the iata code of the airport
1715
	* @return String airport iata
1716
	*
1717
	*/
1718
	public function getAirportIcao($airport_iata = '')
1719
	{
1720
		
1721
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1722
1723
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1724
		$query_values = array(':airport' => $airport_iata);
1725
		
1726
		$sth = $this->db->prepare($query);
1727
		$sth->execute($query_values);
1728
		
1729
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1730
		if (count($row) > 0) {
1731
			return $row['icao'];
1732
		} else return '';
1733
	}
1734
1735
	/**
1736
	* Gets the airport distance
1737
	*
1738
	* @param String $airport_icao the icao code of the airport
1739
	* @param Float $latitude the latitude
1740
	* @param Float $longitude the longitude
1741
	* @return Float distance to the airport
1742
	*
1743
	*/
1744
	public function getAirportDistance($airport_icao,$latitude,$longitude)
1745
	{
1746
		
1747
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
1748
1749
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
1750
		$query_values = array(':airport' => $airport_icao);
1751
		$sth = $this->db->prepare($query);
1752
		$sth->execute($query_values);
1753
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1754
		if (count($row) > 0) {
1755
			$airport_latitude = $row['latitude'];
1756
			$airport_longitude = $row['longitude'];
1757
			$Common = new Common();
1758
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
1759
		} else return '';
1760
	}
1761
	
1762
	/**
1763
	* Gets the airport info based on the icao
1764
	*
1765
	* @param String $airport the icao code of the airport
1766
	* @return Array airport information
1767
	*
1768
	*/
1769
	public function getAllAirportInfo($airport = '')
1770
	{
1771
		
1772
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
1773
1774
		$query_values = array();
1775
		if ($airport == 'NA') {
1776
			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' => ''));
1777
		} elseif ($airport == '') {
1778
			$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";
1779
		} else {
1780
			$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";
1781
			$query_values = array(':airport' => $airport);
1782
		}
1783
		
1784
		$sth = $this->db->prepare($query);
1785
		$sth->execute($query_values);
1786
		/*
1787
		$airport_array = array();
1788
		$temp_array = array();
1789
		
1790
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1791
		{
1792
			$temp_array['name'] = $row['name'];
1793
			$temp_array['city'] = $row['city'];
1794
			$temp_array['country'] = $row['country'];
1795
			$temp_array['iata'] = $row['iata'];
1796
			$temp_array['icao'] = $row['icao'];
1797
			$temp_array['latitude'] = $row['latitude'];
1798
			$temp_array['longitude'] = $row['longitude'];
1799
			$temp_array['altitude'] = $row['altitude'];
1800
			$temp_array['home_link'] = $row['home_link'];
1801
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
1802
			$temp_array['image'] = $row['image'];
1803
			$temp_array['image_thumb'] = $row['image_thumb'];
1804
1805
			$airport_array[] = $temp_array;
1806
		}
1807
1808
		return $airport_array;
1809
		*/
1810
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1811
	}
1812
	
1813
	/**
1814
	* Gets the airport info based on the country
1815
	*
1816
	* @param Array $countries Airports countries
1817
	* @return Array airport information
1818
	*
1819
	*/
1820
	public function getAllAirportInfobyCountry($countries)
1821
	{
1822
		$lst_countries = '';
1823
		foreach ($countries as $country) {
1824
			$country = filter_var($country,FILTER_SANITIZE_STRING);
1825
			if ($lst_countries == '') {
1826
				$lst_countries = "'".$country."'";
1827
			} else {
1828
				$lst_countries .= ",'".$country."'";
1829
			}
1830
		}
1831
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
1832
		
1833
		$sth = $this->db->prepare($query);
1834
		$sth->execute();
1835
    
1836
		$airport_array = array();
1837
		$temp_array = array();
1838
		
1839
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1840
		{
1841
			$temp_array['name'] = $row['name'];
1842
			$temp_array['city'] = $row['city'];
1843
			$temp_array['country'] = $row['country'];
1844
			$temp_array['iata'] = $row['iata'];
1845
			$temp_array['icao'] = $row['icao'];
1846
			$temp_array['latitude'] = $row['latitude'];
1847
			$temp_array['longitude'] = $row['longitude'];
1848
			$temp_array['altitude'] = $row['altitude'];
1849
1850
			$airport_array[] = $temp_array;
1851
		}
1852
1853
		return $airport_array;
1854
	}
1855
	
1856
	/**
1857
	* Gets airports info based on the coord
1858
	*
1859
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
1860
	* @return Array airport information
1861
	*
1862
	*/
1863
	public function getAllAirportInfobyCoord($coord)
1864
	{
1865
		global $globalDBdriver;
1866
		if (is_array($coord)) {
1867
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1868
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1869
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1870
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1871
		} else return array();
1872
		if ($globalDBdriver == 'mysql') {
1873
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1874
		} else {
1875
			$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'";
1876
		}
1877
		$sth = $this->db->prepare($query);
1878
		$sth->execute();
1879
    
1880
		$airport_array = array();
1881
		
1882
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1883
		{
1884
			$temp_array = $row;
1885
1886
			$airport_array[] = $temp_array;
1887
		}
1888
1889
		return $airport_array;
1890
	}
1891
1892
	/**
1893
	* Gets waypoints info based on the coord
1894
	*
1895
	* @param Array $coord waypoints coord
1896
	* @return Array airport information
1897
	*
1898
	*/
1899
	public function getAllWaypointsInfobyCoord($coord)
1900
	{
1901
		if (is_array($coord)) {
1902
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1903
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1904
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1905
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1906
		} else return array();
1907
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
1908
		$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.")";
1909
		//$query  = "SELECT waypoints.* FROM waypoints";
1910
		//$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";
1911
		//$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;
1912
		//$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;
1913
		//echo $query;
1914
		
1915
		$sth = $this->db->prepare($query);
1916
		$sth->execute();
1917
    
1918
		$waypoints_array = array();
1919
		
1920
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1921
		{
1922
			$temp_array = $row;
1923
1924
			$waypoints_array[] = $temp_array;
1925
		}
1926
1927
		return $waypoints_array;
1928
	}
1929
	
1930
	
1931
	/**
1932
	* Gets the airline info based on the icao code or iata code
1933
	*
1934
	* @param String $airline_icao the iata code of the airport
1935
	* @return Array airport information
1936
	*
1937
	*/
1938
	public function getAllAirlineInfo($airline_icao)
1939
	{
1940
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
1941
		if ($airline_icao == 'NA') {
1942
			$airline_array = array();
1943
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
1944
			return $airline_array;
1945
		} else {
1946
			if (strlen($airline_icao) == 2) {
1947
				$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' LIMIT 1";
1948
			} else {
1949
				$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' LIMIT 1";
1950
			}
1951
			
1952
			$sth = $this->db->prepare($query);
1953
			$sth->execute(array(':airline_icao' => $airline_icao));
1954
                        /*
1955
			$airline_array = array();
1956
			$temp_array = array();
1957
		
1958
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
1959
			{
1960
				$temp_array['name'] = $row['name'];
1961
				$temp_array['iata'] = $row['iata'];
1962
				$temp_array['icao'] = $row['icao'];
1963
				$temp_array['callsign'] = $row['callsign'];
1964
				$temp_array['country'] = $row['country'];
1965
				$temp_array['type'] = $row['type'];
1966
				$airline_array[] = $temp_array;
1967
			}
1968
			return $airline_array;
1969
			*/
1970
			return $sth->fetchAll(PDO::FETCH_ASSOC);
1971
		}
1972
	}
1973
	
1974
	
1975
	
1976
	/**
1977
	* Gets the aircraft info based on the aircraft type
1978
	*
1979
	* @param String $aircraft_type the aircraft type
1980
	* @return Array aircraft information
1981
	*
1982
	*/
1983
	public function getAllAircraftInfo($aircraft_type)
1984
	{
1985
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
1986
1987
		if ($aircraft_type == 'NA') {
1988
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
1989
		}
1990
		$query  = "SELECT aircraft.icao, aircraft.type,aircraft.manufacturer,aircraft.aircraft_shadow FROM aircraft WHERE aircraft.icao = :aircraft_type";
1991
		
1992
		$sth = $this->db->prepare($query);
1993
		$sth->execute(array(':aircraft_type' => $aircraft_type));
1994
		/*
1995
		$aircraft_array = array();
1996
		$temp_array = array();
1997
		
1998
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1999
		{
2000
			$temp_array = array();
2001
			$temp_array['icao'] = $row['icao'];
2002
			$temp_array['type'] = $row['type'];
2003
			$temp_array['manufacturer'] = $row['manufacturer'];
2004
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2005
2006
			$aircraft_array[] = $temp_array;
2007
		}
2008
		return $aircraft_array;
2009
		*/
2010
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2011
	}
2012
2013
	/**
2014
	* Gets the aircraft icao based on the aircraft name/type
2015
	*
2016
	* @param String $aircraft_type the aircraft type
2017
	* @return String aircraft information
2018
	*
2019
	*/
2020
	public function getAircraftIcao($aircraft_type)
2021
	{
2022
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2023
		$all_aircraft = array('737-300' => 'B733',
2024
				'777-200' => 'B772',
2025
				'777-200ER' => 'B772',
2026
				'777-300ER' => 'B77W',
2027
				'c172p' => 'C172',
2028
				'aerostar' => 'AEST',
2029
				'A320-211' => 'A320',
2030
				'747-8i' => 'B748',
2031
				'A380' => 'A388');
2032
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2033
2034
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2035
		$aircraft_type = strtoupper($aircraft_type);
2036
		$sth = $this->db->prepare($query);
2037
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2038
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2039
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2040
		else return '';
2041
	}
2042
	
2043
	/**
2044
	* Gets the aircraft info based on the aircraft ident
2045
	*
2046
	* @param String $aircraft_modes the aircraft ident (hex)
2047
	* @return String aircraft type
2048
	*
2049
	*/
2050
	public function getAllAircraftType($aircraft_modes)
2051
	{
2052
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2053
2054
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
2055
		
2056
		$sth = $this->db->prepare($query);
2057
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2058
2059
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2060
		if (isset($row['icaotypecode'])) {
2061
			return $row['icaotypecode'];
2062
		} else return '';
2063
	}
2064
2065
	/**
2066
	* Gets correct aircraft operator corde
2067
	*
2068
	* @param String $operator the aircraft operator code (callsign)
2069
	* @return String aircraft operator code
2070
	*
2071
	*/
2072
	public function getOperator($operator)
2073
	{
2074
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2075
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2076
		
2077
		$sth = $this->db->prepare($query);
2078
		$sth->execute(array(':operator' => $operator));
2079
2080
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2081
		if (isset($row['operator_correct'])) {
2082
			return $row['operator_correct'];
2083
		} else return $operator;
2084
	}
2085
2086
	/**
2087
	* Gets the aircraft route based on the aircraft callsign
2088
	*
2089
	* @param String $callsign the aircraft callsign
2090
	* @return Array aircraft type
2091
	*
2092
	*/
2093
	public function getRouteInfo($callsign)
2094
	{
2095
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2096
                if ($callsign == '') return array();
2097
		$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";
2098
		
2099
		$sth = $this->db->prepare($query);
2100
		$sth->execute(array(':callsign' => $callsign));
2101
2102
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2103
		if (count($row) > 0) {
2104
			return $row;
2105
		} else return array();
2106
	}
2107
	
2108
	/**
2109
	* Gets the aircraft info based on the aircraft registration
2110
	*
2111
	* @param String $registration the aircraft registration
2112
	* @return Array aircraft information
2113
	*
2114
	*/
2115
	public function getAircraftInfoByRegistration($registration)
2116
	{
2117
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2118
2119
		$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";
2120
		
2121
		$sth = $this->db->prepare($query);
2122
		$sth->execute(array(':registration' => $registration));
2123
2124
		$aircraft_array = array();
2125
		$temp_array = array();
2126
		
2127
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2128
		{
2129
			$temp_array['airline_icao'] = $row['airline_icao'];
2130
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2131
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2132
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2133
2134
			$aircraft_array[] = $temp_array;
2135
		}
2136
2137
		return $aircraft_array;
2138
	}
2139
	
2140
	/**
2141
	* Gets the aircraft owner & base based on the aircraft registration
2142
	*
2143
	* @param String $registration the aircraft registration
2144
	* @return Array aircraft information
2145
	*
2146
	*/
2147
	public function getAircraftOwnerByRegistration($registration)
2148
	{
2149
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2150
		$Connection = new Connection($this->db);
2151
		if ($Connection->tableExists('aircraft_owner')) {
2152
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2153
			$sth = $this->db->prepare($query);
2154
			$sth->execute(array(':registration' => $registration));
2155
2156
			return $sth->fetch(PDO::FETCH_ASSOC);
2157
		} else return array();
2158
	}
2159
	
2160
  
2161
  /**
2162
	* Gets all flights (but with only little info)
2163
	*
2164
	* @return Array basic flight information
2165
	*
2166
	*/
2167
	public function getAllFlightsforSitemap()
2168
	{
2169
		//$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 ";
2170
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2171
		
2172
		$sth = $this->db->prepare($query);
2173
		$sth->execute();
2174
                  /*
2175
		$flight_array = array();
2176
		$temp_array = array();
2177
		
2178
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2179
		{
2180
			$temp_array['spotter_id'] = $row['spotter_id'];
2181
//			$temp_array['ident'] = $row['ident'];
2182
//			$temp_array['airline_name'] = $row['airline_name'];
2183
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2184
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2185
			//$temp_array['image'] = $row['image'];
2186
2187
			$flight_array[] = $temp_array;
2188
		}
2189
2190
		return $flight_array;
2191
		*/
2192
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2193
	}
2194
  
2195
	/**
2196
	* Gets a list of all aircraft manufacturers
2197
	*
2198
	* @return Array list of aircraft types
2199
	*
2200
	*/
2201
	public function getAllManufacturers()
2202
	{
2203
		/*
2204
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2205
								FROM spotter_output
2206
								WHERE spotter_output.aircraft_manufacturer <> '' 
2207
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2208
		  */
2209
		
2210
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2211
		$sth = $this->db->prepare($query);
2212
		$sth->execute();
2213
2214
		$manufacturer_array = array();
2215
		$temp_array = array();
2216
		
2217
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2218
		{
2219
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2220
2221
			$manufacturer_array[] = $temp_array;
2222
		}
2223
2224
		return $manufacturer_array;
2225
	}
2226
  
2227
  
2228
  /**
2229
	* Gets a list of all aircraft types
2230
	*
2231
	* @return Array list of aircraft types
2232
	*
2233
	*/
2234
	public function getAllAircraftTypes()
2235
	{
2236
		/*
2237
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2238
								FROM spotter_output  
2239
								WHERE spotter_output.aircraft_icao <> '' 
2240
								ORDER BY spotter_output.aircraft_name ASC";
2241
								
2242
		*/
2243
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_name ASC";
2244
		
2245
		$sth = $this->db->prepare($query);
2246
		$sth->execute();
2247
2248
		$aircraft_array = array();
2249
		$temp_array = array();
2250
		
2251
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2252
		{
2253
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2254
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2255
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2256
2257
			$aircraft_array[] = $temp_array;
2258
		}
2259
2260
		return $aircraft_array;
2261
	}
2262
	
2263
	
2264
	/**
2265
	* Gets a list of all aircraft registrations
2266
	*
2267
	* @return Array list of aircraft registrations
2268
	*
2269
	*/
2270
	public function getAllAircraftRegistrations()
2271
	{
2272
		$query  = "SELECT DISTINCT spotter_output.registration 
2273
				FROM spotter_output  
2274
				WHERE spotter_output.registration <> '' 
2275
				ORDER BY spotter_output.registration ASC";
2276
2277
		$sth = $this->db->prepare($query);
2278
		$sth->execute();
2279
2280
		$aircraft_array = array();
2281
		$temp_array = array();
2282
		
2283
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2284
		{
2285
			$temp_array['registration'] = $row['registration'];
2286
2287
			$aircraft_array[] = $temp_array;
2288
		}
2289
2290
		return $aircraft_array;
2291
	}
2292
2293
	/**
2294
	* Gets all source name
2295
	*
2296
	* @param String type format of source
2297
	* @return Array list of source name
2298
	*
2299
	*/
2300
	public function getAllSourceName($type = '')
2301
	{
2302
		$query_values = array();
2303
		$query  = "SELECT DISTINCT spotter_output.source_name 
2304
				FROM spotter_output  
2305
				WHERE spotter_output.source_name <> ''";
2306
		if ($type != '') {
2307
			$query_values = array(':type' => $type);
2308
			$query .= " AND format_source = :type";
2309
		}
2310
		$query .= " ORDER BY spotter_output.source_name ASC";
2311
2312
		$sth = $this->db->prepare($query);
2313
		if (!empty($query_values)) $sth->execute($query_values);
2314
		else $sth->execute();
2315
2316
		$source_array = array();
2317
		$temp_array = array();
2318
		
2319
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2320
		{
2321
			$temp_array['source_name'] = $row['source_name'];
2322
			$source_array[] = $temp_array;
2323
		}
2324
		return $source_array;
2325
	}
2326
2327
2328
2329
	/**
2330
	* Gets a list of all airline names
2331
	*
2332
	* @return Array list of airline names
2333
	*
2334
	*/
2335
	public function getAllAirlineNames($airline_type = '')
2336
	{
2337
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2338
		if ($airline_type == '' || $airline_type == 'all') {
2339
			/*
2340
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2341
								FROM spotter_output
2342
								WHERE spotter_output.airline_icao <> '' 
2343
								ORDER BY spotter_output.airline_name ASC";
2344
			*/
2345
			$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines ORDER BY name ASC";
2346
		} else {
2347
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2348
					FROM spotter_output
2349
					WHERE spotter_output.airline_icao <> '' 
2350
					AND spotter_output.airline_type = :airline_type 
2351
					ORDER BY spotter_output.airline_icao ASC";
2352
		}
2353
		
2354
		$sth = $this->db->prepare($query);
2355
		if ($airline_type != '' || $airline_type == 'all') {
2356
			$sth->execute(array(':airline_type' => $airline_type));
2357
		} else {
2358
			$sth->execute();
2359
		}
2360
    
2361
		$airline_array = array();
2362
		$temp_array = array();
2363
		
2364
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2365
		{
2366
			$temp_array['airline_icao'] = $row['airline_icao'];
2367
			$temp_array['airline_name'] = $row['airline_name'];
2368
			$temp_array['airline_type'] = $row['airline_type'];
2369
2370
			$airline_array[] = $temp_array;
2371
		}
2372
		return $airline_array;
2373
	}
2374
	
2375
	
2376
	/**
2377
	* Gets a list of all airline countries
2378
	*
2379
	* @return Array list of airline countries
2380
	*
2381
	*/
2382
	public function getAllAirlineCountries()
2383
	{
2384
		
2385
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2386
				FROM spotter_output  
2387
				WHERE spotter_output.airline_country <> '' 
2388
				ORDER BY spotter_output.airline_country ASC";
2389
		
2390
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2391
		$sth = $this->db->prepare($query);
2392
		$sth->execute();
2393
2394
		$airline_array = array();
2395
		$temp_array = array();
2396
		
2397
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2398
		{
2399
			$temp_array['airline_country'] = $row['airline_country'];
2400
2401
			$airline_array[] = $temp_array;
2402
		}
2403
2404
		return $airline_array;
2405
	}
2406
2407
	
2408
	
2409
	/**
2410
	* Gets a list of all departure & arrival names
2411
	*
2412
	* @return Array list of airport names
2413
	*
2414
	*/
2415
	public function getAllAirportNames()
2416
	{
2417
		$airport_array = array();
2418
2419
		$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
2420
				FROM spotter_output 
2421
				WHERE spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2422
				ORDER BY spotter_output.departure_airport_city ASC";
2423
		
2424
		//$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";
2425
		$sth = $this->db->prepare($query);
2426
		$sth->execute();
2427
2428
		$temp_array = array();
2429
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2430
		{
2431
			$temp_array['airport_icao'] = $row['airport_icao'];
2432
			$temp_array['airport_name'] = $row['airport_name'];
2433
			$temp_array['airport_city'] = $row['airport_city'];
2434
			$temp_array['airport_country'] = $row['airport_country'];
2435
2436
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2437
		}
2438
2439
		$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
2440
								FROM spotter_output 
2441
								WHERE spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2442
								ORDER BY spotter_output.arrival_airport_city ASC";
2443
					
2444
		$sth = $this->db->prepare($query);
2445
		$sth->execute();
2446
2447
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2448
			{
2449
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2450
		//	{
2451
				$temp_array['airport_icao'] = $row['airport_icao'];
2452
				$temp_array['airport_name'] = $row['airport_name'];
2453
				$temp_array['airport_city'] = $row['airport_city'];
2454
				$temp_array['airport_country'] = $row['airport_country'];
2455
				
2456
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2457
		//	}
2458
		}
2459
2460
		return $airport_array;
2461
	} 
2462
	
2463
	
2464
	/**
2465
	* Gets a list of all departure & arrival airport countries
2466
	*
2467
	* @return Array list of airport countries
2468
	*
2469
	*/
2470
	public function getAllAirportCountries()
2471
	{
2472
		$airport_array = array();
2473
					
2474
		  /*
2475
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2476
								FROM spotter_output
2477
								WHERE spotter_output.departure_airport_country <> '' 
2478
								ORDER BY spotter_output.departure_airport_country ASC";
2479
		*/
2480
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2481
		
2482
		$sth = $this->db->prepare($query);
2483
		$sth->execute();
2484
   
2485
		$temp_array = array();
2486
		
2487
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2488
		{
2489
			$temp_array['airport_country'] = $row['airport_country'];
2490
2491
			$airport_array[$row['airport_country']] = $temp_array;
2492
		}
2493
								
2494
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2495
								FROM spotter_output
2496
								WHERE spotter_output.arrival_airport_country <> '' 
2497
								ORDER BY spotter_output.arrival_airport_country ASC";
2498
					
2499
		$sth = $this->db->prepare($query);
2500
		$sth->execute();
2501
		
2502
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2503
		{
2504
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2505
			{
2506
				$temp_array['airport_country'] = $row['airport_country'];
2507
				$airport_array[$row['airport_country']] = $temp_array;
2508
			}
2509
		}
2510
2511
		return $airport_array;
2512
	} 
2513
	
2514
	
2515
	
2516
	
2517
	/**
2518
	* Gets a list of all countries (airline, departure airport & arrival airport)
2519
	*
2520
	* @return Array list of countries
2521
	*
2522
	*/
2523
	public function getAllCountries()
2524
	{
2525
		$Connection= new Connection($this->db);
2526
		if ($Connection->tableExists('countries')) {
2527
		
2528
		$country_array = array();
0 ignored issues
show
Unused Code introduced by
$country_array is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2529
					
2530
		$query  = "SELECT countries.name AS airport_country
2531
				FROM countries
2532
				ORDER BY countries.name ASC";
2533
		$sth = $this->db->prepare($query);
2534
		$sth->execute();
2535
   
2536
		$temp_array = array();
2537
		$country_array = array();
2538
		
2539
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2540
		{
2541
			$temp_array['country'] = $row['airport_country'];
2542
2543
			$country_array[$row['airport_country']] = $temp_array;
2544
		}
2545
		} else {
2546
2547
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2548
								FROM spotter_output
2549
								WHERE spotter_output.departure_airport_country <> '' 
2550
								ORDER BY spotter_output.departure_airport_country ASC";
2551
		
2552
		$sth = $this->db->prepare($query);
2553
		$sth->execute();
2554
   
2555
		$temp_array = array();
2556
		
2557
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2558
		{
2559
			$temp_array['country'] = $row['airport_country'];
2560
2561
			$country_array[$row['airport_country']] = $temp_array;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$country_array was never initialized. Although not strictly required by PHP, it is generally a good practice to add $country_array = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
2562
		}
2563
								
2564
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2565
								FROM spotter_output
2566
								WHERE spotter_output.arrival_airport_country <> '' 
2567
								ORDER BY spotter_output.arrival_airport_country ASC";
2568
					
2569
		$sth = $this->db->prepare($query);
2570
		$sth->execute();
2571
		
2572
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2573
		{
2574
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
2575
			{
2576
				$temp_array['country'] = $row['airport_country'];
2577
				
2578
				$country_array[$row['country']] = $temp_array;
0 ignored issues
show
Bug introduced by
The variable $country_array does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
2579
			}
2580
		}
2581
		
2582
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2583
								FROM spotter_output  
2584
								WHERE spotter_output.airline_country <> '' 
2585
								ORDER BY spotter_output.airline_country ASC";
2586
					
2587
		$sth = $this->db->prepare($query);
2588
		$sth->execute();
2589
		
2590
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2591
		{
2592
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
2593
			{
2594
				$temp_array['country'] = $row['airline_country'];
2595
				
2596
				$country_array[$row['country']] = $temp_array;
2597
			}
2598
		}
2599
		}  
2600
		return $country_array;
2601
	} 
2602
	
2603
	
2604
	
2605
	
2606
	/**
2607
	* Gets a list of all idents/callsigns
2608
	*
2609
	* @return Array list of ident/callsign names
2610
	*
2611
	*/
2612
	public function getAllIdents()
2613
	{
2614
		$query  = "SELECT DISTINCT spotter_output.ident
2615
								FROM spotter_output
2616
								WHERE spotter_output.ident <> '' 
2617
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
2618
2619
		$sth = $this->db->prepare($query);
2620
		$sth->execute();
2621
    
2622
		$ident_array = array();
2623
		$temp_array = array();
2624
		
2625
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2626
		{
2627
			$temp_array['ident'] = $row['ident'];
2628
			$ident_array[] = $temp_array;
2629
		}
2630
2631
		return $ident_array;
2632
	}
2633
2634
	/**
2635
	* Get a list of flights from airport since 7 days
2636
	* @return Array number, icao, name and city of airports
2637
	*/
2638
2639
	public function getLast7DaysAirportsDeparture($airport_icao = '') {
2640
		global $globalTimezone, $globalDBdriver;
2641
		if ($globalTimezone != '') {
2642
			date_default_timezone_set($globalTimezone);
2643
			$datetime = new DateTime();
2644
			$offset = $datetime->format('P');
2645
		} else $offset = '+00:00';
2646
		if ($airport_icao == '') {
2647
			if ($globalDBdriver == 'mysql') {
2648
				$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";
2649
			} else {
2650
				$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";
2651
			}
2652
			$sth = $this->db->prepare($query);
2653
			$sth->execute(array(':offset' => $offset));
2654
		} else {
2655
			if ($globalDBdriver == 'mysql') {
2656
				$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";
2657
			} else {
2658
				$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";
2659
			}
2660
			$sth = $this->db->prepare($query);
2661
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2662
		}
2663
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2664
	}
2665
2666
	/**
2667
	* Get a list of flights from detected airport since 7 days
2668
	* @return Array number, icao, name and city of airports
2669
	*/
2670
2671
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '') {
2672
		global $globalTimezone, $globalDBdriver;
2673
		if ($globalTimezone != '') {
2674
			date_default_timezone_set($globalTimezone);
2675
			$datetime = new DateTime();
2676
			$offset = $datetime->format('P');
2677
		} else $offset = '+00:00';
2678
		if ($airport_icao == '') {
2679
			if ($globalDBdriver == 'mysql') {
2680
				$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 
2681
				FROM `spotter_output`, airport 
2682
				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' 
2683
				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";
2684
			} else {
2685
				$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 
2686
				FROM spotter_output, airport 
2687
				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' 
2688
				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";
2689
			}
2690
			$sth = $this->db->prepare($query);
2691
			$sth->execute(array(':offset' => $offset));
2692
		} else {
2693
			if ($globalDBdriver == 'mysql') {
2694
				$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 
2695
				FROM `spotter_output`, airport 
2696
				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 
2697
				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";
2698
			} else {
2699
				$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 
2700
				FROM spotter_output, airport 
2701
				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";
2702
			}
2703
			$sth = $this->db->prepare($query);
2704
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2705
		}
2706
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2707
	}
2708
2709
	/**
2710
	* Get a list of flights to airport since 7 days
2711
	* @return Array number, icao, name and city of airports
2712
	*/
2713
2714
	public function getLast7DaysAirportsArrival($airport_icao = '') {
2715
		global $globalTimezone, $globalDBdriver;
2716
		if ($globalTimezone != '') {
2717
			date_default_timezone_set($globalTimezone);
2718
			$datetime = new DateTime();
2719
			$offset = $datetime->format('P');
2720
		} else $offset = '+00:00';
2721
		if ($airport_icao == '') {
2722
			if ($globalDBdriver == 'mysql') {
2723
				$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";
2724
			} else {
2725
				$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";
2726
			}
2727
			$sth = $this->db->prepare($query);
2728
			$sth->execute(array(':offset' => $offset));
2729
		} else {
2730
			if ($globalDBdriver == 'mysql') {
2731
				$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";
2732
			} else {
2733
				$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";
2734
			}
2735
			$sth = $this->db->prepare($query);
2736
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2737
		}
2738
		
2739
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2740
	}
2741
2742
2743
	/**
2744
	* Get a list of flights detected to airport since 7 days
2745
	* @return Array number, icao, name and city of airports
2746
	*/
2747
2748
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '') {
2749
		global $globalTimezone, $globalDBdriver;
2750
		if ($globalTimezone != '') {
2751
			date_default_timezone_set($globalTimezone);
2752
			$datetime = new DateTime();
2753
			$offset = $datetime->format('P');
2754
		} else $offset = '+00:00';
2755
		if ($airport_icao == '') {
2756
			if ($globalDBdriver == 'mysql') {
2757
				$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 
2758
				FROM `spotter_output`, airport 
2759
				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' 
2760
				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";
2761
			} else {
2762
				$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 
2763
				FROM spotter_output, airport 
2764
				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' 
2765
				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";
2766
			}
2767
			$sth = $this->db->prepare($query);
2768
			$sth->execute(array(':offset' => $offset));
2769
		} else {
2770
			if ($globalDBdriver == 'mysql') {
2771
				$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 
2772
				FROM `spotter_output`, airport 
2773
				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 
2774
				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";
2775
			} else {
2776
				$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 
2777
				FROM spotter_output, airport 
2778
				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 
2779
				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";
2780
			}
2781
			$sth = $this->db->prepare($query);
2782
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2783
		}
2784
		
2785
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2786
	}
2787
2788
2789
	/**
2790
	* Gets a list of all dates
2791
	*
2792
	* @return Array list of date names
2793
	*
2794
	*/
2795
	public function getAllDates()
2796
	{
2797
		global $globalTimezone, $globalDBdriver;
2798
		if ($globalTimezone != '') {
2799
			date_default_timezone_set($globalTimezone);
2800
			$datetime = new DateTime();
2801
			$offset = $datetime->format('P');
2802
		} else $offset = '+00:00';
2803
2804
		if ($globalDBdriver == 'mysql') {
2805
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
2806
								FROM spotter_output
2807
								WHERE spotter_output.date <> '' 
2808
								ORDER BY spotter_output.date ASC LIMIT 0,200";
2809
		} else {
2810
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
2811
								FROM spotter_output
2812
								WHERE spotter_output.date <> '' 
2813
								ORDER BY spotter_output.date ASC LIMIT 0,200";
2814
		}
2815
		
2816
		$sth = $this->db->prepare($query);
2817
		$sth->execute(array(':offset' => $offset));
2818
    
2819
		$date_array = array();
2820
		$temp_array = array();
2821
		
2822
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2823
		{
2824
			$temp_array['date'] = $row['date'];
2825
2826
			$date_array[] = $temp_array;
2827
		}
2828
2829
		return $date_array;
2830
	}
2831
	
2832
	
2833
	
2834
	/**
2835
	* Gets all route combinations
2836
	*
2837
	* @return Array the route list
2838
	*
2839
	*/
2840
	public function getAllRoutes()
2841
	{
2842
		$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 
2843
				FROM spotter_output
2844
				WHERE spotter_output.ident <> '' 
2845
				GROUP BY route
2846
				ORDER BY route ASC";
2847
2848
		$sth = $this->db->prepare($query);
2849
		$sth->execute();
2850
2851
		$routes_array = array();
2852
		$temp_array = array();
2853
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2854
		{
2855
			$temp_array['route'] = $row['route'];
2856
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
2857
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
2858
2859
			$routes_array[] = $temp_array;
2860
		}
2861
		return $routes_array;
2862
	}
2863
2864
	/**
2865
	* Update ident spotter data
2866
	*
2867
	* @param String $flightaware_id the ID from flightaware
2868
	* @param String $ident the flight ident
2869
	* @return String success or false
2870
	*
2871
	*/	
2872
	public function updateIdentSpotterData($flightaware_id = '', $ident = '')
2873
	{
2874
		if (!is_numeric(substr($ident, 0, 3)))
2875
		{
2876
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
2877
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2));
2878
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
2879
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3));
2880
			} else {
2881
				$airline_array = $this->getAllAirlineInfo("NA");
2882
			}
2883
			if (count($airline_array) == 0) {
2884
				$airline_array = $this->getAllAirlineInfo("NA");
2885
			}
2886
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
2887
				$airline_array = $this->getAllAirlineInfo("NA");
2888
			}
2889
		} else {
2890
			$airline_array = $this->getAllAirlineInfo("NA");
2891
		}
2892
                $airline_name = $airline_array[0]['name'];
2893
                $airline_icao = $airline_array[0]['icao'];
2894
                $airline_country = $airline_array[0]['country'];
2895
                $airline_type = $airline_array[0]['type'];
2896
2897
2898
		$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';
2899
                $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);
2900
2901
		try {
2902
			$sth = $this->db->prepare($query);
2903
			$sth->execute($query_values);
2904
		} catch (PDOException $e) {
2905
			return "error : ".$e->getMessage();
2906
		}
2907
		
2908
		return "success";
2909
2910
	}
2911
	/**
2912
	* Update latest spotter data
2913
	*
2914
	* @param String $flightaware_id the ID from flightaware
2915
	* @param String $ident the flight ident
2916
	* @param String $aircraft_icao the aircraft type
0 ignored issues
show
Bug introduced by
There is no parameter named $aircraft_icao. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
2917
	* @param String $departure_airport_icao the departure airport
0 ignored issues
show
Bug introduced by
There is no parameter named $departure_airport_icao. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
2918
	* @param String $arrival_airport_icao the arrival airport
2919
	* @return String success or false
2920
	*
2921
	*/	
2922
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
2923
	{
2924
		if ($groundspeed == '') $groundspeed = NULL;
2925
		$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';
2926
                $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);
2927
2928
		try {
2929
			$sth = $this->db->prepare($query);
2930
			$sth->execute($query_values);
2931
		} catch (PDOException $e) {
2932
			return "error : ".$e->getMessage();
2933
		}
2934
		
2935
		return "success";
2936
2937
	}
2938
2939
	/**
2940
	* Adds a new spotter data
2941
	*
2942
	* @param String $flightaware_id the ID from flightaware
2943
	* @param String $ident the flight ident
2944
	* @param String $aircraft_icao the aircraft type
2945
	* @param String $departure_airport_icao the departure airport
2946
	* @param String $arrival_airport_icao the arrival airport
2947
	* @param String $latitude latitude of flight
2948
	* @param String $longitude latitude of flight
2949
	* @param String $waypoints waypoints of flight
2950
	* @param String $altitude altitude of flight
2951
	* @param String $heading heading of flight
2952
	* @param String $groundspeed speed of flight
2953
	* @param String $date date of flight
2954
	* @param String $departure_airport_time departure time of flight
2955
	* @param String $arrival_airport_time arrival time of flight
2956
	* @param String $squawk squawk code of flight
2957
	* @param String $route_stop route stop of flight
2958
	* @param String $highlight highlight or not
2959
	* @param String $ModeS ModesS code of flight
2960
	* @param String $registration registration code of flight
2961
	* @param String $pilot_id pilot id of flight (for virtual airlines)
2962
	* @param String $pilot_name pilot name of flight (for virtual airlines)
2963
	* @param String $verticalrate vertival rate of flight
2964
	* @return String success or false
2965
	*/
2966
	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 = '')
2967
	{
2968
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed;
2969
		
2970
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
2971
		$Image = new Image($this->db);
2972
		$Common = new Common();
2973
		
2974
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
2975
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
2976
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
2977
		date_default_timezone_set('UTC');
2978
		
2979
		//getting the registration
2980
		if ($flightaware_id != "" && $registration == '')
2981
		{
2982
			if (!is_string($flightaware_id))
2983
			{
2984
				return false;
2985
			} else {
2986
				if ($ModeS != '') {
2987
					$timeelapsed = microtime(true);
2988
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
2989
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
2990
				} else {
2991
					$myhex = explode('-',$flightaware_id);
2992
					if (count($myhex) > 0) {
2993
						$timeelapsed = microtime(true);
2994
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
2995
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
2996
					}
2997
				}
2998
			}
2999
		}
3000
3001
		//getting the airline information
3002
		if ($ident != "")
3003
		{
3004
			if (!is_string($ident))
3005
			{
3006
				return false;
3007
			} else {
3008
				if (!is_numeric(substr($ident, 0, 3)))
3009
				{
3010
					$timeelapsed = microtime(true);
3011
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3012
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2));
3013
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3014
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3));
3015
					} else {
3016
						$airline_array = $this->getAllAirlineInfo("NA");
3017
					}
3018
					if (count($airline_array) == 0) {
3019
						$airline_array = $this->getAllAirlineInfo("NA");
3020
					}
3021
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3022
						$airline_array = $this->getAllAirlineInfo("NA");
3023
					}
3024
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3025
3026
				} else {
3027
					$timeelapsed = microtime(true);
3028
					$airline_array = $this->getAllAirlineInfo("NA");
3029
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3030
				}
3031
			}
3032
		} else $airline_array = array();
3033
		
3034
		//getting the aircraft information
3035
		$aircraft_array = array();
3036
		if ($aircraft_icao != "")
3037
		{
3038
			if (!is_string($aircraft_icao))
3039
			{
3040
				return false;
3041
			} else {
3042
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3043
				{
3044
					$timeelapsed = microtime(true);
3045
					$aircraft_array = $this->getAllAircraftInfo("NA");
3046
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3047
				} else {
3048
					$timeelapsed = microtime(true);
3049
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3050
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3051
				}
3052
			}
3053
		} else {
3054
			if ($ModeS != '') {
3055
				$timeelapsed = microtime(true);
3056
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3057
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3058
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3059
				{
3060
					$timeelapsed = microtime(true);
3061
					$aircraft_array = $this->getAllAircraftInfo("NA");
3062
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3063
				} else {
3064
					$timeelapsed = microtime(true);
3065
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3066
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3067
				}
3068
			}
3069
		}
3070
		
3071
		//getting the departure airport information
3072
		$departure_airport = array();
0 ignored issues
show
Unused Code introduced by
$departure_airport is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
3073
		if ($departure_airport_icao != "")
3074
		{
3075
			if (!is_string($departure_airport_icao))
3076
			{
3077
				return false;
3078
			} else {
3079
				$timeelapsed = microtime(true);
3080
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3081
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3082
			}
3083
		}
3084
		
3085
		//getting the arrival airport information
3086
		$arrival_airport_array = array();
3087
		if ($arrival_airport_icao != "")
3088
		{
3089
			if (!is_string($arrival_airport_icao))
3090
			{
3091
				return false;
3092
			} else {
3093
				$timeelapsed = microtime(true);
3094
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3095
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3096
			}
3097
		}
3098
3099
						
3100
		if ($latitude != "")
3101
		{
3102
			if (!is_numeric($latitude))
3103
			{
3104
				return false;
3105
			}
3106
		}
3107
		
3108
		if ($longitude != "")
3109
		{
3110
			if (!is_numeric($longitude))
3111
			{
3112
				return false;
3113
			}
3114
		}
3115
		
3116
		if ($waypoints != "")
3117
		{
3118
			if (!is_string($waypoints))
3119
			{
3120
				return false;
3121
			}
3122
		}
3123
		
3124
		if ($altitude != "")
3125
		{
3126
			if (!is_numeric($altitude))
3127
			{
3128
				return false;
3129
			}
3130
		} else $altitude = 0;
3131
		
3132
		if ($heading != "")
3133
		{
3134
			if (!is_numeric($heading))
3135
			{
3136
				return false;
3137
			}
3138
		}
3139
		
3140
		if ($groundspeed != "")
3141
		{
3142
			if (!is_numeric($groundspeed))
3143
			{
3144
				return false;
3145
			}
3146
		}
3147
3148
    
3149
		if ($date == "")
3150
		{
3151
			$date = date("Y-m-d H:i:s", time());
3152
		}
3153
3154
		//getting the aircraft image
3155
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS)
3156
		{
3157
			$timeelapsed = microtime(true);
3158
			$image_array = $Image->getSpotterImage($registration);
3159
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3160
			if (!isset($image_array[0]['registration']))
3161
			{
3162
				//echo "Add image !!!! \n";
3163
				$Image->addSpotterImage($registration);
3164
			}
3165
			$timeelapsed = microtime(true);
3166
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3167
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3168
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3169
		}
3170
    
3171
		if ($globalIVAO && $aircraft_icao != '')
3172
		{
3173
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3174
            		else $airline_icao = '';
3175
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3176
			if (!isset($image_array[0]['registration']))
3177
			{
3178
				//echo "Add image !!!! \n";
3179
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3180
			}
3181
		}
3182
    
3183
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3184
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3185
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3186
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3187
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3188
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3189
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3190
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3191
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3192
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3193
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3194
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3195
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3196
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3197
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3198
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3199
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3200
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3201
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3202
	
3203
		if (count($airline_array) == 0) 
3204
		{
3205
                        $airline_array = $this->getAllAirlineInfo('NA');
3206
                }
3207
                if (count($aircraft_array) == 0) 
3208
                {
3209
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3210
                }
3211
                if (count($departure_airport_array) == 0) 
0 ignored issues
show
Bug introduced by
The variable $departure_airport_array does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
3212
                {
3213
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3214
                }
3215
                if (count($arrival_airport_array) == 0) 
3216
                {
3217
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3218
                }
3219
                if ($registration == '') $registration = 'NA';
3220
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3221
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3222
                if ($heading == '' || $Common->isInteger($heading) == false) $heading = 0;
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
3223
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3224
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3225
                $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) 
3226
                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)";
3227
3228
                $airline_name = $airline_array[0]['name'];
3229
                $airline_icao = $airline_array[0]['icao'];
3230
                $airline_country = $airline_array[0]['country'];
3231
                $airline_type = $airline_array[0]['type'];
3232
		if ($airline_type == '') {
3233
			$timeelapsed = microtime(true);
3234
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3235
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3236
		}
3237
		if ($airline_type == null) $airline_type = '';
3238
                $aircraft_type = $aircraft_array[0]['type'];
3239
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3240
                $departure_airport_name = $departure_airport_array[0]['name'];
3241
                $departure_airport_city = $departure_airport_array[0]['city'];
3242
                $departure_airport_country = $departure_airport_array[0]['country'];
3243
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3244
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3245
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3246
                $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);
3247
3248
		try {
3249
		        
3250
			$sth = $this->db->prepare($query);
3251
			$sth->execute($query_values);
3252
			$this->db = null;
3253
		} catch (PDOException $e) {
3254
		    return "error : ".$e->getMessage();
3255
		}
3256
		
3257
		return "success";
3258
3259
	}
3260
	
3261
  
3262
	/**
3263
	* Gets the aircraft ident within the last hour
3264
	*
3265
	* @return String the ident
3266
	*
3267
	*/
3268
	public function getIdentFromLastHour($ident)
3269
	{
3270
		global $globalDBdriver, $globalTimezone;
3271
		if ($globalDBdriver == 'mysql') {
3272
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3273
								WHERE spotter_output.ident = :ident 
3274
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3275
								AND spotter_output.date < UTC_TIMESTAMP()";
3276
			$query_data = array(':ident' => $ident);
3277
		} else {
3278
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3279
								WHERE spotter_output.ident = :ident 
3280
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3281
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3282
			$query_data = array(':ident' => $ident);
3283
    		}
3284
		
3285
		$sth = $this->db->prepare($query);
3286
		$sth->execute($query_data);
3287
    		$ident_result='';
3288
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3289
		{
3290
			$ident_result = $row['ident'];
3291
		}
3292
3293
		return $ident_result;
3294
	}
3295
	
3296
	
3297
	/**
3298
	* Gets the aircraft data from the last 20 seconds
3299
	*
3300
	* @return Array the spotter data
3301
	*
3302
	*/
3303
	public function getRealTimeData($q = '')
3304
	{
3305
		global $globalDBdriver;
3306
		$additional_query = '';
3307
		if ($q != "")
3308
		{
3309
			if (!is_string($q))
3310
			{
3311
				return false;
3312
			} else {
3313
				$q_array = explode(" ", $q);
3314
				foreach ($q_array as $q_item){
3315
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3316
					$additional_query .= " AND (";
3317
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3318
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3319
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3320
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3321
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3322
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3323
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3324
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3325
					$additional_query .= ")";
3326
				}
3327
			}
3328
		}
3329
		if ($globalDBdriver == 'mysql') {
3330
			$query  = "SELECT spotter_output.* FROM spotter_output 
3331
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3332
				AND spotter_output.date < UTC_TIMESTAMP()";
3333
		} else {
3334
			$query  = "SELECT spotter_output.* FROM spotter_output 
3335
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3336
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3337
		}
3338
		$spotter_array = $this->getDataFromDB($query, array());
3339
3340
		return $spotter_array;
3341
	}
3342
	
3343
	
3344
	
3345
	 /**
3346
	* Gets all airlines that have flown over
3347
	*
3348
	* @return Array the airline list
3349
	*
3350
	*/
3351
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
3352
	{
3353
		global $globalDBdriver;
3354
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3355
		 			FROM spotter_output
3356
					WHERE spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA' ";
3357
		if ($olderthanmonths > 0) {
3358
			if ($globalDBdriver == 'mysql') {
3359
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3360
			} else {
3361
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3362
			}
3363
		}
3364
                if ($sincedate != '') {
3365
			if ($globalDBdriver == 'mysql') {
3366
				$query .= "AND date > '".$sincedate."' ";
3367
			} else {
3368
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
3369
			}
3370
		}
3371
		$query .= "GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3372
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3373
		
3374
		$sth = $this->db->prepare($query);
3375
		$sth->execute();
3376
 
3377
		$airline_array = array();
3378
		$temp_array = array();
3379
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3380
		{
3381
			$temp_array['airline_name'] = $row['airline_name'];
3382
			$temp_array['airline_icao'] = $row['airline_icao'];
3383
			$temp_array['airline_count'] = $row['airline_count'];
3384
			$temp_array['airline_country'] = $row['airline_country'];
3385
			$airline_array[] = $temp_array;
3386
		}
3387
		return $airline_array;
3388
	}
3389
3390
	 /**
3391
	* Gets all pilots that have flown over
3392
	*
3393
	* @return Array the pilots list
3394
	*
3395
	*/
3396
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '')
3397
	{
3398
		global $globalDBdriver;
3399
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count
3400
		 			FROM spotter_output
3401
					WHERE spotter_output.pilot_id <> '' ";
3402
                if ($olderthanmonths > 0) {
3403
            		if ($globalDBdriver == 'mysql') {
3404
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3405
			} else {
3406
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3407
			}
3408
		}
3409
                if ($sincedate != '') {
3410
            		if ($globalDBdriver == 'mysql') {
3411
				$query .= "AND date > '".$sincedate."' ";
3412
			} else {
3413
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
3414
			}
3415
		}
3416
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name ORDER BY pilot_count DESC";
3417
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3418
      
3419
		
3420
		$sth = $this->db->prepare($query);
3421
		$sth->execute();
3422
      
3423
		$airline_array = array();
3424
		$temp_array = array();
3425
        
3426
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3427
		{
3428
			$temp_array['pilot_name'] = $row['pilot_name'];
3429
			$temp_array['pilot_id'] = $row['pilot_id'];
3430
			$temp_array['pilot_count'] = $row['pilot_count'];
3431
			$airline_array[] = $temp_array;
3432
		}
3433
		return $airline_array;
3434
	}
3435
	
3436
	 /**
3437
	* Gets all owner that have flown over
3438
	*
3439
	* @return Array the pilots list
3440
	*
3441
	*/
3442
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '')
3443
	{
3444
		global $globalDBdriver;
3445
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3446
		 			FROM spotter_output
3447
					WHERE spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3448
                if ($olderthanmonths > 0) {
3449
            		if ($globalDBdriver == 'mysql') {
3450
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3451
			} else {
3452
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3453
			}
3454
		}
3455
                if ($sincedate != '') {
3456
            		if ($globalDBdriver == 'mysql') {
3457
				$query .= "AND date > '".$sincedate."' ";
3458
			} else {
3459
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
3460
			}
3461
		}
3462
		$query .= "GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
3463
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3464
      
3465
		
3466
		$sth = $this->db->prepare($query);
3467
		$sth->execute();
3468
      
3469
		$airline_array = array();
3470
		$temp_array = array();
3471
        
3472
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3473
		{
3474
			$temp_array['owner_name'] = $row['owner_name'];
3475
			$temp_array['owner_count'] = $row['owner_count'];
3476
			$airline_array[] = $temp_array;
3477
		}
3478
		return $airline_array;
3479
	}
3480
	
3481
	
3482
	/**
3483
	* Gets all airlines that have flown over by aircraft
3484
	*
3485
	* @return Array the airline list
3486
	*
3487
	*/
3488
	public function countAllAirlinesByAircraft($aircraft_icao)
3489
	{
3490
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3491
3492
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3493
		 			FROM spotter_output
3494
					WHERE spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
3495
                    GROUP BY spotter_output.airline_name
3496
					ORDER BY airline_count DESC";
3497
      
3498
		
3499
		$sth = $this->db->prepare($query);
3500
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3501
      
3502
		$airline_array = array();
3503
		$temp_array = array();
3504
        
3505
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3506
		{
3507
			$temp_array['airline_name'] = $row['airline_name'];
3508
			$temp_array['airline_icao'] = $row['airline_icao'];
3509
			$temp_array['airline_count'] = $row['airline_count'];
3510
			$temp_array['airline_country'] = $row['airline_country'];
3511
3512
			$airline_array[] = $temp_array;
3513
		}
3514
3515
		return $airline_array;
3516
	}
3517
3518
3519
	/**
3520
	* Gets all airline countries that have flown over by aircraft
3521
	*
3522
	* @return Array the airline country list
3523
	*
3524
	*/
3525
	public function countAllAirlineCountriesByAircraft($aircraft_icao)
3526
	{
3527
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3528
      
3529
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3530
		 			FROM spotter_output
3531
					WHERE spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
3532
                    GROUP BY spotter_output.airline_country
3533
					ORDER BY airline_country_count DESC
3534
					LIMIT 10 OFFSET 0";
3535
      
3536
		
3537
		$sth = $this->db->prepare($query);
3538
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3539
      
3540
		$airline_country_array = array();
3541
		$temp_array = array();
3542
        
3543
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3544
		{
3545
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3546
			$temp_array['airline_country'] = $row['airline_country'];
3547
 
3548
			$airline_country_array[] = $temp_array;
3549
		}
3550
		return $airline_country_array;
3551
	}
3552
3553
3554
	
3555
	
3556
	/**
3557
	* Gets all airlines that have flown over by airport
3558
	*
3559
	* @return Array the airline list
3560
	*
3561
	*/
3562
	public function countAllAirlinesByAirport($airport_icao)
3563
	{
3564
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
3565
3566
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3567
		 			FROM spotter_output
3568
					WHERE spotter_output.airline_name <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao ) 
3569
                    GROUP BY spotter_output.airline_name
3570
					ORDER BY airline_count DESC";
3571
      
3572
		
3573
		$sth = $this->db->prepare($query);
3574
		$sth->execute(array(':airport_icao' => $airport_icao));
3575
      
3576
		$airline_array = array();
3577
		$temp_array = array();
3578
        
3579
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3580
		{
3581
			$temp_array['airline_name'] = $row['airline_name'];
3582
			$temp_array['airline_icao'] = $row['airline_icao'];
3583
			$temp_array['airline_count'] = $row['airline_count'];
3584
			$temp_array['airline_country'] = $row['airline_country'];
3585
3586
			$airline_array[] = $temp_array;
3587
		}
3588
		return $airline_array;
3589
	}
3590
3591
3592
	/**
3593
	* Gets all airline countries that have flown over by airport icao
3594
	*
3595
	* @return Array the airline country list
3596
	*
3597
	*/
3598
	public function countAllAirlineCountriesByAirport($airport_icao)
3599
	{
3600
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
3601
      
3602
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3603
		 			FROM spotter_output
3604
					WHERE spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
3605
					GROUP BY spotter_output.airline_country
3606
					ORDER BY airline_country_count DESC
3607
					LIMIT 10 OFFSET 0";
3608
3609
		
3610
		$sth = $this->db->prepare($query);
3611
		$sth->execute(array(':airport_icao' => $airport_icao));
3612
3613
		$airline_country_array = array();
3614
		$temp_array = array();
3615
        
3616
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3617
		{
3618
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3619
			$temp_array['airline_country'] = $row['airline_country'];
3620
 
3621
			$airline_country_array[] = $temp_array;
3622
		}
3623
		return $airline_country_array;
3624
	}
3625
3626
3627
	/**
3628
	* Gets all airlines that have flown over by aircraft manufacturer
3629
	*
3630
	* @return Array the airline list
3631
	*
3632
	*/
3633
	public function countAllAirlinesByManufacturer($aircraft_manufacturer)
3634
	{
3635
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
3636
3637
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3638
		 			FROM spotter_output
3639
					WHERE spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
3640
					GROUP BY spotter_output.airline_name
3641
					ORDER BY airline_count DESC";
3642
 
3643
		$sth = $this->db->prepare($query);
3644
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
3645
 
3646
		$airline_array = array();
3647
		$temp_array = array();
3648
        
3649
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3650
		{
3651
			$temp_array['airline_name'] = $row['airline_name'];
3652
			$temp_array['airline_icao'] = $row['airline_icao'];
3653
			$temp_array['airline_count'] = $row['airline_count'];
3654
			$temp_array['airline_country'] = $row['airline_country'];
3655
3656
			$airline_array[] = $temp_array;
3657
		}
3658
		return $airline_array;
3659
	}
3660
3661
3662
3663
	/**
3664
	* Gets all airline countries that have flown over by aircraft manufacturer
3665
	*
3666
	* @return Array the airline country list
3667
	*
3668
	*/
3669
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer)
3670
	{
3671
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
3672
      
3673
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3674
		 			FROM spotter_output
3675
					WHERE spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
3676
					GROUP BY spotter_output.airline_country
3677
					ORDER BY airline_country_count DESC
3678
					LIMIT 10 OFFSET 0";
3679
      
3680
		
3681
		$sth = $this->db->prepare($query);
3682
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
3683
3684
		$airline_country_array = array();
3685
		$temp_array = array();
3686
        
3687
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3688
		{
3689
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3690
			$temp_array['airline_country'] = $row['airline_country'];
3691
			$airline_country_array[] = $temp_array;
3692
		}
3693
		return $airline_country_array;
3694
	}
3695
3696
3697
	/**
3698
	* Gets all airlines that have flown over by date
3699
	*
3700
	* @return Array the airline list
3701
	*
3702
	*/
3703
	public function countAllAirlinesByDate($date)
3704
	{
3705
		global $globalTimezone, $globalDBdriver;
3706
		$date = filter_var($date,FILTER_SANITIZE_STRING);
3707
3708
		if ($globalTimezone != '') {
3709
			date_default_timezone_set($globalTimezone);
3710
			$datetime = new DateTime($date);
3711
			$offset = $datetime->format('P');
3712
		} else $offset = '+00:00';
3713
3714
		if ($globalDBdriver == 'mysql') {
3715
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3716
		 			FROM spotter_output
3717
					WHERE DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
3718
					GROUP BY spotter_output.airline_name
3719
					ORDER BY airline_count DESC";
3720
		} else {
3721
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3722
		 			FROM spotter_output
3723
					WHERE to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
3724
					GROUP BY spotter_output.airline_name
3725
					ORDER BY airline_count DESC";
3726
		}
3727
		
3728
		$sth = $this->db->prepare($query);
3729
		$sth->execute(array(':date' => $date, ':offset' => $offset));
3730
3731
		$airline_array = array();
3732
		$temp_array = array();
3733
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3734
		{
3735
			$temp_array['airline_name'] = $row['airline_name'];
3736
			$temp_array['airline_icao'] = $row['airline_icao'];
3737
			$temp_array['airline_count'] = $row['airline_count'];
3738
			$temp_array['airline_country'] = $row['airline_country'];
3739
 
3740
			$airline_array[] = $temp_array;
3741
		}
3742
3743
		return $airline_array;
3744
	}	
3745
	
3746
	
3747
	/**
3748
	* Gets all airline countries that have flown over by date
3749
	*
3750
	* @return Array the airline country list
3751
	*
3752
	*/
3753
	public function countAllAirlineCountriesByDate($date)
3754
	{
3755
		global $globalTimezone, $globalDBdriver;
3756
		$date = filter_var($date,FILTER_SANITIZE_STRING);
3757
		if ($globalTimezone != '') {
3758
			date_default_timezone_set($globalTimezone);
3759
			$datetime = new DateTime($date);
3760
			$offset = $datetime->format('P');
3761
		} else $offset = '+00:00';
3762
		
3763
		if ($globalDBdriver == 'mysql') {
3764
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3765
		 			FROM spotter_output
3766
					WHERE spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
3767
					GROUP BY spotter_output.airline_country
3768
					ORDER BY airline_country_count DESC
3769
					LIMIT 10 OFFSET 0";
3770
		} else {
3771
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3772
		 			FROM spotter_output
3773
					WHERE spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
3774
					GROUP BY spotter_output.airline_country
3775
					ORDER BY airline_country_count DESC
3776
					LIMIT 10 OFFSET 0";
3777
		}
3778
3779
		$sth = $this->db->prepare($query);
3780
		$sth->execute(array(':date' => $date, ':offset' => $offset));
3781
 
3782
		$airline_country_array = array();
3783
		$temp_array = array();
3784
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3785
		{
3786
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3787
			$temp_array['airline_country'] = $row['airline_country'];
3788
3789
			$airline_country_array[] = $temp_array;
3790
		}
3791
		return $airline_country_array;
3792
	}
3793
3794
3795
	/**
3796
	* Gets all airlines that have flown over by ident/callsign
3797
	*
3798
	* @return Array the airline list
3799
	*
3800
	*/
3801
	public function countAllAirlinesByIdent($ident)
3802
	{
3803
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3804
3805
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3806
		 		FROM spotter_output
3807
				WHERE spotter_output.ident = :ident  
3808
				GROUP BY spotter_output.airline_name
3809
				ORDER BY airline_count DESC";
3810
      
3811
		
3812
		$sth = $this->db->prepare($query);
3813
		$sth->execute(array(':ident' => $ident));
3814
      
3815
		$airline_array = array();
3816
		$temp_array = array();
3817
        
3818
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3819
		{
3820
			$temp_array['airline_name'] = $row['airline_name'];
3821
			$temp_array['airline_icao'] = $row['airline_icao'];
3822
			$temp_array['airline_count'] = $row['airline_count'];
3823
			$temp_array['airline_country'] = $row['airline_country'];
3824
3825
			$airline_array[] = $temp_array;
3826
		}
3827
		return $airline_array;
3828
	}
3829
3830
	/**
3831
	* Gets all airlines that have flown over by route
3832
	*
3833
	* @return Array the airline list
3834
	*
3835
	*/
3836
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao)
3837
	{
3838
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3839
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3840
3841
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3842
		 			FROM spotter_output
3843
					WHERE (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
3844
					GROUP BY spotter_output.airline_name
3845
					ORDER BY airline_count DESC";
3846
      
3847
		
3848
		$sth = $this->db->prepare($query);
3849
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
3850
      
3851
		$airline_array = array();
3852
		$temp_array = array();
3853
        
3854
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3855
		{
3856
			$temp_array['airline_name'] = $row['airline_name'];
3857
			$temp_array['airline_icao'] = $row['airline_icao'];
3858
			$temp_array['airline_count'] = $row['airline_count'];
3859
			$temp_array['airline_country'] = $row['airline_country'];
3860
3861
			$airline_array[] = $temp_array;
3862
		}
3863
		return $airline_array;
3864
	}
3865
3866
	/**
3867
	* Gets all airline countries that have flown over by route
3868
	*
3869
	* @return Array the airline country list
3870
	*
3871
	*/
3872
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao)
3873
	{
3874
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3875
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3876
      
3877
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3878
		 		FROM spotter_output
3879
				WHERE spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
3880
				GROUP BY spotter_output.airline_country
3881
				ORDER BY airline_country_count DESC
3882
				LIMIT 10 OFFSET 0";
3883
      
3884
		
3885
		$sth = $this->db->prepare($query);
3886
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
3887
      
3888
		$airline_country_array = array();
3889
		$temp_array = array();
3890
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3891
		{
3892
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3893
			$temp_array['airline_country'] = $row['airline_country'];
3894
3895
			$airline_country_array[] = $temp_array;
3896
		}
3897
3898
		return $airline_country_array;
3899
	}
3900
3901
3902
	/**
3903
	* Gets all airlines that have flown over by country
3904
	*
3905
	* @return Array the airline list
3906
	*
3907
	*/
3908
	public function countAllAirlinesByCountry($country)
3909
	{
3910
		$country = filter_var($country,FILTER_SANITIZE_STRING);
3911
3912
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3913
		 		FROM spotter_output
3914
				WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
3915
				GROUP BY spotter_output.airline_name
3916
				ORDER BY airline_count DESC";
3917
      
3918
		
3919
		$sth = $this->db->prepare($query);
3920
		$sth->execute(array(':country' => $country));
3921
3922
		$airline_array = array();
3923
		$temp_array = array();
3924
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3925
		{
3926
			$temp_array['airline_name'] = $row['airline_name'];
3927
			$temp_array['airline_icao'] = $row['airline_icao'];
3928
			$temp_array['airline_count'] = $row['airline_count'];
3929
			$temp_array['airline_country'] = $row['airline_country'];
3930
 
3931
			$airline_array[] = $temp_array;
3932
		}
3933
		return $airline_array;
3934
	}
3935
3936
3937
	/**
3938
	* Gets all airline countries that have flown over by country
3939
	*
3940
	* @return Array the airline country list
3941
	*
3942
	*/
3943
	public function countAllAirlineCountriesByCountry($country)
3944
	{
3945
		$country = filter_var($country,FILTER_SANITIZE_STRING);
3946
      
3947
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3948
		 		FROM spotter_output
3949
				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 
3950
				GROUP BY spotter_output.airline_country
3951
				ORDER BY airline_country_count DESC
3952
				LIMIT 10 OFFSET 0";
3953
      
3954
		
3955
		$sth = $this->db->prepare($query);
3956
		$sth->execute(array(':country' => $country));
3957
3958
		$airline_country_array = array();
3959
		$temp_array = array();
3960
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3961
		{
3962
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3963
			$temp_array['airline_country'] = $row['airline_country'];
3964
3965
			$airline_country_array[] = $temp_array;
3966
		}
3967
		return $airline_country_array;
3968
	}
3969
3970
3971
	/**
3972
	* Gets all airlines countries
3973
	*
3974
	* @return Array the airline country list
3975
	*
3976
	*/
3977
	public function countAllAirlineCountries($limit = true)
3978
	{
3979
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3980
		 			FROM spotter_output
3981
					WHERE spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA' 
3982
					GROUP BY spotter_output.airline_country
3983
					ORDER BY airline_country_count DESC";
3984
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3985
      
3986
		$sth = $this->db->prepare($query);
3987
		$sth->execute();
3988
3989
		$airline_array = array();
3990
		$temp_array = array();
3991
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3992
		{
3993
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3994
			$temp_array['airline_country'] = $row['airline_country'];
3995
3996
			$airline_array[] = $temp_array;
3997
		}
3998
		return $airline_array;
3999
	}
4000
4001
	/**
4002
	* Gets all number of flight over countries
4003
	*
4004
	* @return Array the airline country list
4005
	*
4006
	*/
4007
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '')
4008
	{
4009
		global $globalDBdriver;
4010
		/*
4011
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4012
					FROM countries c, spotter_output s
4013
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4014
		*/
4015
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4016
					FROM countries c, spotter_live s
4017
					WHERE c.iso2 = s.over_country ";
4018
                if ($olderthanmonths > 0) {
4019
			if ($globalDBdriver == 'mysql') {
4020
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4021
			} else {
4022
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4023
			}
4024
		}
4025
                if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
4026
		$query .= "GROUP BY c.name ORDER BY nb DESC";
4027
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4028
      
4029
		
4030
		$sth = $this->db->prepare($query);
4031
		$sth->execute();
4032
 
4033
		$flight_array = array();
4034
		$temp_array = array();
4035
        
4036
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4037
		{
4038
			$temp_array['flight_count'] = $row['nb'];
4039
			$temp_array['flight_country'] = $row['name'];
4040
			$temp_array['flight_country_iso3'] = $row['iso3'];
4041
			$temp_array['flight_country_iso2'] = $row['iso2'];
4042
			$flight_array[] = $temp_array;
4043
		}
4044
		return $flight_array;
4045
	}
4046
	
4047
	
4048
	/**
4049
	* Gets all aircraft types that have flown over
4050
	*
4051
	* @return Array the aircraft list
4052
	*
4053
	*/
4054
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '')
4055
	{
4056
		global $globalDBdriver;
4057
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4058
                    FROM spotter_output
4059
                    WHERE spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' ";
4060
                if ($olderthanmonths > 0) {
4061
            		if ($globalDBdriver == 'mysql') {
4062
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4063
			} else {
4064
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4065
			}
4066
                }
4067
                if ($sincedate != '') {
4068
            		if ($globalDBdriver == 'mysql') {
4069
				$query .= "AND date > '".$sincedate."' ";
4070
			} else {
4071
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
4072
			}
4073
		}
4074
4075
                //if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4076
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
4077
                $query .= "GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name ORDER BY aircraft_icao_count DESC";
4078
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4079
      
4080
		
4081
		$sth = $this->db->prepare($query);
4082
		$sth->execute();
4083
4084
		$aircraft_array = array();
4085
		$temp_array = array();
4086
        
4087
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4088
		{
4089
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4090
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4091
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4092
4093
			$aircraft_array[] = $temp_array;
4094
		}
4095
		return $aircraft_array;
4096
	}
4097
4098
4099
	/**
4100
	* Gets all aircraft registration that have flown over by aircaft icao
4101
	*
4102
	* @return Array the aircraft list
4103
	*
4104
	*/
4105
	public function countAllAircraftRegistrationByAircraft($aircraft_icao)
4106
	{
4107
		$Image = new Image($this->db);
4108
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4109
4110
		$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  
4111
				FROM spotter_output
4112
				WHERE spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
4113
				GROUP BY spotter_output.registration 
4114
				ORDER BY registration_count DESC";
4115
4116
		$sth = $this->db->prepare($query);
4117
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4118
4119
		$aircraft_array = array();
4120
		$temp_array = array();
4121
        
4122
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4123
		{
4124
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4125
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4126
			$temp_array['registration'] = $row['registration'];
4127
			$temp_array['airline_name'] = $row['airline_name'];
4128
			$temp_array['image_thumbnail'] = "";
4129
			if($row['registration'] != "")
4130
			{
4131
				$image_array = $Image->getSpotterImage($row['registration']);
4132
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4133
			}
4134
			$temp_array['registration_count'] = $row['registration_count'];
4135
4136
			$aircraft_array[] = $temp_array;
4137
		}
4138
		return $aircraft_array;
4139
	}
4140
4141
4142
	/**
4143
	* Gets all aircraft types that have flown over by airline icao
4144
	*
4145
	* @return Array the aircraft list
4146
	*
4147
	*/
4148
	public function countAllAircraftTypesByAirline($airline_icao)
4149
	{
4150
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4151
4152
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4153
				FROM spotter_output
4154
				WHERE spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
4155
				GROUP BY spotter_output.aircraft_name 
4156
				ORDER BY aircraft_icao_count DESC";
4157
4158
		$sth = $this->db->prepare($query);
4159
		$sth->execute(array(':airline_icao' => $airline_icao));
4160
4161
		$aircraft_array = array();
4162
		$temp_array = array();
4163
4164
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4165
		{
4166
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4167
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4168
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4169
4170
			$aircraft_array[] = $temp_array;
4171
		}
4172
		return $aircraft_array;
4173
	}
4174
4175
4176
	/**
4177
	* Gets all aircraft registration that have flown over by airline icao
4178
	*
4179
	* @return Array the aircraft list
4180
	*
4181
	*/
4182
	public function countAllAircraftRegistrationByAirline($airline_icao)
4183
	{
4184
		$Image = new Image($this->db);
4185
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4186
4187
		$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   
4188
				FROM spotter_output
4189
				WHERE spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
4190
				GROUP BY spotter_output.registration 
4191
				ORDER BY registration_count DESC";
4192
4193
		$sth = $this->db->prepare($query);
4194
		$sth->execute(array(':airline_icao' => $airline_icao));
4195
4196
		$aircraft_array = array();
4197
		$temp_array = array();
4198
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4199
		{
4200
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4201
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4202
			$temp_array['registration'] = $row['registration'];
4203
			$temp_array['airline_name'] = $row['airline_name'];
4204
			$temp_array['image_thumbnail'] = "";
4205
			if($row['registration'] != "")
4206
			{
4207
				$image_array = $Image->getSpotterImage($row['registration']);
4208
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4209
			}
4210
			$temp_array['registration_count'] = $row['registration_count'];
4211
4212
			$aircraft_array[] = $temp_array;
4213
		}
4214
		return $aircraft_array;
4215
	}
4216
4217
4218
	/**
4219
	* Gets all aircraft manufacturer that have flown over by airline icao
4220
	*
4221
	* @return Array the aircraft list
4222
	*
4223
	*/
4224
	public function countAllAircraftManufacturerByAirline($airline_icao)
4225
	{
4226
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4227
4228
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4229
				FROM spotter_output
4230
				WHERE spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
4231
				GROUP BY spotter_output.aircraft_manufacturer 
4232
				ORDER BY aircraft_manufacturer_count DESC";
4233
4234
		$sth = $this->db->prepare($query);
4235
		$sth->execute(array(':airline_icao' => $airline_icao));
4236
4237
		$aircraft_array = array();
4238
		$temp_array = array();
4239
4240
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4241
		{
4242
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4243
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4244
4245
			$aircraft_array[] = $temp_array;
4246
		}
4247
		return $aircraft_array;
4248
	}
4249
4250
4251
	/**
4252
	* Gets all aircraft types that have flown over by airline icao
4253
	*
4254
	* @return Array the aircraft list
4255
	*
4256
	*/
4257
	public function countAllAircraftTypesByAirport($airport_icao)
4258
	{
4259
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4260
4261
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4262
				FROM spotter_output
4263
				WHERE spotter_output.aircraft_icao <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao) 
4264
				GROUP BY spotter_output.aircraft_name 
4265
				ORDER BY aircraft_icao_count DESC";
4266
 
4267
		$sth = $this->db->prepare($query);
4268
		$sth->execute(array(':airport_icao' => $airport_icao));
4269
4270
		$aircraft_array = array();
4271
		$temp_array = array();
4272
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4273
		{
4274
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4275
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4276
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4277
4278
			$aircraft_array[] = $temp_array;
4279
		}
4280
		return $aircraft_array;
4281
	}
4282
4283
4284
	/**
4285
	* Gets all aircraft registration that have flown over by airport icao
4286
	*
4287
	* @return Array the aircraft list
4288
	*
4289
	*/
4290
	public function countAllAircraftRegistrationByAirport($airport_icao)
4291
	{
4292
		$Image = new Image($this->db);
4293
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4294
4295
		$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  
4296
                    FROM spotter_output
4297
                    WHERE spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
4298
                    GROUP BY spotter_output.registration 
4299
					ORDER BY registration_count DESC";
4300
4301
		
4302
		$sth = $this->db->prepare($query);
4303
		$sth->execute(array(':airport_icao' => $airport_icao));
4304
4305
		$aircraft_array = array();
4306
		$temp_array = array();
4307
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4308
		{
4309
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4310
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4311
			$temp_array['registration'] = $row['registration'];
4312
			$temp_array['airline_name'] = $row['airline_name'];
4313
			$temp_array['image_thumbnail'] = "";
4314
			if($row['registration'] != "")
4315
			{
4316
				$image_array = $Image->getSpotterImage($row['registration']);
4317
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4318
			}
4319
			$temp_array['registration_count'] = $row['registration_count'];
4320
			$aircraft_array[] = $temp_array;
4321
		}
4322
		return $aircraft_array;
4323
	}
4324
	
4325
	
4326
	/**
4327
	* Gets all aircraft manufacturer that have flown over by airport icao
4328
	*
4329
	* @return Array the aircraft list
4330
	*
4331
	*/
4332
	public function countAllAircraftManufacturerByAirport($airport_icao)
4333
	{
4334
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4335
4336
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4337
                    FROM spotter_output
4338
                    WHERE spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)  
4339
                    GROUP BY spotter_output.aircraft_manufacturer 
4340
					ORDER BY aircraft_manufacturer_count DESC";
4341
4342
		
4343
		$sth = $this->db->prepare($query);
4344
		$sth->execute(array(':airport_icao' => $airport_icao));
4345
4346
		$aircraft_array = array();
4347
		$temp_array = array();
4348
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4349
		{
4350
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4351
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4352
			$aircraft_array[] = $temp_array;
4353
		}
4354
		return $aircraft_array;
4355
	}
4356
4357
	/**
4358
	* Gets all aircraft types that have flown over by aircraft manufacturer
4359
	*
4360
	* @return Array the aircraft list
4361
	*
4362
	*/
4363
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer)
4364
	{
4365
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4366
4367
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4368
                    FROM spotter_output
4369
                    WHERE spotter_output.aircraft_manufacturer = :aircraft_manufacturer
4370
                    GROUP BY spotter_output.aircraft_name 
4371
					ORDER BY aircraft_icao_count DESC";
4372
4373
		$sth = $this->db->prepare($query);
4374
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4375
		$aircraft_array = array();
4376
		$temp_array = array();
4377
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4378
		{
4379
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4380
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4381
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4382
			$aircraft_array[] = $temp_array;
4383
		}
4384
		return $aircraft_array;
4385
	}
4386
4387
4388
	/**
4389
	* Gets all aircraft registration that have flown over by aircaft manufacturer
4390
	*
4391
	* @return Array the aircraft list
4392
	*
4393
	*/
4394
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer)
4395
	{
4396
		$Image = new Image($this->db);
4397
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4398
4399
		$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   
4400
                    FROM spotter_output
4401
                    WHERE spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
4402
                    GROUP BY spotter_output.registration 
4403
					ORDER BY registration_count DESC";
4404
4405
		
4406
		$sth = $this->db->prepare($query);
4407
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4408
		$aircraft_array = array();
4409
		$temp_array = array();
4410
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4411
		{
4412
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4413
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4414
			$temp_array['registration'] = $row['registration'];
4415
			$temp_array['airline_name'] = $row['airline_name'];
4416
			$temp_array['image_thumbnail'] = "";
4417
			if($row['registration'] != "")
4418
			{
4419
				$image_array = $Image->getSpotterImage($row['registration']);
4420
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4421
			}
4422
			$temp_array['registration_count'] = $row['registration_count'];
4423
			$aircraft_array[] = $temp_array;
4424
		}
4425
		return $aircraft_array;
4426
	}
4427
4428
	/**
4429
	* Gets all aircraft types that have flown over by date
4430
	*
4431
	* @return Array the aircraft list
4432
	*
4433
	*/
4434
	public function countAllAircraftTypesByDate($date)
4435
	{
4436
		global $globalTimezone, $globalDBdriver;
4437
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4438
		if ($globalTimezone != '') {
4439
			date_default_timezone_set($globalTimezone);
4440
			$datetime = new DateTime($date);
4441
			$offset = $datetime->format('P');
4442
		} else $offset = '+00:00';
4443
4444
		if ($globalDBdriver == 'mysql') {
4445
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4446
					FROM spotter_output
4447
					WHERE DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
4448
					GROUP BY spotter_output.aircraft_name 
4449
					ORDER BY aircraft_icao_count DESC";
4450
		} else {
4451
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4452
					FROM spotter_output
4453
					WHERE to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
4454
					GROUP BY spotter_output.aircraft_name 
4455
					ORDER BY aircraft_icao_count DESC";
4456
		}
4457
		
4458
		$sth = $this->db->prepare($query);
4459
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4460
4461
		$aircraft_array = array();
4462
		$temp_array = array();
4463
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4464
		{
4465
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4466
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4467
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4468
4469
			$aircraft_array[] = $temp_array;
4470
		}
4471
		return $aircraft_array;
4472
	}
4473
4474
4475
	/**
4476
	* Gets all aircraft registration that have flown over by date
4477
	*
4478
	* @return Array the aircraft list
4479
	*
4480
	*/
4481
	public function countAllAircraftRegistrationByDate($date)
4482
	{
4483
		global $globalTimezone, $globalDBdriver;
4484
		$Image = new Image($this->db);
4485
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4486
		if ($globalTimezone != '') {
4487
			date_default_timezone_set($globalTimezone);
4488
			$datetime = new DateTime($date);
4489
			$offset = $datetime->format('P');
4490
		} else $offset = '+00:00';
4491
4492
		if ($globalDBdriver == 'mysql') {
4493
			$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    
4494
					FROM spotter_output
4495
					WHERE spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4496
					GROUP BY spotter_output.registration 
4497
					ORDER BY registration_count DESC";
4498
		} else {
4499
			$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    
4500
					FROM spotter_output
4501
					WHERE spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4502
					GROUP BY spotter_output.registration 
4503
					ORDER BY registration_count DESC";
4504
		}
4505
		
4506
		$sth = $this->db->prepare($query);
4507
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4508
4509
		$aircraft_array = array();
4510
		$temp_array = array();
4511
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4512
		{
4513
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4514
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4515
			$temp_array['registration'] = $row['registration'];
4516
			$temp_array['airline_name'] = $row['airline_name'];
4517
			$temp_array['image_thumbnail'] = "";
4518
			if($row['registration'] != "")
4519
			{
4520
				$image_array = $Image->getSpotterImage($row['registration']);
4521
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4522
			}
4523
			$temp_array['registration_count'] = $row['registration_count'];
4524
 
4525
			$aircraft_array[] = $temp_array;
4526
		}
4527
		return $aircraft_array;
4528
	}
4529
4530
4531
	/**
4532
	* Gets all aircraft manufacturer that have flown over by date
4533
	*
4534
	* @return Array the aircraft manufacturer list
4535
	*
4536
	*/
4537
	public function countAllAircraftManufacturerByDate($date)
4538
	{
4539
		global $globalTimezone, $globalDBdriver;
4540
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4541
		if ($globalTimezone != '') {
4542
			date_default_timezone_set($globalTimezone);
4543
			$datetime = new DateTime($date);
4544
			$offset = $datetime->format('P');
4545
		} else $offset = '+00:00';
4546
4547
		if ($globalDBdriver == 'mysql') {
4548
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4549
				FROM spotter_output
4550
				WHERE spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4551
				GROUP BY spotter_output.aircraft_manufacturer 
4552
				ORDER BY aircraft_manufacturer_count DESC";
4553
		} else {
4554
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4555
				FROM spotter_output
4556
				WHERE spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4557
				GROUP BY spotter_output.aircraft_manufacturer 
4558
				ORDER BY aircraft_manufacturer_count DESC";
4559
		}
4560
		
4561
		$sth = $this->db->prepare($query);
4562
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4563
4564
		$aircraft_array = array();
4565
		$temp_array = array();
4566
4567
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4568
		{
4569
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4570
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4571
4572
			$aircraft_array[] = $temp_array;
4573
		}
4574
		return $aircraft_array;
4575
	}
4576
4577
4578
	/**
4579
	* Gets all aircraft types that have flown over by ident/callsign
4580
	*
4581
	* @return Array the aircraft list
4582
	*
4583
	*/
4584
	public function countAllAircraftTypesByIdent($ident)
4585
	{
4586
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4587
4588
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4589
				FROM spotter_output
4590
				WHERE spotter_output.ident = :ident 
4591
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
4592
				ORDER BY aircraft_icao_count DESC";
4593
4594
		$sth = $this->db->prepare($query);
4595
		$sth->execute(array(':ident' => $ident));
4596
      
4597
		$aircraft_array = array();
4598
		$temp_array = array();
4599
4600
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4601
		{
4602
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4603
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4604
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4605
4606
			$aircraft_array[] = $temp_array;
4607
		}
4608
		return $aircraft_array;
4609
	}
4610
4611
4612
	/**
4613
	* Gets all aircraft registration that have flown over by ident/callsign
4614
	*
4615
	* @return Array the aircraft list
4616
	*
4617
	*/
4618
	public function countAllAircraftRegistrationByIdent($ident)
4619
	{
4620
		$Image = new Image($this->db);
4621
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4622
4623
		$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  
4624
                    FROM spotter_output
4625
                    WHERE spotter_output.registration <> '' AND spotter_output.ident = :ident   
4626
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
4627
		    ORDER BY registration_count DESC";
4628
4629
		
4630
		$sth = $this->db->prepare($query);
4631
		$sth->execute(array(':ident' => $ident));
4632
      
4633
		$aircraft_array = array();
4634
		$temp_array = array();
4635
        
4636
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4637
		{
4638
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4639
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4640
			$temp_array['registration'] = $row['registration'];
4641
			$temp_array['airline_name'] = $row['airline_name'];
4642
			$temp_array['image_thumbnail'] = "";
4643
			if($row['registration'] != "")
4644
			{
4645
				$image_array = $Image->getSpotterImage($row['registration']);
4646
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4647
				else $temp_array['image_thumbnail'] = '';
4648
			}
4649
			$temp_array['registration_count'] = $row['registration_count'];
4650
			$aircraft_array[] = $temp_array;
4651
		}
4652
		return $aircraft_array;
4653
	}
4654
4655
4656
	/**
4657
	* Gets all aircraft manufacturer that have flown over by ident/callsign
4658
	*
4659
	* @return Array the aircraft manufacturer list
4660
	*
4661
	*/
4662
	public function countAllAircraftManufacturerByIdent($ident)
4663
	{
4664
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4665
4666
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4667
                    FROM spotter_output
4668
                    WHERE spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
4669
                    GROUP BY spotter_output.aircraft_manufacturer 
4670
					ORDER BY aircraft_manufacturer_count DESC";
4671
4672
		
4673
		$sth = $this->db->prepare($query);
4674
		$sth->execute(array(':ident' => $ident));
4675
		$aircraft_array = array();
4676
		$temp_array = array();
4677
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4678
		{
4679
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4680
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4681
			$aircraft_array[] = $temp_array;
4682
		}
4683
		return $aircraft_array;
4684
	}
4685
4686
4687
	/**
4688
	* Gets all aircraft types that have flown over by route
4689
	*
4690
	* @return Array the aircraft list
4691
	*
4692
	*/
4693
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao)
4694
	{
4695
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4696
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4697
		
4698
4699
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4700
                    FROM spotter_output
4701
                    WHERE (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
4702
                    GROUP BY spotter_output.aircraft_name 
4703
					ORDER BY aircraft_icao_count DESC";
4704
 
4705
		
4706
		$sth = $this->db->prepare($query);
4707
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4708
		$aircraft_array = array();
4709
		$temp_array = array();
4710
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4711
		{
4712
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4713
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4714
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4715
			$aircraft_array[] = $temp_array;
4716
		}
4717
		return $aircraft_array;
4718
	}
4719
4720
	/**
4721
	* Gets all aircraft registration that have flown over by route
4722
	*
4723
	* @return Array the aircraft list
4724
	*
4725
	*/
4726
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao)
4727
	{
4728
		$Image = new Image($this->db);
4729
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4730
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4731
4732
		$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   
4733
                    FROM spotter_output
4734
                    WHERE spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)   
4735
                    GROUP BY spotter_output.registration 
4736
					ORDER BY registration_count DESC";
4737
4738
		
4739
		$sth = $this->db->prepare($query);
4740
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4741
      
4742
		$aircraft_array = array();
4743
		$temp_array = array();
4744
        
4745
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4746
		{
4747
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4748
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4749
			$temp_array['registration'] = $row['registration'];
4750
			$temp_array['airline_name'] = $row['airline_name'];
4751
			$temp_array['image_thumbnail'] = "";
4752
			if($row['registration'] != "")
4753
			{
4754
				$image_array = $Image->getSpotterImage($row['registration']);
4755
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4756
			}
4757
			$temp_array['registration_count'] = $row['registration_count'];
4758
          
4759
			$aircraft_array[] = $temp_array;
4760
		}
4761
4762
		return $aircraft_array;
4763
	}
4764
	
4765
	
4766
	/**
4767
	* Gets all aircraft manufacturer that have flown over by route
4768
	*
4769
	* @return Array the aircraft manufacturer list
4770
	*
4771
	*/
4772
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao)
4773
	{
4774
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4775
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4776
4777
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4778
                    FROM spotter_output
4779
                    WHERE spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4780
                    GROUP BY spotter_output.aircraft_manufacturer 
4781
					ORDER BY aircraft_manufacturer_count DESC";
4782
4783
		
4784
		$sth = $this->db->prepare($query);
4785
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4786
      
4787
		$aircraft_array = array();
4788
		$temp_array = array();
4789
        
4790
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4791
		{
4792
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4793
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4794
          
4795
			$aircraft_array[] = $temp_array;
4796
		}
4797
4798
		return $aircraft_array;
4799
	}	
4800
4801
	
4802
	
4803
	
4804
	/**
4805
	* Gets all aircraft types that have flown over by country
4806
	*
4807
	* @return Array the aircraft list
4808
	*
4809
	*/
4810
	public function countAllAircraftTypesByCountry($country)
4811
	{
4812
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4813
4814
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4815
                    FROM spotter_output
4816
                    WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
4817
                    GROUP BY spotter_output.aircraft_name 
4818
					ORDER BY aircraft_icao_count DESC";
4819
 
4820
		
4821
		$sth = $this->db->prepare($query);
4822
		$sth->execute(array(':country' => $country));
4823
      
4824
		$aircraft_array = array();
4825
		$temp_array = array();
4826
        
4827
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4828
		{
4829
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4830
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4831
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4832
          
4833
			$aircraft_array[] = $temp_array;
4834
		}
4835
4836
		return $aircraft_array;
4837
	}
4838
4839
4840
	/**
4841
	* Gets all aircraft registration that have flown over by country
4842
	*
4843
	* @return Array the aircraft list
4844
	*
4845
	*/
4846
	public function countAllAircraftRegistrationByCountry($country)
4847
	{
4848
		$Image = new Image($this->db);
4849
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4850
4851
		$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 
4852
                    FROM spotter_output
4853
                    WHERE spotter_output.registration <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country)    
4854
                    GROUP BY spotter_output.registration 
4855
					ORDER BY registration_count DESC";
4856
4857
		
4858
		$sth = $this->db->prepare($query);
4859
		$sth->execute(array(':country' => $country));
4860
      
4861
		$aircraft_array = array();
4862
		$temp_array = array();
4863
        
4864
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4865
		{
4866
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4867
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4868
			$temp_array['registration'] = $row['registration'];
4869
			$temp_array['airline_name'] = $row['airline_name'];
4870
			$temp_array['image_thumbnail'] = "";
4871
			if($row['registration'] != "")
4872
			{
4873
				$image_array = $Image->getSpotterImage($row['registration']);
4874
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4875
			}
4876
			$temp_array['registration_count'] = $row['registration_count'];
4877
          
4878
			$aircraft_array[] = $temp_array;
4879
		}
4880
4881
		return $aircraft_array;
4882
	}
4883
	
4884
	
4885
	/**
4886
	* Gets all aircraft manufacturer that have flown over by country
4887
	*
4888
	* @return Array the aircraft manufacturer list
4889
	*
4890
	*/
4891
	public function countAllAircraftManufacturerByCountry($country)
4892
	{
4893
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4894
4895
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4896
                    FROM spotter_output
4897
                    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) 
4898
                    GROUP BY spotter_output.aircraft_manufacturer 
4899
					ORDER BY aircraft_manufacturer_count DESC";
4900
4901
		
4902
		$sth = $this->db->prepare($query);
4903
		$sth->execute(array(':country' => $country));
4904
      
4905
		$aircraft_array = array();
4906
		$temp_array = array();
4907
        
4908
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4909
		{
4910
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4911
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4912
          
4913
			$aircraft_array[] = $temp_array;
4914
		}
4915
4916
		return $aircraft_array;
4917
	}	
4918
	
4919
	
4920
	
4921
	/**
4922
	* Gets all aircraft manufacturers that have flown over
4923
	*
4924
	* @return Array the aircraft list
4925
	*
4926
	*/
4927
	public function countAllAircraftManufacturers()
4928
	{
4929
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4930
                    FROM spotter_output 
4931
                    WHERE spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available' 
4932
                    GROUP BY spotter_output.aircraft_manufacturer
4933
					ORDER BY aircraft_manufacturer_count DESC
4934
					LIMIT 10";
4935
      
4936
		
4937
		$sth = $this->db->prepare($query);
4938
		$sth->execute();
4939
      
4940
		$manufacturer_array = array();
4941
		$temp_array = array();
4942
        
4943
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4944
		{
4945
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4946
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4947
          
4948
			$manufacturer_array[] = $temp_array;
4949
		}
4950
4951
		return $manufacturer_array;
4952
	}
4953
	
4954
	
4955
	
4956
	/**
4957
	* Gets all aircraft registrations that have flown over
4958
	*
4959
	* @return Array the aircraft list
4960
	*
4961
	*/
4962
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '')
4963
	{
4964
		global $globalDBdriver;
4965
		$Image = new Image($this->db);
4966
		$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    
4967
                    FROM spotter_output 
4968
                    WHERE spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
4969
                if ($olderthanmonths > 0) {
4970
            		if ($globalDBdriver == 'mysql') {
4971
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4972
			} else {
4973
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4974
			}
4975
		}
4976
                if ($sincedate != '') {
4977
            		if ($globalDBdriver == 'mysql') {
4978
				$query .= "AND date > '".$sincedate."' ";
4979
			} else {
4980
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
4981
			}
4982
		}
4983
4984
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4985
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
4986
                $query .= "GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
4987
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4988
		
4989
		$sth = $this->db->prepare($query);
4990
		$sth->execute();
4991
      
4992
		$aircraft_array = array();
4993
		$temp_array = array();
4994
        
4995
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4996
		{
4997
			$temp_array['registration'] = $row['registration'];
4998
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
4999
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5000
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5001
			$temp_array['airline_name'] = $row['airline_name'];
5002
			$temp_array['image_thumbnail'] = "";
5003
			if($row['registration'] != "")
5004
			{
5005
				$image_array = $Image->getSpotterImage($row['registration']);
5006
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5007
			}
5008
          
5009
			$aircraft_array[] = $temp_array;
5010
		}
5011
5012
		return $aircraft_array;
5013
	}
5014
5015
5016
	
5017
	
5018
	/**
5019
	* Gets all departure airports of the airplanes that have flown over
5020
	*
5021
	* @return Array the airport list
5022
	*
5023
	*/
5024
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '')
5025
	{
5026
		global $globalDBdriver;
5027
		$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 
5028
								FROM spotter_output
5029
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' ";
5030
                if ($olderthanmonths > 0) {
5031
            		if ($globalDBdriver == 'mysql') {
5032
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5033
			} else {
5034
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5035
			}
5036
                }
5037
                if ($sincedate != '') {
5038
            		if ($globalDBdriver == 'mysql') {
5039
				$query .= "AND date > '".$sincedate."' ";
5040
			} else {
5041
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
5042
			}
5043
		}
5044
5045
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5046
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5047
                $query .= "GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5048
				ORDER BY airport_departure_icao_count DESC";
5049
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5050
      
5051
		$sth = $this->db->prepare($query);
5052
		$sth->execute();
5053
      
5054
		$airport_array = array();
5055
		$temp_array = array();
5056
        
5057
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5058
		{
5059
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5060
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5061
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5062
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5063
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5064
          
5065
			$airport_array[] = $temp_array;
5066
		}
5067
		return $airport_array;
5068
	}
5069
	
5070
	/**
5071
	* Gets all detected departure airports of the airplanes that have flown over
5072
	*
5073
	* @return Array the airport list
5074
	*
5075
	*/
5076
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '')
5077
	{
5078
		global $globalDBdriver;
5079
		$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
5080
				FROM spotter_output, airport
5081
                    WHERE spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao ";
5082
                if ($olderthanmonths > 0) {
5083
            		if ($globalDBdriver == 'mysql') {
5084
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5085
			} else {
5086
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5087
			}
5088
                }
5089
                if ($sincedate != '') {
5090
            		if ($globalDBdriver == 'mysql') {
5091
				$query .= "AND date > '".$sincedate."' ";
5092
			} else {
5093
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
5094
			}
5095
		}
5096
5097
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5098
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5099
                $query .= "GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5100
				ORDER BY airport_departure_icao_count DESC";
5101
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5102
      
5103
		$sth = $this->db->prepare($query);
5104
		$sth->execute();
5105
      
5106
		$airport_array = array();
5107
		$temp_array = array();
5108
        
5109
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5110
		{
5111
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5112
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5113
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5114
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5115
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5116
          
5117
			$airport_array[] = $temp_array;
5118
		}
5119
		return $airport_array;
5120
	}
5121
	
5122
	
5123
	
5124
	/**
5125
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
5126
	*
5127
	* @return Array the airport list
5128
	*
5129
	*/
5130
	public function countAllDepartureAirportsByAirline($airline_icao)
5131
	{
5132
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5133
5134
		$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 
5135
								FROM spotter_output
5136
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao 
5137
                    GROUP BY spotter_output.departure_airport_icao
5138
					ORDER BY airport_departure_icao_count DESC";
5139
      
5140
		
5141
		$sth = $this->db->prepare($query);
5142
		$sth->execute(array(':airline_icao' => $airline_icao));
5143
      
5144
		$airport_array = array();
5145
		$temp_array = array();
5146
        
5147
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5148
		{
5149
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5150
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5151
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5152
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5153
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5154
          
5155
			$airport_array[] = $temp_array;
5156
		}
5157
5158
		return $airport_array;
5159
	}
5160
	
5161
	
5162
	
5163
	/**
5164
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
5165
	*
5166
	* @return Array the airport list
5167
	*
5168
	*/
5169
	public function countAllDepartureAirportCountriesByAirline($airline_icao)
5170
	{
5171
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5172
					
5173
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5174
								FROM spotter_output 
5175
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
5176
                    GROUP BY spotter_output.departure_airport_country
5177
					ORDER BY airport_departure_country_count DESC";
5178
      
5179
		
5180
		$sth = $this->db->prepare($query);
5181
		$sth->execute(array(':airline_icao' => $airline_icao));
5182
      
5183
		$airport_array = array();
5184
		$temp_array = array();
5185
        
5186
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5187
		{
5188
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5189
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5190
          
5191
			$airport_array[] = $temp_array;
5192
		}
5193
5194
		return $airport_array;
5195
	}
5196
	
5197
	
5198
	
5199
	/**
5200
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
5201
	*
5202
	* @return Array the airport list
5203
	*
5204
	*/
5205
	public function countAllDepartureAirportsByAircraft($aircraft_icao)
5206
	{
5207
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5208
5209
		$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 
5210
								FROM spotter_output
5211
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao 
5212
                    GROUP BY spotter_output.departure_airport_icao
5213
					ORDER BY airport_departure_icao_count DESC";
5214
      
5215
		
5216
		$sth = $this->db->prepare($query);
5217
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5218
      
5219
		$airport_array = array();
5220
		$temp_array = array();
5221
        
5222
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5223
		{
5224
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5225
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5226
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5227
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5228
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5229
          
5230
			$airport_array[] = $temp_array;
5231
		}
5232
5233
		return $airport_array;
5234
	}
5235
	
5236
	
5237
	/**
5238
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
5239
	*
5240
	* @return Array the airport list
5241
	*
5242
	*/
5243
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao)
5244
	{
5245
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5246
					
5247
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5248
								FROM spotter_output 
5249
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
5250
                    GROUP BY spotter_output.departure_airport_country
5251
					ORDER BY airport_departure_country_count DESC";
5252
      
5253
		
5254
		$sth = $this->db->prepare($query);
5255
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5256
      
5257
		$airport_array = array();
5258
		$temp_array = array();
5259
        
5260
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5261
		{
5262
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5263
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5264
          
5265
			$airport_array[] = $temp_array;
5266
		}
5267
5268
		return $airport_array;
5269
	}
5270
	
5271
	
5272
	/**
5273
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
5274
	*
5275
	* @return Array the airport list
5276
	*
5277
	*/
5278
	public function countAllDepartureAirportsByRegistration($registration)
5279
	{
5280
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5281
5282
		$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 
5283
								FROM spotter_output
5284
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.registration = :registration 
5285
                    GROUP BY spotter_output.departure_airport_icao
5286
					ORDER BY airport_departure_icao_count DESC";
5287
      
5288
		
5289
		$sth = $this->db->prepare($query);
5290
		$sth->execute(array(':registration' => $registration));
5291
      
5292
		$airport_array = array();
5293
		$temp_array = array();
5294
        
5295
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5296
		{
5297
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5298
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5299
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5300
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5301
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5302
          
5303
			$airport_array[] = $temp_array;
5304
		}
5305
5306
		return $airport_array;
5307
	}
5308
	
5309
	
5310
	/**
5311
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
5312
	*
5313
	* @return Array the airport list
5314
	*
5315
	*/
5316
	public function countAllDepartureAirportCountriesByRegistration($registration)
5317
	{
5318
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5319
					
5320
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5321
								FROM spotter_output 
5322
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
5323
                    GROUP BY spotter_output.departure_airport_country
5324
					ORDER BY airport_departure_country_count DESC";
5325
      
5326
		
5327
		$sth = $this->db->prepare($query);
5328
		$sth->execute(array(':registration' => $registration));
5329
      
5330
		$airport_array = array();
5331
		$temp_array = array();
5332
        
5333
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5334
		{
5335
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5336
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5337
          
5338
			$airport_array[] = $temp_array;
5339
		}
5340
5341
		return $airport_array;
5342
	}
5343
	
5344
	
5345
	/**
5346
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
5347
	*
5348
	* @return Array the airport list
5349
	*
5350
	*/
5351
	public function countAllDepartureAirportsByAirport($airport_icao)
5352
	{
5353
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5354
5355
		$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 
5356
								FROM spotter_output
5357
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao = :airport_icao 
5358
                    GROUP BY spotter_output.departure_airport_icao
5359
					ORDER BY airport_departure_icao_count DESC";
5360
      
5361
		
5362
		$sth = $this->db->prepare($query);
5363
		$sth->execute(array(':airport_icao' => $airport_icao));
5364
      
5365
		$airport_array = array();
5366
		$temp_array = array();
5367
        
5368
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5369
		{
5370
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5371
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5372
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5373
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5374
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5375
          
5376
			$airport_array[] = $temp_array;
5377
		}
5378
5379
		return $airport_array;
5380
	}
5381
	
5382
	
5383
	/**
5384
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
5385
	*
5386
	* @return Array the airport list
5387
	*
5388
	*/
5389
	public function countAllDepartureAirportCountriesByAirport($airport_icao)
5390
	{
5391
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5392
					
5393
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5394
								FROM spotter_output 
5395
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
5396
                    GROUP BY spotter_output.departure_airport_country
5397
					ORDER BY airport_departure_country_count DESC";
5398
      
5399
		
5400
		$sth = $this->db->prepare($query);
5401
		$sth->execute(array(':airport_icao' => $airport_icao));
5402
      
5403
		$airport_array = array();
5404
		$temp_array = array();
5405
        
5406
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5407
		{
5408
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5409
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5410
          
5411
			$airport_array[] = $temp_array;
5412
		}
5413
5414
		return $airport_array;
5415
	}
5416
	
5417
	
5418
	
5419
	/**
5420
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
5421
	*
5422
	* @return Array the airport list
5423
	*
5424
	*/
5425
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer)
5426
	{
5427
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5428
5429
		$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 
5430
								FROM spotter_output
5431
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
5432
                    GROUP BY spotter_output.departure_airport_icao
5433
					ORDER BY airport_departure_icao_count DESC";
5434
      
5435
		
5436
		$sth = $this->db->prepare($query);
5437
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5438
      
5439
		$airport_array = array();
5440
		$temp_array = array();
5441
        
5442
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5443
		{
5444
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5445
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5446
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5447
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5448
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5449
          
5450
			$airport_array[] = $temp_array;
5451
		}
5452
5453
		return $airport_array;
5454
	}
5455
	
5456
	
5457
	/**
5458
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
5459
	*
5460
	* @return Array the airport list
5461
	*
5462
	*/
5463
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer)
5464
	{
5465
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5466
					
5467
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5468
								FROM spotter_output 
5469
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
5470
                    GROUP BY spotter_output.departure_airport_country
5471
					ORDER BY airport_departure_country_count DESC";
5472
      
5473
		
5474
		$sth = $this->db->prepare($query);
5475
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5476
      
5477
		$airport_array = array();
5478
		$temp_array = array();
5479
        
5480
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5481
		{
5482
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5483
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5484
          
5485
			$airport_array[] = $temp_array;
5486
		}
5487
5488
		return $airport_array;
5489
	}
5490
	
5491
	
5492
	/**
5493
	* Gets all departure airports of the airplanes that have flown over based on a date
5494
	*
5495
	* @return Array the airport list
5496
	*
5497
	*/
5498
	public function countAllDepartureAirportsByDate($date)
5499
	{
5500
		global $globalTimezone, $globalDBdriver;
5501
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5502
5503
		if ($globalTimezone != '') {
5504
			date_default_timezone_set($globalTimezone);
5505
			$datetime = new DateTime($date);
5506
			$offset = $datetime->format('P');
5507
		} else $offset = '+00:00';
5508
5509
		if ($globalDBdriver == 'mysql') {
5510
			$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 
5511
					FROM spotter_output
5512
					WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5513
					GROUP BY spotter_output.departure_airport_icao
5514
					ORDER BY airport_departure_icao_count DESC";
5515
		} else {
5516
			$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 
5517
					FROM spotter_output
5518
					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
5519
					GROUP BY spotter_output.departure_airport_icao
5520
					ORDER BY airport_departure_icao_count DESC";
5521
		}
5522
5523
		$sth = $this->db->prepare($query);
5524
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5525
      
5526
		$airport_array = array();
5527
		$temp_array = array();
5528
        
5529
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5530
		{
5531
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5532
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5533
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5534
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5535
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5536
          
5537
			$airport_array[] = $temp_array;
5538
		}
5539
		return $airport_array;
5540
	}
5541
	
5542
	
5543
	
5544
	/**
5545
	* Gets all departure airports by country of the airplanes that have flown over based on a date
5546
	*
5547
	* @return Array the airport list
5548
	*
5549
	*/
5550
	public function countAllDepartureAirportCountriesByDate($date)
5551
	{
5552
		global $globalTimezone, $globalDBdriver;
5553
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5554
		if ($globalTimezone != '') {
5555
			date_default_timezone_set($globalTimezone);
5556
			$datetime = new DateTime($date);
5557
			$offset = $datetime->format('P');
5558
		} else $offset = '+00:00';
5559
5560
		if ($globalDBdriver == 'mysql') {
5561
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5562
					FROM spotter_output 
5563
					WHERE spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5564
					GROUP BY spotter_output.departure_airport_country
5565
					ORDER BY airport_departure_country_count DESC";
5566
		} else {
5567
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5568
					FROM spotter_output 
5569
					WHERE spotter_output.departure_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5570
					GROUP BY spotter_output.departure_airport_country
5571
					ORDER BY airport_departure_country_count DESC";
5572
		}
5573
		
5574
		$sth = $this->db->prepare($query);
5575
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5576
      
5577
		$airport_array = array();
5578
		$temp_array = array();
5579
        
5580
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5581
		{
5582
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5583
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5584
          
5585
			$airport_array[] = $temp_array;
5586
		}
5587
		return $airport_array;
5588
	}
5589
	
5590
	
5591
	
5592
	/**
5593
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
5594
	*
5595
	* @return Array the airport list
5596
	*
5597
	*/
5598
	public function countAllDepartureAirportsByIdent($ident)
5599
	{
5600
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5601
5602
		$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 
5603
		    FROM spotter_output
5604
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.ident = :ident 
5605
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5606
		    ORDER BY airport_departure_icao_count DESC";
5607
      
5608
		
5609
		$sth = $this->db->prepare($query);
5610
		$sth->execute(array(':ident' => $ident));
5611
      
5612
		$airport_array = array();
5613
		$temp_array = array();
5614
        
5615
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5616
		{
5617
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5618
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5619
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5620
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5621
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5622
          
5623
			$airport_array[] = $temp_array;
5624
		}
5625
5626
		return $airport_array;
5627
	}
5628
	
5629
	
5630
	
5631
	/**
5632
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
5633
	*
5634
	* @return Array the airport list
5635
	*
5636
	*/
5637
	public function countAllDepartureAirportCountriesByIdent($ident)
5638
	{
5639
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5640
					
5641
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5642
								FROM spotter_output 
5643
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
5644
                    GROUP BY spotter_output.departure_airport_country
5645
					ORDER BY airport_departure_country_count DESC";
5646
      
5647
		
5648
		$sth = $this->db->prepare($query);
5649
		$sth->execute(array(':ident' => $ident));
5650
      
5651
		$airport_array = array();
5652
		$temp_array = array();
5653
        
5654
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5655
		{
5656
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5657
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5658
          
5659
			$airport_array[] = $temp_array;
5660
		}
5661
5662
		return $airport_array;
5663
	}
5664
	
5665
	
5666
	
5667
	/**
5668
	* Gets all departure airports of the airplanes that have flown over based on a country
5669
	*
5670
	* @return Array the airport list
5671
	*
5672
	*/
5673
	public function countAllDepartureAirportsByCountry($country)
5674
	{
5675
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5676
5677
		$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 
5678
								FROM spotter_output
5679
                    WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
5680
                    GROUP BY spotter_output.departure_airport_icao
5681
					ORDER BY airport_departure_icao_count DESC";
5682
      
5683
		
5684
		$sth = $this->db->prepare($query);
5685
		$sth->execute(array(':country' => $country));
5686
      
5687
		$airport_array = array();
5688
		$temp_array = array();
5689
        
5690
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5691
		{
5692
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5693
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5694
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5695
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5696
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5697
          
5698
			$airport_array[] = $temp_array;
5699
		}
5700
5701
		return $airport_array;
5702
	}
5703
5704
5705
	/**
5706
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
5707
	*
5708
	* @return Array the airport list
5709
	*
5710
	*/
5711
	public function countAllDepartureAirportCountriesByCountry($country)
5712
	{
5713
		$country = filter_var($country,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.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
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(':country' => $country));
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
	* Gets all arrival airports of the airplanes that have flown over
5742
	*
5743
	* @return Array the airport list
5744
	*
5745
	*/
5746
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false)
5747
	{
5748
		global $globalDBdriver;
5749
		$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 
5750
								FROM spotter_output 
5751
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' ";
5752
                if ($olderthanmonths > 0) {
5753
            		if ($globalDBdriver == 'mysql') {
5754
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5755
			} else {
5756
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5757
			}
5758
                if ($sincedate != '') {
5759
            		if ($globalDBdriver == 'mysql') {
5760
				$query .= "AND date > '".$sincedate."' ";
5761
			} else {
5762
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
5763
			}
5764
		}
5765
            		if ($globalDBdriver == 'mysql') {
5766
				$query .= "AND date > '".$sincedate."' ";
5767
			} else {
5768
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
5769
			}
5770
		}
5771
5772
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5773
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5774
                $query .= "GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
5775
					ORDER BY airport_arrival_icao_count DESC";
5776
		if ($limit) $query .= " LIMIT 10";
5777
      
5778
		
5779
		$sth = $this->db->prepare($query);
5780
		$sth->execute();
5781
      
5782
		$airport_array = array();
5783
		$temp_array = array();
5784
        
5785
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5786
		{
5787
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
5788
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
5789
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
5790
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
5791
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
5792
          
5793
			if ($icaoaskey) {
5794
				$icao = $row['arrival_airport_icao'];
5795
				$airport_array[$icao] = $temp_array;
5796
			} else $airport_array[] = $temp_array;
5797
		}
5798
5799
		return $airport_array;
5800
	}
5801
	
5802
	/**
5803
	* Gets all detected arrival airports of the airplanes that have flown over
5804
	*
5805
	* @return Array the airport list
5806
	*
5807
	*/
5808
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false)
5809
	{
5810
		global $globalDBdriver;
5811
		$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 
5812
			FROM spotter_output, airport 
5813
                    WHERE spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao ";
5814
                if ($olderthanmonths > 0) {
5815
            		if ($globalDBdriver == 'mysql') {
5816
				$query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5817
			} else {
5818
				$query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5819
			}
5820
                if ($sincedate != '') {
5821
            		if ($globalDBdriver == 'mysql') {
5822
				$query .= "AND date > '".$sincedate."' ";
5823
			} else {
5824
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
5825
			}
5826
		}
5827
            		if ($globalDBdriver == 'mysql') {
5828
				$query .= "AND date > '".$sincedate."' ";
5829
			} else {
5830
				$query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP)";
5831
			}
5832
		}
5833
5834
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5835
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5836
                $query .= "GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
5837
					ORDER BY airport_arrival_icao_count DESC";
5838
		if ($limit) $query .= " LIMIT 10";
5839
      
5840
		
5841
		$sth = $this->db->prepare($query);
5842
		$sth->execute();
5843
      
5844
		$airport_array = array();
5845
		$temp_array = array();
5846
        
5847
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5848
		{
5849
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
5850
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
5851
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
5852
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
5853
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
5854
          
5855
			if ($icaoaskey) {
5856
				$icao = $row['arrival_airport_icao'];
5857
				$airport_array[$icao] = $temp_array;
5858
			} else $airport_array[] = $temp_array;
5859
		}
5860
5861
		return $airport_array;
5862
	}
5863
	
5864
	
5865
	
5866
	/**
5867
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
5868
	*
5869
	* @return Array the airport list
5870
	*
5871
	*/
5872
	public function countAllArrivalAirportsByAirline($airline_icao)
5873
	{
5874
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5875
5876
		$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 
5877
								FROM spotter_output 
5878
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao 
5879
                    GROUP BY spotter_output.arrival_airport_icao
5880
					ORDER BY airport_arrival_icao_count DESC";
5881
      
5882
		
5883
		$sth = $this->db->prepare($query);
5884
		$sth->execute(array(':airline_icao' => $airline_icao));
5885
      
5886
		$airport_array = array();
5887
		$temp_array = array();
5888
        
5889
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5890
		{
5891
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
5892
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
5893
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
5894
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
5895
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
5896
          
5897
			$airport_array[] = $temp_array;
5898
		}
5899
5900
		return $airport_array;
5901
	}
5902
	
5903
	
5904
	/**
5905
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
5906
	*
5907
	* @return Array the airport list
5908
	*
5909
	*/
5910
	public function countAllArrivalAirportCountriesByAirline($airline_icao)
5911
	{
5912
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5913
					
5914
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
5915
								FROM spotter_output 
5916
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
5917
                    GROUP BY spotter_output.arrival_airport_country
5918
					ORDER BY airport_arrival_country_count DESC";
5919
      
5920
		
5921
		$sth = $this->db->prepare($query);
5922
		$sth->execute(array(':airline_icao' => $airline_icao));
5923
      
5924
		$airport_array = array();
5925
		$temp_array = array();
5926
        
5927
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5928
		{
5929
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
5930
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
5931
          
5932
			$airport_array[] = $temp_array;
5933
		}
5934
5935
		return $airport_array;
5936
	}
5937
	
5938
	
5939
	/**
5940
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
5941
	*
5942
	* @return Array the airport list
5943
	*
5944
	*/
5945
	public function countAllArrivalAirportsByAircraft($aircraft_icao)
5946
	{
5947
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5948
5949
		$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 
5950
								FROM spotter_output 
5951
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao 
5952
                    GROUP BY spotter_output.arrival_airport_icao
5953
					ORDER BY airport_arrival_icao_count DESC";
5954
      
5955
		
5956
		$sth = $this->db->prepare($query);
5957
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5958
      
5959
		$airport_array = array();
5960
		$temp_array = array();
5961
        
5962
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5963
		{
5964
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
5965
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
5966
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
5967
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
5968
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
5969
          
5970
			$airport_array[] = $temp_array;
5971
		}
5972
5973
		return $airport_array;
5974
	}
5975
	
5976
	
5977
	
5978
	/**
5979
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
5980
	*
5981
	* @return Array the airport list
5982
	*
5983
	*/
5984
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao)
5985
	{
5986
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5987
					
5988
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
5989
								FROM spotter_output 
5990
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
5991
                    GROUP BY spotter_output.arrival_airport_country
5992
					ORDER BY airport_arrival_country_count DESC";
5993
      
5994
		
5995
		$sth = $this->db->prepare($query);
5996
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5997
      
5998
		$airport_array = array();
5999
		$temp_array = array();
6000
        
6001
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6002
		{
6003
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6004
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6005
          
6006
			$airport_array[] = $temp_array;
6007
		}
6008
6009
		return $airport_array;
6010
	}
6011
	
6012
	
6013
	/**
6014
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
6015
	*
6016
	* @return Array the airport list
6017
	*
6018
	*/
6019
	public function countAllArrivalAirportsByRegistration($registration)
6020
	{
6021
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6022
6023
		$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 
6024
								FROM spotter_output 
6025
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.registration = :registration 
6026
                    GROUP BY spotter_output.arrival_airport_icao
6027
					ORDER BY airport_arrival_icao_count DESC";
6028
      
6029
		
6030
		$sth = $this->db->prepare($query);
6031
		$sth->execute(array(':registration' => $registration));
6032
      
6033
		$airport_array = array();
6034
		$temp_array = array();
6035
        
6036
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6037
		{
6038
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6039
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6040
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6041
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6042
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6043
          
6044
			$airport_array[] = $temp_array;
6045
		}
6046
6047
		return $airport_array;
6048
	}
6049
	
6050
	
6051
	/**
6052
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
6053
	*
6054
	* @return Array the airport list
6055
	*
6056
	*/
6057
	public function countAllArrivalAirportCountriesByRegistration($registration)
6058
	{
6059
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6060
					
6061
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6062
								FROM spotter_output 
6063
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
6064
                    GROUP BY spotter_output.arrival_airport_country
6065
					ORDER BY airport_arrival_country_count DESC";
6066
      
6067
		
6068
		$sth = $this->db->prepare($query);
6069
		$sth->execute(array(':registration' => $registration));
6070
      
6071
		$airport_array = array();
6072
		$temp_array = array();
6073
        
6074
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6075
		{
6076
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6077
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6078
          
6079
			$airport_array[] = $temp_array;
6080
		}
6081
6082
		return $airport_array;
6083
	}
6084
	
6085
	
6086
	
6087
	/**
6088
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
6089
	*
6090
	* @return Array the airport list
6091
	*
6092
	*/
6093
	public function countAllArrivalAirportsByAirport($airport_icao)
6094
	{
6095
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6096
6097
		$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 
6098
								FROM spotter_output 
6099
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.departure_airport_icao = :airport_icao 
6100
                    GROUP BY spotter_output.arrival_airport_icao
6101
					ORDER BY airport_arrival_icao_count DESC";
6102
      
6103
		
6104
		$sth = $this->db->prepare($query);
6105
		$sth->execute(array(':airport_icao' => $airport_icao));
6106
      
6107
		$airport_array = array();
6108
		$temp_array = array();
6109
        
6110
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6111
		{
6112
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6113
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6114
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6115
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6116
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6117
          
6118
			$airport_array[] = $temp_array;
6119
		}
6120
6121
		return $airport_array;
6122
	}
6123
	
6124
	
6125
	/**
6126
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
6127
	*
6128
	* @return Array the airport list
6129
	*
6130
	*/
6131
	public function countAllArrivalAirportCountriesByAirport($airport_icao)
6132
	{
6133
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6134
					
6135
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6136
								FROM spotter_output 
6137
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
6138
                    GROUP BY spotter_output.arrival_airport_country
6139
					ORDER BY airport_arrival_country_count DESC";
6140
      
6141
		
6142
		$sth = $this->db->prepare($query);
6143
		$sth->execute(array(':airport_icao' => $airport_icao));
6144
      
6145
		$airport_array = array();
6146
		$temp_array = array();
6147
        
6148
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6149
		{
6150
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6151
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6152
          
6153
			$airport_array[] = $temp_array;
6154
		}
6155
6156
		return $airport_array;
6157
	}
6158
	
6159
	
6160
	/**
6161
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
6162
	*
6163
	* @return Array the airport list
6164
	*
6165
	*/
6166
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer)
6167
	{
6168
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6169
6170
		$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 
6171
								FROM spotter_output 
6172
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6173
                    GROUP BY spotter_output.arrival_airport_icao
6174
					ORDER BY airport_arrival_icao_count DESC";
6175
      
6176
		
6177
		$sth = $this->db->prepare($query);
6178
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6179
      
6180
		$airport_array = array();
6181
		$temp_array = array();
6182
        
6183
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6184
		{
6185
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6186
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6187
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6188
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6189
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6190
          
6191
			$airport_array[] = $temp_array;
6192
		}
6193
6194
		return $airport_array;
6195
	}
6196
	
6197
	
6198
	
6199
	/**
6200
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
6201
	*
6202
	* @return Array the airport list
6203
	*
6204
	*/
6205
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer)
6206
	{
6207
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6208
					
6209
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6210
								FROM spotter_output 
6211
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6212
                    GROUP BY spotter_output.arrival_airport_country
6213
					ORDER BY airport_arrival_country_count DESC";
6214
      
6215
		
6216
		$sth = $this->db->prepare($query);
6217
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6218
      
6219
		$airport_array = array();
6220
		$temp_array = array();
6221
        
6222
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6223
		{
6224
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6225
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6226
          
6227
			$airport_array[] = $temp_array;
6228
		}
6229
6230
		return $airport_array;
6231
	}
6232
	
6233
	
6234
	
6235
	/**
6236
	* Gets all arrival airports of the airplanes that have flown over based on a date
6237
	*
6238
	* @return Array the airport list
6239
	*
6240
	*/
6241
	public function countAllArrivalAirportsByDate($date)
6242
	{
6243
		global $globalTimezone, $globalDBdriver;
6244
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6245
		if ($globalTimezone != '') {
6246
			date_default_timezone_set($globalTimezone);
6247
			$datetime = new DateTime($date);
6248
			$offset = $datetime->format('P');
6249
		} else $offset = '+00:00';
6250
6251
		if ($globalDBdriver == 'mysql') {
6252
			$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 
6253
					FROM spotter_output 
6254
					WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
6255
					GROUP BY spotter_output.arrival_airport_icao
6256
					ORDER BY airport_arrival_icao_count DESC";
6257
		} else {
6258
			$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 
6259
					FROM spotter_output 
6260
					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  
6261
					GROUP BY spotter_output.arrival_airport_icao
6262
					ORDER BY airport_arrival_icao_count DESC";
6263
		}
6264
		
6265
		$sth = $this->db->prepare($query);
6266
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6267
      
6268
		$airport_array = array();
6269
		$temp_array = array();
6270
        
6271
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6272
		{
6273
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6274
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6275
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6276
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6277
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6278
          
6279
			$airport_array[] = $temp_array;
6280
		}
6281
		return $airport_array;
6282
	}
6283
	
6284
	
6285
	
6286
	/**
6287
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
6288
	*
6289
	* @return Array the airport list
6290
	*
6291
	*/
6292
	public function countAllArrivalAirportCountriesByDate($date)
6293
	{
6294
		global $globalTimezone, $globalDBdriver;
6295
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6296
		if ($globalTimezone != '') {
6297
			date_default_timezone_set($globalTimezone);
6298
			$datetime = new DateTime($date);
6299
			$offset = $datetime->format('P');
6300
		} else $offset = '+00:00';
6301
6302
		if ($globalDBdriver == 'mysql') {
6303
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6304
					FROM spotter_output 
6305
					WHERE spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6306
					GROUP BY spotter_output.arrival_airport_country
6307
					ORDER BY airport_arrival_country_count DESC";
6308
		} else {
6309
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6310
					FROM spotter_output 
6311
					WHERE spotter_output.arrival_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
6312
					GROUP BY spotter_output.arrival_airport_country
6313
					ORDER BY airport_arrival_country_count DESC";
6314
		}
6315
		
6316
		$sth = $this->db->prepare($query);
6317
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6318
      
6319
		$airport_array = array();
6320
		$temp_array = array();
6321
        
6322
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6323
		{
6324
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6325
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6326
          
6327
			$airport_array[] = $temp_array;
6328
		}
6329
		return $airport_array;
6330
	}
6331
	
6332
	
6333
	
6334
	/**
6335
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
6336
	*
6337
	* @return Array the airport list
6338
	*
6339
	*/
6340
	public function countAllArrivalAirportsByIdent($ident)
6341
	{
6342
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6343
6344
		$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 
6345
		    FROM spotter_output 
6346
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.ident = :ident  
6347
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6348
		    ORDER BY airport_arrival_icao_count DESC";
6349
      
6350
		
6351
		$sth = $this->db->prepare($query);
6352
		$sth->execute(array(':ident' => $ident));
6353
      
6354
		$airport_array = array();
6355
		$temp_array = array();
6356
        
6357
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6358
		{
6359
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6360
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6361
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6362
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6363
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6364
          
6365
			$airport_array[] = $temp_array;
6366
		}
6367
6368
		return $airport_array;
6369
	}
6370
	
6371
	
6372
	/**
6373
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
6374
	*
6375
	* @return Array the airport list
6376
	*
6377
	*/
6378
	public function countAllArrivalAirportCountriesByIdent($ident)
6379
	{
6380
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6381
					
6382
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6383
								FROM spotter_output 
6384
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
6385
                    GROUP BY spotter_output.arrival_airport_country
6386
					ORDER BY airport_arrival_country_count DESC";
6387
      
6388
		
6389
		$sth = $this->db->prepare($query);
6390
		$sth->execute(array(':ident' => $ident));
6391
      
6392
		$airport_array = array();
6393
		$temp_array = array();
6394
        
6395
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6396
		{
6397
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6398
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6399
          
6400
			$airport_array[] = $temp_array;
6401
		}
6402
6403
		return $airport_array;
6404
	}
6405
	
6406
	
6407
	
6408
	/**
6409
	* Gets all arrival airports of the airplanes that have flown over based on a country
6410
	*
6411
	* @return Array the airport list
6412
	*
6413
	*/
6414
	public function countAllArrivalAirportsByCountry($country)
6415
	{
6416
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6417
6418
		$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 
6419
								FROM spotter_output 
6420
                    WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
6421
                    GROUP BY spotter_output.arrival_airport_icao
6422
					ORDER BY airport_arrival_icao_count DESC";
6423
      
6424
		
6425
		$sth = $this->db->prepare($query);
6426
		$sth->execute(array(':country' => $country));
6427
      
6428
		$airport_array = array();
6429
		$temp_array = array();
6430
        
6431
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6432
		{
6433
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6434
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6435
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6436
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6437
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6438
          
6439
			$airport_array[] = $temp_array;
6440
		}
6441
6442
		return $airport_array;
6443
	}
6444
	
6445
	
6446
	/**
6447
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
6448
	*
6449
	* @return Array the airport list
6450
	*
6451
	*/
6452
	public function countAllArrivalAirportCountriesByCountry($country)
6453
	{
6454
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6455
					
6456
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6457
								FROM spotter_output 
6458
                    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 
6459
                    GROUP BY spotter_output.arrival_airport_country
6460
					ORDER BY airport_arrival_country_count DESC";
6461
      
6462
		
6463
		$sth = $this->db->prepare($query);
6464
		$sth->execute(array(':country' => $country));
6465
      
6466
		$airport_array = array();
6467
		$temp_array = array();
6468
        
6469
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6470
		{
6471
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6472
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6473
          
6474
			$airport_array[] = $temp_array;
6475
		}
6476
6477
		return $airport_array;
6478
	}
6479
6480
6481
6482
	/**
6483
	* Counts all airport departure countries
6484
	*
6485
	* @return Array the airport departure list
6486
	*
6487
	*/
6488
	public function countAllDepartureCountries()
6489
	{
6490
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6491
								FROM spotter_output 
6492
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' 
6493
                    GROUP BY spotter_output.departure_airport_country
6494
					ORDER BY airport_departure_country_count DESC
6495
					LIMIT 10 OFFSET 0";
6496
      
6497
		
6498
		$sth = $this->db->prepare($query);
6499
		$sth->execute();
6500
      
6501
		$airport_array = array();
6502
		$temp_array = array();
6503
        
6504
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6505
		{
6506
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6507
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6508
          
6509
			$airport_array[] = $temp_array;
6510
		}
6511
6512
		return $airport_array;
6513
	}
6514
	
6515
	
6516
	/**
6517
	* Counts all airport arrival countries
6518
	*
6519
	* @return Array the airport arrival list
6520
	*
6521
	*/
6522
	public function countAllArrivalCountries($limit = true)
6523
	{
6524
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6525
								FROM spotter_output 
6526
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
6527
                    GROUP BY spotter_output.arrival_airport_country
6528
					ORDER BY airport_arrival_country_count DESC";
6529
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6530
      
6531
		
6532
		$sth = $this->db->prepare($query);
6533
		$sth->execute();
6534
      
6535
		$airport_array = array();
6536
		$temp_array = array();
6537
        
6538
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6539
		{
6540
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6541
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6542
          
6543
			$airport_array[] = $temp_array;
6544
		}
6545
6546
		return $airport_array;
6547
	}
6548
6549
6550
6551
6552
6553
	/**
6554
	* Gets all route combinations
6555
	*
6556
	* @return Array the route list
6557
	*
6558
	*/
6559
	public function countAllRoutes()
6560
	{
6561
		
6562
		$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
6563
		    FROM spotter_output
6564
                    WHERE spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> 'NA'
6565
                    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
6566
                    ORDER BY route_count DESC
6567
		    LIMIT 10 OFFSET 0";
6568
      
6569
		
6570
		$sth = $this->db->prepare($query);
6571
		$sth->execute();
6572
      
6573
		$routes_array = array();
6574
		$temp_array = array();
6575
        
6576
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6577
		{
6578
			$temp_array['route_count'] = $row['route_count'];
6579
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6580
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6581
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6582
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6583
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6584
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6585
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6586
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6587
          
6588
			$routes_array[] = $temp_array;
6589
		}
6590
6591
		return $routes_array;
6592
	}
6593
	
6594
	
6595
	
6596
	
6597
	/**
6598
	* Gets all route combinations based on an aircraft
6599
	*
6600
	* @return Array the route list
6601
	*
6602
	*/
6603
	public function countAllRoutesByAircraft($aircraft_icao)
6604
	{
6605
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6606
		
6607
		$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
6608
								FROM spotter_output
6609
                    WHERE spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
6610
                    GROUP BY route
6611
                    ORDER BY route_count DESC";
6612
      
6613
		
6614
		$sth = $this->db->prepare($query);
6615
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6616
      
6617
		$routes_array = array();
6618
		$temp_array = array();
6619
        
6620
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6621
		{
6622
			$temp_array['route_count'] = $row['route_count'];
6623
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6624
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6625
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6626
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6627
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6628
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6629
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6630
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6631
          
6632
			$routes_array[] = $temp_array;
6633
		}
6634
6635
		return $routes_array;
6636
	}
6637
	
6638
	
6639
	/**
6640
	* Gets all route combinations based on an aircraft registration
6641
	*
6642
	* @return Array the route list
6643
	*
6644
	*/
6645
	public function countAllRoutesByRegistration($registration)
6646
	{
6647
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
6648
		
6649
		$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
6650
								FROM spotter_output
6651
                    WHERE spotter_output.ident <> '' AND spotter_output.registration = :registration 
6652
                    GROUP BY route
6653
                    ORDER BY route_count DESC";
6654
      
6655
		
6656
		$sth = $this->db->prepare($query);
6657
		$sth->execute(array(':registration' => $registration));
6658
      
6659
		$routes_array = array();
6660
		$temp_array = array();
6661
        
6662
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6663
		{
6664
			$temp_array['route_count'] = $row['route_count'];
6665
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6666
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6667
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6668
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6669
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6670
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6671
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6672
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6673
          
6674
			$routes_array[] = $temp_array;
6675
		}
6676
6677
		return $routes_array;
6678
	}
6679
	
6680
	
6681
	
6682
	/**
6683
	* Gets all route combinations based on an airline
6684
	*
6685
	* @return Array the route list
6686
	*
6687
	*/
6688
	public function countAllRoutesByAirline($airline_icao)
6689
	{
6690
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6691
		
6692
		$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
6693
								FROM spotter_output
6694
                    WHERE spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
6695
                    GROUP BY route
6696
                    ORDER BY route_count DESC";
6697
      
6698
		
6699
		$sth = $this->db->prepare($query);
6700
		$sth->execute(array(':airline_icao' => $airline_icao));
6701
      
6702
		$routes_array = array();
6703
		$temp_array = array();
6704
        
6705
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6706
		{
6707
			$temp_array['route_count'] = $row['route_count'];
6708
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6709
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6710
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6711
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6712
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6713
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6714
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6715
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6716
          
6717
			$routes_array[] = $temp_array;
6718
		}
6719
6720
		return $routes_array;
6721
	}
6722
	
6723
	
6724
	
6725
	/**
6726
	* Gets all route combinations based on an airport
6727
	*
6728
	* @return Array the route list
6729
	*
6730
	*/
6731
	public function countAllRoutesByAirport($airport_icao)
6732
	{
6733
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6734
		
6735
		$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
6736
								FROM spotter_output
6737
                    WHERE spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
6738
                    GROUP BY route
6739
                    ORDER BY route_count DESC";
6740
      
6741
		
6742
		$sth = $this->db->prepare($query);
6743
		$sth->execute(array(':airport_icao' => $airport_icao));
6744
      
6745
		$routes_array = array();
6746
		$temp_array = array();
6747
        
6748
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6749
		{
6750
			$temp_array['route_count'] = $row['route_count'];
6751
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6752
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6753
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6754
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6755
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6756
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6757
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6758
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6759
          
6760
			$routes_array[] = $temp_array;
6761
		}
6762
6763
		return $routes_array;
6764
	}
6765
	
6766
	
6767
	
6768
	/**
6769
	* Gets all route combinations based on an country
6770
	*
6771
	* @return Array the route list
6772
	*
6773
	*/
6774
	public function countAllRoutesByCountry($country)
6775
	{
6776
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6777
		
6778
		$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
6779
								FROM spotter_output
6780
                    WHERE spotter_output.ident <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6781
                    GROUP BY route
6782
                    ORDER BY route_count DESC";
6783
      
6784
		
6785
		$sth = $this->db->prepare($query);
6786
		$sth->execute(array(':country' => $country));
6787
      
6788
		$routes_array = array();
6789
		$temp_array = array();
6790
        
6791
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6792
		{
6793
			$temp_array['route_count'] = $row['route_count'];
6794
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6795
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6796
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6797
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6798
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6799
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6800
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6801
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6802
          
6803
			$routes_array[] = $temp_array;
6804
		}
6805
6806
		return $routes_array;
6807
	}
6808
6809
6810
	/**
6811
	* Gets all route combinations based on an date
6812
	*
6813
	* @return Array the route list
6814
	*
6815
	*/
6816
	public function countAllRoutesByDate($date)
6817
	{
6818
		global $globalTimezone, $globalDBdriver;
6819
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6820
		if ($globalTimezone != '') {
6821
			date_default_timezone_set($globalTimezone);
6822
			$datetime = new DateTime($date);
6823
			$offset = $datetime->format('P');
6824
		} else $offset = '+00:00';
6825
		
6826
		if ($globalDBdriver == 'mysql') {
6827
			$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
6828
					FROM spotter_output
6829
					WHERE spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
6830
					GROUP BY route
6831
					ORDER BY route_count DESC";
6832
		} else {
6833
			$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
6834
					FROM spotter_output
6835
					WHERE spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
6836
					GROUP BY route
6837
					ORDER BY route_count DESC";
6838
		}
6839
		
6840
		$sth = $this->db->prepare($query);
6841
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6842
      
6843
		$routes_array = array();
6844
		$temp_array = array();
6845
        
6846
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6847
		{
6848
			$temp_array['route_count'] = $row['route_count'];
6849
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6850
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6851
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6852
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6853
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6854
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6855
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6856
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6857
          
6858
			$routes_array[] = $temp_array;
6859
		}
6860
6861
		return $routes_array;
6862
	}
6863
	
6864
	
6865
	/**
6866
	* Gets all route combinations based on an ident/callsign
6867
	*
6868
	* @return Array the route list
6869
	*
6870
	*/
6871
	public function countAllRoutesByIdent($ident)
6872
	{
6873
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6874
		
6875
		$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
6876
		    FROM spotter_output
6877
                    WHERE spotter_output.ident <> '' AND spotter_output.ident = :ident   
6878
                    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
6879
                    ORDER BY route_count DESC";
6880
      
6881
		
6882
		$sth = $this->db->prepare($query);
6883
		$sth->execute(array(':ident' => $ident));
6884
      
6885
		$routes_array = array();
6886
		$temp_array = array();
6887
        
6888
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6889
		{
6890
			$temp_array['route_count'] = $row['route_count'];
6891
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6892
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6893
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6894
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6895
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6896
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6897
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6898
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6899
          
6900
			$routes_array[] = $temp_array;
6901
		}
6902
6903
		return $routes_array;
6904
	}
6905
	
6906
	
6907
	/**
6908
	* Gets all route combinations based on an manufacturer
6909
	*
6910
	* @return Array the route list
6911
	*
6912
	*/
6913
	public function countAllRoutesByManufacturer($aircraft_manufacturer)
6914
	{
6915
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6916
		
6917
		$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
6918
		    FROM spotter_output
6919
                    WHERE spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
6920
                    GROUP BY route
6921
                    ORDER BY route_count DESC";
6922
      
6923
		
6924
		$sth = $this->db->prepare($query);
6925
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6926
      
6927
		$routes_array = array();
6928
		$temp_array = array();
6929
        
6930
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6931
		{
6932
			$temp_array['route_count'] = $row['route_count'];
6933
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6934
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6935
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6936
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6937
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6938
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6939
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6940
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6941
          
6942
			$routes_array[] = $temp_array;
6943
		}
6944
6945
		return $routes_array;
6946
	}
6947
6948
	
6949
	
6950
	/**
6951
	* Gets all route combinations with waypoints
6952
	*
6953
	* @return Array the route list
6954
	*
6955
	*/
6956
	public function countAllRoutesWithWaypoints()
6957
	{
6958
		$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
6959
		    FROM spotter_output
6960
                    WHERE spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
6961
                    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
6962
                    ORDER BY route_count DESC
6963
		    LIMIT 10 OFFSET 0";
6964
      
6965
		
6966
		$sth = $this->db->prepare($query);
6967
		$sth->execute();
6968
      
6969
		$routes_array = array();
6970
		$temp_array = array();
6971
        
6972
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6973
		{
6974
			$temp_array['spotter_id'] = $row['spotter_id'];
6975
			$temp_array['route_count'] = $row['route_count'];
6976
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6977
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
6978
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
6979
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
6980
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6981
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
6982
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
6983
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
6984
          
6985
			$routes_array[] = $temp_array;
6986
		}
6987
6988
		return $routes_array;
6989
	}
6990
	
6991
	
6992
	
6993
	
6994
	/**
6995
	* Gets all callsigns that have flown over
6996
	*
6997
	* @return Array the callsign list
6998
	*
6999
	*/
7000
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '')
7001
	{
7002
		global $globalDBdriver;
7003
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
7004
                    FROM spotter_output
7005
                    WHERE spotter_output.ident <> ''  ";
7006
		 if ($olderthanmonths > 0) {
7007
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7008
			else $query .= "AND date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7009
		}
7010
		if ($sincedate != '') {
7011
			if ($globalDBdriver == 'mysql') $query .= "AND date > '".$sincedate."' ";
7012
			else $query .= "AND date > CAST('".$sincedate."' AS TIMESTAMP) ";
7013
		}
7014
		$query .= "GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7015
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7016
      		
7017
		$sth = $this->db->prepare($query);
7018
		$sth->execute();
7019
      
7020
		$callsign_array = array();
7021
		$temp_array = array();
7022
        
7023
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7024
		{
7025
			$temp_array['callsign_icao'] = $row['ident'];
7026
			$temp_array['airline_name'] = $row['airline_name'];
7027
			$temp_array['airline_icao'] = $row['airline_icao'];
7028
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7029
          
7030
			$callsign_array[] = $temp_array;
7031
		}
7032
7033
		return $callsign_array;
7034
	}
7035
7036
7037
7038
7039
	/**
7040
	* Counts all dates
7041
	*
7042
	* @return Array the date list
7043
	*
7044
	*/
7045
	public function countAllDates()
7046
	{
7047
		global $globalTimezone, $globalDBdriver;
7048
		if ($globalTimezone != '') {
7049
			date_default_timezone_set($globalTimezone);
7050
			$datetime = new DateTime();
7051
			$offset = $datetime->format('P');
7052
		} else $offset = '+00:00';
7053
7054
		if ($globalDBdriver == 'mysql') {
7055
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7056
								FROM spotter_output 
7057
								GROUP BY date_name 
7058
								ORDER BY date_count DESC
7059
								LIMIT 10 OFFSET 0";
7060
		} else {
7061
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7062
								FROM spotter_output 
7063
								GROUP BY date_name 
7064
								ORDER BY date_count DESC
7065
								LIMIT 10 OFFSET 0";
7066
		}
7067
      
7068
		
7069
		$sth = $this->db->prepare($query);
7070
		$sth->execute(array(':offset' => $offset));
7071
      
7072
		$date_array = array();
7073
		$temp_array = array();
7074
        
7075
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7076
		{
7077
			$temp_array['date_name'] = $row['date_name'];
7078
			$temp_array['date_count'] = $row['date_count'];
7079
7080
			$date_array[] = $temp_array;
7081
		}
7082
7083
		return $date_array;
7084
	}
7085
	
7086
	
7087
	
7088
	/**
7089
	* Counts all dates during the last 7 days
7090
	*
7091
	* @return Array the date list
7092
	*
7093
	*/
7094
	public function countAllDatesLast7Days()
7095
	{
7096
		global $globalTimezone, $globalDBdriver;
7097
		if ($globalTimezone != '') {
7098
			date_default_timezone_set($globalTimezone);
7099
			$datetime = new DateTime();
7100
			$offset = $datetime->format('P');
7101
		} else $offset = '+00:00';
7102
		
7103
		if ($globalDBdriver == 'mysql') {
7104
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7105
								FROM spotter_output 
7106
								WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)
7107
								GROUP BY date_name 
7108
								ORDER BY spotter_output.date ASC";
7109
			$query_data = array(':offset' => $offset);
7110
		} else {
7111
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7112
								FROM spotter_output 
7113
								WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'
7114
								GROUP BY date_name 
7115
								ORDER BY date_name ASC";
7116
			$query_data = array(':offset' => $offset);
7117
    		}
7118
		
7119
		$sth = $this->db->prepare($query);
7120
		$sth->execute($query_data);
7121
      
7122
		$date_array = array();
7123
		$temp_array = array();
7124
        
7125
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7126
		{
7127
			$temp_array['date_name'] = $row['date_name'];
7128
			$temp_array['date_count'] = $row['date_count'];
7129
          
7130
			$date_array[] = $temp_array;
7131
		}
7132
7133
		return $date_array;
7134
	}
7135
7136
	/**
7137
	* Counts all dates during the last month
7138
	*
7139
	* @return Array the date list
7140
	*
7141
	*/
7142
	public function countAllDatesLastMonth()
7143
	{
7144
		global $globalTimezone, $globalDBdriver;
7145
		if ($globalTimezone != '') {
7146
			date_default_timezone_set($globalTimezone);
7147
			$datetime = new DateTime();
7148
			$offset = $datetime->format('P');
7149
		} else $offset = '+00:00';
7150
		
7151
		if ($globalDBdriver == 'mysql') {
7152
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7153
								FROM spotter_output 
7154
								WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
7155
								GROUP BY date_name 
7156
								ORDER BY spotter_output.date ASC";
7157
			$query_data = array(':offset' => $offset);
7158
		} else {
7159
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7160
								FROM spotter_output 
7161
								WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
7162
								GROUP BY date_name 
7163
								ORDER BY date_name ASC";
7164
			$query_data = array(':offset' => $offset);
7165
    		}
7166
		
7167
		$sth = $this->db->prepare($query);
7168
		$sth->execute($query_data);
7169
      
7170
		$date_array = array();
7171
		$temp_array = array();
7172
        
7173
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7174
		{
7175
			$temp_array['date_name'] = $row['date_name'];
7176
			$temp_array['date_count'] = $row['date_count'];
7177
          
7178
			$date_array[] = $temp_array;
7179
		}
7180
7181
		return $date_array;
7182
	}
7183
	
7184
	/**
7185
	* Counts all month
7186
	*
7187
	* @return Array the month list
7188
	*
7189
	*/
7190
	public function countAllMonths()
7191
	{
7192
		global $globalTimezone, $globalDBdriver;
7193
		if ($globalTimezone != '') {
7194
			date_default_timezone_set($globalTimezone);
7195
			$datetime = new DateTime();
7196
			$offset = $datetime->format('P');
7197
		} else $offset = '+00:00';
7198
7199
		if ($globalDBdriver == 'mysql') {
7200
			$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
7201
								FROM spotter_output 
7202
								GROUP BY year_name, month_name 
7203
								ORDER BY date_count DESC";
7204
		} else {
7205
			$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
7206
								FROM spotter_output 
7207
								GROUP BY year_name, month_name 
7208
								ORDER BY date_count DESC";
7209
		}
7210
      
7211
		
7212
		$sth = $this->db->prepare($query);
7213
		$sth->execute(array(':offset' => $offset));
7214
      
7215
		$date_array = array();
7216
		$temp_array = array();
7217
        
7218
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7219
		{
7220
			$temp_array['month_name'] = $row['month_name'];
7221
			$temp_array['year_name'] = $row['year_name'];
7222
			$temp_array['date_count'] = $row['date_count'];
7223
7224
			$date_array[] = $temp_array;
7225
		}
7226
7227
		return $date_array;
7228
	}
7229
7230
	/**
7231
	* Counts all military month
7232
	*
7233
	* @return Array the month list
7234
	*
7235
	*/
7236
	public function countAllMilitaryMonths()
7237
	{
7238
		global $globalTimezone, $globalDBdriver;
7239
		if ($globalTimezone != '') {
7240
			date_default_timezone_set($globalTimezone);
7241
			$datetime = new DateTime();
7242
			$offset = $datetime->format('P');
7243
		} else $offset = '+00:00';
7244
7245
		if ($globalDBdriver == 'mysql') {
7246
			$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
7247
								FROM spotter_output s
7248
								WHERE s.airline_type = 'military'
7249
								GROUP BY year_name, month_name 
7250
								ORDER BY date_count DESC";
7251
		} else {
7252
			$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
7253
								FROM spotter_output s
7254
								WHERE s.airline_type = 'military'
7255
								GROUP BY year_name, month_name 
7256
								ORDER BY date_count DESC";
7257
		}
7258
		
7259
		$sth = $this->db->prepare($query);
7260
		$sth->execute(array(':offset' => $offset));
7261
      
7262
		$date_array = array();
7263
		$temp_array = array();
7264
        
7265
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7266
		{
7267
			$temp_array['month_name'] = $row['month_name'];
7268
			$temp_array['year_name'] = $row['year_name'];
7269
			$temp_array['date_count'] = $row['date_count'];
7270
7271
			$date_array[] = $temp_array;
7272
		}
7273
7274
		return $date_array;
7275
	}
7276
	
7277
	/**
7278
	* Counts all month owners
7279
	*
7280
	* @return Array the month list
7281
	*
7282
	*/
7283
	public function countAllMonthsOwners()
7284
	{
7285
		global $globalTimezone, $globalDBdriver;
7286
		if ($globalTimezone != '') {
7287
			date_default_timezone_set($globalTimezone);
7288
			$datetime = new DateTime();
7289
			$offset = $datetime->format('P');
7290
		} else $offset = '+00:00';
7291
7292
		if ($globalDBdriver == 'mysql') {
7293
			$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
7294
								FROM spotter_output 
7295
								WHERE owner_name <> ''
7296
								GROUP BY year_name, month_name
7297
								ORDER BY date_count DESC";
7298
		} else {
7299
			$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
7300
								FROM spotter_output 
7301
								WHERE owner_name <> ''
7302
								GROUP BY year_name, month_name
7303
								ORDER BY date_count DESC";
7304
		}
7305
		
7306
		$sth = $this->db->prepare($query);
7307
		$sth->execute(array(':offset' => $offset));
7308
      
7309
		$date_array = array();
7310
		$temp_array = array();
7311
        
7312
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7313
		{
7314
			$temp_array['month_name'] = $row['month_name'];
7315
			$temp_array['year_name'] = $row['year_name'];
7316
			$temp_array['date_count'] = $row['date_count'];
7317
7318
			$date_array[] = $temp_array;
7319
		}
7320
7321
		return $date_array;
7322
	}
7323
7324
	/**
7325
	* Counts all month pilot
7326
	*
7327
	* @return Array the month list
7328
	*
7329
	*/
7330
	public function countAllMonthsPilots()
7331
	{
7332
		global $globalTimezone, $globalDBdriver;
7333
		if ($globalTimezone != '') {
7334
			date_default_timezone_set($globalTimezone);
7335
			$datetime = new DateTime();
7336
			$offset = $datetime->format('P');
7337
		} else $offset = '+00:00';
7338
7339
		if ($globalDBdriver == 'mysql') {
7340
			$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
7341
								FROM spotter_output 
7342
								WHERE pilot_id <> '' AND pilot_id IS NOT NULL
7343
								GROUP BY year_name, month_name
7344
								ORDER BY date_count DESC";
7345
		} else {
7346
			$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
7347
								FROM spotter_output 
7348
								WHERE pilot_id <> '' AND pilot_id IS NOT NULL
7349
								GROUP BY year_name, month_name
7350
								ORDER BY date_count DESC";
7351
		}
7352
		
7353
		$sth = $this->db->prepare($query);
7354
		$sth->execute(array(':offset' => $offset));
7355
      
7356
		$date_array = array();
7357
		$temp_array = array();
7358
        
7359
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7360
		{
7361
			$temp_array['month_name'] = $row['month_name'];
7362
			$temp_array['year_name'] = $row['year_name'];
7363
			$temp_array['date_count'] = $row['date_count'];
7364
7365
			$date_array[] = $temp_array;
7366
		}
7367
7368
		return $date_array;
7369
	}
7370
	
7371
7372
	/**
7373
	* Counts all month airline
7374
	*
7375
	* @return Array the month list
7376
	*
7377
	*/
7378
	public function countAllMonthsAirlines()
7379
	{
7380
		global $globalTimezone, $globalDBdriver;
7381
		if ($globalTimezone != '') {
7382
			date_default_timezone_set($globalTimezone);
7383
			$datetime = new DateTime();
7384
			$offset = $datetime->format('P');
7385
		} else $offset = '+00:00';
7386
7387
		if ($globalDBdriver == 'mysql') {
7388
			$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
7389
								FROM spotter_output 
7390
								WHERE airline_icao <> '' 
7391
								GROUP BY year_name, month_name
7392
								ORDER BY date_count DESC";
7393
		} else {
7394
			$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
7395
								FROM spotter_output 
7396
								WHERE airline_icao <> '' 
7397
								GROUP BY year_name, month_name
7398
								ORDER BY date_count DESC";
7399
		}
7400
		
7401
		$sth = $this->db->prepare($query);
7402
		$sth->execute(array(':offset' => $offset));
7403
      
7404
		$date_array = array();
7405
		$temp_array = array();
7406
        
7407
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7408
		{
7409
			$temp_array['month_name'] = $row['month_name'];
7410
			$temp_array['year_name'] = $row['year_name'];
7411
			$temp_array['date_count'] = $row['date_count'];
7412
7413
			$date_array[] = $temp_array;
7414
		}
7415
7416
		return $date_array;
7417
	}
7418
	
7419
	/**
7420
	* Counts all month aircraft
7421
	*
7422
	* @return Array the month list
7423
	*
7424
	*/
7425
	public function countAllMonthsAircrafts()
7426
	{
7427
		global $globalTimezone, $globalDBdriver;
7428
		if ($globalTimezone != '') {
7429
			date_default_timezone_set($globalTimezone);
7430
			$datetime = new DateTime();
7431
			$offset = $datetime->format('P');
7432
		} else $offset = '+00:00';
7433
7434
		if ($globalDBdriver == 'mysql') {
7435
			$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
7436
								FROM spotter_output 
7437
								WHERE aircraft_icao <> '' 
7438
								GROUP BY year_name, month_name
7439
								ORDER BY date_count DESC";
7440
		} else {
7441
			$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
7442
								FROM spotter_output 
7443
								WHERE aircraft_icao <> '' 
7444
								GROUP BY year_name, month_name
7445
								ORDER BY date_count DESC";
7446
		}
7447
		
7448
		$sth = $this->db->prepare($query);
7449
		$sth->execute(array(':offset' => $offset));
7450
      
7451
		$date_array = array();
7452
		$temp_array = array();
7453
        
7454
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7455
		{
7456
			$temp_array['month_name'] = $row['month_name'];
7457
			$temp_array['year_name'] = $row['year_name'];
7458
			$temp_array['date_count'] = $row['date_count'];
7459
7460
			$date_array[] = $temp_array;
7461
		}
7462
7463
		return $date_array;
7464
	}
7465
	
7466
7467
	/**
7468
	* Counts all month real arrival
7469
	*
7470
	* @return Array the month list
7471
	*
7472
	*/
7473
	public function countAllMonthsRealArrivals()
7474
	{
7475
		global $globalTimezone, $globalDBdriver;
7476
		if ($globalTimezone != '') {
7477
			date_default_timezone_set($globalTimezone);
7478
			$datetime = new DateTime();
7479
			$offset = $datetime->format('P');
7480
		} else $offset = '+00:00';
7481
7482
		if ($globalDBdriver == 'mysql') {
7483
			$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
7484
								FROM spotter_output 
7485
								WHERE real_arrival_airport_icao <> '' 
7486
								GROUP BY year_name, month_name
7487
								ORDER BY date_count DESC";
7488
		} else {
7489
			$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
7490
								FROM spotter_output 
7491
								WHERE real_arrival_airport_icao <> '' 
7492
								GROUP BY year_name, month_name
7493
								ORDER BY date_count DESC";
7494
		}
7495
		
7496
		$sth = $this->db->prepare($query);
7497
		$sth->execute(array(':offset' => $offset));
7498
      
7499
		$date_array = array();
7500
		$temp_array = array();
7501
        
7502
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7503
		{
7504
			$temp_array['month_name'] = $row['month_name'];
7505
			$temp_array['year_name'] = $row['year_name'];
7506
			$temp_array['date_count'] = $row['date_count'];
7507
7508
			$date_array[] = $temp_array;
7509
		}
7510
7511
		return $date_array;
7512
	}
7513
	
7514
7515
7516
	/**
7517
	* Counts all dates during the last year
7518
	*
7519
	* @return Array the date list
7520
	*
7521
	*/
7522
	public function countAllMonthsLastYear()
7523
	{
7524
		global $globalTimezone, $globalDBdriver;
7525
		if ($globalTimezone != '') {
7526
			date_default_timezone_set($globalTimezone);
7527
			$datetime = new DateTime();
7528
			$offset = $datetime->format('P');
7529
		} else $offset = '+00:00';
7530
		
7531
		if ($globalDBdriver == 'mysql') {
7532
			$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
7533
								FROM spotter_output 
7534
								WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)
7535
								GROUP BY year_name, month_name
7536
								ORDER BY year_name, month_name ASC";
7537
			$query_data = array(':offset' => $offset);
7538
		} else {
7539
			$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
7540
								FROM spotter_output 
7541
								WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'
7542
								GROUP BY year_name, month_name
7543
								ORDER BY year_name, month_name ASC";
7544
			$query_data = array(':offset' => $offset);
7545
    		}
7546
		
7547
		$sth = $this->db->prepare($query);
7548
		$sth->execute($query_data);
7549
      
7550
		$date_array = array();
7551
		$temp_array = array();
7552
        
7553
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7554
		{
7555
			$temp_array['year_name'] = $row['year_name'];
7556
			$temp_array['month_name'] = $row['month_name'];
7557
			$temp_array['date_count'] = $row['date_count'];
7558
          
7559
			$date_array[] = $temp_array;
7560
		}
7561
7562
		return $date_array;
7563
	}
7564
	
7565
	
7566
	
7567
	/**
7568
	* Counts all hours
7569
	*
7570
	* @return Array the hour list
7571
	*
7572
	*/
7573
	public function countAllHours($orderby)
7574
	{
7575
		global $globalTimezone, $globalDBdriver;
7576
		if ($globalTimezone != '') {
7577
			date_default_timezone_set($globalTimezone);
7578
			$datetime = new DateTime();
7579
			$offset = $datetime->format('P');
7580
		} else $offset = '+00:00';
7581
7582
		$orderby_sql = '';
7583
		if ($orderby == "hour")
7584
		{
7585
			$orderby_sql = "ORDER BY hour_name ASC";
7586
		}
7587
		if ($orderby == "count")
7588
		{
7589
			$orderby_sql = "ORDER BY hour_count DESC";
7590
		}
7591
		
7592
		if ($globalDBdriver == 'mysql') {
7593
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7594
								FROM spotter_output 
7595
								GROUP BY hour_name 
7596
								".$orderby_sql;
7597
7598
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
7599
								FROM spotter_output 
7600
								GROUP BY hour_name 
7601
								".$orderby_sql."
7602
								LIMIT 10 OFFSET 00";
7603
  */    
7604
		$query_data = array(':offset' => $offset);
7605
		} else {
7606
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
7607
								FROM spotter_output 
7608
								GROUP BY hour_name 
7609
								".$orderby_sql;
7610
			$query_data = array(':offset' => $offset);
7611
		}
7612
		
7613
		$sth = $this->db->prepare($query);
7614
		$sth->execute($query_data);
7615
      
7616
		$hour_array = array();
7617
		$temp_array = array();
7618
        
7619
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7620
		{
7621
			$temp_array['hour_name'] = $row['hour_name'];
7622
			$temp_array['hour_count'] = $row['hour_count'];
7623
          
7624
			$hour_array[] = $temp_array;
7625
		}
7626
7627
		return $hour_array;
7628
	}
7629
	
7630
	
7631
	/**
7632
	* Counts all hours by airline
7633
	*
7634
	* @return Array the hour list
7635
	*
7636
	*/
7637
	public function countAllHoursByAirline($airline_icao)
7638
	{
7639
		global $globalTimezone, $globalDBdriver;
7640
		if ($globalTimezone != '') {
7641
			date_default_timezone_set($globalTimezone);
7642
			$datetime = new DateTime();
7643
			$offset = $datetime->format('P');
7644
		} else $offset = '+00:00';
7645
7646
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7647
7648
		if ($globalDBdriver == 'mysql') {
7649
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7650
								FROM spotter_output 
7651
								WHERE spotter_output.airline_icao = :airline_icao
7652
								GROUP BY hour_name 
7653
								ORDER BY hour_name ASC";
7654
		} else {
7655
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
7656
								FROM spotter_output 
7657
								WHERE spotter_output.airline_icao = :airline_icao
7658
								GROUP BY hour_name 
7659
								ORDER BY hour_name ASC";
7660
		}
7661
		
7662
		$sth = $this->db->prepare($query);
7663
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
7664
      
7665
		$hour_array = array();
7666
		$temp_array = array();
7667
        
7668
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7669
		{
7670
			$temp_array['hour_name'] = $row['hour_name'];
7671
			$temp_array['hour_count'] = $row['hour_count'];
7672
          
7673
			$hour_array[] = $temp_array;
7674
		}
7675
7676
		return $hour_array;
7677
	}
7678
	
7679
	
7680
	
7681
	
7682
	/**
7683
	* Counts all hours by aircraft
7684
	*
7685
	* @return Array the hour list
7686
	*
7687
	*/
7688
	public function countAllHoursByAircraft($aircraft_icao)
7689
	{
7690
		global $globalTimezone, $globalDBdriver;
7691
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7692
		if ($globalTimezone != '') {
7693
			date_default_timezone_set($globalTimezone);
7694
			$datetime = new DateTime();
7695
			$offset = $datetime->format('P');
7696
		} else $offset = '+00:00';
7697
7698
		if ($globalDBdriver == 'mysql') {
7699
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7700
								FROM spotter_output 
7701
								WHERE spotter_output.aircraft_icao = :aircraft_icao
7702
								GROUP BY hour_name 
7703
								ORDER BY hour_name ASC";
7704
		} else {
7705
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
7706
								FROM spotter_output 
7707
								WHERE spotter_output.aircraft_icao = :aircraft_icao
7708
								GROUP BY hour_name 
7709
								ORDER BY hour_name ASC";
7710
		}
7711
		
7712
		$sth = $this->db->prepare($query);
7713
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
7714
      
7715
		$hour_array = array();
7716
		$temp_array = array();
7717
        
7718
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7719
		{
7720
			$temp_array['hour_name'] = $row['hour_name'];
7721
			$temp_array['hour_count'] = $row['hour_count'];
7722
          
7723
			$hour_array[] = $temp_array;
7724
		}
7725
7726
		return $hour_array;
7727
	}
7728
	
7729
	
7730
	/**
7731
	* Counts all hours by aircraft registration
7732
	*
7733
	* @return Array the hour list
7734
	*
7735
	*/
7736
	public function countAllHoursByRegistration($registration)
7737
	{
7738
		global $globalTimezone, $globalDBdriver;
7739
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7740
		if ($globalTimezone != '') {
7741
			date_default_timezone_set($globalTimezone);
7742
			$datetime = new DateTime();
7743
			$offset = $datetime->format('P');
7744
		} else $offset = '+00:00';
7745
7746
		if ($globalDBdriver == 'mysql') {
7747
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7748
								FROM spotter_output 
7749
								WHERE spotter_output.registration = :registration
7750
								GROUP BY hour_name 
7751
								ORDER BY hour_name ASC";
7752
		} else {
7753
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
7754
								FROM spotter_output 
7755
								WHERE spotter_output.registration = :registration
7756
								GROUP BY hour_name 
7757
								ORDER BY hour_name ASC";
7758
		}
7759
		
7760
		$sth = $this->db->prepare($query);
7761
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
7762
      
7763
		$hour_array = array();
7764
		$temp_array = array();
7765
        
7766
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7767
		{
7768
			$temp_array['hour_name'] = $row['hour_name'];
7769
			$temp_array['hour_count'] = $row['hour_count'];
7770
          
7771
			$hour_array[] = $temp_array;
7772
		}
7773
7774
		return $hour_array;
7775
	}
7776
	
7777
	
7778
	/**
7779
	* Counts all hours by airport
7780
	*
7781
	* @return Array the hour list
7782
	*
7783
	*/
7784
	public function countAllHoursByAirport($airport_icao)
7785
	{
7786
		global $globalTimezone, $globalDBdriver;
7787
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7788
		if ($globalTimezone != '') {
7789
			date_default_timezone_set($globalTimezone);
7790
			$datetime = new DateTime();
7791
			$offset = $datetime->format('P');
7792
		} else $offset = '+00:00';
7793
7794
		if ($globalDBdriver == 'mysql') {
7795
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7796
								FROM spotter_output 
7797
								WHERE (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
7798
								GROUP BY hour_name 
7799
								ORDER BY hour_name ASC";
7800
		} else {
7801
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
7802
								FROM spotter_output 
7803
								WHERE (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
7804
								GROUP BY hour_name 
7805
								ORDER BY hour_name ASC";
7806
		}
7807
		
7808
		$sth = $this->db->prepare($query);
7809
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
7810
      
7811
		$hour_array = array();
7812
		$temp_array = array();
7813
        
7814
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7815
		{
7816
			$temp_array['hour_name'] = $row['hour_name'];
7817
			$temp_array['hour_count'] = $row['hour_count'];
7818
          
7819
			$hour_array[] = $temp_array;
7820
		}
7821
7822
		return $hour_array;
7823
	}
7824
	
7825
	
7826
	
7827
	/**
7828
	* Counts all hours by manufacturer
7829
	*
7830
	* @return Array the hour list
7831
	*
7832
	*/
7833
	public function countAllHoursByManufacturer($aircraft_manufacturer)
7834
	{
7835
		global $globalTimezone, $globalDBdriver;
7836
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7837
		if ($globalTimezone != '') {
7838
			date_default_timezone_set($globalTimezone);
7839
			$datetime = new DateTime();
7840
			$offset = $datetime->format('P');
7841
		} else $offset = '+00:00';
7842
7843
		if ($globalDBdriver == 'mysql') {
7844
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7845
								FROM spotter_output 
7846
								WHERE spotter_output.aircraft_manufacturer = :aircraft_manufacturer
7847
								GROUP BY hour_name 
7848
								ORDER BY hour_name ASC";
7849
		} else {
7850
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
7851
								FROM spotter_output 
7852
								WHERE spotter_output.aircraft_manufacturer = :aircraft_manufacturer
7853
								GROUP BY hour_name 
7854
								ORDER BY hour_name ASC";
7855
		}
7856
		
7857
		$sth = $this->db->prepare($query);
7858
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
7859
      
7860
		$hour_array = array();
7861
		$temp_array = array();
7862
        
7863
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7864
		{
7865
			$temp_array['hour_name'] = $row['hour_name'];
7866
			$temp_array['hour_count'] = $row['hour_count'];
7867
          
7868
			$hour_array[] = $temp_array;
7869
		}
7870
7871
		return $hour_array;
7872
	}
7873
	
7874
	
7875
	
7876
	/**
7877
	* Counts all hours by date
7878
	*
7879
	* @return Array the hour list
7880
	*
7881
	*/
7882
	public function countAllHoursByDate($date)
7883
	{
7884
		global $globalTimezone, $globalDBdriver;
7885
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7886
		if ($globalTimezone != '') {
7887
			date_default_timezone_set($globalTimezone);
7888
			$datetime = new DateTime($date);
7889
			$offset = $datetime->format('P');
7890
		} else $offset = '+00:00';
7891
7892
		if ($globalDBdriver == 'mysql') {
7893
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7894
								FROM spotter_output 
7895
								WHERE DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
7896
								GROUP BY hour_name 
7897
								ORDER BY hour_name ASC";
7898
		} else {
7899
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
7900
								FROM spotter_output 
7901
								WHERE to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
7902
								GROUP BY hour_name 
7903
								ORDER BY hour_name ASC";
7904
		}
7905
		
7906
		$sth = $this->db->prepare($query);
7907
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7908
      
7909
		$hour_array = array();
7910
		$temp_array = array();
7911
        
7912
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7913
		{
7914
			$temp_array['hour_name'] = $row['hour_name'];
7915
			$temp_array['hour_count'] = $row['hour_count'];
7916
          
7917
			$hour_array[] = $temp_array;
7918
		}
7919
7920
		return $hour_array;
7921
	}
7922
	
7923
	
7924
	
7925
	/**
7926
	* Counts all hours by a ident/callsign
7927
	*
7928
	* @return Array the hour list
7929
	*
7930
	*/
7931
	public function countAllHoursByIdent($ident)
7932
	{
7933
		global $globalTimezone, $globalDBdriver;
7934
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7935
		if ($globalTimezone != '') {
7936
			date_default_timezone_set($globalTimezone);
7937
			$datetime = new DateTime();
7938
			$offset = $datetime->format('P');
7939
		} else $offset = '+00:00';
7940
7941
		if ($globalDBdriver == 'mysql') {
7942
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7943
								FROM spotter_output 
7944
								WHERE spotter_output.ident = :ident 
7945
								GROUP BY hour_name 
7946
								ORDER BY hour_name ASC";
7947
		} else {
7948
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
7949
								FROM spotter_output 
7950
								WHERE spotter_output.ident = :ident 
7951
								GROUP BY hour_name 
7952
								ORDER BY hour_name ASC";
7953
		}
7954
      
7955
		
7956
		$sth = $this->db->prepare($query);
7957
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
7958
      
7959
		$hour_array = array();
7960
		$temp_array = array();
7961
        
7962
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7963
		{
7964
			$temp_array['hour_name'] = $row['hour_name'];
7965
			$temp_array['hour_count'] = $row['hour_count'];
7966
          
7967
			$hour_array[] = $temp_array;
7968
		}
7969
7970
		return $hour_array;
7971
	}
7972
	
7973
	
7974
	
7975
	/**
7976
	* Counts all hours by route
7977
	*
7978
	* @return Array the hour list
7979
	*
7980
	*/
7981
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao)
7982
	{
7983
		global $globalTimezone, $globalDBdriver;
7984
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
7985
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
7986
		if ($globalTimezone != '') {
7987
			date_default_timezone_set($globalTimezone);
7988
			$datetime = new DateTime();
7989
			$offset = $datetime->format('P');
7990
		} else $offset = '+00:00';
7991
7992
		if ($globalDBdriver == 'mysql') {
7993
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
7994
								FROM spotter_output 
7995
								WHERE (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
7996
								GROUP BY hour_name 
7997
								ORDER BY hour_name ASC";
7998
		} else {
7999
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8000
								FROM spotter_output 
8001
								WHERE (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
8002
								GROUP BY hour_name 
8003
								ORDER BY hour_name ASC";
8004
		}
8005
		
8006
		$sth = $this->db->prepare($query);
8007
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
8008
      
8009
		$hour_array = array();
8010
		$temp_array = array();
8011
        
8012
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8013
		{
8014
			$temp_array['hour_name'] = $row['hour_name'];
8015
			$temp_array['hour_count'] = $row['hour_count'];
8016
          
8017
			$hour_array[] = $temp_array;
8018
		}
8019
8020
		return $hour_array;
8021
	}
8022
	
8023
	
8024
	/**
8025
	* Counts all hours by country
8026
	*
8027
	* @return Array the hour list
8028
	*
8029
	*/
8030
	public function countAllHoursByCountry($country)
8031
	{
8032
		global $globalTimezone, $globalDBdriver;
8033
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8034
		if ($globalTimezone != '') {
8035
			date_default_timezone_set($globalTimezone);
8036
			$datetime = new DateTime();
8037
			$offset = $datetime->format('P');
8038
		} else $offset = '+00:00';
8039
8040
		if ($globalDBdriver == 'mysql') {
8041
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8042
								FROM spotter_output 
8043
								WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
8044
								GROUP BY hour_name 
8045
								ORDER BY hour_name ASC";
8046
		} else {
8047
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8048
								FROM spotter_output 
8049
								WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
8050
								GROUP BY hour_name 
8051
								ORDER BY hour_name ASC";
8052
		}
8053
		
8054
		$sth = $this->db->prepare($query);
8055
		$sth->execute(array(':country' => $country,':offset' => $offset));
8056
      
8057
		$hour_array = array();
8058
		$temp_array = array();
8059
        
8060
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8061
		{
8062
			$temp_array['hour_name'] = $row['hour_name'];
8063
			$temp_array['hour_count'] = $row['hour_count'];
8064
          
8065
			$hour_array[] = $temp_array;
8066
		}
8067
8068
		return $hour_array;
8069
	}
8070
8071
8072
8073
8074
	/**
8075
	* Counts all aircraft that have flown over
8076
	*
8077
	* @return Integer the number of aircrafts
8078
	*
8079
	*/
8080
	public function countOverallAircrafts()
8081
	{
8082
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
8083
                    FROM spotter_output
8084
                    WHERE spotter_output.ident <> ''";
8085
      
8086
		
8087
		$sth = $this->db->prepare($query);
8088
		$sth->execute();
8089
		return $sth->fetchColumn();
8090
	}
8091
8092
	/**
8093
	* Counts all flight that really arrival
8094
	*
8095
	* @return Integer the number of aircrafts
8096
	*
8097
	*/
8098
	public function countOverallArrival()
8099
	{
8100
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
8101
                    FROM spotter_output
8102
                    WHERE spotter_output.arrival_airport_icao <> ''";
8103
      
8104
		
8105
		$sth = $this->db->prepare($query);
8106
		$sth->execute();
8107
		return $sth->fetchColumn();
8108
	}
8109
8110
	/**
8111
	* Counts all pilots that have flown over
8112
	*
8113
	* @return Integer the number of pilots
8114
	*
8115
	*/
8116
	public function countOverallPilots()
8117
	{
8118
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
8119
                    FROM spotter_output
8120
                    WHERE spotter_output.pilot_id <> ''";
8121
      
8122
		
8123
		$sth = $this->db->prepare($query);
8124
		$sth->execute();
8125
		return $sth->fetchColumn();
8126
	}
8127
8128
	/**
8129
	* Counts all owners that have flown over
8130
	*
8131
	* @return Integer the number of owners
8132
	*
8133
	*/
8134
	public function countOverallOwners()
8135
	{
8136
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
8137
                    FROM spotter_output
8138
                    WHERE spotter_output.owner_name <> ''";
8139
      
8140
		
8141
		$sth = $this->db->prepare($query);
8142
		$sth->execute();
8143
		return $sth->fetchColumn();
8144
	}
8145
	
8146
	
8147
	/**
8148
	* Counts all flights that have flown over
8149
	*
8150
	* @return Integer the number of flights
8151
	*
8152
	*/
8153
	public function countOverallFlights()
8154
	{
8155
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
8156
                    FROM spotter_output";
8157
      
8158
		
8159
		$sth = $this->db->prepare($query);
8160
		$sth->execute();
8161
		return $sth->fetchColumn();
8162
	}
8163
	
8164
	/**
8165
	* Counts all military flights that have flown over
8166
	*
8167
	* @return Integer the number of flights
8168
	*
8169
	*/
8170
	public function countOverallMilitaryFlights()
8171
	{
8172
		$query  = "SELECT COUNT(s.spotter_id) AS flight_count  
8173
                    FROM spotter_output s, airlines a WHERE s.airline_icao = a.icao AND a.type = 'military'";
8174
      
8175
		
8176
		$sth = $this->db->prepare($query);
8177
		$sth->execute();
8178
		return $sth->fetchColumn();
8179
	}
8180
	
8181
	
8182
	
8183
	/**
8184
	* Counts all airlines that have flown over
8185
	*
8186
	* @return Integer the number of airlines
8187
	*
8188
	*/
8189
	public function countOverallAirlines()
8190
	{
8191
		$query  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
8192
							FROM spotter_output";
8193
      
8194
		
8195
		$sth = $this->db->prepare($query);
8196
		$sth->execute();
8197
		return $sth->fetchColumn();
8198
	}
8199
8200
  
8201
	/**
8202
	* Counts all hours of today
8203
	*
8204
	* @return Array the hour list
8205
	*
8206
	*/
8207
	public function countAllHoursFromToday()
8208
	{
8209
		global $globalTimezone, $globalDBdriver;
8210
		if ($globalTimezone != '') {
8211
			date_default_timezone_set($globalTimezone);
8212
			$datetime = new DateTime();
8213
			$offset = $datetime->format('P');
8214
		} else $offset = '+00:00';
8215
8216
		if ($globalDBdriver == 'mysql') {
8217
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8218
								FROM spotter_output 
8219
								WHERE DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
8220
								GROUP BY hour_name 
8221
								ORDER BY hour_name ASC";
8222
		} else {
8223
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8224
								FROM spotter_output 
8225
								WHERE to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
8226
								GROUP BY hour_name 
8227
								ORDER BY hour_name ASC";
8228
		}
8229
		
8230
		$sth = $this->db->prepare($query);
8231
		$sth->execute(array(':offset' => $offset));
8232
      
8233
		$hour_array = array();
8234
		$temp_array = array();
8235
        
8236
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8237
		{
8238
			$temp_array['hour_name'] = $row['hour_name'];
8239
			$temp_array['hour_count'] = $row['hour_count'];
8240
			$hour_array[] = $temp_array;
8241
		}
8242
8243
		return $hour_array;
8244
	}
8245
    
8246
	/**
8247
	* Gets all the spotter information based on calculated upcoming flights
8248
	*
8249
	* @return Array the spotter information
8250
	*
8251
	*/
8252
	public function getUpcomingFlights($limit = '', $sort = '')
8253
	{
8254
		global $global_query, $globalDBdriver, $globalTimezone;
8255
		date_default_timezone_set('UTC');
8256
		$limit_query = '';
8257
		if ($limit != "")
8258
		{
8259
			$limit_array = explode(",", $limit);
8260
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
8261
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
8262
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
8263
			{
8264
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
8265
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
8266
			}
8267
		}
8268
		$currentHour = date("G");
8269
		$next3Hours = date("G", strtotime("+3 hour"));
8270
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
8271
		if ($currentHour >= 21 && $next3Hours >= 00)
8272
		{
8273
			$next3Hours = 24;
8274
		}
8275
		$currentDayofWeek = date("l");
8276
		if ($globalDBdriver == 'mysql') {
8277
			if ($sort != "")
8278
			{
8279
				$search_orderby_array = $this->getOrderBy();
8280
				$orderby_query = $search_orderby_array[$sort]['sql'];
8281
			} else {
8282
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
8283
			}
8284
8285
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
8286
			    FROM spotter_output
8287
			    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'
8288
			    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";
8289
8290
/*			$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
8291
			    FROM spotter_output
8292
			    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'
8293
			    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";
8294
*/
8295
			$spotter_array = $this->getDataFromDB($query.$limit_query);
8296
		} else {
8297
			if ($sort != "")
8298
			{
8299
				$search_orderby_array = $this->getOrderBy();
8300
				$orderby_query = $search_orderby_array[$sort]['sql'];
8301
			} else {
8302
				$orderby_query = " ORDER BY EXTRACT (HOUR FROM spotter_output.date) ASC";
8303
			}
8304
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
8305
			    FROM spotter_output
8306
			    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 <> '' 
8307
			    GROUP BY spotter_output.ident, spotter_output.spotter_id HAVING count(spotter_output.ident) > 10 $orderby_query";
8308
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
8309
		}
8310
		return $spotter_array;
8311
	}
8312
    
8313
    
8314
     /**
8315
	* Gets the Barrie Spotter ID based on the FlightAware ID
8316
	*
8317
	* @return Integer the Barrie Spotter ID
8318
	*
8319
	*/
8320
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
8321
	{
8322
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
8323
8324
		$query  = "SELECT spotter_output.spotter_id
8325
								FROM spotter_output 
8326
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
8327
        
8328
		
8329
		$sth = $this->db->prepare($query);
8330
		$sth->execute();
8331
8332
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8333
		{
8334
			return $row['spotter_id'];
8335
		}
8336
	}
8337
  
8338
 
8339
	/**
8340
	* Parses a date string
8341
	*
8342
	* @param String $dateString the date string
8343
	* @param String $timezone the timezone of a user
8344
	* @return Array the time information
8345
	*
8346
	*/
8347
	public function parseDateString($dateString, $timezone = '')
8348
	{
8349
		$time_array = array();
8350
	
8351
		if ($timezone != "")
8352
		{
8353
			date_default_timezone_set($timezone);
8354
		}
8355
		
8356
		$current_date = date("Y-m-d H:i:s");
8357
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
8358
		
8359
		$diff = abs(strtotime($current_date) - strtotime($date));
8360
8361
		$time_array['years'] = floor($diff / (365*60*60*24)); 
8362
		$years = $time_array['years'];
8363
		
8364
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
8365
		$months = $time_array['months'];
8366
		
8367
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
8368
		$days = $time_array['days'];
8369
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
8370
		$hours = $time_array['hours'];
8371
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
8372
		$minutes = $time_array['minutes'];
8373
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
8374
		
8375
		return $time_array;	
8376
	}	
8377
	
8378
	
8379
	
8380
	
8381
	/**
8382
	* Parses the direction degrees to working
8383
	*
8384
	* @param Float $direction the direction in degrees
8385
	* @return Array the direction information
8386
	*
8387
	*/
8388
	public function parseDirection($direction = 0)
8389
	{
8390
		if ($direction == '') $direction = 0;
8391
		$direction_array = array();
8392
		$temp_array = array();
8393
8394
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
8395
		{
8396
			$temp_array['direction_degree'] = $direction;
8397
			$temp_array['direction_shortname'] = "N";
8398
			$temp_array['direction_fullname'] = "North";
8399
		} elseif ($direction >= 22.5 && $direction < 45){
8400
			$temp_array['direction_degree'] = $direction;
8401
			$temp_array['direction_shortname'] = "NNE";
8402
			$temp_array['direction_fullname'] = "North-Northeast";
8403
		} elseif ($direction >= 45 && $direction < 67.5){
8404
			$temp_array['direction_degree'] = $direction;
8405
			$temp_array['direction_shortname'] = "NE";
8406
			$temp_array['direction_fullname'] = "Northeast";
8407
		} elseif ($direction >= 67.5 && $direction < 90){
8408
			$temp_array['direction_degree'] = $direction;
8409
			$temp_array['direction_shortname'] = "ENE";
8410
			$temp_array['direction_fullname'] = "East-Northeast";
8411
		} elseif ($direction >= 90 && $direction < 112.5){
8412
			$temp_array['direction_degree'] = $direction;
8413
			$temp_array['direction_shortname'] = "E";
8414
			$temp_array['direction_fullname'] = "East";
8415
		} elseif ($direction >= 112.5 && $direction < 135){
8416
			$temp_array['direction_degree'] = $direction;
8417
			$temp_array['direction_shortname'] = "ESE";
8418
			$temp_array['direction_fullname'] = "East-Southeast";
8419
		} elseif ($direction >= 135 && $direction < 157.5){
8420
			$temp_array['direction_degree'] = $direction;
8421
			$temp_array['direction_shortname'] = "SE";
8422
			$temp_array['direction_fullname'] = "Southeast";
8423
		} elseif ($direction >= 157.5 && $direction < 180){
8424
			$temp_array['direction_degree'] = $direction;
8425
			$temp_array['direction_shortname'] = "SSE";
8426
			$temp_array['direction_fullname'] = "South-Southeast";
8427
		} elseif ($direction >= 180 && $direction < 202.5){
8428
			$temp_array['direction_degree'] = $direction;
8429
			$temp_array['direction_shortname'] = "S";
8430
			$temp_array['direction_fullname'] = "South";
8431
		} elseif ($direction >= 202.5 && $direction < 225){
8432
			$temp_array['direction_degree'] = $direction;
8433
			$temp_array['direction_shortname'] = "SSW";
8434
			$temp_array['direction_fullname'] = "South-Southwest";
8435
		} elseif ($direction >= 225 && $direction < 247.5){
8436
			$temp_array['direction_degree'] = $direction;
8437
			$temp_array['direction_shortname'] = "SW";
8438
			$temp_array['direction_fullname'] = "Southwest";
8439
		} elseif ($direction >= 247.5 && $direction < 270){
8440
			$temp_array['direction_degree'] = $direction;
8441
			$temp_array['direction_shortname'] = "WSW";
8442
			$temp_array['direction_fullname'] = "West-Southwest";
8443
		} elseif ($direction >= 270 && $direction < 292.5){
8444
			$temp_array['direction_degree'] = $direction;
8445
			$temp_array['direction_shortname'] = "W";
8446
			$temp_array['direction_fullname'] = "West";
8447
		} elseif ($direction >= 292.5 && $direction < 315){
8448
			$temp_array['direction_degree'] = $direction;
8449
			$temp_array['direction_shortname'] = "WNW";
8450
			$temp_array['direction_fullname'] = "West-Northwest";
8451
		} elseif ($direction >= 315 && $direction < 337.5){
8452
			$temp_array['direction_degree'] = $direction;
8453
			$temp_array['direction_shortname'] = "NW";
8454
			$temp_array['direction_fullname'] = "Northwest";
8455
		} elseif ($direction >= 337.5 && $direction < 360){
8456
			$temp_array['direction_degree'] = $direction;
8457
			$temp_array['direction_shortname'] = "NNW";
8458
			$temp_array['direction_fullname'] = "North-Northwest";
8459
		}
8460
		$direction_array[] = $temp_array;
8461
		return $direction_array;
8462
	}
8463
	
8464
	
8465
	/**
8466
	* Gets the aircraft registration
8467
	*
8468
	* @param String $flightaware_id the flight aware id
8469
	* @return String the aircraft registration
8470
	*
8471
	*/
8472
	
8473
	public function getAircraftRegistration($flightaware_id)
8474
	{
8475
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
8476
        
8477
		$options = array(
8478
			'trace' => true,
8479
			'exceptions' => 0,
8480
			'login' => $globalFlightAwareUsername,
8481
			'password' => $globalFlightAwarePassword,
8482
		);
8483
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
8484
		
8485
		$params = array('faFlightID' => $flightaware_id);
8486
		$result = $client->AirlineFlightInfo($params);
8487
		
8488
		if (isset($result->AirlineFlightInfoResult))
8489
		{
8490
			$registration = $result->AirlineFlightInfoResult->tailnumber;
8491
		} else return '';
8492
		
8493
		$registration = $this->convertAircraftRegistration($registration);
8494
		
8495
		return $registration;
8496
	}
8497
8498
8499
	/**
8500
	* Gets the aircraft registration from ModeS
8501
	*
8502
	* @param String $aircraft_modes the flight ModeS in hex
8503
	* @return String the aircraft registration
8504
	*
8505
	*/
8506
	public function getAircraftRegistrationBymodeS($aircraft_modes)
8507
	{
8508
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
8509
	
8510
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
8511
		
8512
		$sth = $this->db->prepare($query);
8513
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
8514
    
8515
		$row = $sth->fetch(PDO::FETCH_ASSOC);
8516
		if (count($row) > 0) {
8517
		    //return $row['Registration'];
8518
		    return $row['registration'];
8519
		} else return '';
8520
	
8521
	}
8522
8523
	/**
8524
	* Gets the aircraft type from ModeS
8525
	*
8526
	* @param String $aircraft_modes the flight ModeS in hex
8527
	* @return String the aircraft type
8528
	*
8529
	*/
8530
	public function getAircraftTypeBymodeS($aircraft_modes)
8531
	{
8532
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
8533
	
8534
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
8535
		
8536
		$sth = $this->db->prepare($query);
8537
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
8538
    
8539
		$row = $sth->fetch(PDO::FETCH_ASSOC);
8540
		if (count($row) > 0) {
8541
		    if ($row['type_flight'] == null) return '';
8542
		    else return $row['type_flight'];
8543
		} else return '';
8544
	
8545
	}
8546
8547
	/**
8548
	* Gets Countrie from latitude/longitude
8549
	*
8550
	* @param Float $latitude latitute of the flight
8551
	* @param Float $longitude longitute of the flight
8552
	* @return String the countrie
8553
	*/
8554
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
8555
	{
8556
		global $globalDBdriver, $globalDebug;
8557
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
8558
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
8559
	
8560
		try {
8561
			/*
8562
			if ($globalDBdriver == 'mysql') {
8563
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
8564
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
8565
			}
8566
			*/
8567
			// This query seems to work both for MariaDB and PostgreSQL
8568
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
8569
		
8570
			$sth = $this->db->prepare($query);
8571
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
8572
			$sth->execute();
8573
    
8574
			$row = $sth->fetch(PDO::FETCH_ASSOC);
8575
			if (count($row) > 0) {
8576
				return $row;
8577
			} else return '';
8578
		} catch (PDOException $e) {
8579
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
8580
			return '';
8581
		}
8582
	
8583
	}
8584
8585
	/**
8586
	* converts the registration code using the country prefix
8587
	*
8588
	* @param String $registration the aircraft registration
8589
	* @return String the aircraft registration
8590
	*
8591
	*/
8592
	public function convertAircraftRegistration($registration)
8593
	{
8594
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8595
		$registration_prefix = '';
8596
		$registration_1 = substr($registration, 0, 1);
8597
		$registration_2 = substr($registration, 0, 2);
8598
8599
		//first get the prefix based on two characters
8600
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
8601
      
8602
		
8603
		$sth = $this->db->prepare($query);
8604
		$sth->execute(array(':registration_2' => $registration_2));
8605
        
8606
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8607
		{
8608
			$registration_prefix = $row['registration_prefix'];
8609
		}
8610
8611
		//if we didn't find a two chracter prefix lets just search the one with one character
8612
		if ($registration_prefix == '')
8613
		{
8614
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
8615
			$sth = $this->db->prepare($query);
8616
			$sth->execute(array(':registration_1' => $registration_1));
8617
	        
8618
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
8619
			{
8620
				$registration_prefix = $row['registration_prefix'];
8621
			}
8622
		}
8623
8624
		//determine which characters are being used and convert the registration code appropiately
8625
		if (strlen($registration_prefix) == 1)
8626
		{
8627
			if (0 === strpos($registration, 'N')) {
8628
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
8629
			} else {
8630
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
8631
			}
8632
		} else if(strlen($registration_prefix) == 2){
8633
			if (0 === strpos($registration, 'N')) {
8634
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
8635
			} else {
8636
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
8637
			}
8638
		}
8639
		return $registration;
8640
	}
8641
8642
	/**
8643
	* Country from the registration code
8644
	*
8645
	* @param String $registration the aircraft registration
8646
	* @return String the country
8647
	*
8648
	*/
8649
	public function countryFromAircraftRegistration($registration)
8650
	{
8651
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8652
		
8653
		$registration_prefix = '';
8654
		$registration_test = explode('-',$registration);
8655
		$country = '';
8656
		if ($registration_test[0] != $registration) {
8657
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
8658
	      
8659
			$sth = $this->db->prepare($query);
8660
			$sth->execute(array(':registration_1' => $registration_test[0]));
8661
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
8662
			{
8663
				//$registration_prefix = $row['registration_prefix'];
8664
				$country = $row['country'];
8665
			}
8666
		} else {
8667
    			$registration_1 = substr($registration, 0, 1);
8668
		        $registration_2 = substr($registration, 0, 2);
8669
8670
			$country = '';
8671
			//first get the prefix based on two characters
8672
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
8673
      
8674
			
8675
			$sth = $this->db->prepare($query);
8676
			$sth->execute(array(':registration_2' => $registration_2));
8677
        
8678
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
8679
			{
8680
				$registration_prefix = $row['registration_prefix'];
8681
				$country = $row['country'];
8682
			}
8683
8684
			//if we didn't find a two chracter prefix lets just search the one with one character
8685
			if ($registration_prefix == "")
8686
			{
8687
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
8688
	      
8689
				$sth = $this->db->prepare($query);
8690
				$sth->execute(array(':registration_1' => $registration_1));
8691
	        
8692
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
8693
				{
8694
					//$registration_prefix = $row['registration_prefix'];
8695
					$country = $row['country'];
8696
				}
8697
			}
8698
		}
8699
    
8700
		return $country;
8701
	}
8702
	
8703
	/**
8704
	* Set a new highlight value for a flight
8705
	*
8706
	* @param String $flightaware_id flightaware_id from spotter_output table
8707
	* @param String $highlight New highlight value
8708
	*/
8709
	public function setHighlightFlight($flightaware_id,$highlight) {
8710
		
8711
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
8712
		$sth = $this->db->prepare($query);
8713
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
8714
	}
8715
	
8716
	/**
8717
	* Gets the short url from bit.ly
8718
	*
8719
	* @param String $url the full url
8720
	* @return String the bit.ly url
8721
	*
8722
	*/
8723
	public function getBitlyURL($url)
8724
	{
8725
		global $globalBitlyAccessToken;
8726
		
8727
		if ($globalBitlyAccessToken == '') return $url;
8728
        
8729
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
8730
		
8731
		$ch = curl_init();
8732
		curl_setopt($ch, CURLOPT_HEADER, 0);
8733
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
8734
		curl_setopt($ch, CURLOPT_URL, $google_url);
8735
		$bitly_data = curl_exec($ch);
8736
		curl_close($ch);
8737
		
8738
		$bitly_data = json_decode($bitly_data);
8739
		$bitly_url = '';
8740
		if ($bitly_data->status_txt = "OK"){
8741
			$bitly_url = $bitly_data->data->url;
8742
		}
8743
8744
		return $bitly_url;
8745
	}
8746
8747
8748
	public function getOrderBy()
8749
	{
8750
		$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"));
8751
		
8752
		return $orderby;
8753
		
8754
	}
8755
    
8756
/*
8757
	public function importFromFlightAware()
8758
	{
8759
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
8760
		$Spotter = new Spotter($this->db);
8761
		$SpotterLive = new SpotterLive($this->db);
8762
		$options = array(
8763
		            'trace' => true,
8764
		            'exceptions' => 0,
8765
		            'login' => $globalFlightAwareUsername,
8766
		            'password' => $globalFlightAwarePassword,
8767
		);
8768
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
8769
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
8770
		$result = $client->SearchBirdseyeInFlight($params);
8771
		$dataFound = false;
8772
		$ignoreImport = false;
8773
		if (isset($result->SearchBirdseyeInFlightResult))
8774
		{
8775
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
8776
			{
8777
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
8778
				{
8779
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
8780
					{
8781
						foreach($globalAirportIgnore as $airportIgnore)
8782
						{
8783
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
8784
							{
8785
								$ignoreImport = true; 
8786
							}
8787
						}
8788
						if ($ignoreImport == false)
8789
						{
8790
							$flightaware_id = $aircraft->faFlightID;
8791
							$ident = $aircraft->ident;
8792
							$aircraft_type = $aircraft->type;
8793
							$departure_airport = $aircraft->origin;
8794
							$arrival_airport = $aircraft->destination;
8795
							$latitude = $aircraft->latitude;
8796
							$longitude = $aircraft->longitude;
8797
							$waypoints = $aircraft->waypoints;
8798
							$altitude = $aircraft->altitude;
8799
							$heading = $aircraft->heading;
8800
							$groundspeed = $aircraft->groundspeed;
8801
							$dataFound = true;
8802
							//gets the callsign from the last hour
8803
							$last_hour_ident = $this->getIdentFromLastHour($ident);
8804
							//change the departure/arrival airport to NA if its not available
8805
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
8806
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
8807
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
8808
							if($last_hour_ident == "")
8809
							{
8810
								//adds the spotter data for the archive
8811
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
8812
							}
8813
8814
							//adds the spotter LIVE data
8815
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
8816
						}
8817
					}
8818
					$ignoreImport = false;
8819
				}
8820
			} else {
8821
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
8822
				{
8823
					foreach($globalAirportIgnore as $airportIgnore)
8824
					{
8825
						foreach($globalAirportIgnore as $airportIgnore)
8826
						{
8827
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
8828
							{
8829
								$ignoreImport = true; 
8830
							}
8831
						}
8832
						if ($ignoreImport == false)
8833
						{
8834
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
8835
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
8836
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
8837
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
8838
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
8839
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
8840
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
8841
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
8842
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
8843
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
8844
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
8845
							$dataFound = true;
8846
							//gets the callsign from the last hour
8847
							$last_hour_ident = $this->getIdentFromLastHour($ident);
8848
							//change the departure/arrival airport to NA if its not available
8849
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
8850
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
8851
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
8852
							if($last_hour_ident == "")
8853
							{
8854
								//adds the spotter data for the archive
8855
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
8856
							}
8857
							//adds the spotter LIVE data
8858
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
8859
						}
8860
						$ignoreImport = false;
8861
					}
8862
				}
8863
			}
8864
		} 
8865
	}
8866
*/
8867
8868
	// Update flights data when new data in DB
8869
	public function updateFieldsFromOtherTables()
8870
	{
8871
		global $globalDebug, $globalDBdriver;
8872
		$Image = new Image($this->db);
8873
		
8874
8875
		// routes
8876
		if ($globalDebug) print "Routes...\n";
8877
		if ($globalDBdriver == 'mysql') {
8878
			$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)";
8879
		} else {
8880
			$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'";
8881
		}
8882
		$sth = $this->db->prepare($query);
8883
		$sth->execute();
8884
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8885
		{
8886
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
8887
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
8888
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
8889
				$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";
8890
				$sthu = $this->db->prepare($update_query);
8891
				$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']));
8892
			}
8893
		}
8894
		
8895
		if ($globalDebug) print "Airlines...\n";
8896
		//airlines
8897
		if ($globalDBdriver == 'mysql') {
8898
			$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)";
8899
		} elseif ($globalDBdriver == 'pgsql') {
8900
			$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'";
8901
		}
8902
		$sth = $this->db->prepare($query);
8903
		$sth->execute();
8904
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8905
		{
8906
			if (is_numeric(substr($row['ident'], -1, 1)))
8907
			{
8908
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3));
8909
				if (isset($airline_array[0]['name'])) {
8910
					$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";
8911
					$sthu = $this->db->prepare($update_query);
8912
					$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']));
8913
				}
8914
			}
8915
		}
8916
8917
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
8918
		//duplicate modes
8919
		$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";
8920
		$sth = $this->db->prepare($query);
8921
		$sth->execute();
8922
		
8923
		if ($globalDebug) print "Aircraft...\n";
8924
		//aircraft
8925
		if ($globalDBdriver == 'mysql') {
8926
			$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)";
8927
		} elseif ($globalDBdriver == 'pgsql') {
8928
			$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'";
8929
		}
8930
		$sth = $this->db->prepare($query);
8931
		$sth->execute();
8932
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8933
		{
8934
			if ($row['aircraft_icao'] != '') {
8935
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
8936
				if ($row['registration'] != ""){
8937
					$image_array = $Image->getSpotterImage($row['registration']);
8938
					if (count($image_array) == 0) {
8939
						$Image->addSpotterImage($row['registration']);
8940
					}
8941
				}
8942
				if (count($aircraft_name) > 0) {
8943
					$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";
8944
					$sthu = $this->db->prepare($update_query);
8945
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
8946
				}
8947
			}
8948
		}
8949
	}	
8950
8951
	// Update arrival airports for data already in DB
8952
	public function updateArrivalAirports()
8953
	{
8954
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
8955
		$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";
8956
		$sth = $this->db->prepare($query);
8957
		$sth->execute();
8958
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8959
		{
8960
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
8961
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
8962
				$airport_icao = '';
8963
				 if (isset($closestAirports[0])) {
8964
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
8965
						$airport_icao = $closestAirports[0]['icao'];
8966
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
8967
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
8968
						foreach ($closestAirports as $airport) {
8969
							if ($row['arrival_airport_icao'] == $airport['icao']) {
8970
								$airport_icao = $airport['icao'];
8971
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
8972
								break;
8973
							}
8974
						}
8975
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
8976
						$airport_icao = $closestAirports[0]['icao'];
8977
						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";
8978
					} else {
8979
						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";
8980
					}
8981
				} else {
8982
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
8983
				}
8984
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
8985
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
8986
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
8987
					$sthu = $this->db->prepare($update_query);
8988
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
8989
				}
8990
			}
8991
		}
8992
	}
8993
	
8994
	public function closestAirports($origLat,$origLon,$dist = 10) {
8995
		global $globalDBdriver;
8996
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
8997
/*
8998
		$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 
8999
                      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)) 
9000
                      having distance < $dist ORDER BY distance limit 100;";
9001
*/
9002
		if ($globalDBdriver == 'mysql') {
9003
			$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 
9004
	                      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)) 
9005
	                      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;";
9006
                } else {
9007
			$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 
9008
	                      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)) 
9009
	                      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;";
9010
    		}
9011
		$sth = $this->db->prepare($query);
9012
		$sth->execute();
9013
		return $sth->fetchAll(PDO::FETCH_ASSOC);
9014
	}
9015
}
9016
/*
9017
$Spotter = new Spotter();
9018
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
9019
*/
9020
/*
9021
$Spotter = new Spotter();
9022
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
9023
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
9024
print_r($da);
9025
print_r($aa);
9026
print_r(array_merge($da,$aa));
9027
*/
9028
?>
1 ignored issue
show
Best Practice introduced by
It is not recommended to use PHP's closing tag ?> in files other than templates.

Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore.

A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever.

Loading history...