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

Spotter::getSpotterDataByRegistration()   C

Complexity

Conditions 7
Paths 13

Size

Total Lines 50
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 27
nc 13
nop 4
dl 0
loc 50
rs 6.7272
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
	* Get SQL query part for filter used
17
	* @param Array $filter the filter
18
	* @return Array the SQL part
19
	*/
20
	public function getFilter($filter = array(),$where = false,$and = false) {
21
		global $globalFilter;
22
		if (is_array($globalFilter)) $filter = array_merge($globalFilter,$filter);
23
		$filter_query_join = '';
24
		$filter_query_where = '';
25
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
26
			if ($filter['airlines'][0] != '') {
27
				$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
28
			}
29
		}
30
		
31
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
32
			$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_output.flightaware_id ";
33
		}
34
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
35
			$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
36
		}
37
		if (isset($filter['source']) && !empty($filter['source'])) {
38
			$filter_query_where = " WHERE format_source IN ('".implode("','",$filter['source'])."')";
39
		}
40
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
41
			if ($filter_query_where == '') {
42
				$filter_query_where = " WHERE format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
43
			} else {
44
				$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
45
			}
46
		}
47
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
48
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
49
		$filter_query = $filter_query_join.$filter_query_where;
50
		return $filter_query;
51
	}
52
53
	/**
54
	* Executes the SQL statements to get the spotter information
55
	*
56
	* @param String $query the SQL query
57
	* @param Array $params parameter of the query
58
	* @param String $limitQuery the limit query
59
	* @return Array the spotter information
60
	*
61
	*/
62
	public function getDataFromDB($query, $params = array(), $limitQuery = '')
63
	{
64
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS;
65
		$Image = new Image($this->db);
66
		$Schedule = new Schedule($this->db);
67
		$ACARS = new ACARS($this->db);
68
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
69
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
70
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
71
		date_default_timezone_set('UTC');
72
		
73
		if (!is_string($query))
74
		{
75
			return false;
76
		}
77
		
78
		if ($limitQuery != "")
79
		{
80
			if (!is_string($limitQuery))
81
			{
82
				return false;
83
			}
84
		}
85
86
		
87
		try {
88
			$sth = $this->db->prepare($query.$limitQuery);
89
			$sth->execute($params);
90
		} catch (PDOException $e) {
91
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
92
			exit();
93
		}
94
		
95
	//	$num_rows = count($sth->fetchAll());
96
		$num_rows = 0;
97
98
		$spotter_array = array();
99
		
100
101
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
102
		{
103
			$num_rows++;
104
			$temp_array = array();
105
			if (isset($row['spotter_live_id'])) {
106
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
107
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
108
			} elseif (isset($row['spotter_archive_id'])) {
109
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
110
			} elseif (isset($row['spotter_archive_output_id'])) {
111
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
112
			} elseif (isset($row['spotter_id'])) {
113
				$temp_array['spotter_id'] = $row['spotter_id'];
114
			} else {
115
				$temp_array['spotter_id'] = '';
116
			}
117
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
118
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
119
			$temp_array['ident'] = $row['ident'];
120
			if (isset($row['registration']) && $row['registration'] != '') {
121
				$temp_array['registration'] = $row['registration'];
122
			} elseif (isset($temp_array['modes'])) {
123
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
124
			} else $temp_array['registration'] = '';
125
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
126
			
127
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
128
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
129
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
130
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
131
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
132
			/*
133
			if (Connection->tableExists('countries')) {
134
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
135
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
136
				    $temp_array['country'] = $country_info['name'];
137
				    $temp_array['country_iso2'] = $country_info['iso2'];
138
				}
139
			}
140
			*/
141
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
142
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
143
			if (isset($row['route_stop'])) {
144
				$temp_array['route_stop'] = $row['route_stop'];
145
				if ($row['route_stop'] != '') {
146
					$allroute = explode(' ',$row['route_stop']);
147
			
148
					foreach ($allroute as $route) {
149
						$route_airport_array = $this->getAllAirportInfo($route);
150
						if (isset($route_airport_array[0]['name'])) {
151
							$route_stop_details = array();
152
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
153
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
154
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
155
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
156
							$temp_array['route_stop_details'][] = $route_stop_details;
157
						}
158
					}
159
				}
160
			}
161
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
162
			if (isset($row['heading'])) {
163
				$temp_array['heading'] = $row['heading'];
164
				$heading_direction = $this->parseDirection($row['heading']);
165
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
166
			}
167
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
168
			$temp_array['image'] = "";
169
			$temp_array['image_thumbnail'] = "";
170
			$temp_array['image_source'] = "";
171
			$temp_array['image_copyright'] = "";
172
 
173
			if (isset($row['highlight'])) {
174
				$temp_array['highlight'] = $row['highlight'];
175
			} else $temp_array['highlight'] = '';
176
			
177
			if (isset($row['date'])) {
178
				$dateArray = $this->parseDateString($row['date']);
179
				if ($dateArray['seconds'] < 10)
180
				{
181
					$temp_array['date'] = "a few seconds ago";
182
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
183
				{
184
					$temp_array['date'] = "half a minute ago";
185
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
186
				{
187
					$temp_array['date'] = "about a minute ago";
188
				} elseif ($dateArray['minutes'] < 5)
189
				{
190
					$temp_array['date'] = "a few minutes ago";
191
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
192
				{
193
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
194
				} elseif ($dateArray['hours'] < 2)
195
				{
196
					$temp_array['date'] = "about an hour ago";
197
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
198
				{
199
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
200
				} else {
201
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
202
				}
203
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
204
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
205
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
206
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
207
			}
208
			
209
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
210
				$temp_array['aircraft_name'] = $row['aircraft_name'];
211
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
212
				if (isset($row['aircraft_shadow'])) {
213
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
214
				}
215
			} elseif (isset($row['aircraft_icao'])) {
216
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
217
				if (count($aircraft_array) > 0) {
218
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
219
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
220
				
221
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
222
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
223
					} else $temp_array['aircraft_shadow'] = 'default.png';
224
                                } else {
225
                            		$temp_array['aircraft_shadow'] = 'default.png';
226
					$temp_array['aircraft_name'] = 'N/A';
227
					$temp_array['aircraft_manufacturer'] = 'N/A';
228
                            	}
229
			}
230
			$fromsource = NULL;
231
			if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
232
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
233
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
234
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
235
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
236
				if (!is_numeric(substr($row['ident'], 0, 3))) {
237
					if (is_numeric(substr($row['ident'], 2, 1))) {
238
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
239
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
240
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
241
					} else {
242
						$airline_array = $this->getAllAirlineInfo('NA');
243
					}
244
				} else {
245
					$airline_array = $this->getAllAirlineInfo('NA');
246
				}
247
				if (count($airline_array) > 0) {
248
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
249
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
250
					$temp_array['airline_name'] = $airline_array[0]['name'];
251
					$temp_array['airline_country'] = $airline_array[0]['country'];
252
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
253
					$temp_array['airline_type'] = $airline_array[0]['type'];
254
				}
255
			} else {
256
				$temp_array['airline_icao'] = $row['airline_icao'];
257
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
258
				else $temp_array['airline_iata'] = '';
259
				$temp_array['airline_name'] = $row['airline_name'];
260
				$temp_array['airline_country'] = $row['airline_country'];
261
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
262
				else $temp_array['airline_callsign'] = 'N/A';
263
				$temp_array['airline_type'] = $row['airline_type'];
264
			}
265
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
266
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
267
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
268
				if (count($acars_array) > 0) {
269
					$temp_array['acars'] = $acars_array;
270
					//print_r($acars_array);
271
				}
272
			}
273
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
274
				$temp_array['aircraft_owner'] = $row['owner_name'];
275
			}
276
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !isset($temp_array['aircraft_owner'])) {
277
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
278
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
279
				$temp_array['aircraft_base'] = $owner_info['base'];
280
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
281
			}
282
283
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
284
			{
285
				if ($globalIVAO) {
286
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
287
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
288
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
289
				if (count($image_array) > 0) {
290
					$temp_array['image'] = $image_array[0]['image'];
291
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
292
					$temp_array['image_source'] = $image_array[0]['image_source'];
293
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
294
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
295
						$planespotter_url_array = explode("_", $temp_array['image']);
296
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
297
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
298
					 }
299
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
300
				}
301
			}
302
303
304
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
305
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
306
			}
307
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
308
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
309
			}
310
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS)) {
311
				$schedule_array = $Schedule->getSchedule($temp_array['ident']);
312
				//print_r($schedule_array);
313
				if (count($schedule_array) > 0) {
314
					if ($schedule_array['departure_airport_icao'] != '') {
315
						$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
316
						 $temp_array['departure_airport'] = $row['departure_airport_icao'];
317
					}
318
					if ($schedule_array['arrival_airport_icao'] != '') {
319
						$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
320
						$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
321
					}
322
323
					$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
324
					$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
325
				}
326
			} else {
327
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
328
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
329
				}
330
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
331
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
332
				}
333
			}
334
			
335
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
336
			if ($row['departure_airport_icao'] != '') {
337
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
338
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
339
			/*
340
			} elseif ($row['departure_airport_name'] != '') {
341
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
342
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
343
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
344
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
345
			*/
346
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
347
			if (isset($departure_airport_array[0]['name'])) {
348
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
349
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
350
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
351
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
352
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
353
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
354
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
355
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
356
			}
357
358
			/*
359
			if (isset($row['departure_airport_time'])) {
360
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
361
			}
362
			*/
363
			
364
			if ($row['arrival_airport_icao'] != '') {
365
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
366
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
367
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
368
			if (isset($arrival_airport_array[0]['name'])) {
369
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
370
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
371
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
372
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
373
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
374
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
375
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
376
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
377
			}
378
			/*
379
			if (isset($row['arrival_airport_time'])) {
380
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
381
			}
382
			*/
383
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
384
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
385
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
386
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
387
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
388
			if (isset($row['squawk'])) {
389
				$temp_array['squawk'] = $row['squawk'];
390
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
391
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
392
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
393
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
394
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
395
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
396
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
397
			}
398
    			
399
			$temp_array['query_number_rows'] = $num_rows;
400
			
401
			$spotter_array[] = $temp_array;
402
		}
403
		if ($num_rows == 0) return array();
404
		$spotter_array[0]['query_number_rows'] = $num_rows;
405
		return $spotter_array;
406
	}	
407
	
408
	
409
	/**
410
	* Gets all the spotter information
411
	*
412
	* @return Array the spotter information
413
	*
414
	*/
415
	public function searchSpotterData($q = '', $registration = '', $aircraft_icao = '', $aircraft_manufacturer = '', $highlights = '', $airline_icao = '', $airline_country = '', $airline_type = '', $airport = '', $airport_country = '', $callsign = '', $departure_airport_route = '', $arrival_airport_route = '', $owner = '',$pilot_id = '',$pilot_name = '',$altitude = '', $date_posted = '', $limit = '', $sort = '', $includegeodata = '',$origLat = '',$origLon = '',$dist = '',$filter = array())
416
	{
417
		global $globalTimezone, $globalDBdriver;
418
		require_once(dirname(__FILE__).'/class.Translation.php');
419
		$Translation = new Translation();
420
421
		date_default_timezone_set('UTC');
422
423
		$query_values = array();
424
		$additional_query = '';
425
		$filter_query = $this->getFilter($filter,true,true);
426
		if ($q != "")
427
		{
428
			if (!is_string($q))
429
			{
430
				return false;
431
			} else {
432
				$q_array = explode(" ", $q);
433
				foreach ($q_array as $q_item){
434
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
435
					$additional_query .= " AND (";
436
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
437
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
438
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
439
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
440
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
441
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
442
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
443
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
444
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
445
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
446
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
447
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
448
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
449
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
450
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
451
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
452
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
453
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
454
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
455
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
456
					$translate = $Translation->ident2icao($q_item);
457
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
458
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
459
					$additional_query .= ")";
460
				}
461
			}
462
		}
463
464
		if ($registration != "")
465
		{
466
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
467
			if (!is_string($registration))
468
			{
469
				return false;
470
			} else {
471
				$additional_query .= " AND spotter_output.registration = :registration";
472
				$query_values = array_merge($query_values,array(':registration' => $registration));
473
			}
474
		}
475
476
		if ($aircraft_icao != "")
477
		{
478
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
479
			if (!is_string($aircraft_icao))
480
			{
481
				return false;
482
			} else {
483
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
484
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
485
			}
486
		}
487
488
		if ($aircraft_manufacturer != "")
489
		{
490
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
491
			if (!is_string($aircraft_manufacturer))
492
			{
493
				return false;
494
			} else {
495
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
496
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
497
			}
498
		}
499
500
		if ($highlights == "true")
501
		{
502
			if (!is_string($highlights))
503
			{
504
				return false;
505
			} else {
506
				$additional_query .= " AND (spotter_output.highlight <> '')";
507
			}
508
		}
509
510
		if ($airline_icao != "")
511
		{
512
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
513
			if (!is_string($airline_icao))
514
			{
515
				return false;
516
			} else {
517
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
518
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
519
			}
520
		}
521
522
		if ($airline_country != "")
523
		{
524
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
525
			if (!is_string($airline_country))
526
			{
527
				return false;
528
			} else {
529
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
530
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
531
			}
532
		}
533
534
		if ($airline_type != "")
535
		{
536
			if (!is_string($airline_type))
537
			{
538
				return false;
539
			} else {
540
				if ($airline_type == "passenger")
541
				{
542
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
543
				}
544
				if ($airline_type == "cargo")
545
				{
546
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
547
				}
548
				if ($airline_type == "military")
549
				{
550
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
551
				}
552
			}
553
		}
554
555
		if ($airport != "")
556
		{
557
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
558
			if (!is_string($airport))
559
			{
560
				return false;
561
			} else {
562
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
563
				$query_values = array_merge($query_values,array(':airport' => $airport));
564
			}
565
		}
566
567
		if ($airport_country != "")
568
		{
569
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
570
			if (!is_string($airport_country))
571
			{
572
				return false;
573
			} else {
574
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
575
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
576
			}
577
		}
578
    
579
		if ($callsign != "")
580
		{
581
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
582
			if (!is_string($callsign))
583
			{
584
				return false;
585
			} else {
586
				$translate = $Translation->ident2icao($callsign);
587
				if ($translate != $callsign) {
588
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
589
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
590
				} else {
591
					$additional_query .= " AND spotter_output.ident = :callsign";
592
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
593
				}
594
			}
595
		}
596
597
		if ($owner != "")
598
		{
599
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
600
			if (!is_string($owner))
601
			{
602
				return false;
603
			} else {
604
				$additional_query .= " AND spotter_output.owner_name = :owner";
605
				$query_values = array_merge($query_values,array(':owner' => $owner));
606
			}
607
		}
608
609
		if ($pilot_name != "")
610
		{
611
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
612
			if (!is_string($pilot_name))
613
			{
614
				return false;
615
			} else {
616
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
617
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
618
			}
619
		}
620
621
		if ($pilot_id != "")
622
		{
623
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
624
			if (!is_string($pilot_id))
625
			{
626
				return false;
627
			} else {
628
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
629
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
630
			}
631
		}
632
633
		if ($departure_airport_route != "")
634
		{
635
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
636
			if (!is_string($departure_airport_route))
637
			{
638
				return false;
639
			} else {
640
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
641
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
642
			}
643
		}
644
645
		if ($arrival_airport_route != "")
646
		{
647
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
648
			if (!is_string($arrival_airport_route))
649
			{
650
				return false;
651
			} else {
652
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
653
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
654
			}
655
		}
656
657
		if ($altitude != "")
658
		{
659
			$altitude_array = explode(",", $altitude);
660
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
661
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
662
663
			if ($altitude_array[1] != "")
664
			{                
665
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
666
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
667
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
668
			} else {
669
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
670
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
671
			}
672
		}
673
674
		if ($date_posted != "")
675
		{
676
			$date_array = explode(",", $date_posted);
677
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
678
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
679
680
			if ($globalTimezone != '') {
681
				date_default_timezone_set($globalTimezone);
682
				$datetime = new DateTime();
683
				$offset = $datetime->format('P');
684
			} else $offset = '+00:00';
685
686
			if ($date_array[1] != "")
687
			{
688
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
689
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
690
				if ($globalDBdriver == 'mysql') {
691
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) <= '".$date_array[1]."' ";
692
				} else {
693
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) <= '".$date_array[1]."' ";
694
				}
695
			} else {
696
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
697
				if ($globalDBdriver == 'mysql') {
698
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
699
				} else {
700
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
701
				}
702
			}
703
		}
704
705
		if ($limit != "")
706
		{
707
			$limit_array = explode(",", $limit);
708
			
709
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
710
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
711
			
712
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
713
			{
714
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
715
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
716
			} else $limit_query = "";
717
		} else $limit_query = "";
718
719
720
		if ($sort != "")
721
		{
722
			$search_orderby_array = $this->getOrderBy();
723
			$orderby_query = $search_orderby_array[$sort]['sql'];
724
		} else {
725
			if ($origLat != "" && $origLon != "" && $dist != "") {
726
				$orderby_query = " ORDER BY distance ASC";
727
			} else {
728
				$orderby_query = " ORDER BY spotter_output.date DESC";
729
			}
730
		}
731
732
		if ($includegeodata == "true")
733
		{
734
			$additional_query .= " AND spotter_output.waypoints <> ''";
735
		}
736
737
738
		if ($origLat != "" && $origLon != "" && $dist != "") {
739
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
740
741
			if ($globalDBdriver == 'mysql') {
742
				$query="SELECT spotter_output.*, 1.60935*3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - spotter_archive.latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(spotter_archive.latitude*pi()/180)*POWER(SIN(($origLon-spotter_archive.longitude)*pi()/180/2),2))) as distance 
743
						FROM spotter_output, spotter_archive".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND spotter_archive.longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and spotter_archive.latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
744
						AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - spotter_archive.latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(spotter_archive.latitude*pi()/180)*POWER(SIN(($origLon-spotter_archive.longitude)*pi()/180/2),2)))) < $dist".$orderby_query;
745
			} else {
746
				$query="SELECT spotter_output.*, 1.60935 * 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(spotter_archive.latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(spotter_archive.latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2))) as distance 
747
						FROM spotter_output, spotter_archive".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND CAST(spotter_archive.longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(spotter_archive.latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
748
						AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(spotter_archive.latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(spotter_archive.latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2)))) < $dist".$filter_query.$orderby_query;
749
			}
750
		} else {		
751
			$query  = "SELECT spotter_output.* FROM spotter_output ".$filter_query." spotter_output.ident <> '' 
752
					".$additional_query."
753
					".$orderby_query;
754
		}
755
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
756
		return $spotter_array;
757
	}
758
	
759
	
760
	/**
761
	* Gets all the spotter information based on the latest data entry
762
	*
763
	* @return Array the spotter information
764
	*
765
	*/
766
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
767
	{
768
		global $global_query;
769
		
770
		date_default_timezone_set('UTC');
771
772
		$filter_query = $this->getFilter($filter);
773
		
774
		if ($limit != "")
775
		{
776
			$limit_array = explode(",", $limit);
777
			
778
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
779
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
780
			
781
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
782
			{
783
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
784
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
785
			} else $limit_query = "";
786
		} else $limit_query = "";
787
		
788
		if ($sort != "")
789
		{
790
			$search_orderby_array = $this->getOrderBy();
791
			$orderby_query = $search_orderby_array[$sort]['sql'];
792
		} else {
793
			$orderby_query = " ORDER BY spotter_output.date DESC";
794
		}
795
796
		$query  = $global_query.$filter_query." ".$orderby_query;
797
798
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query);
799
800
		return $spotter_array;
801
	}
802
    
803
    
804
    /**
805
	* Gets all the spotter information based on a user's latitude and longitude
806
	*
807
	* @return Array the spotter information
808
	*
809
	*/
810
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
811
	{
812
		date_default_timezone_set('UTC');
813
		$limit_query = '';
814
		if ($lat != "")
815
		{
816
			if (!is_numeric($lat))
817
			{
818
				return false;
819
			}
820
		}
821
        
822
		if ($lng != "")
823
		{
824
			if (!is_numeric($lng))
825
			{
826
				return false;
827
			}
828
		}
829
		
830
		if ($radius != "")
831
		{
832
			if (!is_numeric($radius))
833
			{
834
				return false;
835
			}
836
		}
837
    		$additional_query = '';
838
		if ($interval != "")
839
		{
840
			if (!is_string($interval))
841
			{
842
				return false;
843
			} else {
844
				if ($interval == "30m"){
845
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
846
				} else if ($interval == "1h"){
847
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
848
				} else if ($interval == "3h"){
849
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
850
				} else if ($interval == "6h"){
851
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
852
				} else if ($interval == "12h"){
853
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
854
				} else if ($interval == "24h"){
855
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
856
				} else if ($interval == "7d"){
857
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
858
				} else if ($interval == "30d"){
859
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
860
				} 
861
			}
862
		}
863
864
		$query  = "SELECT spotter_output.*, ( 6371 * acos( cos( radians($lat) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( latitude ) ) ) ) AS distance FROM spotter_output 
865
                   WHERE spotter_output.latitude <> '' 
866
				   AND spotter_output.longitude <> '' 
867
                   ".$additional_query."
868
                   HAVING distance < :radius  
869
				   ORDER BY distance";
870
871
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
872
873
		return $spotter_array;
874
	}
875
    
876
    
877
    /**
878
	* Gets all the spotter information sorted by the newest aircraft type
879
	*
880
	* @return Array the spotter information
881
	*
882
	*/
883
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
884
	{
885
		global $global_query;
886
		
887
		date_default_timezone_set('UTC');
888
889
		$filter_query = $this->getFilter($filter,true,true);
890
891
		$limit_query = '';
892
		if ($limit != "")
893
		{
894
			$limit_array = explode(",", $limit);
895
			
896
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
897
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
898
			
899
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
900
			{
901
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
902
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
903
			}
904
		}
905
		
906
		if ($sort != "")
907
		{
908
			$search_orderby_array = $this->getOrderBy();
909
			$orderby_query = $search_orderby_array[$sort]['sql'];
910
		} else {
911
			$orderby_query = " ORDER BY spotter_output.date DESC ";
912
		}
913
914
		$query  = $global_query." ".$filter_query." spotter_output.aircraft_name <> '' GROUP BY spotter_output.aircraft_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
915
916
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
917
918
		return $spotter_array;
919
	}
920
    
921
    
922
	/**
923
	* Gets all the spotter information sorted by the newest aircraft registration
924
	*
925
	* @return Array the spotter information
926
	*
927
	*/
928
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
929
	{
930
		global $global_query;
931
		
932
		date_default_timezone_set('UTC');
933
		$filter_query = $this->getFilter($filter,true,true);
934
935
		$limit_query = '';
936
		if ($limit != "")
937
		{
938
			$limit_array = explode(",", $limit);
939
			
940
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
941
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
942
			
943
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
944
			{
945
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
946
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
947
			}
948
		}
949
		
950
		if ($sort != "")
951
		{
952
			$search_orderby_array = $this->getOrderBy();
953
			$orderby_query = $search_orderby_array[$sort]['sql'];
954
		} else {
955
			$orderby_query = " ORDER BY spotter_output.date DESC ";
956
		}
957
958
		$query  = $global_query." ".$filter_query." spotter_output.registration <> '' GROUP BY spotter_output.registration,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
959
960
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
961
962
		return $spotter_array;
963
	}
964
965
966
	/**
967
	* Gets all the spotter information sorted by the newest airline
968
	*
969
	* @return Array the spotter information
970
	*
971
	*/
972
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
973
	{
974
		global $global_query;
975
		
976
		date_default_timezone_set('UTC');
977
		$filter_query = $this->getFilter($filter,true,true);
978
		
979
		$limit_query = '';
980
		if ($limit != "")
981
		{
982
			$limit_array = explode(",", $limit);
983
			
984
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
985
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
986
			
987
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
988
			{
989
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
990
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
991
			}
992
		}
993
		
994
		if ($sort != "")
995
		{
996
			$search_orderby_array = $this->getOrderBy();
997
			$orderby_query = $search_orderby_array[$sort]['sql'];
998
		} else {
999
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1000
		}
1001
1002
		$query  = $global_query." ".$filter_query." spotter_output.airline_name <> '' GROUP BY spotter_output.airline_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1003
1004
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1005
1006
		return $spotter_array;
1007
	}
1008
    
1009
    
1010
    /**
1011
	* Gets all the spotter information sorted by the newest departure airport
1012
	*
1013
	* @return Array the spotter information
1014
	*
1015
	*/
1016
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1017
	{
1018
		global $global_query;
1019
		
1020
		date_default_timezone_set('UTC');
1021
		
1022
		$filter_query = $this->getFilter($filter,true,true);
1023
		
1024
		$limit_query = '';
1025
		
1026
		if ($limit != "")
1027
		{
1028
			$limit_array = explode(",", $limit);
1029
			
1030
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1031
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1032
			
1033
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1034
			{
1035
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1036
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1037
			}
1038
		}
1039
		
1040
		if ($sort != "")
1041
		{
1042
			$search_orderby_array = $this->getOrderBy();
1043
			$orderby_query = $search_orderby_array[$sort]['sql'];
1044
		} else {
1045
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1046
		}
1047
1048
		$query  = $global_query." ".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' GROUP BY spotter_output.departure_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1049
1050
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1051
1052
		return $spotter_array;
1053
	}
1054
1055
1056
	/**
1057
	* Gets all the spotter information sorted by the newest arrival airport
1058
	*
1059
	* @return Array the spotter information
1060
	*
1061
	*/
1062
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1063
	{
1064
		global $global_query;
1065
		
1066
		date_default_timezone_set('UTC');
1067
		$filter_query = $this->getFilter($filter,true,true);
1068
		$limit_query = '';
1069
		if ($limit != "")
1070
		{
1071
			$limit_array = explode(",", $limit);
1072
			
1073
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1074
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1075
			
1076
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1077
			{
1078
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1079
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1080
			}
1081
		}
1082
		
1083
		if ($sort != "")
1084
		{
1085
			$search_orderby_array = $this->getOrderBy();
1086
			$orderby_query = $search_orderby_array[$sort]['sql'];
1087
		} else {
1088
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1089
		}
1090
1091
		$query  = $global_query.$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' GROUP BY spotter_output.arrival_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1092
1093
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1094
1095
		return $spotter_array;
1096
	}
1097
	
1098
1099
	/**
1100
	* Gets all the spotter information based on the spotter id
1101
	*
1102
	* @return Array the spotter information
1103
	*
1104
	*/
1105
	public function getSpotterDataByID($id = '')
1106
	{
1107
		global $global_query;
1108
		
1109
		date_default_timezone_set('UTC');
1110
		if ($id == '') return array();
1111
		$additional_query = "spotter_output.spotter_id = :id";
1112
		$query_values = array(':id' => $id);
1113
1114
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1115
		$query  = $global_query." WHERE ".$additional_query." ";
1116
1117
		$spotter_array = $this->getDataFromDB($query,$query_values);
1118
1119
		return $spotter_array;
1120
	}
1121
1122
	
1123
	
1124
	
1125
	/**
1126
	* Gets all the spotter information based on the callsign
1127
	*
1128
	* @return Array the spotter information
1129
	*
1130
	*/
1131
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1132
	{
1133
		global $global_query;
1134
		
1135
		date_default_timezone_set('UTC');
1136
		
1137
		$query_values = array();
1138
		$limit_query = '';
1139
		$additional_query = '';
1140
		if ($ident != "")
1141
		{
1142
			if (!is_string($ident))
1143
			{
1144
				return false;
1145
			} else {
1146
				$additional_query = " AND (spotter_output.ident = :ident)";
1147
				$query_values = array(':ident' => $ident);
1148
			}
1149
		}
1150
		
1151
		if ($limit != "")
1152
		{
1153
			$limit_array = explode(",", $limit);
1154
			
1155
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1156
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1157
			
1158
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1159
			{
1160
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1161
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1162
			}
1163
		}
1164
1165
		if ($sort != "")
1166
		{
1167
			$search_orderby_array = $this->getOrderBy();
1168
			$orderby_query = $search_orderby_array[$sort]['sql'];
1169
		} else {
1170
			$orderby_query = " ORDER BY spotter_output.date DESC";
1171
		}
1172
1173
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1174
1175
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1176
1177
		return $spotter_array;
1178
	}
1179
	
1180
	
1181
	
1182
	/**
1183
	* Gets all the spotter information based on the aircraft type
1184
	*
1185
	* @return Array the spotter information
1186
	*
1187
	*/
1188
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1189
	{
1190
		global $global_query;
1191
		
1192
		date_default_timezone_set('UTC');
1193
		
1194
		$query_values = array();
1195
		$limit_query = '';
1196
		$additional_query = '';
1197
		$filter_query = $this->getFilter($filter,true,true);
1198
		
1199
		if ($aircraft_type != "")
1200
		{
1201
			if (!is_string($aircraft_type))
1202
			{
1203
				return false;
1204
			} else {
1205
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1206
				$query_values = array(':aircraft_type' => $aircraft_type);
1207
			}
1208
		}
1209
		
1210
		if ($limit != "")
1211
		{
1212
			$limit_array = explode(",", $limit);
1213
			
1214
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1215
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1216
			
1217
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1218
			{
1219
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1220
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1221
			}
1222
		}
1223
1224
		if ($sort != "")
1225
		{
1226
			$search_orderby_array = $this->getOrderBy();
1227
			$orderby_query = $search_orderby_array[$sort]['sql'];
1228
		} else {
1229
			$orderby_query = " ORDER BY spotter_output.date DESC";
1230
		}
1231
1232
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$filter_query.$orderby_query;
1233
1234
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1235
1236
		return $spotter_array;
1237
	}
1238
	
1239
	
1240
	/**
1241
	* Gets all the spotter information based on the aircraft registration
1242
	*
1243
	* @return Array the spotter information
1244
	*
1245
	*/
1246
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1247
	{
1248
		global $global_query;
1249
		
1250
		date_default_timezone_set('UTC');
1251
		
1252
		$query_values = array();
1253
		$limit_query = '';
1254
		$additional_query = '';
1255
		$filter_query = $this->getFilter($filter,true,true);
1256
		
1257
		if ($registration != "")
1258
		{
1259
			if (!is_string($registration))
1260
			{
1261
				return false;
1262
			} else {
1263
				$additional_query = " AND (spotter_output.registration = :registration)";
1264
				$query_values = array(':registration' => $registration);
1265
			}
1266
		}
1267
		
1268
		if ($limit != "")
1269
		{
1270
			$limit_array = explode(",", $limit);
1271
			
1272
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1273
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1274
			
1275
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1276
			{
1277
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1278
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1279
			}
1280
		}
1281
1282
		if ($sort != "")
1283
		{
1284
			$search_orderby_array = $this->getOrderBy();
1285
			$orderby_query = $search_orderby_array[$sort]['sql'];
1286
		} else {
1287
			$orderby_query = " ORDER BY spotter_output.date DESC";
1288
		}
1289
1290
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1291
1292
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1293
1294
		return $spotter_array;
1295
	}
1296
1297
	
1298
	
1299
	
1300
	/**
1301
	* Gets all the spotter information based on the airline
1302
	*
1303
	* @return Array the spotter information
1304
	*
1305
	*/
1306
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '')
1307
	{
1308
		global $global_query;
1309
		
1310
		date_default_timezone_set('UTC');
1311
1312
		$query_values = array();
1313
		$limit_query = '';
1314
		$additional_query = '';
1315
		
1316
		if ($airline != "")
1317
		{
1318
			if (!is_string($airline))
1319
			{
1320
				return false;
1321
			} else {
1322
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1323
				$query_values = array(':airline' => $airline);
1324
			}
1325
		}
1326
		
1327
		if ($limit != "")
1328
		{
1329
			$limit_array = explode(",", $limit);
1330
			
1331
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1332
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1333
			
1334
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1335
			{
1336
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1337
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1338
			}
1339
		}
1340
		
1341
		if ($sort != "")
1342
		{
1343
			$search_orderby_array = $this->getOrderBy();
1344
			$orderby_query = $search_orderby_array[$sort]['sql'];
1345
		} else {
1346
			$orderby_query = " ORDER BY spotter_output.date DESC";
1347
		}
1348
1349
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1350
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1351
1352
		return $spotter_array;
1353
	}
1354
	
1355
	
1356
	/**
1357
	* Gets all the spotter information based on the airport
1358
	*
1359
	* @return Array the spotter information
1360
	*
1361
	*/
1362
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '')
1363
	{
1364
		global $global_query;
1365
		
1366
		date_default_timezone_set('UTC');
1367
		$query_values = array();
1368
		$limit_query = '';
1369
		$additional_query = '';
1370
		
1371
		if ($airport != "")
1372
		{
1373
			if (!is_string($airport))
1374
			{
1375
				return false;
1376
			} else {
1377
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1378
				$query_values = array(':airport' => $airport);
1379
			}
1380
		}
1381
		
1382
		if ($limit != "")
1383
		{
1384
			$limit_array = explode(",", $limit);
1385
			
1386
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1387
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1388
			
1389
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1390
			{
1391
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1392
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1393
			}
1394
		}
1395
		
1396
		if ($sort != "")
1397
		{
1398
			$search_orderby_array = $this->getOrderBy();
1399
			$orderby_query = $search_orderby_array[$sort]['sql'];
1400
		} else {
1401
			$orderby_query = " ORDER BY spotter_output.date DESC";
1402
		}
1403
1404
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." AND ((spotter_output.departure_airport_icao <> 'NA') AND (spotter_output.arrival_airport_icao <> 'NA')) ".$orderby_query;
1405
1406
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1407
1408
		return $spotter_array;
1409
	}
1410
1411
1412
1413
	/**
1414
	* Gets all the spotter information based on the date
1415
	*
1416
	* @return Array the spotter information
1417
	*
1418
	*/
1419
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1420
	{
1421
		global $global_query, $globalTimezone, $globalDBdriver;
1422
		
1423
		$query_values = array();
1424
		$limit_query = '';
1425
		$additional_query = '';
1426
1427
		$filter_query = '';
1428
		if (isset($filter['source']) && !empty($filter['source'])) {
1429
			$filter_query = " AND format_source IN ('".implode("','",$filter['source'])."')";
1430
		}
1431
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
1432
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_live.flightaware_id";
1433
		}
1434
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
1435
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_live.flightaware_id ";
1436
		}
1437
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
1438
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
1439
		}
1440
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
1441
			$filter_query .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) so ON so.flightaware_id = spotter_live.flightaware_id";
1442
		}
1443
	
1444
		
1445
		if ($date != "")
1446
		{
1447
			if ($globalTimezone != '') {
1448
				date_default_timezone_set($globalTimezone);
1449
				$datetime = new DateTime($date);
1450
				$offset = $datetime->format('P');
1451
			} else {
1452
				date_default_timezone_set('UTC');
1453
				$datetime = new DateTime($date);
1454
				$offset = '+00:00';
1455
			}
1456
			if ($globalDBdriver == 'mysql') {
1457
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1458
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1459
			} elseif ($globalDBdriver == 'pgsql') {
1460
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1461
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1462
			}
1463
		}
1464
		
1465
		if ($limit != "")
1466
		{
1467
			$limit_array = explode(",", $limit);
1468
			
1469
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1470
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1471
			
1472
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1473
			{
1474
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1475
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1476
			}
1477
		}
1478
1479
		if ($sort != "")
1480
		{
1481
			$search_orderby_array = $this->getOrderBy();
1482
			$orderby_query = $search_orderby_array[$sort]['sql'];
1483
		} else {
1484
			$orderby_query = " ORDER BY spotter_output.date DESC";
1485
		}
1486
1487
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query.$filter_query." ".$orderby_query;
1488
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1489
		return $spotter_array;
1490
	}
1491
1492
1493
1494
	/**
1495
	* Gets all the spotter information based on the country name
1496
	*
1497
	* @return Array the spotter information
1498
	*
1499
	*/
