Completed
Push — master ( ca573a...749c97 )
by Yannick
07:32
created

Spotter::updateLatestSpotterData()   A

Complexity

Conditions 3
Paths 6

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 6
nop 10
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2604
	{
2605
		/*
2606
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2607
								FROM spotter_output  
2608
								WHERE spotter_output.aircraft_icao <> '' 
2609
								ORDER BY spotter_output.aircraft_name ASC";
2610
								
2611
		*/
2612
		//$filter_query = $this->getFilter($filters,true,true);
2613
		//$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft".$filter_query." icao <> '' ORDER BY aircraft_manufacturer ASC";
2614
2615
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2616
		
2617
		$sth = $this->db->prepare($query);
2618
		$sth->execute();
2619
2620
		$aircraft_array = array();
2621
		$temp_array = array();
2622
		
2623
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2624
		{
2625
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2626
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2627
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2628
2629
			$aircraft_array[] = $temp_array;
2630
		}
2631
2632
		return $aircraft_array;
2633
	}
2634
	
2635
	
2636
	/**
2637
	* Gets a list of all aircraft registrations
2638
	*
2639
	* @return Array list of aircraft registrations
2640
	*
2641
	*/
2642
	public function getAllAircraftRegistrations($filters = array())
2643
	{
2644
		$filter_query = $this->getFilter($filters,true,true);
2645
		$query  = "SELECT DISTINCT spotter_output.registration 
2646
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2647
				ORDER BY spotter_output.registration ASC";
2648
2649
		$sth = $this->db->prepare($query);
2650
		$sth->execute();
2651
2652
		$aircraft_array = array();
2653
		$temp_array = array();
2654
		
2655
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2656
		{
2657
			$temp_array['registration'] = $row['registration'];
2658
2659
			$aircraft_array[] = $temp_array;
2660
		}
2661
2662
		return $aircraft_array;
2663
	}
2664
2665
	/**
2666
	* Gets all source name
2667
	*
2668
	* @param String type format of source
2669
	* @return Array list of source name
2670
	*
2671
	*/
2672
	public function getAllSourceName($type = '',$filters = array())
2673
	{
2674
		$filter_query = $this->getFilter($filters,true,true);
2675
		$query_values = array();
2676
		$query  = "SELECT DISTINCT spotter_output.source_name 
2677
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2678
		if ($type != '') {
2679
			$query_values = array(':type' => $type);
2680
			$query .= " AND format_source = :type";
2681
		}
2682
		$query .= " ORDER BY spotter_output.source_name ASC";
2683
2684
		$sth = $this->db->prepare($query);
2685
		if (!empty($query_values)) $sth->execute($query_values);
2686
		else $sth->execute();
2687
2688
		$source_array = array();
2689
		$temp_array = array();
2690
		
2691
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2692
		{
2693
			$temp_array['source_name'] = $row['source_name'];
2694
			$source_array[] = $temp_array;
2695
		}
2696
		return $source_array;
2697
	}
2698
2699
2700
2701
	/**
2702
	* Gets a list of all airline names
2703
	*
2704
	* @return Array list of airline names
2705
	*
2706
	*/
2707
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2708
	{
2709
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2710
		$filter_query = $this->getFilter($filters,true,true);
2711
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2712
		if ($airline_type == '' || $airline_type == 'all') {
2713
			/*
2714
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2715
								FROM spotter_output
2716
								WHERE spotter_output.airline_icao <> '' 
2717
								ORDER BY spotter_output.airline_name ASC";
2718
			*/
2719
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2720
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2721
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2722
			if ($forsource === NULL) {
2723
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource IS NULL ORDER BY name ASC";
2724
				$query_data = array();
2725
			} else {
2726
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2727
				$query_data = array(':forsource' => $forsource);
2728
			}
2729
		} else {
2730
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2731
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2732
					AND spotter_output.airline_type = :airline_type 
2733
					ORDER BY spotter_output.airline_icao ASC";
2734
			$query_data = array(':airline_type' => $airline_type);
2735
		}
2736
		
2737
		$sth = $this->db->prepare($query);
2738
		$sth->execute($query_data);
2739
    
2740
		$airline_array = array();
2741
		$temp_array = array();
2742
		
2743
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2744
		{
2745
			$temp_array['airline_icao'] = $row['airline_icao'];
2746
			$temp_array['airline_name'] = $row['airline_name'];
2747
			$temp_array['airline_type'] = $row['airline_type'];
2748
2749
			$airline_array[] = $temp_array;
2750
		}
2751
		return $airline_array;
2752
	}
2753
	
2754
	/**
2755
	* Gets a list of all alliance names
2756
	*
2757
	* @return Array list of alliance names
2758
	*
2759
	*/
2760
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2761
	{
2762
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2763
		$filter_query = $this->getFilter($filters,true,true);
0 ignored issues
show
Unused Code introduced by
$filter_query is not used, you could remove the assignment.

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

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

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

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

Loading history...
2764
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2765
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2766
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2767
		if ($forsource === NULL) {
2768
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2769
			$query_data = array();
2770
		} else {
2771
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2772
			$query_data = array(':forsource' => $forsource);
2773
		}
2774
		
2775
		$sth = $this->db->prepare($query);
2776
		$sth->execute($query_data);
2777
    
2778
		$alliance_array = array();
0 ignored issues
show
Unused Code introduced by
$alliance_array is not used, you could remove the assignment.

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

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

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

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

Loading history...
2779
		$alliance_array = $sth->fetchAll(PDO::FETCH_ASSOC);
2780
		return $alliance_array;
2781
	}
2782
	
2783
	/**
2784
	* Gets a list of all airline countries
2785
	*
2786
	* @return Array list of airline countries
2787
	*
2788
	*/
2789
	public function getAllAirlineCountries($filters = array())
2790
	{
2791
		$filter_query = $this->getFilter($filters,true,true);
2792
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2793
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2794
				ORDER BY spotter_output.airline_country ASC";
2795
		
2796
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2797
		$sth = $this->db->prepare($query);
2798
		$sth->execute();
2799
2800
		$airline_array = array();
2801
		$temp_array = array();
2802
		
2803
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2804
		{
2805
			$temp_array['airline_country'] = $row['airline_country'];
2806
2807
			$airline_array[] = $temp_array;
2808
		}
2809
2810
		return $airline_array;
2811
	}
2812
2813
	
2814
	
2815
	/**
2816
	* Gets a list of all departure & arrival names
2817
	*
2818
	* @return Array list of airport names
2819
	*
2820
	*/
2821
	public function getAllAirportNames($filters = array())
2822
	{
2823
		$filter_query = $this->getFilter($filters,true,true);
2824
		$airport_array = array();
2825
		$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
2826
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2827
				ORDER BY spotter_output.departure_airport_city ASC";
2828
		
2829
		//$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";
2830
		$sth = $this->db->prepare($query);
2831
		$sth->execute();
2832
2833
		$temp_array = array();
2834
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2835
		{
2836
			$temp_array['airport_icao'] = $row['airport_icao'];
2837
			$temp_array['airport_name'] = $row['airport_name'];
2838
			$temp_array['airport_city'] = $row['airport_city'];
2839
			$temp_array['airport_country'] = $row['airport_country'];
2840
2841
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2842
		}
2843
2844
		$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
2845
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2846
								ORDER BY spotter_output.arrival_airport_city ASC";
2847
					
2848
		$sth = $this->db->prepare($query);
2849
		$sth->execute();
2850
2851
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2852
			{
2853
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2854
		//	{
2855
				$temp_array['airport_icao'] = $row['airport_icao'];
2856
				$temp_array['airport_name'] = $row['airport_name'];
2857
				$temp_array['airport_city'] = $row['airport_city'];
2858
				$temp_array['airport_country'] = $row['airport_country'];
2859
				
2860
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2861
		//	}
2862
		}
2863
2864
		return $airport_array;
2865
	} 
2866
	
2867
	
2868
	/**
2869
	* Gets a list of all departure & arrival airport countries
2870
	*
2871
	* @return Array list of airport countries
2872
	*
2873
	*/
2874
	public function getAllAirportCountries($filters = array())
2875
	{
2876
		$airport_array = array();
2877
					
2878
		  /*
2879
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2880
								FROM spotter_output
2881
								WHERE spotter_output.departure_airport_country <> '' 
2882
								ORDER BY spotter_output.departure_airport_country ASC";
2883
		*/
2884
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2885
		
2886
		$sth = $this->db->prepare($query);
2887
		$sth->execute();
2888
   
2889
		$temp_array = array();
2890
		
2891
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2892
		{
2893
			$temp_array['airport_country'] = $row['airport_country'];
2894
2895
			$airport_array[$row['airport_country']] = $temp_array;
2896
		}
2897
		$filter_query = $this->getFilter($filters,true,true);
2898
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2899
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2900
								ORDER BY spotter_output.arrival_airport_country ASC";
2901
					
2902
		$sth = $this->db->prepare($query);
2903
		$sth->execute();
2904
		
2905
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2906
		{
2907
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2908
			{
2909
				$temp_array['airport_country'] = $row['airport_country'];
2910
				$airport_array[$row['airport_country']] = $temp_array;
2911
			}
2912
		}
2913
2914
		return $airport_array;
2915
	} 
2916
	
2917
	
2918
	
2919
	
2920
	/**
2921
	* Gets a list of all countries (airline, departure airport & arrival airport)
2922
	*
2923
	* @return Array list of countries
2924
	*
2925
	*/
2926
	public function getAllCountries($filters = array())
2927
	{
2928
		$Connection= new Connection($this->db);
2929
		if ($Connection->tableExists('countries')) {
2930
			$query  = "SELECT countries.name AS airport_country
2931
				FROM countries
2932
				ORDER BY countries.name ASC";
2933
			$sth = $this->db->prepare($query);
2934
			$sth->execute();
2935
   
2936
			$temp_array = array();
2937
			$country_array = array();
2938
		
2939
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2940
			{
2941
				$temp_array['country'] = $row['airport_country'];
2942
				$country_array[$row['airport_country']] = $temp_array;
2943
			}
2944
		} else {
2945
			$filter_query = $this->getFilter($filters,true,true);
2946
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2947
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
2948
								ORDER BY spotter_output.departure_airport_country ASC";
2949
2950
			$sth = $this->db->prepare($query);
2951
			$sth->execute();
2952
   
2953
			$temp_array = array();
2954
			$country_array = array();
2955
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2956
			{
2957
				$temp_array['country'] = $row['airport_country'];
2958
				$country_array[$row['airport_country']] = $temp_array;
2959
			}
2960
2961
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2962
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2963
								ORDER BY spotter_output.arrival_airport_country ASC";
2964
					
2965
		$sth = $this->db->prepare($query);
2966
		$sth->execute();
2967
		
2968
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2969
		{
2970
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
2971
			{
2972
				$temp_array['country'] = $row['airport_country'];
2973
				
2974
				$country_array[$row['country']] = $temp_array;
2975
			}
2976
		}
2977
		
2978
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2979
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2980
								ORDER BY spotter_output.airline_country ASC";
2981
					
2982
		$sth = $this->db->prepare($query);
2983
		$sth->execute();
2984
		
2985
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2986
		{
2987
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
2988
			{
2989
				$temp_array['country'] = $row['airline_country'];
2990
				
2991
				$country_array[$row['country']] = $temp_array;
2992
			}
2993
		}
2994
		}  
2995
		return $country_array;
2996
	} 
2997
	
2998
	
2999
	
3000
	
3001
	/**
3002
	* Gets a list of all idents/callsigns
3003
	*
3004
	* @return Array list of ident/callsign names
3005
	*
3006
	*/
3007
	public function getAllIdents($filters = array())
3008
	{
3009
		$filter_query = $this->getFilter($filters,true,true);
3010
		$query  = "SELECT DISTINCT spotter_output.ident
3011
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
3012
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
3013
3014
		$sth = $this->db->prepare($query);
3015
		$sth->execute();
3016
    
3017
		$ident_array = array();
3018
		$temp_array = array();
3019
		
3020
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3021
		{
3022
			$temp_array['ident'] = $row['ident'];
3023
			$ident_array[] = $temp_array;
3024
		}
3025
3026
		return $ident_array;
3027
	}
3028
3029
	/**
3030
	* Get a list of flights from airport since 7 days
3031
	* @return Array number, icao, name and city of airports
3032
	*/
3033
3034
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
3035
		global $globalTimezone, $globalDBdriver;
3036
		$filter_query = $this->getFilter($filters,true,true);
3037
		if ($globalTimezone != '') {
3038
			date_default_timezone_set($globalTimezone);
3039
			$datetime = new DateTime();
3040
			$offset = $datetime->format('P');
3041
		} else $offset = '+00:00';
3042
		if ($airport_icao == '') {
3043
			if ($globalDBdriver == 'mysql') {
3044
				$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`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND departure_airport_icao <> 'NA' AND departure_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";
3045
			} else {
3046
				$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".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND departure_airport_icao <> 'NA' AND departure_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";
3047
			}
3048
			$sth = $this->db->prepare($query);
3049
			$sth->execute(array(':offset' => $offset));
3050
		} else {
3051
			if ($globalDBdriver == 'mysql') {
3052
				$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`".$filter_query." 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";
3053
			} else {
3054
				$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".$filter_query." 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";
3055
			}
3056
			$sth = $this->db->prepare($query);
3057
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3058
		}
3059
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3060
	}
3061
3062
	/**
3063
	* Get a list of flights from airport since 7 days
3064
	* @return Array number, icao, name and city of airports
3065
	*/
3066
3067
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
3068
		global $globalTimezone, $globalDBdriver;
3069
		if ($globalTimezone != '') {
3070
			date_default_timezone_set($globalTimezone);
3071
			$datetime = new DateTime();
3072
			$offset = $datetime->format('P');
3073
		} else $offset = '+00:00';
3074
		if ($airport_icao == '') {
3075
			if ($globalDBdriver == 'mysql') {
3076
				$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 departure_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";
3077
			} else {
3078
				$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 departure_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";
3079
			}
3080
			$sth = $this->db->prepare($query);
3081
			$sth->execute(array(':offset' => $offset));
3082
		} else {
3083
			if ($globalDBdriver == 'mysql') {
3084
				$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";
3085
			} else {
3086
				$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";
3087
			}
3088
			$sth = $this->db->prepare($query);
3089
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3090
		}
3091
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3092
	}
3093
3094
	/**
3095
	* Get a list of flights from detected airport since 7 days
3096
	* @return Array number, icao, name and city of airports
3097
	*/
3098
3099
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
3100
		global $globalTimezone, $globalDBdriver;
3101
		$filter_query = $this->getFilter($filters,true,true);
3102
		if ($globalTimezone != '') {
3103
			date_default_timezone_set($globalTimezone);
3104
			$datetime = new DateTime();
3105
			$offset = $datetime->format('P');
3106
		} else $offset = '+00:00';
3107
		if ($airport_icao == '') {
3108
			if ($globalDBdriver == 'mysql') {
3109
				$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 
3110
				FROM airport, spotter_output".$filter_query." 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' AND real_departure_airport_icao <> '' 
3111
				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";
3112
			} else {
3113
				$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 
3114
				FROM airport, spotter_output".$filter_query." 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' AND real_departure_airport_icao <> '' 
3115
				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";
3116
			}
3117
			$sth = $this->db->prepare($query);
3118
			$sth->execute(array(':offset' => $offset));
3119
		} else {
3120
			if ($globalDBdriver == 'mysql') {
3121
				$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 
3122
				FROM airport,spotter_output".$filter_query." 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 
3123
				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";
3124
			} else {
3125
				$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 
3126
				FROM airport,spotter_output".$filter_query." 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";
3127
			}
3128
			$sth = $this->db->prepare($query);
3129
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3130
		}
3131
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3132
	}
3133
3134
	/**
3135
	* Get a list of flights from detected airport since 7 days
3136
	* @return Array number, icao, name and city of airports
3137
	*/
3138
3139
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
3140
		global $globalTimezone, $globalDBdriver;
3141
		if ($globalTimezone != '') {
3142
			date_default_timezone_set($globalTimezone);
3143
			$datetime = new DateTime();
3144
			$offset = $datetime->format('P');
3145
		} else $offset = '+00:00';
3146
		if ($airport_icao == '') {
3147
			if ($globalDBdriver == 'mysql') {
3148
				$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 
3149
				FROM `spotter_output`, airport 
3150
				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' AND real_departure_airport_icao <> '' 
3151
				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";
3152
			} else {
3153
				$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 
3154
				FROM spotter_output, airport 
3155
				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' AND real_departure_airport_icao <> '' 
3156
				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";
3157
			}
3158
			$sth = $this->db->prepare($query);
3159
			$sth->execute(array(':offset' => $offset));
3160
		} else {
3161
			if ($globalDBdriver == 'mysql') {
3162
				$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 
3163
				FROM `spotter_output`, airport 
3164
				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 
3165
				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";
3166
			} else {
3167
				$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 
3168
				FROM spotter_output, airport 
3169
				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";
3170
			}
3171
			$sth = $this->db->prepare($query);
3172
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3173
		}
3174
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3175
	}
3176
3177
3178
	/**
3179
	* Get a list of flights to airport since 7 days
3180
	* @return Array number, icao, name and city of airports
3181
	*/
3182
3183
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
3184
		global $globalTimezone, $globalDBdriver;
3185
		$filter_query = $this->getFilter($filters,true,true);
3186
		if ($globalTimezone != '') {
3187
			date_default_timezone_set($globalTimezone);
3188
			$datetime = new DateTime();
3189
			$offset = $datetime->format('P');
3190
		} else $offset = '+00:00';
3191
		if ($airport_icao == '') {
3192
			if ($globalDBdriver == 'mysql') {
3193
				$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`".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_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";
3194
			} else {
3195
				$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".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '7 DAYS' AND arrival_airport_icao <> 'NA' AND arrival_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";
3196
			}
3197
			$sth = $this->db->prepare($query);
3198
			$sth->execute(array(':offset' => $offset));
3199
		} else {
3200
			if ($globalDBdriver == 'mysql') {
3201
				$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`".$filter_query." 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";
3202
			} else {
3203
				$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".$filter_query." 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";
3204
			}
3205
			$sth = $this->db->prepare($query);
3206
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3207
		}
3208
		
3209
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3210
	}
3211
3212
3213
	/**
3214
	* Get a list of flights detected to airport since 7 days
3215
	* @return Array number, icao, name and city of airports
3216
	*/
3217
3218
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
3219
		global $globalTimezone, $globalDBdriver;
3220
		$filter_query = $this->getFilter($filters,true,true);
3221
		if ($globalTimezone != '') {
3222
			date_default_timezone_set($globalTimezone);
3223
			$datetime = new DateTime();
3224
			$offset = $datetime->format('P');
3225
		} else $offset = '+00:00';
3226
		if ($airport_icao == '') {
3227
			if ($globalDBdriver == 'mysql') {
3228
				$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 
3229
				FROM airport,spotter_output".$filter_query." airport.icao = spotter_output.real_arrival_airport_icao AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao <> 'NA' AND arrival_airport_icao <> '' 
3230
				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";
3231
			} else {
3232
				$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 
3233
				FROM airport,spotter_output".$filter_query." 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' AND arrival_airport_icao <> '' 
3234
				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";
3235
			}
3236
			$sth = $this->db->prepare($query);
3237
			$sth->execute(array(':offset' => $offset));
3238
		} else {
3239
			if ($globalDBdriver == 'mysql') {
3240
				$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 
3241
				FROM airport,spotter_output".$filter_query." 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 
3242
				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";
3243
			} else {
3244
				$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 
3245
				FROM airport, spotter_output".$filter_query." 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 
3246
				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";
3247
			}
3248
			$sth = $this->db->prepare($query);
3249
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3250
		}
3251
		
3252
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3253
	}
3254
3255
3256
	/**
3257
	* Get a list of flights to airport since 7 days
3258
	* @return Array number, icao, name and city of airports
3259
	*/
3260
3261
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3262
		global $globalTimezone, $globalDBdriver;
3263
		if ($globalTimezone != '') {
3264
			date_default_timezone_set($globalTimezone);
3265
			$datetime = new DateTime();
3266
			$offset = $datetime->format('P');
3267
		} else $offset = '+00:00';
3268
		if ($airport_icao == '') {
3269
			if ($globalDBdriver == 'mysql') {
3270
				$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 arrival_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";
3271
			} else {
3272
				$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 arrival_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";
3273
			}
3274
			$sth = $this->db->prepare($query);
3275
			$sth->execute(array(':offset' => $offset));
3276
		} else {
3277
			if ($globalDBdriver == 'mysql') {
3278
				$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";
3279
			} else {
3280
				$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";
3281
			}
3282
			$sth = $this->db->prepare($query);
3283
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3284
		}
3285
		
3286
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3287
	}
3288
3289
3290
	/**
3291
	* Get a list of flights detected to airport since 7 days
3292
	* @return Array number, icao, name and city of airports
3293
	*/
3294
3295
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3296
		global $globalTimezone, $globalDBdriver;
3297
		if ($globalTimezone != '') {
3298
			date_default_timezone_set($globalTimezone);
3299
			$datetime = new DateTime();
3300
			$offset = $datetime->format('P');
3301
		} else $offset = '+00:00';
3302
		if ($airport_icao == '') {
3303
			if ($globalDBdriver == 'mysql') {
3304
				$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 
3305
				FROM `spotter_output`, airport 
3306
				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' AND arrival_airport_icao <> '' 
3307
				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";
3308
			} else {
3309
				$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 
3310
				FROM spotter_output, airport 
3311
				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' AND arrival_airport_icao <> '' 
3312
				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";
3313
			}
3314
			$sth = $this->db->prepare($query);
3315
			$sth->execute(array(':offset' => $offset));
3316
		} else {
3317
			if ($globalDBdriver == 'mysql') {
3318
				$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 
3319
				FROM `spotter_output`, airport 
3320
				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 
3321
				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";
3322
			} else {
3323
				$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 
3324
				FROM spotter_output, airport 
3325
				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 
3326
				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";
3327
			}
3328
			$sth = $this->db->prepare($query);
3329
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3330
		}
3331
		
3332
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3333
	}
3334
3335
3336
	/**
3337
	* Gets a list of all dates
3338
	*
3339
	* @return Array list of date names
3340
	*
3341
	*/
3342
	public function getAllDates()
3343
	{
3344
		global $globalTimezone, $globalDBdriver;
3345
		if ($globalTimezone != '') {
3346
			date_default_timezone_set($globalTimezone);
3347
			$datetime = new DateTime();
3348
			$offset = $datetime->format('P');
3349
		} else $offset = '+00:00';
3350
3351
		if ($globalDBdriver == 'mysql') {
3352
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3353
								FROM spotter_output
3354
								WHERE spotter_output.date <> '' 
3355
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3356
		} else {
3357
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3358
								FROM spotter_output
3359
								WHERE spotter_output.date <> '' 
3360
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3361
		}
3362
		
3363
		$sth = $this->db->prepare($query);
3364
		$sth->execute(array(':offset' => $offset));
3365
    
3366
		$date_array = array();
3367
		$temp_array = array();
3368
		
3369
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3370
		{
3371
			$temp_array['date'] = $row['date'];
3372
3373
			$date_array[] = $temp_array;
3374
		}
3375
3376
		return $date_array;
3377
	}
3378
	
3379
	
3380
	
3381
	/**
3382
	* Gets all route combinations
3383
	*
3384
	* @return Array the route list
3385
	*
3386
	*/
3387
	public function getAllRoutes()
3388
	{
3389
		$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 
3390
				FROM spotter_output
3391
				WHERE spotter_output.ident <> '' 
3392
				GROUP BY route
3393
				ORDER BY route ASC";
3394
3395
		$sth = $this->db->prepare($query);
3396
		$sth->execute();
3397
3398
		$routes_array = array();
3399
		$temp_array = array();
3400
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3401
		{
3402
			$temp_array['route'] = $row['route'];
3403
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3404
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3405
3406
			$routes_array[] = $temp_array;
3407
		}
3408
		return $routes_array;
3409
	}
3410
3411
	/**
3412
	* Update ident spotter data
3413
	*
3414
	* @param String $flightaware_id the ID from flightaware
3415
	* @param String $ident the flight ident
3416
	* @return String success or false
3417
	*
3418
	*/	
3419
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3420
	{
3421
		if (!is_numeric(substr($ident, 0, 3)))
3422
		{
3423
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3424
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3425
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3426
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3427
			} else {
3428
				$airline_array = $this->getAllAirlineInfo("NA");
3429
			}
3430
			if (count($airline_array) == 0) {
3431
				$airline_array = $this->getAllAirlineInfo("NA");
3432
			}
3433
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3434
				$airline_array = $this->getAllAirlineInfo("NA");
3435
			}
3436
		} else {
3437
			$airline_array = $this->getAllAirlineInfo("NA");
3438
		}
3439
                $airline_name = $airline_array[0]['name'];
3440
                $airline_icao = $airline_array[0]['icao'];
3441
                $airline_country = $airline_array[0]['country'];
3442
                $airline_type = $airline_array[0]['type'];
3443
3444
3445
		$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';
3446
                $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);
3447
3448
		try {
3449
			$sth = $this->db->prepare($query);
3450
			$sth->execute($query_values);
3451
		} catch (PDOException $e) {
3452
			return "error : ".$e->getMessage();
3453
		}
3454
		
3455
		return "success";
3456
3457
	}
3458
	/**
3459
	* Update latest spotter data
3460
	*
3461
	* @param String $flightaware_id the ID from flightaware
3462
	* @param String $ident the flight ident
3463
	* @param String $arrival_airport_icao the arrival airport
3464
	* @return String success or false
3465
	*
3466
	*/	
3467
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3468
	{
3469
		if ($groundspeed == '') $groundspeed = NULL;
3470
		$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';
3471
                $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);
3472
3473
		try {
3474
			$sth = $this->db->prepare($query);
3475
			$sth->execute($query_values);
3476
		} catch (PDOException $e) {
3477
			return "error : ".$e->getMessage();
3478
		}
3479
		
3480
		return "success";
3481
3482
	}
3483
3484
	/**
3485
	* Adds a new spotter data
3486
	*
3487
	* @param String $flightaware_id the ID from flightaware
3488
	* @param String $ident the flight ident
3489
	* @param String $aircraft_icao the aircraft type
3490
	* @param String $departure_airport_icao the departure airport
3491
	* @param String $arrival_airport_icao the arrival airport
3492
	* @param String $latitude latitude of flight
3493
	* @param String $longitude latitude of flight
3494
	* @param String $waypoints waypoints of flight
3495
	* @param String $altitude altitude of flight
3496
	* @param String $heading heading of flight
3497
	* @param String $groundspeed speed of flight
3498
	* @param String $date date of flight
3499
	* @param String $departure_airport_time departure time of flight
3500
	* @param String $arrival_airport_time arrival time of flight
3501
	* @param String $squawk squawk code of flight
3502
	* @param String $route_stop route stop of flight
3503
	* @param String $highlight highlight or not
3504
	* @param String $ModeS ModesS code of flight
3505
	* @param String $registration registration code of flight
3506
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3507
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3508
	* @param String $verticalrate vertival rate of flight
3509
	* @return String success or false
3510
	*/
3511
	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 = '')
3512
	{
3513
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3514
		
3515
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3516
		$Image = new Image($this->db);
3517
		$Common = new Common();
3518
		
3519
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3520
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3521
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3522
		if (!isset($globalVAM)) $globalVAM = FALSE;
3523
		date_default_timezone_set('UTC');
3524
		
3525
		//getting the registration
3526
		if ($flightaware_id != "" && $registration == '')
3527
		{
3528
			if (!is_string($flightaware_id))
3529
			{
3530
				return false;
3531
			} else {
3532
				if ($ModeS != '') {
3533
					$timeelapsed = microtime(true);
3534
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3535
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3536
				} else {
3537
					$myhex = explode('-',$flightaware_id);
3538
					if (count($myhex) > 0) {
3539
						$timeelapsed = microtime(true);
3540
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3541
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3542
					}
3543
				}
3544
			}
3545
		}
3546
		$fromsource = NULL;
3547
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3548
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3549
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3550
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3551
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3552
		//getting the airline information
3553
		if ($ident != "")
3554
		{
3555
			if (!is_string($ident))
3556
			{
3557
				return false;
3558
			} else {
3559
				if (!is_numeric(substr($ident, 0, 3)) && !((substr($ident, 0, 3) == 'OGN' || substr($ident, 0, 3) == 'FLR' || substr($ident, 0, 3) == 'ICA') && $format_source == 'aprs'))
3560
				{
3561
					$timeelapsed = microtime(true);
3562
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3563
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3564
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3565
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3566
					} else {
3567
						$airline_array = $this->getAllAirlineInfo("NA");
3568
					}
3569
					if (count($airline_array) == 0) {
3570
						$airline_array = $this->getAllAirlineInfo("NA");
3571
					}
3572
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3573
						$airline_array = $this->getAllAirlineInfo("NA");
3574
					}
3575
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3576
3577
				} else {
3578
					$timeelapsed = microtime(true);
3579
					$airline_array = $this->getAllAirlineInfo("NA");
3580
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3581
				}
3582
			}
3583
		} else $airline_array = array();
3584
		
3585
		//getting the aircraft information
3586
		$aircraft_array = array();
3587
		if ($aircraft_icao != '')
