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

Spotter::countAllCallsigns()   F

Complexity

Conditions 13
Paths 972

Size

Total Lines 63
Code Lines 46

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 13
eloc 46
nc 972
nop 7
dl 0
loc 63
rs 3.1746
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

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

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

Commonly applied refactorings include:

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $aircraft_correct_icaotype = array('CL64' => 'CL60',
9
					'F9LX' => 'F900',
10
					'K35T' => 'K35R',
11
					'F5EX' => 'FA50',
12
					'G102' => 'GLID',
13
					'LJ36' => 'LJ35',
14
					'G500' => 'EGRT',
15
					'A300' => 'A30B',
16
					'ROT' => 'B77W',
17
					'BPN' => 'B772',
18
					'0011' => 'B77W',
19
					'F9DX' => 'F900',
20
					'B757' => 'B752',
21
					'4/05' => 'A332',
22
					'F/A3' => 'A320',
23
					'F2EX' => 'F2TH',
24
					'EA55' => 'EA50',
25
					'B73B' => 'B737',
26
					'G450' => 'GLF4',
27
					'H25X' => 'H25B',
28
					'E175' => 'E75S',
29
					'B777' => 'B77W',
30
					'F2LX' => 'F2TH',
31
					'CL65' => 'CL60',
32
					'A380' => 'A388',
33
					'G550' => 'GLF5',
34
					'F9EX' => 'F900',
35
					'E195' => 'E190',
36
					'H750' => 'H25B',
37
					'B747' => 'B744',
38
					'B767' => 'B763',
39
					'PA39' => 'PA30',
40
					'H900' => 'H25B',
41
					'AN74' => 'AN72',
42
					'CL85' => 'CRJ2',
43
					'G400' => 'GLF4',
44
					'CL61' => 'CL60',
45
					'F2TS' => 'F2TH',
46
					'Z602' => 'CH60',
47
					'G100' => 'ASTR');
48
49
50
	public $db;
51
	
52
	public function __construct($dbc = null) {
53
		$Connection = new Connection($dbc);
54
		$this->db = $Connection->db();
55
	}
56
57
	/**
58
	* Get SQL query part for filter used
59
	* @param Array $filter the filter
60
	* @return Array the SQL part
61
	*/
62
	public function getFilter($filter = array(),$where = false,$and = false) {
63
		global $globalFilter, $globalStatsFilters, $globalFilterName;
64
		$filters = array();
65
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
66
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
67
				$filters = $globalStatsFilters[$globalFilterName];
68
			} else {
69
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
70
			}
71
		}
72
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
73
		$filter_query_join = '';
74
		$filter_query_where = '';
75
		foreach($filters as $flt) {
76
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
77
				if ($flt['airlines'][0] != '') {
78
					if (isset($flt['source'])) {
79
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
80
					} else {
81
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
82
					}
83
				}
84
			}
85
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
86
				if (isset($flt['source'])) {
87
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
88
				} else {
89
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
90
				}
91
			}
92
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']))) {
93
				if (isset($flt['source'])) {
94
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
95
				}
96
			}
97
		}
98
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
99
			if ($filter['airlines'][0] != '') {
100
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
101
			}
102
		}
103
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
104
			$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_output.flightaware_id ";
105
		}
106
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
107
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
108
		}
109
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
110
				$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$filter['pilots_id'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
111
			}
112
		if (isset($filter['source']) && !empty($filter['source'])) {
113
			$filter_query_where = " WHERE format_source IN ('".implode("','",$filter['source'])."')";
114
		}
115
		if (isset($filter['ident']) && !empty($filter['ident'])) {
116
			$filter_query_where = " WHERE ident = '".$filter['ident']."'";
117
		}
118
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
119
			if ($filter_query_where == '') {
120
				$filter_query_where = " WHERE format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
121
			} else {
122
				$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
123
			}
124
		}
125
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
126
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
127
		$filter_query = $filter_query_join.$filter_query_where;
128
		return $filter_query;
129
	}
130
131
	/**
132
	* Executes the SQL statements to get the spotter information
133
	*
134
	* @param String $query the SQL query
135
	* @param Array $params parameter of the query
136
	* @param String $limitQuery the limit query
137
	* @return Array the spotter information
138
	*
139
	*/