1500
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '')
1501
	{
1502
		global $global_query;
1503
		
1504
		date_default_timezone_set('UTC');
1505
		
1506
		$query_values = array();
1507
		$limit_query = '';
1508
		$additional_query = '';
1509
		if ($country != "")
1510
		{
1511
			if (!is_string($country))
1512
			{
1513
				return false;
1514
			} else {
1515
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1516
				$additional_query .= " OR spotter_output.airline_country = :country";
1517
				$query_values = array(':country' => $country);
1518
			}
1519
		}
1520
		
1521
		if ($limit != "")
1522
		{
1523
			$limit_array = explode(",", $limit);
1524
			
1525
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1526
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1527
			
1528
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1529
			{
1530
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1531
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1532
			}
1533
		}
1534
					
1535
		if ($sort != "")
1536
		{
1537
			$search_orderby_array = $this->getOrderBy();
1538
			$orderby_query = $search_orderby_array[$sort]['sql'];
1539
		} else {
1540
			$orderby_query = " ORDER BY spotter_output.date DESC";
1541
		}
1542
1543
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1544
1545
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1546
1547
		return $spotter_array;
1548
	}	
1549
	
1550
	
1551
	/**
1552
	* Gets all the spotter information based on the manufacturer name
1553
	*
1554
	* @return Array the spotter information
1555
	*
1556
	*/
1557
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '')
1558
	{
1559
		global $global_query;
1560
		
1561
		date_default_timezone_set('UTC');
1562
		
1563
		$query_values = array();
1564
		$additional_query = '';
1565
		$limit_query = '';
1566
		
1567
		if ($aircraft_manufacturer != "")
1568
		{
1569
			if (!is_string($aircraft_manufacturer))
1570
			{
1571
				return false;
1572
			} else {
1573
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1574
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1575
			}
1576
		}
1577
		
1578
		if ($limit != "")
1579
		{
1580
			$limit_array = explode(",", $limit);
1581
			
1582
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1583
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1584
			
1585
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1586
			{
1587
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1588
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1589
			}
1590
		}
1591
1592
		if ($sort != "")
1593
		{
1594
			$search_orderby_array = $this->getOrderBy();
1595
			$orderby_query = $search_orderby_array[$sort]['sql'];
1596
		} else {
1597
			$orderby_query = " ORDER BY spotter_output.date DESC";
1598
		}
1599
1600
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1601
1602
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1603
1604
		return $spotter_array;
1605
	}
1606
1607
1608
  
1609
  
1610
	/**
1611
	* Gets a list of all aircraft that take a route
1612
	*
1613
	* @param String $departure_airport_icao ICAO code of departure airport
1614
	* @param String $arrival_airport_icao ICAO code of arrival airport
1615
	* @return Array the spotter information
1616
	*
1617
	*/
1618
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '')
1619
	{
1620
		global $global_query;
1621
		
1622
		$query_values = array();
1623
		$additional_query = '';
1624
		$limit_query = '';
1625
		if ($departure_airport_icao != "")
1626
		{
1627
			if (!is_string($departure_airport_icao))
1628
			{
1629
				return false;
1630
			} else {
1631
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1632
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1633
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1634
			}
1635
		}
1636
		
1637
		if ($arrival_airport_icao != "")
1638
		{
1639
			if (!is_string($arrival_airport_icao))
1640
			{
1641
				return false;
1642
			} else {
1643
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1644
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1645
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1646
			}
1647
		}
1648
		
1649
		if ($limit != "")
1650
		{
1651
			$limit_array = explode(",", $limit);
1652
			
1653
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1654
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1655
			
1656
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1657
			{
1658
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1659
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1660
			}
1661
		}
1662
	
1663
		if ($sort != "")
1664
		{
1665
			$search_orderby_array = $this->getOrderBy();
1666
			$orderby_query = $search_orderby_array[$sort]['sql'];
1667
		} else {
1668
			$orderby_query = " ORDER BY spotter_output.date DESC";
1669
		}
1670
1671
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1672
          
1673
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1674
1675
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1676
1677
		return $spotter_array;
1678
	}
1679
	
1680
	
1681
	
1682
	/**
1683
	* Gets all the spotter information based on the special column in the table
1684
	*
1685
	* @return Array the spotter information
1686
	*
1687
	*/
1688
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1689
	{
1690
		global $global_query;
1691
		
1692
		date_default_timezone_set('UTC');
1693
		$filter_query = $this->getFilter($filter,true,true);
1694
		$limit_query = '';
1695
		
1696
		if ($limit != "")
1697
		{
1698
			$limit_array = explode(",", $limit);
1699
			
1700
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1701
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1702
			
1703
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1704
			{
1705
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1706
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1707
			}
1708
		}
1709
		
1710
		if ($sort != "")
1711
		{
1712
			$search_orderby_array = $this->getOrderBy();
1713
			$orderby_query = $search_orderby_array[$sort]['sql'];
1714
		} else {
1715
			$orderby_query = " ORDER BY spotter_output.date DESC";
1716
		}
1717
1718
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1719
1720
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1721
1722
		return $spotter_array;
1723
	}
1724
1725
	/**
1726
	* Gets all the highlight based on a aircraft registration
1727
	*
1728
	* @return String the highlight text
1729
	*
1730
	*/
1731
	public function getHighlightByRegistration($registration,$filter = array())
1732
	{
1733
		global $global_query;
1734
		
1735
		date_default_timezone_set('UTC');
1736
		$filter_query = $this->getFilter($filter,true,true);
1737
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1738
		
1739
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1740
		$sth = $this->db->prepare($query);
1741
		$sth->execute(array(':registration' => $registration));
1742
1743
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1744
		{
1745
			$highlight = $row['highlight'];
1746
		}
1747
		if (isset($highlight)) return $highlight;
1748
	}
1749
1750
	
1751
	/**
1752
	* Gets the squawk usage from squawk code
1753
	*
1754
	* @param String $squawk squawk code
1755
	* @param String $country country
1756
	* @return String usage
1757
	*
1758
	*/
1759
	public function getSquawkUsage($squawk = '',$country = 'FR')
1760
	{
1761
		
1762
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1763
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1764
1765
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1766
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1767
		
1768
		$sth = $this->db->prepare($query);
1769
		$sth->execute($query_values);
1770
    
1771
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1772
		if (count($row) > 0) {
1773
			return $row['usage'];
1774
		} else return '';
1775
	}
1776
1777
	/**
1778
	* Gets the airport icao from the iata
1779
	*
1780
	* @param String $airport_iata the iata code of the airport
1781
	* @return String airport iata
1782
	*
1783
	*/
1784
	public function getAirportIcao($airport_iata = '')
1785
	{
1786
		
1787
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1788
1789
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1790
		$query_values = array(':airport' => $airport_iata);
1791
		
1792
		$sth = $this->db->prepare($query);
1793
		$sth->execute($query_values);
1794
		
1795
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1796
		if (count($row) > 0) {
1797
			return $row['icao'];
1798
		} else return '';
1799
	}
1800
1801
	/**
1802
	* Gets the airport distance
1803
	*
1804
	* @param String $airport_icao the icao code of the airport
1805
	* @param Float $latitude the latitude
1806
	* @param Float $longitude the longitude
1807
	* @return Float distance to the airport
1808
	*
1809
	*/
1810
	public function getAirportDistance($airport_icao,$latitude,$longitude)
1811
	{
1812
		
1813
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
1814
1815
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
1816
		$query_values = array(':airport' => $airport_icao);
1817
		$sth = $this->db->prepare($query);
1818
		$sth->execute($query_values);
1819
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1820
		if (count($row) > 0) {
1821
			$airport_latitude = $row['latitude'];
1822
			$airport_longitude = $row['longitude'];
1823
			$Common = new Common();
1824
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
1825
		} else return '';
1826
	}
1827
	
1828
	/**
1829
	* Gets the airport info based on the icao
1830
	*
1831
	* @param String $airport the icao code of the airport
1832
	* @return Array airport information
1833
	*
1834
	*/
1835
	public function getAllAirportInfo($airport = '')
1836
	{
1837
		
1838
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
1839
1840
		$query_values = array();
1841
		if ($airport == 'NA') {
1842
			return array(array('name' => 'Not available','city' => 'N/A', 'country' => 'N/A','iata' => 'NA','icao' => 'NA','altitude' => NULL,'latitude' => 0,'longitude' => 0,'type' => 'NA','home_link' => '','wikipedia_link' => '','image_thumb' => '', 'image' => ''));
1843
		} elseif ($airport == '') {
1844
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport";
1845
		} else {
1846
			$query  = "SELECT airport.name, airport.city, airport.country, airport.iata, airport.icao, airport.latitude, airport.longitude, airport.altitude, airport.type, airport.home_link, airport.wikipedia_link, airport.image_thumb, airport.image FROM airport WHERE airport.icao = :airport LIMIT 1";
1847
			$query_values = array(':airport' => $airport);
1848
		}
1849
		
1850
		$sth = $this->db->prepare($query);
1851
		$sth->execute($query_values);
1852
		/*
1853
		$airport_array = array();
1854
		$temp_array = array();
1855
		
1856
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1857
		{
1858
			$temp_array['name'] = $row['name'];
1859
			$temp_array['city'] = $row['city'];
1860
			$temp_array['country'] = $row['country'];
1861
			$temp_array['iata'] = $row['iata'];
1862
			$temp_array['icao'] = $row['icao'];
1863
			$temp_array['latitude'] = $row['latitude'];
1864
			$temp_array['longitude'] = $row['longitude'];
1865
			$temp_array['altitude'] = $row['altitude'];
1866
			$temp_array['home_link'] = $row['home_link'];
1867
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
1868
			$temp_array['image'] = $row['image'];
1869
			$temp_array['image_thumb'] = $row['image_thumb'];
1870
1871
			$airport_array[] = $temp_array;
1872
		}
1873
1874
		return $airport_array;
1875
		*/
1876
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1877
	}
1878
	
1879
	/**
1880
	* Gets the airport info based on the country
1881
	*
1882
	* @param Array $countries Airports countries
1883
	* @return Array airport information
1884
	*
1885
	*/
1886
	public function getAllAirportInfobyCountry($countries)
1887
	{
1888
		$lst_countries = '';
1889
		foreach ($countries as $country) {
1890
			$country = filter_var($country,FILTER_SANITIZE_STRING);
1891
			if ($lst_countries == '') {
1892
				$lst_countries = "'".$country."'";
1893
			} else {
1894
				$lst_countries .= ",'".$country."'";
1895
			}
1896
		}
1897
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
1898
		
1899
		$sth = $this->db->prepare($query);
1900
		$sth->execute();
1901
    
1902
		$airport_array = array();
1903
		$temp_array = array();
1904
		
1905
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1906
		{
1907
			$temp_array['name'] = $row['name'];
1908
			$temp_array['city'] = $row['city'];
1909
			$temp_array['country'] = $row['country'];
1910
			$temp_array['iata'] = $row['iata'];
1911
			$temp_array['icao'] = $row['icao'];
1912
			$temp_array['latitude'] = $row['latitude'];
1913
			$temp_array['longitude'] = $row['longitude'];
1914
			$temp_array['altitude'] = $row['altitude'];
1915
1916
			$airport_array[] = $temp_array;
1917
		}
1918
1919
		return $airport_array;
1920
	}
1921
	
1922
	/**
1923
	* Gets airports info based on the coord
1924
	*
1925
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
1926
	* @return Array airport information
1927
	*
1928
	*/
1929
	public function getAllAirportInfobyCoord($coord)
1930
	{
1931
		global $globalDBdriver;
1932
		if (is_array($coord)) {
1933
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1934
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1935
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1936
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1937
		} else return array();
1938
		if ($globalDBdriver == 'mysql') {
1939
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1940
		} else {
1941
			$query  = "SELECT airport.* FROM airport WHERE CAST(airport.latitude AS FLOAT) BETWEEN ".$minlat." AND ".$maxlat." AND CAST(airport.longitude AS FLOAT) BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1942
		}
1943
		$sth = $this->db->prepare($query);
1944
		$sth->execute();
1945
    
1946
		$airport_array = array();
1947
		
1948
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1949
		{
1950
			$temp_array = $row;
1951
1952
			$airport_array[] = $temp_array;
1953
		}
1954
1955
		return $airport_array;
1956
	}
1957
1958
	/**
1959
	* Gets waypoints info based on the coord
1960
	*
1961
	* @param Array $coord waypoints coord
1962
	* @return Array airport information
1963
	*
1964
	*/
1965
	public function getAllWaypointsInfobyCoord($coord)
1966
	{
1967
		if (is_array($coord)) {
1968
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1969
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1970
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1971
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1972
		} else return array();
1973
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
1974
		$query  = "SELECT waypoints.* FROM waypoints WHERE (waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong.") OR (waypoints.latitude_end BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_end BETWEEN ".$minlong." AND ".$maxlong.")";
1975
		//$query  = "SELECT waypoints.* FROM waypoints";
1976
		//$query  = "SELECT waypoints.* FROM waypoints INNER JOIN (SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong.") w ON w.name_end = waypoints.name_begin OR w.name_begin = waypoints.name_begin OR w.name_begin = waypoints.name_end OR w.name_end = waypoints.name_end";
1977
		//$query = "SELECT * FROM waypoints LEFT JOIN waypoints w ON waypoints.name_end = w.name_begin WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
1978
		//$query = "SELECT z.name_begin as name_begin, z.name_end as name_end, z.latitude_begin as latitude_begin, z.longitude_begin as longitude_begin, z.latitude_end as latitude_end, z.longitude_end as longitude_end, z.segment_name as segment_name, w.name_end as name_end_seg2, w.latitude_end as latitude_end_seg2, w.longitude_end as longitude_end_seg2, w.segment_name as segment_name_seg2 FROM waypoints z INNER JOIN waypoints w ON z.name_end = w.name_begin WHERE z.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND z.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
1979
		//echo $query;
1980
		
1981
		$sth = $this->db->prepare($query);
1982
		$sth->execute();
1983
    
1984
		$waypoints_array = array();
1985
		
1986
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1987
		{
1988
			$temp_array = $row;
1989
1990
			$waypoints_array[] = $temp_array;
1991
		}
1992
1993
		return $waypoints_array;
1994
	}
1995
	
1996
	
1997
	/**
1998
	* Gets the airline info based on the icao code or iata code
1999
	*
2000
	* @param String $airline_icao the iata code of the airport
2001
	* @return Array airport information
2002
	*
2003
	*/
2004
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2005
	{
2006
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2007
		if ($airline_icao == 'NA') {
2008
			$airline_array = array();
2009
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2010
			return $airline_array;
2011
		} else {
2012
			if (strlen($airline_icao) == 2) {
2013
				if ($fromsource === NULL) {
2014
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2015
				} else {
2016
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.iata = :airline_icao AND airlines.active = 'Y' AND airlines.forsource = :fromsource LIMIT 1";
2017
				}
2018
			} else {
2019
				if ($fromsource === NULL) {
2020
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2021
				} else {
2022
					$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE airlines.icao = :airline_icao AND airlines.active = 'Y' AND airlines.forsource = :fromsource LIMIT 1";
2023
				}
2024
			}
2025
			
2026
			$sth = $this->db->prepare($query);
2027
			if ($fromsource === NULL) {
2028
				$sth->execute(array(':airline_icao' => $airline_icao));
2029
			} else {
2030
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2031
			}
2032
                        /*
2033
			$airline_array = array();
2034
			$temp_array = array();
2035
		
2036
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2037
			{
2038
				$temp_array['name'] = $row['name'];
2039
				$temp_array['iata'] = $row['iata'];
2040
				$temp_array['icao'] = $row['icao'];
2041
				$temp_array['callsign'] = $row['callsign'];
2042
				$temp_array['country'] = $row['country'];
2043
				$temp_array['type'] = $row['type'];
2044
				$airline_array[] = $temp_array;
2045
			}
2046
			return $airline_array;
2047
			*/
2048
			return $sth->fetchAll(PDO::FETCH_ASSOC);
2049
		}
2050
	}
2051
	
2052
	
2053
	
2054
	/**
2055
	* Gets the aircraft info based on the aircraft type
2056
	*
2057
	* @param String $aircraft_type the aircraft type
2058
	* @return Array aircraft information
2059
	*
2060
	*/
2061
	public function getAllAircraftInfo($aircraft_type)
2062
	{
2063
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2064
2065
		if ($aircraft_type == 'NA') {
2066
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2067
		}
2068
		$query  = "SELECT aircraft.icao, aircraft.type,aircraft.manufacturer,aircraft.aircraft_shadow FROM aircraft WHERE aircraft.icao = :aircraft_type";
2069
		
2070
		$sth = $this->db->prepare($query);
2071
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2072
		/*
2073
		$aircraft_array = array();
2074
		$temp_array = array();
2075
		
2076
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2077
		{
2078
			$temp_array = array();
2079
			$temp_array['icao'] = $row['icao'];
2080
			$temp_array['type'] = $row['type'];
2081
			$temp_array['manufacturer'] = $row['manufacturer'];
2082
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2083
2084
			$aircraft_array[] = $temp_array;
2085
		}
2086
		return $aircraft_array;
2087
		*/
2088
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2089
	}
2090
2091
	/**
2092
	* Gets the aircraft icao based on the aircraft name/type
2093
	*
2094
	* @param String $aircraft_type the aircraft type
2095
	* @return String aircraft information
2096
	*
2097
	*/
2098
	public function getAircraftIcao($aircraft_type)
2099
	{
2100
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2101
		$all_aircraft = array('737-300' => 'B733',
2102
				'777-200' => 'B772',
2103
				'777-200ER' => 'B772',
2104
				'777-300ER' => 'B77W',
2105
				'c172p' => 'C172',
2106
				'aerostar' => 'AEST',
2107
				'A320-211' => 'A320',
2108
				'747-8i' => 'B748',
2109
				'A380' => 'A388');
2110
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2111
2112
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2113
		$aircraft_type = strtoupper($aircraft_type);
2114
		$sth = $this->db->prepare($query);
2115
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2116
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2117
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2118
		else return '';
2119
	}
2120
	
2121
	/**
2122
	* Gets the aircraft info based on the aircraft ident
2123
	*
2124
	* @param String $aircraft_modes the aircraft ident (hex)
2125
	* @return String aircraft type
2126
	*
2127
	*/
2128
	public function getAllAircraftType($aircraft_modes)
2129
	{
2130
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2131
2132
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
2133
		
2134
		$sth = $this->db->prepare($query);
2135
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2136
2137
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2138
		if (isset($row['icaotypecode'])) {
2139
			return $row['icaotypecode'];
2140
		} else return '';
2141
	}
2142
2143
	/**
2144
	* Gets correct aircraft operator corde
2145
	*
2146
	* @param String $operator the aircraft operator code (callsign)
2147
	* @return String aircraft operator code
2148
	*
2149
	*/
2150
	public function getOperator($operator)
2151
	{
2152
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2153
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2154
		
2155
		$sth = $this->db->prepare($query);
2156
		$sth->execute(array(':operator' => $operator));
2157
2158
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2159
		if (isset($row['operator_correct'])) {
2160
			return $row['operator_correct'];
2161
		} else return $operator;
2162
	}
2163
2164
	/**
2165
	* Gets the aircraft route based on the aircraft callsign
2166
	*
2167
	* @param String $callsign the aircraft callsign
2168
	* @return Array aircraft type
2169
	*
2170
	*/
2171
	public function getRouteInfo($callsign)
2172
	{
2173
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2174
                if ($callsign == '') return array();
2175
		$query  = "SELECT routes.Operator_ICAO, routes.FromAirport_ICAO, routes.ToAirport_ICAO, routes.RouteStop, routes.FromAirport_Time, routes.ToAirport_Time FROM routes WHERE CallSign = :callsign LIMIT 1";
2176
		
2177
		$sth = $this->db->prepare($query);
2178
		$sth->execute(array(':callsign' => $callsign));
2179
2180
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2181
		if (count($row) > 0) {
2182
			return $row;
2183
		} else return array();
2184
	}
2185
	
2186
	/**
2187
	* Gets the aircraft info based on the aircraft registration
2188
	*
2189
	* @param String $registration the aircraft registration
2190
	* @return Array aircraft information
2191
	*
2192
	*/
2193
	public function getAircraftInfoByRegistration($registration)
2194
	{
2195
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2196
2197
		$query  = "SELECT spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer, spotter_output.airline_icao FROM spotter_output WHERE spotter_output.registration = :registration";
2198
		
2199
		$sth = $this->db->prepare($query);
2200
		$sth->execute(array(':registration' => $registration));
2201
2202
		$aircraft_array = array();
2203
		$temp_array = array();
2204
		
2205
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2206
		{
2207
			$temp_array['airline_icao'] = $row['airline_icao'];
2208
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2209
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2210
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2211
2212
			$aircraft_array[] = $temp_array;
2213
		}
2214
2215
		return $aircraft_array;
2216
	}
2217
	
2218
	/**
2219
	* Gets the aircraft owner & base based on the aircraft registration
2220
	*
2221
	* @param String $registration the aircraft registration
2222
	* @return Array aircraft information
2223
	*
2224
	*/
2225
	public function getAircraftOwnerByRegistration($registration)
2226
	{
2227
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2228
		$Connection = new Connection($this->db);
2229
		if ($Connection->tableExists('aircraft_owner')) {
2230
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2231
			$sth = $this->db->prepare($query);
2232
			$sth->execute(array(':registration' => $registration));
2233
2234
			return $sth->fetch(PDO::FETCH_ASSOC);
2235
		} else return array();
2236
	}
2237
	
2238
  
2239
  /**
2240
	* Gets all flights (but with only little info)
2241
	*
2242
	* @return Array basic flight information
2243
	*
2244
	*/
2245
	public function getAllFlightsforSitemap()
2246
	{
2247
		//$query  = "SELECT spotter_output.spotter_id, spotter_output.ident, spotter_output.airline_name, spotter_output.aircraft_name, spotter_output.aircraft_icao FROM spotter_output ORDER BY LIMIT ";
2248
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2249
		
2250
		$sth = $this->db->prepare($query);
2251
		$sth->execute();
2252
                  /*
2253
		$flight_array = array();
2254
		$temp_array = array();
2255
		
2256
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2257
		{
2258
			$temp_array['spotter_id'] = $row['spotter_id'];
2259
//			$temp_array['ident'] = $row['ident'];
2260
//			$temp_array['airline_name'] = $row['airline_name'];
2261
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2262
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2263
			//$temp_array['image'] = $row['image'];
2264
2265
			$flight_array[] = $temp_array;
2266
		}
2267
2268
		return $flight_array;
2269
		*/
2270
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2271
	}
2272
  
2273
	/**
2274
	* Gets a list of all aircraft manufacturers
2275
	*
2276
	* @return Array list of aircraft types
2277
	*
2278
	*/
2279
	public function getAllManufacturers()
2280
	{
2281
		/*
2282
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2283
								FROM spotter_output
2284
								WHERE spotter_output.aircraft_manufacturer <> '' 
2285
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2286
		  */
2287
		
2288
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2289
		$sth = $this->db->prepare($query);
2290
		$sth->execute();
2291
2292
		$manufacturer_array = array();
2293
		$temp_array = array();
2294
		
2295
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2296
		{
2297
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2298
2299
			$manufacturer_array[] = $temp_array;
2300
		}
2301
2302
		return $manufacturer_array;
2303
	}
2304
  
2305
  
2306
  /**
2307
	* Gets a list of all aircraft types
2308
	*
2309
	* @return Array list of aircraft types
2310
	*
2311
	*/
2312
	public function getAllAircraftTypes()
2313
	{
2314
		/*
2315
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2316
								FROM spotter_output  
2317
								WHERE spotter_output.aircraft_icao <> '' 
2318
								ORDER BY spotter_output.aircraft_name ASC";
2319
								
2320
		*/
2321
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2322
		
2323
		$sth = $this->db->prepare($query);
2324
		$sth->execute();
2325
2326
		$aircraft_array = array();
2327
		$temp_array = array();
2328
		
2329
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2330
		{
2331
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2332
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2333
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2334
2335
			$aircraft_array[] = $temp_array;
2336
		}
2337
2338
		return $aircraft_array;
2339
	}
2340
	
2341
	
2342
	/**
2343
	* Gets a list of all aircraft registrations
2344
	*
2345
	* @return Array list of aircraft registrations
2346
	*
2347
	*/
2348
	public function getAllAircraftRegistrations()
2349
	{
2350
		$query  = "SELECT DISTINCT spotter_output.registration 
2351
				FROM spotter_output  
2352
				WHERE spotter_output.registration <> '' 
2353
				ORDER BY spotter_output.registration ASC";
2354
2355
		$sth = $this->db->prepare($query);
2356
		$sth->execute();
2357
2358
		$aircraft_array = array();
2359
		$temp_array = array();
2360
		
2361
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2362
		{
2363
			$temp_array['registration'] = $row['registration'];
2364
2365
			$aircraft_array[] = $temp_array;
2366
		}
2367
2368
		return $aircraft_array;
2369
	}
2370
2371
	/**
2372
	* Gets all source name
2373
	*
2374
	* @param String type format of source
2375
	* @return Array list of source name
2376
	*
2377
	*/
2378
	public function getAllSourceName($type = '')
2379
	{
2380
		$query_values = array();
2381
		$query  = "SELECT DISTINCT spotter_output.source_name 
2382
				FROM spotter_output  
2383
				WHERE spotter_output.source_name <> ''";
2384
		if ($type != '') {
2385
			$query_values = array(':type' => $type);
2386
			$query .= " AND format_source = :type";
2387
		}
2388
		$query .= " ORDER BY spotter_output.source_name ASC";
2389
2390
		$sth = $this->db->prepare($query);
2391
		if (!empty($query_values)) $sth->execute($query_values);
2392
		else $sth->execute();
2393
2394
		$source_array = array();
2395
		$temp_array = array();
2396
		
2397
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2398
		{
2399
			$temp_array['source_name'] = $row['source_name'];
2400
			$source_array[] = $temp_array;
2401
		}
2402
		return $source_array;
2403
	}
2404
2405
2406
2407
	/**
2408
	* Gets a list of all airline names
2409
	*
2410
	* @return Array list of airline names
2411
	*
2412
	*/
2413
	public function getAllAirlineNames($airline_type = '')
2414
	{
2415
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2416
		if ($airline_type == '' || $airline_type == 'all') {
2417
			/*
2418
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2419
								FROM spotter_output
2420
								WHERE spotter_output.airline_icao <> '' 
2421
								ORDER BY spotter_output.airline_name ASC";
2422
			*/
2423
			$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines ORDER BY name ASC";
2424
		} else {
2425
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2426
					FROM spotter_output
2427
					WHERE spotter_output.airline_icao <> '' 
2428
					AND spotter_output.airline_type = :airline_type 
2429
					ORDER BY spotter_output.airline_icao ASC";
2430
		}
2431
		
2432
		$sth = $this->db->prepare($query);
2433
		if ($airline_type != '' || $airline_type == 'all') {
2434
			$sth->execute(array(':airline_type' => $airline_type));
2435
		} else {
2436
			$sth->execute();
2437
		}
2438
    
2439
		$airline_array = array();
2440
		$temp_array = array();
2441
		
2442
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2443
		{
2444
			$temp_array['airline_icao'] = $row['airline_icao'];
2445
			$temp_array['airline_name'] = $row['airline_name'];
2446
			$temp_array['airline_type'] = $row['airline_type'];
2447
2448
			$airline_array[] = $temp_array;
2449
		}
2450
		return $airline_array;
2451
	}
2452
	
2453
	
2454
	/**
2455
	* Gets a list of all airline countries
2456
	*
2457
	* @return Array list of airline countries
2458
	*
2459
	*/
2460
	public function getAllAirlineCountries()
2461
	{
2462
		
2463
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2464
				FROM spotter_output  
2465
				WHERE spotter_output.airline_country <> '' 
2466
				ORDER BY spotter_output.airline_country ASC";
2467
		
2468
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2469
		$sth = $this->db->prepare($query);
2470
		$sth->execute();
2471
2472
		$airline_array = array();
2473
		$temp_array = array();
2474
		
2475
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2476
		{
2477
			$temp_array['airline_country'] = $row['airline_country'];
2478
2479
			$airline_array[] = $temp_array;
2480
		}
2481
2482
		return $airline_array;
2483
	}
2484
2485
	
2486
	
2487
	/**
2488
	* Gets a list of all departure & arrival names
2489
	*
2490
	* @return Array list of airport names
2491
	*
2492
	*/
2493
	public function getAllAirportNames()
2494
	{
2495
		$airport_array = array();
2496
2497
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao AS airport_icao, spotter_output.departure_airport_name AS airport_name, spotter_output.departure_airport_city AS airport_city, spotter_output.departure_airport_country AS airport_country
2498
				FROM spotter_output 
2499
				WHERE spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2500
				ORDER BY spotter_output.departure_airport_city ASC";
2501
		
2502
		//$query = "SELECT DISTINCT icao AS airport_icao, name AS airport_name, city AS airport_city, country AS airport_country FROM airport ORDER BY city ASC";
2503
		$sth = $this->db->prepare($query);
2504
		$sth->execute();
2505
2506
		$temp_array = array();
2507
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2508
		{
2509
			$temp_array['airport_icao'] = $row['airport_icao'];
2510
			$temp_array['airport_name'] = $row['airport_name'];
2511
			$temp_array['airport_city'] = $row['airport_city'];
2512
			$temp_array['airport_country'] = $row['airport_country'];
2513
2514
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2515
		}
2516
2517
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao AS airport_icao, spotter_output.arrival_airport_name AS airport_name, spotter_output.arrival_airport_city AS airport_city, spotter_output.arrival_airport_country AS airport_country
2518
								FROM spotter_output 
2519
								WHERE spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2520
								ORDER BY spotter_output.arrival_airport_city ASC";
2521
					
2522
		$sth = $this->db->prepare($query);
2523
		$sth->execute();
2524
2525
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2526
			{
2527
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2528
		//	{
2529
				$temp_array['airport_icao'] = $row['airport_icao'];
2530
				$temp_array['airport_name'] = $row['airport_name'];
2531
				$temp_array['airport_city'] = $row['airport_city'];
2532
				$temp_array['airport_country'] = $row['airport_country'];
2533
				
2534
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2535
		//	}
2536
		}
2537
2538
		return $airport_array;
2539
	} 
2540
	
2541
	
2542
	/**
2543
	* Gets a list of all departure & arrival airport countries
2544
	*
2545
	* @return Array list of airport countries
2546
	*
2547
	*/
2548
	public function getAllAirportCountries()
2549
	{
2550
		$airport_array = array();
2551
					
2552
		  /*
2553
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2554
								FROM spotter_output
2555
								WHERE spotter_output.departure_airport_country <> '' 
2556
								ORDER BY spotter_output.departure_airport_country ASC";
2557
		*/
2558
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2559
		
2560
		$sth = $this->db->prepare($query);
2561
		$sth->execute();
2562
   
2563
		$temp_array = array();
2564
		
2565
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2566
		{
2567
			$temp_array['airport_country'] = $row['airport_country'];
2568
2569
			$airport_array[$row['airport_country']] = $temp_array;
2570
		}
2571
								
2572
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2573
								FROM spotter_output
2574
								WHERE spotter_output.arrival_airport_country <> '' 
2575
								ORDER BY spotter_output.arrival_airport_country ASC";
2576
					
2577
		$sth = $this->db->prepare($query);
2578
		$sth->execute();
2579
		
2580
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2581
		{
2582
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2583
			{
2584
				$temp_array['airport_country'] = $row['airport_country'];
2585
				$airport_array[$row['airport_country']] = $temp_array;
2586
			}
2587
		}
2588
2589
		return $airport_array;
2590
	} 
2591
	
2592
	
2593
	
2594
	
2595
	/**
2596
	* Gets a list of all countries (airline, departure airport & arrival airport)
2597
	*
2598
	* @return Array list of countries
2599
	*
2600
	*/
2601
	public function getAllCountries()
2602
	{
2603
		$Connection= new Connection($this->db);
2604
		if ($Connection->tableExists('countries')) {
2605
			$query  = "SELECT countries.name AS airport_country
2606
				FROM countries
2607
				ORDER BY countries.name ASC";
2608
			$sth = $this->db->prepare($query);
2609
			$sth->execute();
2610
   
2611
			$temp_array = array();
2612
			$country_array = array();
2613
		
2614
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2615
			{
2616
				$temp_array['country'] = $row['airport_country'];
2617
				$country_array[$row['airport_country']] = $temp_array;
2618
			}
2619
		} else {
2620
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2621
								FROM spotter_output
2622
								WHERE spotter_output.departure_airport_country <> '' 
2623
								ORDER BY spotter_output.departure_airport_country ASC";
2624
2625
			$sth = $this->db->prepare($query);
2626
			$sth->execute();
2627
   
2628
			$temp_array = array();
2629
			$country_array = array();
2630
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2631
			{
2632
				$temp_array['country'] = $row['airport_country'];
2633
				$country_array[$row['airport_country']] = $temp_array;
2634
			}
2635
2636
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2637
								FROM spotter_output
2638
								WHERE spotter_output.arrival_airport_country <> '' 
2639
								ORDER BY spotter_output.arrival_airport_country ASC";
2640
					
2641
		$sth = $this->db->prepare($query);
2642
		$sth->execute();
2643
		
2644
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2645
		{
2646
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
2647
			{
2648
				$temp_array['country'] = $row['airport_country'];
2649
				
2650
				$country_array[$row['country']] = $temp_array;
2651
			}
2652
		}
2653
		
2654
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2655
								FROM spotter_output  
2656
								WHERE spotter_output.airline_country <> '' 
2657
								ORDER BY spotter_output.airline_country ASC";
2658
					
2659
		$sth = $this->db->prepare($query);
2660
		$sth->execute();
2661
		
2662
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2663
		{
2664
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
2665
			{
2666
				$temp_array['country'] = $row['airline_country'];
2667
				
2668
				$country_array[$row['country']] = $temp_array;
2669
			}
2670
		}
2671
		}  
2672
		return $country_array;
2673
	} 
2674
	
2675
	
2676
	
2677
	
2678
	/**
2679
	* Gets a list of all idents/callsigns
2680
	*
2681
	* @return Array list of ident/callsign names
2682
	*
2683
	*/
2684
	public function getAllIdents()
2685
	{
2686
		$query  = "SELECT DISTINCT spotter_output.ident
2687
								FROM spotter_output
2688
								WHERE spotter_output.ident <> '' 
2689
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
2690
2691
		$sth = $this->db->prepare($query);
2692
		$sth->execute();
2693
    
2694
		$ident_array = array();
2695
		$temp_array = array();
2696
		
2697
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2698
		{
2699
			$temp_array['ident'] = $row['ident'];
2700
			$ident_array[] = $temp_array;
2701
		}
2702
2703
		return $ident_array;
2704
	}
2705
2706
	/**
2707
	* Get a list of flights from airport since 7 days
2708
	* @return Array number, icao, name and city of airports
2709
	*/
2710
2711
	public function getLast7DaysAirportsDeparture($airport_icao = '') {
2712
		global $globalTimezone, $globalDBdriver;
2713
		if ($globalTimezone != '') {
2714
			date_default_timezone_set($globalTimezone);
2715
			$datetime = new DateTime();
2716
			$offset = $datetime->format('P');
2717
		} else $offset = '+00:00';
2718
		if ($airport_icao == '') {
2719
			if ($globalDBdriver == 'mysql') {
2720
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2721
			} else {
2722
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2723
			}
2724
			$sth = $this->db->prepare($query);
2725
			$sth->execute(array(':offset' => $offset));
2726
		} else {
2727
			if ($globalDBdriver == 'mysql') {
2728
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2729
			} else {
2730
				$query = "SELECT COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2731
			}
2732
			$sth = $this->db->prepare($query);
2733
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2734
		}
2735
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2736
	}
2737
2738
	/**
2739
	* Get a list of flights from airport since 7 days
2740
	* @return Array number, icao, name and city of airports
2741
	*/
2742
2743
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
2744
		global $globalTimezone, $globalDBdriver;
2745
		if ($globalTimezone != '') {
2746
			date_default_timezone_set($globalTimezone);
2747
			$datetime = new DateTime();
2748
			$offset = $datetime->format('P');
2749
		} else $offset = '+00:00';