3588
		{
3589
			if (!is_string($aircraft_icao))
3590
			{
3591
				return false;
3592
			} else {
3593
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3594
				{
3595
					$timeelapsed = microtime(true);
3596
					$aircraft_array = $this->getAllAircraftInfo("NA");
3597
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3598
				} else {
3599
					$timeelapsed = microtime(true);
3600
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3601
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3602
				}
3603
			}
3604
		} else {
3605
			if ($ModeS != '') {
3606
				$timeelapsed = microtime(true);
3607
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3608
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3609
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3610
				{
3611
					$timeelapsed = microtime(true);
3612
					$aircraft_array = $this->getAllAircraftInfo("NA");
3613
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3614
				} else {
3615
					$timeelapsed = microtime(true);
3616
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3617
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3618
				}
3619
			}
3620
		}
3621
		
3622
		//getting the departure airport information
3623
		$departure_airport_array = array();
3624
		$departure_airport_icao = trim($departure_airport_icao);
3625
		if ($departure_airport_icao != '')
3626
		{
3627
			if (!is_string($departure_airport_icao))
3628
			{
3629
				return false;
3630
			} else {
3631
				$timeelapsed = microtime(true);
3632
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3633
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3634
			}
3635
		}
3636
		
3637
		//getting the arrival airport information
3638
		$arrival_airport_array = array();
3639
		$arrival_airport_icao = trim($arrival_airport_icao);
3640
		if ($arrival_airport_icao != '')
3641
		{
3642
			if (!is_string($arrival_airport_icao))
3643
			{
3644
				return false;
3645
			} else {
3646
				$timeelapsed = microtime(true);
3647
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3648
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3649
			}
3650
		}
3651
3652
		if ($latitude != "")
3653
		{
3654
			if (!is_numeric($latitude))
3655
			{
3656
				return false;
3657
			}
3658
		}
3659
		
3660
		if ($longitude != "")
3661
		{
3662
			if (!is_numeric($longitude))
3663
			{
3664
				return false;
3665
			}
3666
		}
3667
		
3668
		if ($waypoints != "")
3669
		{
3670
			if (!is_string($waypoints))
3671
			{
3672
				return false;
3673
			}
3674
		}
3675
		
3676
		if ($altitude != "")
3677
		{
3678
			if (!is_numeric($altitude))
3679
			{
3680
				return false;
3681
			}
3682
		} else $altitude = 0;
3683
		
3684
		if ($heading != "")
3685
		{
3686
			if (!is_numeric($heading))
3687
			{
3688
				return false;
3689
			}
3690
		}
3691
		
3692
		if ($groundspeed != "")
3693
		{
3694
			if (!is_numeric($groundspeed))
3695
			{
3696
				return false;
3697
			}
3698
		}
3699
3700
    
3701
		if ($date == "")
3702
		{
3703
			$date = date("Y-m-d H:i:s", time());
3704
		}
3705
3706
		//getting the aircraft image
3707
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3708
		{
3709
			$timeelapsed = microtime(true);
3710
			$image_array = $Image->getSpotterImage($registration);
3711
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3712
			if (!isset($image_array[0]['registration']))
3713
			{
3714
				//echo "Add image !!!! \n";
3715
				$Image->addSpotterImage($registration);
3716
			}
3717
			$timeelapsed = microtime(true);
3718
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3719
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3720
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3721
		}
3722
    
3723
		if ($globalIVAO && $aircraft_icao != '')
3724
		{
3725
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3726
            		else $airline_icao = '';
3727
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3728
			if (!isset($image_array[0]['registration']))
3729
			{
3730
				//echo "Add image !!!! \n";
3731
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3732
			}
3733
		}
3734
    
3735
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3736
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3737
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3738
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3739
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3740
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3741
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3742
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3743
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3744
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3745
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3746
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3747
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3748
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3749
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3750
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3751
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3752
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3753
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3754
	
3755
		if (count($airline_array) == 0) 
3756
		{
3757
                        $airline_array = $this->getAllAirlineInfo('NA');
3758
                }
3759
                if (count($aircraft_array) == 0) 
3760
                {
3761
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3762
                }
3763
                if (count($departure_airport_array) == 0 || $departure_airport_array[0]['icao'] == '' || $departure_airport_icao == '') 
3764
                {
3765
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3766
                }
3767
                if (count($arrival_airport_array) == 0 || $arrival_airport_array[0]['icao'] == '' || $arrival_airport_icao == '') 
3768
                {
3769
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3770
                }
3771
                if ($registration == '') $registration = 'NA';
3772
                if ($latitude == '' && $longitude == '') {
3773
            		$latitude = 0;
3774
            		$longitude = 0;
3775
            	}
3776
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3777
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3778
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3779
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3780
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3781
                $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) 
3782
                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)";
3783
3784
                $airline_name = $airline_array[0]['name'];
3785
                $airline_icao = $airline_array[0]['icao'];
3786
                $airline_country = $airline_array[0]['country'];
3787
                $airline_type = $airline_array[0]['type'];
3788
		if ($airline_type == '') {
3789
			$timeelapsed = microtime(true);
3790
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3791
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3792
		}
3793
		if ($airline_type == null) $airline_type = '';
3794
                $aircraft_type = $aircraft_array[0]['type'];
3795
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3796
                $departure_airport_name = $departure_airport_array[0]['name'];
3797
	        $departure_airport_city = $departure_airport_array[0]['city'];
3798
            	$departure_airport_country = $departure_airport_array[0]['country'];
3799
                
3800
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3801
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3802
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3803
                $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);
3804
3805
		try {
3806
		        
3807
			$sth = $this->db->prepare($query);
3808
			$sth->execute($query_values);
3809
			$this->db = null;
3810
		} catch (PDOException $e) {
3811
		    return "error : ".$e->getMessage();
3812
		}
3813
		
3814
		return "success";
3815
3816
	}
3817
	
3818
  
3819
	/**
3820
	* Gets the aircraft ident within the last hour
3821
	*
3822
	* @return String the ident
3823
	*
3824
	*/
3825
	public function getIdentFromLastHour($ident)
3826
	{
3827
		global $globalDBdriver, $globalTimezone;
3828
		if ($globalDBdriver == 'mysql') {
3829
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3830
								WHERE spotter_output.ident = :ident 
3831
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3832
								AND spotter_output.date < UTC_TIMESTAMP()";
3833
			$query_data = array(':ident' => $ident);
3834
		} else {
3835
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3836
								WHERE spotter_output.ident = :ident 
3837
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3838
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3839
			$query_data = array(':ident' => $ident);
3840
    		}
3841
		
3842
		$sth = $this->db->prepare($query);
3843
		$sth->execute($query_data);
3844
    		$ident_result='';
3845
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3846
		{
3847
			$ident_result = $row['ident'];
3848
		}
3849
3850
		return $ident_result;
3851
	}
3852
	
3853
	
3854
	/**
3855
	* Gets the aircraft data from the last 20 seconds
3856
	*
3857
	* @return Array the spotter data
3858
	*
3859
	*/
3860
	public function getRealTimeData($q = '')
3861
	{
3862
		global $globalDBdriver;
3863
		$additional_query = '';
3864
		if ($q != "")
3865
		{
3866
			if (!is_string($q))
3867
			{
3868
				return false;
3869
			} else {
3870
				$q_array = explode(" ", $q);
3871
				foreach ($q_array as $q_item){
3872
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3873
					$additional_query .= " AND (";
3874
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3875
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3876
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3877
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3878
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3879
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3880
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3881
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3882
					$additional_query .= ")";
3883
				}
3884
			}
3885
		}
3886
		if ($globalDBdriver == 'mysql') {
3887
			$query  = "SELECT spotter_output.* FROM spotter_output 
3888
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3889
				AND spotter_output.date < UTC_TIMESTAMP()";
3890
		} else {
3891
			$query  = "SELECT spotter_output.* FROM spotter_output 
3892
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3893
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3894
		}
3895
		$spotter_array = $this->getDataFromDB($query, array());
3896
3897
		return $spotter_array;
3898
	}
3899
	
3900
	
3901
	
3902
	 /**
3903
	* Gets all airlines that have flown over
3904
	*
3905
	* @return Array the airline list
3906
	*
3907
	*/
3908
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(), $year = '', $month = '', $day = '')
3909
	{
3910
		global $globalDBdriver;
3911
		$filter_query = $this->getFilter($filters,true,true);
3912
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3913
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA'";
3914
		if ($olderthanmonths > 0) {
3915
			if ($globalDBdriver == 'mysql') {
3916
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
3917
			} else {
3918
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
3919
			}
3920
		}
3921
                if ($sincedate != '') {
3922
			if ($globalDBdriver == 'mysql') {
3923
				$query .= " AND spotter_output.date > '".$sincedate."'";
3924
			} else {
3925
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3926
			}
3927
		}
3928
		$query_values = array();
3929
		if ($year != '') {
3930
			if ($globalDBdriver == 'mysql') {
3931
				$query .= " AND YEAR(spotter_output.date) = :year";
3932
				$query_values = array_merge($query_values,array(':year' => $year));
3933
			} else {
3934
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
3935
				$query_values = array_merge($query_values,array(':year' => $year));
3936
			}
3937
		}
3938
		if ($month != '') {
3939
			if ($globalDBdriver == 'mysql') {
3940
				$query .= " AND MONTH(spotter_output.date) = :month";
3941
				$query_values = array_merge($query_values,array(':month' => $month));
3942
			} else {
3943
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
3944
				$query_values = array_merge($query_values,array(':month' => $month));
3945
			}
3946
		}
3947
		if ($day != '') {
3948
			if ($globalDBdriver == 'mysql') {
3949
				$query .= " AND DAY(spotter_output.date) = :day";
3950
				$query_values = array_merge($query_values,array(':day' => $day));
3951
			} else {
3952
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
3953
				$query_values = array_merge($query_values,array(':day' => $day));
3954
			}
3955
		}
3956
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3957
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3958
3959
		$sth = $this->db->prepare($query);
3960
		$sth->execute($query_values);
3961
		$airline_array = array();
3962
		$temp_array = array();
3963
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3964
		{
3965
			$temp_array['airline_name'] = $row['airline_name'];
3966
			$temp_array['airline_icao'] = $row['airline_icao'];
3967
			$temp_array['airline_count'] = $row['airline_count'];
3968
			$temp_array['airline_country'] = $row['airline_country'];
3969
			$airline_array[] = $temp_array;
3970
		}
3971
		return $airline_array;
3972
	}
3973
3974
	 /**
3975
	* Gets all pilots that have flown over
3976
	*
3977
	* @return Array the pilots list
3978
	*
3979
	*/
3980
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '',$day = '')
3981
	{
3982
		global $globalDBdriver;
3983
		$filter_query = $this->getFilter($filters,true,true);
3984
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
3985
		 			FROM spotter_output".$filter_query." spotter_output.pilot_id <> '' ";
3986
                if ($olderthanmonths > 0) {
3987
            		if ($globalDBdriver == 'mysql') {
3988
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3989
			} else {
3990
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3991
			}
3992
		}
3993
                if ($sincedate != '') {
3994
            		if ($globalDBdriver == 'mysql') {
3995
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3996
			} else {
3997
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3998
			}
3999
		}
4000
		$query_values = array();
4001
		if ($year != '') {
4002
			if ($globalDBdriver == 'mysql') {
4003
				$query .= " AND YEAR(spotter_output.date) = :year";
4004
				$query_values = array_merge($query_values,array(':year' => $year));
4005
			} else {
4006
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4007
				$query_values = array_merge($query_values,array(':year' => $year));
4008
			}
4009
		}
4010
		if ($month != '') {
4011
			if ($globalDBdriver == 'mysql') {
4012
				$query .= " AND MONTH(spotter_output.date) = :month";
4013
				$query_values = array_merge($query_values,array(':month' => $month));
4014
			} else {
4015
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4016
				$query_values = array_merge($query_values,array(':month' => $month));
4017
			}
4018
		}
4019
		if ($day != '') {
4020
			if ($globalDBdriver == 'mysql') {
4021
				$query .= " AND DAY(spotter_output.date) = :day";
4022
				$query_values = array_merge($query_values,array(':day' => $day));
4023
			} else {
4024
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4025
				$query_values = array_merge($query_values,array(':day' => $day));
4026
			}
4027
		}
4028
		
4029
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4030
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4031
      
4032
		
4033
		$sth = $this->db->prepare($query);
4034
		$sth->execute($query_values);
4035
		$airline_array = array();
4036
		$temp_array = array();
4037
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4038
		{
4039
			$temp_array['pilot_name'] = $row['pilot_name'];
4040
			$temp_array['pilot_id'] = $row['pilot_id'];
4041
			$temp_array['pilot_count'] = $row['pilot_count'];
4042
			$temp_array['format_source'] = $row['format_source'];
4043
			$airline_array[] = $temp_array;
4044
		}
4045
		return $airline_array;
4046
	}
4047
	
4048
	/**
4049
	* Gets all pilots that have flown over
4050
	*
4051
	* @return Array the pilots list
4052
	*
4053
	*/
4054
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
4055
	{
4056
		global $globalDBdriver;
4057
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
4058
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
4059
                if ($olderthanmonths > 0) {
4060
            		if ($globalDBdriver == 'mysql') {
4061
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4062
			} else {
4063
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4064
			}
4065
		}
4066
                if ($sincedate != '') {
4067
            		if ($globalDBdriver == 'mysql') {
4068
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4069
			} else {
4070
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4071
			}
4072
		}
4073
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
4074
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4075
      
4076
		
4077
		$sth = $this->db->prepare($query);
4078
		$sth->execute();
4079
      
4080
		$airline_array = array();
4081
		$temp_array = array();
4082
        
4083
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4084
		{
4085
			$temp_array['pilot_name'] = $row['pilot_name'];
4086
			$temp_array['pilot_id'] = $row['pilot_id'];
4087
			$temp_array['pilot_count'] = $row['pilot_count'];
4088
			$temp_array['airline_icao'] = $row['airline_icao'];
4089
			$temp_array['format_source'] = $row['format_source'];
4090
			$airline_array[] = $temp_array;
4091
		}
4092
		return $airline_array;
4093
	}
4094
	
4095
	 /**
4096
	* Gets all owner that have flown over
4097
	*
4098
	* @return Array the pilots list
4099
	*
4100
	*/
4101
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4102
	{
4103
		global $globalDBdriver;
4104
		$filter_query = $this->getFilter($filters,true,true);
4105
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4106
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4107
                if ($olderthanmonths > 0) {
4108
            		if ($globalDBdriver == 'mysql') {
4109
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4110
			} else {
4111
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4112
			}
4113
		}
4114
                if ($sincedate != '') {
4115
            		if ($globalDBdriver == 'mysql') {
4116
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4117
			} else {
4118
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4119
			}
4120
		}
4121
		$query_values = array();
4122
		if ($year != '') {
4123
			if ($globalDBdriver == 'mysql') {
4124
				$query .= " AND YEAR(spotter_output.date) = :year";
4125
				$query_values = array_merge($query_values,array(':year' => $year));
4126
			} else {
4127
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4128
				$query_values = array_merge($query_values,array(':year' => $year));
4129
			}
4130
		}
4131
		if ($month != '') {
4132
			if ($globalDBdriver == 'mysql') {
4133
				$query .= " AND MONTH(spotter_output.date) = :month";
4134
				$query_values = array_merge($query_values,array(':month' => $month));
4135
			} else {
4136
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4137
				$query_values = array_merge($query_values,array(':month' => $month));
4138
			}
4139
		}
4140
		if ($day != '') {
4141
			if ($globalDBdriver == 'mysql') {
4142
				$query .= " AND DAY(spotter_output.date) = :day";
4143
				$query_values = array_merge($query_values,array(':day' => $day));
4144
			} else {
4145
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4146
				$query_values = array_merge($query_values,array(':day' => $day));
4147
			}
4148
		}
4149
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4150
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4151
		
4152
		$sth = $this->db->prepare($query);
4153
		$sth->execute($query_values);
4154
		$airline_array = array();
4155
		$temp_array = array();
4156
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4157
		{
4158
			$temp_array['owner_name'] = $row['owner_name'];
4159
			$temp_array['owner_count'] = $row['owner_count'];
4160
			$airline_array[] = $temp_array;
4161
		}
4162
		return $airline_array;
4163
	}
4164
	
4165
	 /**
4166
	* Gets all owner that have flown over
4167
	*
4168
	* @return Array the pilots list
4169
	*
4170
	*/
4171
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4172
	{
4173
		global $globalDBdriver;
4174
		$filter_query = $this->getFilter($filters,true,true);
4175
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4176
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4177
                if ($olderthanmonths > 0) {
4178
            		if ($globalDBdriver == 'mysql') {
4179
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4180
			} else {
4181
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4182
			}
4183
		}
4184
                if ($sincedate != '') {
4185
            		if ($globalDBdriver == 'mysql') {
4186
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4187
			} else {
4188
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4189
			}
4190
		}
4191
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4192
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4193
      
4194
		
4195
		$sth = $this->db->prepare($query);
4196
		$sth->execute();
4197
      
4198
		$airline_array = array();
4199
		$temp_array = array();
4200
        
4201
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4202
		{
4203
			$temp_array['owner_name'] = $row['owner_name'];
4204
			$temp_array['owner_count'] = $row['owner_count'];
4205
			$temp_array['airline_icao'] = $row['airline_icao'];
4206
			$airline_array[] = $temp_array;
4207
		}
4208
		return $airline_array;
4209
	}
4210
4211
	/**
4212
	* Gets all airlines that have flown over by aircraft
4213
	*
4214
	* @return Array the airline list
4215
	*
4216
	*/
4217
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4218
	{
4219
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4220
		$filter_query = $this->getFilter($filters,true,true);
4221
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4222
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4223
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4224
			    ORDER BY airline_count DESC";
4225
      
4226
		
4227
		$sth = $this->db->prepare($query);
4228
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4229
      
4230
		$airline_array = array();
4231
		$temp_array = array();
4232
        
4233
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4234
		{
4235
			$temp_array['airline_name'] = $row['airline_name'];
4236
			$temp_array['airline_icao'] = $row['airline_icao'];
4237
			$temp_array['airline_count'] = $row['airline_count'];
4238
			$temp_array['airline_country'] = $row['airline_country'];
4239
4240
			$airline_array[] = $temp_array;
4241
		}
4242
4243
		return $airline_array;
4244
	}
4245
4246
4247
	/**
4248
	* Gets all airline countries that have flown over by aircraft
4249
	*
4250
	* @return Array the airline country list
4251
	*
4252
	*/
4253
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4254
	{
4255
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4256
		$filter_query = $this->getFilter($filters,true,true);
4257
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4258
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4259
                    GROUP BY spotter_output.airline_country
4260
					ORDER BY airline_country_count DESC
4261
					LIMIT 10 OFFSET 0";
4262
      
4263
		
4264
		$sth = $this->db->prepare($query);
4265
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4266
      
4267
		$airline_country_array = array();
4268
		$temp_array = array();
4269
        
4270
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4271
		{
4272
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4273
			$temp_array['airline_country'] = $row['airline_country'];
4274
 
4275
			$airline_country_array[] = $temp_array;
4276
		}
4277
		return $airline_country_array;
4278
	}
4279
4280
4281
	
4282
	
4283
	/**
4284
	* Gets all airlines that have flown over by airport
4285
	*
4286
	* @return Array the airline list
4287
	*
4288
	*/
4289
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4290
	{
4291
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4292
		$filter_query = $this->getFilter($filters,true,true);
4293
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4294
		    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao ) 
4295
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4296
		    ORDER BY airline_count DESC";
4297
      
4298
		
4299
		$sth = $this->db->prepare($query);
4300
		$sth->execute(array(':airport_icao' => $airport_icao));
4301
      
4302
		$airline_array = array();
4303
		$temp_array = array();
4304
        
4305
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4306
		{
4307
			$temp_array['airline_name'] = $row['airline_name'];
4308
			$temp_array['airline_icao'] = $row['airline_icao'];
4309
			$temp_array['airline_count'] = $row['airline_count'];
4310
			$temp_array['airline_country'] = $row['airline_country'];
4311
4312
			$airline_array[] = $temp_array;
4313
		}
4314
		return $airline_array;
4315
	}
4316
4317
4318
	/**
4319
	* Gets all airline countries that have flown over by airport icao
4320
	*
4321
	* @return Array the airline country list
4322
	*
4323
	*/
4324
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4325
	{
4326
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4327
		$filter_query = $this->getFilter($filters,true,true);
4328
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4329
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao )
4330
					GROUP BY spotter_output.airline_country
4331
					ORDER BY airline_country_count DESC
4332
					LIMIT 10 OFFSET 0";
4333
4334
		
4335
		$sth = $this->db->prepare($query);
4336
		$sth->execute(array(':airport_icao' => $airport_icao));
4337
4338
		$airline_country_array = array();
4339
		$temp_array = array();
4340
        
4341
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4342
		{
4343
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4344
			$temp_array['airline_country'] = $row['airline_country'];
4345
 
4346
			$airline_country_array[] = $temp_array;
4347
		}
4348
		return $airline_country_array;
4349
	}
4350
4351
4352
	/**
4353
	* Gets all airlines that have flown over by aircraft manufacturer
4354
	*
4355
	* @return Array the airline list
4356
	*
4357
	*/
4358
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4359
	{
4360
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4361
		$filter_query = $this->getFilter($filters,true,true);
4362
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4363
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4364
					GROUP BY spotter_output.airline_name
4365
					ORDER BY airline_count DESC";
4366
 
4367
		$sth = $this->db->prepare($query);
4368
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4369
 
4370
		$airline_array = array();
4371
		$temp_array = array();
4372
        
4373
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4374
		{
4375
			$temp_array['airline_name'] = $row['airline_name'];
4376
			$temp_array['airline_icao'] = $row['airline_icao'];
4377
			$temp_array['airline_count'] = $row['airline_count'];
4378
			$temp_array['airline_country'] = $row['airline_country'];
4379
4380
			$airline_array[] = $temp_array;
4381
		}
4382
		return $airline_array;
4383
	}
4384
4385
4386
4387
	/**
4388
	* Gets all airline countries that have flown over by aircraft manufacturer
4389
	*
4390
	* @return Array the airline country list
4391
	*
4392
	*/
4393
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4394
	{
4395
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4396
		$filter_query = $this->getFilter($filters,true,true);
4397
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4398
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4399
					GROUP BY spotter_output.airline_country
4400
					ORDER BY airline_country_count DESC
4401
					LIMIT 10 OFFSET 0";
4402
      
4403
		
4404
		$sth = $this->db->prepare($query);
4405
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4406
4407
		$airline_country_array = array();
4408
		$temp_array = array();
4409
        
4410
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4411
		{
4412
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4413
			$temp_array['airline_country'] = $row['airline_country'];
4414
			$airline_country_array[] = $temp_array;
4415
		}
4416
		return $airline_country_array;
4417
	}
4418
4419
4420
	/**
4421
	* Gets all airlines that have flown over by date
4422
	*
4423
	* @return Array the airline list
4424
	*
4425
	*/
4426
	public function countAllAirlinesByDate($date,$filters = array())
4427
	{
4428
		global $globalTimezone, $globalDBdriver;
4429
		$filter_query = $this->getFilter($filters,true,true);
4430
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4431
		if ($globalTimezone != '') {
4432
			date_default_timezone_set($globalTimezone);
4433
			$datetime = new DateTime($date);
4434
			$offset = $datetime->format('P');
4435
		} else $offset = '+00:00';
4436
4437
		if ($globalDBdriver == 'mysql') {
4438
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4439
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4440
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4441
					ORDER BY airline_count DESC";
4442
		} else {
4443
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4444
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4445
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4446
					ORDER BY airline_count DESC";
4447
		}
4448
		
4449
		$sth = $this->db->prepare($query);
4450
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4451
4452
		$airline_array = array();
4453
		$temp_array = array();
4454
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4455
		{
4456
			$temp_array['airline_name'] = $row['airline_name'];
4457
			$temp_array['airline_icao'] = $row['airline_icao'];
4458
			$temp_array['airline_count'] = $row['airline_count'];
4459
			$temp_array['airline_country'] = $row['airline_country'];
4460
 
4461
			$airline_array[] = $temp_array;
4462
		}
4463
4464
		return $airline_array;
4465
	}	
4466
	
4467
	
4468
	/**
4469
	* Gets all airline countries that have flown over by date
4470
	*
4471
	* @return Array the airline country list
4472
	*
4473
	*/
4474
	public function countAllAirlineCountriesByDate($date,$filters = array())
4475
	{
4476
		global $globalTimezone, $globalDBdriver;
4477
		$filter_query = $this->getFilter($filters,true,true);
4478
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4479
		if ($globalTimezone != '') {
4480
			date_default_timezone_set($globalTimezone);
4481
			$datetime = new DateTime($date);
4482
			$offset = $datetime->format('P');
4483
		} else $offset = '+00:00';
4484
		
4485
		if ($globalDBdriver == 'mysql') {
4486
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4487
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4488
					GROUP BY spotter_output.airline_country
4489
					ORDER BY airline_country_count DESC
4490
					LIMIT 10 OFFSET 0";
4491
		} else {
4492
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4493
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4494
					GROUP BY spotter_output.airline_country
4495
					ORDER BY airline_country_count DESC
4496
					LIMIT 10 OFFSET 0";
4497
		}
4498
4499
		$sth = $this->db->prepare($query);
4500
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4501
 
4502
		$airline_country_array = array();
4503
		$temp_array = array();
4504
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4505
		{
4506
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4507
			$temp_array['airline_country'] = $row['airline_country'];
4508
4509
			$airline_country_array[] = $temp_array;
4510
		}
4511
		return $airline_country_array;
4512
	}
4513
4514
4515
	/**
4516
	* Gets all airlines that have flown over by ident/callsign
4517
	*
4518
	* @return Array the airline list
4519
	*
4520
	*/
4521
	public function countAllAirlinesByIdent($ident,$filters = array())
4522
	{
4523
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4524
		$filter_query = $this->getFilter($filters,true,true);
4525
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4526
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4527
				GROUP BY spotter_output.airline_name
4528
				ORDER BY airline_count DESC";
4529
      
4530
		
4531
		$sth = $this->db->prepare($query);
4532
		$sth->execute(array(':ident' => $ident));
4533
      
4534
		$airline_array = array();
4535
		$temp_array = array();
4536
        
4537
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4538
		{
4539
			$temp_array['airline_name'] = $row['airline_name'];
4540
			$temp_array['airline_icao'] = $row['airline_icao'];
4541
			$temp_array['airline_count'] = $row['airline_count'];
4542
			$temp_array['airline_country'] = $row['airline_country'];
4543
4544
			$airline_array[] = $temp_array;
4545
		}
4546
		return $airline_array;
4547
	}
4548
4549
	/**
4550
	* Gets all airlines that have flown over by route
4551
	*
4552
	* @return Array the airline list
4553
	*
4554
	*/
4555
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4556
	{
4557
		$filter_query = $this->getFilter($filters,true,true);
4558
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4559
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4560
4561
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4562
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4563
					GROUP BY spotter_output.airline_name
4564
					ORDER BY airline_count DESC";
4565
      
4566
		
4567
		$sth = $this->db->prepare($query);
4568
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4569
      
4570
		$airline_array = array();
4571
		$temp_array = array();
4572
        
4573
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4574
		{
4575
			$temp_array['airline_name'] = $row['airline_name'];
4576
			$temp_array['airline_icao'] = $row['airline_icao'];
4577
			$temp_array['airline_count'] = $row['airline_count'];
4578
			$temp_array['airline_country'] = $row['airline_country'];
4579
4580
			$airline_array[] = $temp_array;
4581
		}
4582
		return $airline_array;
4583
	}
4584
4585
	/**
4586
	* Gets all airline countries that have flown over by route
4587
	*
4588
	* @return Array the airline country list
4589
	*
4590
	*/
4591
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4592
	{
4593
		$filter_query = $this->getFilter($filters,true,true);
4594
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4595
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4596
      
4597
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4598
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4599
				GROUP BY spotter_output.airline_country
4600
				ORDER BY airline_country_count DESC
4601
				LIMIT 10 OFFSET 0";
4602
      
4603
		
4604
		$sth = $this->db->prepare($query);
4605
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4606
      
4607
		$airline_country_array = array();
4608
		$temp_array = array();
4609
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4610
		{
4611
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4612
			$temp_array['airline_country'] = $row['airline_country'];
4613
4614
			$airline_country_array[] = $temp_array;
4615
		}
4616
4617
		return $airline_country_array;
4618
	}
4619
4620
4621
	/**
4622
	* Gets all airlines that have flown over by country
4623
	*
4624
	* @return Array the airline list
4625
	*
4626
	*/
4627
	public function countAllAirlinesByCountry($country,$filters = array())
4628
	{
4629
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4630
		$filter_query = $this->getFilter($filters,true,true);
4631
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4632
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4633
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4634
			    ORDER BY airline_count DESC";
4635
      
4636
		
4637
		$sth = $this->db->prepare($query);
4638
		$sth->execute(array(':country' => $country));
4639
4640
		$airline_array = array();
4641
		$temp_array = array();
4642
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4643
		{
4644
			$temp_array['airline_name'] = $row['airline_name'];
4645
			$temp_array['airline_icao'] = $row['airline_icao'];
4646
			$temp_array['airline_count'] = $row['airline_count'];
4647
			$temp_array['airline_country'] = $row['airline_country'];
4648
 
4649
			$airline_array[] = $temp_array;
4650
		}
4651
		return $airline_array;
4652
	}
4653
4654
4655
	/**
4656
	* Gets all airline countries that have flown over by country
4657
	*
4658
	* @return Array the airline country list
4659
	*
4660
	*/