140
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
141
	{
142
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
143
		$Image = new Image($this->db);
144
		$Schedule = new Schedule($this->db);
145
		$ACARS = new ACARS($this->db);
146
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
147
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
148
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
149
		if (!isset($globalVAM)) $globalVAM = FALSE;
150
		date_default_timezone_set('UTC');
151
		
152
		if (!is_string($query))
153
		{
154
			return false;
155
		}
156
		
157
		if ($limitQuery != "")
158
		{
159
			if (!is_string($limitQuery))
160
			{
161
				return false;
162
			}
163
		}
164
165
		
166
		try {
167
			$sth = $this->db->prepare($query.$limitQuery);
168
			$sth->execute($params);
169
		} catch (PDOException $e) {
170
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
171
			exit();
172
		}
173
		
174
	//	$num_rows = count($sth->fetchAll());
175
		$num_rows = 0;
176
177
		$spotter_array = array();
178
		
179
180
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
181
		{
182
			$num_rows++;
183
			$temp_array = array();
184
			if (isset($row['spotter_live_id'])) {
185
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
186
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
187
			} elseif (isset($row['spotter_archive_id'])) {
188
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
189
			} elseif (isset($row['spotter_archive_output_id'])) {
190
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
191
			} elseif (isset($row['spotter_id'])) {
192
				$temp_array['spotter_id'] = $row['spotter_id'];
193
			} else {
194
				$temp_array['spotter_id'] = '';
195
			}
196
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
197
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
198
			$temp_array['ident'] = $row['ident'];
199
			if (isset($row['registration']) && $row['registration'] != '') {
200
				$temp_array['registration'] = $row['registration'];
201
			} elseif (isset($temp_array['modes'])) {
202
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
203
			} else $temp_array['registration'] = '';
204
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
205
			
206
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
207
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
208
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
209
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
210
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
211
			/*
212
			if (Connection->tableExists('countries')) {
213
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
214
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
215
				    $temp_array['country'] = $country_info['name'];
216
				    $temp_array['country_iso2'] = $country_info['iso2'];
217
				}
218
			}
219
			*/
220
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
221
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
222
			if (isset($row['route_stop'])) {
223
				$temp_array['route_stop'] = $row['route_stop'];
224
				if ($row['route_stop'] != '') {
225
					$allroute = explode(' ',$row['route_stop']);
226
			
227
					foreach ($allroute as $route) {
228
						$route_airport_array = $this->getAllAirportInfo($route);
229
						if (isset($route_airport_array[0]['name'])) {
230
							$route_stop_details = array();
231
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
232
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
233
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
234
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
235
							$temp_array['route_stop_details'][] = $route_stop_details;
236
						}
237
					}
238
				}
239
			}
240
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
241
			if (isset($row['heading'])) {
242
				$temp_array['heading'] = $row['heading'];
243
				$heading_direction = $this->parseDirection($row['heading']);
244
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
245
			}
246
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
247
			$temp_array['image'] = "";
248
			$temp_array['image_thumbnail'] = "";
249
			$temp_array['image_source'] = "";
250
			$temp_array['image_copyright'] = "";
251
 
252
			if (isset($row['highlight'])) {
253
				$temp_array['highlight'] = $row['highlight'];
254
			} else $temp_array['highlight'] = '';
255
			
256
			if (isset($row['date'])) {
257
				$dateArray = $this->parseDateString($row['date']);
258
				if ($dateArray['seconds'] < 10)
259
				{
260
					$temp_array['date'] = "a few seconds ago";
261
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
262
				{
263
					$temp_array['date'] = "half a minute ago";
264
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
265
				{
266
					$temp_array['date'] = "about a minute ago";
267
				} elseif ($dateArray['minutes'] < 5)
268
				{
269
					$temp_array['date'] = "a few minutes ago";
270
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
271
				{
272
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
273
				} elseif ($dateArray['hours'] < 2)
274
				{
275
					$temp_array['date'] = "about an hour ago";
276
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
277
				{
278
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
279
				} else {
280
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
281
				}
282
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
283
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
284
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
285
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
286
			}
287
			
288
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
289
				$temp_array['aircraft_name'] = $row['aircraft_name'];
290
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
291
				if (isset($row['aircraft_shadow'])) {
292
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
293
				}
294
			} elseif (isset($row['aircraft_icao'])) {
295
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
296
				if (count($aircraft_array) > 0) {
297
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
298
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
299
				
300
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
301
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
302
					} else $temp_array['aircraft_shadow'] = 'default.png';
303
                                } else {
304
                            		$temp_array['aircraft_shadow'] = 'default.png';
305
					$temp_array['aircraft_name'] = 'N/A';
306
					$temp_array['aircraft_manufacturer'] = 'N/A';
307
                            	}
308
			}
309
			$fromsource = NULL;
310
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
311
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
312
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
313
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
314
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
315
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
316
				if (!is_numeric(substr($row['ident'], 0, 3))) {
317
					if (is_numeric(substr($row['ident'], 2, 1))) {
318
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
319
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
320
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
321
					} else {
322
						$airline_array = $this->getAllAirlineInfo('NA');
323
					}
324
				} else {
325
					$airline_array = $this->getAllAirlineInfo('NA');
326
				}
327
				if (count($airline_array) > 0) {
328
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
329
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
330
					$temp_array['airline_name'] = $airline_array[0]['name'];
331
					$temp_array['airline_country'] = $airline_array[0]['country'];
332
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
333
					$temp_array['airline_type'] = $airline_array[0]['type'];
334
				}
335
			} else {
336
				$temp_array['airline_icao'] = $row['airline_icao'];
337
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
338
				else $temp_array['airline_iata'] = 'N/A';
339
				$temp_array['airline_name'] = $row['airline_name'];
340
				$temp_array['airline_country'] = $row['airline_country'];
341
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
342
				else $temp_array['airline_callsign'] = 'N/A';
343
				$temp_array['airline_type'] = $row['airline_type'];
344
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
345
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
346
					if (count($airline_array) > 0) {
347
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
348
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
349
						$temp_array['airline_name'] = $airline_array[0]['name'];
350
						$temp_array['airline_country'] = $airline_array[0]['country'];
351
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
352
						$temp_array['airline_type'] = $airline_array[0]['type'];
353
					}
354
				}
355
			}
356
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
357
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
358
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
359
				if (count($acars_array) > 0) {
360
					$temp_array['acars'] = $acars_array;
361
					//print_r($acars_array);
362
				}
363
			}
364
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
365
				$temp_array['aircraft_owner'] = $row['owner_name'];
366
			}
