Completed
Push — master ( da5902...5156bc )
by Yannick
10:30
created

Spotter::updateLatestSpotterData()   A

Complexity

Conditions 3
Paths 6

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

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

How to fix   Many Parameters   

Many Parameters

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

There are several approaches to avoid long parameter lists:

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