4661
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4662
	{
4663
		$filter_query = $this->getFilter($filters,true,true);
4664
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4665
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4666
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
4667
				GROUP BY spotter_output.airline_country
4668
				ORDER BY airline_country_count DESC
4669
				LIMIT 10 OFFSET 0";
4670
      
4671
		
4672
		$sth = $this->db->prepare($query);
4673
		$sth->execute(array(':country' => $country));
4674
4675
		$airline_country_array = array();
4676
		$temp_array = array();
4677
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4678
		{
4679
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4680
			$temp_array['airline_country'] = $row['airline_country'];
4681
4682
			$airline_country_array[] = $temp_array;
4683
		}
4684
		return $airline_country_array;
4685
	}
4686
4687
4688
	/**
4689
	* Gets all airlines countries
4690
	*
4691
	* @return Array the airline country list
4692
	*
4693
	*/
4694
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4695
	{
4696
		global $globalDBdriver;
4697
		$filter_query = $this->getFilter($filters,true,true);
4698
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4699
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4700
		$query_values = array();
4701
		if ($year != '') {
4702
			if ($globalDBdriver == 'mysql') {
4703
				$query .= " AND YEAR(spotter_output.date) = :year";
4704
				$query_values = array_merge($query_values,array(':year' => $year));
4705
			} else {
4706
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4707
				$query_values = array_merge($query_values,array(':year' => $year));
4708
			}
4709
		}
4710
		if ($month != '') {
4711
			if ($globalDBdriver == 'mysql') {
4712
				$query .= " AND MONTH(spotter_output.date) = :month";
4713
				$query_values = array_merge($query_values,array(':month' => $month));
4714
			} else {
4715
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4716
				$query_values = array_merge($query_values,array(':month' => $month));
4717
			}
4718
		}
4719
		if ($day != '') {
4720
			if ($globalDBdriver == 'mysql') {
4721
				$query .= " AND DAY(spotter_output.date) = :day";
4722
				$query_values = array_merge($query_values,array(':day' => $day));
4723
			} else {
4724
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4725
				$query_values = array_merge($query_values,array(':day' => $day));
4726
			}
4727
		}
4728
		$query .= " GROUP BY spotter_output.airline_country
4729
					ORDER BY airline_country_count DESC";
4730
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4731
      
4732
		$sth = $this->db->prepare($query);
4733
		$sth->execute($query_values);
4734
4735
		$airline_array = array();
4736
		$temp_array = array();
4737
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4738
		{
4739
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4740
			$temp_array['airline_country'] = $row['airline_country'];
4741
4742
			$airline_array[] = $temp_array;
4743
		}
4744
		return $airline_array;
4745
	}
4746
4747
	/**
4748
	* Gets all number of flight over countries
4749
	*
4750
	* @return Array the airline country list
4751
	*
4752
	*/
4753
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4754
	{
4755
		global $globalDBdriver;
4756
		//$filter_query = $this->getFilter($filters,true,true);
4757
		$Connection= new Connection($this->db);
4758
		if (!$Connection->tableExists('countries')) return array();
4759
		/*
4760
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4761
					FROM countries c, spotter_output s
4762
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4763
		*/
4764
/*
4765
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4766
					FROM countries c, spotter_live s
4767
					WHERE c.iso2 = s.over_country ";
4768
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spottrer_live) l ON c.iso2 = l.over_country ";
4769
*/
4770
		require_once('class.SpotterLive.php');
4771
		$SpotterLive = new SpotterLive();
4772
		$filter_query = $SpotterLive->getFilter($filters,true,true);
4773
		$filter_query .= ' over_country IS NOT NULL';
4774
                if ($olderthanmonths > 0) {
4775
			if ($globalDBdriver == 'mysql') {
4776
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4777
			} else {
4778
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4779
			}
4780
		}
4781
                if ($sincedate != '') {
4782
            		if ($globalDBdriver == 'mysql') {
4783
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
4784
			} else {
4785
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
4786
			}
4787
		}
4788
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb FROM countries c INNER JOIN (SELECT DISTINCT flightaware_id,over_country FROM spotter_live".$filter_query.") l ON c.iso2 = l.over_country ";
4789
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
4790
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4791
      
4792
		
4793
		$sth = $this->db->prepare($query);
4794
		$sth->execute();
4795
 
4796
		$flight_array = array();
4797
		$temp_array = array();
4798
        
4799
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4800
		{
4801
			$temp_array['flight_count'] = $row['nb'];
4802
			$temp_array['flight_country'] = $row['name'];
4803
			$temp_array['flight_country_iso3'] = $row['iso3'];
4804
			$temp_array['flight_country_iso2'] = $row['iso2'];
4805
			$flight_array[] = $temp_array;
4806
		}
4807
		return $flight_array;
4808
	}
4809
	
4810
	
4811
	/**
4812
	* Gets all aircraft types that have flown over
4813
	*
4814
	* @return Array the aircraft list
4815
	*
4816
	*/
4817
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4818
	{
4819
		global $globalDBdriver;
4820
		$filter_query = $this->getFilter($filters,true,true);
4821
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4822
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
4823
		if ($olderthanmonths > 0) {
4824
			if ($globalDBdriver == 'mysql') {
4825
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4826
			} else {
4827
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4828
			}
4829
		}
4830
		if ($sincedate != '') {
4831
			if ($globalDBdriver == 'mysql') {
4832
				$query .= " AND spotter_output.date > '".$sincedate."'";
4833
			} else {
4834
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4835
			}
4836
		}
4837
		$query_values = array();
4838
		if ($year != '') {
4839
			if ($globalDBdriver == 'mysql') {
4840
				$query .= " AND YEAR(spotter_output.date) = :year";
4841
				$query_values = array_merge($query_values,array(':year' => $year));
4842
			} else {
4843
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4844
				$query_values = array_merge($query_values,array(':year' => $year));
4845
			}
4846
		}
4847
		if ($month != '') {
4848
			if ($globalDBdriver == 'mysql') {
4849
				$query .= " AND MONTH(spotter_output.date) = :month";
4850
				$query_values = array_merge($query_values,array(':month' => $month));
4851
			} else {
4852
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4853
				$query_values = array_merge($query_values,array(':month' => $month));
4854
			}
4855
		}
4856
		if ($day != '') {
4857
			if ($globalDBdriver == 'mysql') {
4858
				$query .= " AND DAY(spotter_output.date) = :day";
4859
				$query_values = array_merge($query_values,array(':day' => $day));
4860
			} else {
4861
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4862
				$query_values = array_merge($query_values,array(':day' => $day));
4863
			}
4864
		}
4865
4866
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4867
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4868
 
4869
		$sth = $this->db->prepare($query);
4870
		$sth->execute($query_values);
4871
4872
		$aircraft_array = array();
4873
		$temp_array = array();
4874
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4875
		{
4876
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4877
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4878
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4879
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4880
			$aircraft_array[] = $temp_array;
4881
		}
4882
		return $aircraft_array;
4883
	}
4884
4885
	/**
4886
	* Gets all aircraft types that have flown over by airline
4887
	*
4888
	* @return Array the aircraft list
4889
	*
4890
	*/
4891
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
4892
	{
4893
		global $globalDBdriver;
4894
		$filter_query = $this->getFilter($filters,true,true);
4895
		$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 
4896
		    FROM spotter_output".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA' ";
4897
		if ($olderthanmonths > 0) {
4898
			if ($globalDBdriver == 'mysql') {
4899
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4900
			} else {
4901
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4902
			}
4903
		}
4904
		if ($sincedate != '') {
4905
			if ($globalDBdriver == 'mysql') {
4906
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4907
			} else {
4908
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4909
			}
4910
		}
4911
		$query_values = array();
4912
		if ($year != '') {
4913
			if ($globalDBdriver == 'mysql') {
4914
				$query .= " AND YEAR(spotter_output.date) = :year";
4915
				$query_values = array_merge($query_values,array(':year' => $year));
4916
			} else {
4917
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4918
				$query_values = array_merge($query_values,array(':year' => $year));
4919
			}
4920
		}
4921
		if ($month != '') {
4922
			if ($globalDBdriver == 'mysql') {
4923
				$query .= " AND MONTH(spotter_output.date) = :month";
4924
				$query_values = array_merge($query_values,array(':month' => $month));
4925
			} else {
4926
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4927
				$query_values = array_merge($query_values,array(':month' => $month));
4928
			}
4929
		}
4930
		if ($day != '') {
4931
			if ($globalDBdriver == 'mysql') {
4932
				$query .= " AND DAY(spotter_output.date) = :day";
4933
				$query_values = array_merge($query_values,array(':day' => $day));
4934
			} else {
4935
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4936
				$query_values = array_merge($query_values,array(':day' => $day));
4937
			}
4938
		}
4939
4940
		$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";
4941
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4942
 
4943
		$sth = $this->db->prepare($query);
4944
		$sth->execute($query_values);
4945
4946
		$aircraft_array = array();
4947
		$temp_array = array();
4948
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4949
		{
4950
			$temp_array['airline_icao'] = $row['airline_icao'];
4951
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4952
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4953
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4954
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4955
			$aircraft_array[] = $temp_array;
4956
		}
4957
		return $aircraft_array;
4958
	}
4959
4960
	/**
4961
	* Gets all aircraft types that have flown over by months
4962
	*
4963
	* @return Array the aircraft list
4964
	*
4965
	*/
4966
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4967
	{
4968
		global $globalDBdriver;
4969
		$filter_query = $this->getFilter($filters,true,true);
4970
		$query  = "SELECT EXTRACT(month from spotter_output.date) as month, EXTRACT(year from spotter_output.date) as year,spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4971
		    FROM spotter_output".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> '' AND spotter_output.airline_icao <>'' AND spotter_output.airline_icao <> 'NA' ";
4972
		if ($olderthanmonths > 0) {
4973
			if ($globalDBdriver == 'mysql') {
4974
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4975
			} else {
4976
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4977
			}
4978
		}
4979
		if ($sincedate != '') {
4980
			if ($globalDBdriver == 'mysql') {
4981
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4982
			} else {
4983
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4984
			}
4985
		}
4986
4987
		$query .= "GROUP BY EXTRACT(month from spotter_output.date), EXTRACT(year from spotter_output.date), spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4988
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4989
 
4990
		$sth = $this->db->prepare($query);
4991
		$sth->execute();
4992
4993
		$aircraft_array = array();
4994
		$temp_array = array();
4995
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4996
		{
4997
			//$temp_array['airline_icao'] = $row['airline_icao'];
4998
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4999
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5000
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5001
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5002
			$aircraft_array[] = $temp_array;
5003
		}
5004
		return $aircraft_array;
5005
	}
5006
5007
5008
	/**
5009
	* Gets all aircraft registration that have flown over by aircaft icao
5010
	*
5011
	* @return Array the aircraft list
5012
	*
5013
	*/
5014
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
5015
	{
5016
		$Image = new Image($this->db);
5017
		$filter_query = $this->getFilter($filters,true,true);
5018
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5019
5020
		$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  
5021
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
5022
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
5023
				ORDER BY registration_count DESC";
5024
5025
		$sth = $this->db->prepare($query);
5026
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5027
5028
		$aircraft_array = array();
5029
		$temp_array = array();
5030
        
5031
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5032
		{
5033
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5034
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5035
			$temp_array['registration'] = $row['registration'];
5036
			$temp_array['airline_name'] = $row['airline_name'];
5037
			$temp_array['image_thumbnail'] = "";
5038
			if($row['registration'] != "")
5039
			{
5040
				$image_array = $Image->getSpotterImage($row['registration']);
5041
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5042
			}
5043
			$temp_array['registration_count'] = $row['registration_count'];
5044
5045
			$aircraft_array[] = $temp_array;
5046
		}
5047
		return $aircraft_array;
5048
	}
5049
5050
5051
	/**
5052
	* Gets all aircraft types that have flown over by airline icao
5053
	*
5054
	* @return Array the aircraft list
5055
	*
5056
	*/
5057
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
5058
	{
5059
		$filter_query = $this->getFilter($filters,true,true);
5060
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5061
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5062
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
5063
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5064
			    ORDER BY aircraft_icao_count DESC";
5065
5066
		$sth = $this->db->prepare($query);
5067
		$sth->execute(array(':airline_icao' => $airline_icao));
5068
5069
		$aircraft_array = array();
5070
		$temp_array = array();
5071
5072
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5073
		{
5074
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5075
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5076
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5077
5078
			$aircraft_array[] = $temp_array;
5079
		}
5080
		return $aircraft_array;
5081
	}
5082
5083
5084
	/**
5085
	* Gets all aircraft registration that have flown over by airline icao
5086
	*
5087
	* @return Array the aircraft list
5088
	*
5089
	*/
5090
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
5091
	{
5092
		$filter_query = $this->getFilter($filters,true,true);
5093
		$Image = new Image($this->db);
5094
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5095
5096
		$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 
5097
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
5098
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5099
			    ORDER BY registration_count DESC";
5100
5101
		$sth = $this->db->prepare($query);
5102
		$sth->execute(array(':airline_icao' => $airline_icao));
5103
5104
		$aircraft_array = array();
5105
		$temp_array = array();
5106
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5107
		{
5108
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5109
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5110
			$temp_array['registration'] = $row['registration'];
5111
			$temp_array['airline_name'] = $row['airline_name'];
5112
			$temp_array['image_thumbnail'] = "";
5113
			if($row['registration'] != "")
5114
			{
5115
				$image_array = $Image->getSpotterImage($row['registration']);
5116
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5117
			}
5118
			$temp_array['registration_count'] = $row['registration_count'];
5119
5120
			$aircraft_array[] = $temp_array;
5121
		}
5122
		return $aircraft_array;
5123
	}
5124
5125
5126
	/**
5127
	* Gets all aircraft manufacturer that have flown over by airline icao
5128
	*
5129
	* @return Array the aircraft list
5130
	*
5131
	*/
5132
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5133
	{
5134
		$filter_query = $this->getFilter($filters,true,true);
5135
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5136
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5137
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5138
				GROUP BY spotter_output.aircraft_manufacturer 
5139
				ORDER BY aircraft_manufacturer_count DESC";
5140
5141
		$sth = $this->db->prepare($query);
5142
		$sth->execute(array(':airline_icao' => $airline_icao));
5143
5144
		$aircraft_array = array();
5145
		$temp_array = array();
5146
5147
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5148
		{
5149
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5150
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5151
5152
			$aircraft_array[] = $temp_array;
5153
		}
5154
		return $aircraft_array;
5155
	}
5156
5157
5158
	/**
5159
	* Gets all aircraft types that have flown over by airline icao
5160
	*
5161
	* @return Array the aircraft list
5162
	*
5163
	*/
5164
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5165
	{
5166
		$filter_query = $this->getFilter($filters,true,true);
5167
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5168
5169
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5170
				FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao) 
5171
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5172
				ORDER BY aircraft_icao_count DESC";
5173
 
5174
		$sth = $this->db->prepare($query);
5175
		$sth->execute(array(':airport_icao' => $airport_icao));
5176
5177
		$aircraft_array = array();
5178
		$temp_array = array();
5179
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5180
		{
5181
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5182
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5183
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5184
5185
			$aircraft_array[] = $temp_array;
5186
		}
5187
		return $aircraft_array;
5188
	}
5189
5190
5191
	/**
5192
	* Gets all aircraft registration that have flown over by airport icao
5193
	*
5194
	* @return Array the aircraft list
5195
	*
5196
	*/
5197
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5198
	{
5199
		$filter_query = $this->getFilter($filters,true,true);
5200
		$Image = new Image($this->db);
5201
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5202
5203
		$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  
5204
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5205
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5206
		    ORDER BY registration_count DESC";
5207
5208
		$sth = $this->db->prepare($query);
5209
		$sth->execute(array(':airport_icao' => $airport_icao));
5210
5211
		$aircraft_array = array();
5212
		$temp_array = array();
5213
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5214
		{
5215
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5216
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5217
			$temp_array['registration'] = $row['registration'];
5218
			$temp_array['airline_name'] = $row['airline_name'];
5219
			$temp_array['image_thumbnail'] = "";
5220
			if($row['registration'] != "")
5221
			{
5222
				$image_array = $Image->getSpotterImage($row['registration']);
5223
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5224
			}
5225
			$temp_array['registration_count'] = $row['registration_count'];
5226
			$aircraft_array[] = $temp_array;
5227
		}
5228
		return $aircraft_array;
5229
	}
5230
	
5231
	
5232
	/**
5233
	* Gets all aircraft manufacturer that have flown over by airport icao
5234
	*
5235
	* @return Array the aircraft list
5236
	*
5237
	*/
5238
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5239
	{
5240
		$filter_query = $this->getFilter($filters,true,true);
5241
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5242
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5243
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)  
5244
                    GROUP BY spotter_output.aircraft_manufacturer 
5245
					ORDER BY aircraft_manufacturer_count DESC";
5246
5247
		
5248
		$sth = $this->db->prepare($query);
5249
		$sth->execute(array(':airport_icao' => $airport_icao));
5250
5251
		$aircraft_array = array();
5252
		$temp_array = array();
5253
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5254
		{
5255
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5256
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5257
			$aircraft_array[] = $temp_array;
5258
		}
5259
		return $aircraft_array;
5260
	}
5261
5262
	/**
5263
	* Gets all aircraft types that have flown over by aircraft manufacturer
5264
	*
5265
	* @return Array the aircraft list
5266
	*
5267
	*/
5268
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5269
	{
5270
		$filter_query = $this->getFilter($filters,true,true);
5271
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5272
5273
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5274
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5275
                    GROUP BY spotter_output.aircraft_name 
5276
					ORDER BY aircraft_icao_count DESC";
5277
5278
		$sth = $this->db->prepare($query);
5279
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5280
		$aircraft_array = array();
5281
		$temp_array = array();
5282
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5283
		{
5284
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5285
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5286
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5287
			$aircraft_array[] = $temp_array;
5288
		}
5289
		return $aircraft_array;
5290
	}
5291
5292
5293
	/**
5294
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5295
	*
5296
	* @return Array the aircraft list
5297
	*
5298
	*/
5299
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5300
	{
5301
		$filter_query = $this->getFilter($filters,true,true);
5302
		$Image = new Image($this->db);
5303
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5304
5305
		$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   
5306
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5307
                    GROUP BY spotter_output.registration 
5308
					ORDER BY registration_count DESC";
5309
5310
		
5311
		$sth = $this->db->prepare($query);
5312
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5313
		$aircraft_array = array();
5314
		$temp_array = array();
5315
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5316
		{
5317
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5318
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5319
			$temp_array['registration'] = $row['registration'];
5320
			$temp_array['airline_name'] = $row['airline_name'];
5321
			$temp_array['image_thumbnail'] = "";
5322
			if($row['registration'] != "")
5323
			{
5324
				$image_array = $Image->getSpotterImage($row['registration']);
5325
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5326
			}
5327
			$temp_array['registration_count'] = $row['registration_count'];
5328
			$aircraft_array[] = $temp_array;
5329
		}
5330
		return $aircraft_array;
5331
	}
5332
5333
	/**
5334
	* Gets all aircraft types that have flown over by date
5335
	*
5336
	* @return Array the aircraft list
5337
	*
5338
	*/
5339
	public function countAllAircraftTypesByDate($date,$filters = array())
5340
	{
5341
		global $globalTimezone, $globalDBdriver;
5342
		$filter_query = $this->getFilter($filters,true,true);
5343
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5344
		if ($globalTimezone != '') {
5345
			date_default_timezone_set($globalTimezone);
5346
			$datetime = new DateTime($date);
5347
			$offset = $datetime->format('P');
5348
		} else $offset = '+00:00';
5349
5350
		if ($globalDBdriver == 'mysql') {
5351
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5352
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5353
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5354
					ORDER BY aircraft_icao_count DESC";
5355
		} else {
5356
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5357
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5358
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5359
					ORDER BY aircraft_icao_count DESC";
5360
		}
5361
		
5362
		$sth = $this->db->prepare($query);
5363
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5364
5365
		$aircraft_array = array();
5366
		$temp_array = array();
5367
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5368
		{
5369
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5370
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5371
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5372
5373
			$aircraft_array[] = $temp_array;
5374
		}
5375
		return $aircraft_array;
5376
	}
5377
5378
5379
	/**
5380
	* Gets all aircraft registration that have flown over by date
5381
	*
5382
	* @return Array the aircraft list
5383
	*
5384
	*/
5385
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5386
	{
5387
		global $globalTimezone, $globalDBdriver;
5388
		$filter_query = $this->getFilter($filters,true,true);
5389
		$Image = new Image($this->db);
5390
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5391
		if ($globalTimezone != '') {
5392
			date_default_timezone_set($globalTimezone);
5393
			$datetime = new DateTime($date);
5394
			$offset = $datetime->format('P');
5395
		} else $offset = '+00:00';
5396
5397
		if ($globalDBdriver == 'mysql') {
5398
			$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 
5399
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5400
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5401
					ORDER BY registration_count DESC";
5402
		} else {
5403
			$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    
5404
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5405
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5406
					ORDER BY registration_count DESC";
5407
		}
5408
		
5409
		$sth = $this->db->prepare($query);
5410
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5411
5412
		$aircraft_array = array();
5413
		$temp_array = array();
5414
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5415
		{
5416
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5417
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5418
			$temp_array['registration'] = $row['registration'];
5419
			$temp_array['airline_name'] = $row['airline_name'];
5420
			$temp_array['image_thumbnail'] = "";
5421
			if($row['registration'] != "")
5422
			{
5423
				$image_array = $Image->getSpotterImage($row['registration']);
5424
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5425
			}
5426
			$temp_array['registration_count'] = $row['registration_count'];
5427
 
5428
			$aircraft_array[] = $temp_array;
5429
		}
5430
		return $aircraft_array;
5431
	}
5432
5433
5434
	/**
5435
	* Gets all aircraft manufacturer that have flown over by date
5436
	*
5437
	* @return Array the aircraft manufacturer list
5438
	*
5439
	*/
5440
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5441
	{
5442
		global $globalTimezone, $globalDBdriver;
5443
		$filter_query = $this->getFilter($filters,true,true);
5444
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5445
		if ($globalTimezone != '') {
5446
			date_default_timezone_set($globalTimezone);
5447
			$datetime = new DateTime($date);
5448
			$offset = $datetime->format('P');
5449
		} else $offset = '+00:00';
5450
5451
		if ($globalDBdriver == 'mysql') {
5452
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5453
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5454
				GROUP BY spotter_output.aircraft_manufacturer 
5455
				ORDER BY aircraft_manufacturer_count DESC";
5456
		} else {
5457
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5458
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5459
				GROUP BY spotter_output.aircraft_manufacturer 
5460
				ORDER BY aircraft_manufacturer_count DESC";
5461
		}
5462
		
5463
		$sth = $this->db->prepare($query);
5464
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5465
5466
		$aircraft_array = array();
5467
		$temp_array = array();
5468
5469
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5470
		{
5471
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5472
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5473
5474
			$aircraft_array[] = $temp_array;
5475
		}
5476
		return $aircraft_array;
5477
	}
5478
5479
5480
	/**
5481
	* Gets all aircraft types that have flown over by ident/callsign
5482
	*
5483
	* @return Array the aircraft list
5484
	*
5485
	*/
5486
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5487
	{
5488
		$filter_query = $this->getFilter($filters,true,true);
5489
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5490
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5491
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5492
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5493
				ORDER BY aircraft_icao_count DESC";
5494
5495
		$sth = $this->db->prepare($query);
5496
		$sth->execute(array(':ident' => $ident));
5497
      
5498
		$aircraft_array = array();
5499
		$temp_array = array();
5500
5501
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5502
		{
5503
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5504
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5505
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5506
5507
			$aircraft_array[] = $temp_array;
5508
		}
5509
		return $aircraft_array;
5510
	}
5511
5512
5513
	/**
5514
	* Gets all aircraft registration that have flown over by ident/callsign
5515
	*
5516
	* @return Array the aircraft list
5517
	*
5518
	*/
5519
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5520
	{
5521
		$filter_query = $this->getFilter($filters,true,true);
5522
		$Image = new Image($this->db);
5523
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5524
5525
		$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  
5526
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5527
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5528
		    ORDER BY registration_count DESC";
5529
5530
		
5531
		$sth = $this->db->prepare($query);
5532
		$sth->execute(array(':ident' => $ident));
5533
      
5534
		$aircraft_array = array();
5535
		$temp_array = array();
5536
        
5537
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5538
		{
5539
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5540
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5541
			$temp_array['registration'] = $row['registration'];
5542
			$temp_array['airline_name'] = $row['airline_name'];
5543
			$temp_array['image_thumbnail'] = "";
5544
			if($row['registration'] != "")
5545
			{
5546
				$image_array = $Image->getSpotterImage($row['registration']);
5547
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5548
				else $temp_array['image_thumbnail'] = '';
5549
			}
5550
			$temp_array['registration_count'] = $row['registration_count'];
5551
			$aircraft_array[] = $temp_array;
5552
		}
5553
		return $aircraft_array;
5554
	}
5555
5556
5557
	/**
5558
	* Gets all aircraft manufacturer that have flown over by ident/callsign
5559
	*
5560
	* @return Array the aircraft manufacturer list
5561
	*
5562
	*/
5563
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
5564
	{
5565
		$filter_query = $this->getFilter($filters,true,true);
5566
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5567
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5568
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
5569
                    GROUP BY spotter_output.aircraft_manufacturer 
5570
					ORDER BY aircraft_manufacturer_count DESC";
5571
5572
		
5573
		$sth = $this->db->prepare($query);
5574
		$sth->execute(array(':ident' => $ident));
5575
		$aircraft_array = array();
5576
		$temp_array = array();
5577
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5578
		{
5579
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5580
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5581
			$aircraft_array[] = $temp_array;
5582
		}
5583
		return $aircraft_array;
5584
	}
5585
5586
5587
	/**
5588
	* Gets all aircraft types that have flown over by route
5589
	*
5590
	* @return Array the aircraft list
5591
	*
5592
	*/
5593
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5594
	{
5595
		$filter_query = $this->getFilter($filters,true,true);
5596
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5597
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5598
		
5599
5600
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5601
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
5602
                    GROUP BY spotter_output.aircraft_name 
5603
					ORDER BY aircraft_icao_count DESC";
5604
 
5605
		
5606
		$sth = $this->db->prepare($query);
5607
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5608
		$aircraft_array = array();
5609
		$temp_array = array();
5610
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5611
		{
5612
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5613
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5614
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5615
			$aircraft_array[] = $temp_array;
5616
		}
5617
		return $aircraft_array;
5618
	}
5619
5620
	/**
5621
	* Gets all aircraft registration that have flown over by route
5622
	*
5623
	* @return Array the aircraft list
5624
	*
5625
	*/
5626
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5627
	{
5628
		$filter_query = $this->getFilter($filters,true,true);
5629
		$Image = new Image($this->db);
5630
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5631
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5632
5633
		$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   
5634
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)   
5635
                    GROUP BY spotter_output.registration 
5636
					ORDER BY registration_count DESC";
5637
5638
		
5639
		$sth = $this->db->prepare($query);
5640
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5641
      
5642
		$aircraft_array = array();
5643
		$temp_array = array();
5644
        
5645
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5646
		{
5647
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5648
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5649
			$temp_array['registration'] = $row['registration'];
5650
			$temp_array['airline_name'] = $row['airline_name'];
5651
			$temp_array['image_thumbnail'] = "";
5652
			if($row['registration'] != "")
5653
			{
5654
				$image_array = $Image->getSpotterImage($row['registration']);
5655
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5656
			}
5657
			$temp_array['registration_count'] = $row['registration_count'];
5658
          
5659
			$aircraft_array[] = $temp_array;
5660
		}
5661
5662
		return $aircraft_array;
5663
	}
5664
	
5665
	
5666
	/**
5667
	* Gets all aircraft manufacturer that have flown over by route
5668
	*
5669
	* @return Array the aircraft manufacturer list
5670
	*
5671
	*/
5672
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5673
	{
5674
		$filter_query = $this->getFilter($filters,true,true);
5675
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5676
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5677
5678
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5679
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
5680
                    GROUP BY spotter_output.aircraft_manufacturer 
5681
					ORDER BY aircraft_manufacturer_count DESC";
5682
5683
		
5684
		$sth = $this->db->prepare($query);
5685
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5686
      
5687
		$aircraft_array = array();
5688
		$temp_array = array();
5689
        
5690
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5691
		{
5692
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5693
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5694
          
5695
			$aircraft_array[] = $temp_array;
5696
		}
5697
5698
		return $aircraft_array;
5699
	}	
5700
5701
	
5702
	
5703
	
5704
	/**
5705
	* Gets all aircraft types that have flown over by country
5706
	*
5707
	* @return Array the aircraft list
5708
	*
5709
	*/
5710
	public function countAllAircraftTypesByCountry($country,$filters = array())
5711
	{
5712
		$filter_query = $this->getFilter($filters,true,true);
5713
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5714
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5715
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
5716
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5717
			    ORDER BY aircraft_icao_count DESC";
5718
 
5719
		
5720
		$sth = $this->db->prepare($query);
5721
		$sth->execute(array(':country' => $country));
5722
      
5723
		$aircraft_array = array();
5724
		$temp_array = array();
5725
        
5726
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5727
		{
5728
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5729
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5730
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5731
          
5732
			$aircraft_array[] = $temp_array;
5733
		}
5734
5735
		return $aircraft_array;
5736
	}
5737
5738
5739
	/**
5740
	* Gets all aircraft registration that have flown over by country
5741
	*
5742
	* @return Array the aircraft list
5743
	*
5744
	*/
5745
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
5746
	{
5747
		$filter_query = $this->getFilter($filters,true,true);
5748
		$Image = new Image($this->db);
5749
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5750
		$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 
5751
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country)    
5752
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5753
			    ORDER BY registration_count DESC";
5754
5755
		
5756
		$sth = $this->db->prepare($query);