367
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
368
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
369
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
370
				$temp_array['aircraft_base'] = $owner_info['base'];
371
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
372
			}
373
374
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
375
			{
376
				if ($globalIVAO) {
377
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
378
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
379
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
380
				if (count($image_array) > 0) {
381
					$temp_array['image'] = $image_array[0]['image'];
382
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
383
					$temp_array['image_source'] = $image_array[0]['image_source'];
384
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
385
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
386
						$planespotter_url_array = explode("_", $temp_array['image']);
387
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
388
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
389
					 }
390
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
391
				}
392
			}
393
394
395
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
396
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
397
			}
398
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
399
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
400
			}
401
			
402
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
403
				if ($schedules === true) {
404
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
405
					//print_r($schedule_array);
406
					if (count($schedule_array) > 0) {
407
						if ($schedule_array['departure_airport_icao'] != '') {
408
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
409
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
410
						}
411
						if ($schedule_array['arrival_airport_icao'] != '') {
412
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
413
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
414
						}
415
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
416
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
417
					}
418
				}
419
			} else {
420
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
421
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
422
				}
423
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
424
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
425
				}
426
			}
427
			
428
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
429
			if ($row['departure_airport_icao'] != '') {
430
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
431
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
432
			/*
433
			} elseif ($row['departure_airport_name'] != '') {
434
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
435
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
436
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
437
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
438
			*/
439
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
440
			if (isset($departure_airport_array[0]['name'])) {
441
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
442
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
443
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
444
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
445
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
446
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
447
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
448
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
449
			}
450
451
			/*
452
			if (isset($row['departure_airport_time'])) {
453
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
454
			}
455
			*/
456
			
457
			if ($row['arrival_airport_icao'] != '') {
458
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
459
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
460
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
461
			if (isset($arrival_airport_array[0]['name'])) {
462
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
463
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
464
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
465
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
466
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
467
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
468
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
469
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
470
			}
471
			/*
472
			if (isset($row['arrival_airport_time'])) {
473
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
474
			}
475
			*/
476
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
477
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
478
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
479
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
480
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
481
			if (isset($row['squawk'])) {
482
				$temp_array['squawk'] = $row['squawk'];
483
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
484
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
485
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
486
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
487
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
488
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
489
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
490
			}
491
    			
492
			$temp_array['query_number_rows'] = $num_rows;
493
			
494
			$spotter_array[] = $temp_array;
495
		}
496
		if ($num_rows == 0) return array();
497
		$spotter_array[0]['query_number_rows'] = $num_rows;
498
		return $spotter_array;
499
	}	