2750
		if ($airport_icao == '') {
2751
			if ($globalDBdriver == 'mysql') {
2752
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2753
			} else {
2754
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2755
			}
2756
			$sth = $this->db->prepare($query);
2757
			$sth->execute(array(':offset' => $offset));
2758
		} else {
2759
			if ($globalDBdriver == 'mysql') {
2760
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2761
			} else {
2762
				$query = "SELECT spotter_output.airline_icao, COUNT(departure_airport_icao) AS departure_airport_count, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), departure_airport_name, departure_airport_city, departure_airport_country ORDER BY departure_airport_count DESC";
2763
			}
2764
			$sth = $this->db->prepare($query);
2765
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2766
		}
2767
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2768
	}
2769
2770
	/**
2771
	* Get a list of flights from detected airport since 7 days
2772
	* @return Array number, icao, name and city of airports
2773
	*/
2774
2775
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '') {
2776
		global $globalTimezone, $globalDBdriver;
2777
		if ($globalTimezone != '') {
2778
			date_default_timezone_set($globalTimezone);
2779
			$datetime = new DateTime();
2780
			$offset = $datetime->format('P');
2781
		} else $offset = '+00:00';
2782
		if ($airport_icao == '') {
2783
			if ($globalDBdriver == 'mysql') {
2784
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2785
				FROM `spotter_output`, airport 
2786
				WHERE airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao <> 'NA' 
2787
				GROUP BY real_departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2788
			} else {
2789
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2790
				FROM spotter_output, airport 
2791
				WHERE airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao <> 'NA' 
2792
				GROUP BY real_departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2793
			}
2794
			$sth = $this->db->prepare($query);
2795
			$sth->execute(array(':offset' => $offset));
2796
		} else {
2797
			if ($globalDBdriver == 'mysql') {
2798
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2799
				FROM `spotter_output`, airport 
2800
				WHERE airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
2801
				GROUP BY departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2802
			} else {
2803
				$query = "SELECT COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2804
				FROM spotter_output, airport 
2805
				WHERE airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao = :airport_icao GROUP BY departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2806
			}
2807
			$sth = $this->db->prepare($query);
2808
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2809
		}
2810
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2811
	}
2812
2813
	/**
2814
	* Get a list of flights from detected airport since 7 days
2815
	* @return Array number, icao, name and city of airports
2816
	*/
2817
2818
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
2819
		global $globalTimezone, $globalDBdriver;
2820
		if ($globalTimezone != '') {
2821
			date_default_timezone_set($globalTimezone);
2822
			$datetime = new DateTime();
2823
			$offset = $datetime->format('P');
2824
		} else $offset = '+00:00';
2825
		if ($airport_icao == '') {
2826
			if ($globalDBdriver == 'mysql') {
2827
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2828
				FROM `spotter_output`, airport 
2829
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao <> 'NA' 
2830
				GROUP BY spotter_output.airline_icao, real_departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2831
			} else {
2832
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2833
				FROM spotter_output, airport 
2834
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao <> 'NA' 
2835
				GROUP BY spotter_output.airline_icao, real_departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2836
			}
2837
			$sth = $this->db->prepare($query);
2838
			$sth->execute(array(':offset' => $offset));
2839
		} else {
2840
			if ($globalDBdriver == 'mysql') {
2841
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2842
				FROM `spotter_output`, airport 
2843
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
2844
				GROUP BY spotter_output.airline_icao, departure_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2845
			} else {
2846
				$query = "SELECT spotter_output.airline_icao, COUNT(real_departure_airport_icao) AS departure_airport_count, real_departure_airport_icao AS departure_airport_icao, airport.name AS departure_airport_name, airport.city AS departure_airport_city, airport.country AS departure_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2847
				FROM spotter_output, airport 
2848
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_departure_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND real_departure_airport_icao = :airport_icao GROUP BY spotter_output.airline_icao, departure_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY departure_airport_count DESC";
2849
			}
2850
			$sth = $this->db->prepare($query);
2851
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2852
		}
2853
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2854
	}
2855
2856
2857
	/**
2858
	* Get a list of flights to airport since 7 days
2859
	* @return Array number, icao, name and city of airports
2860
	*/
2861
2862
	public function getLast7DaysAirportsArrival($airport_icao = '') {
2863
		global $globalTimezone, $globalDBdriver;
2864
		if ($globalTimezone != '') {
2865
			date_default_timezone_set($globalTimezone);
2866
			$datetime = new DateTime();
2867
			$offset = $datetime->format('P');
2868
		} else $offset = '+00:00';
2869
		if ($airport_icao == '') {
2870
			if ($globalDBdriver == 'mysql') {
2871
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' GROUP BY arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2872
			} else {
2873
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' GROUP BY arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2874
			}
2875
			$sth = $this->db->prepare($query);
2876
			$sth->execute(array(':offset' => $offset));
2877
		} else {
2878
			if ($globalDBdriver == 'mysql') {
2879
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao GROUP BY arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2880
			} else {
2881
				$query = "SELECT COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao GROUP BY arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2882
			}
2883
			$sth = $this->db->prepare($query);
2884
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2885
		}
2886
		
2887
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2888
	}
2889
2890
2891
	/**
2892
	* Get a list of flights detected to airport since 7 days
2893
	* @return Array number, icao, name and city of airports
2894
	*/
2895
2896
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '') {
2897
		global $globalTimezone, $globalDBdriver;
2898
		if ($globalTimezone != '') {
2899
			date_default_timezone_set($globalTimezone);
2900
			$datetime = new DateTime();
2901
			$offset = $datetime->format('P');
2902
		} else $offset = '+00:00';
2903
		if ($airport_icao == '') {
2904
			if ($globalDBdriver == 'mysql') {
2905
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2906
				FROM `spotter_output`, airport 
2907
				WHERE airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' 
2908
				GROUP BY real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
2909
			} else {
2910
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2911
				FROM spotter_output, airport 
2912
				WHERE airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' 
2913
				GROUP BY real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
2914
			}
2915
			$sth = $this->db->prepare($query);
2916
			$sth->execute(array(':offset' => $offset));
2917
		} else {
2918
			if ($globalDBdriver == 'mysql') {
2919
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2920
				FROM `spotter_output`, airport 
2921
				WHERE airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
2922
				GROUP BY real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
2923
			} else {
2924
				$query = "SELECT COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2925
				FROM spotter_output, airport 
2926
				WHERE airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
2927
				GROUP BY real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
2928
			}
2929
			$sth = $this->db->prepare($query);
2930
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2931
		}
2932
		
2933
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2934
	}
2935
2936
2937
	/**
2938
	* Get a list of flights to airport since 7 days
2939
	* @return Array number, icao, name and city of airports
2940
	*/
2941
2942
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
2943
		global $globalTimezone, $globalDBdriver;
2944
		if ($globalTimezone != '') {
2945
			date_default_timezone_set($globalTimezone);
2946
			$datetime = new DateTime();
2947
			$offset = $datetime->format('P');
2948
		} else $offset = '+00:00';
2949
		if ($airport_icao == '') {
2950
			if ($globalDBdriver == 'mysql') {
2951
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2952
			} else {
2953
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2954
			}
2955
			$sth = $this->db->prepare($query);
2956
			$sth->execute(array(':offset' => $offset));
2957
		} else {
2958
			if ($globalDBdriver == 'mysql') {
2959
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date FROM `spotter_output` WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2960
			} else {
2961
				$query = "SELECT spotter_output.airline_icao, COUNT(arrival_airport_icao) AS arrival_airport_count, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date FROM spotter_output WHERE spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao AND spotter_output.airline_icao <> '' GROUP BY spotter_output.airline_icao, arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), arrival_airport_name, arrival_airport_city, arrival_airport_country ORDER BY arrival_airport_count DESC";
2962
			}
2963
			$sth = $this->db->prepare($query);
2964
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2965
		}
2966
		
2967
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2968
	}
2969
2970
2971
	/**
2972
	* Get a list of flights detected to airport since 7 days
2973
	* @return Array number, icao, name and city of airports
2974
	*/
2975
2976
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
2977
		global $globalTimezone, $globalDBdriver;
2978
		if ($globalTimezone != '') {
2979
			date_default_timezone_set($globalTimezone);
2980
			$datetime = new DateTime();
2981
			$offset = $datetime->format('P');
2982
		} else $offset = '+00:00';
2983
		if ($airport_icao == '') {
2984
			if ($globalDBdriver == 'mysql') {
2985
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2986
				FROM `spotter_output`, airport 
2987
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' 
2988
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
2989
			} else {
2990
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
2991
				FROM spotter_output, airport 
2992
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' 
2993
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
2994
			}
2995
			$sth = $this->db->prepare($query);
2996
			$sth->execute(array(':offset' => $offset));
2997
		} else {
2998
			if ($globalDBdriver == 'mysql') {
2999
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
3000
				FROM `spotter_output`, airport 
3001
				WHERE spotter_output.airline_icao <> '' AND airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
3002
				GROUP BY spotter_output.airline_icao, real_arrival_airport_icao, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d'),airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3003
			} else {
3004
				$query = "SELECT spotter_output.airline_icao, COUNT(real_arrival_airport_icao) AS arrival_airport_count, real_arrival_airport_icao AS arrival_airport_icao, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date 
3005
				FROM spotter_output, airport 
3006
				WHERE spotter_output.airline_icao <> '' AND  airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao = :airport_icao 
3007
				GROUP BY spotter_output.airline_icao,real_arrival_airport_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd'), airport.name, airport.city, airport.country ORDER BY arrival_airport_count DESC";
3008
			}
3009
			$sth = $this->db->prepare($query);
3010
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3011
		}
3012
		
3013
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3014
	}
3015
3016
3017
	/**
3018
	* Gets a list of all dates
3019
	*
3020
	* @return Array list of date names
3021
	*
3022
	*/
3023
	public function getAllDates()
3024
	{
3025
		global $globalTimezone, $globalDBdriver;
3026
		if ($globalTimezone != '') {
3027
			date_default_timezone_set($globalTimezone);
3028
			$datetime = new DateTime();
3029
			$offset = $datetime->format('P');
3030
		} else $offset = '+00:00';
3031
3032
		if ($globalDBdriver == 'mysql') {
3033
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3034
								FROM spotter_output
3035
								WHERE spotter_output.date <> '' 
3036
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3037
		} else {
3038
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3039
								FROM spotter_output
3040
								WHERE spotter_output.date <> '' 
3041
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3042
		}
3043
		
3044
		$sth = $this->db->prepare($query);
3045
		$sth->execute(array(':offset' => $offset));
3046
    
3047
		$date_array = array();
3048
		$temp_array = array();
3049
		
3050
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3051
		{
3052
			$temp_array['date'] = $row['date'];
3053
3054
			$date_array[] = $temp_array;
3055
		}
3056
3057
		return $date_array;
3058
	}
3059
	
3060
	
3061
	
3062
	/**
3063
	* Gets all route combinations
3064
	*
3065
	* @return Array the route list
3066
	*
3067
	*/
3068
	public function getAllRoutes()
3069
	{
3070
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route,  spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao 
3071
				FROM spotter_output
3072
				WHERE spotter_output.ident <> '' 
3073
				GROUP BY route
3074
				ORDER BY route ASC";
3075
3076
		$sth = $this->db->prepare($query);
3077
		$sth->execute();
3078
3079
		$routes_array = array();
3080
		$temp_array = array();
3081
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3082
		{
3083
			$temp_array['route'] = $row['route'];
3084
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3085
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3086
3087
			$routes_array[] = $temp_array;
3088
		}
3089
		return $routes_array;
3090
	}
3091
3092
	/**
3093
	* Update ident spotter data
3094
	*
3095
	* @param String $flightaware_id the ID from flightaware
3096
	* @param String $ident the flight ident
3097
	* @return String success or false
3098
	*
3099
	*/	
3100
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3101
	{
3102
		if (!is_numeric(substr($ident, 0, 3)))
3103
		{
3104
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3105
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3106
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3107
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3108
			} else {
3109
				$airline_array = $this->getAllAirlineInfo("NA");
3110
			}
3111
			if (count($airline_array) == 0) {
3112
				$airline_array = $this->getAllAirlineInfo("NA");
3113
			}
3114
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3115
				$airline_array = $this->getAllAirlineInfo("NA");
3116
			}
3117
		} else {
3118
			$airline_array = $this->getAllAirlineInfo("NA");
3119
		}
3120
                $airline_name = $airline_array[0]['name'];
3121
                $airline_icao = $airline_array[0]['icao'];
3122
                $airline_country = $airline_array[0]['country'];
3123
                $airline_type = $airline_array[0]['type'];
3124
3125
3126
		$query = 'UPDATE spotter_output SET ident = :ident, airline_name = :airline_name, airline_icao = :airline_icao, airline_country = :airline_country, airline_type = :airline_type WHERE flightaware_id = :flightaware_id';
3127
                $query_values = array(':flightaware_id' => $flightaware_id,':ident' => $ident,':airline_name' => $airline_name,':airline_icao' => $airline_icao,':airline_country' => $airline_country,':airline_type' => $airline_type);
3128
3129
		try {
3130
			$sth = $this->db->prepare($query);
3131
			$sth->execute($query_values);
3132
		} catch (PDOException $e) {
3133
			return "error : ".$e->getMessage();
3134
		}
3135
		
3136
		return "success";
3137
3138
	}
3139
	/**
3140
	* Update latest spotter data
3141
	*
3142
	* @param String $flightaware_id the ID from flightaware
3143
	* @param String $ident the flight ident
3144
	* @param String $arrival_airport_icao the arrival airport
3145
	* @return String success or false
3146
	*
3147
	*/	
3148
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3149
	{
3150
		if ($groundspeed == '') $groundspeed = NULL;
3151
		$query = 'UPDATE spotter_output SET ident = :ident, last_latitude = :last_latitude, last_longitude = :last_longitude, last_altitude = :last_altitude, last_ground = :last_ground, last_seen = :last_seen, real_arrival_airport_icao = :real_arrival_airport_icao, real_arrival_airport_time = :real_arrival_airport_time, last_ground_speed = :last_ground_speed WHERE flightaware_id = :flightaware_id';
3152
                $query_values = array(':flightaware_id' => $flightaware_id,':real_arrival_airport_icao' => $arrival_airport_icao,':last_latitude' => $latitude,':last_longitude' => $longitude, ':last_altitude' => $altitude,':last_ground_speed' => $groundspeed,':last_seen' => $date,':real_arrival_airport_time' => $arrival_airport_time, ':last_ground' => $ground, ':ident' => $ident);
3153
3154
		try {
3155
			$sth = $this->db->prepare($query);
3156
			$sth->execute($query_values);
3157
		} catch (PDOException $e) {
3158
			return "error : ".$e->getMessage();
3159
		}
3160
		
3161
		return "success";
3162
3163
	}
3164
3165
	/**
3166
	* Adds a new spotter data
3167
	*
3168
	* @param String $flightaware_id the ID from flightaware
3169
	* @param String $ident the flight ident
3170
	* @param String $aircraft_icao the aircraft type
3171
	* @param String $departure_airport_icao the departure airport
3172
	* @param String $arrival_airport_icao the arrival airport
3173
	* @param String $latitude latitude of flight
3174
	* @param String $longitude latitude of flight
3175
	* @param String $waypoints waypoints of flight
3176
	* @param String $altitude altitude of flight
3177
	* @param String $heading heading of flight
3178
	* @param String $groundspeed speed of flight
3179
	* @param String $date date of flight
3180
	* @param String $departure_airport_time departure time of flight
3181
	* @param String $arrival_airport_time arrival time of flight
3182
	* @param String $squawk squawk code of flight
3183
	* @param String $route_stop route stop of flight
3184
	* @param String $highlight highlight or not
3185
	* @param String $ModeS ModesS code of flight
3186
	* @param String $registration registration code of flight
3187
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3188
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3189
	* @param String $verticalrate vertival rate of flight
3190
	* @return String success or false
3191
	*/
3192
	public function addSpotterData($flightaware_id = '', $ident = '', $aircraft_icao = '', $departure_airport_icao = '', $arrival_airport_icao = '', $latitude = '', $longitude = '', $waypoints = '', $altitude = '', $heading = '', $groundspeed = '', $date = '', $departure_airport_time = '', $arrival_airport_time = '',$squawk = '', $route_stop = '', $highlight = '', $ModeS = '', $registration = '',$pilot_id = '', $pilot_name = '', $verticalrate = '', $ground = false,$format_source = '', $source_name = '')
3193
	{
3194
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed;
3195
		
3196
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3197
		$Image = new Image($this->db);
3198
		$Common = new Common();
3199
		
3200
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3201
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3202
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3203
		date_default_timezone_set('UTC');
3204
		
3205
		//getting the registration
3206
		if ($flightaware_id != "" && $registration == '')
3207
		{
3208
			if (!is_string($flightaware_id))
3209
			{
3210
				return false;
3211
			} else {
3212
				if ($ModeS != '') {
3213
					$timeelapsed = microtime(true);
3214
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3215
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3216
				} else {
3217
					$myhex = explode('-',$flightaware_id);
3218
					if (count($myhex) > 0) {
3219
						$timeelapsed = microtime(true);
3220
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3221
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3222
					}
3223
				}
3224
			}
3225
		}
3226
		$fromsource = NULL;
3227
		if ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3228
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3229
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3230
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3231
		//getting the airline information
3232
		if ($ident != "")
3233
		{
3234
			if (!is_string($ident))
3235
			{
3236
				return false;
3237
			} else {
3238
				if (!is_numeric(substr($ident, 0, 3)))
3239
				{
3240
					$timeelapsed = microtime(true);
3241
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3242
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3243
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3244
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3245
					} else {
3246
						$airline_array = $this->getAllAirlineInfo("NA");
3247
					}
3248
					if (count($airline_array) == 0) {
3249
						$airline_array = $this->getAllAirlineInfo("NA");
3250
					}
3251
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3252
						$airline_array = $this->getAllAirlineInfo("NA");
3253
					}
3254
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3255
3256
				} else {
3257
					$timeelapsed = microtime(true);
3258
					$airline_array = $this->getAllAirlineInfo("NA");
3259
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3260
				}
3261
			}
3262
		} else $airline_array = array();
3263
		
3264
		//getting the aircraft information
3265
		$aircraft_array = array();
3266
		if ($aircraft_icao != "")
3267
		{
3268
			if (!is_string($aircraft_icao))
3269
			{
3270
				return false;
3271
			} else {
3272
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3273
				{
3274
					$timeelapsed = microtime(true);
3275
					$aircraft_array = $this->getAllAircraftInfo("NA");
3276
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3277
				} else {
3278
					$timeelapsed = microtime(true);
3279
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3280
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3281
				}
3282
			}
3283
		} else {
3284
			if ($ModeS != '') {
3285
				$timeelapsed = microtime(true);
3286
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3287
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3288
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3289
				{
3290
					$timeelapsed = microtime(true);
3291
					$aircraft_array = $this->getAllAircraftInfo("NA");
3292
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3293
				} else {
3294
					$timeelapsed = microtime(true);
3295
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3296
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3297
				}
3298
			}
3299
		}
3300
		
3301
		//getting the departure airport information
3302
		$departure_airport_array = array();
3303
		if ($departure_airport_icao != "")
3304
		{
3305
			if (!is_string($departure_airport_icao))
3306
			{
3307
				return false;
3308
			} else {
3309
				$timeelapsed = microtime(true);
3310
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3311
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3312
			}
3313
		}
3314
		
3315
		//getting the arrival airport information
3316
		$arrival_airport_array = array();
3317
		if ($arrival_airport_icao != "")
3318
		{
3319
			if (!is_string($arrival_airport_icao))
3320
			{
3321
				return false;
3322
			} else {
3323
				$timeelapsed = microtime(true);
3324
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3325
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3326
			}
3327
		}
3328
3329
						
3330
		if ($latitude != "")
3331
		{
3332
			if (!is_numeric($latitude))
3333
			{
3334
				return false;
3335
			}
3336
		}
3337
		
3338
		if ($longitude != "")
3339
		{
3340
			if (!is_numeric($longitude))
3341
			{
3342
				return false;
3343
			}
3344
		}
3345
		
3346
		if ($waypoints != "")
3347
		{
3348
			if (!is_string($waypoints))
3349
			{
3350
				return false;
3351
			}
3352
		}
3353
		
3354
		if ($altitude != "")
3355
		{
3356
			if (!is_numeric($altitude))
3357
			{
3358
				return false;
3359
			}
3360
		} else $altitude = 0;
3361
		
3362
		if ($heading != "")
3363
		{
3364
			if (!is_numeric($heading))
3365
			{
3366
				return false;
3367
			}
3368
		}
3369
		
3370
		if ($groundspeed != "")
3371
		{
3372
			if (!is_numeric($groundspeed))
3373
			{
3374
				return false;
3375
			}
3376
		}
3377
3378
    
3379
		if ($date == "")
3380
		{
3381
			$date = date("Y-m-d H:i:s", time());
3382
		}
3383
3384
		//getting the aircraft image
3385
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS)
3386
		{
3387
			$timeelapsed = microtime(true);
3388
			$image_array = $Image->getSpotterImage($registration);
3389
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3390
			if (!isset($image_array[0]['registration']))
3391
			{
3392
				//echo "Add image !!!! \n";
3393
				$Image->addSpotterImage($registration);
3394
			}
3395
			$timeelapsed = microtime(true);
3396
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3397
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3398
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3399
		}
3400
    
3401
		if ($globalIVAO && $aircraft_icao != '')
3402
		{
3403
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3404
            		else $airline_icao = '';
3405
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3406
			if (!isset($image_array[0]['registration']))
3407
			{
3408
				//echo "Add image !!!! \n";
3409
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3410
			}
3411
		}
3412
    
3413
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3414
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3415
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3416
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3417
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3418
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3419
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3420
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3421
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3422
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3423
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3424
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3425
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3426
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3427
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3428
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3429
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3430
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3431
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3432
	
3433
		if (count($airline_array) == 0) 
3434
		{
3435
                        $airline_array = $this->getAllAirlineInfo('NA');
3436
                }
3437
                if (count($aircraft_array) == 0) 
3438
                {
3439
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3440
                }
3441
                if (count($departure_airport_array) == 0) 
3442
                {
3443
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3444
                }
3445
                if (count($arrival_airport_array) == 0) 
3446
                {
3447
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3448
                }
3449
                if ($registration == '') $registration = 'NA';
3450
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3451
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3452
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3453
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3454
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3455
                $query  = "INSERT INTO spotter_output (flightaware_id, ident, registration, airline_name, airline_icao, airline_country, airline_type, aircraft_icao, aircraft_name, aircraft_manufacturer, departure_airport_icao, departure_airport_name, departure_airport_city, departure_airport_country, arrival_airport_icao, arrival_airport_name, arrival_airport_city, arrival_airport_country, latitude, longitude, waypoints, altitude, heading, ground_speed, date, departure_airport_time, arrival_airport_time, squawk, route_stop,highlight,ModeS, pilot_id, pilot_name, verticalrate, owner_name, ground, format_source, source_name) 
3456
                VALUES (:flightaware_id,:ident,:registration,:airline_name,:airline_icao,:airline_country,:airline_type,:aircraft_icao,:aircraft_type,:aircraft_manufacturer,:departure_airport_icao,:departure_airport_name,:departure_airport_city,:departure_airport_country, :arrival_airport_icao, :arrival_airport_name, :arrival_airport_city, :arrival_airport_country, :latitude,:longitude,:waypoints,:altitude,:heading,:groundspeed,:date, :departure_airport_time, :arrival_airport_time, :squawk, :route_stop, :highlight, :ModeS, :pilot_id, :pilot_name, :verticalrate, :owner_name,:ground, :format_source, :source_name)";
3457
3458
                $airline_name = $airline_array[0]['name'];
3459
                $airline_icao = $airline_array[0]['icao'];
3460
                $airline_country = $airline_array[0]['country'];
3461
                $airline_type = $airline_array[0]['type'];
3462
		if ($airline_type == '') {
3463
			$timeelapsed = microtime(true);
3464
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3465
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3466
		}
3467
		if ($airline_type == null) $airline_type = '';
3468
                $aircraft_type = $aircraft_array[0]['type'];
3469
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3470
                $departure_airport_name = $departure_airport_array[0]['name'];
3471
                $departure_airport_city = $departure_airport_array[0]['city'];
3472
                $departure_airport_country = $departure_airport_array[0]['country'];
3473
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3474
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3475
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3476
                $query_values = array(':flightaware_id' => $flightaware_id,':ident' => $ident, ':registration' => $registration,':airline_name' => $airline_name,':airline_icao' => $airline_icao,':airline_country' => $airline_country,':airline_type' => $airline_type,':aircraft_icao' => $aircraft_icao,':aircraft_type' => $aircraft_type,':aircraft_manufacturer' => $aircraft_manufacturer,':departure_airport_icao' => $departure_airport_icao,':departure_airport_name' => $departure_airport_name,':departure_airport_city' => $departure_airport_city,':departure_airport_country' => $departure_airport_country,':arrival_airport_icao' => $arrival_airport_icao,':arrival_airport_name' => $arrival_airport_name,':arrival_airport_city' => $arrival_airport_city,':arrival_airport_country' => $arrival_airport_country,':latitude' => $latitude,':longitude' => $longitude, ':waypoints' => $waypoints,':altitude' => $altitude,':heading' => $heading,':groundspeed' => $groundspeed,':date' => $date,':departure_airport_time' => $departure_airport_time,':arrival_airport_time' => $arrival_airport_time, ':squawk' => $squawk, ':route_stop' => $route_stop, ':highlight' => $highlight, ':ModeS' => $ModeS, ':pilot_id' => $pilot_id, ':pilot_name' => $pilot_name, ':verticalrate' => $verticalrate, ':owner_name' => $aircraft_owner, ':format_source' => $format_source, ':ground' => $ground, ':source_name' => $source_name);
3477
3478
		try {
3479
		        
3480
			$sth = $this->db->prepare($query);
3481
			$sth->execute($query_values);
3482
			$this->db = null;
3483
		} catch (PDOException $e) {
3484
		    return "error : ".$e->getMessage();
3485
		}
3486
		
3487
		return "success";
3488
3489
	}
3490
	
3491
  
3492
	/**
3493
	* Gets the aircraft ident within the last hour
3494
	*
3495
	* @return String the ident
3496
	*
3497
	*/
3498
	public function getIdentFromLastHour($ident)
3499
	{
3500
		global $globalDBdriver, $globalTimezone;
3501
		if ($globalDBdriver == 'mysql') {
3502
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3503
								WHERE spotter_output.ident = :ident 
3504
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3505
								AND spotter_output.date < UTC_TIMESTAMP()";
3506
			$query_data = array(':ident' => $ident);
3507
		} else {
3508
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3509
								WHERE spotter_output.ident = :ident 
3510
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3511
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3512
			$query_data = array(':ident' => $ident);
3513
    		}
3514
		
3515
		$sth = $this->db->prepare($query);
3516
		$sth->execute($query_data);
3517
    		$ident_result='';
3518
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3519
		{
3520
			$ident_result = $row['ident'];
3521
		}
3522
3523
		return $ident_result;
3524
	}
3525
	
3526
	
3527
	/**
3528
	* Gets the aircraft data from the last 20 seconds
3529
	*
3530
	* @return Array the spotter data
3531
	*
3532
	*/
3533
	public function getRealTimeData($q = '')
3534
	{
3535
		global $globalDBdriver;
3536
		$additional_query = '';
3537
		if ($q != "")
3538
		{
3539
			if (!is_string($q))
3540
			{
3541
				return false;
3542
			} else {
3543
				$q_array = explode(" ", $q);
3544
				foreach ($q_array as $q_item){
3545
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3546
					$additional_query .= " AND (";
3547
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3548
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3549
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3550
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3551
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3552
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3553
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3554
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3555
					$additional_query .= ")";
3556
				}
3557
			}
3558
		}
3559
		if ($globalDBdriver == 'mysql') {
3560
			$query  = "SELECT spotter_output.* FROM spotter_output 
3561
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3562
				AND spotter_output.date < UTC_TIMESTAMP()";
3563
		} else {
3564
			$query  = "SELECT spotter_output.* FROM spotter_output 
3565
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3566
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3567
		}
3568
		$spotter_array = $this->getDataFromDB($query, array());
3569
3570
		return $spotter_array;
3571
	}
3572
	
3573
	
3574
	
3575
	 /**
3576
	* Gets all airlines that have flown over
3577
	*
3578
	* @return Array the airline list
3579
	*
3580
	*/
3581
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
3582
	{
3583
		global $globalDBdriver;
3584
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3585
		 			FROM spotter_output
3586
					WHERE spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA' ";
3587
		if ($olderthanmonths > 0) {
3588
			if ($globalDBdriver == 'mysql') {
3589
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3590
			} else {
3591
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3592
			}
3593
		}
3594
                if ($sincedate != '') {
3595
			if ($globalDBdriver == 'mysql') {
3596
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3597
			} else {
3598
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3599
			}
3600
		}
3601
		$query .= "GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3602
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3603
		
3604
		$sth = $this->db->prepare($query);
3605
		$sth->execute();
3606
 
3607
		$airline_array = array();
3608
		$temp_array = array();
3609
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3610
		{
3611
			$temp_array['airline_name'] = $row['airline_name'];
3612
			$temp_array['airline_icao'] = $row['airline_icao'];
3613
			$temp_array['airline_count'] = $row['airline_count'];
3614
			$temp_array['airline_country'] = $row['airline_country'];
3615
			$airline_array[] = $temp_array;
3616
		}
3617
		return $airline_array;
3618
	}
3619
3620
	 /**
3621
	* Gets all pilots that have flown over
3622
	*
3623
	* @return Array the pilots list
3624
	*
3625
	*/
3626
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3627
	{
3628
		global $globalDBdriver;
3629
		$filter_query = $this->getFilter($filters,true,true);
3630
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count
3631
		 			FROM spotter_output".$filter_query." spotter_output.pilot_id <> '' ";
3632
                if ($olderthanmonths > 0) {
3633
            		if ($globalDBdriver == 'mysql') {
3634
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3635
			} else {
3636
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3637
			}
3638
		}
3639
                if ($sincedate != '') {
3640
            		if ($globalDBdriver == 'mysql') {
3641
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3642
			} else {
3643
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3644
			}
3645
		}
3646
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name ORDER BY pilot_count DESC";
3647
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3648
      
3649
		
3650
		$sth = $this->db->prepare($query);
3651
		$sth->execute();
3652
      
3653
		$airline_array = array();
3654
		$temp_array = array();
3655
        
3656
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3657
		{
3658
			$temp_array['pilot_name'] = $row['pilot_name'];
3659
			$temp_array['pilot_id'] = $row['pilot_id'];
3660
			$temp_array['pilot_count'] = $row['pilot_count'];
3661
			$airline_array[] = $temp_array;
3662
		}
3663
		return $airline_array;
3664
	}
3665
	
3666
		 /**
3667
	* Gets all pilots that have flown over
3668
	*
3669
	* @return Array the pilots list
3670
	*
3671
	*/
3672
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
3673
	{
3674
		global $globalDBdriver;
3675
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count
3676
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
3677
                if ($olderthanmonths > 0) {
3678
            		if ($globalDBdriver == 'mysql') {
3679
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3680
			} else {
3681
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3682
			}
3683
		}
3684
                if ($sincedate != '') {
3685
            		if ($globalDBdriver == 'mysql') {
3686
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3687
			} else {
3688
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3689
			}
3690
		}
3691
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name ORDER BY pilot_count DESC";
3692
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3693
      
3694
		
3695
		$sth = $this->db->prepare($query);
3696
		$sth->execute();
3697
      
3698
		$airline_array = array();
3699
		$temp_array = array();
3700
        
3701
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3702
		{
3703
			$temp_array['pilot_name'] = $row['pilot_name'];
3704
			$temp_array['pilot_id'] = $row['pilot_id'];
3705
			$temp_array['pilot_count'] = $row['pilot_count'];
3706
			$temp_array['airline_icao'] = $row['airline_icao'];
3707
			$airline_array[] = $temp_array;
3708
		}
3709
		return $airline_array;
3710
	}
3711
	
3712
	 /**
3713
	* Gets all owner that have flown over
3714
	*
3715
	* @return Array the pilots list
3716
	*
3717
	*/
3718
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3719
	{
3720
		global $globalDBdriver;
3721
		$filter_query = $this->getFilter($filters,true,true);
3722
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3723
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3724
                if ($olderthanmonths > 0) {
3725
            		if ($globalDBdriver == 'mysql') {
3726
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3727
			} else {
3728
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3729
			}
3730
		}
3731
                if ($sincedate != '') {
3732
            		if ($globalDBdriver == 'mysql') {
3733
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3734
			} else {
3735
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3736
			}
3737
		}
3738
		$query .= "GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
3739
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3740
      
3741
		
3742
		$sth = $this->db->prepare($query);
3743
		$sth->execute();
3744
      
3745
		$airline_array = array();
3746
		$temp_array = array();
3747
        
3748
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3749
		{
3750
			$temp_array['owner_name'] = $row['owner_name'];
3751
			$temp_array['owner_count'] = $row['owner_count'];
3752
			$airline_array[] = $temp_array;
3753
		}
3754
		return $airline_array;
3755
	}
3756
	
3757
	 /**
3758
	* Gets all owner that have flown over
3759
	*
3760
	* @return Array the pilots list
3761
	*
3762
	*/
3763
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
3764
	{
3765
		global $globalDBdriver;
3766
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3767
		 			FROM spotter_output WHERE spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3768
                if ($olderthanmonths > 0) {
3769
            		if ($globalDBdriver == 'mysql') {
3770
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3771
			} else {
3772
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3773
			}
3774
		}
3775
                if ($sincedate != '') {
3776
            		if ($globalDBdriver == 'mysql') {
3777
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3778
			} else {
3779
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3780
			}
3781
		}
3782
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
3783
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3784
      
3785
		
3786
		$sth = $this->db->prepare($query);
3787
		$sth->execute();
3788
      
3789
		$airline_array = array();
3790
		$temp_array = array();
3791
        
3792
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3793
		{
3794
			$temp_array['owner_name'] = $row['owner_name'];
3795
			$temp_array['owner_count'] = $row['owner_count'];
3796
			$temp_array['airline_icao'] = $row['airline_icao'];
3797
			$airline_array[] = $temp_array;
3798
		}
3799
		return $airline_array;
3800
	}
3801
3802
	/**
3803
	* Gets all airlines that have flown over by aircraft
3804
	*
3805
	* @return Array the airline list
3806
	*
3807
	*/
3808
	public function countAllAirlinesByAircraft($aircraft_icao)
3809
	{
3810
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3811
3812
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3813
		 			FROM spotter_output
3814
					WHERE spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
3815
                    GROUP BY spotter_output.airline_name
3816
					ORDER BY airline_count DESC";
3817
      
3818
		
3819
		$sth = $this->db->prepare($query);
3820
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3821
      
3822
		$airline_array = array();
3823
		$temp_array = array();
3824
        
3825
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3826
		{
3827
			$temp_array['airline_name'] = $row['airline_name'];
3828
			$temp_array['airline_icao'] = $row['airline_icao'];
3829
			$temp_array['airline_count'] = $row['airline_count'];
3830
			$temp_array['airline_country'] = $row['airline_country'];
3831
3832
			$airline_array[] = $temp_array;
3833
		}
3834
3835
		return $airline_array;
3836
	}
3837
3838
3839
	/**
3840
	* Gets all airline countries that have flown over by aircraft
3841
	*
3842
	* @return Array the airline country list
3843
	*
3844
	*/
3845
	public function countAllAirlineCountriesByAircraft($aircraft_icao)
3846
	{
3847
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3848
      
3849
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3850
		 			FROM spotter_output
3851
					WHERE spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
3852
                    GROUP BY spotter_output.airline_country
3853
					ORDER BY airline_country_count DESC
3854
					LIMIT 10 OFFSET 0";
3855
      
3856
		
3857
		$sth = $this->db->prepare($query);
3858
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3859
      
3860
		$airline_country_array = array();
3861
		$temp_array = array();
3862
        
3863
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3864
		{
3865
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3866
			$temp_array['airline_country'] = $row['airline_country'];
3867
 
3868
			$airline_country_array[] = $temp_array;
3869
		}
3870
		return $airline_country_array;
3871
	}