5757
		$sth->execute(array(':country' => $country));
5758
      
5759
		$aircraft_array = array();
5760
		$temp_array = array();
5761
        
5762
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5763
		{
5764
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5765
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5766
			$temp_array['registration'] = $row['registration'];
5767
			$temp_array['airline_name'] = $row['airline_name'];
5768
			$temp_array['image_thumbnail'] = "";
5769
			if($row['registration'] != "")
5770
			{
5771
				$image_array = $Image->getSpotterImage($row['registration']);
5772
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5773
			}
5774
			$temp_array['registration_count'] = $row['registration_count'];
5775
          
5776
			$aircraft_array[] = $temp_array;
5777
		}
5778
5779
		return $aircraft_array;
5780
	}
5781
	
5782
	
5783
	/**
5784
	* Gets all aircraft manufacturer that have flown over by country
5785
	*
5786
	* @return Array the aircraft manufacturer list
5787
	*
5788
	*/
5789
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
5790
	{
5791
		$filter_query = $this->getFilter($filters,true,true);
5792
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5793
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5794
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND (((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country) 
5795
                    GROUP BY spotter_output.aircraft_manufacturer 
5796
					ORDER BY aircraft_manufacturer_count DESC";
5797
5798
		
5799
		$sth = $this->db->prepare($query);
5800
		$sth->execute(array(':country' => $country));
5801
      
5802
		$aircraft_array = array();
5803
		$temp_array = array();
5804
        
5805
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5806
		{
5807
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5808
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5809
          
5810
			$aircraft_array[] = $temp_array;
5811
		}
5812
5813
		return $aircraft_array;
5814
	}	
5815
	
5816
	
5817
	
5818
	/**
5819
	* Gets all aircraft manufacturers that have flown over
5820
	*
5821
	* @return Array the aircraft list
5822
	*
5823
	*/
5824
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
5825
	{
5826
		global $globalDBdriver;
5827
		$filter_query = $this->getFilter($filters,true,true);
5828
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5829
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
5830
                $query_values = array();
5831
		if ($year != '') {
5832
			if ($globalDBdriver == 'mysql') {
5833
				$query .= " AND YEAR(spotter_output.date) = :year";
5834
				$query_values = array_merge($query_values,array(':year' => $year));
5835
			} else {
5836
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5837
				$query_values = array_merge($query_values,array(':year' => $year));
5838
			}
5839
		}
5840
		if ($month != '') {
5841
			if ($globalDBdriver == 'mysql') {
5842
				$query .= " AND MONTH(spotter_output.date) = :month";
5843
				$query_values = array_merge($query_values,array(':month' => $month));
5844
			} else {
5845
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5846
				$query_values = array_merge($query_values,array(':month' => $month));
5847
			}
5848
		}
5849
		if ($day != '') {
5850
			if ($globalDBdriver == 'mysql') {
5851
				$query .= " AND DAY(spotter_output.date) = :day";
5852
				$query_values = array_merge($query_values,array(':day' => $day));
5853
			} else {
5854
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5855
				$query_values = array_merge($query_values,array(':day' => $day));
5856
			}
5857
		}
5858
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
5859
					ORDER BY aircraft_manufacturer_count DESC
5860
					LIMIT 10";
5861
      
5862
		
5863
		$sth = $this->db->prepare($query);
5864
		$sth->execute($query_values);
5865
      
5866
		$manufacturer_array = array();
5867
		$temp_array = array();
5868
        
5869
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5870
		{
5871
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5872
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5873
          
5874
			$manufacturer_array[] = $temp_array;
5875
		}
5876
5877
		return $manufacturer_array;
5878
	}
5879
	
5880
	
5881
	
5882
	/**
5883
	* Gets all aircraft registrations that have flown over
5884
	*
5885
	* @return Array the aircraft list
5886
	*
5887
	*/
5888
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
5889
	{
5890
		global $globalDBdriver;
5891
		$Image = new Image($this->db);
5892
		$filter_query = $this->getFilter($filters,true,true);
5893
		$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    
5894
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
5895
                if ($olderthanmonths > 0) {
5896
            		if ($globalDBdriver == 'mysql') {
5897
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5898
			} else {
5899
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5900
			}
5901
		}
5902
                if ($sincedate != '') {
5903
            		if ($globalDBdriver == 'mysql') {
5904
				$query .= " AND spotter_output.date > '".$sincedate."'";
5905
			} else {
5906
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5907
			}
5908
		}
5909
		$query_values = array();
5910
		if ($year != '') {
5911
			if ($globalDBdriver == 'mysql') {
5912
				$query .= " AND YEAR(spotter_output.date) = :year";
5913
				$query_values = array_merge($query_values,array(':year' => $year));
5914
			} else {
5915
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5916
				$query_values = array_merge($query_values,array(':year' => $year));
5917
			}
5918
		}
5919
		if ($month != '') {
5920
			if ($globalDBdriver == 'mysql') {
5921
				$query .= " AND MONTH(spotter_output.date) = :month";
5922
				$query_values = array_merge($query_values,array(':month' => $month));
5923
			} else {
5924
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5925
				$query_values = array_merge($query_values,array(':month' => $month));
5926
			}
5927
		}
5928
		if ($day != '') {
5929
			if ($globalDBdriver == 'mysql') {
5930
				$query .= " AND DAY(spotter_output.date) = :day";
5931
				$query_values = array_merge($query_values,array(':day' => $day));
5932
			} else {
5933
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5934
				$query_values = array_merge($query_values,array(':day' => $day));
5935
			}
5936
		}
5937
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
5938
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5939
		
5940
		$sth = $this->db->prepare($query);
5941
		$sth->execute($query_values);
5942
      
5943
		$aircraft_array = array();
5944
		$temp_array = array();
5945
        
5946
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5947
		{
5948
			$temp_array['registration'] = $row['registration'];
5949
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5950
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5951
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5952
			$temp_array['airline_name'] = $row['airline_name'];
5953
			$temp_array['image_thumbnail'] = "";
5954
			if($row['registration'] != "")
5955
			{
5956
				$image_array = $Image->getSpotterImage($row['registration']);
5957
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5958
			}
5959
          
5960
			$aircraft_array[] = $temp_array;
5961
		}
5962
5963
		return $aircraft_array;
5964
	}
5965
5966
5967
	/**
5968
	* Gets all aircraft registrations that have flown over
5969
	*
5970
	* @return Array the aircraft list
5971
	*
5972
	*/
5973
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5974
	{
5975
		global $globalDBdriver;
5976
		$filter_query = $this->getFilter($filters,true,true);
5977
		$Image = new Image($this->db);
5978
		$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    
5979
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
5980
                if ($olderthanmonths > 0) {
5981
            		if ($globalDBdriver == 'mysql') {
5982
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5983
			} else {
5984
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5985
			}
5986
		}
5987
                if ($sincedate != '') {
5988
            		if ($globalDBdriver == 'mysql') {
5989
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5990
			} else {
5991
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5992
			}
5993
		}
5994
5995
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5996
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5997
                $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";
5998
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5999
		
6000
		$sth = $this->db->prepare($query);
6001
		$sth->execute();
6002
      
6003
		$aircraft_array = array();
6004
		$temp_array = array();
6005
        
6006
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6007
		{
6008
			$temp_array['registration'] = $row['registration'];
6009
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
6010
			$temp_array['airline_icao'] = $row['airline_icao'];
6011
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
6012
			$temp_array['aircraft_name'] = $row['aircraft_name'];
6013
			$temp_array['airline_name'] = $row['airline_name'];
6014
			$temp_array['image_thumbnail'] = "";
6015
			if($row['registration'] != "")
6016
			{
6017
				$image_array = $Image->getSpotterImage($row['registration']);
6018
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
6019
			}
6020
          
6021
			$aircraft_array[] = $temp_array;
6022
		}
6023
6024
		return $aircraft_array;
6025
	}
6026
	
6027
	
6028
	/**
6029
	* Gets all departure airports of the airplanes that have flown over
6030
	*
6031
	* @return Array the airport list
6032
	*
6033
	*/
6034
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6035
	{
6036
		global $globalDBdriver;
6037
		$filter_query = $this->getFilter($filters,true,true);
6038
		$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 
6039
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
6040
                if ($olderthanmonths > 0) {
6041
            		if ($globalDBdriver == 'mysql') {
6042
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6043
			} else {
6044
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6045
			}
6046
                }
6047
                if ($sincedate != '') {
6048
            		if ($globalDBdriver == 'mysql') {
6049
				$query .= " AND spotter_output.date > '".$sincedate."'";
6050
			} else {
6051
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6052
			}
6053
		}
6054
		$query_values = array();
6055
		if ($year != '') {
6056
			if ($globalDBdriver == 'mysql') {
6057
				$query .= " AND YEAR(spotter_output.date) = :year";
6058
				$query_values = array_merge($query_values,array(':year' => $year));
6059
			} else {
6060
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6061
				$query_values = array_merge($query_values,array(':year' => $year));
6062
			}
6063
		}
6064
		if ($month != '') {
6065
			if ($globalDBdriver == 'mysql') {
6066
				$query .= " AND MONTH(spotter_output.date) = :month";
6067
				$query_values = array_merge($query_values,array(':month' => $month));
6068
			} else {
6069
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6070
				$query_values = array_merge($query_values,array(':month' => $month));
6071
			}
6072
		}
6073
		if ($day != '') {
6074
			if ($globalDBdriver == 'mysql') {
6075
				$query .= " AND DAY(spotter_output.date) = :day";
6076
				$query_values = array_merge($query_values,array(':day' => $day));
6077
			} else {
6078
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6079
				$query_values = array_merge($query_values,array(':day' => $day));
6080
			}
6081
		}
6082
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6083
				ORDER BY airport_departure_icao_count DESC";
6084
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6085
6086
		$sth = $this->db->prepare($query);
6087
		$sth->execute($query_values);
6088
6089
		$airport_array = array();
6090
		$temp_array = array();
6091
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6092
		{
6093
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6094
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6095
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6096
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6097
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6098
          
6099
			$airport_array[] = $temp_array;
6100
		}
6101
		return $airport_array;
6102
	}
6103
6104
	/**
6105
	* Gets all departure airports of the airplanes that have flown over
6106
	*
6107
	* @return Array the airport list
6108
	*
6109
	*/
6110
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6111
	{
6112
		global $globalDBdriver;
6113
		$filter_query = $this->getFilter($filters,true,true);
6114
		$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 
6115
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' ";
6116
                if ($olderthanmonths > 0) {
6117
            		if ($globalDBdriver == 'mysql') {
6118
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6119
			} else {
6120
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6121
			}
6122
                }
6123
                if ($sincedate != '') {
6124
            		if ($globalDBdriver == 'mysql') {
6125
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6126
			} else {
6127
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6128
			}
6129
		}
6130
6131
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6132
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6133
                $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
6134
				ORDER BY airport_departure_icao_count DESC";
6135
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6136
      
6137
		$sth = $this->db->prepare($query);
6138
		$sth->execute();
6139
      
6140
		$airport_array = array();
6141
		$temp_array = array();
6142
        
6143
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6144
		{
6145
			$temp_array['airline_icao'] = $row['airline_icao'];
6146
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6147
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6148
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6149
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6150
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6151
          
6152
			$airport_array[] = $temp_array;
6153
		}
6154
		return $airport_array;
6155
	}
6156
6157
	/**
6158
	* Gets all detected departure airports of the airplanes that have flown over
6159
	*
6160
	* @return Array the airport list
6161
	*
6162
	*/
6163
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6164
	{
6165
		global $globalDBdriver;
6166
		$filter_query = $this->getFilter($filters,true,true);
6167
		$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
6168
				FROM airport, spotter_output".$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";
6169
                if ($olderthanmonths > 0) {
6170
            		if ($globalDBdriver == 'mysql') {
6171
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6172
			} else {
6173
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6174
			}
6175
                }
6176
                if ($sincedate != '') {
6177
            		if ($globalDBdriver == 'mysql') {
6178
				$query .= " AND spotter_output.date > '".$sincedate."'";
6179
			} else {
6180
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6181
			}
6182
		}
6183
		$query_values = array();
6184
		if ($year != '') {
6185
			if ($globalDBdriver == 'mysql') {
6186
				$query .= " AND YEAR(spotter_output.date) = :year";
6187
				$query_values = array_merge($query_values,array(':year' => $year));
6188
			} else {
6189
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6190
				$query_values = array_merge($query_values,array(':year' => $year));
6191
			}
6192
		}
6193
		if ($month != '') {
6194
			if ($globalDBdriver == 'mysql') {
6195
				$query .= " AND MONTH(spotter_output.date) = :month";
6196
				$query_values = array_merge($query_values,array(':month' => $month));
6197
			} else {
6198
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6199
				$query_values = array_merge($query_values,array(':month' => $month));
6200
			}
6201
		}
6202
		if ($day != '') {
6203
			if ($globalDBdriver == 'mysql') {
6204
				$query .= " AND DAY(spotter_output.date) = :day";
6205
				$query_values = array_merge($query_values,array(':day' => $day));
6206
			} else {
6207
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6208
				$query_values = array_merge($query_values,array(':day' => $day));
6209
			}
6210
		}
6211
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6212
				ORDER BY airport_departure_icao_count DESC";
6213
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6214
    		//echo $query;
6215
		$sth = $this->db->prepare($query);
6216
		$sth->execute($query_values);
6217
      
6218
		$airport_array = array();
6219
		$temp_array = array();
6220
        
6221
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6222
		{
6223
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6224
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6225
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6226
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6227
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6228
          
6229
			$airport_array[] = $temp_array;
6230
		}
6231
		return $airport_array;
6232
	}
6233
	
6234
	/**
6235
	* Gets all detected departure airports of the airplanes that have flown over
6236
	*
6237
	* @return Array the airport list
6238
	*
6239
	*/
6240
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6241
	{
6242
		global $globalDBdriver;
6243
		$filter_query = $this->getFilter($filters,true,true);
6244
		$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
6245
				FROM airport, spotter_output".$filter_query." 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 ";
6246
                if ($olderthanmonths > 0) {
6247
            		if ($globalDBdriver == 'mysql') {
6248
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6249
			} else {
6250
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6251
			}
6252
                }
6253
                if ($sincedate != '') {
6254
            		if ($globalDBdriver == 'mysql') {
6255
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6256
			} else {
6257
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6258
			}
6259
		}
6260
6261
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6262
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6263
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6264
				ORDER BY airport_departure_icao_count DESC";
6265
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6266
      
6267
		$sth = $this->db->prepare($query);
6268
		$sth->execute();
6269
      
6270
		$airport_array = array();
6271
		$temp_array = array();
6272
        
6273
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6274
		{
6275
			$temp_array['airline_icao'] = $row['airline_icao'];
6276
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6277
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6278
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6279
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6280
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6281
          
6282
			$airport_array[] = $temp_array;
6283
		}
6284
		return $airport_array;
6285
	}	
6286
	
6287
	/**
6288
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6289
	*
6290
	* @return Array the airport list
6291
	*
6292
	*/
6293
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6294
	{
6295
		$filter_query = $this->getFilter($filters,true,true);
6296
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6297
		$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 
6298
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao AND spotter_output.departure_airport_icao <> '' 
6299
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6300
			    ORDER BY airport_departure_icao_count DESC";
6301
      
6302
		
6303
		$sth = $this->db->prepare($query);
6304
		$sth->execute(array(':airline_icao' => $airline_icao));
6305
      
6306
		$airport_array = array();
6307
		$temp_array = array();
6308
        
6309
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6310
		{
6311
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6312
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6313
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6314
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6315
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6316
          
6317
			$airport_array[] = $temp_array;
6318
		}
6319
6320
		return $airport_array;
6321
	}
6322
	
6323
	
6324
	
6325
	/**
6326
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6327
	*
6328
	* @return Array the airport list
6329
	*
6330
	*/
6331
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6332
	{
6333
		$filter_query = $this->getFilter($filters,true,true);
6334
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6335
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6336
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6337
                    GROUP BY spotter_output.departure_airport_country
6338
					ORDER BY airport_departure_country_count DESC";
6339
      
6340
		
6341
		$sth = $this->db->prepare($query);
6342
		$sth->execute(array(':airline_icao' => $airline_icao));
6343
      
6344
		$airport_array = array();
6345
		$temp_array = array();
6346
        
6347
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6348
		{
6349
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6350
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6351
          
6352
			$airport_array[] = $temp_array;
6353
		}
6354
6355
		return $airport_array;
6356
	}
6357
	
6358
	
6359
	
6360
	/**
6361
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6362
	*
6363
	* @return Array the airport list
6364
	*
6365
	*/
6366
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6367
	{
6368
		$filter_query = $this->getFilter($filters,true,true);
6369
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6370
		$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 
6371
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao AND spotter_output.departure_airport_icao <> '' 
6372
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6373
			    ORDER BY airport_departure_icao_count DESC";
6374
      
6375
		
6376
		$sth = $this->db->prepare($query);
6377
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6378
      
6379
		$airport_array = array();
6380
		$temp_array = array();
6381
        
6382
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6383
		{
6384
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6385
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6386
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6387
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6388
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6389
          
6390
			$airport_array[] = $temp_array;
6391
		}
6392
6393
		return $airport_array;
6394
	}
6395
	
6396
	
6397
	/**
6398
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6399
	*
6400
	* @return Array the airport list
6401
	*
6402
	*/
6403
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
6404
	{
6405
		$filter_query = $this->getFilter($filters,true,true);
6406
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6407
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6408
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6409
                    GROUP BY spotter_output.departure_airport_country
6410
					ORDER BY airport_departure_country_count DESC";
6411
      
6412
		
6413
		$sth = $this->db->prepare($query);
6414
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6415
      
6416
		$airport_array = array();
6417
		$temp_array = array();
6418
        
6419
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6420
		{
6421
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6422
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6423
          
6424
			$airport_array[] = $temp_array;
6425
		}
6426
6427
		return $airport_array;
6428
	}
6429
	
6430
	
6431
	/**
6432
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
6433
	*
6434
	* @return Array the airport list
6435
	*
6436
	*/
6437
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
6438
	{
6439
		$filter_query = $this->getFilter($filters,true,true);
6440
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6441
		$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 
6442
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.registration = :registration AND spotter_output.departure_airport_icao <> '' 
6443
                    GROUP BY spotter_output.departure_airport_icao
6444
					ORDER BY airport_departure_icao_count DESC";
6445
      
6446
		
6447
		$sth = $this->db->prepare($query);
6448
		$sth->execute(array(':registration' => $registration));
6449
      
6450
		$airport_array = array();
6451
		$temp_array = array();
6452
        
6453
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6454
		{
6455
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6456
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6457
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6458
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6459
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6460
          
6461
			$airport_array[] = $temp_array;
6462
		}
6463
6464
		return $airport_array;
6465
	}
6466
	
6467
	
6468
	/**
6469
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
6470
	*
6471
	* @return Array the airport list
6472
	*
6473
	*/
6474
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
6475
	{
6476
		$filter_query = $this->getFilter($filters,true,true);
6477
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6478
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6479
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
6480
                    GROUP BY spotter_output.departure_airport_country
6481
					ORDER BY airport_departure_country_count DESC";
6482
      
6483
		
6484
		$sth = $this->db->prepare($query);
6485
		$sth->execute(array(':registration' => $registration));
6486
      
6487
		$airport_array = array();
6488
		$temp_array = array();
6489
        
6490
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6491
		{
6492
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6493
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6494
          
6495
			$airport_array[] = $temp_array;
6496
		}
6497
6498
		return $airport_array;
6499
	}
6500
	
6501
	
6502
	/**
6503
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
6504
	*
6505
	* @return Array the airport list
6506
	*
6507
	*/
6508
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
6509
	{
6510
		$filter_query = $this->getFilter($filters,true,true);
6511
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6512
		$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 
6513
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao = :airport_icao AND spotter_output.departure_airport_icao <> '' 
6514
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6515
			    ORDER BY airport_departure_icao_count DESC";
6516
      
6517
		
6518
		$sth = $this->db->prepare($query);
6519
		$sth->execute(array(':airport_icao' => $airport_icao));
6520
      
6521
		$airport_array = array();
6522
		$temp_array = array();
6523
        
6524
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6525
		{
6526
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6527
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6528
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6529
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6530
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6531
          
6532
			$airport_array[] = $temp_array;
6533
		}
6534
6535
		return $airport_array;
6536
	}
6537
	
6538
	
6539
	/**
6540
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
6541
	*
6542
	* @return Array the airport list
6543
	*
6544
	*/
6545
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
6546
	{
6547
		$filter_query = $this->getFilter($filters,true,true);
6548
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6549
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6550
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
6551
                    GROUP BY spotter_output.departure_airport_country
6552
					ORDER BY airport_departure_country_count DESC";
6553
      
6554
		
6555
		$sth = $this->db->prepare($query);
6556
		$sth->execute(array(':airport_icao' => $airport_icao));
6557
      
6558
		$airport_array = array();
6559
		$temp_array = array();
6560
        
6561
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6562
		{
6563
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6564
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6565
          
6566
			$airport_array[] = $temp_array;
6567
		}
6568
6569
		return $airport_array;
6570
	}
6571
	
6572
	
6573
	
6574
	/**
6575
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
6576
	*
6577
	* @return Array the airport list
6578
	*
6579
	*/
6580
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6581
	{
6582
		$filter_query = $this->getFilter($filters,true,true);
6583
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6584
		$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 
6585
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer AND spotter_output.departure_airport_icao <> '' 
6586
                    GROUP BY spotter_output.departure_airport_icao
6587
					ORDER BY airport_departure_icao_count DESC";
6588
      
6589
		
6590
		$sth = $this->db->prepare($query);
6591
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6592
      
6593
		$airport_array = array();
6594
		$temp_array = array();
6595
        
6596
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6597
		{
6598
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6599
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6600
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6601
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6602
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6603
          
6604
			$airport_array[] = $temp_array;
6605
		}
6606
6607
		return $airport_array;
6608
	}
6609
	
6610
	
6611
	/**
6612
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
6613
	*
6614
	* @return Array the airport list
6615
	*
6616
	*/
6617
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6618
	{
6619
		$filter_query = $this->getFilter($filters,true,true);
6620
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6621
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6622
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6623
                    GROUP BY spotter_output.departure_airport_country
6624
					ORDER BY airport_departure_country_count DESC";
6625
      
6626
		
6627
		$sth = $this->db->prepare($query);
6628
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6629
      
6630
		$airport_array = array();
6631
		$temp_array = array();
6632
        
6633
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6634
		{
6635
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6636
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6637
          
6638
			$airport_array[] = $temp_array;
6639
		}
6640
6641
		return $airport_array;
6642
	}
6643
	
6644
	
6645
	/**
6646
	* Gets all departure airports of the airplanes that have flown over based on a date
6647
	*
6648
	* @return Array the airport list
6649
	*
6650
	*/
6651
	public function countAllDepartureAirportsByDate($date,$filters = array())
6652
	{
6653
		global $globalTimezone, $globalDBdriver;
6654
		$filter_query = $this->getFilter($filters,true,true);
6655
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6656
		if ($globalTimezone != '') {
6657
			date_default_timezone_set($globalTimezone);
6658
			$datetime = new DateTime($date);
6659
			$offset = $datetime->format('P');
6660
		} else $offset = '+00:00';
6661
6662
		if ($globalDBdriver == 'mysql') {
6663
			$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 
6664
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
6665
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6666
					ORDER BY airport_departure_icao_count DESC";
6667
		} else {
6668
			$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 
6669
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
6670
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6671
					ORDER BY airport_departure_icao_count DESC";
6672
		}
6673
6674
		$sth = $this->db->prepare($query);
6675
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6676
      
6677
		$airport_array = array();
6678
		$temp_array = array();
6679
        
6680
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6681
		{
6682
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6683
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6684
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6685
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6686
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6687
          
6688
			$airport_array[] = $temp_array;
6689
		}
6690
		return $airport_array;
6691
	}
6692
	
6693
	
6694
	
6695
	/**
6696
	* Gets all departure airports by country of the airplanes that have flown over based on a date
6697
	*
6698
	* @return Array the airport list
6699
	*
6700
	*/
6701
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
6702
	{
6703
		global $globalTimezone, $globalDBdriver;
6704
		$filter_query = $this->getFilter($filters,true,true);
6705
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6706
		if ($globalTimezone != '') {
6707
			date_default_timezone_set($globalTimezone);
6708
			$datetime = new DateTime($date);
6709
			$offset = $datetime->format('P');
6710
		} else $offset = '+00:00';
6711
6712
		if ($globalDBdriver == 'mysql') {
6713
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6714
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6715
					GROUP BY spotter_output.departure_airport_country
6716
					ORDER BY airport_departure_country_count DESC";
6717
		} else {
6718
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6719
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
6720
					GROUP BY spotter_output.departure_airport_country
6721
					ORDER BY airport_departure_country_count DESC";
6722
		}
6723
		
6724
		$sth = $this->db->prepare($query);
6725
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6726
      
6727
		$airport_array = array();
6728
		$temp_array = array();
6729
        
6730
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6731
		{
6732
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6733
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6734
          
6735
			$airport_array[] = $temp_array;
6736
		}
6737
		return $airport_array;
6738
	}
6739
	
6740
	
6741
	
6742
	/**
6743
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
6744
	*
6745
	* @return Array the airport list
6746
	*
6747
	*/
6748
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
6749
	{
6750
		$filter_query = $this->getFilter($filters,true,true);
6751
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6752
		$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 
6753
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.ident = :ident 
6754
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6755
		    ORDER BY airport_departure_icao_count DESC";
6756
      
6757
		
6758
		$sth = $this->db->prepare($query);
6759
		$sth->execute(array(':ident' => $ident));
6760
      
6761
		$airport_array = array();
6762
		$temp_array = array();
6763
        
6764
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6765
		{
6766
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6767
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6768
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6769
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6770
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6771
          
6772
			$airport_array[] = $temp_array;
6773
		}
6774
6775
		return $airport_array;
6776
	}
6777
	
6778
	
6779
	
6780
	/**
6781
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
6782
	*
6783
	* @return Array the airport list
6784
	*
6785
	*/
6786
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
6787
	{
6788
		$filter_query = $this->getFilter($filters,true,true);
6789
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6790
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6791
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
6792
                    GROUP BY spotter_output.departure_airport_country
6793
					ORDER BY airport_departure_country_count DESC";
6794
      
6795
		
6796
		$sth = $this->db->prepare($query);
6797
		$sth->execute(array(':ident' => $ident));
6798
      
6799
		$airport_array = array();
6800
		$temp_array = array();
6801
        
6802
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6803
		{
6804
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6805
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6806
          
6807
			$airport_array[] = $temp_array;
6808
		}
6809
6810
		return $airport_array;
6811
	}
6812
	
6813
	
6814
	
6815
	/**
6816
	* Gets all departure airports of the airplanes that have flown over based on a country
6817
	*
6818
	* @return Array the airport list
6819
	*
6820
	*/
6821
	public function countAllDepartureAirportsByCountry($country,$filters = array())
6822
	{
6823
		$filter_query = $this->getFilter($filters,true,true);
6824
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6825
6826
		$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 
6827
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
6828
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6829
			    ORDER BY airport_departure_icao_count DESC";
6830
      
6831
		
6832
		$sth = $this->db->prepare($query);
6833
		$sth->execute(array(':country' => $country));
6834
      
6835
		$airport_array = array();
6836
		$temp_array = array();
6837
        
6838
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6839
		{
6840
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6841
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6842
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6843
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6844
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6845
          
6846
			$airport_array[] = $temp_array;
6847
		}
6848
6849
		return $airport_array;
6850
	}
6851
6852
6853
	/**
6854
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6855
	*
6856
	* @return Array the airport list
6857
	*
6858
	*/
6859
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
6860
	{
6861
		$filter_query = $this->getFilter($filters,true,true);
6862
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6863
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6864
			FROM spotter_output".$filter_query." 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 
6865
                    GROUP BY spotter_output.departure_airport_country
6866
					ORDER BY airport_departure_country_count DESC";
6867
      
6868
		
6869
		$sth = $this->db->prepare($query);
6870
		$sth->execute(array(':country' => $country));
6871
      
6872
		$airport_array = array();
6873
		$temp_array = array();
6874
        
6875
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6876
		{
6877
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6878
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6879
          
6880
			$airport_array[] = $temp_array;
6881
		}
6882
6883
		return $airport_array;
6884
	}
6885
	
6886
6887
	/**
6888
	* Gets all arrival airports of the airplanes that have flown over
6889
	*
6890
	* @param Boolean $limit Limit result to 10 or not
6891
	* @param Integer $olderthanmonths Only show result older than x months
6892
	* @param String $sincedate Only show result since x date
6893
	* @param Boolean $icaoaskey Show result by ICAO
6894
	* @param Array $filters Filter used here
6895
	* @return Array the airport list
6896
	*
6897
	*/
6898
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
6899
	{
6900
		global $globalDBdriver;
6901
		$filter_query = $this->getFilter($filters,true,true);
6902
		$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 
6903
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
6904
                if ($olderthanmonths > 0) {
6905
            		if ($globalDBdriver == 'mysql') {
6906
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6907
			} else {
6908
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6909
			}
6910
		}
6911
                if ($sincedate != '') {
6912
            		if ($globalDBdriver == 'mysql') {
6913
				$query .= " AND spotter_output.date > '".$sincedate."'";
6914
			} else {
6915
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6916
			}
6917
		}
6918
		$query_values = array();
6919
		if ($year != '') {
6920
			if ($globalDBdriver == 'mysql') {
6921
				$query .= " AND YEAR(spotter_output.date) = :year";
6922
				$query_values = array_merge($query_values,array(':year' => $year));
6923
			} else {
6924
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6925
				$query_values = array_merge($query_values,array(':year' => $year));
6926
			}
6927
		}
6928
		if ($month != '') {
6929
			if ($globalDBdriver == 'mysql') {
6930
				$query .= " AND MONTH(spotter_output.date) = :month";
6931
				$query_values = array_merge($query_values,array(':month' => $month));
6932
			} else {
6933
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6934
				$query_values = array_merge($query_values,array(':month' => $month));
6935
			}
6936
		}
6937
		if ($day != '') {
6938
			if ($globalDBdriver == 'mysql') {
6939
				$query .= " AND DAY(spotter_output.date) = :day";
6940
				$query_values = array_merge($query_values,array(':day' => $day));
6941
			} else {
6942
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6943
				$query_values = array_merge($query_values,array(':day' => $day));
6944
			}
6945
		}
6946
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6947
					ORDER BY airport_arrival_icao_count DESC";
6948
		if ($limit) $query .= " LIMIT 10";
6949
      
6950
		
6951
		$sth = $this->db->prepare($query);
6952
		$sth->execute($query_values);
6953
      
6954
		$airport_array = array();
6955
		$temp_array = array();
6956
        
6957
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6958
		{
6959
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6960
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6961
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6962
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6963
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6964
          
6965
			if ($icaoaskey) {
6966
				$icao = $row['arrival_airport_icao'];
6967
				$airport_array[$icao] = $temp_array;
6968
			} else $airport_array[] = $temp_array;
6969
		}
6970
6971
		return $airport_array;
6972
	}
6973
6974
	/**
6975
	* Gets all arrival airports of the airplanes that have flown over
6976
	*
6977
	* @return Array the airport list
6978
	*
6979
	*/
6980
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6981
	{
6982
		global $globalDBdriver;
6983
		$filter_query = $this->getFilter($filters,true,true);
6984
		$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 
6985
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' ";
6986
                if ($olderthanmonths > 0) {
6987
            		if ($globalDBdriver == 'mysql') {
6988
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6989
			} else {
6990
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6991
			}
6992
		}
6993
                if ($sincedate != '') {
6994
            		if ($globalDBdriver == 'mysql') {
6995
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6996
			} else {
6997
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6998
			}
6999
		}
7000
7001
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7002
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7003
                $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
7004
					ORDER BY airport_arrival_icao_count DESC";
7005
		if ($limit) $query .= " LIMIT 10";
7006
      
7007
		
7008
		$sth = $this->db->prepare($query);
7009
		$sth->execute();
7010
      
7011
		$airport_array = array();
7012
		$temp_array = array();
7013
        
7014
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7015
		{
7016
			$temp_array['airline_icao'] = $row['airline_icao'];
7017
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7018
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7019
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7020
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7021
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7022
          
7023
			if ($icaoaskey) {
7024
				$icao = $row['arrival_airport_icao'];
7025
				$airport_array[$icao] = $temp_array;
7026
			} else $airport_array[] = $temp_array;
7027
		}
7028
7029
		return $airport_array;
7030
	}
7031
7032
7033
	/**
7034
	* Gets all detected arrival airports of the airplanes that have flown over
7035
	*
7036
	* @return Array the airport list
7037
	*
7038
	*/
7039
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
7040
	{
7041
		global $globalDBdriver;
7042
		$filter_query = $this->getFilter($filters,true,true);
7043
		$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 
7044
			FROM airport,spotter_output".$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";
7045
                if ($olderthanmonths > 0) {
7046
            		if ($globalDBdriver == 'mysql') {
7047
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
7048
			} else {
7049
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7050
			}
7051
		}
7052
                if ($sincedate != '') {
7053
            		if ($globalDBdriver == 'mysql') {
7054
				$query .= " AND spotter_output.date > '".$sincedate."'";
7055
			} else {
7056
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7057
			}
7058
		}
7059
		$query_values = array();
7060
		if ($year != '') {
7061
			if ($globalDBdriver == 'mysql') {
7062
				$query .= " AND YEAR(spotter_output.date) = :year";
7063
				$query_values = array_merge($query_values,array(':year' => $year));
7064
			} else {
7065
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7066
				$query_values = array_merge($query_values,array(':year' => $year));
7067
			}
7068
		}
7069
		if ($month != '') {
7070
			if ($globalDBdriver == 'mysql') {
7071
				$query .= " AND MONTH(spotter_output.date) = :month";
7072
				$query_values = array_merge($query_values,array(':month' => $month));
7073
			} else {
7074
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7075
				$query_values = array_merge($query_values,array(':month' => $month));
7076
			}
7077
		}
7078
		if ($day != '') {
7079
			if ($globalDBdriver == 'mysql') {
7080
				$query .= " AND DAY(spotter_output.date) = :day";
7081
				$query_values = array_merge($query_values,array(':day' => $day));
7082
			} else {
7083
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7084
				$query_values = array_merge($query_values,array(':day' => $day));
7085
			}
7086
		}
7087
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7088
					ORDER BY airport_arrival_icao_count DESC";
7089
		if ($limit) $query .= " LIMIT 10";
7090
      
7091
		
7092
		$sth = $this->db->prepare($query);
7093
		$sth->execute($query_values);
7094
      
7095
		$airport_array = array();
7096
		$temp_array = array();
7097
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7098
		{
7099
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7100
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7101
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7102
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7103
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7104
          
7105
			if ($icaoaskey) {
7106
				$icao = $row['arrival_airport_icao'];
7107
				$airport_array[$icao] = $temp_array;
7108
			} else $airport_array[] = $temp_array;
7109
		}
7110
7111
		return $airport_array;
7112
	}
7113
	
7114
	/**
7115
	* Gets all detected arrival airports of the airplanes that have flown over
7116
	*
7117
	* @return Array the airport list
7118
	*
7119
	*/
7120
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7121
	{
7122
		global $globalDBdriver;
7123
		$filter_query = $this->getFilter($filters,true,true);
7124
		$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 
7125
			FROM airport,spotter_output".$filter_query." 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 ";
7126
                if ($olderthanmonths > 0) {
7127
            		if ($globalDBdriver == 'mysql') {
7128
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7129
			} else {
7130
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7131
			}
7132
		}
7133
                if ($sincedate != '') {
7134
            		if ($globalDBdriver == 'mysql') {
7135
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7136
			} else {
7137
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7138
			}
7139
		}
7140
7141
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7142
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7143
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7144
					ORDER BY airport_arrival_icao_count DESC";
7145
		if ($limit) $query .= " LIMIT 10";
7146
      
7147
		
7148
		$sth = $this->db->prepare($query);
7149
		$sth->execute();
7150
      
7151
		$airport_array = array();
7152
		$temp_array = array();
7153
        
7154
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7155
		{
7156
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7157
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7158
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7159
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7160
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7161
			$temp_array['airline_icao'] = $row['airline_icao'];
7162
          
7163
			if ($icaoaskey) {
7164
				$icao = $row['arrival_airport_icao'];
7165
				$airport_array[$icao] = $temp_array;
7166
			} else $airport_array[] = $temp_array;
7167
		}
7168
7169
		return $airport_array;
7170
	}	
7171
	
7172
	/**
7173
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7174
	*
7175
	* @return Array the airport list
7176
	*
7177
	*/
7178
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7179
	{
7180
		$filter_query = $this->getFilter($filters,true,true);
7181
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7182
		$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 
7183
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.airline_icao = :airline_icao 
7184
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7185
			    ORDER BY airport_arrival_icao_count DESC";
7186
		
7187
		$sth = $this->db->prepare($query);
7188
		$sth->execute(array(':airline_icao' => $airline_icao));
7189
      
7190
		$airport_array = array();
7191
		$temp_array = array();
7192
        
7193
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7194
		{
7195
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7196
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7197
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7198
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7199
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7200
          
7201
			$airport_array[] = $temp_array;
7202
		}
7203
7204
		return $airport_array;
7205
	}
7206
	
7207
	
7208
	/**
7209
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7210
	*
7211
	* @return Array the airport list
7212
	*
7213
	*/
7214
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7215
	{
7216
		$filter_query = $this->getFilter($filters,true,true);
7217
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7218
					
7219
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7220
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7221
                    GROUP BY spotter_output.arrival_airport_country
7222
					ORDER BY airport_arrival_country_count DESC";
7223
      
7224
		
7225
		$sth = $this->db->prepare($query);
7226
		$sth->execute(array(':airline_icao' => $airline_icao));
7227
      
7228
		$airport_array = array();
7229
		$temp_array = array();
7230
        
7231
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7232
		{
7233
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7234
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7235
          
7236
			$airport_array[] = $temp_array;
7237
		}
7238
7239
		return $airport_array;
7240
	}
7241
	
7242
	
7243
	/**
7244
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7245
	*
7246
	* @return Array the airport list
7247
	*
7248
	*/
7249
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7250
	{
7251
		$filter_query = $this->getFilter($filters,true,true);
7252
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7253
		$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 
7254
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7255
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7256
			    ORDER BY airport_arrival_icao_count DESC";
7257
      
7258
		
7259
		$sth = $this->db->prepare($query);
7260
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7261
      
7262
		$airport_array = array();
7263
		$temp_array = array();
7264
        
7265
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7266
		{
7267
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7268
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7269
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7270
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7271
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7272
          
7273
			$airport_array[] = $temp_array;
7274
		}
7275
7276
		return $airport_array;
7277
	}
7278
	
7279
	
7280
	
7281
	/**
7282
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
7283
	*
7284
	* @return Array the airport list
7285
	*
7286
	*/
7287
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
7288
	{
7289
		$filter_query = $this->getFilter($filters,true,true);
7290
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7291
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7292
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7293
                    GROUP BY spotter_output.arrival_airport_country
7294
					ORDER BY airport_arrival_country_count DESC";
7295
      
7296
		
7297
		$sth = $this->db->prepare($query);
7298
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7299
      
7300
		$airport_array = array();
7301
		$temp_array = array();
7302
        
7303
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7304
		{
7305
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7306
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7307
          
7308
			$airport_array[] = $temp_array;
7309
		}
7310
7311
		return $airport_array;
7312
	}
7313
	
7314
	
7315
	/**
7316
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
7317
	*
7318
	* @return Array the airport list
7319
	*
7320
	*/
7321
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
7322
	{
7323
		$filter_query = $this->getFilter($filters,true,true);
7324
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7325
7326
		$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 
7327
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.registration = :registration 
7328
                    GROUP BY spotter_output.arrival_airport_icao
7329
					ORDER BY airport_arrival_icao_count DESC";
7330
      
7331
		
7332
		$sth = $this->db->prepare($query);
7333
		$sth->execute(array(':registration' => $registration));
7334
      
7335
		$airport_array = array();
7336
		$temp_array = array();
7337
        
7338
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7339
		{
7340
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7341
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7342
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7343
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7344
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7345
          
7346
			$airport_array[] = $temp_array;
7347
		}
7348
7349
		return $airport_array;
7350
	}
7351
	
7352
	
7353
	/**
7354
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
7355
	*
7356
	* @return Array the airport list
7357
	*
7358
	*/
7359
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
7360
	{
7361
		$filter_query = $this->getFilter($filters,true,true);
7362
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7363
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7364
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
7365
                    GROUP BY spotter_output.arrival_airport_country
7366
					ORDER BY airport_arrival_country_count DESC";
7367
      
7368
		
7369
		$sth = $this->db->prepare($query);
7370
		$sth->execute(array(':registration' => $registration));
7371
      
7372
		$airport_array = array();
7373
		$temp_array = array();
7374
        
7375
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7376
		{
7377
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7378
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7379
          
7380
			$airport_array[] = $temp_array;
7381
		}
7382
7383
		return $airport_array;
7384
	}
7385
	
7386
	
7387
	
7388
	/**
7389
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
7390
	*
7391
	* @return Array the airport list
7392
	*
7393
	*/
7394
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
7395
	{
7396
		$filter_query = $this->getFilter($filters,true,true);
7397
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7398
		$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 
7399
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.departure_airport_icao = :airport_icao 
7400
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7401
			    ORDER BY airport_arrival_icao_count DESC";
7402
      
7403
		
7404
		$sth = $this->db->prepare($query);
7405
		$sth->execute(array(':airport_icao' => $airport_icao));
7406
      
7407
		$airport_array = array();
7408
		$temp_array = array();
7409
        
7410
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7411
		{
7412
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7413
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7414
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7415
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7416
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7417
          
7418
			$airport_array[] = $temp_array;
7419
		}
7420
7421
		return $airport_array;
7422
	}
7423
	
7424
	
7425
	/**
7426
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
7427
	*
7428
	* @return Array the airport list
7429
	*
7430
	*/
7431
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
7432
	{
7433
		$filter_query = $this->getFilter($filters,true,true);
7434
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7435
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7436
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
7437
                    GROUP BY spotter_output.arrival_airport_country
7438
					ORDER BY airport_arrival_country_count DESC";
7439
      
7440
		
7441
		$sth = $this->db->prepare($query);
7442
		$sth->execute(array(':airport_icao' => $airport_icao));
7443
      
7444
		$airport_array = array();
7445
		$temp_array = array();
7446
        
7447
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7448
		{
7449
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7450
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7451
          
7452
			$airport_array[] = $temp_array;
7453
		}
7454
7455
		return $airport_array;
7456
	}
7457
	
7458
	
7459
	/**
7460
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
7461
	*
7462
	* @return Array the airport list
7463
	*
7464
	*/
7465
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7466
	{
7467
		$filter_query = $this->getFilter($filters,true,true);
7468
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7469
		$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 
7470
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7471
                    GROUP BY spotter_output.arrival_airport_icao
7472
					ORDER BY airport_arrival_icao_count DESC";
7473
      
7474
		
7475
		$sth = $this->db->prepare($query);
7476
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7477
      
7478
		$airport_array = array();
7479
		$temp_array = array();
7480
        
7481
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7482
		{
7483
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7484
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7485
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7486
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7487
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7488
          
7489
			$airport_array[] = $temp_array;
7490
		}
7491
7492
		return $airport_array;
7493
	}
7494
	
7495
	
7496
	
7497
	/**
7498
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
7499
	*
7500
	* @return Array the airport list
7501
	*
7502
	*/
7503
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7504
	{
7505
		$filter_query = $this->getFilter($filters,true,true);
7506
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7507
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7508
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7509
                    GROUP BY spotter_output.arrival_airport_country
7510
					ORDER BY airport_arrival_country_count DESC";
7511
      
7512
		
7513
		$sth = $this->db->prepare($query);
7514
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7515
      
7516
		$airport_array = array();
7517
		$temp_array = array();
7518
        
7519
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7520
		{
7521
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7522
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7523
          
7524
			$airport_array[] = $temp_array;
7525
		}
7526
7527
		return $airport_array;
7528
	}
7529
	
7530
	
7531
	
7532
	/**
7533
	* Gets all arrival airports of the airplanes that have flown over based on a date
7534
	*
7535
	* @return Array the airport list
7536
	*
7537
	*/
7538
	public function countAllArrivalAirportsByDate($date,$filters = array())
7539
	{
7540
		global $globalTimezone, $globalDBdriver;
7541
		$filter_query = $this->getFilter($filters,true,true);
7542
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7543
		if ($globalTimezone != '') {
7544
			date_default_timezone_set($globalTimezone);
7545
			$datetime = new DateTime($date);
7546
			$offset = $datetime->format('P');
7547
		} else $offset = '+00:00';
7548
7549
		if ($globalDBdriver == 'mysql') {
7550
			$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 
7551
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
7552
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7553
					ORDER BY airport_arrival_icao_count DESC";
7554
		} else {
7555
			$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 
7556
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
7557
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7558
					ORDER BY airport_arrival_icao_count DESC";
7559
		}
7560
		
7561
		$sth = $this->db->prepare($query);
7562
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7563
      
7564
		$airport_array = array();
7565
		$temp_array = array();
7566
        
7567
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7568
		{
7569
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7570
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7571
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7572
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7573
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7574
          
7575
			$airport_array[] = $temp_array;
7576
		}
7577
		return $airport_array;
7578
	}
7579
	
7580
	
7581
	
7582
	/**
7583
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
7584
	*
7585
	* @return Array the airport list
7586
	*
7587
	*/
7588
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
7589
	{
7590
		global $globalTimezone, $globalDBdriver;
7591
		$filter_query = $this->getFilter($filters,true,true);
7592
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7593
		if ($globalTimezone != '') {
7594
			date_default_timezone_set($globalTimezone);
7595
			$datetime = new DateTime($date);
7596
			$offset = $datetime->format('P');
7597
		} else $offset = '+00:00';
7598
7599
		if ($globalDBdriver == 'mysql') {
7600
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7601
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7602
					GROUP BY spotter_output.arrival_airport_country
7603
					ORDER BY airport_arrival_country_count DESC";
7604
		} else {
7605
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7606
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
7607
					GROUP BY spotter_output.arrival_airport_country
7608
					ORDER BY airport_arrival_country_count DESC";
7609
		}
7610
		
7611
		$sth = $this->db->prepare($query);
7612
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7613
      
7614
		$airport_array = array();
7615
		$temp_array = array();
7616
        
7617
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7618
		{
7619
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7620
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7621
          
7622
			$airport_array[] = $temp_array;
7623
		}
7624
		return $airport_array;
7625
	}
7626
	
7627
	
7628
	
7629
	/**
7630
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
7631
	*
7632
	* @return Array the airport list
7633
	*
7634
	*/
7635
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
7636
	{
7637
		$filter_query = $this->getFilter($filters,true,true);
7638
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7639
		$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 
7640
		    FROM spotter_output".$filter_query." WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' AND spotter_output.ident = :ident  
7641
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7642
		    ORDER BY airport_arrival_icao_count DESC";
7643
      
7644
		
7645
		$sth = $this->db->prepare($query);
7646
		$sth->execute(array(':ident' => $ident));
7647
      
7648
		$airport_array = array();
7649
		$temp_array = array();
7650
        
7651
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7652
		{
7653
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7654
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7655
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7656
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7657
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7658
          
7659
			$airport_array[] = $temp_array;
7660
		}
7661
7662
		return $airport_array;
7663
	}
7664
	
7665
	
7666
	/**
7667
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
7668
	*
7669
	* @return Array the airport list
7670
	*
7671
	*/
7672
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
7673
	{
7674
		$filter_query = $this->getFilter($filters,true,true);
7675
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7676
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7677
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
7678
                    GROUP BY spotter_output.arrival_airport_country
7679
					ORDER BY airport_arrival_country_count DESC";
7680
      
7681
		
7682
		$sth = $this->db->prepare($query);
7683
		$sth->execute(array(':ident' => $ident));
7684
      
7685
		$airport_array = array();
7686
		$temp_array = array();
7687
        
7688
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7689
		{
7690
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7691
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7692
          
7693
			$airport_array[] = $temp_array;
7694
		}
7695
7696
		return $airport_array;
7697
	}
7698
	
7699
	
7700
	
7701
	/**
7702
	* Gets all arrival airports of the airplanes that have flown over based on a country
7703
	*
7704
	* @return Array the airport list
7705
	*
7706
	*/
7707
	public function countAllArrivalAirportsByCountry($country,$filters = array())
7708
	{
7709
		$filter_query = $this->getFilter($filters,true,true);
7710
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7711
		$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 
7712
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
7713
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7714
			    ORDER BY airport_arrival_icao_count DESC";
7715
      
7716
		
7717
		$sth = $this->db->prepare($query);
7718
		$sth->execute(array(':country' => $country));
7719
      
7720
		$airport_array = array();
7721
		$temp_array = array();
7722
        
7723
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7724
		{
7725
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7726
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7727
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7728
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7729
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7730
          
7731
			$airport_array[] = $temp_array;
7732
		}
7733
7734
		return $airport_array;
7735
	}
7736
	
7737
	
7738
	/**
7739
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
7740
	*
7741
	* @return Array the airport list
7742
	*
7743
	*/
7744
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
7745
	{
7746
		global $globalDBdriver;
7747
		$filter_query = $this->getFilter($filters,true,true);
7748
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7749
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7750
			FROM spotter_output".$filter_query." 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 
7751
                    GROUP BY spotter_output.arrival_airport_country
7752
					ORDER BY airport_arrival_country_count DESC";
7753
      
7754
		
7755
		$sth = $this->db->prepare($query);
7756
		$sth->execute(array(':country' => $country));
7757
      
7758
		$airport_array = array();
7759
		$temp_array = array();
7760
        
7761
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7762
		{
7763
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7764
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7765
          
7766
			$airport_array[] = $temp_array;
7767
		}
7768
7769
		return $airport_array;
7770
	}
7771
7772
7773
7774
	/**
7775
	* Counts all airport departure countries
7776
	*
7777
	* @return Array the airport departure list
7778
	*
7779
	*/
7780
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
7781
	{
7782
		global $globalDBdriver;
7783
		$filter_query = $this->getFilter($filters,true,true);
7784
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7785
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
7786
		$query_values = array();
7787
		if ($year != '') {
7788
			if ($globalDBdriver == 'mysql') {
7789
				$query .= " AND YEAR(spotter_output.date) = :year";
7790
				$query_values = array_merge($query_values,array(':year' => $year));
7791
			} else {
7792
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7793
				$query_values = array_merge($query_values,array(':year' => $year));
7794
			}
7795
		}
7796
		if ($month != '') {
7797
			if ($globalDBdriver == 'mysql') {
7798
				$query .= " AND MONTH(spotter_output.date) = :month";
7799
				$query_values = array_merge($query_values,array(':month' => $month));
7800
			} else {
7801
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7802
				$query_values = array_merge($query_values,array(':month' => $month));
7803
			}
7804
		}
7805
		if ($day != '') {
7806
			if ($globalDBdriver == 'mysql') {
7807
				$query .= " AND DAY(spotter_output.date) = :day";
7808
				$query_values = array_merge($query_values,array(':day' => $day));
7809
			} else {
7810
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7811
				$query_values = array_merge($query_values,array(':day' => $day));
7812
			}
7813
		}
7814
		$query .= " GROUP BY spotter_output.departure_airport_country
7815
					ORDER BY airport_departure_country_count DESC
7816
					LIMIT 10 OFFSET 0";
7817
      
7818
		
7819
		$sth = $this->db->prepare($query);
7820
		$sth->execute($query_values);
7821
      
7822
		$airport_array = array();
7823
		$temp_array = array();
7824
        
7825
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7826
		{
7827
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7828
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7829
          
7830
			$airport_array[] = $temp_array;
7831
		}
7832
7833
		return $airport_array;
7834
	}
7835
	
7836
	
7837
	/**
7838
	* Counts all airport arrival countries
7839
	*
7840
	* @return Array the airport arrival list
7841
	*
7842
	*/
7843
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
7844
	{
7845
		global $globalDBdriver;
7846
		$filter_query = $this->getFilter($filters,true,true);
7847
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7848
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7849
		$query_values = array();
7850
		if ($year != '') {
7851
			if ($globalDBdriver == 'mysql') {
7852
				$query .= " AND YEAR(spotter_output.date) = :year";
7853
				$query_values = array_merge($query_values,array(':year' => $year));
7854
			} else {
7855
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7856
				$query_values = array_merge($query_values,array(':year' => $year));
7857
			}
7858
		}
7859
		if ($month != '') {
7860
			if ($globalDBdriver == 'mysql') {
7861
				$query .= " AND MONTH(spotter_output.date) = :month";
7862
				$query_values = array_merge($query_values,array(':month' => $month));
7863
			} else {
7864
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7865
				$query_values = array_merge($query_values,array(':month' => $month));
7866
			}
7867
		}
7868
		if ($day != '') {
7869
			if ($globalDBdriver == 'mysql') {
7870
				$query .= " AND DAY(spotter_output.date) = :day";
7871
				$query_values = array_merge($query_values,array(':day' => $day));
7872
			} else {
7873
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7874
				$query_values = array_merge($query_values,array(':day' => $day));
7875
			}
7876
		}
7877
		$query .= " GROUP BY spotter_output.arrival_airport_country
7878
					ORDER BY airport_arrival_country_count DESC";
7879
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7880
      
7881
		
7882
		$sth = $this->db->prepare($query);
7883
		$sth->execute($query_values);
7884
      
7885
		$airport_array = array();
7886
		$temp_array = array();
7887
        
7888
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7889
		{
7890
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7891
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7892
          
7893
			$airport_array[] = $temp_array;
7894
		}
7895
7896
		return $airport_array;
7897
	}
7898
7899
7900
7901
7902
7903
	/**
7904
	* Gets all route combinations
7905
	*
7906
	* @return Array the route list
7907
	*
7908
	*/
7909
	public function countAllRoutes($filters = array())
7910
	{
7911
		$filter_query = $this->getFilter($filters,true,true);
7912
		$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
7913
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''
7914
                    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
7915
                    ORDER BY route_count DESC
7916
		    LIMIT 10 OFFSET 0";
7917
      
7918
		
7919
		$sth = $this->db->prepare($query);
7920
		$sth->execute();
7921
      
7922
		$routes_array = array();
7923
		$temp_array = array();
7924
        
7925
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7926
		{
7927
			$temp_array['route_count'] = $row['route_count'];
7928
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7929
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7930
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7931
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7932
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7933
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7934
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7935
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7936
          
7937
			$routes_array[] = $temp_array;
7938
		}
7939
7940
		return $routes_array;
7941
	}
7942
	
7943
	
7944
	
7945
	
7946
	/**
7947
	* Gets all route combinations based on an aircraft
7948
	*
7949
	* @return Array the route list
7950
	*
7951
	*/
7952
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
7953
	{
7954
		$filter_query = $this->getFilter($filters,true,true);
7955
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7956
		$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
7957
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7958
			    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 
7959
			    ORDER BY route_count DESC";
7960
		
7961
		$sth = $this->db->prepare($query);
7962
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7963
      
7964
		$routes_array = array();
7965
		$temp_array = array();
7966
        
7967
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7968
		{
7969
			$temp_array['route_count'] = $row['route_count'];
7970
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7971
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7972
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7973
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7974
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7975
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7976
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7977
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7978
          
7979
			$routes_array[] = $temp_array;
7980
		}
7981
7982
		return $routes_array;
7983
	}
7984
	
7985
	
7986
	/**
7987
	* Gets all route combinations based on an aircraft registration
7988
	*
7989
	* @return Array the route list
7990
	*
7991
	*/
7992
	public function countAllRoutesByRegistration($registration, $filters = array())
7993
	{
7994
		$filter_query = $this->getFilter($filters,true,true);
7995
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
7996
		$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
7997
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
7998
                    GROUP BY route
7999
                    ORDER BY route_count DESC";
8000
      
8001
		
8002
		$sth = $this->db->prepare($query);
8003
		$sth->execute(array(':registration' => $registration));
8004
      
8005
		$routes_array = array();
8006
		$temp_array = array();
8007
        
8008
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8009
		{
8010
			$temp_array['route_count'] = $row['route_count'];
8011
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8012
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8013
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8014
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8015
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8016
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8017
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8018
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8019
          
8020
			$routes_array[] = $temp_array;
8021
		}
8022
8023
		return $routes_array;
8024
	}
8025
	
8026
	
8027
	
8028
	/**
8029
	* Gets all route combinations based on an airline
8030
	*
8031
	* @return Array the route list
8032
	*
8033
	*/
8034
	public function countAllRoutesByAirline($airline_icao, $filters = array())
8035
	{
8036
		$filter_query = $this->getFilter($filters,true,true);
8037
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8038
		$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
8039
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
8040
			    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 
8041
			    ORDER BY route_count DESC";
8042
      
8043
		
8044
		$sth = $this->db->prepare($query);
8045
		$sth->execute(array(':airline_icao' => $airline_icao));
8046
      
8047
		$routes_array = array();
8048
		$temp_array = array();
8049
        
8050
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8051
		{
8052
			$temp_array['route_count'] = $row['route_count'];
8053
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8054
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8055
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8056
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8057
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8058
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8059
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8060
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8061
          
8062
			$routes_array[] = $temp_array;
8063
		}
8064
8065
		return $routes_array;
8066
	}
8067
	
8068
	
8069
	
8070
	/**
8071
	* Gets all route combinations based on an airport
8072
	*
8073
	* @return Array the route list
8074
	*
8075
	*/
8076
	public function countAllRoutesByAirport($airport_icao, $filters = array())
8077
	{
8078
		$filter_query = $this->getFilter($filters,true,true);
8079
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8080
		$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
8081
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8082
			    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 
8083
			    ORDER BY route_count DESC";
8084
		
8085
		$sth = $this->db->prepare($query);
8086
		$sth->execute(array(':airport_icao' => $airport_icao));
8087
      
8088
		$routes_array = array();
8089
		$temp_array = array();
8090
        
8091
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8092
		{
8093
			$temp_array['route_count'] = $row['route_count'];
8094
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8095
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8096
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8097
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8098
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8099
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8100
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8101
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8102
          
8103
			$routes_array[] = $temp_array;
8104
		}
8105
8106
		return $routes_array;
8107
	}
8108
	
8109
	
8110
	
8111
	/**
8112
	* Gets all route combinations based on an country
8113
	*
8114
	* @return Array the route list
8115
	*
8116
	*/
8117
	public function countAllRoutesByCountry($country, $filters = array())
8118
	{
8119
		$filter_query = $this->getFilter($filters,true,true);
8120
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8121
		$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
8122
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
8123
			    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 
8124
			    ORDER BY route_count DESC";
8125
		
8126
		$sth = $this->db->prepare($query);
8127
		$sth->execute(array(':country' => $country));
8128
      
8129
		$routes_array = array();
8130
		$temp_array = array();
8131
        
8132
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8133
		{
8134
			$temp_array['route_count'] = $row['route_count'];
8135
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8136
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8137
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8138
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8139
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8140
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8141
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8142
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8143
          
8144
			$routes_array[] = $temp_array;
8145
		}
8146
8147
		return $routes_array;
8148
	}
8149
8150
8151
	/**
8152
	* Gets all route combinations based on an date
8153
	*
8154
	* @return Array the route list
8155
	*
8156
	*/
8157
	public function countAllRoutesByDate($date, $filters = array())
8158
	{
8159
		global $globalTimezone, $globalDBdriver;
8160
		$filter_query = $this->getFilter($filters,true,true);
8161
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8162
		if ($globalTimezone != '') {
8163
			date_default_timezone_set($globalTimezone);
8164
			$datetime = new DateTime($date);
8165
			$offset = $datetime->format('P');
8166
		} else $offset = '+00:00';
8167
		
8168
		if ($globalDBdriver == 'mysql') {
8169
			$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
8170
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8171
				    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
8172
				    ORDER BY route_count DESC";
8173
		} else {
8174
			$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
8175
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8176
				    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
8177
				    ORDER BY route_count DESC";
8178
		}
8179
		
8180
		$sth = $this->db->prepare($query);
8181
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8182
      
8183
		$routes_array = array();
8184
		$temp_array = array();
8185
        
8186
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8187
		{
8188
			$temp_array['route_count'] = $row['route_count'];
8189
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8190
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8191
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8192
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8193
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8194
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8195
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8196
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8197
          
8198
			$routes_array[] = $temp_array;
8199
		}
8200
8201
		return $routes_array;
8202
	}
8203
	
8204
	
8205
	/**
8206
	* Gets all route combinations based on an ident/callsign
8207
	*
8208
	* @return Array the route list
8209
	*
8210
	*/
8211
	public function countAllRoutesByIdent($ident, $filters = array())
8212
	{
8213
		$filter_query = $this->getFilter($filters,true,true);
8214
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8215
		$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
8216
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
8217
                    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
8218
                    ORDER BY route_count DESC";
8219
      
8220
		
8221
		$sth = $this->db->prepare($query);
8222
		$sth->execute(array(':ident' => $ident));
8223
      
8224
		$routes_array = array();
8225
		$temp_array = array();
8226
        
8227
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8228
		{
8229
			$temp_array['route_count'] = $row['route_count'];
8230
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8231
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8232
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8233
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8234
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8235
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8236
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8237
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8238
          
8239
			$routes_array[] = $temp_array;
8240
		}
8241
8242
		return $routes_array;
8243
	}
8244
	
8245
	
8246
	/**
8247
	* Gets all route combinations based on an manufacturer
8248
	*
8249
	* @return Array the route list
8250
	*
8251
	*/
8252
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
8253
	{
8254
		$filter_query = $this->getFilter($filters,true,true);
8255
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8256
		$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
8257
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
8258
                    GROUP BY route
8259
                    ORDER BY route_count DESC";
8260
      
8261
		
8262
		$sth = $this->db->prepare($query);
8263
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8264
      
8265
		$routes_array = array();
8266
		$temp_array = array();
8267
        
8268
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8269
		{
8270
			$temp_array['route_count'] = $row['route_count'];
8271
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8272
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8273
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8274
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8275
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8276
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8277
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8278
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8279
          
8280
			$routes_array[] = $temp_array;
8281
		}
8282
8283
		return $routes_array;
8284
	}
8285
8286
	
8287
	
8288
	/**
8289
	* Gets all route combinations with waypoints
8290
	*
8291
	* @return Array the route list
8292
	*
8293
	*/
8294
	public function countAllRoutesWithWaypoints($filters = array())
8295
	{
8296
		$filter_query = $this->getFilter($filters,true,true);
8297
		$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
8298
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
8299
                    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
8300
                    ORDER BY route_count DESC
8301
		    LIMIT 10 OFFSET 0";
8302
      
8303
		
8304
		$sth = $this->db->prepare($query);
8305
		$sth->execute();
8306
      
8307
		$routes_array = array();
8308
		$temp_array = array();
8309
        
8310
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8311
		{
8312
			$temp_array['spotter_id'] = $row['spotter_id'];
8313
			$temp_array['route_count'] = $row['route_count'];
8314
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8315
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8316
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8317
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8318
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8319
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8320
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8321
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8322
          
8323
			$routes_array[] = $temp_array;
8324
		}
8325
8326
		return $routes_array;
8327
	}
8328
	
8329
	/**
8330
	* Gets all callsigns that have flown over
8331
	*
8332
	* @return Array the callsign list
8333
	*
8334
	*/
8335
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
8336
	{
8337
		global $globalDBdriver;
8338
		$filter_query = $this->getFilter($filters,true,true);
8339
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
8340
                    FROM spotter_output".$filter_query." spotter_output.ident <> '' ";
8341
		 if ($olderthanmonths > 0) {
8342
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
8343
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
8344
		}
8345
		if ($sincedate != '') {
8346
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
8347
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
8348
		}
8349
		$query_values = array();
8350
		if ($year != '') {
8351
			if ($globalDBdriver == 'mysql') {
8352
				$query .= " AND YEAR(spotter_output.date) = :year";
8353
				$query_values = array_merge($query_values,array(':year' => $year));
8354
			} else {
8355
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8356
				$query_values = array_merge($query_values,array(':year' => $year));
8357
			}
8358
		}
8359
		if ($month != '') {
8360
			if ($globalDBdriver == 'mysql') {
8361
				$query .= " AND MONTH(spotter_output.date) = :month";
8362
				$query_values = array_merge($query_values,array(':month' => $month));
8363
			} else {
8364
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8365
				$query_values = array_merge($query_values,array(':month' => $month));
8366
			}
8367
		}
8368
		if ($day != '') {
8369
			if ($globalDBdriver == 'mysql') {
8370
				$query .= " AND DAY(spotter_output.date) = :day";
8371
				$query_values = array_merge($query_values,array(':day' => $day));
8372
			} else {
8373
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8374
				$query_values = array_merge($query_values,array(':day' => $day));
8375
			}
8376
		}
8377
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
8378
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8379
      		
8380
		$sth = $this->db->prepare($query);
8381
		$sth->execute($query_values);
8382
      
8383
		$callsign_array = array();
8384
		$temp_array = array();
8385
        
8386
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8387
		{
8388
			$temp_array['callsign_icao'] = $row['ident'];
8389
			$temp_array['airline_name'] = $row['airline_name'];
8390
			$temp_array['airline_icao'] = $row['airline_icao'];
8391
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
8392
          
8393
			$callsign_array[] = $temp_array;
8394
		}
8395
8396
		return $callsign_array;
8397
	}
8398
8399
	/**
8400
	* Gets all callsigns that have flown over
8401
	*
8402
	* @return Array the callsign list
8403
	*
8404
	*/
8405
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
8406
	{
8407
		global $globalDBdriver;
8408
		$filter_query = $this->getFilter($filters,true,true);
8409
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
8410
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
8411
		 if ($olderthanmonths > 0) {
8412
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
8413
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
8414
		}
8415
		if ($sincedate != '') {
8416
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
8417
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
8418
		}
8419
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
8420
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8421
      		
8422
		$sth = $this->db->prepare($query);
8423
		$sth->execute();
8424
      
8425
		$callsign_array = array();
8426
		$temp_array = array();
8427
        
8428
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8429
		{
8430
			$temp_array['callsign_icao'] = $row['ident'];
8431
			$temp_array['airline_name'] = $row['airline_name'];
8432
			$temp_array['airline_icao'] = $row['airline_icao'];
8433
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
8434
          
8435
			$callsign_array[] = $temp_array;
8436
		}
8437
8438
		return $callsign_array;
8439
	}
8440
8441
8442
8443
8444
	/**
8445
	* Counts all dates
8446
	*
8447
	* @return Array the date list
8448
	*
8449
	*/
8450
	public function countAllDates($filters = array())
8451
	{
8452
		global $globalTimezone, $globalDBdriver;
8453
		if ($globalTimezone != '') {
8454
			date_default_timezone_set($globalTimezone);
8455
			$datetime = new DateTime();
8456
			$offset = $datetime->format('P');
8457
		} else $offset = '+00:00';
8458
8459
		if ($globalDBdriver == 'mysql') {
8460
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8461
								FROM spotter_output";
8462
			$query .= $this->getFilter($filters);
8463
			$query .= " GROUP BY date_name 
8464
								ORDER BY date_count DESC
8465
								LIMIT 10 OFFSET 0";
8466
		} else {
8467
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
8468
								FROM spotter_output";
8469
			$query .= $this->getFilter($filters);
8470
			$query .= " GROUP BY date_name 
8471
								ORDER BY date_count DESC
8472
								LIMIT 10 OFFSET 0";
8473
		}
8474
      
8475
		
8476
		$sth = $this->db->prepare($query);
8477
		$sth->execute(array(':offset' => $offset));
8478
      
8479
		$date_array = array();
8480
		$temp_array = array();
8481
        
8482
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8483
		{
8484
			$temp_array['date_name'] = $row['date_name'];
8485
			$temp_array['date_count'] = $row['date_count'];
8486
8487
			$date_array[] = $temp_array;
8488
		}
8489
8490
		return $date_array;
8491
	}
8492
	
8493
	/**
8494
	* Counts all dates
8495
	*
8496
	* @return Array the date list
8497
	*
8498
	*/
8499
	public function countAllDatesByAirlines($filters = array())
8500
	{
8501
		global $globalTimezone, $globalDBdriver;
8502
		if ($globalTimezone != '') {
8503
			date_default_timezone_set($globalTimezone);
8504
			$datetime = new DateTime();
8505
			$offset = $datetime->format('P');
8506
		} else $offset = '+00:00';
8507
		$filter_query = $this->getFilter($filters,true,true);
8508
		if ($globalDBdriver == 'mysql') {
8509
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8510
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8511
								GROUP BY spotter_output.airline_icao, date_name 
8512
								ORDER BY date_count DESC
8513
								LIMIT 10 OFFSET 0";
8514
		} else {
8515
			$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
8516
								FROM spotter_output 
8517
								WHERE spotter_output.airline_icao <> '' 
8518
								GROUP BY spotter_output.airline_icao, date_name 
8519
								ORDER BY date_count DESC
8520
								LIMIT 10 OFFSET 0";
8521
		}
8522
      
8523
		
8524
		$sth = $this->db->prepare($query);
8525
		$sth->execute(array(':offset' => $offset));
8526
      
8527
		$date_array = array();
8528
		$temp_array = array();
8529
        
8530
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8531
		{
8532
			$temp_array['date_name'] = $row['date_name'];
8533
			$temp_array['date_count'] = $row['date_count'];
8534
			$temp_array['airline_icao'] = $row['airline_icao'];
8535
8536
			$date_array[] = $temp_array;
8537
		}
8538
8539
		return $date_array;
8540
	}	
8541
	
8542
	/**
8543
	* Counts all dates during the last 7 days
8544
	*
8545
	* @return Array the date list
8546
	*
8547
	*/
8548
	public function countAllDatesLast7Days($filters = array())
8549
	{
8550
		global $globalTimezone, $globalDBdriver;
8551
		if ($globalTimezone != '') {
8552
			date_default_timezone_set($globalTimezone);
8553
			$datetime = new DateTime();
8554
			$offset = $datetime->format('P');
8555
		} else $offset = '+00:00';
8556
		$filter_query = $this->getFilter($filters,true,true);
8557
		if ($globalDBdriver == 'mysql') {
8558
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8559
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
8560
			$query .= " GROUP BY date_name 
8561
								ORDER BY spotter_output.date ASC";
8562
			$query_data = array(':offset' => $offset);
8563
		} else {
8564
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
8565
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
8566
			$query .= " GROUP BY date_name 
8567
								ORDER BY date_name ASC";
8568
			$query_data = array(':offset' => $offset);
8569
    		}
8570
		
8571
		$sth = $this->db->prepare($query);
8572
		$sth->execute($query_data);
8573
      
8574
		$date_array = array();
8575
		$temp_array = array();
8576
        
8577
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8578
		{
8579
			$temp_array['date_name'] = $row['date_name'];
8580
			$temp_array['date_count'] = $row['date_count'];
8581
          
8582
			$date_array[] = $temp_array;
8583
		}
8584
8585
		return $date_array;
8586
	}
8587
8588
	/**
8589
	* Counts all dates during the last month
8590
	*
8591
	* @return Array the date list
8592
	*
8593
	*/
8594
	public function countAllDatesLastMonth($filters = array())
8595
	{
8596
		global $globalTimezone, $globalDBdriver;
8597
		if ($globalTimezone != '') {
8598
			date_default_timezone_set($globalTimezone);
8599
			$datetime = new DateTime();
8600
			$offset = $datetime->format('P');
8601
		} else $offset = '+00:00';
8602
		$filter_query = $this->getFilter($filters,true,true);
8603
		if ($globalDBdriver == 'mysql') {
8604
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8605
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
8606
			$query .= " GROUP BY date_name 
8607
								ORDER BY spotter_output.date ASC";
8608
			$query_data = array(':offset' => $offset);
8609
		} else {
8610
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
8611
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
8612
			$query .= " GROUP BY date_name 
8613
								ORDER BY date_name ASC";
8614
			$query_data = array(':offset' => $offset);
8615
    		}
8616
		
8617
		$sth = $this->db->prepare($query);
8618
		$sth->execute($query_data);
8619
      
8620
		$date_array = array();
8621
		$temp_array = array();
8622
        
8623
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8624
		{
8625
			$temp_array['date_name'] = $row['date_name'];
8626
			$temp_array['date_count'] = $row['date_count'];
8627
          
8628
			$date_array[] = $temp_array;
8629
		}
8630
8631
		return $date_array;
8632
	}
8633
8634
8635
	/**
8636
	* Counts all dates during the last month
8637
	*
8638
	* @return Array the date list
8639
	*
8640
	*/
8641
	public function countAllDatesLastMonthByAirlines($filters = array())
8642
	{
8643
		global $globalTimezone, $globalDBdriver;
8644
		$filter_query = $this->getFilter($filters,true,true);
8645
		if ($globalTimezone != '') {
8646
			date_default_timezone_set($globalTimezone);
8647
			$datetime = new DateTime();
8648
			$offset = $datetime->format('P');
8649
		} else $offset = '+00:00';
8650
		
8651
		if ($globalDBdriver == 'mysql') {
8652
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8653
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
8654
								GROUP BY spotter_output.airline_icao, date_name 
8655
								ORDER BY spotter_output.date ASC";
8656
			$query_data = array(':offset' => $offset);
8657
		} else {
8658
			$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
8659
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
8660
								GROUP BY spotter_output.airline_icao, date_name 
8661
								ORDER BY date_name ASC";
8662
			$query_data = array(':offset' => $offset);
8663
    		}
8664
		
8665
		$sth = $this->db->prepare($query);
8666
		$sth->execute($query_data);
8667
      
8668
		$date_array = array();
8669
		$temp_array = array();
8670
        
8671
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8672
		{
8673
			$temp_array['date_name'] = $row['date_name'];
8674
			$temp_array['date_count'] = $row['date_count'];
8675
			$temp_array['airline_icao'] = $row['airline_icao'];
8676
          
8677
			$date_array[] = $temp_array;
8678
		}
8679
8680
		return $date_array;
8681
	}
8682
	
8683
8684
	/**
8685
	* Counts all month
8686
	*
8687
	* @return Array the month list
8688
	*
8689
	*/
8690
	public function countAllMonths($filters = array())
8691
	{
8692
		global $globalTimezone, $globalDBdriver;
8693
		if ($globalTimezone != '') {
8694
			date_default_timezone_set($globalTimezone);
8695
			$datetime = new DateTime();
8696
			$offset = $datetime->format('P');
8697
		} else $offset = '+00:00';
8698
8699
		if ($globalDBdriver == 'mysql') {
8700
			$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
8701
								FROM spotter_output";
8702
			$query .= $this->getFilter($filters);
8703
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
8704
		} else {
8705
			$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
8706
								FROM spotter_output";
8707
			$query .= $this->getFilter($filters);
8708
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
8709
		}
8710
      
8711
		
8712
		$sth = $this->db->prepare($query);
8713
		$sth->execute(array(':offset' => $offset));
8714
      
8715
		$date_array = array();
8716
		$temp_array = array();
8717
        
8718
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8719
		{
8720
			$temp_array['month_name'] = $row['month_name'];
8721
			$temp_array['year_name'] = $row['year_name'];
8722
			$temp_array['date_count'] = $row['date_count'];
8723
8724
			$date_array[] = $temp_array;
8725
		}
8726
8727
		return $date_array;
8728
	}
8729
8730
	/**
8731
	* Counts all month
8732
	*
8733
	* @return Array the month list
8734
	*
8735
	*/
8736
	public function countAllMonthsByAirlines($filters = array())
8737
	{
8738
		global $globalTimezone, $globalDBdriver;
8739
		$filter_query = $this->getFilter($filters,true,true);
8740
		if ($globalTimezone != '') {
8741
			date_default_timezone_set($globalTimezone);
8742
			$datetime = new DateTime();
8743
			$offset = $datetime->format('P');
8744
		} else $offset = '+00:00';
8745
8746
		if ($globalDBdriver == 'mysql') {
8747
			$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
8748
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8749
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8750
								ORDER BY date_count DESC";
8751
		} else {
8752
			$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
8753
								FROM spotter_output 
8754
								WHERE spotter_output.airline_icao <> '' 
8755
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8756
								ORDER BY date_count DESC";
8757
		}
8758
      
8759
		
8760
		$sth = $this->db->prepare($query);
8761
		$sth->execute(array(':offset' => $offset));
8762
      
8763
		$date_array = array();
8764
		$temp_array = array();
8765
        
8766
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8767
		{
8768
			$temp_array['month_name'] = $row['month_name'];
8769
			$temp_array['year_name'] = $row['year_name'];
8770
			$temp_array['date_count'] = $row['date_count'];
8771
			$temp_array['airline_icao'] = $row['airline_icao'];
8772
8773
			$date_array[] = $temp_array;
8774
		}
8775
8776
		return $date_array;
8777
	}
8778
8779
	/**
8780
	* Counts all military month
8781
	*
8782
	* @return Array the month list
8783
	*
8784
	*/
8785
	public function countAllMilitaryMonths($filters = array())
8786
	{
8787
		global $globalTimezone, $globalDBdriver;
8788
		if ($globalTimezone != '') {
8789
			date_default_timezone_set($globalTimezone);
8790
			$datetime = new DateTime();
8791
			$offset = $datetime->format('P');
8792
		} else $offset = '+00:00';
8793
		$filter_query = $this->getFilter($filters,true,true);
8794
		if ($globalDBdriver == 'mysql') {
8795
			$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
8796
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
8797
								GROUP BY year_name, month_name 
8798
								ORDER BY date_count DESC";
8799
		} else {
8800
			$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
8801
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
8802
								GROUP BY year_name, month_name 
8803
								ORDER BY date_count DESC";
8804
		}
8805
		
8806
		$sth = $this->db->prepare($query);
8807
		$sth->execute(array(':offset' => $offset));
8808
      
8809
		$date_array = array();
8810
		$temp_array = array();
8811
        
8812
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8813
		{
8814
			$temp_array['month_name'] = $row['month_name'];
8815
			$temp_array['year_name'] = $row['year_name'];
8816
			$temp_array['date_count'] = $row['date_count'];
8817
8818
			$date_array[] = $temp_array;
8819
		}
8820
8821
		return $date_array;
8822
	}
8823
	
8824
	/**
8825
	* Counts all month owners
8826
	*
8827
	* @return Array the month list
8828
	*
8829
	*/
8830
	public function countAllMonthsOwners($filters = array())
8831
	{
8832
		global $globalTimezone, $globalDBdriver;
8833
		if ($globalTimezone != '') {
8834
			date_default_timezone_set($globalTimezone);
8835
			$datetime = new DateTime();
8836
			$offset = $datetime->format('P');
8837
		} else $offset = '+00:00';
8838
		$filter_query = $this->getFilter($filters,true,true);
8839
8840
		if ($globalDBdriver == 'mysql') {
8841
			$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
8842
								FROM spotter_output".$filter_query." owner_name <> ''
8843
								GROUP BY year_name, month_name
8844
								ORDER BY date_count DESC";
8845
		} else {
8846
			$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
8847
								FROM spotter_output".$filter_query." owner_name <> ''
8848
								GROUP BY year_name, month_name
8849
								ORDER BY date_count DESC";
8850
		}
8851
		
8852
		$sth = $this->db->prepare($query);
8853
		$sth->execute(array(':offset' => $offset));
8854
      
8855
		$date_array = array();
8856
		$temp_array = array();
8857
        
8858
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8859
		{
8860
			$temp_array['month_name'] = $row['month_name'];
8861
			$temp_array['year_name'] = $row['year_name'];
8862
			$temp_array['date_count'] = $row['date_count'];
8863
8864
			$date_array[] = $temp_array;
8865
		}
8866
8867
		return $date_array;
8868
	}
8869
	
8870
	/**
8871
	* Counts all month owners
8872
	*
8873
	* @return Array the month list
8874
	*
8875
	*/
8876
	public function countAllMonthsOwnersByAirlines($filters = array())
8877
	{
8878
		global $globalTimezone, $globalDBdriver;
8879
		$filter_query = $this->getFilter($filters,true,true);
8880
		if ($globalTimezone != '') {
8881
			date_default_timezone_set($globalTimezone);
8882
			$datetime = new DateTime();
8883
			$offset = $datetime->format('P');
8884
		} else $offset = '+00:00';
8885
8886
		if ($globalDBdriver == 'mysql') {
8887
			$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
8888
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8889
								GROUP BY spotter_output.airline_icao, year_name, month_name
8890
								ORDER BY date_count DESC";
8891
		} else {
8892
			$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
8893
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8894
								GROUP BY spotter_output.airline_icao, year_name, month_name
8895
								ORDER BY date_count DESC";
8896
		}
8897
		
8898
		$sth = $this->db->prepare($query);
8899
		$sth->execute(array(':offset' => $offset));
8900
      
8901
		$date_array = array();
8902
		$temp_array = array();
8903
        
8904
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8905
		{
8906
			$temp_array['month_name'] = $row['month_name'];
8907
			$temp_array['year_name'] = $row['year_name'];
8908
			$temp_array['date_count'] = $row['date_count'];
8909
			$temp_array['airline_icao'] = $row['airline_icao'];
8910
8911
			$date_array[] = $temp_array;
8912
		}
8913
8914
		return $date_array;
8915
	}
8916
8917
	/**
8918
	* Counts all month pilot
8919
	*
8920
	* @return Array the month list
8921
	*
8922
	*/
8923
	public function countAllMonthsPilots($filters = array())
8924
	{
8925
		global $globalTimezone, $globalDBdriver;
8926
		if ($globalTimezone != '') {
8927
			date_default_timezone_set($globalTimezone);
8928
			$datetime = new DateTime();
8929
			$offset = $datetime->format('P');
8930
		} else $offset = '+00:00';
8931
		$filter_query = $this->getFilter($filters,true,true);
8932
8933
		if ($globalDBdriver == 'mysql') {
8934
			$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
8935
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8936
								GROUP BY year_name, month_name
8937
								ORDER BY date_count DESC";
8938
		} else {
8939
			$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
8940
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8941
								GROUP BY year_name, month_name
8942
								ORDER BY date_count DESC";
8943
		}
8944
		
8945
		$sth = $this->db->prepare($query);
8946
		$sth->execute(array(':offset' => $offset));
8947
      
8948
		$date_array = array();
8949
		$temp_array = array();
8950
        
8951
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8952
		{
8953
			$temp_array['month_name'] = $row['month_name'];
8954
			$temp_array['year_name'] = $row['year_name'];
8955
			$temp_array['date_count'] = $row['date_count'];
8956
8957
			$date_array[] = $temp_array;
8958
		}
8959
8960
		return $date_array;
8961
	}
8962
	
8963
	/**
8964
	* Counts all month pilot
8965
	*
8966
	* @return Array the month list
8967
	*
8968
	*/
8969
	public function countAllMonthsPilotsByAirlines($filters = array())
8970
	{
8971
		global $globalTimezone, $globalDBdriver;
8972
		$filter_query = $this->getFilter($filters,true,true);
8973
		if ($globalTimezone != '') {
8974
			date_default_timezone_set($globalTimezone);
8975
			$datetime = new DateTime();
8976
			$offset = $datetime->format('P');
8977
		} else $offset = '+00:00';
8978
8979
		if ($globalDBdriver == 'mysql') {
8980
			$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
8981
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8982
								GROUP BY spotter_output.airline_icao,year_name, month_name
8983
								ORDER BY date_count DESC";
8984
		} else {
8985
			$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
8986
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8987
								GROUP BY spotter_output.airline_icao, year_name, month_name
8988
								ORDER BY date_count DESC";
8989
		}
8990
		
8991
		$sth = $this->db->prepare($query);
8992
		$sth->execute(array(':offset' => $offset));
8993
      
8994
		$date_array = array();
8995
		$temp_array = array();
8996
        
8997
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8998
		{
8999
			$temp_array['month_name'] = $row['month_name'];
9000
			$temp_array['year_name'] = $row['year_name'];
9001
			$temp_array['date_count'] = $row['date_count'];
9002
			$temp_array['airline_icao'] = $row['airline_icao'];
9003
9004
			$date_array[] = $temp_array;
9005
		}
9006
9007
		return $date_array;
9008
	}
9009
9010
	/**
9011
	* Counts all month airline
9012
	*
9013
	* @return Array the month list
9014
	*
9015
	*/
9016
	public function countAllMonthsAirlines($filters = array())
9017
	{
9018
		global $globalTimezone, $globalDBdriver;
9019
		$filter_query = $this->getFilter($filters,true,true);
9020
		if ($globalTimezone != '') {
9021
			date_default_timezone_set($globalTimezone);
9022
			$datetime = new DateTime();
9023
			$offset = $datetime->format('P');
9024
		} else $offset = '+00:00';
9025
9026
		if ($globalDBdriver == 'mysql') {
9027
			$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
9028
								FROM spotter_output".$filter_query." airline_icao <> '' 
9029
								GROUP BY year_name, month_name
9030
								ORDER BY date_count DESC";
9031
		} else {
9032
			$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
9033
								FROM spotter_output".$filter_query." airline_icao <> '' 
9034
								GROUP BY year_name, month_name
9035
								ORDER BY date_count DESC";
9036
		}
9037
		
9038
		$sth = $this->db->prepare($query);
9039
		$sth->execute(array(':offset' => $offset));
9040
      
9041
		$date_array = array();
9042
		$temp_array = array();
9043
        
9044
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9045
		{
9046
			$temp_array['month_name'] = $row['month_name'];
9047
			$temp_array['year_name'] = $row['year_name'];
9048
			$temp_array['date_count'] = $row['date_count'];
9049
9050
			$date_array[] = $temp_array;
9051
		}
9052
9053
		return $date_array;
9054
	}
9055
	
9056
	/**
9057
	* Counts all month aircraft
9058
	*
9059
	* @return Array the month list
9060
	*
9061
	*/
9062
	public function countAllMonthsAircrafts($filters = array())
9063
	{
9064
		global $globalTimezone, $globalDBdriver;
9065
		if ($globalTimezone != '') {
9066
			date_default_timezone_set($globalTimezone);
9067
			$datetime = new DateTime();
9068
			$offset = $datetime->format('P');
9069
		} else $offset = '+00:00';
9070
		$filter_query = $this->getFilter($filters,true,true);
9071
9072
		if ($globalDBdriver == 'mysql') {
9073
			$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
9074
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9075
								GROUP BY year_name, month_name
9076
								ORDER BY date_count DESC";
9077
		} else {
9078
			$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
9079
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
9080
								GROUP BY year_name, month_name
9081
								ORDER BY date_count DESC";
9082
		}
9083
		
9084
		$sth = $this->db->prepare($query);
9085
		$sth->execute(array(':offset' => $offset));
9086
      
9087
		$date_array = array();
9088
		$temp_array = array();
9089
        
9090
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9091
		{
9092
			$temp_array['month_name'] = $row['month_name'];
9093
			$temp_array['year_name'] = $row['year_name'];
9094
			$temp_array['date_count'] = $row['date_count'];
9095
9096
			$date_array[] = $temp_array;
9097
		}
9098
9099
		return $date_array;
9100
	}
9101
	
9102
9103
	/**
9104
	* Counts all month aircraft
9105
	*
9106
	* @return Array the month list
9107
	*
9108
	*/
9109
	public function countAllMonthsAircraftsByAirlines($filters = array())
9110
	{
9111
		global $globalTimezone, $globalDBdriver;
9112
		$filter_query = $this->getFilter($filters,true,true);
9113
		if ($globalTimezone != '') {
9114
			date_default_timezone_set($globalTimezone);
9115
			$datetime = new DateTime();
9116
			$offset = $datetime->format('P');
9117
		} else $offset = '+00:00';
9118
9119
		if ($globalDBdriver == 'mysql') {
9120
			$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
9121
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
9122
								GROUP BY spotter_output.airline_icao, year_name, month_name
9123
								ORDER BY date_count DESC";
9124
		} else {
9125
			$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
9126
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
9127
								GROUP BY spotter_output.airline_icao, year_name, month_name
9128
								ORDER BY date_count DESC";
9129
		}
9130
		
9131
		$sth = $this->db->prepare($query);
9132
		$sth->execute(array(':offset' => $offset));
9133
      
9134
		$date_array = array();
9135
		$temp_array = array();
9136
        
9137
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9138
		{
9139
			$temp_array['month_name'] = $row['month_name'];
9140
			$temp_array['year_name'] = $row['year_name'];
9141
			$temp_array['date_count'] = $row['date_count'];
9142
			$temp_array['airline_icao'] = $row['airline_icao'];
9143
9144
			$date_array[] = $temp_array;
9145
		}
9146
9147
		return $date_array;
9148
	}
9149
9150
	/**
9151
	* Counts all month real arrival
9152
	*
9153
	* @return Array the month list
9154
	*
9155
	*/
9156
	public function countAllMonthsRealArrivals($filters = array())
9157
	{
9158
		global $globalTimezone, $globalDBdriver;
9159
		if ($globalTimezone != '') {
9160
			date_default_timezone_set($globalTimezone);
9161
			$datetime = new DateTime();
9162
			$offset = $datetime->format('P');
9163
		} else $offset = '+00:00';
9164
		$filter_query = $this->getFilter($filters,true,true);
9165
9166
		if ($globalDBdriver == 'mysql') {
9167
			$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
9168
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
9169
								GROUP BY year_name, month_name
9170
								ORDER BY date_count DESC";
9171
		} else {
9172
			$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
9173
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
9174
								GROUP BY year_name, month_name
9175
								ORDER BY date_count DESC";
9176
		}
9177
		
9178
		$sth = $this->db->prepare($query);
9179
		$sth->execute(array(':offset' => $offset));
9180
      
9181
		$date_array = array();
9182
		$temp_array = array();
9183
        
9184
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9185
		{
9186
			$temp_array['month_name'] = $row['month_name'];
9187
			$temp_array['year_name'] = $row['year_name'];
9188
			$temp_array['date_count'] = $row['date_count'];
9189
9190
			$date_array[] = $temp_array;
9191
		}
9192
9193
		return $date_array;
9194
	}
9195
	
9196
9197
	/**
9198
	* Counts all month real arrival
9199
	*
9200
	* @return Array the month list
9201
	*
9202
	*/
9203
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
9204
	{
9205
		global $globalTimezone, $globalDBdriver;
9206
		$filter_query = $this->getFilter($filters,true,true);
9207
		if ($globalTimezone != '') {
9208
			date_default_timezone_set($globalTimezone);
9209
			$datetime = new DateTime();
9210
			$offset = $datetime->format('P');
9211
		} else $offset = '+00:00';
9212
9213
		if ($globalDBdriver == 'mysql') {
9214
			$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
9215
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
9216
								GROUP BY spotter_output.airline_icao, year_name, month_name
9217
								ORDER BY date_count DESC";
9218
		} else {
9219
			$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
9220
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
9221
								GROUP BY spotter_output.airline_icao, year_name, month_name
9222
								ORDER BY date_count DESC";
9223
		}
9224
		
9225
		$sth = $this->db->prepare($query);
9226
		$sth->execute(array(':offset' => $offset));
9227
      
9228
		$date_array = array();
9229
		$temp_array = array();
9230
        
9231
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9232
		{
9233
			$temp_array['month_name'] = $row['month_name'];
9234
			$temp_array['year_name'] = $row['year_name'];
9235
			$temp_array['date_count'] = $row['date_count'];
9236
			$temp_array['airline_icao'] = $row['airline_icao'];
9237
9238
			$date_array[] = $temp_array;
9239
		}
9240
9241
		return $date_array;
9242
	}
9243
	
9244
9245
	/**
9246
	* Counts all dates during the last year
9247
	*
9248
	* @return Array the date list
9249
	*
9250
	*/
9251
	public function countAllMonthsLastYear($filters)
9252
	{
9253
		global $globalTimezone, $globalDBdriver;
9254
		if ($globalTimezone != '') {
9255
			date_default_timezone_set($globalTimezone);
9256
			$datetime = new DateTime();
9257
			$offset = $datetime->format('P');
9258
		} else $offset = '+00:00';
9259
		$filter_query = $this->getFilter($filters,true,true);
9260
		if ($globalDBdriver == 'mysql') {
9261
			$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
9262
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
9263
			$query .= " GROUP BY year_name, month_name
9264
								ORDER BY year_name, month_name ASC";
9265
			$query_data = array(':offset' => $offset);
9266
		} else {
9267
			$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
9268
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
9269
			$query .= " GROUP BY year_name, month_name
9270
								ORDER BY year_name, month_name ASC";
9271
			$query_data = array(':offset' => $offset);
9272
    		}
9273
		
9274
		$sth = $this->db->prepare($query);
9275
		$sth->execute($query_data);
9276
      
9277
		$date_array = array();
9278
		$temp_array = array();
9279
        
9280
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9281
		{
9282
			$temp_array['year_name'] = $row['year_name'];
9283
			$temp_array['month_name'] = $row['month_name'];
9284
			$temp_array['date_count'] = $row['date_count'];
9285
          
9286
			$date_array[] = $temp_array;
9287
		}
9288
9289
		return $date_array;
9290
	}
9291
	
9292
	
9293
	
9294
	/**
9295
	* Counts all hours
9296
	*
9297
	* @return Array the hour list
9298
	*
9299
	*/
9300
	public function countAllHours($orderby,$filters = array())
9301
	{
9302
		global $globalTimezone, $globalDBdriver;
9303
		if ($globalTimezone != '') {
9304
			date_default_timezone_set($globalTimezone);
9305
			$datetime = new DateTime();
9306
			$offset = $datetime->format('P');
9307
		} else $offset = '+00:00';
9308
9309
		$orderby_sql = '';
9310
		if ($orderby == "hour")
9311
		{
9312
			$orderby_sql = "ORDER BY hour_name ASC";
9313
		}
9314
		if ($orderby == "count")
9315
		{
9316
			$orderby_sql = "ORDER BY hour_count DESC";
9317
		}
9318
		
9319
		if ($globalDBdriver == 'mysql') {
9320
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9321
								FROM spotter_output";
9322
			$query .= $this->getFilter($filters);
9323
			$query .= " GROUP BY hour_name 
9324
								".$orderby_sql;
9325
9326
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
9327
								FROM spotter_output 
9328
								GROUP BY hour_name 
9329
								".$orderby_sql."
9330
								LIMIT 10 OFFSET 00";
9331
  */    
9332
		$query_data = array(':offset' => $offset);
9333
		} else {
9334
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9335
								FROM spotter_output";
9336
			$query .= $this->getFilter($filters);
9337
			$query .= " GROUP BY hour_name 
9338
								".$orderby_sql;
9339
			$query_data = array(':offset' => $offset);
9340
		}
9341
		
9342
		$sth = $this->db->prepare($query);
9343
		$sth->execute($query_data);
9344
      
9345
		$hour_array = array();
9346
		$temp_array = array();
9347
        
9348
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9349
		{
9350
			$temp_array['hour_name'] = $row['hour_name'];
9351
			$temp_array['hour_count'] = $row['hour_count'];
9352
          
9353
			$hour_array[] = $temp_array;
9354
		}
9355
9356
		return $hour_array;
9357
	}
9358
	
9359
	/**
9360
	* Counts all hours
9361
	*
9362
	* @return Array the hour list
9363
	*
9364
	*/
9365
	public function countAllHoursByAirlines($orderby, $filters = array())
9366
	{
9367
		global $globalTimezone, $globalDBdriver;
9368
		$filter_query = $this->getFilter($filters,true,true);
9369
		if ($globalTimezone != '') {
9370
			date_default_timezone_set($globalTimezone);
9371
			$datetime = new DateTime();
9372
			$offset = $datetime->format('P');
9373
		} else $offset = '+00:00';
9374
9375
		$orderby_sql = '';
9376
		if ($orderby == "hour")
9377
		{
9378
			$orderby_sql = "ORDER BY hour_name ASC";
9379
		}
9380
		if ($orderby == "count")
9381
		{
9382
			$orderby_sql = "ORDER BY hour_count DESC";
9383
		}
9384
		
9385
		if ($globalDBdriver == 'mysql') {
9386
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9387
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9388
								GROUP BY spotter_output.airline_icao, hour_name 
9389
								".$orderby_sql;
9390
9391
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
9392
								FROM spotter_output 
9393
								GROUP BY hour_name 
9394
								".$orderby_sql."
9395
								LIMIT 10 OFFSET 00";
9396
  */    
9397
		$query_data = array(':offset' => $offset);
9398
		} else {
9399
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9400
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9401
								GROUP BY spotter_output.airline_icao, hour_name 
9402
								".$orderby_sql;
9403
			$query_data = array(':offset' => $offset);
9404
		}
9405
		
9406
		$sth = $this->db->prepare($query);
9407
		$sth->execute($query_data);
9408
      
9409
		$hour_array = array();
9410
		$temp_array = array();
9411
        
9412
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9413
		{
9414
			$temp_array['hour_name'] = $row['hour_name'];
9415
			$temp_array['hour_count'] = $row['hour_count'];
9416
			$temp_array['airline_icao'] = $row['airline_icao'];
9417
          
9418
			$hour_array[] = $temp_array;
9419
		}
9420
9421
		return $hour_array;
9422
	}
9423
9424
9425
9426
	/**
9427
	* Counts all hours by airline
9428
	*
9429
	* @return Array the hour list
9430
	*
9431
	*/
9432
	public function countAllHoursByAirline($airline_icao, $filters = array())
9433
	{
9434
		global $globalTimezone, $globalDBdriver;
9435
		$filter_query = $this->getFilter($filters,true,true);
9436
		if ($globalTimezone != '') {
9437
			date_default_timezone_set($globalTimezone);
9438
			$datetime = new DateTime();
9439
			$offset = $datetime->format('P');
9440
		} else $offset = '+00:00';
9441
9442
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
9443
9444
		if ($globalDBdriver == 'mysql') {
9445
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9446
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
9447
								GROUP BY hour_name 
9448
								ORDER BY hour_name ASC";
9449
		} else {
9450
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9451
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
9452
								GROUP BY hour_name 
9453
								ORDER BY hour_name ASC";
9454
		}
9455
		
9456
		$sth = $this->db->prepare($query);
9457
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
9458
      
9459
		$hour_array = array();
9460
		$temp_array = array();
9461
        
9462
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9463
		{
9464
			$temp_array['hour_name'] = $row['hour_name'];
9465
			$temp_array['hour_count'] = $row['hour_count'];
9466
          
9467
			$hour_array[] = $temp_array;
9468
		}
9469
9470
		return $hour_array;
9471
	}
9472
	
9473
	
9474
	
9475
	
9476
	/**
9477
	* Counts all hours by aircraft
9478
	*
9479
	* @return Array the hour list
9480
	*
9481
	*/
9482
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
9483
	{
9484
		global $globalTimezone, $globalDBdriver;
9485
		$filter_query = $this->getFilter($filters,true,true);
9486
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
9487
		if ($globalTimezone != '') {
9488
			date_default_timezone_set($globalTimezone);
9489
			$datetime = new DateTime();
9490
			$offset = $datetime->format('P');
9491
		} else $offset = '+00:00';
9492
9493
		if ($globalDBdriver == 'mysql') {
9494
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9495
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
9496
								GROUP BY hour_name 
9497
								ORDER BY hour_name ASC";
9498
		} else {
9499
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9500
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
9501
								GROUP BY hour_name 
9502
								ORDER BY hour_name ASC";
9503
		}
9504
		
9505
		$sth = $this->db->prepare($query);
9506
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
9507
      
9508
		$hour_array = array();
9509
		$temp_array = array();
9510
        
9511
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9512
		{
9513
			$temp_array['hour_name'] = $row['hour_name'];
9514
			$temp_array['hour_count'] = $row['hour_count'];
9515
          
9516
			$hour_array[] = $temp_array;
9517
		}
9518
9519
		return $hour_array;
9520
	}
9521
	
9522
	
9523
	/**
9524
	* Counts all hours by aircraft registration
9525
	*
9526
	* @return Array the hour list
9527
	*
9528
	*/
9529
	public function countAllHoursByRegistration($registration, $filters = array())
9530
	{
9531
		global $globalTimezone, $globalDBdriver;
9532
		$filter_query = $this->getFilter($filters,true,true);
9533
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9534
		if ($globalTimezone != '') {
9535
			date_default_timezone_set($globalTimezone);
9536
			$datetime = new DateTime();
9537
			$offset = $datetime->format('P');
9538
		} else $offset = '+00:00';
9539
9540
		if ($globalDBdriver == 'mysql') {
9541
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9542
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
9543
								GROUP BY hour_name 
9544
								ORDER BY hour_name ASC";
9545
		} else {
9546
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9547
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
9548
								GROUP BY hour_name 
9549
								ORDER BY hour_name ASC";
9550
		}
9551
		
9552
		$sth = $this->db->prepare($query);
9553
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
9554
      
9555
		$hour_array = array();
9556
		$temp_array = array();
9557
        
9558
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9559
		{
9560
			$temp_array['hour_name'] = $row['hour_name'];
9561
			$temp_array['hour_count'] = $row['hour_count'];
9562
          
9563
			$hour_array[] = $temp_array;
9564
		}
9565
9566
		return $hour_array;
9567
	}
9568
	
9569
	
9570
	/**
9571
	* Counts all hours by airport
9572
	*
9573
	* @return Array the hour list
9574
	*
9575
	*/
9576
	public function countAllHoursByAirport($airport_icao, $filters = array())
9577
	{
9578
		global $globalTimezone, $globalDBdriver;
9579
		$filter_query = $this->getFilter($filters,true,true);
9580
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
9581
		if ($globalTimezone != '') {
9582
			date_default_timezone_set($globalTimezone);
9583
			$datetime = new DateTime();
9584
			$offset = $datetime->format('P');
9585
		} else $offset = '+00:00';
9586
9587
		if ($globalDBdriver == 'mysql') {
9588
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9589
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
9590
								GROUP BY hour_name 
9591
								ORDER BY hour_name ASC";
9592
		} else {
9593
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9594
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
9595
								GROUP BY hour_name 
9596
								ORDER BY hour_name ASC";
9597
		}
9598
		
9599
		$sth = $this->db->prepare($query);
9600
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
9601
      
9602
		$hour_array = array();
9603
		$temp_array = array();
9604
        
9605
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9606
		{
9607
			$temp_array['hour_name'] = $row['hour_name'];
9608
			$temp_array['hour_count'] = $row['hour_count'];
9609
          
9610
			$hour_array[] = $temp_array;
9611
		}
9612
9613
		return $hour_array;
9614
	}
9615
	
9616
	
9617
	
9618
	/**
9619
	* Counts all hours by manufacturer
9620
	*
9621
	* @return Array the hour list
9622
	*
9623
	*/
9624
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
9625
	{
9626
		global $globalTimezone, $globalDBdriver;
9627
		$filter_query = $this->getFilter($filters,true,true);
9628
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9629
		if ($globalTimezone != '') {
9630
			date_default_timezone_set($globalTimezone);
9631
			$datetime = new DateTime();
9632
			$offset = $datetime->format('P');
9633
		} else $offset = '+00:00';
9634
9635
		if ($globalDBdriver == 'mysql') {
9636
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9637
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
9638
								GROUP BY hour_name 
9639
								ORDER BY hour_name ASC";
9640
		} else {
9641
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9642
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
9643
								GROUP BY hour_name 
9644
								ORDER BY hour_name ASC";
9645
		}
9646
		
9647
		$sth = $this->db->prepare($query);
9648
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
9649
      
9650
		$hour_array = array();
9651
		$temp_array = array();
9652
        
9653
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9654
		{
9655
			$temp_array['hour_name'] = $row['hour_name'];
9656
			$temp_array['hour_count'] = $row['hour_count'];
9657
          
9658
			$hour_array[] = $temp_array;
9659
		}
9660
9661
		return $hour_array;
9662
	}
9663
	
9664
	
9665
	
9666
	/**
9667
	* Counts all hours by date
9668
	*
9669
	* @return Array the hour list
9670
	*
9671
	*/
9672
	public function countAllHoursByDate($date, $filters = array())
9673
	{
9674
		global $globalTimezone, $globalDBdriver;
9675
		$filter_query = $this->getFilter($filters,true,true);
9676
		$date = filter_var($date,FILTER_SANITIZE_STRING);
9677
		if ($globalTimezone != '') {
9678
			date_default_timezone_set($globalTimezone);
9679
			$datetime = new DateTime($date);
9680
			$offset = $datetime->format('P');
9681
		} else $offset = '+00:00';
9682
9683
		if ($globalDBdriver == 'mysql') {
9684
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9685
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
9686
								GROUP BY hour_name 
9687
								ORDER BY hour_name ASC";
9688
		} else {
9689
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9690
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
9691
								GROUP BY hour_name 
9692
								ORDER BY hour_name ASC";
9693
		}
9694
		
9695
		$sth = $this->db->prepare($query);
9696
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9697
      
9698
		$hour_array = array();
9699
		$temp_array = array();
9700
        
9701
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9702
		{
9703
			$temp_array['hour_name'] = $row['hour_name'];
9704
			$temp_array['hour_count'] = $row['hour_count'];
9705
          
9706
			$hour_array[] = $temp_array;
9707
		}
9708
9709
		return $hour_array;
9710
	}
9711
	
9712
	
9713
	
9714
	/**
9715
	* Counts all hours by a ident/callsign
9716
	*
9717
	* @return Array the hour list
9718
	*
9719
	*/
9720
	public function countAllHoursByIdent($ident, $filters = array())
9721
	{
9722
		global $globalTimezone, $globalDBdriver;
9723
		$filter_query = $this->getFilter($filters,true,true);
9724
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9725
		if ($globalTimezone != '') {
9726
			date_default_timezone_set($globalTimezone);
9727
			$datetime = new DateTime();
9728
			$offset = $datetime->format('P');
9729
		} else $offset = '+00:00';
9730
9731
		if ($globalDBdriver == 'mysql') {
9732
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9733
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
9734
								GROUP BY hour_name 
9735
								ORDER BY hour_name ASC";
9736
		} else {
9737
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9738
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
9739
								GROUP BY hour_name 
9740
								ORDER BY hour_name ASC";
9741
		}
9742
      
9743
		
9744
		$sth = $this->db->prepare($query);
9745
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
9746
      
9747
		$hour_array = array();
9748
		$temp_array = array();
9749
        
9750
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9751
		{
9752
			$temp_array['hour_name'] = $row['hour_name'];
9753
			$temp_array['hour_count'] = $row['hour_count'];
9754
          
9755
			$hour_array[] = $temp_array;
9756
		}
9757
9758
		return $hour_array;
9759
	}
9760
	
9761
	
9762
	
9763
	/**
9764
	* Counts all hours by route
9765
	*
9766
	* @return Array the hour list
9767
	*
9768
	*/
9769
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
9770
	{
9771
		global $globalTimezone, $globalDBdriver;
9772
		$filter_query = $this->getFilter($filters,true,true);
9773
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
9774
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
9775
		if ($globalTimezone != '') {
9776
			date_default_timezone_set($globalTimezone);
9777
			$datetime = new DateTime();
9778
			$offset = $datetime->format('P');
9779
		} else $offset = '+00:00';
9780
9781
		if ($globalDBdriver == 'mysql') {
9782
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9783
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9784
								GROUP BY hour_name 
9785
								ORDER BY hour_name ASC";
9786
		} else {
9787
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9788
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9789
								GROUP BY hour_name 
9790
								ORDER BY hour_name ASC";
9791
		}
9792
		
9793
		$sth = $this->db->prepare($query);
9794
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
9795
      
9796
		$hour_array = array();
9797
		$temp_array = array();
9798
        
9799
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9800
		{
9801
			$temp_array['hour_name'] = $row['hour_name'];
9802
			$temp_array['hour_count'] = $row['hour_count'];
9803
          
9804
			$hour_array[] = $temp_array;
9805
		}
9806
9807
		return $hour_array;
9808
	}
9809
	
9810
	
9811
	/**
9812
	* Counts all hours by country
9813
	*
9814
	* @return Array the hour list
9815
	*
9816
	*/
9817
	public function countAllHoursByCountry($country, $filters = array())
9818
	{
9819
		global $globalTimezone, $globalDBdriver;
9820
		$filter_query = $this->getFilter($filters,true,true);
9821
		$country = filter_var($country,FILTER_SANITIZE_STRING);
9822
		if ($globalTimezone != '') {
9823
			date_default_timezone_set($globalTimezone);
9824
			$datetime = new DateTime();
9825
			$offset = $datetime->format('P');
9826
		} else $offset = '+00:00';
9827
9828
		if ($globalDBdriver == 'mysql') {
9829
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9830
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9831
								GROUP BY hour_name 
9832
								ORDER BY hour_name ASC";
9833
		} else {
9834
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9835
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9836
								GROUP BY hour_name 
9837
								ORDER BY hour_name ASC";
9838
		}
9839
		
9840
		$sth = $this->db->prepare($query);
9841
		$sth->execute(array(':country' => $country,':offset' => $offset));
9842
      
9843
		$hour_array = array();
9844
		$temp_array = array();
9845
        
9846
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9847
		{
9848
			$temp_array['hour_name'] = $row['hour_name'];
9849
			$temp_array['hour_count'] = $row['hour_count'];
9850
          
9851
			$hour_array[] = $temp_array;
9852
		}
9853
9854
		return $hour_array;
9855
	}
9856
9857
9858
9859
9860
	/**
9861
	* Counts all aircraft that have flown over
9862
	*
9863
	* @return Integer the number of aircrafts
9864
	*
9865
	*/
9866
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
9867
	{
9868
		global $globalDBdriver;
9869
		$filter_query = $this->getFilter($filters,true,true);
9870
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
9871
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9872
		$query_values = array();
9873
		if ($year != '') {
9874
			if ($globalDBdriver == 'mysql') {
9875
				$query .= " AND YEAR(spotter_output.date) = :year";
9876
				$query_values = array_merge($query_values,array(':year' => $year));
9877
			} else {
9878
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9879
				$query_values = array_merge($query_values,array(':year' => $year));
9880
			}
9881
		}
9882
		if ($month != '') {
9883
			if ($globalDBdriver == 'mysql') {
9884
				$query .= " AND MONTH(spotter_output.date) = :month";
9885
				$query_values = array_merge($query_values,array(':month' => $month));
9886
			} else {
9887
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9888
				$query_values = array_merge($query_values,array(':month' => $month));
9889
			}
9890
		}
9891
9892
		$sth = $this->db->prepare($query);
9893
		$sth->execute($query_values);
9894
		return $sth->fetchColumn();
9895
	}
9896
9897
	/**
9898
	* Counts all flight that really arrival
9899
	*
9900
	* @return Integer the number of aircrafts
9901
	*
9902
	*/
9903
	public function countOverallArrival($filters = array(),$year = '',$month = '')
9904
	{
9905
		global $globalDBdriver;
9906
		$filter_query = $this->getFilter($filters,true,true);
9907
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
9908
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
9909
		$query_values = array();
9910
		if ($year != '') {
9911
			if ($globalDBdriver == 'mysql') {
9912
				$query .= " AND YEAR(spotter_output.date) = :year";
9913
				$query_values = array_merge($query_values,array(':year' => $year));
9914
			} else {
9915
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9916
				$query_values = array_merge($query_values,array(':year' => $year));
9917
			}
9918
		}
9919
		if ($month != '') {
9920
			if ($globalDBdriver == 'mysql') {
9921
				$query .= " AND MONTH(spotter_output.date) = :month";
9922
				$query_values = array_merge($query_values,array(':month' => $month));
9923
			} else {
9924
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9925
				$query_values = array_merge($query_values,array(':month' => $month));
9926
			}
9927
		}
9928
		
9929
		$sth = $this->db->prepare($query);
9930
		$sth->execute($query_values);
9931
		return $sth->fetchColumn();
9932
	}
9933
9934
	/**
9935
	* Counts all pilots that have flown over
9936
	*
9937
	* @return Integer the number of pilots
9938
	*
9939
	*/
9940
	public function countOverallPilots($filters = array(),$year = '',$month = '')
9941
	{
9942
		global $globalDBdriver;
9943
		$filter_query = $this->getFilter($filters,true,true);
9944
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
9945
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
9946
		$query_values = array();
9947
		if ($year != '') {
9948
			if ($globalDBdriver == 'mysql') {
9949
				$query .= " AND YEAR(spotter_output.date) = :year";
9950
				$query_values = array_merge($query_values,array(':year' => $year));
9951
			} else {
9952
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9953
				$query_values = array_merge($query_values,array(':year' => $year));
9954
			}
9955
		}
9956
		if ($month != '') {
9957
			if ($globalDBdriver == 'mysql') {
9958
				$query .= " AND MONTH(spotter_output.date) = :month";
9959
				$query_values = array_merge($query_values,array(':month' => $month));
9960
			} else {
9961
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9962
				$query_values = array_merge($query_values,array(':month' => $month));
9963
			}
9964
		}
9965
		$sth = $this->db->prepare($query);
9966
		$sth->execute($query_values);
9967
		return $sth->fetchColumn();
9968
	}
9969
9970
	/**
9971
	* Counts all owners that have flown over
9972
	*
9973
	* @return Integer the number of owners
9974
	*
9975
	*/
9976
	public function countOverallOwners($filters = array(),$year = '',$month = '')
9977
	{
9978
		global $globalDBdriver;
9979
		$filter_query = $this->getFilter($filters,true,true);
9980
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
9981
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
9982
		$query_values = array();
9983
		if ($year != '') {
9984
			if ($globalDBdriver == 'mysql') {
9985
				$query .= " AND YEAR(spotter_output.date) = :year";
9986
				$query_values = array_merge($query_values,array(':year' => $year));
9987
			} else {
9988
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9989
				$query_values = array_merge($query_values,array(':year' => $year));
9990
			}
9991
		}
9992
		if ($month != '') {
9993
			if ($globalDBdriver == 'mysql') {
9994
				$query .= " AND MONTH(spotter_output.date) = :month";
9995
				$query_values = array_merge($query_values,array(':month' => $month));
9996
			} else {
9997
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9998
				$query_values = array_merge($query_values,array(':month' => $month));
9999
			}
10000
		}
10001
		$sth = $this->db->prepare($query);
10002
		$sth->execute($query_values);
10003
		return $sth->fetchColumn();
10004
	}
10005
	
10006
	
10007
	/**
10008
	* Counts all flights that have flown over
10009
	*
10010
	* @return Integer the number of flights
10011
	*
10012
	*/
10013
	public function countOverallFlights($filters = array(),$year = '',$month = '')
10014
	{
10015
		global $globalDBdriver;
10016
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
10017
		$query_values = array();
10018
		$query = '';
10019
		if ($year != '') {
10020
			if ($globalDBdriver == 'mysql') {
10021
				$query .= " AND YEAR(spotter_output.date) = :year";
10022
				$query_values = array_merge($query_values,array(':year' => $year));
10023
			} else {
10024
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10025
				$query_values = array_merge($query_values,array(':year' => $year));
10026
			}
10027
		}
10028
		if ($month != '') {
10029
			if ($globalDBdriver == 'mysql') {
10030
				$query .= " AND MONTH(spotter_output.date) = :month";
10031
				$query_values = array_merge($query_values,array(':month' => $month));
10032
			} else {
10033
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10034
				$query_values = array_merge($query_values,array(':month' => $month));
10035
			}
10036
		}
10037
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
10038
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
10039
		
10040
		//echo $query;
10041
		$sth = $this->db->prepare($queryi);
10042
		$sth->execute($query_values);
10043
		return $sth->fetchColumn();
10044
	}
10045
	
10046
	/**
10047
	* Counts all military flights that have flown over
10048
	*
10049
	* @return Integer the number of flights
10050
	*
10051
	*/
10052
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
10053
	{
10054
		global $globalDBdriver;
10055
		$filter_query = $this->getFilter($filters,true,true);
10056
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
10057
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
10058
		$query_values = array();
10059
		if ($year != '') {
10060
			if ($globalDBdriver == 'mysql') {
10061
				$query .= " AND YEAR(spotter_output.date) = :year";
10062
				$query_values = array_merge($query_values,array(':year' => $year));
10063
			} else {
10064
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10065
				$query_values = array_merge($query_values,array(':year' => $year));
10066
			}
10067
		}
10068
		if ($month != '') {
10069
			if ($globalDBdriver == 'mysql') {
10070
				$query .= " AND MONTH(spotter_output.date) = :month";
10071
				$query_values = array_merge($query_values,array(':month' => $month));
10072
			} else {
10073
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10074
				$query_values = array_merge($query_values,array(':month' => $month));
10075
			}
10076
		}
10077
      
10078
		$sth = $this->db->prepare($query);
10079
		$sth->execute($query_values);
10080
		return $sth->fetchColumn();
10081
	}
10082
	
10083
	
10084
	
10085
	/**
10086
	* Counts all airlines that have flown over
10087
	*
10088
	* @return Integer the number of airlines
10089
	*
10090
	*/
10091
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
10092
	{
10093
		global $globalDBdriver;
10094
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
10095
							FROM spotter_output";
10096
      
10097
		$query_values = array();
10098
		$query = '';
10099
		if ($year != '') {
10100
			if ($globalDBdriver == 'mysql') {
10101
				$query .= " AND YEAR(spotter_output.date) = :year";
10102
				$query_values = array_merge($query_values,array(':year' => $year));
10103
			} else {
10104
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
10105
				$query_values = array_merge($query_values,array(':year' => $year));
10106
			}
10107
		}
10108
		if ($month != '') {
10109
			if ($globalDBdriver == 'mysql') {
10110
				$query .= " AND MONTH(spotter_output.date) = :month";
10111
				$query_values = array_merge($query_values,array(':month' => $month));
10112
			} else {
10113
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10114
				$query_values = array_merge($query_values,array(':month' => $month));
10115
			}
10116
		}
10117
                if ($query == '') $queryi .= $this->getFilter($filters);
10118
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
10119
10120
10121
		$sth = $this->db->prepare($queryi);
10122
		$sth->execute($query_values);
10123
		return $sth->fetchColumn();
10124
	}
10125
10126
  
10127
	/**
10128
	* Counts all hours of today
10129
	*
10130
	* @return Array the hour list
10131
	*
10132
	*/
10133
	public function countAllHoursFromToday($filters = array())
10134
	{
10135
		global $globalTimezone, $globalDBdriver;
10136
		$filter_query = $this->getFilter($filters,true,true);
10137
		if ($globalTimezone != '') {
10138
			date_default_timezone_set($globalTimezone);
10139
			$datetime = new DateTime();
10140
			$offset = $datetime->format('P');
10141
		} else $offset = '+00:00';
10142
10143
		if ($globalDBdriver == 'mysql') {
10144
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10145
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
10146
								GROUP BY hour_name 
10147
								ORDER BY hour_name ASC";
10148
		} else {
10149
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10150
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
10151
								GROUP BY hour_name 
10152
								ORDER BY hour_name ASC";
10153
		}
10154
		
10155
		$sth = $this->db->prepare($query);
10156
		$sth->execute(array(':offset' => $offset));
10157
      
10158
		$hour_array = array();
10159
		$temp_array = array();
10160
        
10161
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10162
		{
10163
			$temp_array['hour_name'] = $row['hour_name'];
10164
			$temp_array['hour_count'] = $row['hour_count'];
10165
			$hour_array[] = $temp_array;
10166
		}
10167
10168
		return $hour_array;
10169
	}
10170
    
10171
	/**
10172
	* Gets all the spotter information based on calculated upcoming flights
10173
	*
10174
	* @return Array the spotter information
10175
	*
10176
	*/
10177
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
10178
	{
10179
		global $global_query, $globalDBdriver, $globalTimezone;
10180
		$filter_query = $this->getFilter($filters,true,true);
10181
		date_default_timezone_set('UTC');
10182
		$limit_query = '';
10183
		if ($limit != "")
10184
		{
10185
			$limit_array = explode(",", $limit);
10186
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
10187
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
10188
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
10189
			{
10190
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
10191
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
10192
			}
10193
		}
10194
		$currentHour = date("G");
10195
		$next3Hours = date("G", strtotime("+3 hour"));
10196
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
10197
		if ($currentHour >= 21 && $next3Hours >= 00)
10198
		{
10199
			$next3Hours = 24;
10200
		}
10201
		$currentDayofWeek = date("l");
10202
		if ($globalDBdriver == 'mysql') {
10203
			if ($sort != "")
10204
			{
10205
				$search_orderby_array = $this->getOrderBy();
10206
				$orderby_query = $search_orderby_array[$sort]['sql'];
10207
			} else {
10208
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
10209
			}
10210
/*
10211
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
10212
			    FROM spotter_output
10213
			    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'
10214
			    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";
10215
*/
10216
/*			$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
10217
			    FROM spotter_output
10218
			    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'
10219
			    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";
10220
*/
10221
			$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 
10222
			    FROM spotter_output".$filter_query." 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'
10223
			    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
10224
			    HAVING count(spotter_output.ident) > 5$orderby_query";
10225
10226
			$spotter_array = $this->getDataFromDB($query.$limit_query);
10227
		} else {
10228
			if ($sort != "")
10229
			{
10230
				$search_orderby_array = $this->getOrderBy();
10231
				$orderby_query = $search_orderby_array[$sort]['sql'];
10232
			} else {
10233
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
10234
			}
10235
			$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') 
10236
			    FROM spotter_output".$filter_query." 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 <> '' 
10237
			    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')
10238
			    HAVING count(spotter_output.ident) > 5$orderby_query";
10239
			//echo $query;
10240
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
10241
			/*
10242
			$sth = $this->db->prepare($query);
10243
			$sth->execute(array(':timezone' => $globalTimezone));
10244
			return $sth->fetchAll(PDO::FETCH_ASSOC);
10245
			*/
10246
		}
10247
		return $spotter_array;
10248
	}
10249
    
10250
    
10251
     /**
10252
	* Gets the Barrie Spotter ID based on the FlightAware ID
10253
	*
10254
	* @return Integer the Barrie Spotter ID
10255
q	*
10256
	*/
10257
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
10258
	{
10259
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
10260
10261
		$query  = "SELECT spotter_output.spotter_id
10262
								FROM spotter_output 
10263
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
10264
        
10265
		
10266
		$sth = $this->db->prepare($query);
10267
		$sth->execute();
10268
10269
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10270
		{
10271
			return $row['spotter_id'];
10272
		}
10273
	}
10274
  
10275
 
10276
	/**
10277
	* Parses a date string
10278
	*
10279
	* @param String $dateString the date string
10280
	* @param String $timezone the timezone of a user
10281
	* @return Array the time information
10282
	*
10283
	*/
10284
	public function parseDateString($dateString, $timezone = '')
10285
	{
10286
		$time_array = array();
10287
	
10288
		if ($timezone != "")
10289
		{
10290
			date_default_timezone_set($timezone);
10291
		}
10292
		
10293
		$current_date = date("Y-m-d H:i:s");
10294
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
10295
		
10296
		$diff = abs(strtotime($current_date) - strtotime($date));
10297
10298
		$time_array['years'] = floor($diff / (365*60*60*24)); 
10299
		$years = $time_array['years'];
10300
		
10301
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
10302
		$months = $time_array['months'];
10303
		
10304
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
10305
		$days = $time_array['days'];
10306
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
10307
		$hours = $time_array['hours'];
10308
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
10309
		$minutes = $time_array['minutes'];
10310
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
10311
		
10312
		return $time_array;	
10313
	}	
10314
	
10315
	
10316
	
10317
	
10318
	/**
10319
	* Parses the direction degrees to working
10320
	*
10321
	* @param Float $direction the direction in degrees
10322
	* @return Array the direction information
10323
	*
10324
	*/
10325
	public function parseDirection($direction = 0)
10326
	{
10327
		if ($direction == '') $direction = 0;
10328
		$direction_array = array();
10329
		$temp_array = array();
10330
10331
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
10332
		{
10333
			$temp_array['direction_degree'] = $direction;
10334
			$temp_array['direction_shortname'] = "N";
10335
			$temp_array['direction_fullname'] = "North";
10336
		} elseif ($direction >= 22.5 && $direction < 45){
10337
			$temp_array['direction_degree'] = $direction;
10338
			$temp_array['direction_shortname'] = "NNE";
10339
			$temp_array['direction_fullname'] = "North-Northeast";
10340
		} elseif ($direction >= 45 && $direction < 67.5){
10341
			$temp_array['direction_degree'] = $direction;
10342
			$temp_array['direction_shortname'] = "NE";
10343
			$temp_array['direction_fullname'] = "Northeast";
10344
		} elseif ($direction >= 67.5 && $direction < 90){
10345
			$temp_array['direction_degree'] = $direction;
10346
			$temp_array['direction_shortname'] = "ENE";
10347
			$temp_array['direction_fullname'] = "East-Northeast";
10348
		} elseif ($direction >= 90 && $direction < 112.5){
10349
			$temp_array['direction_degree'] = $direction;
10350
			$temp_array['direction_shortname'] = "E";
10351
			$temp_array['direction_fullname'] = "East";
10352
		} elseif ($direction >= 112.5 && $direction < 135){
10353
			$temp_array['direction_degree'] = $direction;
10354
			$temp_array['direction_shortname'] = "ESE";
10355
			$temp_array['direction_fullname'] = "East-Southeast";
10356
		} elseif ($direction >= 135 && $direction < 157.5){
10357
			$temp_array['direction_degree'] = $direction;
10358
			$temp_array['direction_shortname'] = "SE";
10359
			$temp_array['direction_fullname'] = "Southeast";
10360
		} elseif ($direction >= 157.5 && $direction < 180){
10361
			$temp_array['direction_degree'] = $direction;
10362
			$temp_array['direction_shortname'] = "SSE";
10363
			$temp_array['direction_fullname'] = "South-Southeast";
10364
		} elseif ($direction >= 180 && $direction < 202.5){
10365
			$temp_array['direction_degree'] = $direction;
10366
			$temp_array['direction_shortname'] = "S";
10367
			$temp_array['direction_fullname'] = "South";
10368
		} elseif ($direction >= 202.5 && $direction < 225){
10369
			$temp_array['direction_degree'] = $direction;
10370
			$temp_array['direction_shortname'] = "SSW";
10371
			$temp_array['direction_fullname'] = "South-Southwest";
10372
		} elseif ($direction >= 225 && $direction < 247.5){
10373
			$temp_array['direction_degree'] = $direction;
10374
			$temp_array['direction_shortname'] = "SW";
10375
			$temp_array['direction_fullname'] = "Southwest";
10376
		} elseif ($direction >= 247.5 && $direction < 270){
10377
			$temp_array['direction_degree'] = $direction;
10378
			$temp_array['direction_shortname'] = "WSW";
10379
			$temp_array['direction_fullname'] = "West-Southwest";
10380
		} elseif ($direction >= 270 && $direction < 292.5){
10381
			$temp_array['direction_degree'] = $direction;
10382
			$temp_array['direction_shortname'] = "W";
10383
			$temp_array['direction_fullname'] = "West";
10384
		} elseif ($direction >= 292.5 && $direction < 315){
10385
			$temp_array['direction_degree'] = $direction;
10386
			$temp_array['direction_shortname'] = "WNW";
10387
			$temp_array['direction_fullname'] = "West-Northwest";
10388
		} elseif ($direction >= 315 && $direction < 337.5){
10389
			$temp_array['direction_degree'] = $direction;
10390
			$temp_array['direction_shortname'] = "NW";
10391
			$temp_array['direction_fullname'] = "Northwest";
10392
		} elseif ($direction >= 337.5 && $direction < 360){
10393
			$temp_array['direction_degree'] = $direction;
10394
			$temp_array['direction_shortname'] = "NNW";
10395
			$temp_array['direction_fullname'] = "North-Northwest";
10396
		}
10397
		$direction_array[] = $temp_array;
10398
		return $direction_array;
10399
	}
10400
	
10401
	
10402
	/**
10403
	* Gets the aircraft registration
10404
	*
10405
	* @param String $flightaware_id the flight aware id
10406
	* @return String the aircraft registration
10407
	*
10408
	*/
10409
	
10410
	public function getAircraftRegistration($flightaware_id)
10411
	{
10412
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
10413
        
10414
		$options = array(
10415
			'trace' => true,
10416
			'exceptions' => 0,
10417
			'login' => $globalFlightAwareUsername,
10418
			'password' => $globalFlightAwarePassword,
10419
		);
10420
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
10421
		
10422
		$params = array('faFlightID' => $flightaware_id);
10423
		$result = $client->AirlineFlightInfo($params);
10424
		
10425
		if (isset($result->AirlineFlightInfoResult))
10426
		{
10427
			$registration = $result->AirlineFlightInfoResult->tailnumber;
10428
		} else return '';
10429
		
10430
		$registration = $this->convertAircraftRegistration($registration);
10431
		
10432
		return $registration;
10433
	}
10434
10435
10436
	/**
10437
	* Gets the aircraft registration from ModeS
10438
	*
10439
	* @param String $aircraft_modes the flight ModeS in hex
10440
	* @return String the aircraft registration
10441
	*
10442
	*/
10443
	public function getAircraftRegistrationBymodeS($aircraft_modes)
10444
	{
10445
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
10446
	
10447
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
10448
		
10449
		$sth = $this->db->prepare($query);
10450
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
10451
    
10452
		$row = $sth->fetch(PDO::FETCH_ASSOC);
10453
		$sth->closeCursor();
10454
		if (count($row) > 0) {
10455
		    //return $row['Registration'];
10456
		    return $row['registration'];
10457
		} else return '';
10458
	
10459
	}
10460
10461
	/**
10462
	* Gets the aircraft type from ModeS
10463
	*
10464
	* @param String $aircraft_modes the flight ModeS in hex
10465
	* @return String the aircraft type
10466
	*
10467
	*/
10468
	public function getAircraftTypeBymodeS($aircraft_modes)
10469
	{
10470
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
10471
	
10472
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
10473
		
10474
		$sth = $this->db->prepare($query);
10475
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
10476
    
10477
		$row = $sth->fetch(PDO::FETCH_ASSOC);
10478
		$sth->closeCursor();
10479
		if (count($row) > 0) {
10480
		    if ($row['type_flight'] == null) return '';
10481
		    else return $row['type_flight'];
10482
		} else return '';
10483
	
10484
	}
10485
10486
	/**
10487
	* Gets Country from latitude/longitude
10488
	*
10489
	* @param Float $latitude latitute of the flight
10490
	* @param Float $longitude longitute of the flight
10491
	* @return String the countrie
10492
	*/
10493
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
10494
	{
10495
		global $globalDBdriver, $globalDebug;
10496
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
10497
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
10498
	
10499
		$Connection = new Connection($this->db);
10500
		if (!$Connection->tableExists('countries')) return '';
10501
	
10502
		try {
10503
			/*
10504
			if ($globalDBdriver == 'mysql') {
10505
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
10506
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
10507
			}
10508
			*/
10509
			// This query seems to work both for MariaDB and PostgreSQL
10510
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
10511
		
10512
			$sth = $this->db->prepare($query);
10513
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
10514
			$sth->execute();
10515
    
10516
			$row = $sth->fetch(PDO::FETCH_ASSOC);
10517
			$sth->closeCursor();
10518
			if (count($row) > 0) {
10519
				return $row;
10520
			} else return '';
10521
		} catch (PDOException $e) {
10522
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
10523
			return '';
10524
		}
10525
	
10526
	}
10527
10528
	/**
10529
	* Gets Country from iso2
10530
	*
10531
	* @param String $iso2 ISO2 country code
10532
	* @return String the countrie
10533
	*/
10534
	public function getCountryFromISO2($iso2)
10535
	{
10536
		global $globalDBdriver, $globalDebug;
10537
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
10538
	
10539
		$Connection = new Connection($this->db);
10540
		if (!$Connection->tableExists('countries')) return '';
10541
	
10542
		try {
10543
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
10544
		
10545
			$sth = $this->db->prepare($query);
10546
			$sth->execute(array(':iso2' => $iso2));
10547
    
10548
			$row = $sth->fetch(PDO::FETCH_ASSOC);
10549
			$sth->closeCursor();
10550
			if (count($row) > 0) {
10551
				return $row;
10552
			} else return '';
10553
		} catch (PDOException $e) {
10554
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
10555
			return '';
10556
		}
10557
	
10558
	}
10559
10560
	/**
10561
	* converts the registration code using the country prefix
10562
	*
10563
	* @param String $registration the aircraft registration
10564
	* @return String the aircraft registration
10565
	*
10566
	*/
10567
	public function convertAircraftRegistration($registration)
10568
	{
10569
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10570
		$registration_prefix = '';
10571
		$registration_1 = substr($registration, 0, 1);
10572
		$registration_2 = substr($registration, 0, 2);
10573
10574
		//first get the prefix based on two characters
10575
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
10576
      
10577
		
10578
		$sth = $this->db->prepare($query);
10579
		$sth->execute(array(':registration_2' => $registration_2));
10580
        
10581
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10582
		{
10583
			$registration_prefix = $row['registration_prefix'];
10584
		}
10585
10586
		//if we didn't find a two chracter prefix lets just search the one with one character
10587
		if ($registration_prefix == '')
10588
		{
10589
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
10590
			$sth = $this->db->prepare($query);
10591
			$sth->execute(array(':registration_1' => $registration_1));
10592
	        
10593
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10594
			{
10595
				$registration_prefix = $row['registration_prefix'];
10596
			}
10597
		}
10598
10599
		//determine which characters are being used and convert the registration code appropiately
10600
		if (strlen($registration_prefix) == 1)
10601
		{
10602
			if (0 === strpos($registration, 'N')) {
10603
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
10604
			} else {
10605
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
10606
			}
10607
		} else if(strlen($registration_prefix) == 2){
10608
			if (0 === strpos($registration, 'N')) {
10609
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
10610
			} else {
10611
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
10612
			}
10613
		}
10614
		return $registration;
10615
	}
10616
10617
	/**
10618
	* Country from the registration code
10619
	*
10620
	* @param String $registration the aircraft registration
10621
	* @return String the country
10622
	*
10623
	*/
10624
	public function countryFromAircraftRegistration($registration)
10625
	{
10626
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10627
		
10628
		$registration_prefix = '';
10629
		$registration_test = explode('-',$registration);
10630
		$country = '';
10631
		if ($registration_test[0] != $registration) {
10632
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
10633
	      
10634
			$sth = $this->db->prepare($query);
10635
			$sth->execute(array(':registration_1' => $registration_test[0]));
10636
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10637
			{
10638
				//$registration_prefix = $row['registration_prefix'];
10639
				$country = $row['country'];
10640
			}
10641
		} else {
10642
    			$registration_1 = substr($registration, 0, 1);
10643
		        $registration_2 = substr($registration, 0, 2);
10644
10645
			$country = '';
10646
			//first get the prefix based on two characters
10647
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
10648
      
10649
			
10650
			$sth = $this->db->prepare($query);
10651
			$sth->execute(array(':registration_2' => $registration_2));
10652
        
10653
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10654
			{
10655
				$registration_prefix = $row['registration_prefix'];
10656
				$country = $row['country'];
10657
			}
10658
10659
			//if we didn't find a two chracter prefix lets just search the one with one character
10660
			if ($registration_prefix == "")
10661
			{
10662
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
10663
	      
10664
				$sth = $this->db->prepare($query);
10665
				$sth->execute(array(':registration_1' => $registration_1));
10666
	        
10667
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
10668
				{
10669
					//$registration_prefix = $row['registration_prefix'];
10670
					$country = $row['country'];
10671
				}
10672
			}
10673
		}
10674
    
10675
		return $country;
10676
	}
10677
10678
	/**
10679
	* Registration prefix from the registration code
10680
	*
10681
	* @param String $registration the aircraft registration
10682
	* @return String the registration prefix
10683
	*
10684
	*/
10685
	public function registrationPrefixFromAircraftRegistration($registration)
10686
	{
10687
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10688
		
10689
		$registration_prefix = '';
10690
		$registration_test = explode('-',$registration);
10691
		//$country = '';
10692
		if ($registration_test[0] != $registration) {
10693
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
10694
	      
10695
			$sth = $this->db->prepare($query);
10696
			$sth->execute(array(':registration_1' => $registration_test[0]));
10697
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10698
			{
10699
				$registration_prefix = $row['registration_prefix'];
10700
				//$country = $row['country'];
10701
			}
10702
		} else {
10703
    			$registration_1 = substr($registration, 0, 1);
10704
		        $registration_2 = substr($registration, 0, 2);
10705
10706
			//first get the prefix based on two characters
10707
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
10708
      
10709
			
10710
			$sth = $this->db->prepare($query);
10711
			$sth->execute(array(':registration_2' => $registration_2));
10712
        
10713
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10714
			{
10715
				$registration_prefix = $row['registration_prefix'];
10716
				//$country = $row['country'];
10717
			}
10718
10719
			//if we didn't find a two chracter prefix lets just search the one with one character
10720
			if ($registration_prefix == "")
10721
			{
10722
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
10723
	      
10724
				$sth = $this->db->prepare($query);
10725
				$sth->execute(array(':registration_1' => $registration_1));
10726
	        
10727
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
10728
				{
10729
					$registration_prefix = $row['registration_prefix'];
10730
					//$country = $row['country'];
10731
				}
10732
			}
10733
		}
10734
    
10735
		return $registration_prefix;
10736
	}
10737
10738
10739
	/**
10740
	* Country from the registration code
10741
	*
10742
	* @param String $registration the aircraft registration
10743
	* @return String the country
10744
	*
10745
	*/
10746
	public function countryFromAircraftRegistrationCode($registration)
10747
	{
10748
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10749
		
10750
		$country = '';
10751
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
10752
		$sth = $this->db->prepare($query);
10753
		$sth->execute(array(':registration' => $registration));
10754
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10755
		{
10756
			$country = $row['country'];
10757
		}
10758
		return $country;
10759
	}
10760
	
10761
	/**
10762
	* Set a new highlight value for a flight
10763
	*
10764
	* @param String $flightaware_id flightaware_id from spotter_output table
10765
	* @param String $highlight New highlight value
10766
	*/
10767
	public function setHighlightFlight($flightaware_id,$highlight) {
10768
		
10769
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
10770
		$sth = $this->db->prepare($query);
10771
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
10772
	}
10773
10774
	/**
10775
	* Set a new highlight value for a flight by Registration
10776
	*
10777
	* @param String $registration Registration of the aircraft
10778
	* @param String $date Date of spotted aircraft
10779
	* @param String $highlight New highlight value
10780
	*/
10781
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
10782
		if ($date == '') {
10783
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
10784
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
10785
		} else {
10786
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
10787
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
10788
		}
10789
		$sth = $this->db->prepare($query);
10790
		$sth->execute($query_values);
10791
	}
10792
	
10793
	/**
10794
	* Gets the short url from bit.ly
10795
	*
10796
	* @param String $url the full url
10797
	* @return String the bit.ly url
10798
	*
10799
	*/
10800
	public function getBitlyURL($url)
10801
	{
10802
		global $globalBitlyAccessToken;
10803
		
10804
		if ($globalBitlyAccessToken == '') return $url;
10805
        
10806
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
10807
		
10808
		$ch = curl_init();
10809
		curl_setopt($ch, CURLOPT_HEADER, 0);
10810
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
10811
		curl_setopt($ch, CURLOPT_URL, $google_url);
10812
		$bitly_data = curl_exec($ch);
10813
		curl_close($ch);
10814
		
10815
		$bitly_data = json_decode($bitly_data);
10816
		$bitly_url = '';
10817
		if ($bitly_data->status_txt = "OK"){
10818
			$bitly_url = $bitly_data->data->url;
10819
		}
10820
10821
		return $bitly_url;
10822
	}
10823
10824
10825
	public function getOrderBy()
10826
	{
10827
		$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"));
10828
		
10829
		return $orderby;
10830
		
10831
	}
10832
    
10833
/*
10834
	public function importFromFlightAware()
10835
	{
10836
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
10837
		$Spotter = new Spotter($this->db);
10838
		$SpotterLive = new SpotterLive($this->db);
10839
		$options = array(
10840
		            'trace' => true,
10841
		            'exceptions' => 0,
10842
		            'login' => $globalFlightAwareUsername,
10843
		            'password' => $globalFlightAwarePassword,
10844
		);
10845
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
10846
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
10847
		$result = $client->SearchBirdseyeInFlight($params);
10848
		$dataFound = false;
10849
		$ignoreImport = false;
10850
		if (isset($result->SearchBirdseyeInFlightResult))
10851
		{
10852
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
10853
			{
10854
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
10855
				{
10856
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
10857
					{
10858
						foreach($globalAirportIgnore as $airportIgnore)
10859
						{
10860
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
10861
							{
10862
								$ignoreImport = true; 
10863
							}
10864
						}
10865
						if ($ignoreImport == false)
10866
						{
10867
							$flightaware_id = $aircraft->faFlightID;
10868
							$ident = $aircraft->ident;
10869
							$aircraft_type = $aircraft->type;
10870
							$departure_airport = $aircraft->origin;
10871
							$arrival_airport = $aircraft->destination;
10872
							$latitude = $aircraft->latitude;
10873
							$longitude = $aircraft->longitude;
10874
							$waypoints = $aircraft->waypoints;
10875
							$altitude = $aircraft->altitude;
10876
							$heading = $aircraft->heading;
10877
							$groundspeed = $aircraft->groundspeed;
10878
							$dataFound = true;
10879
							//gets the callsign from the last hour
10880
							$last_hour_ident = $this->getIdentFromLastHour($ident);
10881
							//change the departure/arrival airport to NA if its not available
10882
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
10883
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
10884
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
10885
							if($last_hour_ident == "")
10886
							{
10887
								//adds the spotter data for the archive
10888
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10889
							}
10890
10891
							//adds the spotter LIVE data
10892
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10893
						}
10894
					}
10895
					$ignoreImport = false;
10896
				}
10897
			} else {
10898
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
10899
				{
10900
					foreach($globalAirportIgnore as $airportIgnore)
10901
					{
10902
						foreach($globalAirportIgnore as $airportIgnore)
10903
						{
10904
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
10905
							{
10906
								$ignoreImport = true; 
10907
							}
10908
						}
10909
						if ($ignoreImport == false)
10910
						{
10911
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
10912
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
10913
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
10914
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
10915
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
10916
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
10917
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
10918
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
10919
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
10920
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
10921
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
10922
							$dataFound = true;
10923
							//gets the callsign from the last hour
10924
							$last_hour_ident = $this->getIdentFromLastHour($ident);
10925
							//change the departure/arrival airport to NA if its not available
10926
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
10927
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
10928
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
10929
							if($last_hour_ident == "")
10930
							{
10931
								//adds the spotter data for the archive
10932
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10933
							}
10934
							//adds the spotter LIVE data
10935
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10936
						}
10937
						$ignoreImport = false;
10938
					}
10939
				}
10940
			}
10941
		} 
10942
	}
10943
*/
10944
10945
	// Update flights data when new data in DB
10946
	public function updateFieldsFromOtherTables()
10947
	{
10948
		global $globalDebug, $globalDBdriver;
10949
		$Image = new Image($this->db);
10950
		
10951
10952
		// routes
10953
		if ($globalDebug) print "Routes...\n";
10954
		if ($globalDBdriver == 'mysql') {
10955
			$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)";
10956
		} else {
10957
			$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'";
10958
		}
10959
		$sth = $this->db->prepare($query);
10960
		$sth->execute();
10961
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10962
		{
10963
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
10964
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
10965
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
10966
				$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";
10967
				$sthu = $this->db->prepare($update_query);
10968
				$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']));
10969
			}
10970
		}