500
	
501
	
502
	/**
503
	* Gets all the spotter information
504
	*
505
	* @return Array the spotter information
506
	*
507
	*/
508
	public function searchSpotterData($q = '', $registration = '', $aircraft_icao = '', $aircraft_manufacturer = '', $highlights = '', $airline_icao = '', $airline_country = '', $airline_type = '', $airport = '', $airport_country = '', $callsign = '', $departure_airport_route = '', $arrival_airport_route = '', $owner = '',$pilot_id = '',$pilot_name = '',$altitude = '', $date_posted = '', $limit = '', $sort = '', $includegeodata = '',$origLat = '',$origLon = '',$dist = '',$filters = array())
509
	{
510
		global $globalTimezone, $globalDBdriver;
511
		require_once(dirname(__FILE__).'/class.Translation.php');
512
		$Translation = new Translation();
513
514
		date_default_timezone_set('UTC');
515
516
		$query_values = array();
517
		$additional_query = '';
518
		$filter_query = $this->getFilter($filters,true,true);
519
		if ($q != "")
520
		{
521
			if (!is_string($q))
522
			{
523
				return false;
524
			} else {
525
				$q_array = explode(" ", $q);
526
				foreach ($q_array as $q_item){
527
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
528
					$additional_query .= " AND (";
529
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
530
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
531
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
532
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
533
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
534
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
535
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
536
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
537
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
538
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
539
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
540
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
541
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
542
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
543
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
544
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
545
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
546
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
547
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
548
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
549
					$translate = $Translation->ident2icao($q_item);
550
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
551
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
552
					$additional_query .= ")";
553
				}
554
			}
555
		}
556
557
		if ($registration != "")
558
		{
559
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
560
			if (!is_string($registration))
561
			{
562
				return false;
563
			} else {
564
				$additional_query .= " AND spotter_output.registration = :registration";
565
				$query_values = array_merge($query_values,array(':registration' => $registration));
566
			}
567
		}
568
569
		if ($aircraft_icao != "")
570
		{
571
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
572
			if (!is_string($aircraft_icao))
573
			{
574
				return false;
575
			} else {
576
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
577
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
578
			}
579
		}
580
581
		if ($aircraft_manufacturer != "")
582
		{
583
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
584
			if (!is_string($aircraft_manufacturer))
585
			{
586
				return false;
587
			} else {
588
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
589
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
590
			}
591
		}
592
593
		if ($highlights == "true")
594
		{
595
			if (!is_string($highlights))
596
			{
597
				return false;
598
			} else {
599
				$additional_query .= " AND (spotter_output.highlight <> '')";
600
			}
601
		}
602
603
		if ($airline_icao != "")
604
		{
605
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
606
			if (!is_string($airline_icao))
607
			{
608
				return false;
609
			} else {
610
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
611
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
612
			}
613
		}
614
615
		if ($airline_country != "")
616
		{
617
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
618
			if (!is_string($airline_country))
619
			{
620
				return false;
621
			} else {
622
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
623
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
624
			}
625
		}
626
627
		if ($airline_type != "")
628
		{
629
			if (!is_string($airline_type))
630
			{
631
				return false;
632
			} else {
633
				if ($airline_type == "passenger")
634
				{
635
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
636
				}
637
				if ($airline_type == "cargo")
638
				{
639
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
640
				}
641
				if ($airline_type == "military")
642
				{
643
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
644
				}
645
			}
646
		}
647
648
		if ($airport != "")
649
		{
650
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
651
			if (!is_string($airport))
652
			{
653
				return false;
654
			} else {
655
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
656
				$query_values = array_merge($query_values,array(':airport' => $airport));
657
			}
658
		}
659
660
		if ($airport_country != "")
661
		{
662
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
663
			if (!is_string($airport_country))
664
			{
665
				return false;
666
			} else {
667
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
668
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
669
			}
670
		}
671
    
672
		if ($callsign != "")
673
		{
674
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
675
			if (!is_string($callsign))
676
			{
677
				return false;
678
			} else {
679
				$translate = $Translation->ident2icao($callsign);
680
				if ($translate != $callsign) {
681
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
682
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
683
				} else {
684
					$additional_query .= " AND spotter_output.ident = :callsign";
685
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
686
				}
687
			}
688
		}
689
690
		if ($owner != "")
691
		{
692
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
693
			if (!is_string($owner))
694
			{
695
				return false;
696
			} else {
697
				$additional_query .= " AND spotter_output.owner_name = :owner";
698
				$query_values = array_merge($query_values,array(':owner' => $owner));
699
			}
700
		}
701
702
		if ($pilot_name != "")
703
		{
704
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
705
			if (!is_string($pilot_name))
706
			{
707
				return false;
708
			} else {
709
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
710
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
711
			}
712
		}
713
714
		if ($pilot_id != "")
715
		{
716
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
717
			if (!is_string($pilot_id))
718
			{
719
				return false;
720
			} else {
721
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
722
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
723
			}
724
		}
725
726
		if ($departure_airport_route != "")
727
		{
728
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
729
			if (!is_string($departure_airport_route))
730
			{
731
				return false;
732
			} else {
733
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
734
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
735
			}
736
		}
737
738
		if ($arrival_airport_route != "")
739
		{
740
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
741
			if (!is_string($arrival_airport_route))
742
			{
743
				return false;
744
			} else {
745
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
746
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
747
			}
748
		}
749
750
		if ($altitude != "")
751
		{
752
			$altitude_array = explode(",", $altitude);
753
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
754
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
755
756
			if ($altitude_array[1] != "")
757
			{                
758
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
759
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
760
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
761
			} else {
762
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
763
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
764
			}
765
		}
766
767
		if ($date_posted != "")
768
		{
769
			$date_array = explode(",", $date_posted);
770
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
771
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
772
773
			if ($globalTimezone != '') {
774
				date_default_timezone_set($globalTimezone);
775
				$datetime = new DateTime();
776
				$offset = $datetime->format('P');
777
			} else $offset = '+00:00';
778
779
			if ($date_array[1] != "")
780
			{
781
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
782
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
783
				if ($globalDBdriver == 'mysql') {
784
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) <= '".$date_array[1]."' ";
785
				} else {
786
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) <= '".$date_array[1]."' ";
787
				}
788
			} else {
789
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
790
				if ($globalDBdriver == 'mysql') {
791
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
792
				} else {
793
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
794
				}
795
			}