3872
3873
3874
	
3875
	
3876
	/**
3877
	* Gets all airlines that have flown over by airport
3878
	*
3879
	* @return Array the airline list
3880
	*
3881
	*/
3882
	public function countAllAirlinesByAirport($airport_icao)
3883
	{
3884
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
3885
3886
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3887
		 			FROM spotter_output
3888
					WHERE spotter_output.airline_name <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao ) 
3889
                    GROUP BY spotter_output.airline_name
3890
					ORDER BY airline_count DESC";
3891
      
3892
		
3893
		$sth = $this->db->prepare($query);
3894
		$sth->execute(array(':airport_icao' => $airport_icao));
3895
      
3896
		$airline_array = array();
3897
		$temp_array = array();
3898
        
3899
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3900
		{
3901
			$temp_array['airline_name'] = $row['airline_name'];
3902
			$temp_array['airline_icao'] = $row['airline_icao'];
3903
			$temp_array['airline_count'] = $row['airline_count'];
3904
			$temp_array['airline_country'] = $row['airline_country'];
3905
3906
			$airline_array[] = $temp_array;
3907
		}
3908
		return $airline_array;
3909
	}
3910
3911
3912
	/**
3913
	* Gets all airline countries that have flown over by airport icao
3914
	*
3915
	* @return Array the airline country list
3916
	*
3917
	*/
3918
	public function countAllAirlineCountriesByAirport($airport_icao)
3919
	{
3920
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
3921
      
3922
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3923
		 			FROM spotter_output
3924
					WHERE spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
3925
					GROUP BY spotter_output.airline_country
3926
					ORDER BY airline_country_count DESC
3927
					LIMIT 10 OFFSET 0";
3928
3929
		
3930
		$sth = $this->db->prepare($query);
3931
		$sth->execute(array(':airport_icao' => $airport_icao));
3932
3933
		$airline_country_array = array();
3934
		$temp_array = array();
3935
        
3936
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3937
		{
3938
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3939
			$temp_array['airline_country'] = $row['airline_country'];
3940
 
3941
			$airline_country_array[] = $temp_array;
3942
		}
3943
		return $airline_country_array;
3944
	}
3945
3946
3947
	/**
3948
	* Gets all airlines that have flown over by aircraft manufacturer
3949
	*
3950
	* @return Array the airline list
3951
	*
3952
	*/
3953
	public function countAllAirlinesByManufacturer($aircraft_manufacturer)
3954
	{
3955
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
3956
3957
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3958
		 			FROM spotter_output
3959
					WHERE spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
3960
					GROUP BY spotter_output.airline_name
3961
					ORDER BY airline_count DESC";
3962
 
3963
		$sth = $this->db->prepare($query);
3964
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
3965
 
3966
		$airline_array = array();
3967
		$temp_array = array();
3968
        
3969
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3970
		{
3971
			$temp_array['airline_name'] = $row['airline_name'];
3972
			$temp_array['airline_icao'] = $row['airline_icao'];
3973
			$temp_array['airline_count'] = $row['airline_count'];
3974
			$temp_array['airline_country'] = $row['airline_country'];
3975
3976
			$airline_array[] = $temp_array;
3977
		}
3978
		return $airline_array;
3979
	}
3980
3981
3982
3983
	/**
3984
	* Gets all airline countries that have flown over by aircraft manufacturer
3985
	*
3986
	* @return Array the airline country list
3987
	*
3988
	*/
3989
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer)
3990
	{
3991
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
3992
      
3993
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3994
		 			FROM spotter_output
3995
					WHERE spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
3996
					GROUP BY spotter_output.airline_country
3997
					ORDER BY airline_country_count DESC
3998
					LIMIT 10 OFFSET 0";
3999
      
4000
		
4001
		$sth = $this->db->prepare($query);
4002
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4003
4004
		$airline_country_array = array();
4005
		$temp_array = array();
4006
        
4007
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4008
		{
4009
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4010
			$temp_array['airline_country'] = $row['airline_country'];
4011
			$airline_country_array[] = $temp_array;
4012
		}
4013
		return $airline_country_array;
4014
	}
4015
4016
4017
	/**
4018
	* Gets all airlines that have flown over by date
4019
	*
4020
	* @return Array the airline list
4021
	*
4022
	*/
4023
	public function countAllAirlinesByDate($date)
4024
	{
4025
		global $globalTimezone, $globalDBdriver;
4026
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4027
4028
		if ($globalTimezone != '') {
4029
			date_default_timezone_set($globalTimezone);
4030
			$datetime = new DateTime($date);
4031
			$offset = $datetime->format('P');
4032
		} else $offset = '+00:00';
4033
4034
		if ($globalDBdriver == 'mysql') {
4035
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4036
		 			FROM spotter_output
4037
					WHERE DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4038
					GROUP BY spotter_output.airline_name
4039
					ORDER BY airline_count DESC";
4040
		} else {
4041
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4042
		 			FROM spotter_output
4043
					WHERE to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4044
					GROUP BY spotter_output.airline_name
4045
					ORDER BY airline_count DESC";
4046
		}
4047
		
4048
		$sth = $this->db->prepare($query);
4049
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4050
4051
		$airline_array = array();
4052
		$temp_array = array();
4053
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4054
		{
4055
			$temp_array['airline_name'] = $row['airline_name'];
4056
			$temp_array['airline_icao'] = $row['airline_icao'];
4057
			$temp_array['airline_count'] = $row['airline_count'];
4058
			$temp_array['airline_country'] = $row['airline_country'];
4059
 
4060
			$airline_array[] = $temp_array;
4061
		}
4062
4063
		return $airline_array;
4064
	}	
4065
	
4066
	
4067
	/**
4068
	* Gets all airline countries that have flown over by date
4069
	*
4070
	* @return Array the airline country list
4071
	*
4072
	*/
4073
	public function countAllAirlineCountriesByDate($date)
4074
	{
4075
		global $globalTimezone, $globalDBdriver;
4076
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4077
		if ($globalTimezone != '') {
4078
			date_default_timezone_set($globalTimezone);
4079
			$datetime = new DateTime($date);
4080
			$offset = $datetime->format('P');
4081
		} else $offset = '+00:00';
4082
		
4083
		if ($globalDBdriver == 'mysql') {
4084
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4085
		 			FROM spotter_output
4086
					WHERE spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4087
					GROUP BY spotter_output.airline_country
4088
					ORDER BY airline_country_count DESC
4089
					LIMIT 10 OFFSET 0";
4090
		} else {
4091
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4092
		 			FROM spotter_output
4093
					WHERE spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4094
					GROUP BY spotter_output.airline_country
4095
					ORDER BY airline_country_count DESC
4096
					LIMIT 10 OFFSET 0";
4097
		}
4098
4099
		$sth = $this->db->prepare($query);
4100
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4101
 
4102
		$airline_country_array = array();
4103
		$temp_array = array();
4104
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4105
		{
4106
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4107
			$temp_array['airline_country'] = $row['airline_country'];
4108
4109
			$airline_country_array[] = $temp_array;
4110
		}
4111
		return $airline_country_array;
4112
	}
4113
4114
4115
	/**
4116
	* Gets all airlines that have flown over by ident/callsign
4117
	*
4118
	* @return Array the airline list
4119
	*
4120
	*/
4121
	public function countAllAirlinesByIdent($ident)
4122
	{
4123
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4124
4125
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4126
		 		FROM spotter_output
4127
				WHERE spotter_output.ident = :ident  
4128
				GROUP BY spotter_output.airline_name
4129
				ORDER BY airline_count DESC";
4130
      
4131
		
4132
		$sth = $this->db->prepare($query);
4133
		$sth->execute(array(':ident' => $ident));
4134
      
4135
		$airline_array = array();
4136
		$temp_array = array();
4137
        
4138
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4139
		{
4140
			$temp_array['airline_name'] = $row['airline_name'];
4141
			$temp_array['airline_icao'] = $row['airline_icao'];
4142
			$temp_array['airline_count'] = $row['airline_count'];
4143
			$temp_array['airline_country'] = $row['airline_country'];
4144
4145
			$airline_array[] = $temp_array;
4146
		}
4147
		return $airline_array;
4148
	}
4149
4150
	/**
4151
	* Gets all airlines that have flown over by route
4152
	*
4153
	* @return Array the airline list
4154
	*
4155
	*/
4156
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao)
4157
	{
4158
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4159
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4160
4161
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4162
		 			FROM spotter_output
4163
					WHERE (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4164
					GROUP BY spotter_output.airline_name
4165
					ORDER BY airline_count DESC";
4166
      
4167
		
4168
		$sth = $this->db->prepare($query);
4169
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4170
      
4171
		$airline_array = array();
4172
		$temp_array = array();
4173
        
4174
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4175
		{
4176
			$temp_array['airline_name'] = $row['airline_name'];
4177
			$temp_array['airline_icao'] = $row['airline_icao'];
4178
			$temp_array['airline_count'] = $row['airline_count'];
4179
			$temp_array['airline_country'] = $row['airline_country'];
4180
4181
			$airline_array[] = $temp_array;
4182
		}
4183
		return $airline_array;
4184
	}
4185
4186
	/**
4187
	* Gets all airline countries that have flown over by route
4188
	*
4189
	* @return Array the airline country list
4190
	*
4191
	*/
4192
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao)
4193
	{
4194
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4195
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4196
      
4197
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4198
		 		FROM spotter_output
4199
				WHERE spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4200
				GROUP BY spotter_output.airline_country
4201
				ORDER BY airline_country_count DESC
4202
				LIMIT 10 OFFSET 0";
4203
      
4204
		
4205
		$sth = $this->db->prepare($query);
4206
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4207
      
4208
		$airline_country_array = array();
4209
		$temp_array = array();
4210
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4211
		{
4212
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4213
			$temp_array['airline_country'] = $row['airline_country'];
4214
4215
			$airline_country_array[] = $temp_array;
4216
		}
4217
4218
		return $airline_country_array;
4219
	}
4220
4221
4222
	/**
4223
	* Gets all airlines that have flown over by country
4224
	*
4225
	* @return Array the airline list
4226
	*
4227
	*/
4228
	public function countAllAirlinesByCountry($country)
4229
	{
4230
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4231
4232
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4233
		 		FROM spotter_output
4234
				WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4235
				GROUP BY spotter_output.airline_name
4236
				ORDER BY airline_count DESC";
4237
      
4238
		
4239
		$sth = $this->db->prepare($query);
4240
		$sth->execute(array(':country' => $country));
4241
4242
		$airline_array = array();
4243
		$temp_array = array();
4244
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4245
		{
4246
			$temp_array['airline_name'] = $row['airline_name'];
4247
			$temp_array['airline_icao'] = $row['airline_icao'];
4248
			$temp_array['airline_count'] = $row['airline_count'];
4249
			$temp_array['airline_country'] = $row['airline_country'];
4250
 
4251
			$airline_array[] = $temp_array;
4252
		}
4253
		return $airline_array;
4254
	}
4255
4256
4257
	/**
4258
	* Gets all airline countries that have flown over by country
4259
	*
4260
	* @return Array the airline country list
4261
	*
4262
	*/
4263
	public function countAllAirlineCountriesByCountry($country)
4264
	{
4265
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4266
      
4267
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4268
		 		FROM spotter_output
4269
				WHERE spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
4270
				GROUP BY spotter_output.airline_country
4271
				ORDER BY airline_country_count DESC
4272
				LIMIT 10 OFFSET 0";
4273
      
4274
		
4275
		$sth = $this->db->prepare($query);
4276
		$sth->execute(array(':country' => $country));
4277
4278
		$airline_country_array = array();
4279
		$temp_array = array();
4280
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4281
		{
4282
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4283
			$temp_array['airline_country'] = $row['airline_country'];
4284
4285
			$airline_country_array[] = $temp_array;
4286
		}
4287
		return $airline_country_array;
4288
	}
4289
4290
4291
	/**
4292
	* Gets all airlines countries
4293
	*
4294
	* @return Array the airline country list
4295
	*
4296
	*/
4297
	public function countAllAirlineCountries($limit = true)
4298
	{
4299
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4300
		 			FROM spotter_output
4301
					WHERE spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA' 
4302
					GROUP BY spotter_output.airline_country
4303
					ORDER BY airline_country_count DESC";
4304
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4305
      
4306
		$sth = $this->db->prepare($query);
4307
		$sth->execute();
4308
4309
		$airline_array = array();
4310
		$temp_array = array();
4311
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4312
		{
4313
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4314
			$temp_array['airline_country'] = $row['airline_country'];
4315
4316
			$airline_array[] = $temp_array;
4317
		}
4318
		return $airline_array;
4319
	}
4320
4321
	/**
4322
	* Gets all number of flight over countries
4323
	*
4324
	* @return Array the airline country list
4325
	*
4326
	*/
4327
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '')
4328
	{
4329
		global $globalDBdriver;
4330
		/*
4331
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4332
					FROM countries c, spotter_output s
4333
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4334
		*/
4335
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4336
					FROM countries c, spotter_live s
4337
					WHERE c.iso2 = s.over_country ";
4338
                if ($olderthanmonths > 0) {
4339
			if ($globalDBdriver == 'mysql') {
4340
				$query .= 'AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4341
			} else {
4342
				$query .= "AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4343
			}
4344
		}
4345
                if ($sincedate != '') {
4346
            		if ($globalDBdriver == 'mysql') {
4347
				$query .= "AND spotter_live.date > '".$sincedate."' ";
4348
			} else {
4349
				$query .= "AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
4350
			}
4351
		}
4352
4353
		$query .= "GROUP BY c.name ORDER BY nb DESC";
4354
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4355
      
4356
		
4357
		$sth = $this->db->prepare($query);
4358
		$sth->execute();
4359
 
4360
		$flight_array = array();
4361
		$temp_array = array();
4362
        
4363
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4364
		{
4365
			$temp_array['flight_count'] = $row['nb'];
4366
			$temp_array['flight_country'] = $row['name'];
4367
			$temp_array['flight_country_iso3'] = $row['iso3'];
4368
			$temp_array['flight_country_iso2'] = $row['iso2'];
4369
			$flight_array[] = $temp_array;
4370
		}
4371
		return $flight_array;
4372
	}
4373
	
4374
	
4375
	/**
4376
	* Gets all aircraft types that have flown over
4377
	*
4378
	* @return Array the aircraft list
4379
	*
4380
	*/
4381
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4382
	{
4383
		global $globalDBdriver;
4384
		$filter_query = $this->getFilter($filters,true,true);
4385
4386
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4387
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
4388
		if ($olderthanmonths > 0) {
4389
			if ($globalDBdriver == 'mysql') {
4390
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4391
			} else {
4392
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4393
			}
4394
		}
4395
		if ($sincedate != '') {
4396
			if ($globalDBdriver == 'mysql') {
4397
				$query .= " AND spotter_output.date > '".$sincedate."'";
4398
			} else {
4399
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4400
			}
4401
		}
4402
4403
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4404
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4405
 
4406
		$sth = $this->db->prepare($query);
4407
		$sth->execute();
4408
4409
		$aircraft_array = array();
4410
		$temp_array = array();
4411
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4412
		{
4413
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4414
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4415
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4416
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4417
			$aircraft_array[] = $temp_array;
4418
		}
4419
		return $aircraft_array;
4420
	}
4421
4422
	/**
4423
	* Gets all aircraft types that have flown over by airline
4424
	*
4425
	* @return Array the aircraft list
4426
	*
4427
	*/
4428
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '')
4429
	{
4430
		global $globalDBdriver;
4431
		$query  = "SELECT spotter_output.airline_icao, spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4432
		    FROM spotter_output
4433
		    WHERE spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA' ";
4434
		if ($olderthanmonths > 0) {
4435
			if ($globalDBdriver == 'mysql') {
4436
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4437
			} else {
4438
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4439
			}
4440
		}
4441
		if ($sincedate != '') {
4442
			if ($globalDBdriver == 'mysql') {
4443
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4444
			} else {
4445
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4446
			}
4447
		}
4448
4449
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4450
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4451
 
4452
		$sth = $this->db->prepare($query);
4453
		$sth->execute();
4454
4455
		$aircraft_array = array();
4456
		$temp_array = array();
4457
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4458
		{
4459
			$temp_array['airline_icao'] = $row['airline_icao'];
4460
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4461
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4462
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4463
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4464
			$aircraft_array[] = $temp_array;
4465
		}
4466
		return $aircraft_array;
4467
	}
4468
4469
4470
	/**
4471
	* Gets all aircraft registration that have flown over by aircaft icao
4472
	*
4473
	* @return Array the aircraft list
4474
	*
4475
	*/
4476
	public function countAllAircraftRegistrationByAircraft($aircraft_icao)
4477
	{
4478
		$Image = new Image($this->db);
4479
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4480
4481
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
4482
				FROM spotter_output
4483
				WHERE spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
4484
				GROUP BY spotter_output.registration 
4485
				ORDER BY registration_count DESC";
4486
4487
		$sth = $this->db->prepare($query);
4488
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4489
4490
		$aircraft_array = array();
4491
		$temp_array = array();
4492
        
4493
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4494
		{
4495
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4496
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4497
			$temp_array['registration'] = $row['registration'];
4498
			$temp_array['airline_name'] = $row['airline_name'];
4499
			$temp_array['image_thumbnail'] = "";
4500
			if($row['registration'] != "")
4501
			{
4502
				$image_array = $Image->getSpotterImage($row['registration']);
4503
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4504
			}
4505
			$temp_array['registration_count'] = $row['registration_count'];
4506
4507
			$aircraft_array[] = $temp_array;
4508
		}
4509
		return $aircraft_array;
4510
	}
4511
4512
4513
	/**
4514
	* Gets all aircraft types that have flown over by airline icao
4515
	*
4516
	* @return Array the aircraft list
4517
	*
4518
	*/
4519
	public function countAllAircraftTypesByAirline($airline_icao)
4520
	{
4521
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4522
4523
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4524
				FROM spotter_output
4525
				WHERE spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
4526
				GROUP BY spotter_output.aircraft_name 
4527
				ORDER BY aircraft_icao_count DESC";
4528
4529
		$sth = $this->db->prepare($query);
4530
		$sth->execute(array(':airline_icao' => $airline_icao));
4531
4532
		$aircraft_array = array();
4533
		$temp_array = array();
4534
4535
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4536
		{
4537
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4538
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4539
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4540
4541
			$aircraft_array[] = $temp_array;
4542
		}
4543
		return $aircraft_array;
4544
	}
4545
4546
4547
	/**
4548
	* Gets all aircraft registration that have flown over by airline icao
4549
	*
4550
	* @return Array the aircraft list
4551
	*
4552
	*/
4553
	public function countAllAircraftRegistrationByAirline($airline_icao)
4554
	{
4555
		$Image = new Image($this->db);
4556
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4557
4558
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
4559
				FROM spotter_output
4560
				WHERE spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
4561
				GROUP BY spotter_output.registration 
4562
				ORDER BY registration_count DESC";
4563
4564
		$sth = $this->db->prepare($query);
4565
		$sth->execute(array(':airline_icao' => $airline_icao));
4566
4567
		$aircraft_array = array();
4568
		$temp_array = array();
4569
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4570
		{
4571
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4572
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4573
			$temp_array['registration'] = $row['registration'];
4574
			$temp_array['airline_name'] = $row['airline_name'];
4575
			$temp_array['image_thumbnail'] = "";
4576
			if($row['registration'] != "")
4577
			{
4578
				$image_array = $Image->getSpotterImage($row['registration']);
4579
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4580
			}
4581
			$temp_array['registration_count'] = $row['registration_count'];
4582
4583
			$aircraft_array[] = $temp_array;
4584
		}
4585
		return $aircraft_array;
4586
	}
4587
4588
4589
	/**
4590
	* Gets all aircraft manufacturer that have flown over by airline icao
4591
	*
4592
	* @return Array the aircraft list
4593
	*
4594
	*/
4595
	public function countAllAircraftManufacturerByAirline($airline_icao)
4596
	{
4597
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4598
4599
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4600
				FROM spotter_output
4601
				WHERE spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
4602
				GROUP BY spotter_output.aircraft_manufacturer 
4603
				ORDER BY aircraft_manufacturer_count DESC";
4604
4605
		$sth = $this->db->prepare($query);
4606
		$sth->execute(array(':airline_icao' => $airline_icao));
4607
4608
		$aircraft_array = array();
4609
		$temp_array = array();
4610
4611
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4612
		{
4613
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4614
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4615
4616
			$aircraft_array[] = $temp_array;
4617
		}
4618
		return $aircraft_array;
4619
	}
4620
4621
4622
	/**
4623
	* Gets all aircraft types that have flown over by airline icao
4624
	*
4625
	* @return Array the aircraft list
4626
	*
4627
	*/
4628
	public function countAllAircraftTypesByAirport($airport_icao)
4629
	{
4630
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4631
4632
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4633
				FROM spotter_output
4634
				WHERE spotter_output.aircraft_icao <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao) 
4635
				GROUP BY spotter_output.aircraft_name 
4636
				ORDER BY aircraft_icao_count DESC";
4637
 
4638
		$sth = $this->db->prepare($query);
4639
		$sth->execute(array(':airport_icao' => $airport_icao));
4640
4641
		$aircraft_array = array();
4642
		$temp_array = array();
4643
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4644
		{
4645
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4646
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4647
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4648
4649
			$aircraft_array[] = $temp_array;
4650
		}
4651
		return $aircraft_array;
4652
	}
4653
4654
4655
	/**
4656
	* Gets all aircraft registration that have flown over by airport icao
4657
	*
4658
	* @return Array the aircraft list
4659
	*
4660
	*/
4661
	public function countAllAircraftRegistrationByAirport($airport_icao)
4662
	{
4663
		$Image = new Image($this->db);
4664
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4665
4666
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
4667
                    FROM spotter_output
4668
                    WHERE spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
4669
                    GROUP BY spotter_output.registration 
4670
					ORDER BY registration_count DESC";
4671
4672
		
4673
		$sth = $this->db->prepare($query);
4674
		$sth->execute(array(':airport_icao' => $airport_icao));
4675
4676
		$aircraft_array = array();
4677
		$temp_array = array();
4678
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4679
		{
4680
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4681
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4682
			$temp_array['registration'] = $row['registration'];
4683
			$temp_array['airline_name'] = $row['airline_name'];
4684
			$temp_array['image_thumbnail'] = "";
4685
			if($row['registration'] != "")
4686
			{
4687
				$image_array = $Image->getSpotterImage($row['registration']);
4688
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4689
			}
4690
			$temp_array['registration_count'] = $row['registration_count'];
4691
			$aircraft_array[] = $temp_array;
4692
		}
4693
		return $aircraft_array;
4694
	}
4695
	
4696
	
4697
	/**
4698
	* Gets all aircraft manufacturer that have flown over by airport icao
4699
	*
4700
	* @return Array the aircraft list
4701
	*
4702
	*/
4703
	public function countAllAircraftManufacturerByAirport($airport_icao)
4704
	{
4705
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4706
4707
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4708
                    FROM spotter_output
4709
                    WHERE spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)  
4710
                    GROUP BY spotter_output.aircraft_manufacturer 
4711
					ORDER BY aircraft_manufacturer_count DESC";
4712
4713
		
4714
		$sth = $this->db->prepare($query);
4715
		$sth->execute(array(':airport_icao' => $airport_icao));
4716
4717
		$aircraft_array = array();
4718
		$temp_array = array();
4719
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4720
		{
4721
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4722
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4723
			$aircraft_array[] = $temp_array;
4724
		}
4725
		return $aircraft_array;
4726
	}
4727
4728
	/**
4729
	* Gets all aircraft types that have flown over by aircraft manufacturer
4730
	*
4731
	* @return Array the aircraft list
4732
	*
4733
	*/
4734
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer)
4735
	{
4736
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4737
4738
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4739
                    FROM spotter_output
4740
                    WHERE spotter_output.aircraft_manufacturer = :aircraft_manufacturer
4741
                    GROUP BY spotter_output.aircraft_name 
4742
					ORDER BY aircraft_icao_count DESC";
4743
4744
		$sth = $this->db->prepare($query);
4745
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4746
		$aircraft_array = array();
4747
		$temp_array = array();
4748
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4749
		{
4750
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4751
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4752
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4753
			$aircraft_array[] = $temp_array;
4754
		}
4755
		return $aircraft_array;
4756
	}
4757
4758
4759
	/**
4760
	* Gets all aircraft registration that have flown over by aircaft manufacturer
4761
	*
4762
	* @return Array the aircraft list
4763
	*
4764
	*/
4765
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer)
4766
	{
4767
		$Image = new Image($this->db);
4768
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4769
4770
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
4771
                    FROM spotter_output
4772
                    WHERE spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
4773
                    GROUP BY spotter_output.registration 
4774
					ORDER BY registration_count DESC";
4775
4776
		
4777
		$sth = $this->db->prepare($query);
4778
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4779
		$aircraft_array = array();
4780
		$temp_array = array();
4781
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4782
		{
4783
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4784
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4785
			$temp_array['registration'] = $row['registration'];
4786
			$temp_array['airline_name'] = $row['airline_name'];
4787
			$temp_array['image_thumbnail'] = "";
4788
			if($row['registration'] != "")
4789
			{
4790
				$image_array = $Image->getSpotterImage($row['registration']);
4791
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4792
			}
4793
			$temp_array['registration_count'] = $row['registration_count'];
4794
			$aircraft_array[] = $temp_array;
4795
		}
4796
		return $aircraft_array;
4797
	}
4798
4799
	/**
4800
	* Gets all aircraft types that have flown over by date
4801
	*
4802
	* @return Array the aircraft list
4803
	*
4804
	*/
4805
	public function countAllAircraftTypesByDate($date)
4806
	{
4807
		global $globalTimezone, $globalDBdriver;
4808
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4809
		if ($globalTimezone != '') {
4810
			date_default_timezone_set($globalTimezone);
4811
			$datetime = new DateTime($date);
4812
			$offset = $datetime->format('P');
4813
		} else $offset = '+00:00';
4814
4815
		if ($globalDBdriver == 'mysql') {
4816
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4817
					FROM spotter_output
4818
					WHERE DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
4819
					GROUP BY spotter_output.aircraft_name 
4820
					ORDER BY aircraft_icao_count DESC";
4821
		} else {
4822
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4823
					FROM spotter_output
4824
					WHERE to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
4825
					GROUP BY spotter_output.aircraft_name 
4826
					ORDER BY aircraft_icao_count DESC";
4827
		}
4828
		
4829
		$sth = $this->db->prepare($query);
4830
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4831
4832
		$aircraft_array = array();
4833
		$temp_array = array();
4834
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4835
		{
4836
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4837
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4838
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4839
4840
			$aircraft_array[] = $temp_array;
4841
		}
4842
		return $aircraft_array;
4843
	}
4844
4845
4846
	/**
4847
	* Gets all aircraft registration that have flown over by date
4848
	*
4849
	* @return Array the aircraft list
4850
	*
4851
	*/
4852
	public function countAllAircraftRegistrationByDate($date)
4853
	{
4854
		global $globalTimezone, $globalDBdriver;
4855
		$Image = new Image($this->db);
4856
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4857
		if ($globalTimezone != '') {
4858
			date_default_timezone_set($globalTimezone);
4859
			$datetime = new DateTime($date);
4860
			$offset = $datetime->format('P');
4861
		} else $offset = '+00:00';
4862
4863
		if ($globalDBdriver == 'mysql') {
4864
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name    
4865
					FROM spotter_output
4866
					WHERE spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4867
					GROUP BY spotter_output.registration 
4868
					ORDER BY registration_count DESC";
4869
		} else {
4870
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name    
4871
					FROM spotter_output
4872
					WHERE spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4873
					GROUP BY spotter_output.registration 
4874
					ORDER BY registration_count DESC";
4875
		}
4876
		
4877
		$sth = $this->db->prepare($query);
4878
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4879
4880
		$aircraft_array = array();
4881
		$temp_array = array();
4882
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4883
		{
4884
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4885
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4886
			$temp_array['registration'] = $row['registration'];
4887
			$temp_array['airline_name'] = $row['airline_name'];
4888
			$temp_array['image_thumbnail'] = "";
4889
			if($row['registration'] != "")
4890
			{
4891
				$image_array = $Image->getSpotterImage($row['registration']);
4892
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4893
			}
4894
			$temp_array['registration_count'] = $row['registration_count'];
4895
 
4896
			$aircraft_array[] = $temp_array;
4897
		}
4898
		return $aircraft_array;
4899
	}
4900
4901
4902
	/**
4903
	* Gets all aircraft manufacturer that have flown over by date
4904
	*
4905
	* @return Array the aircraft manufacturer list
4906
	*
4907
	*/
4908
	public function countAllAircraftManufacturerByDate($date)
4909
	{
4910
		global $globalTimezone, $globalDBdriver;
4911
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4912
		if ($globalTimezone != '') {
4913
			date_default_timezone_set($globalTimezone);
4914
			$datetime = new DateTime($date);
4915
			$offset = $datetime->format('P');
4916
		} else $offset = '+00:00';
4917
4918
		if ($globalDBdriver == 'mysql') {
4919
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4920
				FROM spotter_output
4921
				WHERE spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4922
				GROUP BY spotter_output.aircraft_manufacturer 
4923
				ORDER BY aircraft_manufacturer_count DESC";
4924
		} else {
4925
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4926
				FROM spotter_output
4927
				WHERE spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4928
				GROUP BY spotter_output.aircraft_manufacturer 
4929
				ORDER BY aircraft_manufacturer_count DESC";
4930
		}
4931
		
4932
		$sth = $this->db->prepare($query);
4933
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4934
4935
		$aircraft_array = array();
4936
		$temp_array = array();
4937
4938
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4939
		{
4940
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4941
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4942
4943
			$aircraft_array[] = $temp_array;
4944
		}
4945
		return $aircraft_array;
4946
	}
4947
4948
4949
	/**
4950
	* Gets all aircraft types that have flown over by ident/callsign
4951
	*
4952
	* @return Array the aircraft list
4953
	*
4954
	*/
4955
	public function countAllAircraftTypesByIdent($ident)
4956
	{
4957
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4958
4959
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4960
				FROM spotter_output
4961
				WHERE spotter_output.ident = :ident 
4962
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
4963
				ORDER BY aircraft_icao_count DESC";
4964
4965
		$sth = $this->db->prepare($query);
4966
		$sth->execute(array(':ident' => $ident));
4967
      
4968
		$aircraft_array = array();
4969
		$temp_array = array();
4970
4971
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4972
		{
4973
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4974
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4975
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4976
4977
			$aircraft_array[] = $temp_array;
4978
		}
4979
		return $aircraft_array;
4980
	}
4981
4982
4983
	/**
4984
	* Gets all aircraft registration that have flown over by ident/callsign
4985
	*
4986
	* @return Array the aircraft list
4987
	*
4988
	*/
4989
	public function countAllAircraftRegistrationByIdent($ident)
4990
	{
4991
		$Image = new Image($this->db);
4992
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4993
4994
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
4995
                    FROM spotter_output
4996
                    WHERE spotter_output.registration <> '' AND spotter_output.ident = :ident   
4997
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
4998
		    ORDER BY registration_count DESC";
4999
5000
		
5001
		$sth = $this->db->prepare($query);
5002
		$sth->execute(array(':ident' => $ident));
5003
      
5004
		$aircraft_array = array();
5005
		$temp_array = array();
5006
        
5007
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5008
		{
5009
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5010
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5011
			$temp_array['registration'] = $row['registration'];
5012
			$temp_array['airline_name'] = $row['airline_name'];
5013
			$temp_array['image_thumbnail'] = "";
5014
			if($row['registration'] != "")
5015
			{
5016
				$image_array = $Image->getSpotterImage($row['registration']);
5017
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5018
				else $temp_array['image_thumbnail'] = '';
5019
			}
5020
			$temp_array['registration_count'] = $row['registration_count'];
5021
			$aircraft_array[] = $temp_array;
5022
		}
5023
		return $aircraft_array;
5024
	}
5025
5026
5027
	/**
5028
	* Gets all aircraft manufacturer that have flown over by ident/callsign
5029
	*
5030
	* @return Array the aircraft manufacturer list
5031
	*
5032
	*/
5033
	public function countAllAircraftManufacturerByIdent($ident)
5034
	{
5035
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5036
5037
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5038
                    FROM spotter_output
5039
                    WHERE spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
5040
                    GROUP BY spotter_output.aircraft_manufacturer 
5041
					ORDER BY aircraft_manufacturer_count DESC";
5042
5043
		
5044
		$sth = $this->db->prepare($query);
5045
		$sth->execute(array(':ident' => $ident));
5046
		$aircraft_array = array();
5047
		$temp_array = array();
5048
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5049
		{
5050
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5051
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5052
			$aircraft_array[] = $temp_array;
5053
		}
5054
		return $aircraft_array;
5055
	}
5056
5057
5058
	/**
5059
	* Gets all aircraft types that have flown over by route
5060
	*
5061
	* @return Array the aircraft list
5062
	*
5063
	*/
5064
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao)
5065
	{
5066
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5067
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5068
		
5069
5070
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5071
                    FROM spotter_output
5072
                    WHERE (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
5073
                    GROUP BY spotter_output.aircraft_name 
5074
					ORDER BY aircraft_icao_count DESC";
5075
 
5076
		
5077
		$sth = $this->db->prepare($query);
5078
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5079
		$aircraft_array = array();
5080
		$temp_array = array();
5081
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5082
		{
5083
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5084
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5085
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5086
			$aircraft_array[] = $temp_array;
5087
		}
5088
		return $aircraft_array;
5089
	}
5090
5091
	/**
5092
	* Gets all aircraft registration that have flown over by route
5093
	*
5094
	* @return Array the aircraft list
5095
	*
5096
	*/
5097
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao)
5098
	{
5099
		$Image = new Image($this->db);
5100
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5101
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5102
5103
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name   
5104
                    FROM spotter_output
5105
                    WHERE spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)   
5106
                    GROUP BY spotter_output.registration 
5107
					ORDER BY registration_count DESC";
5108
5109
		
5110
		$sth = $this->db->prepare($query);
5111
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5112
      
5113
		$aircraft_array = array();
5114
		$temp_array = array();
5115
        
5116
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5117
		{
5118
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5119
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5120
			$temp_array['registration'] = $row['registration'];
5121
			$temp_array['airline_name'] = $row['airline_name'];
5122
			$temp_array['image_thumbnail'] = "";
5123
			if($row['registration'] != "")
5124
			{
5125
				$image_array = $Image->getSpotterImage($row['registration']);
5126
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5127
			}
5128
			$temp_array['registration_count'] = $row['registration_count'];
5129
          
5130
			$aircraft_array[] = $temp_array;
5131
		}
5132
5133
		return $aircraft_array;
5134
	}
5135
	
5136
	
5137
	/**
5138
	* Gets all aircraft manufacturer that have flown over by route
5139
	*
5140
	* @return Array the aircraft manufacturer list
5141
	*
5142
	*/
5143
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao)
5144
	{
5145
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5146
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5147
5148
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5149
                    FROM spotter_output
5150
                    WHERE spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
5151
                    GROUP BY spotter_output.aircraft_manufacturer 
5152
					ORDER BY aircraft_manufacturer_count DESC";
5153
5154
		
5155
		$sth = $this->db->prepare($query);
5156
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5157
      
5158
		$aircraft_array = array();
5159
		$temp_array = array();
5160
        
5161
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5162
		{
5163
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5164
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5165
          
5166
			$aircraft_array[] = $temp_array;
5167
		}
5168
5169
		return $aircraft_array;
5170
	}	
5171
5172
	
5173
	
5174
	
5175
	/**
5176
	* Gets all aircraft types that have flown over by country
5177
	*
5178
	* @return Array the aircraft list
5179
	*
5180
	*/
5181
	public function countAllAircraftTypesByCountry($country)