10971
		
10972
		if ($globalDebug) print "Airlines...\n";
10973
		//airlines
10974
		if ($globalDBdriver == 'mysql') {
10975
			$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)";
10976
		} elseif ($globalDBdriver == 'pgsql') {
10977
			$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'";
10978
		}
10979
		$sth = $this->db->prepare($query);
10980
		$sth->execute();
10981
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10982
		{
10983
			if (is_numeric(substr($row['ident'], -1, 1)))
10984
			{
10985
				$fromsource = NULL;
10986
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
10987
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
10988
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
10989
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
10990
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
10991
				if (isset($airline_array[0]['name'])) {
10992
					$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";
10993
					$sthu = $this->db->prepare($update_query);
10994
					$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']));
10995
				}
10996
			}
10997
		}
10998
10999
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
11000
		//duplicate modes
11001
		$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";
11002
		$sth = $this->db->prepare($query);
11003
		$sth->execute();
11004
		
11005
		if ($globalDebug) print "Aircraft...\n";
11006
		//aircraft
11007
		if ($globalDBdriver == 'mysql') {
11008
			$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)";
11009
		} elseif ($globalDBdriver == 'pgsql') {
11010
			$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'";
11011
		}
11012
		$sth = $this->db->prepare($query);
11013
		$sth->execute();