796
		}
797
798
		if ($limit != "")
799
		{
800
			$limit_array = explode(",", $limit);
801
			
802
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
803
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
804
			
805
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
806
			{
807
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
808
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
809
			} else $limit_query = "";
810
		} else $limit_query = "";
811
812
813
		if ($sort != "")
814
		{
815
			$search_orderby_array = $this->getOrderBy();
816
			$orderby_query = $search_orderby_array[$sort]['sql'];
817
		} else {
818
			if ($origLat != "" && $origLon != "" && $dist != "") {
819
				$orderby_query = " ORDER BY distance ASC";
820
			} else {
821
				$orderby_query = " ORDER BY spotter_output.date DESC";
822
			}
823
		}
824
825
		if ($includegeodata == "true")
826
		{
827
			$additional_query .= " AND spotter_output.waypoints <> ''";
828
		}
829
830
831
		if ($origLat != "" && $origLon != "" && $dist != "") {
832
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
833
834
			if ($globalDBdriver == 'mysql') {
835
				$query="SELECT spotter_output.*, 1.60935*3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - spotter_archive.latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(spotter_archive.latitude*pi()/180)*POWER(SIN(($origLon-spotter_archive.longitude)*pi()/180/2),2))) as distance 
836
						FROM spotter_archive,spotter_output".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND spotter_archive.longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and spotter_archive.latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
837
						AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - spotter_archive.latitude)*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(spotter_archive.latitude*pi()/180)*POWER(SIN(($origLon-spotter_archive.longitude)*pi()/180/2),2)))) < $dist".$orderby_query;