5182
	{
5183
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5184
5185
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5186
                    FROM spotter_output
5187
                    WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
5188
                    GROUP BY spotter_output.aircraft_name 
5189
					ORDER BY aircraft_icao_count DESC";
5190
 
5191
		
5192
		$sth = $this->db->prepare($query);
5193
		$sth->execute(array(':country' => $country));
5194
      
5195
		$aircraft_array = array();
5196
		$temp_array = array();
5197
        
5198
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5199
		{
5200
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5201
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5202
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5203
          
5204
			$aircraft_array[] = $temp_array;
5205
		}
5206
5207
		return $aircraft_array;
5208
	}
5209
5210
5211
	/**
5212
	* Gets all aircraft registration that have flown over by country
5213
	*
5214
	* @return Array the aircraft list
5215
	*
5216
	*/
5217
	public function countAllAircraftRegistrationByCountry($country)
5218
	{
5219
		$Image = new Image($this->db);
5220
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5221
5222
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.registration) AS registration_count, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name 
5223
                    FROM spotter_output
5224
                    WHERE spotter_output.registration <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country)    
5225
                    GROUP BY spotter_output.registration 
5226
					ORDER BY registration_count DESC";
5227
5228
		
5229
		$sth = $this->db->prepare($query);
5230
		$sth->execute(array(':country' => $country));
5231
      
5232
		$aircraft_array = array();
5233
		$temp_array = array();
5234
        
5235
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5236
		{
5237
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5238
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5239
			$temp_array['registration'] = $row['registration'];
5240
			$temp_array['airline_name'] = $row['airline_name'];
5241
			$temp_array['image_thumbnail'] = "";
5242
			if($row['registration'] != "")
5243
			{
5244
				$image_array = $Image->getSpotterImage($row['registration']);
5245
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5246
			}
5247
			$temp_array['registration_count'] = $row['registration_count'];
5248
          
5249
			$aircraft_array[] = $temp_array;
5250
		}
5251
5252
		return $aircraft_array;
5253
	}
5254
	
5255
	
5256
	/**
5257
	* Gets all aircraft manufacturer that have flown over by country
5258
	*
5259
	* @return Array the aircraft manufacturer list
5260
	*
5261
	*/
5262
	public function countAllAircraftManufacturerByCountry($country)
5263
	{
5264
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5265
5266
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5267
                    FROM spotter_output
5268
                    WHERE spotter_output.aircraft_manufacturer <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country) 
5269
                    GROUP BY spotter_output.aircraft_manufacturer 
5270
					ORDER BY aircraft_manufacturer_count DESC";
5271
5272
		
5273
		$sth = $this->db->prepare($query);
5274
		$sth->execute(array(':country' => $country));
5275
      
5276
		$aircraft_array = array();
5277
		$temp_array = array();
5278
        
5279
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5280
		{
5281
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5282
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5283
          
5284
			$aircraft_array[] = $temp_array;
5285
		}
5286
5287
		return $aircraft_array;
5288
	}	
5289
	
5290
	
5291
	
5292
	/**
5293
	* Gets all aircraft manufacturers that have flown over
5294
	*
5295
	* @return Array the aircraft list
5296
	*
5297
	*/
5298
	public function countAllAircraftManufacturers($filter = array())
5299
	{
5300
		$filter_query = $this->getFilter($filter,true,true);
5301
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5302
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
5303
                $query .= " GROUP BY spotter_output.aircraft_manufacturer
5304
					ORDER BY aircraft_manufacturer_count DESC
5305
					LIMIT 10";
5306
      
5307
		
5308
		$sth = $this->db->prepare($query);
5309
		$sth->execute();
5310
      
5311
		$manufacturer_array = array();
5312
		$temp_array = array();
5313
        
5314
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5315
		{
5316
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5317
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5318
          
5319
			$manufacturer_array[] = $temp_array;
5320
		}
5321
5322
		return $manufacturer_array;
5323
	}
5324
	
5325
	
5326
	
5327
	/**
5328
	* Gets all aircraft registrations that have flown over
5329
	*
5330
	* @return Array the aircraft list
5331
	*
5332
	*/
5333
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5334
	{
5335
		global $globalDBdriver;
5336
		$Image = new Image($this->db);
5337
		$filter_query = $this->getFilter($filters,true,true);
5338
		$query  = "SELECT DISTINCT spotter_output.registration, COUNT(spotter_output.registration) AS aircraft_registration_count, spotter_output.aircraft_icao,  spotter_output.aircraft_name, spotter_output.airline_name    
5339
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
5340
                if ($olderthanmonths > 0) {
5341
            		if ($globalDBdriver == 'mysql') {
5342
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5343
			} else {
5344
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5345
			}
5346
		}
5347
                if ($sincedate != '') {
5348
            		if ($globalDBdriver == 'mysql') {
5349
				$query .= " AND spotter_output.date > '".$sincedate."'";
5350
			} else {
5351
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5352
			}
5353
		}
5354
5355
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5356
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5357
                $query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
5358
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5359
		
5360
		$sth = $this->db->prepare($query);
5361
		$sth->execute();
5362
      
5363
		$aircraft_array = array();
5364
		$temp_array = array();
5365
        
5366
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5367
		{
5368
			$temp_array['registration'] = $row['registration'];
5369
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5370
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5371
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5372
			$temp_array['airline_name'] = $row['airline_name'];
5373
			$temp_array['image_thumbnail'] = "";
5374
			if($row['registration'] != "")
5375
			{
5376
				$image_array = $Image->getSpotterImage($row['registration']);
5377
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5378
			}
5379
          
5380
			$aircraft_array[] = $temp_array;
5381
		}
5382
5383
		return $aircraft_array;
5384
	}
5385
5386
5387
	/**
5388
	* Gets all aircraft registrations that have flown over
5389
	*
5390
	* @return Array the aircraft list
5391
	*
5392
	*/
5393
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '')
5394
	{
5395
		global $globalDBdriver;
5396
		$Image = new Image($this->db);
5397
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.registration, COUNT(spotter_output.registration) AS aircraft_registration_count, spotter_output.aircraft_icao,  spotter_output.aircraft_name, spotter_output.airline_name    
5398
                    FROM spotter_output 
5399
                    WHERE spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
5400
                if ($olderthanmonths > 0) {
5401
            		if ($globalDBdriver == 'mysql') {
5402
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5403
			} else {
5404
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5405
			}
5406
		}
5407
                if ($sincedate != '') {
5408
            		if ($globalDBdriver == 'mysql') {
5409
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5410
			} else {
5411
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5412
			}
5413
		}
5414
5415
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5416
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5417
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
5418
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5419
		
5420
		$sth = $this->db->prepare($query);
5421
		$sth->execute();
5422
      
5423
		$aircraft_array = array();
5424
		$temp_array = array();
5425
        
5426
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5427
		{
5428
			$temp_array['registration'] = $row['registration'];
5429
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5430
			$temp_array['airline_icao'] = $row['airline_icao'];
5431
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5432
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5433
			$temp_array['airline_name'] = $row['airline_name'];
5434
			$temp_array['image_thumbnail'] = "";
5435
			if($row['registration'] != "")
5436
			{
5437
				$image_array = $Image->getSpotterImage($row['registration']);
5438
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5439
			}
5440
          
5441
			$aircraft_array[] = $temp_array;
5442
		}
5443
5444
		return $aircraft_array;
5445
	}
5446
	
5447
	
5448
	/**
5449
	* Gets all departure airports of the airplanes that have flown over
5450
	*
5451
	* @return Array the airport list
5452
	*
5453
	*/
5454
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5455
	{
5456
		global $globalDBdriver;
5457
		$filter_query = $this->getFilter($filters,true,true);
5458
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5459
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA'";
5460
                if ($olderthanmonths > 0) {
5461
            		if ($globalDBdriver == 'mysql') {
5462
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5463
			} else {
5464
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5465
			}
5466
                }
5467
                if ($sincedate != '') {
5468
            		if ($globalDBdriver == 'mysql') {
5469
				$query .= " AND spotter_output.date > '".$sincedate."'";
5470
			} else {
5471
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5472
			}
5473
		}
5474
5475
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5476
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5477
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5478
				ORDER BY airport_departure_icao_count DESC";
5479
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5480
      
5481
		$sth = $this->db->prepare($query);
5482
		$sth->execute();
5483
      
5484
		$airport_array = array();
5485
		$temp_array = array();
5486
        
5487
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5488
		{
5489
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5490
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5491
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5492
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5493
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5494
          
5495
			$airport_array[] = $temp_array;
5496
		}
5497
		return $airport_array;
5498
	}
5499
5500
	/**
5501
	* Gets all departure airports of the airplanes that have flown over
5502
	*
5503
	* @return Array the airport list
5504
	*
5505
	*/
5506
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
5507
	{
5508
		global $globalDBdriver;
5509
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5510
								FROM spotter_output
5511
                    WHERE spotter_output.airline_icao <> '' AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' ";
5512
                if ($olderthanmonths > 0) {
5513
            		if ($globalDBdriver == 'mysql') {
5514
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5515
			} else {
5516
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5517
			}
5518
                }
5519
                if ($sincedate != '') {
5520
            		if ($globalDBdriver == 'mysql') {
5521
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5522
			} else {
5523
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5524
			}
5525
		}
5526
5527
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5528
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5529
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5530
				ORDER BY airport_departure_icao_count DESC";
5531
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5532
      
5533
		$sth = $this->db->prepare($query);
5534
		$sth->execute();
5535
      
5536
		$airport_array = array();
5537
		$temp_array = array();
5538
        
5539
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5540
		{
5541
			$temp_array['airline_icao'] = $row['airline_icao'];
5542
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5543
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5544
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5545
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5546
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5547
          
5548
			$airport_array[] = $temp_array;
5549
		}
5550
		return $airport_array;
5551
	}
5552
5553
	/**
5554
	* Gets all detected departure airports of the airplanes that have flown over
5555
	*
5556
	* @return Array the airport list
5557
	*
5558
	*/
5559
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5560
	{
5561
		global $globalDBdriver;
5562
		$filter_query = $this->getFilter($filters,true,true);
5563
		$query  = "SELECT DISTINCT spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country
5564
				FROM spotter_output, airport".$filter_query." spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao";
5565
                if ($olderthanmonths > 0) {
5566
            		if ($globalDBdriver == 'mysql') {
5567
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5568
			} else {
5569
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5570
			}
5571
                }
5572
                if ($sincedate != '') {
5573
            		if ($globalDBdriver == 'mysql') {
5574
				$query .= " AND spotter_output.date > '".$sincedate."'";
5575
			} else {
5576
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5577
			}
5578
		}
5579
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5580
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5581
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5582
				ORDER BY airport_departure_icao_count DESC";
5583
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5584
      
5585
		$sth = $this->db->prepare($query);
5586
		$sth->execute();
5587
      
5588
		$airport_array = array();
5589
		$temp_array = array();
5590
        
5591
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5592
		{
5593
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5594
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5595
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5596
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5597
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5598
          
5599
			$airport_array[] = $temp_array;
5600
		}
5601
		return $airport_array;
5602
	}
5603
	
5604
	/**
5605
	* Gets all detected departure airports of the airplanes that have flown over
5606
	*
5607
	* @return Array the airport list
5608
	*
5609
	*/
5610
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
5611
	{
5612
		global $globalDBdriver;
5613
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.real_departure_airport_icao AS departure_airport_icao, COUNT(spotter_output.real_departure_airport_icao) AS airport_departure_icao_count, airport.name as departure_airport_name, airport.city as departure_airport_city, airport.country as departure_airport_country
5614
				FROM spotter_output, airport
5615
                    WHERE spotter_output.airline_icao <> '' AND spotter_output.real_departure_airport_icao <> '' AND spotter_output.real_departure_airport_icao <> 'NA' AND airport.icao = spotter_output.real_departure_airport_icao ";
5616
                if ($olderthanmonths > 0) {
5617
            		if ($globalDBdriver == 'mysql') {
5618
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5619
			} else {
5620
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5621
			}
5622
                }
5623
                if ($sincedate != '') {
5624
            		if ($globalDBdriver == 'mysql') {
5625
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5626
			} else {
5627
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
5628
			}
5629
		}
5630
5631
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5632
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5633
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5634
				ORDER BY airport_departure_icao_count DESC";
5635
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5636
      
5637
		$sth = $this->db->prepare($query);
5638
		$sth->execute();
5639
      
5640
		$airport_array = array();
5641
		$temp_array = array();
5642
        
5643
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5644
		{
5645
			$temp_array['airline_icao'] = $row['airline_icao'];
5646
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5647
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5648
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5649
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5650
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5651
          
5652
			$airport_array[] = $temp_array;
5653
		}
5654
		return $airport_array;
5655
	}	
5656
	
5657
	/**
5658
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
5659
	*
5660
	* @return Array the airport list
5661
	*
5662
	*/
5663
	public function countAllDepartureAirportsByAirline($airline_icao)
5664
	{
5665
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5666
5667
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5668
								FROM spotter_output
5669
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao 
5670
                    GROUP BY spotter_output.departure_airport_icao
5671
					ORDER BY airport_departure_icao_count DESC";
5672
      
5673
		
5674
		$sth = $this->db->prepare($query);
5675
		$sth->execute(array(':airline_icao' => $airline_icao));
5676
      
5677
		$airport_array = array();
5678
		$temp_array = array();
5679
        
5680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5681
		{
5682
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5683
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5684
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5685
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5686
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5687
          
5688
			$airport_array[] = $temp_array;
5689
		}
5690
5691
		return $airport_array;
5692
	}
5693
	
5694
	
5695
	
5696
	/**
5697
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
5698
	*
5699
	* @return Array the airport list
5700
	*
5701
	*/
5702
	public function countAllDepartureAirportCountriesByAirline($airline_icao)
5703
	{
5704
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5705
					
5706
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5707
								FROM spotter_output 
5708
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
5709
                    GROUP BY spotter_output.departure_airport_country
5710
					ORDER BY airport_departure_country_count DESC";
5711
      
5712
		
5713
		$sth = $this->db->prepare($query);
5714
		$sth->execute(array(':airline_icao' => $airline_icao));
5715
      
5716
		$airport_array = array();
5717
		$temp_array = array();
5718
        
5719
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5720
		{
5721
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5722
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5723
          
5724
			$airport_array[] = $temp_array;
5725
		}
5726
5727
		return $airport_array;
5728
	}
5729
	
5730
	
5731
	
5732
	/**
5733
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
5734
	*
5735
	* @return Array the airport list
5736
	*
5737
	*/
5738
	public function countAllDepartureAirportsByAircraft($aircraft_icao)
5739
	{
5740
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5741
5742
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5743
								FROM spotter_output
5744
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao 
5745
                    GROUP BY spotter_output.departure_airport_icao
5746
					ORDER BY airport_departure_icao_count DESC";
5747
      
5748
		
5749
		$sth = $this->db->prepare($query);
5750
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5751
      
5752
		$airport_array = array();
5753
		$temp_array = array();
5754
        
5755
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5756
		{
5757
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5758
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5759
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5760
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5761
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5762
          
5763
			$airport_array[] = $temp_array;
5764
		}
5765
5766
		return $airport_array;
5767
	}
5768
	
5769
	
5770
	/**
5771
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
5772
	*
5773
	* @return Array the airport list
5774
	*
5775
	*/
5776
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao)
5777
	{
5778
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5779
					
5780
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5781
								FROM spotter_output 
5782
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
5783
                    GROUP BY spotter_output.departure_airport_country
5784
					ORDER BY airport_departure_country_count DESC";
5785
      
5786
		
5787
		$sth = $this->db->prepare($query);
5788
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5789
      
5790
		$airport_array = array();
5791
		$temp_array = array();
5792
        
5793
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5794
		{
5795
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5796
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5797
          
5798
			$airport_array[] = $temp_array;
5799
		}
5800
5801
		return $airport_array;
5802
	}
5803
	
5804
	
5805
	/**
5806
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
5807
	*
5808
	* @return Array the airport list
5809
	*
5810
	*/
5811
	public function countAllDepartureAirportsByRegistration($registration)
5812
	{
5813
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5814
5815
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5816
								FROM spotter_output
5817
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.registration = :registration 
5818
                    GROUP BY spotter_output.departure_airport_icao
5819
					ORDER BY airport_departure_icao_count DESC";
5820
      
5821
		
5822
		$sth = $this->db->prepare($query);
5823
		$sth->execute(array(':registration' => $registration));
5824
      
5825
		$airport_array = array();
5826
		$temp_array = array();
5827
        
5828
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5829
		{
5830
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5831
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5832
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5833
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5834
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5835
          
5836
			$airport_array[] = $temp_array;
5837
		}
5838
5839
		return $airport_array;
5840
	}
5841
	
5842
	
5843
	/**
5844
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
5845
	*
5846
	* @return Array the airport list
5847
	*
5848
	*/
5849
	public function countAllDepartureAirportCountriesByRegistration($registration)
5850
	{
5851
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5852
					
5853
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5854
								FROM spotter_output 
5855
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
5856
                    GROUP BY spotter_output.departure_airport_country
5857
					ORDER BY airport_departure_country_count DESC";
5858
      
5859
		
5860
		$sth = $this->db->prepare($query);
5861
		$sth->execute(array(':registration' => $registration));
5862
      
5863
		$airport_array = array();
5864
		$temp_array = array();
5865
        
5866
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5867
		{
5868
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5869
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5870
          
5871
			$airport_array[] = $temp_array;
5872
		}
5873
5874
		return $airport_array;
5875
	}
5876
	
5877
	
5878
	/**
5879
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
5880
	*
5881
	* @return Array the airport list
5882
	*
5883
	*/
5884
	public function countAllDepartureAirportsByAirport($airport_icao)
5885
	{
5886
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5887
5888
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5889
								FROM spotter_output
5890
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao = :airport_icao 
5891
                    GROUP BY spotter_output.departure_airport_icao
5892
					ORDER BY airport_departure_icao_count DESC";
5893
      
5894
		
5895
		$sth = $this->db->prepare($query);
5896
		$sth->execute(array(':airport_icao' => $airport_icao));
5897
      
5898
		$airport_array = array();
5899
		$temp_array = array();
5900
        
5901
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5902
		{
5903
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5904
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5905
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5906
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5907
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5908
          
5909
			$airport_array[] = $temp_array;
5910
		}
5911
5912
		return $airport_array;
5913
	}
5914
	
5915
	
5916
	/**
5917
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
5918
	*
5919
	* @return Array the airport list
5920
	*
5921
	*/
5922
	public function countAllDepartureAirportCountriesByAirport($airport_icao)
5923
	{
5924
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5925
					
5926
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5927
								FROM spotter_output 
5928
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
5929
                    GROUP BY spotter_output.departure_airport_country
5930
					ORDER BY airport_departure_country_count DESC";
5931
      
5932
		
5933
		$sth = $this->db->prepare($query);
5934
		$sth->execute(array(':airport_icao' => $airport_icao));
5935
      
5936
		$airport_array = array();
5937
		$temp_array = array();
5938
        
5939
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5940
		{
5941
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5942
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5943
          
5944
			$airport_array[] = $temp_array;
5945
		}
5946
5947
		return $airport_array;
5948
	}
5949
	
5950
	
5951
	
5952
	/**
5953
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
5954
	*
5955
	* @return Array the airport list
5956
	*
5957
	*/
5958
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer)
5959
	{
5960
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5961
5962
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5963
								FROM spotter_output
5964
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
5965
                    GROUP BY spotter_output.departure_airport_icao
5966
					ORDER BY airport_departure_icao_count DESC";
5967
      
5968
		
5969
		$sth = $this->db->prepare($query);
5970
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5971
      
5972
		$airport_array = array();
5973
		$temp_array = array();
5974
        
5975
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5976
		{
5977
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5978
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5979
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5980
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5981
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5982
          
5983
			$airport_array[] = $temp_array;
5984
		}
5985
5986
		return $airport_array;
5987
	}
5988
	
5989
	
5990
	/**
5991
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
5992
	*
5993
	* @return Array the airport list
5994
	*
5995
	*/
5996
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer)
5997
	{
5998
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5999
					
6000
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6001
								FROM spotter_output 
6002
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6003
                    GROUP BY spotter_output.departure_airport_country
6004
					ORDER BY airport_departure_country_count DESC";
6005
      
6006
		
6007
		$sth = $this->db->prepare($query);
6008
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6009
      
6010
		$airport_array = array();
6011
		$temp_array = array();
6012
        
6013
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6014
		{
6015
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6016
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6017
          
6018
			$airport_array[] = $temp_array;
6019
		}
6020
6021
		return $airport_array;
6022
	}
6023
	
6024
	
6025
	/**
6026
	* Gets all departure airports of the airplanes that have flown over based on a date
6027
	*
6028
	* @return Array the airport list
6029
	*
6030
	*/
6031
	public function countAllDepartureAirportsByDate($date)
6032
	{
6033
		global $globalTimezone, $globalDBdriver;
6034
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6035
6036
		if ($globalTimezone != '') {
6037
			date_default_timezone_set($globalTimezone);
6038
			$datetime = new DateTime($date);
6039
			$offset = $datetime->format('P');
6040
		} else $offset = '+00:00';
6041
6042
		if ($globalDBdriver == 'mysql') {
6043
			$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6044
					FROM spotter_output
6045
					WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
6046
					GROUP BY spotter_output.departure_airport_icao
6047
					ORDER BY airport_departure_icao_count DESC";
6048
		} else {
6049
			$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6050
					FROM spotter_output
6051
					WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
6052
					GROUP BY spotter_output.departure_airport_icao
6053
					ORDER BY airport_departure_icao_count DESC";
6054
		}
6055
6056
		$sth = $this->db->prepare($query);
6057
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6058
      
6059
		$airport_array = array();
6060
		$temp_array = array();
6061
        
6062
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6063
		{
6064
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6065
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6066
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6067
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6068
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6069
          
6070
			$airport_array[] = $temp_array;
6071
		}
6072
		return $airport_array;
6073
	}
6074
	
6075
	
6076
	
6077
	/**
6078
	* Gets all departure airports by country of the airplanes that have flown over based on a date
6079
	*
6080
	* @return Array the airport list
6081
	*
6082
	*/
6083
	public function countAllDepartureAirportCountriesByDate($date)
6084
	{
6085
		global $globalTimezone, $globalDBdriver;
6086
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6087
		if ($globalTimezone != '') {
6088
			date_default_timezone_set($globalTimezone);
6089
			$datetime = new DateTime($date);
6090
			$offset = $datetime->format('P');
6091
		} else $offset = '+00:00';
6092
6093
		if ($globalDBdriver == 'mysql') {
6094
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6095
					FROM spotter_output 
6096
					WHERE spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6097
					GROUP BY spotter_output.departure_airport_country
6098
					ORDER BY airport_departure_country_count DESC";
6099
		} else {
6100
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6101
					FROM spotter_output 
6102
					WHERE spotter_output.departure_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
6103
					GROUP BY spotter_output.departure_airport_country
6104
					ORDER BY airport_departure_country_count DESC";
6105
		}
6106
		
6107
		$sth = $this->db->prepare($query);
6108
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6109
      
6110
		$airport_array = array();
6111
		$temp_array = array();
6112
        
6113
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6114
		{
6115
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6116
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6117
          
6118
			$airport_array[] = $temp_array;
6119
		}
6120
		return $airport_array;
6121
	}
6122
	
6123
	
6124
	
6125
	/**
6126
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
6127
	*
6128
	* @return Array the airport list
6129
	*
6130
	*/
6131
	public function countAllDepartureAirportsByIdent($ident)
6132
	{
6133
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6134
6135
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6136
		    FROM spotter_output
6137
                    WHERE spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.ident = :ident 
6138
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6139
		    ORDER BY airport_departure_icao_count DESC";
6140
      
6141
		
6142
		$sth = $this->db->prepare($query);
6143
		$sth->execute(array(':ident' => $ident));
6144
      
6145
		$airport_array = array();
6146
		$temp_array = array();
6147
        
6148
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6149
		{
6150
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6151
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6152
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6153
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6154
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6155
          
6156
			$airport_array[] = $temp_array;
6157
		}
6158
6159
		return $airport_array;
6160
	}
6161
	
6162
	
6163
	
6164
	/**
6165
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
6166
	*
6167
	* @return Array the airport list
6168
	*
6169
	*/
6170
	public function countAllDepartureAirportCountriesByIdent($ident)
6171
	{
6172
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6173
					
6174
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6175
								FROM spotter_output 
6176
                    WHERE spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
6177
                    GROUP BY spotter_output.departure_airport_country
6178
					ORDER BY airport_departure_country_count DESC";
6179
      
6180
		
6181
		$sth = $this->db->prepare($query);
6182
		$sth->execute(array(':ident' => $ident));
6183
      
6184
		$airport_array = array();
6185
		$temp_array = array();
6186
        
6187
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6188
		{
6189
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6190
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6191
          
6192
			$airport_array[] = $temp_array;
6193
		}
6194
6195
		return $airport_array;
6196
	}
6197
	
6198
	
6199
	
6200
	/**
6201
	* Gets all departure airports of the airplanes that have flown over based on a country
6202
	*
6203
	* @return Array the airport list
6204
	*
6205
	*/
6206
	public function countAllDepartureAirportsByCountry($country)
6207
	{
6208
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6209
6210
		$query  = "SELECT DISTINCT spotter_output.departure_airport_icao, COUNT(spotter_output.departure_airport_icao) AS airport_departure_icao_count, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6211
								FROM spotter_output
6212
                    WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
6213
                    GROUP BY spotter_output.departure_airport_icao
6214
					ORDER BY airport_departure_icao_count DESC";
6215
      
6216
		
6217
		$sth = $this->db->prepare($query);
6218
		$sth->execute(array(':country' => $country));
6219
      
6220
		$airport_array = array();
6221
		$temp_array = array();
6222
        
6223
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6224
		{
6225
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6226
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6227
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6228
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6229
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6230
          
6231
			$airport_array[] = $temp_array;
6232
		}
6233
6234
		return $airport_array;
6235
	}
6236
6237
6238
	/**
6239
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6240
	*
6241
	* @return Array the airport list
6242
	*
6243
	*/
6244
	public function countAllDepartureAirportCountriesByCountry($country)
6245
	{
6246
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6247
					
6248
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6249
								FROM spotter_output 
6250
                    WHERE spotter_output.departure_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
6251
                    GROUP BY spotter_output.departure_airport_country
6252
					ORDER BY airport_departure_country_count DESC";
6253
      
6254
		
6255
		$sth = $this->db->prepare($query);
6256
		$sth->execute(array(':country' => $country));
6257
      
6258
		$airport_array = array();
6259
		$temp_array = array();
6260
        
6261
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6262
		{
6263
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6264
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6265
          
6266
			$airport_array[] = $temp_array;
6267
		}
6268
6269
		return $airport_array;
6270
	}
6271
	
6272
6273
	/**
6274
	* Gets all arrival airports of the airplanes that have flown over
6275
	*
6276
	* @return Array the airport list
6277
	*
6278
	*/
6279
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6280
	{
6281
		global $globalDBdriver;
6282
		$filter_query = $this->getFilter($filters,true,true);
6283
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6284
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA'";
6285
                if ($olderthanmonths > 0) {
6286
            		if ($globalDBdriver == 'mysql') {
6287
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6288
			} else {
6289
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6290
			}
6291
                if ($sincedate != '') {
6292
            		if ($globalDBdriver == 'mysql') {
6293
				$query .= " AND spotter_output.date > '".$sincedate."'";
6294
			} else {
6295
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6296
			}
6297
		}
6298
            		if ($globalDBdriver == 'mysql') {
6299
				$query .= " AND spotter_output.date > '".$sincedate."'";
6300
			} else {
6301
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6302
			}
6303
		}
6304
6305
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6306
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6307
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6308
					ORDER BY airport_arrival_icao_count DESC";
6309
		if ($limit) $query .= " LIMIT 10";
6310
      
6311
		
6312
		$sth = $this->db->prepare($query);
6313
		$sth->execute();
6314
      
6315
		$airport_array = array();
6316
		$temp_array = array();
6317
        
6318
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6319
		{
6320
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6321
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6322
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6323
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6324
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6325
          
6326
			if ($icaoaskey) {
6327
				$icao = $row['arrival_airport_icao'];
6328
				$airport_array[$icao] = $temp_array;
6329
			} else $airport_array[] = $temp_array;
6330
		}
6331
6332
		return $airport_array;
6333
	}
6334
6335
	/**
6336
	* Gets all arrival airports of the airplanes that have flown over
6337
	*
6338
	* @return Array the airport list
6339
	*
6340
	*/
6341
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false)
6342
	{
6343
		global $globalDBdriver;
6344
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6345
								FROM spotter_output 
6346
                    WHERE spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' ";
6347
                if ($olderthanmonths > 0) {
6348
            		if ($globalDBdriver == 'mysql') {
6349
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6350
			} else {
6351
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6352
			}
6353
                if ($sincedate != '') {
6354
            		if ($globalDBdriver == 'mysql') {
6355
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6356
			} else {
6357
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6358
			}
6359
		}
6360
            		if ($globalDBdriver == 'mysql') {
6361
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6362
			} else {
6363
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6364
			}
6365
		}
6366
6367
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6368
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6369
                $query .= "GROUP BY spotter_output.airline_icao,spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6370
					ORDER BY airport_arrival_icao_count DESC";
6371
		if ($limit) $query .= " LIMIT 10";
6372
      
6373
		
6374
		$sth = $this->db->prepare($query);
6375
		$sth->execute();
6376
      
6377
		$airport_array = array();
6378
		$temp_array = array();
6379
        
6380
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6381
		{
6382
			$temp_array['airline_icao'] = $row['airline_icao'];
6383
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6384
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6385
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6386
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6387
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6388
          
6389
			if ($icaoaskey) {
6390
				$icao = $row['arrival_airport_icao'];
6391
				$airport_array[$icao] = $temp_array;
6392
			} else $airport_array[] = $temp_array;
6393
		}
6394
6395
		return $airport_array;
6396
	}
6397
6398
6399
	/**
6400
	* Gets all detected arrival airports of the airplanes that have flown over
6401
	*
6402
	* @return Array the airport list
6403
	*
6404
	*/
6405
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
6406
	{
6407
		global $globalDBdriver;
6408
		$filter_query = $this->getFilter($filters,true,true);
6409
		$query  = "SELECT DISTINCT spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country 
6410
			FROM spotter_output, airport".$filter_query." spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao";
6411
                if ($olderthanmonths > 0) {
6412
            		if ($globalDBdriver == 'mysql') {
6413
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6414
			} else {
6415
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6416
			}
6417
                if ($sincedate != '') {
6418
            		if ($globalDBdriver == 'mysql') {
6419
				$query .= " AND spotter_output.date > '".$sincedate."'";
6420
			} else {
6421
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6422
			}
6423
		}
6424
            		if ($globalDBdriver == 'mysql') {
6425
				$query .= " AND spotter_output.date > '".$sincedate."'";
6426
			} else {
6427
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6428
			}
6429
		}
6430
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6431
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6432
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6433
					ORDER BY airport_arrival_icao_count DESC";
6434
		if ($limit) $query .= " LIMIT 10";
6435
      
6436
		
6437
		$sth = $this->db->prepare($query);
6438
		$sth->execute();
6439
      
6440
		$airport_array = array();
6441
		$temp_array = array();
6442
        
6443
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6444
		{
6445
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6446
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6447
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6448
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6449
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6450
          
6451
			if ($icaoaskey) {
6452
				$icao = $row['arrival_airport_icao'];
6453
				$airport_array[$icao] = $temp_array;
6454
			} else $airport_array[] = $temp_array;
6455
		}
6456
6457
		return $airport_array;
6458
	}
6459
	
6460
	/**
6461
	* Gets all detected arrival airports of the airplanes that have flown over
6462
	*
6463
	* @return Array the airport list
6464
	*
6465
	*/
6466
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false)
6467
	{
6468
		global $globalDBdriver;
6469
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.real_arrival_airport_icao as arrival_airport_icao, COUNT(spotter_output.real_arrival_airport_icao) AS airport_arrival_icao_count, airport.name AS arrival_airport_name, airport.city AS arrival_airport_city, airport.country AS arrival_airport_country 
6470
			FROM spotter_output, airport 
6471
                    WHERE spotter_output.airline_icao <> '' AND spotter_output.real_arrival_airport_icao <> '' AND spotter_output.real_arrival_airport_icao <> 'NA' AND airport.icao = spotter_output.real_arrival_airport_icao ";
6472
                if ($olderthanmonths > 0) {
6473
            		if ($globalDBdriver == 'mysql') {
6474
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6475
			} else {
6476
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6477
			}
6478
                if ($sincedate != '') {
6479
            		if ($globalDBdriver == 'mysql') {
6480
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6481
			} else {
6482
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6483
			}
6484
		}
6485
            		if ($globalDBdriver == 'mysql') {
6486
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6487
			} else {
6488
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6489
			}
6490
		}
6491
6492
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6493
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6494
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6495
					ORDER BY airport_arrival_icao_count DESC";
6496
		if ($limit) $query .= " LIMIT 10";
6497
      
6498
		
6499
		$sth = $this->db->prepare($query);
6500
		$sth->execute();
6501
      
6502
		$airport_array = array();
6503
		$temp_array = array();
6504
        
6505
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6506
		{
6507
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6508
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6509
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6510
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6511
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6512
			$temp_array['airline_icao'] = $row['airline_icao'];
6513
          
6514
			if ($icaoaskey) {
6515
				$icao = $row['arrival_airport_icao'];
6516
				$airport_array[$icao] = $temp_array;
6517
			} else $airport_array[] = $temp_array;
6518
		}
6519
6520
		return $airport_array;
6521
	}	
6522
	
6523
	/**
6524
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
6525
	*
6526
	* @return Array the airport list
6527
	*
6528
	*/
6529
	public function countAllArrivalAirportsByAirline($airline_icao)
6530
	{
6531
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6532
6533
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6534
								FROM spotter_output 
6535
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao 
6536
                    GROUP BY spotter_output.arrival_airport_icao
6537
					ORDER BY airport_arrival_icao_count DESC";
6538
      
6539
		
6540
		$sth = $this->db->prepare($query);
6541
		$sth->execute(array(':airline_icao' => $airline_icao));
6542
      
6543
		$airport_array = array();
6544
		$temp_array = array();
6545
        
6546
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6547
		{
6548
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6549
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6550
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6551
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6552
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6553
          
6554
			$airport_array[] = $temp_array;
6555
		}
6556
6557
		return $airport_array;
6558
	}
6559
	
6560
	
6561
	/**
6562
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
6563
	*
6564
	* @return Array the airport list
6565
	*
6566
	*/
6567
	public function countAllArrivalAirportCountriesByAirline($airline_icao)
6568
	{
6569
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6570
					
6571
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6572
								FROM spotter_output 
6573
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6574
                    GROUP BY spotter_output.arrival_airport_country
6575
					ORDER BY airport_arrival_country_count DESC";
6576
      
6577
		
6578
		$sth = $this->db->prepare($query);
6579
		$sth->execute(array(':airline_icao' => $airline_icao));
6580
      
6581
		$airport_array = array();
6582
		$temp_array = array();
6583
        
6584
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6585
		{
6586
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6587
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6588
          
6589
			$airport_array[] = $temp_array;
6590
		}
6591
6592
		return $airport_array;
6593
	}
6594
	
6595
	
6596
	/**
6597
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
6598
	*
6599
	* @return Array the airport list
6600
	*
6601
	*/
6602
	public function countAllArrivalAirportsByAircraft($aircraft_icao)
6603
	{
6604
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6605
6606
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6607
								FROM spotter_output 
6608
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao 
6609
                    GROUP BY spotter_output.arrival_airport_icao
6610
					ORDER BY airport_arrival_icao_count DESC";
6611
      
6612
		
6613
		$sth = $this->db->prepare($query);
6614
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6615
      
6616
		$airport_array = array();
6617
		$temp_array = array();
6618
        
6619
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6620
		{
6621
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6622
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6623
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6624
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6625
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6626
          
6627
			$airport_array[] = $temp_array;
6628
		}
6629
6630
		return $airport_array;
6631
	}
6632
	
6633
	
6634
	
6635
	/**
6636
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
6637
	*
6638
	* @return Array the airport list
6639
	*
6640
	*/
