Completed
Push — master ( 48d981...ca573a )
by Yannick
07:38
created

Spotter::countAllDetectedArrivalAirports()   F

Complexity

Conditions 14
Paths 1458

Size

Total Lines 74
Code Lines 54

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 14
eloc 54
nc 1458
nop 8
dl 0
loc 74
rs 2.2878
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

Long Method

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

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

Commonly applied refactorings include:

Many Parameters

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

There are several approaches to avoid long parameter lists:

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