838
			} else {
839
				$query="SELECT spotter_output.*, 1.60935 * 3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(spotter_archive.latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(spotter_archive.latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2))) as distance 
840
						FROM spotter_archive,spotter_output".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND CAST(spotter_archive.longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(spotter_archive.latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
841
						AND (3956 * 2 * ASIN(SQRT( POWER(SIN(($origLat - CAST(spotter_archive.latitude as double precision))*pi()/180/2),2)+COS( $origLat *pi()/180)*COS(CAST(spotter_archive.latitude as double precision)*pi()/180)*POWER(SIN(($origLon-CAST(spotter_archive.longitude as double precision))*pi()/180/2),2)))) < $dist".$filter_query.$orderby_query;
842
			}
843
		} else {		
844
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
845
					".$additional_query."
846
					".$orderby_query;
847
		}
848
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
849
		return $spotter_array;
850
	}
851
	
852
	
853
	/**
854
	* Gets all the spotter information based on the latest data entry
855
	*
856
	* @return Array the spotter information
857
	*
858
	*/
859
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
860
	{
861
		global $global_query;
862
		
863
		date_default_timezone_set('UTC');
864
865
		$filter_query = $this->getFilter($filter);
866
		
867
		if ($limit != "")
868
		{
869
			$limit_array = explode(",", $limit);
870
			
871
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
872
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
873
			
874
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
875
			{
876
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
877
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
878
			} else $limit_query = "";
879
		} else $limit_query = "";
880
		
881
		if ($sort != "")
882
		{
883
			$search_orderby_array = $this->getOrderBy();
884
			$orderby_query = $search_orderby_array[$sort]['sql'];
885
		} else {
886
			$orderby_query = " ORDER BY spotter_output.date DESC";
887
		}
888
889
		$query  = $global_query.$filter_query." ".$orderby_query;
890
891
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
892
893
		return $spotter_array;
894
	}
895
    
896
    
897
    /**
898
	* Gets all the spotter information based on a user's latitude and longitude
899
	*
900
	* @return Array the spotter information
901
	*
902
	*/
903
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
904
	{
905
		date_default_timezone_set('UTC');
906
		$limit_query = '';
907
		if ($lat != "")
908
		{
909
			if (!is_numeric($lat))
910
			{
911
				return false;
912
			}
913
		}
914
        
915
		if ($lng != "")
916
		{
917
			if (!is_numeric($lng))
918
			{
919
				return false;
920
			}
921
		}
922
		
923
		if ($radius != "")
924
		{
925
			if (!is_numeric($radius))
926
			{
927
				return false;
928
			}
929
		}
930
    		$additional_query = '';
931
		if ($interval != "")
932
		{
933
			if (!is_string($interval))
934
			{
935
				return false;
936
			} else {
937
				if ($interval == "30m"){
938
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
939
				} else if ($interval == "1h"){
940
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
941
				} else if ($interval == "3h"){
942
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
943
				} else if ($interval == "6h"){
944
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
945
				} else if ($interval == "12h"){
946
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
947
				} else if ($interval == "24h"){
948
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
949
				} else if ($interval == "7d"){
950
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
951
				} else if ($interval == "30d"){
952
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
953
				} 
954
			}
955
		}
956
957
		$query  = "SELECT spotter_output.*, ( 6371 * acos( cos( radians($lat) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( latitude ) ) ) ) AS distance FROM spotter_output 
958
                   WHERE spotter_output.latitude <> '' 
959
				   AND spotter_output.longitude <> '' 
960
                   ".$additional_query."
961
                   HAVING distance < :radius  
962
				   ORDER BY distance";
963
964
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
965
966
		return $spotter_array;
967
	}
968
    
969
    
970
    /**
971
	* Gets all the spotter information sorted by the newest aircraft type
972
	*
973
	* @return Array the spotter information
974
	*
975
	*/
976
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
977
	{
978
		global $global_query;
979
		
980
		date_default_timezone_set('UTC');
981
982
		$filter_query = $this->getFilter($filter,true,true);
983
984
		$limit_query = '';
985
		if ($limit != "")
986
		{
987
			$limit_array = explode(",", $limit);
988
			
989
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
990
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
991
			
992
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
993
			{
994
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
995
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
996
			}
997
		}
998
		
999
		if ($sort != "")
1000
		{
1001
			$search_orderby_array = $this->getOrderBy();
1002
			$orderby_query = $search_orderby_array[$sort]['sql'];
1003
		} else {
1004
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1005
		}
1006
1007
		$query  = $global_query." ".$filter_query." spotter_output.aircraft_name <> '' GROUP BY spotter_output.aircraft_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1008
1009
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1010
1011
		return $spotter_array;
1012
	}