6641
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao)
6642
	{
6643
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6644
					
6645
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6646
								FROM spotter_output 
6647
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6648
                    GROUP BY spotter_output.arrival_airport_country
6649
					ORDER BY airport_arrival_country_count DESC";
6650
      
6651
		
6652
		$sth = $this->db->prepare($query);
6653
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6654
      
6655
		$airport_array = array();
6656
		$temp_array = array();
6657
        
6658
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6659
		{
6660
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6661
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6662
          
6663
			$airport_array[] = $temp_array;
6664
		}
6665
6666
		return $airport_array;
6667
	}
6668
	
6669
	
6670
	/**
6671
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
6672
	*
6673
	* @return Array the airport list
6674
	*
6675
	*/
6676
	public function countAllArrivalAirportsByRegistration($registration)
6677
	{
6678
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6679
6680
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6681
								FROM spotter_output 
6682
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.registration = :registration 
6683
                    GROUP BY spotter_output.arrival_airport_icao
6684
					ORDER BY airport_arrival_icao_count DESC";
6685
      
6686
		
6687
		$sth = $this->db->prepare($query);
6688
		$sth->execute(array(':registration' => $registration));
6689
      
6690
		$airport_array = array();
6691
		$temp_array = array();
6692
        
6693
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6694
		{
6695
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6696
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6697
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6698
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6699
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6700
          
6701
			$airport_array[] = $temp_array;
6702
		}
6703
6704
		return $airport_array;
6705
	}
6706
	
6707
	
6708
	/**
6709
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
6710
	*
6711
	* @return Array the airport list
6712
	*
6713
	*/
6714
	public function countAllArrivalAirportCountriesByRegistration($registration)
6715
	{
6716
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6717
					
6718
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6719
								FROM spotter_output 
6720
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
6721
                    GROUP BY spotter_output.arrival_airport_country
6722
					ORDER BY airport_arrival_country_count DESC";
6723
      
6724
		
6725
		$sth = $this->db->prepare($query);
6726
		$sth->execute(array(':registration' => $registration));
6727
      
6728
		$airport_array = array();
6729
		$temp_array = array();
6730
        
6731
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6732
		{
6733
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6734
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6735
          
6736
			$airport_array[] = $temp_array;
6737
		}
6738
6739
		return $airport_array;
6740
	}
6741
	
6742
	
6743
	
6744
	/**
6745
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
6746
	*
6747
	* @return Array the airport list
6748
	*
6749
	*/
6750
	public function countAllArrivalAirportsByAirport($airport_icao)
6751
	{
6752
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6753
6754
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6755
								FROM spotter_output 
6756
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.departure_airport_icao = :airport_icao 
6757
                    GROUP BY spotter_output.arrival_airport_icao
6758
					ORDER BY airport_arrival_icao_count DESC";
6759
      
6760
		
6761
		$sth = $this->db->prepare($query);
6762
		$sth->execute(array(':airport_icao' => $airport_icao));
6763
      
6764
		$airport_array = array();
6765
		$temp_array = array();
6766
        
6767
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6768
		{
6769
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6770
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6771
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6772
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6773
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6774
          
6775
			$airport_array[] = $temp_array;
6776
		}
6777
6778
		return $airport_array;
6779
	}
6780
	
6781
	
6782
	/**
6783
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
6784
	*
6785
	* @return Array the airport list
6786
	*
6787
	*/
6788
	public function countAllArrivalAirportCountriesByAirport($airport_icao)
6789
	{
6790
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6791
					
6792
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6793
								FROM spotter_output 
6794
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
6795
                    GROUP BY spotter_output.arrival_airport_country
6796
					ORDER BY airport_arrival_country_count DESC";
6797
      
6798
		
6799
		$sth = $this->db->prepare($query);
6800
		$sth->execute(array(':airport_icao' => $airport_icao));
6801
      
6802
		$airport_array = array();
6803
		$temp_array = array();
6804
        
6805
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6806
		{
6807
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6808
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6809
          
6810
			$airport_array[] = $temp_array;
6811
		}
6812
6813
		return $airport_array;
6814
	}
6815
	
6816
	
6817
	/**
6818
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
6819
	*
6820
	* @return Array the airport list
6821
	*
6822
	*/
6823
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer)
6824
	{
6825
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6826
6827
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6828
								FROM spotter_output 
6829
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6830
                    GROUP BY spotter_output.arrival_airport_icao
6831
					ORDER BY airport_arrival_icao_count DESC";
6832
      
6833
		
6834
		$sth = $this->db->prepare($query);
6835
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6836
      
6837
		$airport_array = array();
6838
		$temp_array = array();
6839
        
6840
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6841
		{
6842
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6843
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6844
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6845
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6846
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6847
          
6848
			$airport_array[] = $temp_array;
6849
		}
6850
6851
		return $airport_array;
6852
	}
6853
	
6854
	
6855
	
6856
	/**
6857
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
6858
	*
6859
	* @return Array the airport list
6860
	*
6861
	*/
6862
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer)
6863
	{
6864
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6865
					
6866
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6867
								FROM spotter_output 
6868
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6869
                    GROUP BY spotter_output.arrival_airport_country
6870
					ORDER BY airport_arrival_country_count DESC";
6871
      
6872
		
6873
		$sth = $this->db->prepare($query);
6874
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6875
      
6876
		$airport_array = array();
6877
		$temp_array = array();
6878
        
6879
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6880
		{
6881
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6882
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6883
          
6884
			$airport_array[] = $temp_array;
6885
		}
6886
6887
		return $airport_array;
6888
	}
6889
	
6890
	
6891
	
6892
	/**
6893
	* Gets all arrival airports of the airplanes that have flown over based on a date
6894
	*
6895
	* @return Array the airport list
6896
	*
6897
	*/
6898
	public function countAllArrivalAirportsByDate($date)
6899
	{
6900
		global $globalTimezone, $globalDBdriver;
6901
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6902
		if ($globalTimezone != '') {
6903
			date_default_timezone_set($globalTimezone);
6904
			$datetime = new DateTime($date);
6905
			$offset = $datetime->format('P');
6906
		} else $offset = '+00:00';
6907
6908
		if ($globalDBdriver == 'mysql') {
6909
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6910
					FROM spotter_output 
6911
					WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
6912
					GROUP BY spotter_output.arrival_airport_icao
6913
					ORDER BY airport_arrival_icao_count DESC";
6914
		} else {
6915
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6916
					FROM spotter_output 
6917
					WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
6918
					GROUP BY spotter_output.arrival_airport_icao
6919
					ORDER BY airport_arrival_icao_count DESC";
6920
		}
6921
		
6922
		$sth = $this->db->prepare($query);
6923
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6924
      
6925
		$airport_array = array();
6926
		$temp_array = array();
6927
        
6928
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6929
		{
6930
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6931
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6932
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6933
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6934
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6935
          
6936
			$airport_array[] = $temp_array;
6937
		}
6938
		return $airport_array;
6939
	}
6940
	
6941
	
6942
	
6943
	/**
6944
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
6945
	*
6946
	* @return Array the airport list
6947
	*
6948
	*/
6949
	public function countAllArrivalAirportCountriesByDate($date)
6950
	{
6951
		global $globalTimezone, $globalDBdriver;
6952
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6953
		if ($globalTimezone != '') {
6954
			date_default_timezone_set($globalTimezone);
6955
			$datetime = new DateTime($date);
6956
			$offset = $datetime->format('P');
6957
		} else $offset = '+00:00';
6958
6959
		if ($globalDBdriver == 'mysql') {
6960
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6961
					FROM spotter_output 
6962
					WHERE spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6963
					GROUP BY spotter_output.arrival_airport_country
6964
					ORDER BY airport_arrival_country_count DESC";
6965
		} else {
6966
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6967
					FROM spotter_output 
6968
					WHERE spotter_output.arrival_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
6969
					GROUP BY spotter_output.arrival_airport_country
6970
					ORDER BY airport_arrival_country_count DESC";
6971
		}
6972
		
6973
		$sth = $this->db->prepare($query);
6974
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6975
      
6976
		$airport_array = array();
6977
		$temp_array = array();
6978
        
6979
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6980
		{
6981
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6982
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6983
          
6984
			$airport_array[] = $temp_array;
6985
		}
6986
		return $airport_array;
6987
	}
6988
	
6989
	
6990
	
6991
	/**
6992
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
6993
	*
6994
	* @return Array the airport list
6995
	*
6996
	*/
6997
	public function countAllArrivalAirportsByIdent($ident)
6998
	{
6999
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7000
7001
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7002
		    FROM spotter_output 
7003
                    WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.ident = :ident  
7004
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7005
		    ORDER BY airport_arrival_icao_count DESC";
7006
      
7007
		
7008
		$sth = $this->db->prepare($query);
7009
		$sth->execute(array(':ident' => $ident));
7010
      
7011
		$airport_array = array();
7012
		$temp_array = array();
7013
        
7014
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7015
		{
7016
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7017
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7018
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7019
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7020
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7021
          
7022
			$airport_array[] = $temp_array;
7023
		}
7024
7025
		return $airport_array;
7026
	}
7027
	
7028
	
7029
	/**
7030
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
7031
	*
7032
	* @return Array the airport list
7033
	*
7034
	*/
7035
	public function countAllArrivalAirportCountriesByIdent($ident)
7036
	{
7037
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7038
					
7039
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7040
								FROM spotter_output 
7041
                    WHERE spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
7042
                    GROUP BY spotter_output.arrival_airport_country
7043
					ORDER BY airport_arrival_country_count DESC";
7044
      
7045
		
7046
		$sth = $this->db->prepare($query);
7047
		$sth->execute(array(':ident' => $ident));
7048
      
7049
		$airport_array = array();
7050
		$temp_array = array();
7051
        
7052
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7053
		{
7054
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7055
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7056
          
7057
			$airport_array[] = $temp_array;
7058
		}
7059
7060
		return $airport_array;
7061
	}
7062
	
7063
	
7064
	
7065
	/**
7066
	* Gets all arrival airports of the airplanes that have flown over based on a country
7067
	*
7068
	* @return Array the airport list
7069
	*
7070
	*/
7071
	public function countAllArrivalAirportsByCountry($country)
7072
	{
7073
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7074
7075
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_icao, COUNT(spotter_output.arrival_airport_icao) AS airport_arrival_icao_count, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7076
								FROM spotter_output 
7077
                    WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
7078
                    GROUP BY spotter_output.arrival_airport_icao
7079
					ORDER BY airport_arrival_icao_count DESC";
7080
      
7081
		
7082
		$sth = $this->db->prepare($query);
7083
		$sth->execute(array(':country' => $country));
7084
      
7085
		$airport_array = array();
7086
		$temp_array = array();
7087
        
7088
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7089
		{
7090
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7091
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7092
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7093
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7094
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7095
          
7096
			$airport_array[] = $temp_array;
7097
		}
7098
7099
		return $airport_array;
7100
	}
7101
	
7102
	
7103
	/**
7104
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
7105
	*
7106
	* @return Array the airport list
7107
	*
7108
	*/
7109
	public function countAllArrivalAirportCountriesByCountry($country)
7110
	{
7111
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7112
					
7113
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7114
								FROM spotter_output 
7115
                    WHERE spotter_output.arrival_airport_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
7116
                    GROUP BY spotter_output.arrival_airport_country
7117
					ORDER BY airport_arrival_country_count DESC";
7118
      
7119
		
7120
		$sth = $this->db->prepare($query);
7121
		$sth->execute(array(':country' => $country));
7122
      
7123
		$airport_array = array();
7124
		$temp_array = array();
7125
        
7126
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7127
		{
7128
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7129
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7130
          
7131
			$airport_array[] = $temp_array;
7132
		}
7133
7134
		return $airport_array;
7135
	}
7136
7137
7138
7139
	/**
7140
	* Counts all airport departure countries
7141
	*
7142
	* @return Array the airport departure list
7143
	*
7144
	*/
7145
	public function countAllDepartureCountries($filters = array())
7146
	{
7147
		$filter_query = $this->getFilter($filters,true,true);
7148
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7149
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA'";
7150
		$query .= " GROUP BY spotter_output.departure_airport_country
7151
					ORDER BY airport_departure_country_count DESC
7152
					LIMIT 10 OFFSET 0";
7153
      
7154
		
7155
		$sth = $this->db->prepare($query);
7156
		$sth->execute();
7157
      
7158
		$airport_array = array();
7159
		$temp_array = array();
7160
        
7161
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7162
		{
7163
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7164
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7165
          
7166
			$airport_array[] = $temp_array;
7167
		}
7168
7169
		return $airport_array;
7170
	}
7171
	
7172
	
7173
	/**
7174
	* Counts all airport arrival countries
7175
	*
7176
	* @return Array the airport arrival list
7177
	*
7178
	*/
7179
	public function countAllArrivalCountries($limit = true,$filters = array())
7180
	{
7181
		$filter_query = $this->getFilter($filters,true,true);
7182
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7183
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA'";
7184
		$query .= " GROUP BY spotter_output.arrival_airport_country
7185
					ORDER BY airport_arrival_country_count DESC";
7186
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7187
      
7188
		
7189
		$sth = $this->db->prepare($query);
7190
		$sth->execute();
7191
      
7192
		$airport_array = array();
7193
		$temp_array = array();
7194
        
7195
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7196
		{
7197
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7198
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7199
          
7200
			$airport_array[] = $temp_array;
7201
		}
7202
7203
		return $airport_array;
7204
	}
7205
7206
7207
7208
7209
7210
	/**
7211
	* Gets all route combinations
7212
	*
7213
	* @return Array the route list
7214
	*
7215
	*/
7216
	public function countAllRoutes()
7217
	{
7218
		
7219
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7220
		    FROM spotter_output
7221
                    WHERE spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> 'NA'
7222
                    GROUP BY route,spotter_output.departure_airport_icao, spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
7223
                    ORDER BY route_count DESC
7224
		    LIMIT 10 OFFSET 0";
7225
      
7226
		
7227
		$sth = $this->db->prepare($query);
7228
		$sth->execute();
7229
      
7230
		$routes_array = array();
7231
		$temp_array = array();
7232
        
7233
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7234
		{
7235
			$temp_array['route_count'] = $row['route_count'];
7236
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7237
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7238
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7239
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7240
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7241
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7242
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7243
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7244
          
7245
			$routes_array[] = $temp_array;
7246
		}
7247
7248
		return $routes_array;
7249
	}
7250
	
7251
	
7252
	
7253
	
7254
	/**
7255
	* Gets all route combinations based on an aircraft
7256
	*
7257
	* @return Array the route list
7258
	*
7259
	*/
7260
	public function countAllRoutesByAircraft($aircraft_icao)
7261
	{
7262
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7263
		
7264
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7265
								FROM spotter_output
7266
                    WHERE spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7267
                    GROUP BY route
7268
                    ORDER BY route_count DESC";
7269
      
7270
		
7271
		$sth = $this->db->prepare($query);
7272
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7273
      
7274
		$routes_array = array();
7275
		$temp_array = array();
7276
        
7277
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7278
		{
7279
			$temp_array['route_count'] = $row['route_count'];
7280
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7281
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7282
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7283
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7284
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7285
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7286
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7287
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7288
          
7289
			$routes_array[] = $temp_array;
7290
		}
7291
7292
		return $routes_array;
7293
	}
7294
	
7295
	
7296
	/**
7297
	* Gets all route combinations based on an aircraft registration
7298
	*
7299
	* @return Array the route list
7300
	*
7301
	*/
7302
	public function countAllRoutesByRegistration($registration)
7303
	{
7304
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
7305
		
7306
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7307
								FROM spotter_output
7308
                    WHERE spotter_output.ident <> '' AND spotter_output.registration = :registration 
7309
                    GROUP BY route
7310
                    ORDER BY route_count DESC";
7311
      
7312
		
7313
		$sth = $this->db->prepare($query);
7314
		$sth->execute(array(':registration' => $registration));
7315
      
7316
		$routes_array = array();
7317
		$temp_array = array();
7318
        
7319
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7320
		{
7321
			$temp_array['route_count'] = $row['route_count'];
7322
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7323
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7324
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7325
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7326
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7327
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7328
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7329
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7330
          
7331
			$routes_array[] = $temp_array;
7332
		}
7333
7334
		return $routes_array;
7335
	}
7336
	
7337
	
7338
	
7339
	/**
7340
	* Gets all route combinations based on an airline
7341
	*
7342
	* @return Array the route list
7343
	*
7344
	*/
7345
	public function countAllRoutesByAirline($airline_icao)
7346
	{
7347
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7348
		
7349
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7350
								FROM spotter_output
7351
                    WHERE spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
7352
                    GROUP BY route
7353
                    ORDER BY route_count DESC";
7354
      
7355
		
7356
		$sth = $this->db->prepare($query);
7357
		$sth->execute(array(':airline_icao' => $airline_icao));
7358
      
7359
		$routes_array = array();
7360
		$temp_array = array();
7361
        
7362
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7363
		{
7364
			$temp_array['route_count'] = $row['route_count'];
7365
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7366
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7367
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7368
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7369
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7370
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7371
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7372
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7373
          
7374
			$routes_array[] = $temp_array;
7375
		}
7376
7377
		return $routes_array;
7378
	}
7379
	
7380
	
7381
	
7382
	/**
7383
	* Gets all route combinations based on an airport
7384
	*
7385
	* @return Array the route list
7386
	*
7387
	*/
7388
	public function countAllRoutesByAirport($airport_icao)
7389
	{
7390
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7391
		
7392
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7393
								FROM spotter_output
7394
                    WHERE spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
7395
                    GROUP BY route
7396
                    ORDER BY route_count DESC";
7397
      
7398
		
7399
		$sth = $this->db->prepare($query);
7400
		$sth->execute(array(':airport_icao' => $airport_icao));
7401
      
7402
		$routes_array = array();
7403
		$temp_array = array();
7404
        
7405
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7406
		{
7407
			$temp_array['route_count'] = $row['route_count'];
7408
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7409
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7410
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7411
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7412
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7413
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7414
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7415
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7416
          
7417
			$routes_array[] = $temp_array;
7418
		}
7419
7420
		return $routes_array;
7421
	}
7422
	
7423
	
7424
	
7425
	/**
7426
	* Gets all route combinations based on an country
7427
	*
7428
	* @return Array the route list
7429
	*
7430
	*/
7431
	public function countAllRoutesByCountry($country)
7432
	{
7433
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7434
		
7435
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7436
								FROM spotter_output
7437
                    WHERE spotter_output.ident <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
7438
                    GROUP BY route
7439
                    ORDER BY route_count DESC";
7440
      
7441
		
7442
		$sth = $this->db->prepare($query);
7443
		$sth->execute(array(':country' => $country));
7444
      
7445
		$routes_array = array();
7446
		$temp_array = array();
7447
        
7448
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7449
		{
7450
			$temp_array['route_count'] = $row['route_count'];
7451
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7452
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7453
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7454
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7455
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7456
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7457
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7458
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7459
          
7460
			$routes_array[] = $temp_array;
7461
		}
7462
7463
		return $routes_array;
7464
	}
7465
7466
7467
	/**
7468
	* Gets all route combinations based on an date
7469
	*
7470
	* @return Array the route list
7471
	*
7472
	*/
7473
	public function countAllRoutesByDate($date)
7474
	{
7475
		global $globalTimezone, $globalDBdriver;
7476
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7477
		if ($globalTimezone != '') {
7478
			date_default_timezone_set($globalTimezone);
7479
			$datetime = new DateTime($date);
7480
			$offset = $datetime->format('P');
7481
		} else $offset = '+00:00';
7482
		
7483
		if ($globalDBdriver == 'mysql') {
7484
			$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7485
					FROM spotter_output
7486
					WHERE spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
7487
					GROUP BY route
7488
					ORDER BY route_count DESC";
7489
		} else {
7490
			$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7491
					FROM spotter_output
7492
					WHERE spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
7493
					GROUP BY route
7494
					ORDER BY route_count DESC";
7495
		}
7496
		
7497
		$sth = $this->db->prepare($query);
7498
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7499
      
7500
		$routes_array = array();
7501
		$temp_array = array();
7502
        
7503
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7504
		{
7505
			$temp_array['route_count'] = $row['route_count'];
7506
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7507
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7508
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7509
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7510
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7511
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7512
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7513
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7514
          
7515
			$routes_array[] = $temp_array;
7516
		}
7517
7518
		return $routes_array;
7519
	}
7520
	
7521
	
7522
	/**
7523
	* Gets all route combinations based on an ident/callsign
7524
	*
7525
	* @return Array the route list
7526
	*
7527
	*/
7528
	public function countAllRoutesByIdent($ident)
7529
	{
7530
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7531
		
7532
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7533
		    FROM spotter_output
7534
                    WHERE spotter_output.ident <> '' AND spotter_output.ident = :ident   
7535
                    GROUP BY route, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7536
                    ORDER BY route_count DESC";
7537
      
7538
		
7539
		$sth = $this->db->prepare($query);
7540
		$sth->execute(array(':ident' => $ident));
7541
      
7542
		$routes_array = array();
7543
		$temp_array = array();
7544
        
7545
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7546
		{
7547
			$temp_array['route_count'] = $row['route_count'];
7548
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7549
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7550
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7551
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7552
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7553
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7554
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7555
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7556
          
7557
			$routes_array[] = $temp_array;
7558
		}
7559
7560
		return $routes_array;
7561
	}
7562
	
7563
	
7564
	/**
7565
	* Gets all route combinations based on an manufacturer
7566
	*
7567
	* @return Array the route list
7568
	*
7569
	*/
7570
	public function countAllRoutesByManufacturer($aircraft_manufacturer)
7571
	{
7572
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7573
		
7574
		$query  = "SELECT DISTINCT concat(spotter_output.departure_airport_icao, ' - ',  spotter_output.arrival_airport_icao) AS route, count(concat(spotter_output.departure_airport_icao, ' - ', spotter_output.arrival_airport_icao)) AS route_count, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7575
		    FROM spotter_output
7576
                    WHERE spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
7577
                    GROUP BY route
7578
                    ORDER BY route_count DESC";
7579
      
7580
		
7581
		$sth = $this->db->prepare($query);
7582
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7583
      
7584
		$routes_array = array();
7585
		$temp_array = array();
7586
        
7587
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7588
		{
7589
			$temp_array['route_count'] = $row['route_count'];
7590
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7591
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7592
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7593
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7594
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7595
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7596
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7597
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7598
          
7599
			$routes_array[] = $temp_array;
7600
		}
7601
7602
		return $routes_array;
7603
	}
7604
7605
	
7606
	
7607
	/**
7608
	* Gets all route combinations with waypoints
7609
	*
7610
	* @return Array the route list
7611
	*
7612
	*/
7613
	public function countAllRoutesWithWaypoints()
7614
	{
7615
		$query  = "SELECT DISTINCT spotter_output.waypoints AS route, count(spotter_output.waypoints) AS route_count, spotter_output.spotter_id, spotter_output.departure_airport_icao, spotter_output.departure_airport_name AS airport_departure_name, spotter_output.departure_airport_city AS airport_departure_city, spotter_output.departure_airport_country AS airport_departure_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name AS airport_arrival_name, spotter_output.arrival_airport_city AS airport_arrival_city, spotter_output.arrival_airport_country AS airport_arrival_country
7616
		    FROM spotter_output
7617
                    WHERE spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
7618
                    GROUP BY route, spotter_output.spotter_id, spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country, spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7619
                    ORDER BY route_count DESC
7620
		    LIMIT 10 OFFSET 0";
7621
      
7622
		
7623
		$sth = $this->db->prepare($query);
7624
		$sth->execute();
7625
      
7626
		$routes_array = array();
7627
		$temp_array = array();
7628
        
7629
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7630
		{
7631
			$temp_array['spotter_id'] = $row['spotter_id'];
7632
			$temp_array['route_count'] = $row['route_count'];
7633
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7634
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7635
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7636
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7637
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7638
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7639
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7640
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7641
          
7642
			$routes_array[] = $temp_array;
7643
		}
7644
7645
		return $routes_array;
7646
	}
7647
	
7648
	
7649
	
7650
	
7651
	/**
7652
	* Gets all callsigns that have flown over
7653
	*
7654
	* @return Array the callsign list
7655
	*
7656
	*/
7657
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
7658
	{
7659
		global $globalDBdriver;
7660
		$filter_query = $this->getFilter($filters,true,true);
7661
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
7662
                    FROM spotter_output".$filter_query." spotter_output.ident <> '' ";
7663
		 if ($olderthanmonths > 0) {
7664
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
7665
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7666
		}
7667
		if ($sincedate != '') {
7668
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
7669
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7670
		}
7671
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7672
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7673
      		
7674
		$sth = $this->db->prepare($query);
7675
		$sth->execute();
7676
      
7677
		$callsign_array = array();
7678
		$temp_array = array();
7679
        
7680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7681
		{
7682
			$temp_array['callsign_icao'] = $row['ident'];
7683
			$temp_array['airline_name'] = $row['airline_name'];
7684
			$temp_array['airline_icao'] = $row['airline_icao'];
7685
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7686
          
7687
			$callsign_array[] = $temp_array;
7688
		}
7689
7690
		return $callsign_array;
7691
	}
7692
7693
	/**
7694
	* Gets all callsigns that have flown over
7695
	*
7696
	* @return Array the callsign list
7697
	*
7698
	*/
7699
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
7700
	{
7701
		global $globalDBdriver;
7702
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
7703
                    FROM spotter_output
7704
                    WHERE spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
7705
		 if ($olderthanmonths > 0) {
7706
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7707
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7708
		}
7709
		if ($sincedate != '') {
7710
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
7711
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
7712
		}
7713
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7714
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7715
      		
7716
		$sth = $this->db->prepare($query);
7717
		$sth->execute();
7718
      
7719
		$callsign_array = array();
7720
		$temp_array = array();
7721
        
7722
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7723
		{
7724
			$temp_array['callsign_icao'] = $row['ident'];
7725
			$temp_array['airline_name'] = $row['airline_name'];
7726
			$temp_array['airline_icao'] = $row['airline_icao'];
7727
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7728
          
7729
			$callsign_array[] = $temp_array;
7730
		}
7731
7732
		return $callsign_array;
7733
	}
7734
7735
7736
7737
7738
	/**
7739
	* Counts all dates
7740
	*
7741
	* @return Array the date list
7742
	*
7743
	*/
7744
	public function countAllDates($filters = array())
7745
	{
7746
		global $globalTimezone, $globalDBdriver;
7747
		if ($globalTimezone != '') {
7748
			date_default_timezone_set($globalTimezone);
7749
			$datetime = new DateTime();
7750
			$offset = $datetime->format('P');
7751
		} else $offset = '+00:00';
7752
7753
		if ($globalDBdriver == 'mysql') {
7754
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7755
								FROM spotter_output";
7756
			$query .= $this->getFilter($filters);
7757
			$query .= " GROUP BY date_name 
7758
								ORDER BY date_count DESC
7759
								LIMIT 10 OFFSET 0";
7760
		} else {
7761
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7762
								FROM spotter_output";
7763
			$query .= $this->getFilter($filters);
7764
			$query .= " GROUP BY date_name 
7765
								ORDER BY date_count DESC
7766
								LIMIT 10 OFFSET 0";
7767
		}
7768
      
7769
		
7770
		$sth = $this->db->prepare($query);
7771
		$sth->execute(array(':offset' => $offset));
7772
      
7773
		$date_array = array();
7774
		$temp_array = array();
7775
        
7776
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7777
		{
7778
			$temp_array['date_name'] = $row['date_name'];
7779
			$temp_array['date_count'] = $row['date_count'];
7780
7781
			$date_array[] = $temp_array;
7782
		}
7783
7784
		return $date_array;
7785
	}
7786
	
7787
	/**
7788
	* Counts all dates
7789
	*
7790
	* @return Array the date list
7791
	*
7792
	*/
7793
	public function countAllDatesByAirlines()
7794
	{
7795
		global $globalTimezone, $globalDBdriver;
7796
		if ($globalTimezone != '') {
7797
			date_default_timezone_set($globalTimezone);
7798
			$datetime = new DateTime();
7799
			$offset = $datetime->format('P');
7800
		} else $offset = '+00:00';
7801
7802
		if ($globalDBdriver == 'mysql') {
7803
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7804
								FROM spotter_output 
7805
								WHERE spotter_output.airline_icao <> '' 
7806
								GROUP BY spotter_output.airline_icao, date_name 
7807
								ORDER BY date_count DESC
7808
								LIMIT 10 OFFSET 0";
7809
		} else {
7810
			$query  = "SELECT spotter_output.airline_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7811
								FROM spotter_output 
7812
								WHERE spotter_output.airline_icao <> '' 
7813
								GROUP BY spotter_output.airline_icao, date_name 
7814
								ORDER BY date_count DESC
7815
								LIMIT 10 OFFSET 0";
7816
		}
7817
      
7818
		
7819
		$sth = $this->db->prepare($query);
7820
		$sth->execute(array(':offset' => $offset));
7821
      
7822
		$date_array = array();
7823
		$temp_array = array();
7824
        
7825
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7826
		{
7827
			$temp_array['date_name'] = $row['date_name'];
7828
			$temp_array['date_count'] = $row['date_count'];
7829
			$temp_array['airline_icao'] = $row['airline_icao'];
7830
7831
			$date_array[] = $temp_array;
7832
		}
7833
7834
		return $date_array;
7835
	}	
7836
	
7837
	/**
7838
	* Counts all dates during the last 7 days
7839
	*
7840
	* @return Array the date list
7841
	*
7842
	*/
7843
	public function countAllDatesLast7Days($filters = array())
7844
	{
7845
		global $globalTimezone, $globalDBdriver;
7846
		if ($globalTimezone != '') {
7847
			date_default_timezone_set($globalTimezone);
7848
			$datetime = new DateTime();
7849
			$offset = $datetime->format('P');
7850
		} else $offset = '+00:00';
7851
		$filter_query = $this->getFilter($filters,true,true);
7852
		if ($globalDBdriver == 'mysql') {
7853
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7854
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
7855
			$query .= " GROUP BY date_name 
7856
								ORDER BY spotter_output.date ASC";
7857
			$query_data = array(':offset' => $offset);
7858
		} else {
7859
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7860
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
7861
			$query .= " GROUP BY date_name 
7862
								ORDER BY date_name ASC";
7863
			$query_data = array(':offset' => $offset);
7864
    		}
7865
		
7866
		$sth = $this->db->prepare($query);
7867
		$sth->execute($query_data);
7868
      
7869
		$date_array = array();
7870
		$temp_array = array();
7871
        
7872
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7873
		{
7874
			$temp_array['date_name'] = $row['date_name'];
7875
			$temp_array['date_count'] = $row['date_count'];
7876
          
7877
			$date_array[] = $temp_array;
7878
		}
7879
7880
		return $date_array;
7881
	}
7882
7883
	/**
7884
	* Counts all dates during the last month
7885
	*
7886
	* @return Array the date list
7887
	*
7888
	*/
7889
	public function countAllDatesLastMonth($filters = array())
7890
	{
7891
		global $globalTimezone, $globalDBdriver;
7892
		if ($globalTimezone != '') {
7893
			date_default_timezone_set($globalTimezone);
7894
			$datetime = new DateTime();
7895
			$offset = $datetime->format('P');
7896
		} else $offset = '+00:00';
7897
		$filter_query = $this->getFilter($filters,true,true);
7898
		if ($globalDBdriver == 'mysql') {
7899
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7900
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
7901
			$query .= " GROUP BY date_name 
7902
								ORDER BY spotter_output.date ASC";
7903
			$query_data = array(':offset' => $offset);
7904
		} else {
7905
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7906
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
7907
			$query .= " GROUP BY date_name 
7908
								ORDER BY date_name ASC";
7909
			$query_data = array(':offset' => $offset);
7910
    		}
7911
		
7912
		$sth = $this->db->prepare($query);
7913
		$sth->execute($query_data);
7914
      
7915
		$date_array = array();
7916
		$temp_array = array();
7917
        
7918
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7919
		{
7920
			$temp_array['date_name'] = $row['date_name'];
7921
			$temp_array['date_count'] = $row['date_count'];
7922
          
7923
			$date_array[] = $temp_array;
7924
		}
7925
7926
		return $date_array;
7927
	}
7928
7929
7930
	/**
7931
	* Counts all dates during the last month
7932
	*
7933
	* @return Array the date list
7934
	*
7935
	*/
7936
	public function countAllDatesLastMonthByAirlines()
7937
	{
7938
		global $globalTimezone, $globalDBdriver;
7939
		if ($globalTimezone != '') {
7940
			date_default_timezone_set($globalTimezone);
7941
			$datetime = new DateTime();
7942
			$offset = $datetime->format('P');
7943
		} else $offset = '+00:00';
7944
		
7945
		if ($globalDBdriver == 'mysql') {
7946
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7947
								FROM spotter_output 
7948
								WHERE spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
7949
								GROUP BY spotter_output.airline_icao, date_name 
7950
								ORDER BY spotter_output.date ASC";
7951
			$query_data = array(':offset' => $offset);
7952
		} else {
7953
			$query  = "SELECT spotter_output.airline_icao, to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7954
								FROM spotter_output 
7955
								WHERE spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
7956
								GROUP BY spotter_output.airline_icao, date_name 
7957
								ORDER BY date_name ASC";
7958
			$query_data = array(':offset' => $offset);
7959
    		}
7960
		
7961
		$sth = $this->db->prepare($query);
7962
		$sth->execute($query_data);
7963
      
7964
		$date_array = array();
7965
		$temp_array = array();
7966
        
7967
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7968
		{
7969
			$temp_array['date_name'] = $row['date_name'];
7970
			$temp_array['date_count'] = $row['date_count'];
7971
			$temp_array['airline_icao'] = $row['airline_icao'];
7972
          
7973
			$date_array[] = $temp_array;
7974
		}
7975
7976
		return $date_array;
7977
	}
7978
	
7979
7980
	/**
7981
	* Counts all month
7982
	*
7983
	* @return Array the month list
7984
	*
7985
	*/
7986
	public function countAllMonths($filters = array())
7987
	{
7988
		global $globalTimezone, $globalDBdriver;
7989
		if ($globalTimezone != '') {
7990
			date_default_timezone_set($globalTimezone);
7991
			$datetime = new DateTime();
7992
			$offset = $datetime->format('P');
7993
		} else $offset = '+00:00';
7994
7995
		if ($globalDBdriver == 'mysql') {
7996
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
7997
								FROM spotter_output";
7998
			$query .= $this->getFilter($filters);
7999
			$query .= "GROUP BY year_name, month_name 
8000
								ORDER BY date_count DESC";
8001
		} else {
8002
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
8003
								FROM spotter_output";
8004
			$query .= $this->getFilter($filters);
8005
			$query .= " GROUP BY year_name, month_name 
8006
								ORDER BY date_count DESC";
8007
		}
8008
      
8009
		
8010
		$sth = $this->db->prepare($query);
8011
		$sth->execute(array(':offset' => $offset));
8012
      
8013
		$date_array = array();
8014
		$temp_array = array();
8015
        
8016
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8017
		{
8018
			$temp_array['month_name'] = $row['month_name'];
8019
			$temp_array['year_name'] = $row['year_name'];
8020
			$temp_array['date_count'] = $row['date_count'];
8021
8022
			$date_array[] = $temp_array;
8023
		}
8024
8025
		return $date_array;
8026
	}
8027
8028
	/**
8029
	* Counts all month
8030
	*
8031
	* @return Array the month list
8032
	*
8033
	*/
8034
	public function countAllMonthsByAirlines()
8035
	{
8036
		global $globalTimezone, $globalDBdriver;
8037
		if ($globalTimezone != '') {
8038
			date_default_timezone_set($globalTimezone);
8039
			$datetime = new DateTime();
8040
			$offset = $datetime->format('P');
8041
		} else $offset = '+00:00';
8042
8043
		if ($globalDBdriver == 'mysql') {
8044
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(*) as date_count
8045
								FROM spotter_output 
8046
								WHERE spotter_output.airline_icao <> '' 
8047
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8048
								ORDER BY date_count DESC";
8049
		} else {
8050
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
8051
								FROM spotter_output 
8052
								WHERE spotter_output.airline_icao <> '' 
8053
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8054
								ORDER BY date_count DESC";
8055
		}
8056
      
8057
		
8058
		$sth = $this->db->prepare($query);
8059
		$sth->execute(array(':offset' => $offset));
8060
      
8061
		$date_array = array();
8062
		$temp_array = array();
8063
        
8064
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8065
		{
8066
			$temp_array['month_name'] = $row['month_name'];
8067
			$temp_array['year_name'] = $row['year_name'];
8068
			$temp_array['date_count'] = $row['date_count'];
8069
			$temp_array['airline_icao'] = $row['airline_icao'];
8070
8071
			$date_array[] = $temp_array;
8072
		}
8073
8074
		return $date_array;
8075
	}