11014
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11015
		{
11016
			if ($row['aircraft_icao'] != '') {
11017
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
11018
				if ($row['registration'] != ""){
11019
					$image_array = $Image->getSpotterImage($row['registration']);
11020
					if (!isset($image_array[0]['registration'])) {
11021
						$Image->addSpotterImage($row['registration']);
11022
					}
11023
				}
11024
				if (count($aircraft_name) > 0) {
11025
					$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";
11026
					$sthu = $this->db->prepare($update_query);
11027
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
11028
				}
11029
			}
11030
		}
11031
	}	
11032
11033
	// Update arrival airports for data already in DB
11034
	public function updateArrivalAirports()
11035
	{
11036
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
11037
		$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";
11038
		$sth = $this->db->prepare($query);
11039
		$sth->execute();
11040
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
11041
		{
11042
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
11043
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
11044
				$airport_icao = '';
11045
				 if (isset($closestAirports[0])) {
11046
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
11047
						$airport_icao = $closestAirports[0]['icao'];
11048
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
11049
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
11050
						foreach ($closestAirports as $airport) {
11051
							if ($row['arrival_airport_icao'] == $airport['icao']) {
11052
								$airport_icao = $airport['icao'];
11053
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
11054
								break;
11055
							}
11056
						}
11057
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
11058
						$airport_icao = $closestAirports[0]['icao'];
11059
						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";
11060
					} else {
11061
						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";
11062
					}
11063
				} else {
11064
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
11065
				}
11066
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
11067
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
11068
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
11069
					$sthu = $this->db->prepare($update_query);
11070
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
11071
				}
11072
			}
11073
		}
11074
	}
11075
	
11076
	public function closestAirports($origLat,$origLon,$dist = 10) {
11077
		global $globalDBdriver;
11078
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
11079
/*
11080
		$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 
11081
                      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)) 
11082
                      having distance < $dist ORDER BY distance limit 100;";
11083
*/
11084
		if ($globalDBdriver == 'mysql') {
11085
			$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 
11086
	                      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)) 
11087
	                      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;";
11088
                } else {
11089
			$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 
11090
	                      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)) 
11091
	                      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;";
11092
    		}
11093
		$sth = $this->db->prepare($query);
11094
		$sth->execute();
11095
		return $sth->fetchAll(PDO::FETCH_ASSOC);
11096
	}
11097
}
11098
/*
11099
$Spotter = new Spotter();
11100
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
11101
*/
11102
/*
11103
$Spotter = new Spotter();
11104
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
11105
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
11106
print_r($da);
11107
print_r($aa);
11108
print_r(array_merge($da,$aa));
11109
*/
11110
?>