1013
    
1014
    
1015
	/**
1016
	* Gets all the spotter information sorted by the newest aircraft registration
1017
	*
1018
	* @return Array the spotter information
1019
	*
1020
	*/
1021
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
1022
	{
1023
		global $global_query;
1024
		
1025
		date_default_timezone_set('UTC');
1026
		$filter_query = $this->getFilter($filter,true,true);
1027
1028
		$limit_query = '';
1029
		if ($limit != "")
1030
		{
1031
			$limit_array = explode(",", $limit);
1032
			
1033
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1034
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1035
			
1036
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1037
			{
1038
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1039
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1040
			}
1041
		}
1042
		
1043
		if ($sort != "")
1044
		{
1045
			$search_orderby_array = $this->getOrderBy();
1046
			$orderby_query = $search_orderby_array[$sort]['sql'];
1047
		} else {
1048
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1049
		}
1050
1051
		$query  = $global_query." ".$filter_query." spotter_output.registration <> '' GROUP BY spotter_output.registration,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1052
1053
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1054
1055
		return $spotter_array;
1056
	}
1057
1058
1059
	/**
1060
	* Gets all the spotter information sorted by the newest airline
1061
	*
1062
	* @return Array the spotter information
1063
	*
1064
	*/
1065
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1066
	{
1067
		global $global_query;
1068
		
1069
		date_default_timezone_set('UTC');
1070
		$filter_query = $this->getFilter($filter,true,true);
1071
		
1072
		$limit_query = '';
1073
		if ($limit != "")
1074
		{
1075
			$limit_array = explode(",", $limit);
1076
			
1077
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1078
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1079
			
1080
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1081
			{
1082
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1083
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1084
			}
1085
		}
1086
		
1087
		if ($sort != "")
1088
		{
1089
			$search_orderby_array = $this->getOrderBy();
1090
			$orderby_query = $search_orderby_array[$sort]['sql'];
1091
		} else {
1092
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1093
		}
1094
1095
		$query  = $global_query." ".$filter_query." spotter_output.airline_name <> '' GROUP BY spotter_output.airline_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1096
1097
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1098
1099
		return $spotter_array;
1100
	}
1101
    
1102
    
1103
    /**
1104
	* Gets all the spotter information sorted by the newest departure airport
1105
	*
1106
	* @return Array the spotter information
1107
	*
1108
	*/
1109
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1110
	{
1111
		global $global_query;
1112
		
1113
		date_default_timezone_set('UTC');
1114
		
1115
		$filter_query = $this->getFilter($filter,true,true);
1116
		
1117
		$limit_query = '';
1118
		
1119
		if ($limit != "")
1120
		{
1121
			$limit_array = explode(",", $limit);
1122
			
1123
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1124
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1125
			
1126
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1127
			{
1128
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1129
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1130
			}
1131
		}
1132
		
1133
		if ($sort != "")
1134
		{
1135
			$search_orderby_array = $this->getOrderBy();
1136
			$orderby_query = $search_orderby_array[$sort]['sql'];
1137
		} else {
1138
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1139
		}
1140
1141
		$query  = $global_query." ".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' GROUP BY spotter_output.departure_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1142
1143
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1144
1145
		return $spotter_array;
1146
	}
1147
1148
1149
	/**
1150
	* Gets all the spotter information sorted by the newest arrival airport
1151
	*
1152
	* @return Array the spotter information
1153
	*
1154
	*/
1155
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1156
	{
1157
		global $global_query;
1158
		
1159
		date_default_timezone_set('UTC');
1160
		$filter_query = $this->getFilter($filter,true,true);
1161
		$limit_query = '';
1162
		if ($limit != "")
1163
		{
1164
			$limit_array = explode(",", $limit);
1165
			
1166
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1167
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1168
			
1169
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1170
			{
1171
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1172
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1173
			}
1174
		}
1175
		
1176
		if ($sort != "")
1177
		{
1178
			$search_orderby_array = $this->getOrderBy();
1179
			$orderby_query = $search_orderby_array[$sort]['sql'];
1180
		} else {
1181
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1182
		}
1183
1184
		$query  = $global_query.$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' GROUP BY spotter_output.arrival_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1185
1186
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1187
1188
		return $spotter_array;
1189
	}