8076
8077
	/**
8078
	* Counts all military month
8079
	*
8080
	* @return Array the month list
8081
	*
8082
	*/
8083
	public function countAllMilitaryMonths()
8084
	{
8085
		global $globalTimezone, $globalDBdriver;
8086
		if ($globalTimezone != '') {
8087
			date_default_timezone_set($globalTimezone);
8088
			$datetime = new DateTime();
8089
			$offset = $datetime->format('P');
8090
		} else $offset = '+00:00';
8091
8092
		if ($globalDBdriver == 'mysql') {
8093
			$query  = "SELECT YEAR(CONVERT_TZ(s.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(s.date,'+00:00', :offset)) AS month_name, count(*) as date_count
8094
								FROM spotter_output s
8095
								WHERE s.airline_type = 'military'
8096
								GROUP BY year_name, month_name 
8097
								ORDER BY date_count DESC";
8098
		} else {
8099
			$query  = "SELECT EXTRACT(YEAR FROM s.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM s.date AT TIME ZONE INTERVAL :offset) AS month_name, count(*) as date_count
8100
								FROM spotter_output s
8101
								WHERE s.airline_type = 'military'
8102
								GROUP BY year_name, month_name 
8103
								ORDER BY date_count DESC";
8104
		}
8105
		
8106
		$sth = $this->db->prepare($query);
8107
		$sth->execute(array(':offset' => $offset));
8108
      
8109
		$date_array = array();
8110
		$temp_array = array();
8111
        
8112
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8113
		{
8114
			$temp_array['month_name'] = $row['month_name'];
8115
			$temp_array['year_name'] = $row['year_name'];
8116
			$temp_array['date_count'] = $row['date_count'];
8117
8118
			$date_array[] = $temp_array;
8119
		}
8120
8121
		return $date_array;
8122
	}
8123
	
8124
	/**
8125
	* Counts all month owners
8126
	*
8127
	* @return Array the month list
8128
	*
8129
	*/
8130
	public function countAllMonthsOwners()
8131
	{
8132
		global $globalTimezone, $globalDBdriver;
8133
		if ($globalTimezone != '') {
8134
			date_default_timezone_set($globalTimezone);
8135
			$datetime = new DateTime();
8136
			$offset = $datetime->format('P');
8137
		} else $offset = '+00:00';
8138
8139
		if ($globalDBdriver == 'mysql') {
8140
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct owner_name) as date_count
8141
								FROM spotter_output 
8142
								WHERE owner_name <> ''
8143
								GROUP BY year_name, month_name
8144
								ORDER BY date_count DESC";
8145
		} else {
8146
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct owner_name) as date_count
8147
								FROM spotter_output 
8148
								WHERE owner_name <> ''
8149
								GROUP BY year_name, month_name
8150
								ORDER BY date_count DESC";
8151
		}
8152
		
8153
		$sth = $this->db->prepare($query);
8154
		$sth->execute(array(':offset' => $offset));
8155
      
8156
		$date_array = array();
8157
		$temp_array = array();
8158
        
8159
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8160
		{
8161
			$temp_array['month_name'] = $row['month_name'];
8162
			$temp_array['year_name'] = $row['year_name'];
8163
			$temp_array['date_count'] = $row['date_count'];
8164
8165
			$date_array[] = $temp_array;
8166
		}
8167
8168
		return $date_array;
8169
	}
8170
	
8171
	/**
8172
	* Counts all month owners
8173
	*
8174
	* @return Array the month list
8175
	*
8176
	*/
8177
	public function countAllMonthsOwnersByAirlines()
8178
	{
8179
		global $globalTimezone, $globalDBdriver;
8180
		if ($globalTimezone != '') {
8181
			date_default_timezone_set($globalTimezone);
8182
			$datetime = new DateTime();
8183
			$offset = $datetime->format('P');
8184
		} else $offset = '+00:00';
8185
8186
		if ($globalDBdriver == 'mysql') {
8187
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct owner_name) as date_count
8188
								FROM spotter_output 
8189
								WHERE owner_name <> '' AND spotter_output.airline_icao <> '' 
8190
								GROUP BY spotter_output.airline_icao, year_name, month_name
8191
								ORDER BY date_count DESC";
8192
		} else {
8193
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct owner_name) as date_count
8194
								FROM spotter_output 
8195
								WHERE owner_name <> '' AND spotter_output.airline_icao <> '' 
8196
								GROUP BY spotter_output.airline_icao, year_name, month_name
8197
								ORDER BY date_count DESC";
8198
		}
8199
		
8200
		$sth = $this->db->prepare($query);
8201
		$sth->execute(array(':offset' => $offset));
8202
      
8203
		$date_array = array();
8204
		$temp_array = array();
8205
        
8206
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8207
		{
8208
			$temp_array['month_name'] = $row['month_name'];
8209
			$temp_array['year_name'] = $row['year_name'];
8210
			$temp_array['date_count'] = $row['date_count'];
8211
			$temp_array['airline_icao'] = $row['airline_icao'];
8212
8213
			$date_array[] = $temp_array;
8214
		}
8215
8216
		return $date_array;
8217
	}
8218
8219
	/**
8220
	* Counts all month pilot
8221
	*
8222
	* @return Array the month list
8223
	*
8224
	*/
8225
	public function countAllMonthsPilots()
8226
	{
8227
		global $globalTimezone, $globalDBdriver;
8228
		if ($globalTimezone != '') {
8229
			date_default_timezone_set($globalTimezone);
8230
			$datetime = new DateTime();
8231
			$offset = $datetime->format('P');
8232
		} else $offset = '+00:00';
8233
8234
		if ($globalDBdriver == 'mysql') {
8235
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct pilot_id) as date_count
8236
								FROM spotter_output 
8237
								WHERE pilot_id <> '' AND pilot_id IS NOT NULL
8238
								GROUP BY year_name, month_name
8239
								ORDER BY date_count DESC";
8240
		} else {
8241
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct pilot_id) as date_count
8242
								FROM spotter_output 
8243
								WHERE pilot_id <> '' AND pilot_id IS NOT NULL
8244
								GROUP BY year_name, month_name
8245
								ORDER BY date_count DESC";
8246
		}
8247
		
8248
		$sth = $this->db->prepare($query);
8249
		$sth->execute(array(':offset' => $offset));
8250
      
8251
		$date_array = array();
8252
		$temp_array = array();
8253
        
8254
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8255
		{
8256
			$temp_array['month_name'] = $row['month_name'];
8257
			$temp_array['year_name'] = $row['year_name'];
8258
			$temp_array['date_count'] = $row['date_count'];
8259
8260
			$date_array[] = $temp_array;
8261
		}
8262
8263
		return $date_array;
8264
	}
8265
	
8266
	/**
8267
	* Counts all month pilot
8268
	*
8269
	* @return Array the month list
8270
	*
8271
	*/
8272
	public function countAllMonthsPilotsByAirlines()
8273
	{
8274
		global $globalTimezone, $globalDBdriver;
8275
		if ($globalTimezone != '') {
8276
			date_default_timezone_set($globalTimezone);
8277
			$datetime = new DateTime();
8278
			$offset = $datetime->format('P');
8279
		} else $offset = '+00:00';
8280
8281
		if ($globalDBdriver == 'mysql') {
8282
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct pilot_id) as date_count
8283
								FROM spotter_output 
8284
								WHERE spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8285
								GROUP BY spotter_output.airline_icao,year_name, month_name
8286
								ORDER BY date_count DESC";
8287
		} else {
8288
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct pilot_id) as date_count
8289
								FROM spotter_output 
8290
								WHERE spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8291
								GROUP BY spotter_output.airline_icao, year_name, month_name
8292
								ORDER BY date_count DESC";
8293
		}
8294
		
8295
		$sth = $this->db->prepare($query);
8296
		$sth->execute(array(':offset' => $offset));
8297
      
8298
		$date_array = array();
8299
		$temp_array = array();
8300
        
8301
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8302
		{
8303
			$temp_array['month_name'] = $row['month_name'];
8304
			$temp_array['year_name'] = $row['year_name'];
8305
			$temp_array['date_count'] = $row['date_count'];
8306
			$temp_array['airline_icao'] = $row['airline_icao'];
8307
8308
			$date_array[] = $temp_array;
8309
		}
8310
8311
		return $date_array;
8312
	}
8313
8314
	/**
8315
	* Counts all month airline
8316
	*
8317
	* @return Array the month list
8318
	*
8319
	*/
8320
	public function countAllMonthsAirlines()
8321
	{
8322
		global $globalTimezone, $globalDBdriver;
8323
		if ($globalTimezone != '') {
8324
			date_default_timezone_set($globalTimezone);
8325
			$datetime = new DateTime();
8326
			$offset = $datetime->format('P');
8327
		} else $offset = '+00:00';
8328
8329
		if ($globalDBdriver == 'mysql') {
8330
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct airline_icao) as date_count
8331
								FROM spotter_output 
8332
								WHERE airline_icao <> '' 
8333
								GROUP BY year_name, month_name
8334
								ORDER BY date_count DESC";
8335
		} else {
8336
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct airline_icao) as date_count
8337
								FROM spotter_output 
8338
								WHERE airline_icao <> '' 
8339
								GROUP BY year_name, month_name
8340
								ORDER BY date_count DESC";
8341
		}
8342
		
8343
		$sth = $this->db->prepare($query);
8344
		$sth->execute(array(':offset' => $offset));
8345
      
8346
		$date_array = array();
8347
		$temp_array = array();
8348
        
8349
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8350
		{
8351
			$temp_array['month_name'] = $row['month_name'];
8352
			$temp_array['year_name'] = $row['year_name'];
8353
			$temp_array['date_count'] = $row['date_count'];
8354
8355
			$date_array[] = $temp_array;
8356
		}
8357
8358
		return $date_array;
8359
	}
8360
	
8361
	/**
8362
	* Counts all month aircraft
8363
	*
8364
	* @return Array the month list
8365
	*
8366
	*/
8367
	public function countAllMonthsAircrafts()
8368
	{
8369
		global $globalTimezone, $globalDBdriver;
8370
		if ($globalTimezone != '') {
8371
			date_default_timezone_set($globalTimezone);
8372
			$datetime = new DateTime();
8373
			$offset = $datetime->format('P');
8374
		} else $offset = '+00:00';
8375
8376
		if ($globalDBdriver == 'mysql') {
8377
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct aircraft_icao) as date_count
8378
								FROM spotter_output 
8379
								WHERE aircraft_icao <> '' 
8380
								GROUP BY year_name, month_name
8381
								ORDER BY date_count DESC";
8382
		} else {
8383
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct aircraft_icao) as date_count
8384
								FROM spotter_output 
8385
								WHERE aircraft_icao <> '' 
8386
								GROUP BY year_name, month_name
8387
								ORDER BY date_count DESC";
8388
		}
8389
		
8390
		$sth = $this->db->prepare($query);
8391
		$sth->execute(array(':offset' => $offset));
8392
      
8393
		$date_array = array();
8394
		$temp_array = array();
8395
        
8396
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8397
		{
8398
			$temp_array['month_name'] = $row['month_name'];
8399
			$temp_array['year_name'] = $row['year_name'];
8400
			$temp_array['date_count'] = $row['date_count'];
8401
8402
			$date_array[] = $temp_array;
8403
		}
8404
8405
		return $date_array;
8406
	}
8407
	
8408
8409
	/**
8410
	* Counts all month aircraft
8411
	*
8412
	* @return Array the month list
8413
	*
8414
	*/
8415
	public function countAllMonthsAircraftsByAirlines()
8416
	{
8417
		global $globalTimezone, $globalDBdriver;
8418
		if ($globalTimezone != '') {
8419
			date_default_timezone_set($globalTimezone);
8420
			$datetime = new DateTime();
8421
			$offset = $datetime->format('P');
8422
		} else $offset = '+00:00';
8423
8424
		if ($globalDBdriver == 'mysql') {
8425
			$query  = "SELECT spotter_output.airline_icao,YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(distinct aircraft_icao) as date_count
8426
								FROM spotter_output 
8427
								WHERE aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
8428
								GROUP BY spotter_output.airline_icao, year_name, month_name
8429
								ORDER BY date_count DESC";
8430
		} else {
8431
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(distinct aircraft_icao) as date_count
8432
								FROM spotter_output 
8433
								WHERE aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
8434
								GROUP BY spotter_output.airline_icao, year_name, month_name
8435
								ORDER BY date_count DESC";
8436
		}
8437
		
8438
		$sth = $this->db->prepare($query);
8439
		$sth->execute(array(':offset' => $offset));
8440
      
8441
		$date_array = array();
8442
		$temp_array = array();
8443
        
8444
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8445
		{
8446
			$temp_array['month_name'] = $row['month_name'];
8447
			$temp_array['year_name'] = $row['year_name'];
8448
			$temp_array['date_count'] = $row['date_count'];
8449
			$temp_array['airline_icao'] = $row['airline_icao'];
8450
8451
			$date_array[] = $temp_array;
8452
		}
8453
8454
		return $date_array;
8455
	}
8456
8457
	/**
8458
	* Counts all month real arrival
8459
	*
8460
	* @return Array the month list
8461
	*
8462
	*/
8463
	public function countAllMonthsRealArrivals()
8464
	{
8465
		global $globalTimezone, $globalDBdriver;
8466
		if ($globalTimezone != '') {
8467
			date_default_timezone_set($globalTimezone);
8468
			$datetime = new DateTime();
8469
			$offset = $datetime->format('P');
8470
		} else $offset = '+00:00';
8471
8472
		if ($globalDBdriver == 'mysql') {
8473
			$query  = "SELECT YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(real_arrival_airport_icao) as date_count
8474
								FROM spotter_output 
8475
								WHERE real_arrival_airport_icao <> '' 
8476
								GROUP BY year_name, month_name
8477
								ORDER BY date_count DESC";
8478
		} else {
8479
			$query  = "SELECT EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(real_arrival_airport_icao) as date_count
8480
								FROM spotter_output 
8481
								WHERE real_arrival_airport_icao <> '' 
8482
								GROUP BY year_name, month_name
8483
								ORDER BY date_count DESC";
8484
		}
8485
		
8486
		$sth = $this->db->prepare($query);
8487
		$sth->execute(array(':offset' => $offset));
8488
      
8489
		$date_array = array();
8490
		$temp_array = array();
8491
        
8492
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8493
		{
8494
			$temp_array['month_name'] = $row['month_name'];
8495
			$temp_array['year_name'] = $row['year_name'];
8496
			$temp_array['date_count'] = $row['date_count'];
8497
8498
			$date_array[] = $temp_array;
8499
		}
8500
8501
		return $date_array;
8502
	}
8503
	
8504
8505
	/**
8506
	* Counts all month real arrival
8507
	*
8508
	* @return Array the month list
8509
	*
8510
	*/
8511
	public function countAllMonthsRealArrivalsByAirlines()
8512
	{
8513
		global $globalTimezone, $globalDBdriver;
8514
		if ($globalTimezone != '') {
8515
			date_default_timezone_set($globalTimezone);
8516
			$datetime = new DateTime();
8517
			$offset = $datetime->format('P');
8518
		} else $offset = '+00:00';
8519
8520
		if ($globalDBdriver == 'mysql') {
8521
			$query  = "SELECT spotter_output.airline_icao, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name,MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, count(real_arrival_airport_icao) as date_count
8522
								FROM spotter_output 
8523
								WHERE real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
8524
								GROUP BY spotter_output.airline_icao, year_name, month_name
8525
								ORDER BY date_count DESC";
8526
		} else {
8527
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name,EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, count(real_arrival_airport_icao) as date_count
8528
								FROM spotter_output 
8529
								WHERE real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
8530
								GROUP BY spotter_output.airline_icao, year_name, month_name
8531
								ORDER BY date_count DESC";
8532
		}
8533
		
8534
		$sth = $this->db->prepare($query);
8535
		$sth->execute(array(':offset' => $offset));
8536
      
8537
		$date_array = array();
8538
		$temp_array = array();
8539
        
8540
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8541
		{
8542
			$temp_array['month_name'] = $row['month_name'];
8543
			$temp_array['year_name'] = $row['year_name'];
8544
			$temp_array['date_count'] = $row['date_count'];
8545
			$temp_array['airline_icao'] = $row['airline_icao'];
8546
8547
			$date_array[] = $temp_array;
8548
		}
8549
8550
		return $date_array;
8551
	}
8552
	
8553
8554
	/**
8555
	* Counts all dates during the last year
8556
	*
8557
	* @return Array the date list
8558
	*
8559
	*/
8560
	public function countAllMonthsLastYear($filters)
8561
	{
8562
		global $globalTimezone, $globalDBdriver;
8563
		if ($globalTimezone != '') {
8564
			date_default_timezone_set($globalTimezone);
8565
			$datetime = new DateTime();
8566
			$offset = $datetime->format('P');
8567
		} else $offset = '+00:00';
8568
		$filter_query = $this->getFilter($filters,true,true);
8569
		if ($globalDBdriver == 'mysql') {
8570
			$query  = "SELECT MONTH(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS month_name, YEAR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS year_name, count(*) as date_count
8571
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
8572
			$query .= " GROUP BY year_name, month_name
8573
								ORDER BY year_name, month_name ASC";
8574
			$query_data = array(':offset' => $offset);
8575
		} else {
8576
			$query  = "SELECT EXTRACT(MONTH FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS month_name, EXTRACT(YEAR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS year_name, count(*) as date_count
8577
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
8578
			$query .= " GROUP BY year_name, month_name
8579
								ORDER BY year_name, month_name ASC";
8580
			$query_data = array(':offset' => $offset);
8581
    		}
8582
		
8583
		$sth = $this->db->prepare($query);
8584
		$sth->execute($query_data);
8585
      
8586
		$date_array = array();
8587
		$temp_array = array();
8588
        
8589
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8590
		{
8591
			$temp_array['year_name'] = $row['year_name'];
8592
			$temp_array['month_name'] = $row['month_name'];
8593
			$temp_array['date_count'] = $row['date_count'];
8594
          
8595
			$date_array[] = $temp_array;
8596
		}
8597
8598
		return $date_array;
8599
	}
8600
	
8601
	
8602
	
8603
	/**
8604
	* Counts all hours
8605
	*
8606
	* @return Array the hour list
8607
	*
8608
	*/
8609
	public function countAllHours($orderby,$filters = array())
8610
	{
8611
		global $globalTimezone, $globalDBdriver;
8612
		if ($globalTimezone != '') {
8613
			date_default_timezone_set($globalTimezone);
8614
			$datetime = new DateTime();
8615
			$offset = $datetime->format('P');
8616
		} else $offset = '+00:00';
8617
8618
		$orderby_sql = '';
8619
		if ($orderby == "hour")
8620
		{
8621
			$orderby_sql = "ORDER BY hour_name ASC";
8622
		}
8623
		if ($orderby == "count")
8624
		{
8625
			$orderby_sql = "ORDER BY hour_count DESC";
8626
		}
8627
		
8628
		if ($globalDBdriver == 'mysql') {
8629
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8630
								FROM spotter_output";
8631
			$query .= $this->getFilter($filters);
8632
			$query .= " GROUP BY hour_name 
8633
								".$orderby_sql;
8634
8635
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
8636
								FROM spotter_output 
8637
								GROUP BY hour_name 
8638
								".$orderby_sql."
8639
								LIMIT 10 OFFSET 00";
8640
  */    
8641
		$query_data = array(':offset' => $offset);
8642
		} else {
8643
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8644
								FROM spotter_output";
8645
			$query .= $this->getFilter($filters);
8646
			$query .= " GROUP BY hour_name 
8647
								".$orderby_sql;
8648
			$query_data = array(':offset' => $offset);
8649
		}
8650
		
8651
		$sth = $this->db->prepare($query);
8652
		$sth->execute($query_data);
8653
      
8654
		$hour_array = array();
8655
		$temp_array = array();
8656
        
8657
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8658
		{
8659
			$temp_array['hour_name'] = $row['hour_name'];
8660
			$temp_array['hour_count'] = $row['hour_count'];
8661
          
8662
			$hour_array[] = $temp_array;
8663
		}
8664
8665
		return $hour_array;
8666
	}
8667
	
8668
	/**
8669
	* Counts all hours
8670
	*
8671
	* @return Array the hour list
8672
	*
8673
	*/
8674
	public function countAllHoursByAirlines($orderby)
8675
	{
8676
		global $globalTimezone, $globalDBdriver;
8677
		if ($globalTimezone != '') {
8678
			date_default_timezone_set($globalTimezone);
8679
			$datetime = new DateTime();
8680
			$offset = $datetime->format('P');
8681
		} else $offset = '+00:00';
8682
8683
		$orderby_sql = '';
8684
		if ($orderby == "hour")
8685
		{
8686
			$orderby_sql = "ORDER BY hour_name ASC";
8687
		}
8688
		if ($orderby == "count")
8689
		{
8690
			$orderby_sql = "ORDER BY hour_count DESC";
8691
		}
8692
		
8693
		if ($globalDBdriver == 'mysql') {
8694
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8695
								FROM spotter_output 
8696
								WHERE spotter_output.airline_icao <> '' 
8697
								GROUP BY spotter_output.airline_icao, hour_name 
8698
								".$orderby_sql;
8699
8700
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
8701
								FROM spotter_output 
8702
								GROUP BY hour_name 
8703
								".$orderby_sql."
8704
								LIMIT 10 OFFSET 00";
8705
  */    
8706
		$query_data = array(':offset' => $offset);
8707
		} else {
8708
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8709
								FROM spotter_output 
8710
								WHERE spotter_output.airline_icao <> '' 
8711
								GROUP BY spotter_output.airline_icao, hour_name 
8712
								".$orderby_sql;
8713
			$query_data = array(':offset' => $offset);
8714
		}
8715
		
8716
		$sth = $this->db->prepare($query);
8717
		$sth->execute($query_data);
8718
      
8719
		$hour_array = array();
8720
		$temp_array = array();
8721
        
8722
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8723
		{
8724
			$temp_array['hour_name'] = $row['hour_name'];
8725
			$temp_array['hour_count'] = $row['hour_count'];
8726
			$temp_array['airline_icao'] = $row['airline_icao'];
8727
          
8728
			$hour_array[] = $temp_array;
8729
		}
8730
8731
		return $hour_array;
8732
	}
8733
8734
8735
8736
	/**
8737
	* Counts all hours by airline
8738
	*
8739
	* @return Array the hour list
8740
	*
8741
	*/
8742
	public function countAllHoursByAirline($airline_icao)
8743
	{
8744
		global $globalTimezone, $globalDBdriver;
8745
		if ($globalTimezone != '') {
8746
			date_default_timezone_set($globalTimezone);
8747
			$datetime = new DateTime();
8748
			$offset = $datetime->format('P');
8749
		} else $offset = '+00:00';
8750
8751
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8752
8753
		if ($globalDBdriver == 'mysql') {
8754
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8755
								FROM spotter_output 
8756
								WHERE spotter_output.airline_icao = :airline_icao
8757
								GROUP BY hour_name 
8758
								ORDER BY hour_name ASC";
8759
		} else {
8760
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8761
								FROM spotter_output 
8762
								WHERE spotter_output.airline_icao = :airline_icao
8763
								GROUP BY hour_name 
8764
								ORDER BY hour_name ASC";
8765
		}
8766
		
8767
		$sth = $this->db->prepare($query);
8768
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
8769
      
8770
		$hour_array = array();
8771
		$temp_array = array();
8772
        
8773
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8774
		{
8775
			$temp_array['hour_name'] = $row['hour_name'];
8776
			$temp_array['hour_count'] = $row['hour_count'];
8777
          
8778
			$hour_array[] = $temp_array;
8779
		}
8780
8781
		return $hour_array;
8782
	}
8783
	
8784
	
8785
	
8786
	
8787
	/**
8788
	* Counts all hours by aircraft
8789
	*
8790
	* @return Array the hour list
8791
	*
8792
	*/
8793
	public function countAllHoursByAircraft($aircraft_icao)
8794
	{
8795
		global $globalTimezone, $globalDBdriver;
8796
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8797
		if ($globalTimezone != '') {
8798
			date_default_timezone_set($globalTimezone);
8799
			$datetime = new DateTime();
8800
			$offset = $datetime->format('P');
8801
		} else $offset = '+00:00';
8802
8803
		if ($globalDBdriver == 'mysql') {
8804
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8805
								FROM spotter_output 
8806
								WHERE spotter_output.aircraft_icao = :aircraft_icao
8807
								GROUP BY hour_name 
8808
								ORDER BY hour_name ASC";
8809
		} else {
8810
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8811
								FROM spotter_output 
8812
								WHERE spotter_output.aircraft_icao = :aircraft_icao
8813
								GROUP BY hour_name 
8814
								ORDER BY hour_name ASC";
8815
		}
8816
		
8817
		$sth = $this->db->prepare($query);
8818
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
8819
      
8820
		$hour_array = array();
8821
		$temp_array = array();
8822
        
8823
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8824
		{
8825
			$temp_array['hour_name'] = $row['hour_name'];
8826
			$temp_array['hour_count'] = $row['hour_count'];
8827
          
8828
			$hour_array[] = $temp_array;
8829
		}
8830
8831
		return $hour_array;
8832
	}
8833
	
8834
	
8835
	/**
8836
	* Counts all hours by aircraft registration
8837
	*
8838
	* @return Array the hour list
8839
	*
8840
	*/
8841
	public function countAllHoursByRegistration($registration)
8842
	{
8843
		global $globalTimezone, $globalDBdriver;
8844
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8845
		if ($globalTimezone != '') {
8846
			date_default_timezone_set($globalTimezone);
8847
			$datetime = new DateTime();
8848
			$offset = $datetime->format('P');
8849
		} else $offset = '+00:00';
8850
8851
		if ($globalDBdriver == 'mysql') {
8852
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8853
								FROM spotter_output 
8854
								WHERE spotter_output.registration = :registration
8855
								GROUP BY hour_name 
8856
								ORDER BY hour_name ASC";
8857
		} else {
8858
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8859
								FROM spotter_output 
8860
								WHERE spotter_output.registration = :registration
8861
								GROUP BY hour_name 
8862
								ORDER BY hour_name ASC";
8863
		}
8864
		
8865
		$sth = $this->db->prepare($query);
8866
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
8867
      
8868
		$hour_array = array();
8869
		$temp_array = array();
8870
        
8871
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8872
		{
8873
			$temp_array['hour_name'] = $row['hour_name'];
8874
			$temp_array['hour_count'] = $row['hour_count'];
8875
          
8876
			$hour_array[] = $temp_array;
8877
		}
8878
8879
		return $hour_array;
8880
	}
8881
	
8882
	
8883
	/**
8884
	* Counts all hours by airport
8885
	*
8886
	* @return Array the hour list
8887
	*
8888
	*/
8889
	public function countAllHoursByAirport($airport_icao)
