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

Spotter::getSpotterDataByDate()   C

Complexity

Conditions 9
Paths 42

Size

Total Lines 59
Code Lines 35

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 35
nc 42
nop 4
dl 0
loc 59
rs 6.9133
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
?>