1190
	
1191
1192
	/**
1193
	* Gets all the spotter information based on the spotter id
1194
	*
1195
	* @return Array the spotter information
1196
	*
1197
	*/
1198
	public function getSpotterDataByID($id = '')
1199
	{
1200
		global $global_query;
1201
		
1202
		date_default_timezone_set('UTC');
1203
		if ($id == '') return array();
1204
		$additional_query = "spotter_output.spotter_id = :id";
1205
		$query_values = array(':id' => $id);
1206
1207
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1208
		$query  = $global_query." WHERE ".$additional_query." ";
1209
1210
		$spotter_array = $this->getDataFromDB($query,$query_values);
1211
1212
		return $spotter_array;
1213
	}
1214
1215
	
1216
	
1217
	
1218
	/**
1219
	* Gets all the spotter information based on the callsign
1220
	*
1221
	* @return Array the spotter information
1222
	*
1223
	*/
1224
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1225
	{
1226
		global $global_query;
1227
		
1228
		date_default_timezone_set('UTC');
1229
		
1230
		$query_values = array();
1231
		$limit_query = '';
1232
		$additional_query = '';
1233
		if ($ident != "")
1234
		{
1235
			if (!is_string($ident))
1236
			{
1237
				return false;
1238
			} else {
1239
				$additional_query = " AND (spotter_output.ident = :ident)";
1240
				$query_values = array(':ident' => $ident);
1241
			}
1242
		}
1243
		
1244
		if ($limit != "")
1245
		{
1246
			$limit_array = explode(",", $limit);
1247
			
1248
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1249
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1250
			
1251
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1252
			{
1253
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1254
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1255
			}
1256
		}
1257
1258
		if ($sort != "")
1259
		{
1260
			$search_orderby_array = $this->getOrderBy();
1261
			$orderby_query = $search_orderby_array[$sort]['sql'];
1262
		} else {
1263
			$orderby_query = " ORDER BY spotter_output.date DESC";
1264
		}
1265
1266
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1267
1268
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1269
1270
		return $spotter_array;
1271
	}
1272
	
1273
	/**
1274
	* Gets all the spotter information based on the owner
1275
	*
1276
	* @return Array the spotter information
1277
	*
1278
	*/
1279
	public function getSpotterDataByOwner($owner = '', $limit = '', $sort = '')
1280
	{
1281
		global $global_query;
1282
		
1283
		date_default_timezone_set('UTC');
1284
		
1285
		$query_values = array();
1286
		$limit_query = '';
1287
		$additional_query = '';
1288
		if ($owner != "")
1289
		{
1290
			if (!is_string($owner))
1291
			{
1292
				return false;
1293
			} else {
1294
				$additional_query = " AND (spotter_output.owner_name = :owner)";
1295
				$query_values = array(':owner' => $owner);
1296
			}
1297
		}
1298
		
1299
		if ($limit != "")
1300
		{
1301
			$limit_array = explode(",", $limit);
1302
			
1303
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1304
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1305
			
1306
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1307
			{
1308
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1309
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1310
			}
1311
		}
1312
1313
		if ($sort != "")
1314
		{
1315
			$search_orderby_array = $this->getOrderBy();
1316
			$orderby_query = $search_orderby_array[$sort]['sql'];
1317
		} else {
1318
			$orderby_query = " ORDER BY spotter_output.date DESC";
1319
		}
1320
1321
		$query = $global_query." WHERE spotter_output.owner_name <> '' ".$additional_query." ".$orderby_query;
1322
1323
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1324
1325
		return $spotter_array;
1326
	}
1327
	
1328
	/**
1329
	* Gets all the spotter information based on the pilot
1330
	*
1331
	* @return Array the spotter information
1332
	*
1333
	*/
1334
	public function getSpotterDataByPilot($pilot = '', $limit = '', $sort = '')
1335
	{
1336
		global $global_query;
1337
		
1338
		date_default_timezone_set('UTC');
1339
		
1340
		$query_values = array();
1341
		$limit_query = '';
1342
		$additional_query = '';
1343
		if ($pilot != "")
1344
		{
1345
			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
?>