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

Spotter::countAllDetectedArrivalAirports()   C

Complexity

Conditions 8
Paths 54

Size

Total Lines 49
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 32
nc 54
nop 5
dl 0
loc 49
rs 6.1403
c 0
b 0
f 0
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
?>