8890
	{
8891
		global $globalTimezone, $globalDBdriver;
8892
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8893
		if ($globalTimezone != '') {
8894
			date_default_timezone_set($globalTimezone);
8895
			$datetime = new DateTime();
8896
			$offset = $datetime->format('P');
8897
		} else $offset = '+00:00';
8898
8899
		if ($globalDBdriver == 'mysql') {
8900
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8901
								FROM spotter_output 
8902
								WHERE (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8903
								GROUP BY hour_name 
8904
								ORDER BY hour_name ASC";
8905
		} else {
8906
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8907
								FROM spotter_output 
8908
								WHERE (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8909
								GROUP BY hour_name 
8910
								ORDER BY hour_name ASC";
8911
		}
8912
		
8913
		$sth = $this->db->prepare($query);
8914
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
8915
      
8916
		$hour_array = array();
8917
		$temp_array = array();
8918
        
8919
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8920
		{
8921
			$temp_array['hour_name'] = $row['hour_name'];
8922
			$temp_array['hour_count'] = $row['hour_count'];
8923
          
8924
			$hour_array[] = $temp_array;
8925
		}
8926
8927
		return $hour_array;
8928
	}
8929
	
8930
	
8931
	
8932
	/**
8933
	* Counts all hours by manufacturer
8934
	*
8935
	* @return Array the hour list
8936
	*
8937
	*/
8938
	public function countAllHoursByManufacturer($aircraft_manufacturer)
8939
	{
8940
		global $globalTimezone, $globalDBdriver;
8941
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8942
		if ($globalTimezone != '') {
8943
			date_default_timezone_set($globalTimezone);
8944
			$datetime = new DateTime();
8945
			$offset = $datetime->format('P');
8946
		} else $offset = '+00:00';
8947
8948
		if ($globalDBdriver == 'mysql') {
8949
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8950
								FROM spotter_output 
8951
								WHERE spotter_output.aircraft_manufacturer = :aircraft_manufacturer
8952
								GROUP BY hour_name 
8953
								ORDER BY hour_name ASC";
8954
		} else {
8955
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8956
								FROM spotter_output 
8957
								WHERE spotter_output.aircraft_manufacturer = :aircraft_manufacturer
8958
								GROUP BY hour_name 
8959
								ORDER BY hour_name ASC";
8960
		}
8961
		
8962
		$sth = $this->db->prepare($query);
8963
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
8964
      
8965
		$hour_array = array();
8966
		$temp_array = array();
8967
        
8968
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8969
		{
8970
			$temp_array['hour_name'] = $row['hour_name'];
8971
			$temp_array['hour_count'] = $row['hour_count'];
8972
          
8973
			$hour_array[] = $temp_array;
8974
		}
8975
8976
		return $hour_array;
8977
	}
8978
	
8979
	
8980
	
8981
	/**
8982
	* Counts all hours by date
8983
	*
8984
	* @return Array the hour list
8985
	*
8986
	*/
8987
	public function countAllHoursByDate($date)
8988
	{
8989
		global $globalTimezone, $globalDBdriver;
8990
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8991
		if ($globalTimezone != '') {
8992
			date_default_timezone_set($globalTimezone);
8993
			$datetime = new DateTime($date);
8994
			$offset = $datetime->format('P');
8995
		} else $offset = '+00:00';
8996
8997
		if ($globalDBdriver == 'mysql') {
8998
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8999
								FROM spotter_output 
9000
								WHERE DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
9001
								GROUP BY hour_name 
9002
								ORDER BY hour_name ASC";
9003
		} else {
9004
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9005
								FROM spotter_output 
9006
								WHERE to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
9007
								GROUP BY hour_name 
9008
								ORDER BY hour_name ASC";
9009
		}
9010
		
9011
		$sth = $this->db->prepare($query);
9012
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9013
      
9014
		$hour_array = array();
9015
		$temp_array = array();
9016
        
9017
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9018
		{
9019
			$temp_array['hour_name'] = $row['hour_name'];
9020
			$temp_array['hour_count'] = $row['hour_count'];
9021
          
9022
			$hour_array[] = $temp_array;
9023
		}
9024
9025
		return $hour_array;
9026
	}
9027
	
9028
	
9029
	
9030
	/**
9031
	* Counts all hours by a ident/callsign
9032
	*
9033
	* @return Array the hour list
9034
	*
9035
	*/
9036
	public function countAllHoursByIdent($ident)
9037
	{
9038
		global $globalTimezone, $globalDBdriver;
9039
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9040
		if ($globalTimezone != '') {
9041
			date_default_timezone_set($globalTimezone);
9042
			$datetime = new DateTime();
9043
			$offset = $datetime->format('P');
9044
		} else $offset = '+00:00';
9045
9046
		if ($globalDBdriver == 'mysql') {
9047
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9048
								FROM spotter_output 
9049
								WHERE spotter_output.ident = :ident 
9050
								GROUP BY hour_name 
9051
								ORDER BY hour_name ASC";
9052
		} else {
9053
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9054
								FROM spotter_output 
9055
								WHERE spotter_output.ident = :ident 
9056
								GROUP BY hour_name 
9057
								ORDER BY hour_name ASC";
9058
		}
9059
      
9060
		
9061
		$sth = $this->db->prepare($query);
9062
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
9063
      
9064
		$hour_array = array();
9065
		$temp_array = array();
9066
        
9067
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9068
		{
9069
			$temp_array['hour_name'] = $row['hour_name'];
9070
			$temp_array['hour_count'] = $row['hour_count'];
9071
          
9072
			$hour_array[] = $temp_array;
9073
		}
9074
9075
		return $hour_array;
9076
	}
9077
	
9078
	
9079
	
9080
	/**
9081
	* Counts all hours by route
9082
	*
9083
	* @return Array the hour list
9084
	*
9085
	*/
9086
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao)
9087
	{
9088
		global $globalTimezone, $globalDBdriver;
9089
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
9090
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
9091
		if ($globalTimezone != '') {
9092
			date_default_timezone_set($globalTimezone);
9093
			$datetime = new DateTime();
9094
			$offset = $datetime->format('P');
9095
		} else $offset = '+00:00';
9096
9097
		if ($globalDBdriver == 'mysql') {
9098
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9099
								FROM spotter_output 
9100
								WHERE (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9101
								GROUP BY hour_name 
9102
								ORDER BY hour_name ASC";
9103
		} else {
9104
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9105
								FROM spotter_output 
9106
								WHERE (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9107
								GROUP BY hour_name 
9108
								ORDER BY hour_name ASC";
9109
		}
9110
		
9111
		$sth = $this->db->prepare($query);
9112
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
9113
      
9114
		$hour_array = array();
9115
		$temp_array = array();
9116
        
9117
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9118
		{
9119
			$temp_array['hour_name'] = $row['hour_name'];
9120
			$temp_array['hour_count'] = $row['hour_count'];
9121
          
9122
			$hour_array[] = $temp_array;
9123
		}
9124
9125
		return $hour_array;
9126
	}
9127
	
9128
	
9129
	/**
9130
	* Counts all hours by country
9131
	*
9132
	* @return Array the hour list
9133
	*
9134
	*/
9135
	public function countAllHoursByCountry($country)
9136
	{
9137
		global $globalTimezone, $globalDBdriver;
9138
		$country = filter_var($country,FILTER_SANITIZE_STRING);
9139
		if ($globalTimezone != '') {
9140
			date_default_timezone_set($globalTimezone);
9141
			$datetime = new DateTime();
9142
			$offset = $datetime->format('P');
9143
		} else $offset = '+00:00';
9144
9145
		if ($globalDBdriver == 'mysql') {
9146
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9147
								FROM spotter_output 
9148
								WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9149
								GROUP BY hour_name 
9150
								ORDER BY hour_name ASC";
9151
		} else {
9152
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9153
								FROM spotter_output 
9154
								WHERE ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9155
								GROUP BY hour_name 
9156
								ORDER BY hour_name ASC";
9157
		}
9158
		
9159
		$sth = $this->db->prepare($query);
9160
		$sth->execute(array(':country' => $country,':offset' => $offset));
9161
      
9162
		$hour_array = array();
9163
		$temp_array = array();
9164
        
9165
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9166
		{
9167
			$temp_array['hour_name'] = $row['hour_name'];
9168
			$temp_array['hour_count'] = $row['hour_count'];
9169
          
9170
			$hour_array[] = $temp_array;
9171
		}
9172
9173
		return $hour_array;
9174
	}
9175
9176
9177
9178
9179
	/**
9180
	* Counts all aircraft that have flown over
9181
	*
9182
	* @return Integer the number of aircrafts
9183
	*
9184
	*/
9185
	public function countOverallAircrafts($filters = array())
9186
	{
9187
		$filter_query = $this->getFilter($filters,true,true);
9188
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
9189
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9190
		$sth = $this->db->prepare($query);
9191
		$sth->execute();
9192
		return $sth->fetchColumn();
9193
	}
9194
9195
	/**
9196
	* Counts all flight that really arrival
9197
	*
9198
	* @return Integer the number of aircrafts
9199
	*
9200
	*/
9201
	public function countOverallArrival($filters = array())
9202
	{
9203
		$filter_query = $this->getFilter($filters,true,true);
9204
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
9205
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
9206
		
9207
		$sth = $this->db->prepare($query);
9208
		$sth->execute();
9209
		return $sth->fetchColumn();
9210
	}
9211
9212
	/**
9213
	* Counts all pilots that have flown over
9214
	*
9215
	* @return Integer the number of pilots
9216
	*
9217
	*/
9218
	public function countOverallPilots($filters = array())
9219
	{
9220
		$filter_query = $this->getFilter($filters,true,true);
9221
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
9222
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
9223
		$sth = $this->db->prepare($query);
9224
		$sth->execute();
9225
		return $sth->fetchColumn();
9226
	}
9227
9228
	/**
9229
	* Counts all owners that have flown over
9230
	*
9231
	* @return Integer the number of owners
9232
	*
9233
	*/
9234
	public function countOverallOwners($filters = array())
9235
	{
9236
		$filter_query = $this->getFilter($filters,true,true);
9237
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
9238
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
9239
		$sth = $this->db->prepare($query);
9240
		$sth->execute();
9241
		return $sth->fetchColumn();
9242
	}
9243
	
9244
	
9245
	/**
9246
	* Counts all flights that have flown over
9247
	*
9248
	* @return Integer the number of flights
9249
	*
9250
	*/
9251
	public function countOverallFlights($filters = array())
9252
	{
9253
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
9254
                    FROM spotter_output";
9255
		$query .= $this->getFilter($filters);
9256
		//echo $query;
9257
		$sth = $this->db->prepare($query);
9258
		$sth->execute();
9259
		return $sth->fetchColumn();
9260
	}
9261
	
9262
	/**
9263
	* Counts all military flights that have flown over
9264
	*
9265
	* @return Integer the number of flights
9266
	*
9267
	*/
9268
	public function countOverallMilitaryFlights($filters = array())
9269
	{
9270
		$filter_query = $this->getFilter($filters,true,true);
9271
		$query  = "SELECT COUNT(s.spotter_id) AS flight_count  
9272
                    FROM spotter_output s, airlines a".$filter_query." s.airline_icao = a.icao AND a.type = 'military'";
9273
      
9274
		$sth = $this->db->prepare($query);
9275
		$sth->execute();
9276
		return $sth->fetchColumn();
9277
	}
9278
	
9279
	
9280
	
9281
	/**
9282
	* Counts all airlines that have flown over
9283
	*
9284
	* @return Integer the number of airlines
9285
	*
9286
	*/
9287
	public function countOverallAirlines($filters = array())
9288
	{
9289
		$query  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
9290
							FROM spotter_output";
9291
      
9292
		$query .= $this->getFilter($filters);
9293
		$sth = $this->db->prepare($query);
9294
		$sth->execute();
9295
		return $sth->fetchColumn();
9296
	}
9297
9298
  
9299
	/**
9300
	* Counts all hours of today
9301
	*
9302
	* @return Array the hour list
9303
	*
9304
	*/
9305
	public function countAllHoursFromToday()
9306
	{
9307
		global $globalTimezone, $globalDBdriver;
9308
		if ($globalTimezone != '') {
9309
			date_default_timezone_set($globalTimezone);
9310
			$datetime = new DateTime();
9311
			$offset = $datetime->format('P');
9312
		} else $offset = '+00:00';
9313
9314
		if ($globalDBdriver == 'mysql') {
9315
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9316
								FROM spotter_output 
9317
								WHERE DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
9318
								GROUP BY hour_name 
9319
								ORDER BY hour_name ASC";
9320
		} else {
9321
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9322
								FROM spotter_output 
9323
								WHERE to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
9324
								GROUP BY hour_name 
9325
								ORDER BY hour_name ASC";
9326
		}
9327
		
9328
		$sth = $this->db->prepare($query);
9329
		$sth->execute(array(':offset' => $offset));
9330
      
9331
		$hour_array = array();
9332
		$temp_array = array();
9333
        
9334
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9335
		{
9336
			$temp_array['hour_name'] = $row['hour_name'];
9337
			$temp_array['hour_count'] = $row['hour_count'];
9338
			$hour_array[] = $temp_array;
9339
		}
9340
9341
		return $hour_array;
9342
	}
9343
    
9344
	/**
9345
	* Gets all the spotter information based on calculated upcoming flights
9346
	*
9347
	* @return Array the spotter information
9348
	*
9349
	*/
9350
	public function getUpcomingFlights($limit = '', $sort = '')
9351
	{
9352
		global $global_query, $globalDBdriver, $globalTimezone;
9353
		date_default_timezone_set('UTC');
9354
		$limit_query = '';
9355
		if ($limit != "")
9356
		{
9357
			$limit_array = explode(",", $limit);
9358
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
9359
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
9360
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
9361
			{
9362
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
9363
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
9364
			}
9365
		}
9366
		$currentHour = date("G");
9367
		$next3Hours = date("G", strtotime("+3 hour"));
9368
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
9369
		if ($currentHour >= 21 && $next3Hours >= 00)
9370
		{
9371
			$next3Hours = 24;
9372
		}
9373
		$currentDayofWeek = date("l");
9374
		if ($globalDBdriver == 'mysql') {
9375
			if ($sort != "")
9376
			{
9377
				$search_orderby_array = $this->getOrderBy();
9378
				$orderby_query = $search_orderby_array[$sort]['sql'];
9379
			} else {
9380
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
9381
			}
9382
/*
9383
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
9384
			    FROM spotter_output
9385
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
9386
			    GROUP BY spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time HAVING count(spotter_output.ident) > 10 $orderby_query";
9387
*/
9388
/*			$query = "SELECT spotter_output.ident, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time, count(spotter_output.ident) as ident_count
9389
			    FROM spotter_output
9390
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
9391
			    GROUP BY spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time HAVING count(spotter_output.ident) > 10 $orderby_query";
9392
*/
9393
			$query = "SELECT spotter_output.ident, spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, count(spotter_output.ident) as ident_count 
9394
			    FROM spotter_output
9395
			    WHERE DAYNAME(spotter_output.date) = '$currentDayofWeek' AND HOUR(spotter_output.date) >= '$currentHour' AND HOUR(spotter_output.date) <= '$next3Hours' AND spotter_output.ident <> '' AND format_source <> 'aprs'
9396
			    GROUP BY spotter_output.ident,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time
9397
			    HAVING count(spotter_output.ident) > 5$orderby_query";
9398
9399
			$spotter_array = $this->getDataFromDB($query.$limit_query);
9400
		} else {
9401
			if ($sort != "")
9402
			{
9403
				$search_orderby_array = $this->getOrderBy();
9404
				$orderby_query = $search_orderby_array[$sort]['sql'];
9405
			} else {
9406
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
9407
			}
9408
			$query = "SELECT spotter_output.ident, spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, count(spotter_output.ident) as ident_count, to_char(spotter_output.date,'HH') 
9409
			    FROM spotter_output
9410
			    WHERE DATE_PART('dow', spotter_output.date) = DATE_PART('dow', date 'now' AT TIME ZONE :timezone) AND EXTRACT (HOUR FROM spotter_output.date AT TIME ZONE :timezone) >= '$currentHour' AND EXTRACT (HOUR FROM spotter_output.date AT TIME ZONE :timezone) <= '$next3Hours' AND ident <> '' 
9411
			    GROUP BY spotter_output.ident,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time, to_char(spotter_output.date,'HH')
9412
			    HAVING count(spotter_output.ident) > 5$orderby_query";
9413
			//echo $query;
9414
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
9415
			/*
9416
			$sth = $this->db->prepare($query);
9417
			$sth->execute(array(':timezone' => $globalTimezone));
9418
			return $sth->fetchAll(PDO::FETCH_ASSOC);
9419
			*/
9420
		}
9421
		return $spotter_array;
9422
	}
9423
    
9424
    
9425
     /**
9426
	* Gets the Barrie Spotter ID based on the FlightAware ID
9427
	*
9428
	* @return Integer the Barrie Spotter ID
9429
q	*
9430
	*/
9431
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
9432
	{
9433
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
9434
9435
		$query  = "SELECT spotter_output.spotter_id
9436
								FROM spotter_output 
9437
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
9438
        
9439
		
9440
		$sth = $this->db->prepare($query);
9441
		$sth->execute();
9442
9443
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9444
		{
9445
			return $row['spotter_id'];
9446
		}
9447
	}
9448
  
9449
 
9450
	/**
9451
	* Parses a date string
9452
	*
9453
	* @param String $dateString the date string
9454
	* @param String $timezone the timezone of a user
9455
	* @return Array the time information
9456
	*
9457
	*/
9458
	public function parseDateString($dateString, $timezone = '')
9459
	{
9460
		$time_array = array();
9461
	
9462
		if ($timezone != "")
9463
		{
9464
			date_default_timezone_set($timezone);
9465
		}
9466
		
9467
		$current_date = date("Y-m-d H:i:s");
9468
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
9469
		
9470
		$diff = abs(strtotime($current_date) - strtotime($date));
9471
9472
		$time_array['years'] = floor($diff / (365*60*60*24)); 
9473
		$years = $time_array['years'];
9474
		
9475
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
9476
		$months = $time_array['months'];
9477
		
9478
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
9479
		$days = $time_array['days'];
9480
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
9481
		$hours = $time_array['hours'];
9482
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
9483
		$minutes = $time_array['minutes'];
9484
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
9485
		
9486
		return $time_array;	
9487
	}	
9488
	
9489
	
9490
	
9491
	
9492
	/**
9493
	* Parses the direction degrees to working
9494
	*
9495
	* @param Float $direction the direction in degrees
9496
	* @return Array the direction information
9497
	*
9498
	*/
9499
	public function parseDirection($direction = 0)
9500
	{
9501
		if ($direction == '') $direction = 0;
9502
		$direction_array = array();
9503
		$temp_array = array();
9504
9505
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
9506
		{
9507
			$temp_array['direction_degree'] = $direction;
9508
			$temp_array['direction_shortname'] = "N";
9509
			$temp_array['direction_fullname'] = "North";
9510
		} elseif ($direction >= 22.5 && $direction < 45){
9511
			$temp_array['direction_degree'] = $direction;
9512
			$temp_array['direction_shortname'] = "NNE";
9513
			$temp_array['direction_fullname'] = "North-Northeast";
9514
		} elseif ($direction >= 45 && $direction < 67.5){
9515
			$temp_array['direction_degree'] = $direction;
9516
			$temp_array['direction_shortname'] = "NE";
9517
			$temp_array['direction_fullname'] = "Northeast";
9518
		} elseif ($direction >= 67.5 && $direction < 90){
9519
			$temp_array['direction_degree'] = $direction;
9520
			$temp_array['direction_shortname'] = "ENE";
9521
			$temp_array['direction_fullname'] = "East-Northeast";
9522
		} elseif ($direction >= 90 && $direction < 112.5){
9523
			$temp_array['direction_degree'] = $direction;
9524
			$temp_array['direction_shortname'] = "E";
9525
			$temp_array['direction_fullname'] = "East";
9526
		} elseif ($direction >= 112.5 && $direction < 135){
9527
			$temp_array['direction_degree'] = $direction;
9528
			$temp_array['direction_shortname'] = "ESE";
9529
			$temp_array['direction_fullname'] = "East-Southeast";
9530
		} elseif ($direction >= 135 && $direction < 157.5){
9531
			$temp_array['direction_degree'] = $direction;
9532
			$temp_array['direction_shortname'] = "SE";
9533
			$temp_array['direction_fullname'] = "Southeast";
9534
		} elseif ($direction >= 157.5 && $direction < 180){
9535
			$temp_array['direction_degree'] = $direction;
9536
			$temp_array['direction_shortname'] = "SSE";
9537
			$temp_array['direction_fullname'] = "South-Southeast";
9538
		} elseif ($direction >= 180 && $direction < 202.5){
9539
			$temp_array['direction_degree'] = $direction;
9540
			$temp_array['direction_shortname'] = "S";
9541
			$temp_array['direction_fullname'] = "South";
9542
		} elseif ($direction >= 202.5 && $direction < 225){
9543
			$temp_array['direction_degree'] = $direction;
9544
			$temp_array['direction_shortname'] = "SSW";
9545
			$temp_array['direction_fullname'] = "South-Southwest";
9546
		} elseif ($direction >= 225 && $direction < 247.5){
9547
			$temp_array['direction_degree'] = $direction;
9548
			$temp_array['direction_shortname'] = "SW";
9549
			$temp_array['direction_fullname'] = "Southwest";
9550
		} elseif ($direction >= 247.5 && $direction < 270){
9551
			$temp_array['direction_degree'] = $direction;
9552
			$temp_array['direction_shortname'] = "WSW";
9553
			$temp_array['direction_fullname'] = "West-Southwest";
9554
		} elseif ($direction >= 270 && $direction < 292.5){
9555
			$temp_array['direction_degree'] = $direction;
9556
			$temp_array['direction_shortname'] = "W";
9557
			$temp_array['direction_fullname'] = "West";
9558
		} elseif ($direction >= 292.5 && $direction < 315){
9559
			$temp_array['direction_degree'] = $direction;
9560
			$temp_array['direction_shortname'] = "WNW";
9561
			$temp_array['direction_fullname'] = "West-Northwest";
9562
		} elseif ($direction >= 315 && $direction < 337.5){
9563
			$temp_array['direction_degree'] = $direction;
9564
			$temp_array['direction_shortname'] = "NW";
9565
			$temp_array['direction_fullname'] = "Northwest";
9566
		} elseif ($direction >= 337.5 && $direction < 360){
9567
			$temp_array['direction_degree'] = $direction;
9568
			$temp_array['direction_shortname'] = "NNW";
9569
			$temp_array['direction_fullname'] = "North-Northwest";
9570
		}
9571
		$direction_array[] = $temp_array;
9572
		return $direction_array;
9573
	}
9574
	
9575
	
9576
	/**
9577
	* Gets the aircraft registration
9578
	*
9579
	* @param String $flightaware_id the flight aware id
9580
	* @return String the aircraft registration
9581
	*
9582
	*/
9583
	
9584
	public function getAircraftRegistration($flightaware_id)
9585
	{
9586
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
9587
        
9588
		$options = array(
9589
			'trace' => true,
9590
			'exceptions' => 0,
9591
			'login' => $globalFlightAwareUsername,
9592
			'password' => $globalFlightAwarePassword,
9593
		);
9594
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
9595
		
9596
		$params = array('faFlightID' => $flightaware_id);
9597
		$result = $client->AirlineFlightInfo($params);
9598
		
9599
		if (isset($result->AirlineFlightInfoResult))
9600
		{
9601
			$registration = $result->AirlineFlightInfoResult->tailnumber;
9602
		} else return '';
9603
		
9604
		$registration = $this->convertAircraftRegistration($registration);
9605
		
9606
		return $registration;
9607
	}
9608
9609
9610
	/**
9611
	* Gets the aircraft registration from ModeS
9612
	*
9613
	* @param String $aircraft_modes the flight ModeS in hex
9614
	* @return String the aircraft registration
9615
	*
9616
	*/
9617
	public function getAircraftRegistrationBymodeS($aircraft_modes)
9618
	{
9619
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
9620
	
9621
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
9622
		
9623
		$sth = $this->db->prepare($query);
9624
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
9625
    
9626
		$row = $sth->fetch(PDO::FETCH_ASSOC);
9627
		if (count($row) > 0) {
9628
		    //return $row['Registration'];
9629
		    return $row['registration'];
9630
		} else return '';
9631
	
9632
	}
9633
9634
	/**
9635
	* Gets the aircraft type from ModeS
9636
	*
9637
	* @param String $aircraft_modes the flight ModeS in hex
9638
	* @return String the aircraft type
9639
	*
9640
	*/
9641
	public function getAircraftTypeBymodeS($aircraft_modes)
9642
	{
9643
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
9644
	
9645
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
9646
		
9647
		$sth = $this->db->prepare($query);
9648
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
9649
    
9650
		$row = $sth->fetch(PDO::FETCH_ASSOC);
9651
		if (count($row) > 0) {
9652
		    if ($row['type_flight'] == null) return '';
9653
		    else return $row['type_flight'];
9654
		} else return '';
9655
	
9656
	}
9657
9658
	/**
9659
	* Gets Countrie from latitude/longitude
9660
	*
9661
	* @param Float $latitude latitute of the flight
9662
	* @param Float $longitude longitute of the flight
9663
	* @return String the countrie
9664
	*/
9665
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
9666
	{
9667
		global $globalDBdriver, $globalDebug;
9668
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
9669
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
9670
	
9671
		try {
9672
			/*
9673
			if ($globalDBdriver == 'mysql') {
9674
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
9675
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
9676
			}
9677
			*/
9678
			// This query seems to work both for MariaDB and PostgreSQL
9679
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
9680
		
9681
			$sth = $this->db->prepare($query);
9682
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
9683
			$sth->execute();
9684
    
9685
			$row = $sth->fetch(PDO::FETCH_ASSOC);
9686
			if (count($row) > 0) {
9687
				return $row;
9688
			} else return '';
9689
		} catch (PDOException $e) {
9690
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
9691
			return '';
9692
		}
9693
	
9694
	}
9695
9696
	/**
9697
	* converts the registration code using the country prefix
9698
	*
9699
	* @param String $registration the aircraft registration
9700
	* @return String the aircraft registration
9701
	*
9702
	*/
9703
	public function convertAircraftRegistration($registration)
9704
	{
9705
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9706
		$registration_prefix = '';
9707
		$registration_1 = substr($registration, 0, 1);
9708
		$registration_2 = substr($registration, 0, 2);
9709
9710
		//first get the prefix based on two characters
9711
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
9712
      
9713
		
9714
		$sth = $this->db->prepare($query);
9715
		$sth->execute(array(':registration_2' => $registration_2));
9716
        
9717
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9718
		{
9719
			$registration_prefix = $row['registration_prefix'];
9720
		}
9721
9722
		//if we didn't find a two chracter prefix lets just search the one with one character
9723
		if ($registration_prefix == '')
9724
		{
9725
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
9726
			$sth = $this->db->prepare($query);
9727
			$sth->execute(array(':registration_1' => $registration_1));
9728
	        
9729
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9730
			{
9731
				$registration_prefix = $row['registration_prefix'];
9732
			}
9733
		}
9734
9735
		//determine which characters are being used and convert the registration code appropiately
9736
		if (strlen($registration_prefix) == 1)
9737
		{
9738
			if (0 === strpos($registration, 'N')) {
9739
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
9740
			} else {
9741
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
9742
			}
9743
		} else if(strlen($registration_prefix) == 2){
9744
			if (0 === strpos($registration, 'N')) {
9745
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
9746
			} else {
9747
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
9748
			}
9749
		}
9750
		return $registration;
9751
	}
9752
9753
	/**
9754
	* Country from the registration code
9755
	*
9756
	* @param String $registration the aircraft registration
9757
	* @return String the country
9758
	*
9759
	*/
9760
	public function countryFromAircraftRegistration($registration)
9761
	{
9762
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9763
		
9764
		$registration_prefix = '';
9765
		$registration_test = explode('-',$registration);
9766
		$country = '';
9767
		if ($registration_test[0] != $registration) {
9768
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
9769
	      
9770
			$sth = $this->db->prepare($query);
9771
			$sth->execute(array(':registration_1' => $registration_test[0]));
9772
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9773
			{
9774
				//$registration_prefix = $row['registration_prefix'];
9775
				$country = $row['country'];
9776
			}
9777
		} else {
9778
    			$registration_1 = substr($registration, 0, 1);
9779
		        $registration_2 = substr($registration, 0, 2);
9780
9781
			$country = '';
9782
			//first get the prefix based on two characters
9783
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
9784
      
9785
			
9786
			$sth = $this->db->prepare($query);
9787
			$sth->execute(array(':registration_2' => $registration_2));
9788
        
9789
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9790
			{
9791
				$registration_prefix = $row['registration_prefix'];
9792
				$country = $row['country'];
9793
			}
9794
9795
			//if we didn't find a two chracter prefix lets just search the one with one character
9796
			if ($registration_prefix == "")
9797
			{
9798
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
9799
	      
9800
				$sth = $this->db->prepare($query);
9801
				$sth->execute(array(':registration_1' => $registration_1));
9802
	        
9803
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
9804
				{
9805
					//$registration_prefix = $row['registration_prefix'];
9806
					$country = $row['country'];
9807
				}
9808
			}
9809
		}
9810
    
9811
		return $country;
9812
	}
9813
	
9814
	/**
9815
	* Set a new highlight value for a flight
9816
	*
9817
	* @param String $flightaware_id flightaware_id from spotter_output table
9818
	* @param String $highlight New highlight value
9819
	*/
9820
	public function setHighlightFlight($flightaware_id,$highlight) {
9821
		
9822
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
9823
		$sth = $this->db->prepare($query);
9824
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
9825
	}
9826
	
9827
	/**
9828
	* Gets the short url from bit.ly
9829
	*
9830
	* @param String $url the full url
9831
	* @return String the bit.ly url
9832
	*
9833
	*/
9834
	public function getBitlyURL($url)
9835
	{
9836
		global $globalBitlyAccessToken;
9837
		
9838
		if ($globalBitlyAccessToken == '') return $url;
9839
        
9840
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
9841
		
9842
		$ch = curl_init();
9843
		curl_setopt($ch, CURLOPT_HEADER, 0);
9844
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
9845
		curl_setopt($ch, CURLOPT_URL, $google_url);
9846
		$bitly_data = curl_exec($ch);
9847
		curl_close($ch);
9848
		
9849
		$bitly_data = json_decode($bitly_data);
9850
		$bitly_url = '';
9851
		if ($bitly_data->status_txt = "OK"){
9852
			$bitly_url = $bitly_data->data->url;
9853
		}
9854
9855
		return $bitly_url;
9856
	}
9857
9858
9859
	public function getOrderBy()
9860
	{
9861
		$orderby = array("aircraft_asc" => array("key" => "aircraft_asc", "value" => "Aircraft Type - ASC", "sql" => "ORDER BY spotter_output.aircraft_icao ASC"), "aircraft_desc" => array("key" => "aircraft_desc", "value" => "Aircraft Type - DESC", "sql" => "ORDER BY spotter_output.aircraft_icao DESC"),"manufacturer_asc" => array("key" => "manufacturer_asc", "value" => "Aircraft Manufacturer - ASC", "sql" => "ORDER BY spotter_output.aircraft_manufacturer ASC"), "manufacturer_desc" => array("key" => "manufacturer_desc", "value" => "Aircraft Manufacturer - DESC", "sql" => "ORDER BY spotter_output.aircraft_manufacturer DESC"),"airline_name_asc" => array("key" => "airline_name_asc", "value" => "Airline Name - ASC", "sql" => "ORDER BY spotter_output.airline_name ASC"), "airline_name_desc" => array("key" => "airline_name_desc", "value" => "Airline Name - DESC", "sql" => "ORDER BY spotter_output.airline_name DESC"), "ident_asc" => array("key" => "ident_asc", "value" => "Ident - ASC", "sql" => "ORDER BY spotter_output.ident ASC"), "ident_desc" => array("key" => "ident_desc", "value" => "Ident - DESC", "sql" => "ORDER BY spotter_output.ident DESC"), "airport_departure_asc" => array("key" => "airport_departure_asc", "value" => "Departure Airport - ASC", "sql" => "ORDER BY spotter_output.departure_airport_city ASC"), "airport_departure_desc" => array("key" => "airport_departure_desc", "value" => "Departure Airport - DESC", "sql" => "ORDER BY spotter_output.departure_airport_city DESC"), "airport_arrival_asc" => array("key" => "airport_arrival_asc", "value" => "Arrival Airport - ASC", "sql" => "ORDER BY spotter_output.arrival_airport_city ASC"), "airport_arrival_desc" => array("key" => "airport_arrival_desc", "value" => "Arrival Airport - DESC", "sql" => "ORDER BY spotter_output.arrival_airport_city DESC"), "date_asc" => array("key" => "date_asc", "value" => "Date - ASC", "sql" => "ORDER BY spotter_output.date ASC"), "date_desc" => array("key" => "date_desc", "value" => "Date - DESC", "sql" => "ORDER BY spotter_output.date DESC"),"distance_asc" => array("key" => "distance_asc","value" => "Distance - ASC","sql" => "ORDER BY distance ASC"),"distance_desc" => array("key" => "distance_desc","value" => "Distance - DESC","sql" => "ORDER BY distance DESC"));
9862
		
9863
		return $orderby;
9864
		
9865
	}
9866
    
9867
/*
9868
	public function importFromFlightAware()
9869
	{
9870
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
9871
		$Spotter = new Spotter($this->db);
9872
		$SpotterLive = new SpotterLive($this->db);
9873
		$options = array(
9874
		            'trace' => true,
9875
		            'exceptions' => 0,
9876
		            'login' => $globalFlightAwareUsername,
9877
		            'password' => $globalFlightAwarePassword,
9878
		);
9879
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
9880
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
9881
		$result = $client->SearchBirdseyeInFlight($params);
9882
		$dataFound = false;
9883
		$ignoreImport = false;
9884
		if (isset($result->SearchBirdseyeInFlightResult))
9885
		{
9886
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
9887
			{
9888
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
9889
				{
9890
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
9891
					{
9892
						foreach($globalAirportIgnore as $airportIgnore)
9893
						{
9894
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
9895
							{
9896
								$ignoreImport = true; 
9897
							}
9898
						}
9899
						if ($ignoreImport == false)
9900
						{
9901
							$flightaware_id = $aircraft->faFlightID;
9902
							$ident = $aircraft->ident;
9903
							$aircraft_type = $aircraft->type;
9904
							$departure_airport = $aircraft->origin;
9905
							$arrival_airport = $aircraft->destination;
9906
							$latitude = $aircraft->latitude;
9907
							$longitude = $aircraft->longitude;
9908
							$waypoints = $aircraft->waypoints;
9909
							$altitude = $aircraft->altitude;
9910
							$heading = $aircraft->heading;
9911
							$groundspeed = $aircraft->groundspeed;
9912
							$dataFound = true;
9913
							//gets the callsign from the last hour
9914
							$last_hour_ident = $this->getIdentFromLastHour($ident);
9915
							//change the departure/arrival airport to NA if its not available
9916
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
9917
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
9918
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
9919
							if($last_hour_ident == "")
9920
							{
9921
								//adds the spotter data for the archive
9922
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
9923
							}
9924
9925
							//adds the spotter LIVE data
9926
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
9927
						}
9928
					}
9929
					$ignoreImport = false;
9930
				}
9931
			} else {
9932
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
9933
				{
9934
					foreach($globalAirportIgnore as $airportIgnore)
9935
					{
9936
						foreach($globalAirportIgnore as $airportIgnore)
9937
						{
9938
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
9939
							{
9940
								$ignoreImport = true; 
9941
							}
9942
						}
9943
						if ($ignoreImport == false)
9944
						{
9945
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
9946
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
9947
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
9948
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
9949
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
9950
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
9951
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
9952
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
9953
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
9954
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
9955
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
9956
							$dataFound = true;
9957
							//gets the callsign from the last hour
9958
							$last_hour_ident = $this->getIdentFromLastHour($ident);
9959
							//change the departure/arrival airport to NA if its not available
9960
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
9961
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
9962
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
9963
							if($last_hour_ident == "")
9964
							{
9965
								//adds the spotter data for the archive
9966
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
9967
							}
9968
							//adds the spotter LIVE data
9969
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
9970
						}
9971
						$ignoreImport = false;
9972
					}
9973
				}
9974
			}
9975
		} 
9976
	}
9977
*/
9978
9979
	// Update flights data when new data in DB
9980
	public function updateFieldsFromOtherTables()
9981
	{
9982
		global $globalDebug, $globalDBdriver;
9983
		$Image = new Image($this->db);
9984
		
9985
9986
		// routes
9987
		if ($globalDebug) print "Routes...\n";
9988
		if ($globalDBdriver == 'mysql') {
9989
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15 DAY)";
9990
		} else {
9991
			$query = "SELECT spotter_output.spotter_id, routes.FromAirport_ICAO, routes.ToAirport_ICAO FROM spotter_output, routes WHERE spotter_output.ident = routes.CallSign AND ( spotter_output.departure_airport_icao != routes.FromAirport_ICAO OR spotter_output.arrival_airport_icao != routes.ToAirport_ICAO) AND routes.FromAirport_ICAO != '' AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
9992
		}
9993
		$sth = $this->db->prepare($query);
9994
		$sth->execute();
9995
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9996
		{
9997
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
9998
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
9999
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
10000
				$update_query="UPDATE spotter_output SET departure_airport_icao = :fromicao, arrival_airport_icao = :toicao, departure_airport_name = :departure_airport_name, departure_airport_city = :departure_airport_city, departure_airport_country = :departure_airport_country, arrival_airport_name = :arrival_airport_name, arrival_airport_city = :arrival_airport_city, arrival_airport_country = :arrival_airport_country WHERE spotter_id = :spotter_id";
10001
				$sthu = $this->db->prepare($update_query);
10002
				$sthu->execute(array(':fromicao' => $row['fromairport_icao'],':toicao' => $row['toairport_icao'],':spotter_id' => $row['spotter_id'],':departure_airport_name' => $departure_airport_array[0]['name'],':departure_airport_city' => $departure_airport_array[0]['city'],':departure_airport_country' => $departure_airport_array[0]['country'],':arrival_airport_name' => $arrival_airport_array[0]['name'],':arrival_airport_city' => $arrival_airport_array[0]['city'],':arrival_airport_country' => $arrival_airport_array[0]['country']));
10003
			}
10004
		}
10005
		
10006
		if ($globalDebug) print "Airlines...\n";
10007
		//airlines
10008
		if ($globalDBdriver == 'mysql') {
10009
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 15 DAY)";
10010
		} elseif ($globalDBdriver == 'pgsql') {
10011
			$query  = "SELECT spotter_output.spotter_id, spotter_output.ident FROM spotter_output WHERE (spotter_output.airline_name = '' OR spotter_output.airline_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '15 DAYS'";
10012
		}
10013
		$sth = $this->db->prepare($query);
10014
		$sth->execute();
10015
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10016
		{
10017
			if (is_numeric(substr($row['ident'], -1, 1)))
10018
			{
10019
				$fromsource = NULL;
10020
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
10021
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
10022
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
10023
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
10024
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
10025
				if (isset($airline_array[0]['name'])) {
10026
					$update_query  = "UPDATE spotter_output SET spotter_output.airline_name = :airline_name, spotter_output.airline_icao = :airline_icao, spotter_output.airline_country = :airline_country, spotter_output.airline_type = :airline_type WHERE spotter_output.spotter_id = :spotter_id";
10027
					$sthu = $this->db->prepare($update_query);
10028
					$sthu->execute(array(':airline_name' => $airline_array[0]['name'],':airline_icao' => $airline_array[0]['icao'], ':airline_country' => $airline_array[0]['country'], ':airline_type' => $airline_array[0]['type'], ':spotter_id' => $row['spotter_id']));
10029
				}
10030
			}
10031
		}
10032
10033
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
10034
		//duplicate modes
10035
		$query = "DELETE aircraft_modes FROM aircraft_modes LEFT OUTER JOIN (SELECT max(`AircraftID`) as `AircraftID`,`ModeS` FROM `aircraft_modes` group by ModeS) as KeepRows ON aircraft_modes.AircraftID = KeepRows.AircraftID WHERE KeepRows.AircraftID IS NULL";
10036
		$sth = $this->db->prepare($query);
10037
		$sth->execute();
10038
		
10039
		if ($globalDebug) print "Aircraft...\n";
10040
		//aircraft
10041
		if ($globalDBdriver == 'mysql') {
10042
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
10043
		} elseif ($globalDBdriver == 'pgsql') {
10044
			$query  = "SELECT spotter_output.spotter_id, spotter_output.aircraft_icao, spotter_output.registration FROM spotter_output WHERE (spotter_output.aircraft_name = '' OR spotter_output.aircraft_name = 'Not Available') AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INERVAL '15 DAYS'";
10045
		}
10046
		$sth = $this->db->prepare($query);
10047
		$sth->execute();
10048
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10049
		{
10050
			if ($row['aircraft_icao'] != '') {
10051
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
10052
				if ($row['registration'] != ""){
10053
					$image_array = $Image->getSpotterImage($row['registration']);
10054
					if (count($image_array) == 0) {
10055
						$Image->addSpotterImage($row['registration']);
10056
					}
10057
				}
10058
				if (count($aircraft_name) > 0) {
10059
					$update_query  = "UPDATE spotter_output SET spotter_output.aircraft_name = :aircraft_name, spotter_output.aircraft_manufacturer = :aircraft_manufacturer WHERE spotter_output.spotter_id = :spotter_id";
10060
					$sthu = $this->db->prepare($update_query);
10061
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
10062
				}
10063
			}
10064
		}
10065
	}	
10066
10067
	// Update arrival airports for data already in DB
10068
	public function updateArrivalAirports()
10069
	{
10070
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
10071
		$query = "SELECT spotter_output.spotter_id, spotter_output.last_latitude, spotter_output.last_longitude, spotter_output.last_altitude, spotter_output.arrival_airport_icao, spotter_output.real_arrival_airport_icao FROM spotter_output";
10072
		$sth = $this->db->prepare($query);
10073
		$sth->execute();
10074
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10075
		{
10076
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
10077
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
10078
				$airport_icao = '';
10079
				 if (isset($closestAirports[0])) {
10080
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
10081
						$airport_icao = $closestAirports[0]['icao'];
10082
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10083
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
10084
						foreach ($closestAirports as $airport) {
10085
							if ($row['arrival_airport_icao'] == $airport['icao']) {
10086
								$airport_icao = $airport['icao'];
10087
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10088
								break;
10089
							}
10090
						}
10091
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
10092
						$airport_icao = $closestAirports[0]['icao'];
10093
						if ($globalDebug) echo "\o/ NP --++ Find arrival airport. Airport ICAO : ".$airport_icao." !  Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist." - Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.($row['last_altitude']*100)."\n";
10094
					} else {
10095
						if ($globalDebug) echo "----- Can't find arrival airport. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist." - Airport altitude : ".$closestAirports[0]['altitude'].' - flight altitude : '.($row['last_altitude']*100)."\n";
10096
					}
10097
				} else {
10098
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
10099
				}
10100
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
10101
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
10102
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
10103
					$sthu = $this->db->prepare($update_query);
10104
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
10105
				}
10106
			}
10107
		}
10108
	}
10109
	
10110
	public function closestAirports($origLat,$origLon,$dist = 10) {
10111
		global $globalDBdriver;
10112
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
10113
/*
10114
		$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - abs(latitude))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(abs(latitude)*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2))) as distance 
10115
                      FROM airport WHERE longitude between ($origLon-$dist/abs(cos(radians($origLat))*69)) and ($origLon+$dist/abs(cos(radians($origLat))*69)) and latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
10116
                      having distance < $dist ORDER BY distance limit 100;";
10117
*/
10118
		if ($globalDBdriver == 'mysql') {
10119
			$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(latitude*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2))) as distance 
10120
	                      FROM airport WHERE longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
10121
	                      AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(latitude*pi()/180)*POWER(SIN(($origLon-longitude)*pi()/180/2),2)))) < $dist ORDER BY distance limit 100;";
10122
                } else {
10123
			$query="SELECT name, icao, latitude, longitude, altitude, 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(longitude as double precision))*pi()/180/2),2))) as distance 
10124
	                      FROM airport WHERE CAST(longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
10125
	                      AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(longitude as double precision))*pi()/180/2),2)))) < $dist ORDER BY distance limit 100;";
10126
    		}
10127
		$sth = $this->db->prepare($query);
10128
		$sth->execute();
10129
		return $sth->fetchAll(PDO::FETCH_ASSOC);
10130
	}
10131
}
10132
/*
10133
$Spotter = new Spotter();
10134
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
10135
*/
10136
/*
10137
$Spotter = new Spotter();
10138
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
10139
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
10140
print_r($da);
10141
print_r($aa);
10142
print_r(array_merge($da,$aa));
10143
*/
10144
?>