Completed
Push — master ( 9aeaea...0f3eb5 )
by Yannick
07:01
created

Spotter::countOverallArrival()   B

Complexity

Conditions 5
Paths 9

Size

Total Lines 30
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 23
nc 9
nop 3
dl 0
loc 30
rs 8.439
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(), $year = '', $month = '', $day = '')
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_values = array();
3824
		if ($year != '') {
3825
			if ($globalDBdriver == 'mysql') {
3826
				$query .= " AND YEAR(spotter_output.date) = :year";
3827
				$query_values = array_merge($query_values,array(':year' => $year));
3828
			} else {
3829
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
3830
				$query_values = array_merge($query_values,array(':year' => $year));
3831
			}
3832
		}
3833
		if ($month != '') {
3834
			if ($globalDBdriver == 'mysql') {
3835
				$query .= " AND MONTH(spotter_output.date) = :month";
3836
				$query_values = array_merge($query_values,array(':month' => $month));
3837
			} else {
3838
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
3839
				$query_values = array_merge($query_values,array(':month' => $month));
3840
			}
3841
		}
3842
		if ($day != '') {
3843
			if ($globalDBdriver == 'mysql') {
3844
				$query .= " AND DAY(spotter_output.date) = :day";
3845
				$query_values = array_merge($query_values,array(':day' => $day));
3846
			} else {
3847
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
3848
				$query_values = array_merge($query_values,array(':day' => $day));
3849
			}
3850
		}
3851
		$query .= " GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3852
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3853
3854
		$sth = $this->db->prepare($query);
3855
		$sth->execute($query_values);
3856
		$airline_array = array();
3857
		$temp_array = array();
3858
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3859
		{
3860
			$temp_array['airline_name'] = $row['airline_name'];
3861
			$temp_array['airline_icao'] = $row['airline_icao'];
3862
			$temp_array['airline_count'] = $row['airline_count'];
3863
			$temp_array['airline_country'] = $row['airline_country'];
3864
			$airline_array[] = $temp_array;
3865
		}
3866
		return $airline_array;
3867
	}
3868
3869
	 /**
3870
	* Gets all pilots that have flown over
3871
	*
3872
	* @return Array the pilots list
3873
	*
3874
	*/
3875
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '')
3876
	{
3877
		global $globalDBdriver;
3878
		$filter_query = $this->getFilter($filters,true,true);
3879
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
3880
		 			FROM spotter_output".$filter_query." spotter_output.pilot_id <> '' ";
3881
                if ($olderthanmonths > 0) {
3882
            		if ($globalDBdriver == 'mysql') {
3883
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3884
			} else {
3885
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3886
			}
3887
		}
3888
                if ($sincedate != '') {
3889
            		if ($globalDBdriver == 'mysql') {
3890
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3891
			} else {
3892
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3893
			}
3894
		}
3895
		$query_values = array();
3896
		if ($year != '') {
3897
			if ($globalDBdriver == 'mysql') {
3898
				$query .= " AND YEAR(spotter_output.date) = :year";
3899
				$query_values = array_merge($query_values,array(':year' => $year));
3900
			} else {
3901
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
3902
				$query_values = array_merge($query_values,array(':year' => $year));
3903
			}
3904
		}
3905
		if ($month != '') {
3906
			if ($globalDBdriver == 'mysql') {
3907
				$query .= " AND MONTH(spotter_output.date) = :month";
3908
				$query_values = array_merge($query_values,array(':month' => $month));
3909
			} else {
3910
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
3911
				$query_values = array_merge($query_values,array(':month' => $month));
3912
			}
3913
		}
3914
		if ($day != '') {
3915
			if ($globalDBdriver == 'mysql') {
3916
				$query .= " AND DAY(spotter_output.date) = :day";
3917
				$query_values = array_merge($query_values,array(':day' => $day));
0 ignored issues
show
Bug introduced by
The variable $day does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
3918
			} else {
3919
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
3920
				$query_values = array_merge($query_values,array(':day' => $day));
3921
			}
3922
		}
3923
		
3924
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
3925
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3926
      
3927
		
3928
		$sth = $this->db->prepare($query);
3929
		$sth->execute($query_values);
3930
		$airline_array = array();
3931
		$temp_array = array();
3932
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3933
		{
3934
			$temp_array['pilot_name'] = $row['pilot_name'];
3935
			$temp_array['pilot_id'] = $row['pilot_id'];
3936
			$temp_array['pilot_count'] = $row['pilot_count'];
3937
			$temp_array['format_source'] = $row['format_source'];
3938
			$airline_array[] = $temp_array;
3939
		}
3940
		return $airline_array;
3941
	}
3942
	
3943
	/**
3944
	* Gets all pilots that have flown over
3945
	*
3946
	* @return Array the pilots list
3947
	*
3948
	*/
3949
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
3950
	{
3951
		global $globalDBdriver;
3952
		$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
3953
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
3954
                if ($olderthanmonths > 0) {
3955
            		if ($globalDBdriver == 'mysql') {
3956
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3957
			} else {
3958
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3959
			}
3960
		}
3961
                if ($sincedate != '') {
3962
            		if ($globalDBdriver == 'mysql') {
3963
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3964
			} else {
3965
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3966
			}
3967
		}
3968
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
3969
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3970
      
3971
		
3972
		$sth = $this->db->prepare($query);
3973
		$sth->execute();
3974
      
3975
		$airline_array = array();
3976
		$temp_array = array();
3977
        
3978
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3979
		{
3980
			$temp_array['pilot_name'] = $row['pilot_name'];
3981
			$temp_array['pilot_id'] = $row['pilot_id'];
3982
			$temp_array['pilot_count'] = $row['pilot_count'];
3983
			$temp_array['airline_icao'] = $row['airline_icao'];
3984
			$temp_array['format_source'] = $row['format_source'];
3985
			$airline_array[] = $temp_array;
3986
		}
3987
		return $airline_array;
3988
	}
3989
	
3990
	 /**
3991
	* Gets all owner that have flown over
3992
	*
3993
	* @return Array the pilots list
3994
	*
3995
	*/
3996
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
3997
	{
3998
		global $globalDBdriver;
3999
		$filter_query = $this->getFilter($filters,true,true);
4000
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4001
					FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL";
4002
                if ($olderthanmonths > 0) {
4003
            		if ($globalDBdriver == 'mysql') {
4004
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4005
			} else {
4006
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4007
			}
4008
		}
4009
                if ($sincedate != '') {
4010
            		if ($globalDBdriver == 'mysql') {
4011
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4012
			} else {
4013
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4014
			}
4015
		}
4016
		$query_values = array();
4017
		if ($year != '') {
4018
			if ($globalDBdriver == 'mysql') {
4019
				$query .= " AND YEAR(spotter_output.date) = :year";
4020
				$query_values = array_merge($query_values,array(':year' => $year));
4021
			} else {
4022
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4023
				$query_values = array_merge($query_values,array(':year' => $year));
4024
			}
4025
		}
4026
		if ($month != '') {
4027
			if ($globalDBdriver == 'mysql') {
4028
				$query .= " AND MONTH(spotter_output.date) = :month";
4029
				$query_values = array_merge($query_values,array(':month' => $month));
4030
			} else {
4031
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4032
				$query_values = array_merge($query_values,array(':month' => $month));
4033
			}
4034
		}
4035
		if ($day != '') {
4036
			if ($globalDBdriver == 'mysql') {
4037
				$query .= " AND DAY(spotter_output.date) = :day";
4038
				$query_values = array_merge($query_values,array(':day' => $day));
4039
			} else {
4040
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4041
				$query_values = array_merge($query_values,array(':day' => $day));
4042
			}
4043
		}
4044
		$query .= " GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
4045
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4046
		
4047
		$sth = $this->db->prepare($query);
4048
		$sth->execute($query_values);
4049
		$airline_array = array();
4050
		$temp_array = array();
4051
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4052
		{
4053
			$temp_array['owner_name'] = $row['owner_name'];
4054
			$temp_array['owner_count'] = $row['owner_count'];
4055
			$airline_array[] = $temp_array;
4056
		}
4057
		return $airline_array;
4058
	}
4059
	
4060
	 /**
4061
	* Gets all owner that have flown over
4062
	*
4063
	* @return Array the pilots list
4064
	*
4065
	*/
4066
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
4067
	{
4068
		global $globalDBdriver;
4069
		$filter_query = $this->getFilter($filters,true,true);
4070
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
4071
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
4072
                if ($olderthanmonths > 0) {
4073
            		if ($globalDBdriver == 'mysql') {
4074
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4075
			} else {
4076
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4077
			}
4078
		}
4079
                if ($sincedate != '') {
4080
            		if ($globalDBdriver == 'mysql') {
4081
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4082
			} else {
4083
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4084
			}
4085
		}
4086
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
4087
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4088
      
4089
		
4090
		$sth = $this->db->prepare($query);
4091
		$sth->execute();
4092
      
4093
		$airline_array = array();
4094
		$temp_array = array();
4095
        
4096
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4097
		{
4098
			$temp_array['owner_name'] = $row['owner_name'];
4099
			$temp_array['owner_count'] = $row['owner_count'];
4100
			$temp_array['airline_icao'] = $row['airline_icao'];
4101
			$airline_array[] = $temp_array;
4102
		}
4103
		return $airline_array;
4104
	}
4105
4106
	/**
4107
	* Gets all airlines that have flown over by aircraft
4108
	*
4109
	* @return Array the airline list
4110
	*
4111
	*/
4112
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
4113
	{
4114
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4115
		$filter_query = $this->getFilter($filters,true,true);
4116
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4117
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
4118
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4119
			    ORDER BY airline_count DESC";
4120
      
4121
		
4122
		$sth = $this->db->prepare($query);
4123
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4124
      
4125
		$airline_array = array();
4126
		$temp_array = array();
4127
        
4128
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4129
		{
4130
			$temp_array['airline_name'] = $row['airline_name'];
4131
			$temp_array['airline_icao'] = $row['airline_icao'];
4132
			$temp_array['airline_count'] = $row['airline_count'];
4133
			$temp_array['airline_country'] = $row['airline_country'];
4134
4135
			$airline_array[] = $temp_array;
4136
		}
4137
4138
		return $airline_array;
4139
	}
4140
4141
4142
	/**
4143
	* Gets all airline countries that have flown over by aircraft
4144
	*
4145
	* @return Array the airline country list
4146
	*
4147
	*/
4148
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
4149
	{
4150
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4151
		$filter_query = $this->getFilter($filters,true,true);
4152
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4153
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
4154
                    GROUP BY spotter_output.airline_country
4155
					ORDER BY airline_country_count DESC
4156
					LIMIT 10 OFFSET 0";
4157
      
4158
		
4159
		$sth = $this->db->prepare($query);
4160
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4161
      
4162
		$airline_country_array = array();
4163
		$temp_array = array();
4164
        
4165
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4166
		{
4167
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4168
			$temp_array['airline_country'] = $row['airline_country'];
4169
 
4170
			$airline_country_array[] = $temp_array;
4171
		}
4172
		return $airline_country_array;
4173
	}
4174
4175
4176
	
4177
	
4178
	/**
4179
	* Gets all airlines that have flown over by airport
4180
	*
4181
	* @return Array the airline list
4182
	*
4183
	*/
4184
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
4185
	{
4186
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4187
		$filter_query = $this->getFilter($filters,true,true);
4188
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4189
		    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 ) 
4190
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
4191
		    ORDER BY airline_count DESC";
4192
      
4193
		
4194
		$sth = $this->db->prepare($query);
4195
		$sth->execute(array(':airport_icao' => $airport_icao));
4196
      
4197
		$airline_array = array();
4198
		$temp_array = array();
4199
        
4200
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4201
		{
4202
			$temp_array['airline_name'] = $row['airline_name'];
4203
			$temp_array['airline_icao'] = $row['airline_icao'];
4204
			$temp_array['airline_count'] = $row['airline_count'];
4205
			$temp_array['airline_country'] = $row['airline_country'];
4206
4207
			$airline_array[] = $temp_array;
4208
		}
4209
		return $airline_array;
4210
	}
4211
4212
4213
	/**
4214
	* Gets all airline countries that have flown over by airport icao
4215
	*
4216
	* @return Array the airline country list
4217
	*
4218
	*/
4219
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4220
	{
4221
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4222
		$filter_query = $this->getFilter($filters,true,true);
4223
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4224
		 			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 )
4225
					GROUP BY spotter_output.airline_country
4226
					ORDER BY airline_country_count DESC
4227
					LIMIT 10 OFFSET 0";
4228
4229
		
4230
		$sth = $this->db->prepare($query);
4231
		$sth->execute(array(':airport_icao' => $airport_icao));
4232
4233
		$airline_country_array = array();
4234
		$temp_array = array();
4235
        
4236
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4237
		{
4238
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4239
			$temp_array['airline_country'] = $row['airline_country'];
4240
 
4241
			$airline_country_array[] = $temp_array;
4242
		}
4243
		return $airline_country_array;
4244
	}
4245
4246
4247
	/**
4248
	* Gets all airlines that have flown over by aircraft manufacturer
4249
	*
4250
	* @return Array the airline list
4251
	*
4252
	*/
4253
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4254
	{
4255
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4256
		$filter_query = $this->getFilter($filters,true,true);
4257
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4258
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4259
					GROUP BY spotter_output.airline_name
4260
					ORDER BY airline_count DESC";
4261
 
4262
		$sth = $this->db->prepare($query);
4263
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4264
 
4265
		$airline_array = array();
4266
		$temp_array = array();
4267
        
4268
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4269
		{
4270
			$temp_array['airline_name'] = $row['airline_name'];
4271
			$temp_array['airline_icao'] = $row['airline_icao'];
4272
			$temp_array['airline_count'] = $row['airline_count'];
4273
			$temp_array['airline_country'] = $row['airline_country'];
4274
4275
			$airline_array[] = $temp_array;
4276
		}
4277
		return $airline_array;
4278
	}
4279
4280
4281
4282
	/**
4283
	* Gets all airline countries that have flown over by aircraft manufacturer
4284
	*
4285
	* @return Array the airline country list
4286
	*
4287
	*/
4288
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4289
	{
4290
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4291
		$filter_query = $this->getFilter($filters,true,true);
4292
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4293
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4294
					GROUP BY spotter_output.airline_country
4295
					ORDER BY airline_country_count DESC
4296
					LIMIT 10 OFFSET 0";
4297
      
4298
		
4299
		$sth = $this->db->prepare($query);
4300
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4301
4302
		$airline_country_array = array();
4303
		$temp_array = array();
4304
        
4305
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4306
		{
4307
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4308
			$temp_array['airline_country'] = $row['airline_country'];
4309
			$airline_country_array[] = $temp_array;
4310
		}
4311
		return $airline_country_array;
4312
	}
4313
4314
4315
	/**
4316
	* Gets all airlines that have flown over by date
4317
	*
4318
	* @return Array the airline list
4319
	*
4320
	*/
4321
	public function countAllAirlinesByDate($date,$filters = array())
4322
	{
4323
		global $globalTimezone, $globalDBdriver;
4324
		$filter_query = $this->getFilter($filters,true,true);
4325
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4326
		if ($globalTimezone != '') {
4327
			date_default_timezone_set($globalTimezone);
4328
			$datetime = new DateTime($date);
4329
			$offset = $datetime->format('P');
4330
		} else $offset = '+00:00';
4331
4332
		if ($globalDBdriver == 'mysql') {
4333
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4334
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4335
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4336
					ORDER BY airline_count DESC";
4337
		} else {
4338
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4339
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4340
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4341
					ORDER BY airline_count DESC";
4342
		}
4343
		
4344
		$sth = $this->db->prepare($query);
4345
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4346
4347
		$airline_array = array();
4348
		$temp_array = array();
4349
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4350
		{
4351
			$temp_array['airline_name'] = $row['airline_name'];
4352
			$temp_array['airline_icao'] = $row['airline_icao'];
4353
			$temp_array['airline_count'] = $row['airline_count'];
4354
			$temp_array['airline_country'] = $row['airline_country'];
4355
 
4356
			$airline_array[] = $temp_array;
4357
		}
4358
4359
		return $airline_array;
4360
	}	
4361
	
4362
	
4363
	/**
4364
	* Gets all airline countries that have flown over by date
4365
	*
4366
	* @return Array the airline country list
4367
	*
4368
	*/
4369
	public function countAllAirlineCountriesByDate($date,$filters = array())
4370
	{
4371
		global $globalTimezone, $globalDBdriver;
4372
		$filter_query = $this->getFilter($filters,true,true);
4373
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4374
		if ($globalTimezone != '') {
4375
			date_default_timezone_set($globalTimezone);
4376
			$datetime = new DateTime($date);
4377
			$offset = $datetime->format('P');
4378
		} else $offset = '+00:00';
4379
		
4380
		if ($globalDBdriver == 'mysql') {
4381
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4382
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4383
					GROUP BY spotter_output.airline_country
4384
					ORDER BY airline_country_count DESC
4385
					LIMIT 10 OFFSET 0";
4386
		} else {
4387
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4388
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4389
					GROUP BY spotter_output.airline_country
4390
					ORDER BY airline_country_count DESC
4391
					LIMIT 10 OFFSET 0";
4392
		}
4393
4394
		$sth = $this->db->prepare($query);
4395
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4396
 
4397
		$airline_country_array = array();
4398
		$temp_array = array();
4399
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4400
		{
4401
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4402
			$temp_array['airline_country'] = $row['airline_country'];
4403
4404
			$airline_country_array[] = $temp_array;
4405
		}
4406
		return $airline_country_array;
4407
	}
4408
4409
4410
	/**
4411
	* Gets all airlines that have flown over by ident/callsign
4412
	*
4413
	* @return Array the airline list
4414
	*
4415
	*/
4416
	public function countAllAirlinesByIdent($ident,$filters = array())
4417
	{
4418
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4419
		$filter_query = $this->getFilter($filters,true,true);
4420
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4421
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4422
				GROUP BY spotter_output.airline_name
4423
				ORDER BY airline_count DESC";
4424
      
4425
		
4426
		$sth = $this->db->prepare($query);
4427
		$sth->execute(array(':ident' => $ident));
4428
      
4429
		$airline_array = array();
4430
		$temp_array = array();
4431
        
4432
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4433
		{
4434
			$temp_array['airline_name'] = $row['airline_name'];
4435
			$temp_array['airline_icao'] = $row['airline_icao'];
4436
			$temp_array['airline_count'] = $row['airline_count'];
4437
			$temp_array['airline_country'] = $row['airline_country'];
4438
4439
			$airline_array[] = $temp_array;
4440
		}
4441
		return $airline_array;
4442
	}
4443
4444
	/**
4445
	* Gets all airlines that have flown over by route
4446
	*
4447
	* @return Array the airline list
4448
	*
4449
	*/
4450
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4451
	{
4452
		$filter_query = $this->getFilter($filters,true,true);
4453
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4454
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4455
4456
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4457
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4458
					GROUP BY spotter_output.airline_name
4459
					ORDER BY airline_count DESC";
4460
      
4461
		
4462
		$sth = $this->db->prepare($query);
4463
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4464
      
4465
		$airline_array = array();
4466
		$temp_array = array();
4467
        
4468
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4469
		{
4470
			$temp_array['airline_name'] = $row['airline_name'];
4471
			$temp_array['airline_icao'] = $row['airline_icao'];
4472
			$temp_array['airline_count'] = $row['airline_count'];
4473
			$temp_array['airline_country'] = $row['airline_country'];
4474
4475
			$airline_array[] = $temp_array;
4476
		}
4477
		return $airline_array;
4478
	}
4479
4480
	/**
4481
	* Gets all airline countries that have flown over by route
4482
	*
4483
	* @return Array the airline country list
4484
	*
4485
	*/
4486
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4487
	{
4488
		$filter_query = $this->getFilter($filters,true,true);
4489
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4490
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4491
      
4492
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4493
		 		FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4494
				GROUP BY spotter_output.airline_country
4495
				ORDER BY airline_country_count DESC
4496
				LIMIT 10 OFFSET 0";
4497
      
4498
		
4499
		$sth = $this->db->prepare($query);
4500
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4501
      
4502
		$airline_country_array = array();
4503
		$temp_array = array();
4504
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4505
		{
4506
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4507
			$temp_array['airline_country'] = $row['airline_country'];
4508
4509
			$airline_country_array[] = $temp_array;
4510
		}
4511
4512
		return $airline_country_array;
4513
	}
4514
4515
4516
	/**
4517
	* Gets all airlines that have flown over by country
4518
	*
4519
	* @return Array the airline list
4520
	*
4521
	*/
4522
	public function countAllAirlinesByCountry($country,$filters = array())
4523
	{
4524
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4525
		$filter_query = $this->getFilter($filters,true,true);
4526
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4527
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4528
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4529
			    ORDER BY airline_count DESC";
4530
      
4531
		
4532
		$sth = $this->db->prepare($query);
4533
		$sth->execute(array(':country' => $country));
4534
4535
		$airline_array = array();
4536
		$temp_array = array();
4537
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4538
		{
4539
			$temp_array['airline_name'] = $row['airline_name'];
4540
			$temp_array['airline_icao'] = $row['airline_icao'];
4541
			$temp_array['airline_count'] = $row['airline_count'];
4542
			$temp_array['airline_country'] = $row['airline_country'];
4543
 
4544
			$airline_array[] = $temp_array;
4545
		}
4546
		return $airline_array;
4547
	}
4548
4549
4550
	/**
4551
	* Gets all airline countries that have flown over by country
4552
	*
4553
	* @return Array the airline country list
4554
	*
4555
	*/
4556
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4557
	{
4558
		$filter_query = $this->getFilter($filters,true,true);
4559
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4560
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4561
		 		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 
4562
				GROUP BY spotter_output.airline_country
4563
				ORDER BY airline_country_count DESC
4564
				LIMIT 10 OFFSET 0";
4565
      
4566
		
4567
		$sth = $this->db->prepare($query);
4568
		$sth->execute(array(':country' => $country));
4569
4570
		$airline_country_array = array();
4571
		$temp_array = array();
4572
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4573
		{
4574
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4575
			$temp_array['airline_country'] = $row['airline_country'];
4576
4577
			$airline_country_array[] = $temp_array;
4578
		}
4579
		return $airline_country_array;
4580
	}
4581
4582
4583
	/**
4584
	* Gets all airlines countries
4585
	*
4586
	* @return Array the airline country list
4587
	*
4588
	*/
4589
	public function countAllAirlineCountries($limit = true, $filters = array(), $year = '', $month = '', $day = '')
4590
	{
4591
		global $globalDBdriver;
4592
		$filter_query = $this->getFilter($filters,true,true);
4593
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4594
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA'";
4595
		$query_values = array();
4596
		if ($year != '') {
4597
			if ($globalDBdriver == 'mysql') {
4598
				$query .= " AND YEAR(spotter_output.date) = :year";
4599
				$query_values = array_merge($query_values,array(':year' => $year));
4600
			} else {
4601
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4602
				$query_values = array_merge($query_values,array(':year' => $year));
4603
			}
4604
		}
4605
		if ($month != '') {
4606
			if ($globalDBdriver == 'mysql') {
4607
				$query .= " AND MONTH(spotter_output.date) = :month";
4608
				$query_values = array_merge($query_values,array(':month' => $month));
4609
			} else {
4610
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4611
				$query_values = array_merge($query_values,array(':month' => $month));
4612
			}
4613
		}
4614
		if ($day != '') {
4615
			if ($globalDBdriver == 'mysql') {
4616
				$query .= " AND DAY(spotter_output.date) = :day";
4617
				$query_values = array_merge($query_values,array(':day' => $day));
4618
			} else {
4619
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4620
				$query_values = array_merge($query_values,array(':day' => $day));
4621
			}
4622
		}
4623
		$query .= " GROUP BY spotter_output.airline_country
4624
					ORDER BY airline_country_count DESC";
4625
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4626
      
4627
		$sth = $this->db->prepare($query);
4628
		$sth->execute($query_values);
4629
4630
		$airline_array = array();
4631
		$temp_array = array();
4632
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4633
		{
4634
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4635
			$temp_array['airline_country'] = $row['airline_country'];
4636
4637
			$airline_array[] = $temp_array;
4638
		}
4639
		return $airline_array;
4640
	}
4641
4642
	/**
4643
	* Gets all number of flight over countries
4644
	*
4645
	* @return Array the airline country list
4646
	*
4647
	*/
4648
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4649
	{
4650
		global $globalDBdriver;
4651
		//$filter_query = $this->getFilter($filters,true,true);
4652
		$Connection= new Connection($this->db);
4653
		if (!$Connection->tableExists('countries')) return array();
4654
		/*
4655
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4656
					FROM countries c, spotter_output s
4657
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4658
		*/
4659
/*
4660
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4661
					FROM countries c, spotter_live s
4662
					WHERE c.iso2 = s.over_country ";
4663
		$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 ";
4664
*/
4665
		require_once('class.SpotterLive.php');
4666
		$SpotterLive = new SpotterLive();
4667
		$filter_query = $SpotterLive->getFilter($filters,true,true);
4668
		$filter_query .= ' over_country IS NOT NULL';
4669
                if ($olderthanmonths > 0) {
4670
			if ($globalDBdriver == 'mysql') {
4671
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4672
			} else {
4673
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4674
			}
4675
		}
4676
                if ($sincedate != '') {
4677
            		if ($globalDBdriver == 'mysql') {
4678
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
4679
			} else {
4680
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
4681
			}
4682
		}
4683
		$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 ";
4684
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
4685
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4686
      
4687
		
4688
		$sth = $this->db->prepare($query);
4689
		$sth->execute();
4690
 
4691
		$flight_array = array();
4692
		$temp_array = array();
4693
        
4694
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4695
		{
4696
			$temp_array['flight_count'] = $row['nb'];
4697
			$temp_array['flight_country'] = $row['name'];
4698
			$temp_array['flight_country_iso3'] = $row['iso3'];
4699
			$temp_array['flight_country_iso2'] = $row['iso2'];
4700
			$flight_array[] = $temp_array;
4701
		}
4702
		return $flight_array;
4703
	}
4704
	
4705
	
4706
	/**
4707
	* Gets all aircraft types that have flown over
4708
	*
4709
	* @return Array the aircraft list
4710
	*
4711
	*/
4712
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
4713
	{
4714
		global $globalDBdriver;
4715
		$filter_query = $this->getFilter($filters,true,true);
4716
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4717
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
4718
		if ($olderthanmonths > 0) {
4719
			if ($globalDBdriver == 'mysql') {
4720
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4721
			} else {
4722
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4723
			}
4724
		}
4725
		if ($sincedate != '') {
4726
			if ($globalDBdriver == 'mysql') {
4727
				$query .= " AND spotter_output.date > '".$sincedate."'";
4728
			} else {
4729
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4730
			}
4731
		}
4732
		$query_values = array();
4733
		if ($year != '') {
4734
			if ($globalDBdriver == 'mysql') {
4735
				$query .= " AND YEAR(spotter_output.date) = :year";
4736
				$query_values = array_merge($query_values,array(':year' => $year));
4737
			} else {
4738
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4739
				$query_values = array_merge($query_values,array(':year' => $year));
4740
			}
4741
		}
4742
		if ($month != '') {
4743
			if ($globalDBdriver == 'mysql') {
4744
				$query .= " AND MONTH(spotter_output.date) = :month";
4745
				$query_values = array_merge($query_values,array(':month' => $month));
4746
			} else {
4747
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4748
				$query_values = array_merge($query_values,array(':month' => $month));
4749
			}
4750
		}
4751
		if ($day != '') {
4752
			if ($globalDBdriver == 'mysql') {
4753
				$query .= " AND DAY(spotter_output.date) = :day";
4754
				$query_values = array_merge($query_values,array(':day' => $day));
4755
			} else {
4756
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4757
				$query_values = array_merge($query_values,array(':day' => $day));
4758
			}
4759
		}
4760
4761
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4762
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4763
 
4764
		$sth = $this->db->prepare($query);
4765
		$sth->execute($query_values);
4766
4767
		$aircraft_array = array();
4768
		$temp_array = array();
4769
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4770
		{
4771
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4772
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4773
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4774
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4775
			$aircraft_array[] = $temp_array;
4776
		}
4777
		return $aircraft_array;
4778
	}
4779
4780
	/**
4781
	* Gets all aircraft types that have flown over by airline
4782
	*
4783
	* @return Array the aircraft list
4784
	*
4785
	*/
4786
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '',$month = '', $day = '')
4787
	{
4788
		global $globalDBdriver;
4789
		$filter_query = $this->getFilter($filters,true,true);
4790
		$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 
4791
		    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' ";
4792
		if ($olderthanmonths > 0) {
4793
			if ($globalDBdriver == 'mysql') {
4794
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4795
			} else {
4796
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4797
			}
4798
		}
4799
		if ($sincedate != '') {
4800
			if ($globalDBdriver == 'mysql') {
4801
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4802
			} else {
4803
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4804
			}
4805
		}
4806
		$query_values = array();
4807
		if ($year != '') {
4808
			if ($globalDBdriver == 'mysql') {
4809
				$query .= " AND YEAR(spotter_output.date) = :year";
4810
				$query_values = array_merge($query_values,array(':year' => $year));
4811
			} else {
4812
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
4813
				$query_values = array_merge($query_values,array(':year' => $year));
4814
			}
4815
		}
4816
		if ($month != '') {
4817
			if ($globalDBdriver == 'mysql') {
4818
				$query .= " AND MONTH(spotter_output.date) = :month";
4819
				$query_values = array_merge($query_values,array(':month' => $month));
4820
			} else {
4821
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
4822
				$query_values = array_merge($query_values,array(':month' => $month));
4823
			}
4824
		}
4825
		if ($day != '') {
4826
			if ($globalDBdriver == 'mysql') {
4827
				$query .= " AND DAY(spotter_output.date) = :day";
4828
				$query_values = array_merge($query_values,array(':day' => $day));
4829
			} else {
4830
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
4831
				$query_values = array_merge($query_values,array(':day' => $day));
4832
			}
4833
		}
4834
4835
		$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";
4836
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4837
 
4838
		$sth = $this->db->prepare($query);
4839
		$sth->execute($query_values);
4840
4841
		$aircraft_array = array();
4842
		$temp_array = array();
4843
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4844
		{
4845
			$temp_array['airline_icao'] = $row['airline_icao'];
4846
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4847
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4848
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4849
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4850
			$aircraft_array[] = $temp_array;
4851
		}
4852
		return $aircraft_array;
4853
	}
4854
4855
	/**
4856
	* Gets all aircraft types that have flown over by months
4857
	*
4858
	* @return Array the aircraft list
4859
	*
4860
	*/
4861
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4862
	{
4863
		global $globalDBdriver;
4864
		$filter_query = $this->getFilter($filters,true,true);
4865
		$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 
4866
		    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' ";
4867
		if ($olderthanmonths > 0) {
4868
			if ($globalDBdriver == 'mysql') {
4869
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4870
			} else {
4871
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4872
			}
4873
		}
4874
		if ($sincedate != '') {
4875
			if ($globalDBdriver == 'mysql') {
4876
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4877
			} else {
4878
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4879
			}
4880
		}
4881
4882
		$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";
4883
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4884
 
4885
		$sth = $this->db->prepare($query);
4886
		$sth->execute();
4887
4888
		$aircraft_array = array();
4889
		$temp_array = array();
4890
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4891
		{
4892
			//$temp_array['airline_icao'] = $row['airline_icao'];
4893
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4894
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4895
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4896
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4897
			$aircraft_array[] = $temp_array;
4898
		}
4899
		return $aircraft_array;
4900
	}
4901
4902
4903
	/**
4904
	* Gets all aircraft registration that have flown over by aircaft icao
4905
	*
4906
	* @return Array the aircraft list
4907
	*
4908
	*/
4909
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
4910
	{
4911
		$Image = new Image($this->db);
4912
		$filter_query = $this->getFilter($filters,true,true);
4913
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4914
4915
		$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  
4916
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
4917
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
4918
				ORDER BY registration_count DESC";
4919
4920
		$sth = $this->db->prepare($query);
4921
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4922
4923
		$aircraft_array = array();
4924
		$temp_array = array();
4925
        
4926
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4927
		{
4928
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4929
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4930
			$temp_array['registration'] = $row['registration'];
4931
			$temp_array['airline_name'] = $row['airline_name'];
4932
			$temp_array['image_thumbnail'] = "";
4933
			if($row['registration'] != "")
4934
			{
4935
				$image_array = $Image->getSpotterImage($row['registration']);
4936
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4937
			}
4938
			$temp_array['registration_count'] = $row['registration_count'];
4939
4940
			$aircraft_array[] = $temp_array;
4941
		}
4942
		return $aircraft_array;
4943
	}
4944
4945
4946
	/**
4947
	* Gets all aircraft types that have flown over by airline icao
4948
	*
4949
	* @return Array the aircraft list
4950
	*
4951
	*/
4952
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
4953
	{
4954
		$filter_query = $this->getFilter($filters,true,true);
4955
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4956
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4957
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
4958
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4959
			    ORDER BY aircraft_icao_count DESC";
4960
4961
		$sth = $this->db->prepare($query);
4962
		$sth->execute(array(':airline_icao' => $airline_icao));
4963
4964
		$aircraft_array = array();
4965
		$temp_array = array();
4966
4967
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4968
		{
4969
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4970
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4971
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4972
4973
			$aircraft_array[] = $temp_array;
4974
		}
4975
		return $aircraft_array;
4976
	}
4977
4978
4979
	/**
4980
	* Gets all aircraft registration that have flown over by airline icao
4981
	*
4982
	* @return Array the aircraft list
4983
	*
4984
	*/
4985
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
4986
	{
4987
		$filter_query = $this->getFilter($filters,true,true);
4988
		$Image = new Image($this->db);
4989
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4990
4991
		$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 
4992
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
4993
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
4994
			    ORDER BY registration_count DESC";
4995
4996
		$sth = $this->db->prepare($query);
4997
		$sth->execute(array(':airline_icao' => $airline_icao));
4998
4999
		$aircraft_array = array();
5000
		$temp_array = array();
5001
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5002
		{
5003
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5004
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5005
			$temp_array['registration'] = $row['registration'];
5006
			$temp_array['airline_name'] = $row['airline_name'];
5007
			$temp_array['image_thumbnail'] = "";
5008
			if($row['registration'] != "")
5009
			{
5010
				$image_array = $Image->getSpotterImage($row['registration']);
5011
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5012
			}
5013
			$temp_array['registration_count'] = $row['registration_count'];
5014
5015
			$aircraft_array[] = $temp_array;
5016
		}
5017
		return $aircraft_array;
5018
	}
5019
5020
5021
	/**
5022
	* Gets all aircraft manufacturer that have flown over by airline icao
5023
	*
5024
	* @return Array the aircraft list
5025
	*
5026
	*/
5027
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
5028
	{
5029
		$filter_query = $this->getFilter($filters,true,true);
5030
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5031
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5032
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
5033
				GROUP BY spotter_output.aircraft_manufacturer 
5034
				ORDER BY aircraft_manufacturer_count DESC";
5035
5036
		$sth = $this->db->prepare($query);
5037
		$sth->execute(array(':airline_icao' => $airline_icao));
5038
5039
		$aircraft_array = array();
5040
		$temp_array = array();
5041
5042
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5043
		{
5044
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5045
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5046
5047
			$aircraft_array[] = $temp_array;
5048
		}
5049
		return $aircraft_array;
5050
	}
5051
5052
5053
	/**
5054
	* Gets all aircraft types that have flown over by airline icao
5055
	*
5056
	* @return Array the aircraft list
5057
	*
5058
	*/
5059
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
5060
	{
5061
		$filter_query = $this->getFilter($filters,true,true);
5062
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5063
5064
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5065
				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) 
5066
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5067
				ORDER BY aircraft_icao_count DESC";
5068
 
5069
		$sth = $this->db->prepare($query);
5070
		$sth->execute(array(':airport_icao' => $airport_icao));
5071
5072
		$aircraft_array = array();
5073
		$temp_array = array();
5074
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5075
		{
5076
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5077
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5078
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5079
5080
			$aircraft_array[] = $temp_array;
5081
		}
5082
		return $aircraft_array;
5083
	}
5084
5085
5086
	/**
5087
	* Gets all aircraft registration that have flown over by airport icao
5088
	*
5089
	* @return Array the aircraft list
5090
	*
5091
	*/
5092
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
5093
	{
5094
		$filter_query = $this->getFilter($filters,true,true);
5095
		$Image = new Image($this->db);
5096
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5097
5098
		$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  
5099
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
5100
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5101
		    ORDER BY registration_count DESC";
5102
5103
		$sth = $this->db->prepare($query);
5104
		$sth->execute(array(':airport_icao' => $airport_icao));
5105
5106
		$aircraft_array = array();
5107
		$temp_array = array();
5108
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5109
		{
5110
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5111
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5112
			$temp_array['registration'] = $row['registration'];
5113
			$temp_array['airline_name'] = $row['airline_name'];
5114
			$temp_array['image_thumbnail'] = "";
5115
			if($row['registration'] != "")
5116
			{
5117
				$image_array = $Image->getSpotterImage($row['registration']);
5118
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5119
			}
5120
			$temp_array['registration_count'] = $row['registration_count'];
5121
			$aircraft_array[] = $temp_array;
5122
		}
5123
		return $aircraft_array;
5124
	}
5125
	
5126
	
5127
	/**
5128
	* Gets all aircraft manufacturer that have flown over by airport icao
5129
	*
5130
	* @return Array the aircraft list
5131
	*
5132
	*/
5133
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
5134
	{
5135
		$filter_query = $this->getFilter($filters,true,true);
5136
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
5137
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5138
                    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)  
5139
                    GROUP BY spotter_output.aircraft_manufacturer 
5140
					ORDER BY aircraft_manufacturer_count DESC";
5141
5142
		
5143
		$sth = $this->db->prepare($query);
5144
		$sth->execute(array(':airport_icao' => $airport_icao));
5145
5146
		$aircraft_array = array();
5147
		$temp_array = array();
5148
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5149
		{
5150
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5151
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5152
			$aircraft_array[] = $temp_array;
5153
		}
5154
		return $aircraft_array;
5155
	}
5156
5157
	/**
5158
	* Gets all aircraft types that have flown over by aircraft manufacturer
5159
	*
5160
	* @return Array the aircraft list
5161
	*
5162
	*/
5163
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
5164
	{
5165
		$filter_query = $this->getFilter($filters,true,true);
5166
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5167
5168
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5169
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
5170
                    GROUP BY spotter_output.aircraft_name 
5171
					ORDER BY aircraft_icao_count DESC";
5172
5173
		$sth = $this->db->prepare($query);
5174
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5175
		$aircraft_array = array();
5176
		$temp_array = array();
5177
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5178
		{
5179
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5180
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5181
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5182
			$aircraft_array[] = $temp_array;
5183
		}
5184
		return $aircraft_array;
5185
	}
5186
5187
5188
	/**
5189
	* Gets all aircraft registration that have flown over by aircaft manufacturer
5190
	*
5191
	* @return Array the aircraft list
5192
	*
5193
	*/
5194
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
5195
	{
5196
		$filter_query = $this->getFilter($filters,true,true);
5197
		$Image = new Image($this->db);
5198
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
5199
5200
		$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   
5201
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
5202
                    GROUP BY spotter_output.registration 
5203
					ORDER BY registration_count DESC";
5204
5205
		
5206
		$sth = $this->db->prepare($query);
5207
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
5208
		$aircraft_array = array();
5209
		$temp_array = array();
5210
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5211
		{
5212
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5213
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5214
			$temp_array['registration'] = $row['registration'];
5215
			$temp_array['airline_name'] = $row['airline_name'];
5216
			$temp_array['image_thumbnail'] = "";
5217
			if($row['registration'] != "")
5218
			{
5219
				$image_array = $Image->getSpotterImage($row['registration']);
5220
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5221
			}
5222
			$temp_array['registration_count'] = $row['registration_count'];
5223
			$aircraft_array[] = $temp_array;
5224
		}
5225
		return $aircraft_array;
5226
	}
5227
5228
	/**
5229
	* Gets all aircraft types that have flown over by date
5230
	*
5231
	* @return Array the aircraft list
5232
	*
5233
	*/
5234
	public function countAllAircraftTypesByDate($date,$filters = array())
5235
	{
5236
		global $globalTimezone, $globalDBdriver;
5237
		$filter_query = $this->getFilter($filters,true,true);
5238
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5239
		if ($globalTimezone != '') {
5240
			date_default_timezone_set($globalTimezone);
5241
			$datetime = new DateTime($date);
5242
			$offset = $datetime->format('P');
5243
		} else $offset = '+00:00';
5244
5245
		if ($globalDBdriver == 'mysql') {
5246
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5247
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
5248
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5249
					ORDER BY aircraft_icao_count DESC";
5250
		} else {
5251
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5252
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
5253
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5254
					ORDER BY aircraft_icao_count DESC";
5255
		}
5256
		
5257
		$sth = $this->db->prepare($query);
5258
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5259
5260
		$aircraft_array = array();
5261
		$temp_array = array();
5262
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5263
		{
5264
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5265
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5266
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5267
5268
			$aircraft_array[] = $temp_array;
5269
		}
5270
		return $aircraft_array;
5271
	}
5272
5273
5274
	/**
5275
	* Gets all aircraft registration that have flown over by date
5276
	*
5277
	* @return Array the aircraft list
5278
	*
5279
	*/
5280
	public function countAllAircraftRegistrationByDate($date,$filters = array())
5281
	{
5282
		global $globalTimezone, $globalDBdriver;
5283
		$filter_query = $this->getFilter($filters,true,true);
5284
		$Image = new Image($this->db);
5285
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5286
		if ($globalTimezone != '') {
5287
			date_default_timezone_set($globalTimezone);
5288
			$datetime = new DateTime($date);
5289
			$offset = $datetime->format('P');
5290
		} else $offset = '+00:00';
5291
5292
		if ($globalDBdriver == 'mysql') {
5293
			$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 
5294
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5295
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5296
					ORDER BY registration_count DESC";
5297
		} else {
5298
			$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    
5299
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5300
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5301
					ORDER BY registration_count DESC";
5302
		}
5303
		
5304
		$sth = $this->db->prepare($query);
5305
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5306
5307
		$aircraft_array = array();
5308
		$temp_array = array();
5309
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5310
		{
5311
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5312
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5313
			$temp_array['registration'] = $row['registration'];
5314
			$temp_array['airline_name'] = $row['airline_name'];
5315
			$temp_array['image_thumbnail'] = "";
5316
			if($row['registration'] != "")
5317
			{
5318
				$image_array = $Image->getSpotterImage($row['registration']);
5319
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5320
			}
5321
			$temp_array['registration_count'] = $row['registration_count'];
5322
 
5323
			$aircraft_array[] = $temp_array;
5324
		}
5325
		return $aircraft_array;
5326
	}
5327
5328
5329
	/**
5330
	* Gets all aircraft manufacturer that have flown over by date
5331
	*
5332
	* @return Array the aircraft manufacturer list
5333
	*
5334
	*/
5335
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5336
	{
5337
		global $globalTimezone, $globalDBdriver;
5338
		$filter_query = $this->getFilter($filters,true,true);
5339
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5340
		if ($globalTimezone != '') {
5341
			date_default_timezone_set($globalTimezone);
5342
			$datetime = new DateTime($date);
5343
			$offset = $datetime->format('P');
5344
		} else $offset = '+00:00';
5345
5346
		if ($globalDBdriver == 'mysql') {
5347
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5348
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5349
				GROUP BY spotter_output.aircraft_manufacturer 
5350
				ORDER BY aircraft_manufacturer_count DESC";
5351
		} else {
5352
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5353
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5354
				GROUP BY spotter_output.aircraft_manufacturer 
5355
				ORDER BY aircraft_manufacturer_count DESC";
5356
		}
5357
		
5358
		$sth = $this->db->prepare($query);
5359
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5360
5361
		$aircraft_array = array();
5362
		$temp_array = array();
5363
5364
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5365
		{
5366
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5367
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5368
5369
			$aircraft_array[] = $temp_array;
5370
		}
5371
		return $aircraft_array;
5372
	}
5373
5374
5375
	/**
5376
	* Gets all aircraft types that have flown over by ident/callsign
5377
	*
5378
	* @return Array the aircraft list
5379
	*
5380
	*/
5381
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5382
	{
5383
		$filter_query = $this->getFilter($filters,true,true);
5384
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5385
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5386
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5387
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5388
				ORDER BY aircraft_icao_count DESC";
5389
5390
		$sth = $this->db->prepare($query);
5391
		$sth->execute(array(':ident' => $ident));
5392
      
5393
		$aircraft_array = array();
5394
		$temp_array = array();
5395
5396
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5397
		{
5398
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5399
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5400
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5401
5402
			$aircraft_array[] = $temp_array;
5403
		}
5404
		return $aircraft_array;
5405
	}
5406
5407
5408
	/**
5409
	* Gets all aircraft registration that have flown over by ident/callsign
5410
	*
5411
	* @return Array the aircraft list
5412
	*
5413
	*/
5414
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5415
	{
5416
		$filter_query = $this->getFilter($filters,true,true);
5417
		$Image = new Image($this->db);
5418
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5419
5420
		$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  
5421
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5422
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5423
		    ORDER BY registration_count DESC";
5424
5425
		
5426
		$sth = $this->db->prepare($query);
5427
		$sth->execute(array(':ident' => $ident));
5428
      
5429
		$aircraft_array = array();
5430
		$temp_array = array();
5431
        
5432
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5433
		{
5434
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5435
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5436
			$temp_array['registration'] = $row['registration'];
5437
			$temp_array['airline_name'] = $row['airline_name'];
5438
			$temp_array['image_thumbnail'] = "";
5439
			if($row['registration'] != "")
5440
			{
5441
				$image_array = $Image->getSpotterImage($row['registration']);
5442
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5443
				else $temp_array['image_thumbnail'] = '';
5444
			}
5445
			$temp_array['registration_count'] = $row['registration_count'];
5446
			$aircraft_array[] = $temp_array;
5447
		}
5448
		return $aircraft_array;
5449
	}
5450
5451
5452
	/**
5453
	* Gets all aircraft manufacturer that have flown over by ident/callsign
5454
	*
5455
	* @return Array the aircraft manufacturer list
5456
	*
5457
	*/
5458
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
5459
	{
5460
		$filter_query = $this->getFilter($filters,true,true);
5461
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5462
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5463
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
5464
                    GROUP BY spotter_output.aircraft_manufacturer 
5465
					ORDER BY aircraft_manufacturer_count DESC";
5466
5467
		
5468
		$sth = $this->db->prepare($query);
5469
		$sth->execute(array(':ident' => $ident));
5470
		$aircraft_array = array();
5471
		$temp_array = array();
5472
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5473
		{
5474
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5475
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5476
			$aircraft_array[] = $temp_array;
5477
		}
5478
		return $aircraft_array;
5479
	}
5480
5481
5482
	/**
5483
	* Gets all aircraft types that have flown over by route
5484
	*
5485
	* @return Array the aircraft list
5486
	*
5487
	*/
5488
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5489
	{
5490
		$filter_query = $this->getFilter($filters,true,true);
5491
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5492
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5493
		
5494
5495
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5496
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
5497
                    GROUP BY spotter_output.aircraft_name 
5498
					ORDER BY aircraft_icao_count DESC";
5499
 
5500
		
5501
		$sth = $this->db->prepare($query);
5502
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5503
		$aircraft_array = array();
5504
		$temp_array = array();
5505
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5506
		{
5507
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5508
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5509
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5510
			$aircraft_array[] = $temp_array;
5511
		}
5512
		return $aircraft_array;
5513
	}
5514
5515
	/**
5516
	* Gets all aircraft registration that have flown over by route
5517
	*
5518
	* @return Array the aircraft list
5519
	*
5520
	*/
5521
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5522
	{
5523
		$filter_query = $this->getFilter($filters,true,true);
5524
		$Image = new Image($this->db);
5525
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5526
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5527
5528
		$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   
5529
                    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)   
5530
                    GROUP BY spotter_output.registration 
5531
					ORDER BY registration_count DESC";
5532
5533
		
5534
		$sth = $this->db->prepare($query);
5535
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5536
      
5537
		$aircraft_array = array();
5538
		$temp_array = array();
5539
        
5540
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5541
		{
5542
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5543
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5544
			$temp_array['registration'] = $row['registration'];
5545
			$temp_array['airline_name'] = $row['airline_name'];
5546
			$temp_array['image_thumbnail'] = "";
5547
			if($row['registration'] != "")
5548
			{
5549
				$image_array = $Image->getSpotterImage($row['registration']);
5550
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5551
			}
5552
			$temp_array['registration_count'] = $row['registration_count'];
5553
          
5554
			$aircraft_array[] = $temp_array;
5555
		}
5556
5557
		return $aircraft_array;
5558
	}
5559
	
5560
	
5561
	/**
5562
	* Gets all aircraft manufacturer that have flown over by route
5563
	*
5564
	* @return Array the aircraft manufacturer list
5565
	*
5566
	*/
5567
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5568
	{
5569
		$filter_query = $this->getFilter($filters,true,true);
5570
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5571
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5572
5573
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5574
                    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) 
5575
                    GROUP BY spotter_output.aircraft_manufacturer 
5576
					ORDER BY aircraft_manufacturer_count DESC";
5577
5578
		
5579
		$sth = $this->db->prepare($query);
5580
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5581
      
5582
		$aircraft_array = array();
5583
		$temp_array = array();
5584
        
5585
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5586
		{
5587
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5588
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5589
          
5590
			$aircraft_array[] = $temp_array;
5591
		}
5592
5593
		return $aircraft_array;
5594
	}	
5595
5596
	
5597
	
5598
	
5599
	/**
5600
	* Gets all aircraft types that have flown over by country
5601
	*
5602
	* @return Array the aircraft list
5603
	*
5604
	*/
5605
	public function countAllAircraftTypesByCountry($country,$filters = array())
5606
	{
5607
		$filter_query = $this->getFilter($filters,true,true);
5608
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5609
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5610
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
5611
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5612
			    ORDER BY aircraft_icao_count DESC";
5613
 
5614
		
5615
		$sth = $this->db->prepare($query);
5616
		$sth->execute(array(':country' => $country));
5617
      
5618
		$aircraft_array = array();
5619
		$temp_array = array();
5620
        
5621
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5622
		{
5623
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5624
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5625
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5626
          
5627
			$aircraft_array[] = $temp_array;
5628
		}
5629
5630
		return $aircraft_array;
5631
	}
5632
5633
5634
	/**
5635
	* Gets all aircraft registration that have flown over by country
5636
	*
5637
	* @return Array the aircraft list
5638
	*
5639
	*/
5640
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
5641
	{
5642
		$filter_query = $this->getFilter($filters,true,true);
5643
		$Image = new Image($this->db);
5644
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5645
		$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 
5646
			    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)    
5647
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5648
			    ORDER BY registration_count DESC";
5649
5650
		
5651
		$sth = $this->db->prepare($query);
5652
		$sth->execute(array(':country' => $country));
5653
      
5654
		$aircraft_array = array();
5655
		$temp_array = array();
5656
        
5657
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5658
		{
5659
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5660
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5661
			$temp_array['registration'] = $row['registration'];
5662
			$temp_array['airline_name'] = $row['airline_name'];
5663
			$temp_array['image_thumbnail'] = "";
5664
			if($row['registration'] != "")
5665
			{
5666
				$image_array = $Image->getSpotterImage($row['registration']);
5667
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5668
			}
5669
			$temp_array['registration_count'] = $row['registration_count'];
5670
          
5671
			$aircraft_array[] = $temp_array;
5672
		}
5673
5674
		return $aircraft_array;
5675
	}
5676
	
5677
	
5678
	/**
5679
	* Gets all aircraft manufacturer that have flown over by country
5680
	*
5681
	* @return Array the aircraft manufacturer list
5682
	*
5683
	*/
5684
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
5685
	{
5686
		$filter_query = $this->getFilter($filters,true,true);
5687
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5688
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5689
                    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) 
5690
                    GROUP BY spotter_output.aircraft_manufacturer 
5691
					ORDER BY aircraft_manufacturer_count DESC";
5692
5693
		
5694
		$sth = $this->db->prepare($query);
5695
		$sth->execute(array(':country' => $country));
5696
      
5697
		$aircraft_array = array();
5698
		$temp_array = array();
5699
        
5700
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5701
		{
5702
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5703
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5704
          
5705
			$aircraft_array[] = $temp_array;
5706
		}
5707
5708
		return $aircraft_array;
5709
	}	
5710
	
5711
	
5712
	
5713
	/**
5714
	* Gets all aircraft manufacturers that have flown over
5715
	*
5716
	* @return Array the aircraft list
5717
	*
5718
	*/
5719
	public function countAllAircraftManufacturers($filters = array(),$year = '',$month = '',$day = '')
5720
	{
5721
		global $globalDBdriver;
5722
		$filter_query = $this->getFilter($filters,true,true);
5723
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5724
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
5725
                $query_values = array();
5726
		if ($year != '') {
5727
			if ($globalDBdriver == 'mysql') {
5728
				$query .= " AND YEAR(spotter_output.date) = :year";
5729
				$query_values = array_merge($query_values,array(':year' => $year));
5730
			} else {
5731
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5732
				$query_values = array_merge($query_values,array(':year' => $year));
5733
			}
5734
		}
5735
		if ($month != '') {
5736
			if ($globalDBdriver == 'mysql') {
5737
				$query .= " AND MONTH(spotter_output.date) = :month";
5738
				$query_values = array_merge($query_values,array(':month' => $month));
5739
			} else {
5740
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5741
				$query_values = array_merge($query_values,array(':month' => $month));
5742
			}
5743
		}
5744
		if ($day != '') {
5745
			if ($globalDBdriver == 'mysql') {
5746
				$query .= " AND DAY(spotter_output.date) = :day";
5747
				$query_values = array_merge($query_values,array(':day' => $day));
5748
			} else {
5749
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5750
				$query_values = array_merge($query_values,array(':day' => $day));
5751
			}
5752
		}
5753
		$query .= " GROUP BY spotter_output.aircraft_manufacturer
5754
					ORDER BY aircraft_manufacturer_count DESC
5755
					LIMIT 10";
5756
      
5757
		
5758
		$sth = $this->db->prepare($query);
5759
		$sth->execute($query_values);
5760
      
5761
		$manufacturer_array = array();
5762
		$temp_array = array();
5763
        
5764
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5765
		{
5766
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5767
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5768
          
5769
			$manufacturer_array[] = $temp_array;
5770
		}
5771
5772
		return $manufacturer_array;
5773
	}
5774
	
5775
	
5776
	
5777
	/**
5778
	* Gets all aircraft registrations that have flown over
5779
	*
5780
	* @return Array the aircraft list
5781
	*
5782
	*/
5783
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
5784
	{
5785
		global $globalDBdriver;
5786
		$Image = new Image($this->db);
5787
		$filter_query = $this->getFilter($filters,true,true);
5788
		$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    
5789
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
5790
                if ($olderthanmonths > 0) {
5791
            		if ($globalDBdriver == 'mysql') {
5792
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5793
			} else {
5794
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5795
			}
5796
		}
5797
                if ($sincedate != '') {
5798
            		if ($globalDBdriver == 'mysql') {
5799
				$query .= " AND spotter_output.date > '".$sincedate."'";
5800
			} else {
5801
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5802
			}
5803
		}
5804
		$query_values = array();
5805
		if ($year != '') {
5806
			if ($globalDBdriver == 'mysql') {
5807
				$query .= " AND YEAR(spotter_output.date) = :year";
5808
				$query_values = array_merge($query_values,array(':year' => $year));
5809
			} else {
5810
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5811
				$query_values = array_merge($query_values,array(':year' => $year));
5812
			}
5813
		}
5814
		if ($month != '') {
5815
			if ($globalDBdriver == 'mysql') {
5816
				$query .= " AND MONTH(spotter_output.date) = :month";
5817
				$query_values = array_merge($query_values,array(':month' => $month));
5818
			} else {
5819
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5820
				$query_values = array_merge($query_values,array(':month' => $month));
5821
			}
5822
		}
5823
		if ($day != '') {
5824
			if ($globalDBdriver == 'mysql') {
5825
				$query .= " AND DAY(spotter_output.date) = :day";
5826
				$query_values = array_merge($query_values,array(':day' => $day));
5827
			} else {
5828
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5829
				$query_values = array_merge($query_values,array(':day' => $day));
5830
			}
5831
		}
5832
		$query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
5833
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5834
		
5835
		$sth = $this->db->prepare($query);
5836
		$sth->execute($query_values);
5837
      
5838
		$aircraft_array = array();
5839
		$temp_array = array();
5840
        
5841
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5842
		{
5843
			$temp_array['registration'] = $row['registration'];
5844
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5845
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5846
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5847
			$temp_array['airline_name'] = $row['airline_name'];
5848
			$temp_array['image_thumbnail'] = "";
5849
			if($row['registration'] != "")
5850
			{
5851
				$image_array = $Image->getSpotterImage($row['registration']);
5852
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5853
			}
5854
          
5855
			$aircraft_array[] = $temp_array;
5856
		}
5857
5858
		return $aircraft_array;
5859
	}
5860
5861
5862
	/**
5863
	* Gets all aircraft registrations that have flown over
5864
	*
5865
	* @return Array the aircraft list
5866
	*
5867
	*/
5868
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5869
	{
5870
		global $globalDBdriver;
5871
		$filter_query = $this->getFilter($filters,true,true);
5872
		$Image = new Image($this->db);
5873
		$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    
5874
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
5875
                if ($olderthanmonths > 0) {
5876
            		if ($globalDBdriver == 'mysql') {
5877
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5878
			} else {
5879
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5880
			}
5881
		}
5882
                if ($sincedate != '') {
5883
            		if ($globalDBdriver == 'mysql') {
5884
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5885
			} else {
5886
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5887
			}
5888
		}
5889
5890
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5891
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5892
                $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";
5893
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5894
		
5895
		$sth = $this->db->prepare($query);
5896
		$sth->execute();
5897
      
5898
		$aircraft_array = array();
5899
		$temp_array = array();
5900
        
5901
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5902
		{
5903
			$temp_array['registration'] = $row['registration'];
5904
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5905
			$temp_array['airline_icao'] = $row['airline_icao'];
5906
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5907
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5908
			$temp_array['airline_name'] = $row['airline_name'];
5909
			$temp_array['image_thumbnail'] = "";
5910
			if($row['registration'] != "")
5911
			{
5912
				$image_array = $Image->getSpotterImage($row['registration']);
5913
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5914
			}
5915
          
5916
			$aircraft_array[] = $temp_array;
5917
		}
5918
5919
		return $aircraft_array;
5920
	}
5921
	
5922
	
5923
	/**
5924
	* Gets all departure airports of the airplanes that have flown over
5925
	*
5926
	* @return Array the airport list
5927
	*
5928
	*/
5929
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
5930
	{
5931
		global $globalDBdriver;
5932
		$filter_query = $this->getFilter($filters,true,true);
5933
		$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 
5934
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
5935
                if ($olderthanmonths > 0) {
5936
            		if ($globalDBdriver == 'mysql') {
5937
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5938
			} else {
5939
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5940
			}
5941
                }
5942
                if ($sincedate != '') {
5943
            		if ($globalDBdriver == 'mysql') {
5944
				$query .= " AND spotter_output.date > '".$sincedate."'";
5945
			} else {
5946
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5947
			}
5948
		}
5949
		$query_values = array();
5950
		if ($year != '') {
5951
			if ($globalDBdriver == 'mysql') {
5952
				$query .= " AND YEAR(spotter_output.date) = :year";
5953
				$query_values = array_merge($query_values,array(':year' => $year));
5954
			} else {
5955
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
5956
				$query_values = array_merge($query_values,array(':year' => $year));
5957
			}
5958
		}
5959
		if ($month != '') {
5960
			if ($globalDBdriver == 'mysql') {
5961
				$query .= " AND MONTH(spotter_output.date) = :month";
5962
				$query_values = array_merge($query_values,array(':month' => $month));
5963
			} else {
5964
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
5965
				$query_values = array_merge($query_values,array(':month' => $month));
5966
			}
5967
		}
5968
		if ($day != '') {
5969
			if ($globalDBdriver == 'mysql') {
5970
				$query .= " AND DAY(spotter_output.date) = :day";
5971
				$query_values = array_merge($query_values,array(':day' => $day));
5972
			} else {
5973
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
5974
				$query_values = array_merge($query_values,array(':day' => $day));
5975
			}
5976
		}
5977
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5978
				ORDER BY airport_departure_icao_count DESC";
5979
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5980
5981
		$sth = $this->db->prepare($query);
5982
		$sth->execute($query_values);
5983
5984
		$airport_array = array();
5985
		$temp_array = array();
5986
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5987
		{
5988
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5989
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5990
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5991
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5992
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5993
          
5994
			$airport_array[] = $temp_array;
5995
		}
5996
		return $airport_array;
5997
	}
5998
5999
	/**
6000
	* Gets all departure airports of the airplanes that have flown over
6001
	*
6002
	* @return Array the airport list
6003
	*
6004
	*/
6005
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6006
	{
6007
		global $globalDBdriver;
6008
		$filter_query = $this->getFilter($filters,true,true);
6009
		$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 
6010
			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 <> '' ";
6011
                if ($olderthanmonths > 0) {
6012
            		if ($globalDBdriver == 'mysql') {
6013
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6014
			} else {
6015
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6016
			}
6017
                }
6018
                if ($sincedate != '') {
6019
            		if ($globalDBdriver == 'mysql') {
6020
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6021
			} else {
6022
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6023
			}
6024
		}
6025
6026
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6027
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6028
                $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
6029
				ORDER BY airport_departure_icao_count DESC";
6030
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6031
      
6032
		$sth = $this->db->prepare($query);
6033
		$sth->execute();
6034
      
6035
		$airport_array = array();
6036
		$temp_array = array();
6037
        
6038
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6039
		{
6040
			$temp_array['airline_icao'] = $row['airline_icao'];
6041
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6042
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6043
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6044
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6045
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6046
          
6047
			$airport_array[] = $temp_array;
6048
		}
6049
		return $airport_array;
6050
	}
6051
6052
	/**
6053
	* Gets all detected departure airports of the airplanes that have flown over
6054
	*
6055
	* @return Array the airport list
6056
	*
6057
	*/
6058
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '',$month = '',$day = '')
6059
	{
6060
		global $globalDBdriver;
6061
		$filter_query = $this->getFilter($filters,true,true);
6062
		$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
6063
				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";
6064
                if ($olderthanmonths > 0) {
6065
            		if ($globalDBdriver == 'mysql') {
6066
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6067
			} else {
6068
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6069
			}
6070
                }
6071
                if ($sincedate != '') {
6072
            		if ($globalDBdriver == 'mysql') {
6073
				$query .= " AND spotter_output.date > '".$sincedate."'";
6074
			} else {
6075
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6076
			}
6077
		}
6078
		$query_values = array();
6079
		if ($year != '') {
6080
			if ($globalDBdriver == 'mysql') {
6081
				$query .= " AND YEAR(spotter_output.date) = :year";
6082
				$query_values = array_merge($query_values,array(':year' => $year));
6083
			} else {
6084
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6085
				$query_values = array_merge($query_values,array(':year' => $year));
6086
			}
6087
		}
6088
		if ($month != '') {
6089
			if ($globalDBdriver == 'mysql') {
6090
				$query .= " AND MONTH(spotter_output.date) = :month";
6091
				$query_values = array_merge($query_values,array(':month' => $month));
6092
			} else {
6093
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6094
				$query_values = array_merge($query_values,array(':month' => $month));
6095
			}
6096
		}
6097
		if ($day != '') {
6098
			if ($globalDBdriver == 'mysql') {
6099
				$query .= " AND DAY(spotter_output.date) = :day";
6100
				$query_values = array_merge($query_values,array(':day' => $day));
6101
			} else {
6102
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6103
				$query_values = array_merge($query_values,array(':day' => $day));
6104
			}
6105
		}
6106
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6107
				ORDER BY airport_departure_icao_count DESC";
6108
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6109
    		//echo $query;
6110
		$sth = $this->db->prepare($query);
6111
		$sth->execute($query_values);
6112
      
6113
		$airport_array = array();
6114
		$temp_array = array();
6115
        
6116
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6117
		{
6118
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6119
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6120
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6121
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6122
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6123
          
6124
			$airport_array[] = $temp_array;
6125
		}
6126
		return $airport_array;
6127
	}
6128
	
6129
	/**
6130
	* Gets all detected departure airports of the airplanes that have flown over
6131
	*
6132
	* @return Array the airport list
6133
	*
6134
	*/
6135
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
6136
	{
6137
		global $globalDBdriver;
6138
		$filter_query = $this->getFilter($filters,true,true);
6139
		$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
6140
				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 ";
6141
                if ($olderthanmonths > 0) {
6142
            		if ($globalDBdriver == 'mysql') {
6143
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6144
			} else {
6145
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6146
			}
6147
                }
6148
                if ($sincedate != '') {
6149
            		if ($globalDBdriver == 'mysql') {
6150
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6151
			} else {
6152
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
6153
			}
6154
		}
6155
6156
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6157
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6158
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
6159
				ORDER BY airport_departure_icao_count DESC";
6160
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
6161
      
6162
		$sth = $this->db->prepare($query);
6163
		$sth->execute();
6164
      
6165
		$airport_array = array();
6166
		$temp_array = array();
6167
        
6168
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6169
		{
6170
			$temp_array['airline_icao'] = $row['airline_icao'];
6171
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6172
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6173
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6174
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6175
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6176
          
6177
			$airport_array[] = $temp_array;
6178
		}
6179
		return $airport_array;
6180
	}	
6181
	
6182
	/**
6183
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
6184
	*
6185
	* @return Array the airport list
6186
	*
6187
	*/
6188
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
6189
	{
6190
		$filter_query = $this->getFilter($filters,true,true);
6191
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6192
		$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 
6193
			    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 <> '' 
6194
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6195
			    ORDER BY airport_departure_icao_count DESC";
6196
      
6197
		
6198
		$sth = $this->db->prepare($query);
6199
		$sth->execute(array(':airline_icao' => $airline_icao));
6200
      
6201
		$airport_array = array();
6202
		$temp_array = array();
6203
        
6204
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6205
		{
6206
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6207
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6208
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6209
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6210
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6211
          
6212
			$airport_array[] = $temp_array;
6213
		}
6214
6215
		return $airport_array;
6216
	}
6217
	
6218
	
6219
	
6220
	/**
6221
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
6222
	*
6223
	* @return Array the airport list
6224
	*
6225
	*/
6226
	public function countAllDepartureAirportCountriesByAirline($airline_icao,$filters = array())
6227
	{
6228
		$filter_query = $this->getFilter($filters,true,true);
6229
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6230
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6231
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6232
                    GROUP BY spotter_output.departure_airport_country
6233
					ORDER BY airport_departure_country_count DESC";
6234
      
6235
		
6236
		$sth = $this->db->prepare($query);
6237
		$sth->execute(array(':airline_icao' => $airline_icao));
6238
      
6239
		$airport_array = array();
6240
		$temp_array = array();
6241
        
6242
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6243
		{
6244
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6245
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6246
          
6247
			$airport_array[] = $temp_array;
6248
		}
6249
6250
		return $airport_array;
6251
	}
6252
	
6253
	
6254
	
6255
	/**
6256
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
6257
	*
6258
	* @return Array the airport list
6259
	*
6260
	*/
6261
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
6262
	{
6263
		$filter_query = $this->getFilter($filters,true,true);
6264
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6265
		$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 
6266
			    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 <> '' 
6267
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6268
			    ORDER BY airport_departure_icao_count DESC";
6269
      
6270
		
6271
		$sth = $this->db->prepare($query);
6272
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6273
      
6274
		$airport_array = array();
6275
		$temp_array = array();
6276
        
6277
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6278
		{
6279
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6280
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6281
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6282
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6283
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6284
          
6285
			$airport_array[] = $temp_array;
6286
		}
6287
6288
		return $airport_array;
6289
	}
6290
	
6291
	
6292
	/**
6293
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6294
	*
6295
	* @return Array the airport list
6296
	*
6297
	*/
6298
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
6299
	{
6300
		$filter_query = $this->getFilter($filters,true,true);
6301
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6302
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6303
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6304
                    GROUP BY spotter_output.departure_airport_country
6305
					ORDER BY airport_departure_country_count DESC";
6306
      
6307
		
6308
		$sth = $this->db->prepare($query);
6309
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6310
      
6311
		$airport_array = array();
6312
		$temp_array = array();
6313
        
6314
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6315
		{
6316
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6317
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6318
          
6319
			$airport_array[] = $temp_array;
6320
		}
6321
6322
		return $airport_array;
6323
	}
6324
	
6325
	
6326
	/**
6327
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
6328
	*
6329
	* @return Array the airport list
6330
	*
6331
	*/
6332
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
6333
	{
6334
		$filter_query = $this->getFilter($filters,true,true);
6335
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6336
		$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 
6337
			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 <> '' 
6338
                    GROUP BY spotter_output.departure_airport_icao
6339
					ORDER BY airport_departure_icao_count DESC";
6340
      
6341
		
6342
		$sth = $this->db->prepare($query);
6343
		$sth->execute(array(':registration' => $registration));
6344
      
6345
		$airport_array = array();
6346
		$temp_array = array();
6347
        
6348
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6349
		{
6350
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6351
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6352
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6353
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6354
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6355
          
6356
			$airport_array[] = $temp_array;
6357
		}
6358
6359
		return $airport_array;
6360
	}
6361
	
6362
	
6363
	/**
6364
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
6365
	*
6366
	* @return Array the airport list
6367
	*
6368
	*/
6369
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
6370
	{
6371
		$filter_query = $this->getFilter($filters,true,true);
6372
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6373
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6374
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
6375
                    GROUP BY spotter_output.departure_airport_country
6376
					ORDER BY airport_departure_country_count DESC";
6377
      
6378
		
6379
		$sth = $this->db->prepare($query);
6380
		$sth->execute(array(':registration' => $registration));
6381
      
6382
		$airport_array = array();
6383
		$temp_array = array();
6384
        
6385
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6386
		{
6387
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6388
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6389
          
6390
			$airport_array[] = $temp_array;
6391
		}
6392
6393
		return $airport_array;
6394
	}
6395
	
6396
	
6397
	/**
6398
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
6399
	*
6400
	* @return Array the airport list
6401
	*
6402
	*/
6403
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
6404
	{
6405
		$filter_query = $this->getFilter($filters,true,true);
6406
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6407
		$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 
6408
			    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 <> '' 
6409
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6410
			    ORDER BY airport_departure_icao_count DESC";
6411
      
6412
		
6413
		$sth = $this->db->prepare($query);
6414
		$sth->execute(array(':airport_icao' => $airport_icao));
6415
      
6416
		$airport_array = array();
6417
		$temp_array = array();
6418
        
6419
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6420
		{
6421
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6422
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6423
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6424
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6425
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6426
          
6427
			$airport_array[] = $temp_array;
6428
		}
6429
6430
		return $airport_array;
6431
	}
6432
	
6433
	
6434
	/**
6435
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
6436
	*
6437
	* @return Array the airport list
6438
	*
6439
	*/
6440
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
6441
	{
6442
		$filter_query = $this->getFilter($filters,true,true);
6443
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6444
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6445
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
6446
                    GROUP BY spotter_output.departure_airport_country
6447
					ORDER BY airport_departure_country_count DESC";
6448
      
6449
		
6450
		$sth = $this->db->prepare($query);
6451
		$sth->execute(array(':airport_icao' => $airport_icao));
6452
      
6453
		$airport_array = array();
6454
		$temp_array = array();
6455
        
6456
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6457
		{
6458
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6459
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6460
          
6461
			$airport_array[] = $temp_array;
6462
		}
6463
6464
		return $airport_array;
6465
	}
6466
	
6467
	
6468
	
6469
	/**
6470
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
6471
	*
6472
	* @return Array the airport list
6473
	*
6474
	*/
6475
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6476
	{
6477
		$filter_query = $this->getFilter($filters,true,true);
6478
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6479
		$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 
6480
			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 <> '' 
6481
                    GROUP BY spotter_output.departure_airport_icao
6482
					ORDER BY airport_departure_icao_count DESC";
6483
      
6484
		
6485
		$sth = $this->db->prepare($query);
6486
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6487
      
6488
		$airport_array = array();
6489
		$temp_array = array();
6490
        
6491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6492
		{
6493
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6494
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6495
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6496
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6497
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6498
          
6499
			$airport_array[] = $temp_array;
6500
		}
6501
6502
		return $airport_array;
6503
	}
6504
	
6505
	
6506
	/**
6507
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
6508
	*
6509
	* @return Array the airport list
6510
	*
6511
	*/
6512
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6513
	{
6514
		$filter_query = $this->getFilter($filters,true,true);
6515
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6516
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6517
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6518
                    GROUP BY spotter_output.departure_airport_country
6519
					ORDER BY airport_departure_country_count DESC";
6520
      
6521
		
6522
		$sth = $this->db->prepare($query);
6523
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6524
      
6525
		$airport_array = array();
6526
		$temp_array = array();
6527
        
6528
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6529
		{
6530
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6531
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6532
          
6533
			$airport_array[] = $temp_array;
6534
		}
6535
6536
		return $airport_array;
6537
	}
6538
	
6539
	
6540
	/**
6541
	* Gets all departure airports of the airplanes that have flown over based on a date
6542
	*
6543
	* @return Array the airport list
6544
	*
6545
	*/
6546
	public function countAllDepartureAirportsByDate($date,$filters = array())
6547
	{
6548
		global $globalTimezone, $globalDBdriver;
6549
		$filter_query = $this->getFilter($filters,true,true);
6550
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6551
		if ($globalTimezone != '') {
6552
			date_default_timezone_set($globalTimezone);
6553
			$datetime = new DateTime($date);
6554
			$offset = $datetime->format('P');
6555
		} else $offset = '+00:00';
6556
6557
		if ($globalDBdriver == 'mysql') {
6558
			$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 
6559
					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
6560
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6561
					ORDER BY airport_departure_icao_count DESC";
6562
		} else {
6563
			$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 
6564
					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
6565
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6566
					ORDER BY airport_departure_icao_count DESC";
6567
		}
6568
6569
		$sth = $this->db->prepare($query);
6570
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6571
      
6572
		$airport_array = array();
6573
		$temp_array = array();
6574
        
6575
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6576
		{
6577
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6578
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6579
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6580
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6581
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6582
          
6583
			$airport_array[] = $temp_array;
6584
		}
6585
		return $airport_array;
6586
	}
6587
	
6588
	
6589
	
6590
	/**
6591
	* Gets all departure airports by country of the airplanes that have flown over based on a date
6592
	*
6593
	* @return Array the airport list
6594
	*
6595
	*/
6596
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
6597
	{
6598
		global $globalTimezone, $globalDBdriver;
6599
		$filter_query = $this->getFilter($filters,true,true);
6600
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6601
		if ($globalTimezone != '') {
6602
			date_default_timezone_set($globalTimezone);
6603
			$datetime = new DateTime($date);
6604
			$offset = $datetime->format('P');
6605
		} else $offset = '+00:00';
6606
6607
		if ($globalDBdriver == 'mysql') {
6608
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6609
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6610
					GROUP BY spotter_output.departure_airport_country
6611
					ORDER BY airport_departure_country_count DESC";
6612
		} else {
6613
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6614
					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 
6615
					GROUP BY spotter_output.departure_airport_country
6616
					ORDER BY airport_departure_country_count DESC";
6617
		}
6618
		
6619
		$sth = $this->db->prepare($query);
6620
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6621
      
6622
		$airport_array = array();
6623
		$temp_array = array();
6624
        
6625
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6626
		{
6627
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6628
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6629
          
6630
			$airport_array[] = $temp_array;
6631
		}
6632
		return $airport_array;
6633
	}
6634
	
6635
	
6636
	
6637
	/**
6638
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
6639
	*
6640
	* @return Array the airport list
6641
	*
6642
	*/
6643
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
6644
	{
6645
		$filter_query = $this->getFilter($filters,true,true);
6646
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6647
		$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 
6648
		    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 
6649
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6650
		    ORDER BY airport_departure_icao_count DESC";
6651
      
6652
		
6653
		$sth = $this->db->prepare($query);
6654
		$sth->execute(array(':ident' => $ident));
6655
      
6656
		$airport_array = array();
6657
		$temp_array = array();
6658
        
6659
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6660
		{
6661
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6662
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6663
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6664
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6665
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6666
          
6667
			$airport_array[] = $temp_array;
6668
		}
6669
6670
		return $airport_array;
6671
	}
6672
	
6673
	
6674
	
6675
	/**
6676
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
6677
	*
6678
	* @return Array the airport list
6679
	*
6680
	*/
6681
	public function countAllDepartureAirportCountriesByIdent($ident,$filters = array())
6682
	{
6683
		$filter_query = $this->getFilter($filters,true,true);
6684
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6685
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6686
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
6687
                    GROUP BY spotter_output.departure_airport_country
6688
					ORDER BY airport_departure_country_count DESC";
6689
      
6690
		
6691
		$sth = $this->db->prepare($query);
6692
		$sth->execute(array(':ident' => $ident));
6693
      
6694
		$airport_array = array();
6695
		$temp_array = array();
6696
        
6697
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6698
		{
6699
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6700
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6701
          
6702
			$airport_array[] = $temp_array;
6703
		}
6704
6705
		return $airport_array;
6706
	}
6707
	
6708
	
6709
	
6710
	/**
6711
	* Gets all departure airports of the airplanes that have flown over based on a country
6712
	*
6713
	* @return Array the airport list
6714
	*
6715
	*/
6716
	public function countAllDepartureAirportsByCountry($country,$filters = array())
6717
	{
6718
		$filter_query = $this->getFilter($filters,true,true);
6719
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6720
6721
		$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 
6722
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
6723
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6724
			    ORDER BY airport_departure_icao_count DESC";
6725
      
6726
		
6727
		$sth = $this->db->prepare($query);
6728
		$sth->execute(array(':country' => $country));
6729
      
6730
		$airport_array = array();
6731
		$temp_array = array();
6732
        
6733
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6734
		{
6735
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6736
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6737
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6738
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6739
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6740
          
6741
			$airport_array[] = $temp_array;
6742
		}
6743
6744
		return $airport_array;
6745
	}
6746
6747
6748
	/**
6749
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6750
	*
6751
	* @return Array the airport list
6752
	*
6753
	*/
6754
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
6755
	{
6756
		$filter_query = $this->getFilter($filters,true,true);
6757
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6758
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6759
			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 
6760
                    GROUP BY spotter_output.departure_airport_country
6761
					ORDER BY airport_departure_country_count DESC";
6762
      
6763
		
6764
		$sth = $this->db->prepare($query);
6765
		$sth->execute(array(':country' => $country));
6766
      
6767
		$airport_array = array();
6768
		$temp_array = array();
6769
        
6770
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6771
		{
6772
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6773
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6774
          
6775
			$airport_array[] = $temp_array;
6776
		}
6777
6778
		return $airport_array;
6779
	}
6780
	
6781
6782
	/**
6783
	* Gets all arrival airports of the airplanes that have flown over
6784
	*
6785
	* @param Boolean $limit Limit result to 10 or not
6786
	* @param Integer $olderthanmonths Only show result older than x months
6787
	* @param String $sincedate Only show result since x date
6788
	* @param Boolean $icaoaskey Show result by ICAO
6789
	* @param Array $filters Filter used here
6790
	* @return Array the airport list
6791
	*
6792
	*/
6793
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
6794
	{
6795
		global $globalDBdriver;
6796
		$filter_query = $this->getFilter($filters,true,true);
6797
		$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 
6798
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
6799
                if ($olderthanmonths > 0) {
6800
            		if ($globalDBdriver == 'mysql') {
6801
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6802
			} else {
6803
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6804
			}
6805
		}
6806
                if ($sincedate != '') {
6807
            		if ($globalDBdriver == 'mysql') {
6808
				$query .= " AND spotter_output.date > '".$sincedate."'";
6809
			} else {
6810
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6811
			}
6812
		}
6813
		$query_values = array();
6814
		if ($year != '') {
6815
			if ($globalDBdriver == 'mysql') {
6816
				$query .= " AND YEAR(spotter_output.date) = :year";
6817
				$query_values = array_merge($query_values,array(':year' => $year));
6818
			} else {
6819
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6820
				$query_values = array_merge($query_values,array(':year' => $year));
6821
			}
6822
		}
6823
		if ($month != '') {
6824
			if ($globalDBdriver == 'mysql') {
6825
				$query .= " AND MONTH(spotter_output.date) = :month";
6826
				$query_values = array_merge($query_values,array(':month' => $month));
6827
			} else {
6828
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6829
				$query_values = array_merge($query_values,array(':month' => $month));
6830
			}
6831
		}
6832
		if ($day != '') {
6833
			if ($globalDBdriver == 'mysql') {
6834
				$query .= " AND DAY(spotter_output.date) = :day";
6835
				$query_values = array_merge($query_values,array(':day' => $day));
6836
			} else {
6837
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6838
				$query_values = array_merge($query_values,array(':day' => $day));
6839
			}
6840
		}
6841
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6842
					ORDER BY airport_arrival_icao_count DESC";
6843
		if ($limit) $query .= " LIMIT 10";
6844
      
6845
		
6846
		$sth = $this->db->prepare($query);
6847
		$sth->execute($query_values);
6848
      
6849
		$airport_array = array();
6850
		$temp_array = array();
6851
        
6852
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6853
		{
6854
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6855
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6856
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6857
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6858
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6859
          
6860
			if ($icaoaskey) {
6861
				$icao = $row['arrival_airport_icao'];
6862
				$airport_array[$icao] = $temp_array;
6863
			} else $airport_array[] = $temp_array;
6864
		}
6865
6866
		return $airport_array;
6867
	}
6868
6869
	/**
6870
	* Gets all arrival airports of the airplanes that have flown over
6871
	*
6872
	* @return Array the airport list
6873
	*
6874
	*/
6875
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6876
	{
6877
		global $globalDBdriver;
6878
		$filter_query = $this->getFilter($filters,true,true);
6879
		$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 
6880
			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 <> '' ";
6881
                if ($olderthanmonths > 0) {
6882
            		if ($globalDBdriver == 'mysql') {
6883
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6884
			} else {
6885
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6886
			}
6887
		}
6888
                if ($sincedate != '') {
6889
            		if ($globalDBdriver == 'mysql') {
6890
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6891
			} else {
6892
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6893
			}
6894
		}
6895
6896
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6897
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6898
                $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
6899
					ORDER BY airport_arrival_icao_count DESC";
6900
		if ($limit) $query .= " LIMIT 10";
6901
      
6902
		
6903
		$sth = $this->db->prepare($query);
6904
		$sth->execute();
6905
      
6906
		$airport_array = array();
6907
		$temp_array = array();
6908
        
6909
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6910
		{
6911
			$temp_array['airline_icao'] = $row['airline_icao'];
6912
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6913
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6914
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6915
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6916
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6917
          
6918
			if ($icaoaskey) {
6919
				$icao = $row['arrival_airport_icao'];
6920
				$airport_array[$icao] = $temp_array;
6921
			} else $airport_array[] = $temp_array;
6922
		}
6923
6924
		return $airport_array;
6925
	}
6926
6927
6928
	/**
6929
	* Gets all detected arrival airports of the airplanes that have flown over
6930
	*
6931
	* @return Array the airport list
6932
	*
6933
	*/
6934
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array(),$year = '',$month = '',$day = '')
6935
	{
6936
		global $globalDBdriver;
6937
		$filter_query = $this->getFilter($filters,true,true);
6938
		$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 
6939
			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";
6940
                if ($olderthanmonths > 0) {
6941
            		if ($globalDBdriver == 'mysql') {
6942
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6943
			} else {
6944
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6945
			}
6946
		}
6947
                if ($sincedate != '') {
6948
            		if ($globalDBdriver == 'mysql') {
6949
				$query .= " AND spotter_output.date > '".$sincedate."'";
6950
			} else {
6951
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6952
			}
6953
		}
6954
		$query_values = array();
6955
		if ($year != '') {
6956
			if ($globalDBdriver == 'mysql') {
6957
				$query .= " AND YEAR(spotter_output.date) = :year";
6958
				$query_values = array_merge($query_values,array(':year' => $year));
6959
			} else {
6960
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
6961
				$query_values = array_merge($query_values,array(':year' => $year));
6962
			}
6963
		}
6964
		if ($month != '') {
6965
			if ($globalDBdriver == 'mysql') {
6966
				$query .= " AND MONTH(spotter_output.date) = :month";
6967
				$query_values = array_merge($query_values,array(':month' => $month));
6968
			} else {
6969
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
6970
				$query_values = array_merge($query_values,array(':month' => $month));
6971
			}
6972
		}
6973
		if ($day != '') {
6974
			if ($globalDBdriver == 'mysql') {
6975
				$query .= " AND DAY(spotter_output.date) = :day";
6976
				$query_values = array_merge($query_values,array(':day' => $day));
6977
			} else {
6978
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
6979
				$query_values = array_merge($query_values,array(':day' => $day));
6980
			}
6981
		}
6982
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6983
					ORDER BY airport_arrival_icao_count DESC";
6984
		if ($limit) $query .= " LIMIT 10";
6985
      
6986
		
6987
		$sth = $this->db->prepare($query);
6988
		$sth->execute($query_values);
6989
      
6990
		$airport_array = array();
6991
		$temp_array = array();
6992
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6993
		{
6994
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6995
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6996
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6997
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6998
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6999
          
7000
			if ($icaoaskey) {
7001
				$icao = $row['arrival_airport_icao'];
7002
				$airport_array[$icao] = $temp_array;
7003
			} else $airport_array[] = $temp_array;
7004
		}
7005
7006
		return $airport_array;
7007
	}
7008
	
7009
	/**
7010
	* Gets all detected arrival airports of the airplanes that have flown over
7011
	*
7012
	* @return Array the airport list
7013
	*
7014
	*/
7015
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
7016
	{
7017
		global $globalDBdriver;
7018
		$filter_query = $this->getFilter($filters,true,true);
7019
		$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 
7020
			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 ";
7021
                if ($olderthanmonths > 0) {
7022
            		if ($globalDBdriver == 'mysql') {
7023
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
7024
			} else {
7025
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7026
			}
7027
		}
7028
                if ($sincedate != '') {
7029
            		if ($globalDBdriver == 'mysql') {
7030
				$query .= "AND spotter_output.date > '".$sincedate."' ";
7031
			} else {
7032
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7033
			}
7034
		}
7035
7036
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7037
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
7038
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
7039
					ORDER BY airport_arrival_icao_count DESC";
7040
		if ($limit) $query .= " LIMIT 10";
7041
      
7042
		
7043
		$sth = $this->db->prepare($query);
7044
		$sth->execute();
7045
      
7046
		$airport_array = array();
7047
		$temp_array = array();
7048
        
7049
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7050
		{
7051
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7052
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7053
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7054
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7055
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7056
			$temp_array['airline_icao'] = $row['airline_icao'];
7057
          
7058
			if ($icaoaskey) {
7059
				$icao = $row['arrival_airport_icao'];
7060
				$airport_array[$icao] = $temp_array;
7061
			} else $airport_array[] = $temp_array;
7062
		}
7063
7064
		return $airport_array;
7065
	}	
7066
	
7067
	/**
7068
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
7069
	*
7070
	* @return Array the airport list
7071
	*
7072
	*/
7073
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
7074
	{
7075
		$filter_query = $this->getFilter($filters,true,true);
7076
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7077
		$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 
7078
			    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 
7079
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7080
			    ORDER BY airport_arrival_icao_count DESC";
7081
		
7082
		$sth = $this->db->prepare($query);
7083
		$sth->execute(array(':airline_icao' => $airline_icao));
7084
      
7085
		$airport_array = array();
7086
		$temp_array = array();
7087
        
7088
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7089
		{
7090
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7091
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7092
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7093
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7094
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7095
          
7096
			$airport_array[] = $temp_array;
7097
		}
7098
7099
		return $airport_array;
7100
	}
7101
	
7102
	
7103
	/**
7104
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
7105
	*
7106
	* @return Array the airport list
7107
	*
7108
	*/
7109
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
7110
	{
7111
		$filter_query = $this->getFilter($filters,true,true);
7112
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7113
					
7114
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7115
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
7116
                    GROUP BY spotter_output.arrival_airport_country
7117
					ORDER BY airport_arrival_country_count DESC";
7118
      
7119
		
7120
		$sth = $this->db->prepare($query);
7121
		$sth->execute(array(':airline_icao' => $airline_icao));
7122
      
7123
		$airport_array = array();
7124
		$temp_array = array();
7125
        
7126
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7127
		{
7128
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7129
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7130
          
7131
			$airport_array[] = $temp_array;
7132
		}
7133
7134
		return $airport_array;
7135
	}
7136
	
7137
	
7138
	/**
7139
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
7140
	*
7141
	* @return Array the airport list
7142
	*
7143
	*/
7144
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
7145
	{
7146
		$filter_query = $this->getFilter($filters,true,true);
7147
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7148
		$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 
7149
			    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 
7150
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7151
			    ORDER BY airport_arrival_icao_count DESC";
7152
      
7153
		
7154
		$sth = $this->db->prepare($query);
7155
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7156
      
7157
		$airport_array = array();
7158
		$temp_array = array();
7159
        
7160
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7161
		{
7162
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7163
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7164
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7165
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7166
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7167
          
7168
			$airport_array[] = $temp_array;
7169
		}
7170
7171
		return $airport_array;
7172
	}
7173
	
7174
	
7175
	
7176
	/**
7177
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
7178
	*
7179
	* @return Array the airport list
7180
	*
7181
	*/
7182
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
7183
	{
7184
		$filter_query = $this->getFilter($filters,true,true);
7185
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7186
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7187
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
7188
                    GROUP BY spotter_output.arrival_airport_country
7189
					ORDER BY airport_arrival_country_count DESC";
7190
      
7191
		
7192
		$sth = $this->db->prepare($query);
7193
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7194
      
7195
		$airport_array = array();
7196
		$temp_array = array();
7197
        
7198
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7199
		{
7200
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7201
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7202
          
7203
			$airport_array[] = $temp_array;
7204
		}
7205
7206
		return $airport_array;
7207
	}
7208
	
7209
	
7210
	/**
7211
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
7212
	*
7213
	* @return Array the airport list
7214
	*
7215
	*/
7216
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
7217
	{
7218
		$filter_query = $this->getFilter($filters,true,true);
7219
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7220
7221
		$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 
7222
			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 
7223
                    GROUP BY spotter_output.arrival_airport_icao
7224
					ORDER BY airport_arrival_icao_count DESC";
7225
      
7226
		
7227
		$sth = $this->db->prepare($query);
7228
		$sth->execute(array(':registration' => $registration));
7229
      
7230
		$airport_array = array();
7231
		$temp_array = array();
7232
        
7233
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7234
		{
7235
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7236
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7237
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7238
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7239
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7240
          
7241
			$airport_array[] = $temp_array;
7242
		}
7243
7244
		return $airport_array;
7245
	}
7246
	
7247
	
7248
	/**
7249
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
7250
	*
7251
	* @return Array the airport list
7252
	*
7253
	*/
7254
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
7255
	{
7256
		$filter_query = $this->getFilter($filters,true,true);
7257
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
7258
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7259
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
7260
                    GROUP BY spotter_output.arrival_airport_country
7261
					ORDER BY airport_arrival_country_count DESC";
7262
      
7263
		
7264
		$sth = $this->db->prepare($query);
7265
		$sth->execute(array(':registration' => $registration));
7266
      
7267
		$airport_array = array();
7268
		$temp_array = array();
7269
        
7270
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7271
		{
7272
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7273
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7274
          
7275
			$airport_array[] = $temp_array;
7276
		}
7277
7278
		return $airport_array;
7279
	}
7280
	
7281
	
7282
	
7283
	/**
7284
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
7285
	*
7286
	* @return Array the airport list
7287
	*
7288
	*/
7289
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
7290
	{
7291
		$filter_query = $this->getFilter($filters,true,true);
7292
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7293
		$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 
7294
			    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 
7295
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7296
			    ORDER BY airport_arrival_icao_count DESC";
7297
      
7298
		
7299
		$sth = $this->db->prepare($query);
7300
		$sth->execute(array(':airport_icao' => $airport_icao));
7301
      
7302
		$airport_array = array();
7303
		$temp_array = array();
7304
        
7305
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7306
		{
7307
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7308
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7309
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7310
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7311
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7312
          
7313
			$airport_array[] = $temp_array;
7314
		}
7315
7316
		return $airport_array;
7317
	}
7318
	
7319
	
7320
	/**
7321
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
7322
	*
7323
	* @return Array the airport list
7324
	*
7325
	*/
7326
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
7327
	{
7328
		$filter_query = $this->getFilter($filters,true,true);
7329
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7330
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7331
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
7332
                    GROUP BY spotter_output.arrival_airport_country
7333
					ORDER BY airport_arrival_country_count DESC";
7334
      
7335
		
7336
		$sth = $this->db->prepare($query);
7337
		$sth->execute(array(':airport_icao' => $airport_icao));
7338
      
7339
		$airport_array = array();
7340
		$temp_array = array();
7341
        
7342
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7343
		{
7344
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7345
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7346
          
7347
			$airport_array[] = $temp_array;
7348
		}
7349
7350
		return $airport_array;
7351
	}
7352
	
7353
	
7354
	/**
7355
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
7356
	*
7357
	* @return Array the airport list
7358
	*
7359
	*/
7360
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
7361
	{
7362
		$filter_query = $this->getFilter($filters,true,true);
7363
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7364
		$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 
7365
			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 
7366
                    GROUP BY spotter_output.arrival_airport_icao
7367
					ORDER BY airport_arrival_icao_count DESC";
7368
      
7369
		
7370
		$sth = $this->db->prepare($query);
7371
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7372
      
7373
		$airport_array = array();
7374
		$temp_array = array();
7375
        
7376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7377
		{
7378
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7379
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7380
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7381
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7382
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7383
          
7384
			$airport_array[] = $temp_array;
7385
		}
7386
7387
		return $airport_array;
7388
	}
7389
	
7390
	
7391
	
7392
	/**
7393
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
7394
	*
7395
	* @return Array the airport list
7396
	*
7397
	*/
7398
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
7399
	{
7400
		$filter_query = $this->getFilter($filters,true,true);
7401
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7402
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7403
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
7404
                    GROUP BY spotter_output.arrival_airport_country
7405
					ORDER BY airport_arrival_country_count DESC";
7406
      
7407
		
7408
		$sth = $this->db->prepare($query);
7409
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7410
      
7411
		$airport_array = array();
7412
		$temp_array = array();
7413
        
7414
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7415
		{
7416
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7417
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7418
          
7419
			$airport_array[] = $temp_array;
7420
		}
7421
7422
		return $airport_array;
7423
	}
7424
	
7425
	
7426
	
7427
	/**
7428
	* Gets all arrival airports of the airplanes that have flown over based on a date
7429
	*
7430
	* @return Array the airport list
7431
	*
7432
	*/
7433
	public function countAllArrivalAirportsByDate($date,$filters = array())
7434
	{
7435
		global $globalTimezone, $globalDBdriver;
7436
		$filter_query = $this->getFilter($filters,true,true);
7437
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7438
		if ($globalTimezone != '') {
7439
			date_default_timezone_set($globalTimezone);
7440
			$datetime = new DateTime($date);
7441
			$offset = $datetime->format('P');
7442
		} else $offset = '+00:00';
7443
7444
		if ($globalDBdriver == 'mysql') {
7445
			$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 
7446
					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  
7447
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7448
					ORDER BY airport_arrival_icao_count DESC";
7449
		} else {
7450
			$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 
7451
					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  
7452
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7453
					ORDER BY airport_arrival_icao_count DESC";
7454
		}
7455
		
7456
		$sth = $this->db->prepare($query);
7457
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7458
      
7459
		$airport_array = array();
7460
		$temp_array = array();
7461
        
7462
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7463
		{
7464
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7465
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7466
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7467
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7468
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7469
          
7470
			$airport_array[] = $temp_array;
7471
		}
7472
		return $airport_array;
7473
	}
7474
	
7475
	
7476
	
7477
	/**
7478
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
7479
	*
7480
	* @return Array the airport list
7481
	*
7482
	*/
7483
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
7484
	{
7485
		global $globalTimezone, $globalDBdriver;
7486
		$filter_query = $this->getFilter($filters,true,true);
7487
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7488
		if ($globalTimezone != '') {
7489
			date_default_timezone_set($globalTimezone);
7490
			$datetime = new DateTime($date);
7491
			$offset = $datetime->format('P');
7492
		} else $offset = '+00:00';
7493
7494
		if ($globalDBdriver == 'mysql') {
7495
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7496
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7497
					GROUP BY spotter_output.arrival_airport_country
7498
					ORDER BY airport_arrival_country_count DESC";
7499
		} else {
7500
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7501
					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 
7502
					GROUP BY spotter_output.arrival_airport_country
7503
					ORDER BY airport_arrival_country_count DESC";
7504
		}
7505
		
7506
		$sth = $this->db->prepare($query);
7507
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7508
      
7509
		$airport_array = array();
7510
		$temp_array = array();
7511
        
7512
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7513
		{
7514
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7515
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7516
          
7517
			$airport_array[] = $temp_array;
7518
		}
7519
		return $airport_array;
7520
	}
7521
	
7522
	
7523
	
7524
	/**
7525
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
7526
	*
7527
	* @return Array the airport list
7528
	*
7529
	*/
7530
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
7531
	{
7532
		$filter_query = $this->getFilter($filters,true,true);
7533
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7534
		$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 
7535
		    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  
7536
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7537
		    ORDER BY airport_arrival_icao_count DESC";
7538
      
7539
		
7540
		$sth = $this->db->prepare($query);
7541
		$sth->execute(array(':ident' => $ident));
7542
      
7543
		$airport_array = array();
7544
		$temp_array = array();
7545
        
7546
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7547
		{
7548
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7549
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7550
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7551
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7552
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7553
          
7554
			$airport_array[] = $temp_array;
7555
		}
7556
7557
		return $airport_array;
7558
	}
7559
	
7560
	
7561
	/**
7562
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
7563
	*
7564
	* @return Array the airport list
7565
	*
7566
	*/
7567
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
7568
	{
7569
		$filter_query = $this->getFilter($filters,true,true);
7570
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7571
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7572
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
7573
                    GROUP BY spotter_output.arrival_airport_country
7574
					ORDER BY airport_arrival_country_count DESC";
7575
      
7576
		
7577
		$sth = $this->db->prepare($query);
7578
		$sth->execute(array(':ident' => $ident));
7579
      
7580
		$airport_array = array();
7581
		$temp_array = array();
7582
        
7583
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7584
		{
7585
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7586
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7587
          
7588
			$airport_array[] = $temp_array;
7589
		}
7590
7591
		return $airport_array;
7592
	}
7593
	
7594
	
7595
	
7596
	/**
7597
	* Gets all arrival airports of the airplanes that have flown over based on a country
7598
	*
7599
	* @return Array the airport list
7600
	*
7601
	*/
7602
	public function countAllArrivalAirportsByCountry($country,$filters = array())
7603
	{
7604
		$filter_query = $this->getFilter($filters,true,true);
7605
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7606
		$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 
7607
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
7608
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7609
			    ORDER BY airport_arrival_icao_count DESC";
7610
      
7611
		
7612
		$sth = $this->db->prepare($query);
7613
		$sth->execute(array(':country' => $country));
7614
      
7615
		$airport_array = array();
7616
		$temp_array = array();
7617
        
7618
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7619
		{
7620
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7621
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7622
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7623
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7624
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7625
          
7626
			$airport_array[] = $temp_array;
7627
		}
7628
7629
		return $airport_array;
7630
	}
7631
	
7632
	
7633
	/**
7634
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
7635
	*
7636
	* @return Array the airport list
7637
	*
7638
	*/
7639
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
7640
	{
7641
		global $globalDBdriver;
7642
		$filter_query = $this->getFilter($filters,true,true);
7643
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7644
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7645
			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 
7646
                    GROUP BY spotter_output.arrival_airport_country
7647
					ORDER BY airport_arrival_country_count DESC";
7648
      
7649
		
7650
		$sth = $this->db->prepare($query);
7651
		$sth->execute(array(':country' => $country));
7652
      
7653
		$airport_array = array();
7654
		$temp_array = array();
7655
        
7656
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7657
		{
7658
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7659
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7660
          
7661
			$airport_array[] = $temp_array;
7662
		}
7663
7664
		return $airport_array;
7665
	}
7666
7667
7668
7669
	/**
7670
	* Counts all airport departure countries
7671
	*
7672
	* @return Array the airport departure list
7673
	*
7674
	*/
7675
	public function countAllDepartureCountries($filters = array(),$year = '',$month = '', $day = '')
7676
	{
7677
		global $globalDBdriver;
7678
		$filter_query = $this->getFilter($filters,true,true);
7679
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7680
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.departure_airport_icao <> ''";
7681
		$query_values = array();
7682
		if ($year != '') {
7683
			if ($globalDBdriver == 'mysql') {
7684
				$query .= " AND YEAR(spotter_output.date) = :year";
7685
				$query_values = array_merge($query_values,array(':year' => $year));
7686
			} else {
7687
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7688
				$query_values = array_merge($query_values,array(':year' => $year));
7689
			}
7690
		}
7691
		if ($month != '') {
7692
			if ($globalDBdriver == 'mysql') {
7693
				$query .= " AND MONTH(spotter_output.date) = :month";
7694
				$query_values = array_merge($query_values,array(':month' => $month));
7695
			} else {
7696
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7697
				$query_values = array_merge($query_values,array(':month' => $month));
7698
			}
7699
		}
7700
		if ($day != '') {
7701
			if ($globalDBdriver == 'mysql') {
7702
				$query .= " AND DAY(spotter_output.date) = :day";
7703
				$query_values = array_merge($query_values,array(':day' => $day));
7704
			} else {
7705
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7706
				$query_values = array_merge($query_values,array(':day' => $day));
7707
			}
7708
		}
7709
		$query .= " GROUP BY spotter_output.departure_airport_country
7710
					ORDER BY airport_departure_country_count DESC
7711
					LIMIT 10 OFFSET 0";
7712
      
7713
		
7714
		$sth = $this->db->prepare($query);
7715
		$sth->execute($query_values);
7716
      
7717
		$airport_array = array();
7718
		$temp_array = array();
7719
        
7720
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7721
		{
7722
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7723
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7724
          
7725
			$airport_array[] = $temp_array;
7726
		}
7727
7728
		return $airport_array;
7729
	}
7730
	
7731
	
7732
	/**
7733
	* Counts all airport arrival countries
7734
	*
7735
	* @return Array the airport arrival list
7736
	*
7737
	*/
7738
	public function countAllArrivalCountries($limit = true,$filters = array(),$year = '',$month = '',$day = '')
7739
	{
7740
		global $globalDBdriver;
7741
		$filter_query = $this->getFilter($filters,true,true);
7742
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7743
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> ''";
7744
		$query_values = array();
7745
		if ($year != '') {
7746
			if ($globalDBdriver == 'mysql') {
7747
				$query .= " AND YEAR(spotter_output.date) = :year";
7748
				$query_values = array_merge($query_values,array(':year' => $year));
7749
			} else {
7750
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
7751
				$query_values = array_merge($query_values,array(':year' => $year));
7752
			}
7753
		}
7754
		if ($month != '') {
7755
			if ($globalDBdriver == 'mysql') {
7756
				$query .= " AND MONTH(spotter_output.date) = :month";
7757
				$query_values = array_merge($query_values,array(':month' => $month));
7758
			} else {
7759
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
7760
				$query_values = array_merge($query_values,array(':month' => $month));
7761
			}
7762
		}
7763
		if ($day != '') {
7764
			if ($globalDBdriver == 'mysql') {
7765
				$query .= " AND DAY(spotter_output.date) = :day";
7766
				$query_values = array_merge($query_values,array(':day' => $day));
7767
			} else {
7768
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
7769
				$query_values = array_merge($query_values,array(':day' => $day));
7770
			}
7771
		}
7772
		$query .= " GROUP BY spotter_output.arrival_airport_country
7773
					ORDER BY airport_arrival_country_count DESC";
7774
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7775
      
7776
		
7777
		$sth = $this->db->prepare($query);
7778
		$sth->execute($query_values);
7779
      
7780
		$airport_array = array();
7781
		$temp_array = array();
7782
        
7783
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7784
		{
7785
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7786
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7787
          
7788
			$airport_array[] = $temp_array;
7789
		}
7790
7791
		return $airport_array;
7792
	}
7793
7794
7795
7796
7797
7798
	/**
7799
	* Gets all route combinations
7800
	*
7801
	* @return Array the route list
7802
	*
7803
	*/
7804
	public function countAllRoutes($filters = array())
7805
	{
7806
		$filter_query = $this->getFilter($filters,true,true);
7807
		$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
7808
		    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 <> ''
7809
                    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
7810
                    ORDER BY route_count DESC
7811
		    LIMIT 10 OFFSET 0";
7812
      
7813
		
7814
		$sth = $this->db->prepare($query);
7815
		$sth->execute();
7816
      
7817
		$routes_array = array();
7818
		$temp_array = array();
7819
        
7820
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7821
		{
7822
			$temp_array['route_count'] = $row['route_count'];
7823
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7824
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7825
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7826
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7827
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7828
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7829
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7830
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7831
          
7832
			$routes_array[] = $temp_array;
7833
		}
7834
7835
		return $routes_array;
7836
	}
7837
	
7838
	
7839
	
7840
	
7841
	/**
7842
	* Gets all route combinations based on an aircraft
7843
	*
7844
	* @return Array the route list
7845
	*
7846
	*/
7847
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
7848
	{
7849
		$filter_query = $this->getFilter($filters,true,true);
7850
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7851
		$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
7852
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7853
			    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 
7854
			    ORDER BY route_count DESC";
7855
		
7856
		$sth = $this->db->prepare($query);
7857
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7858
      
7859
		$routes_array = array();
7860
		$temp_array = array();
7861
        
7862
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7863
		{
7864
			$temp_array['route_count'] = $row['route_count'];
7865
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7866
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7867
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7868
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7869
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7870
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7871
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7872
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7873
          
7874
			$routes_array[] = $temp_array;
7875
		}
7876
7877
		return $routes_array;
7878
	}
7879
	
7880
	
7881
	/**
7882
	* Gets all route combinations based on an aircraft registration
7883
	*
7884
	* @return Array the route list
7885
	*
7886
	*/
7887
	public function countAllRoutesByRegistration($registration, $filters = array())
7888
	{
7889
		$filter_query = $this->getFilter($filters,true,true);
7890
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
7891
		$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
7892
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
7893
                    GROUP BY route
7894
                    ORDER BY route_count DESC";
7895
      
7896
		
7897
		$sth = $this->db->prepare($query);
7898
		$sth->execute(array(':registration' => $registration));
7899
      
7900
		$routes_array = array();
7901
		$temp_array = array();
7902
        
7903
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7904
		{
7905
			$temp_array['route_count'] = $row['route_count'];
7906
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7907
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7908
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7909
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7910
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7911
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7912
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7913
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7914
          
7915
			$routes_array[] = $temp_array;
7916
		}
7917
7918
		return $routes_array;
7919
	}
7920
	
7921
	
7922
	
7923
	/**
7924
	* Gets all route combinations based on an airline
7925
	*
7926
	* @return Array the route list
7927
	*
7928
	*/
7929
	public function countAllRoutesByAirline($airline_icao, $filters = array())
7930
	{
7931
		$filter_query = $this->getFilter($filters,true,true);
7932
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7933
		$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
7934
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
7935
			    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 
7936
			    ORDER BY route_count DESC";
7937
      
7938
		
7939
		$sth = $this->db->prepare($query);
7940
		$sth->execute(array(':airline_icao' => $airline_icao));
7941
      
7942
		$routes_array = array();
7943
		$temp_array = array();
7944
        
7945
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7946
		{
7947
			$temp_array['route_count'] = $row['route_count'];
7948
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7949
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7950
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7951
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7952
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7953
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7954
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7955
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7956
          
7957
			$routes_array[] = $temp_array;
7958
		}
7959
7960
		return $routes_array;
7961
	}
7962
	
7963
	
7964
	
7965
	/**
7966
	* Gets all route combinations based on an airport
7967
	*
7968
	* @return Array the route list
7969
	*
7970
	*/
7971
	public function countAllRoutesByAirport($airport_icao, $filters = array())
7972
	{
7973
		$filter_query = $this->getFilter($filters,true,true);
7974
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7975
		$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
7976
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
7977
			    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 
7978
			    ORDER BY route_count DESC";
7979
		
7980
		$sth = $this->db->prepare($query);
7981
		$sth->execute(array(':airport_icao' => $airport_icao));
7982
      
7983
		$routes_array = array();
7984
		$temp_array = array();
7985
        
7986
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7987
		{
7988
			$temp_array['route_count'] = $row['route_count'];
7989
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7990
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7991
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7992
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7993
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7994
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7995
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7996
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7997
          
7998
			$routes_array[] = $temp_array;
7999
		}
8000
8001
		return $routes_array;
8002
	}
8003
	
8004
	
8005
	
8006
	/**
8007
	* Gets all route combinations based on an country
8008
	*
8009
	* @return Array the route list
8010
	*
8011
	*/
8012
	public function countAllRoutesByCountry($country, $filters = array())
8013
	{
8014
		$filter_query = $this->getFilter($filters,true,true);
8015
		$country = filter_var($country,FILTER_SANITIZE_STRING);
8016
		$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
8017
			    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 
8018
			    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 
8019
			    ORDER BY route_count DESC";
8020
		
8021
		$sth = $this->db->prepare($query);
8022
		$sth->execute(array(':country' => $country));
8023
      
8024
		$routes_array = array();
8025
		$temp_array = array();
8026
        
8027
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8028
		{
8029
			$temp_array['route_count'] = $row['route_count'];
8030
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8031
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8032
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8033
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8034
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8035
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8036
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8037
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8038
          
8039
			$routes_array[] = $temp_array;
8040
		}
8041
8042
		return $routes_array;
8043
	}
8044
8045
8046
	/**
8047
	* Gets all route combinations based on an date
8048
	*
8049
	* @return Array the route list
8050
	*
8051
	*/
8052
	public function countAllRoutesByDate($date, $filters = array())
8053
	{
8054
		global $globalTimezone, $globalDBdriver;
8055
		$filter_query = $this->getFilter($filters,true,true);
8056
		$date = filter_var($date,FILTER_SANITIZE_STRING);
8057
		if ($globalTimezone != '') {
8058
			date_default_timezone_set($globalTimezone);
8059
			$datetime = new DateTime($date);
8060
			$offset = $datetime->format('P');
8061
		} else $offset = '+00:00';
8062
		
8063
		if ($globalDBdriver == 'mysql') {
8064
			$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
8065
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
8066
				    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
8067
				    ORDER BY route_count DESC";
8068
		} else {
8069
			$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
8070
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
8071
				    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
8072
				    ORDER BY route_count DESC";
8073
		}
8074
		
8075
		$sth = $this->db->prepare($query);
8076
		$sth->execute(array(':date' => $date, ':offset' => $offset));
8077
      
8078
		$routes_array = array();
8079
		$temp_array = array();
8080
        
8081
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8082
		{
8083
			$temp_array['route_count'] = $row['route_count'];
8084
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8085
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8086
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8087
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8088
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8089
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8090
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8091
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8092
          
8093
			$routes_array[] = $temp_array;
8094
		}
8095
8096
		return $routes_array;
8097
	}
8098
	
8099
	
8100
	/**
8101
	* Gets all route combinations based on an ident/callsign
8102
	*
8103
	* @return Array the route list
8104
	*
8105
	*/
8106
	public function countAllRoutesByIdent($ident, $filters = array())
8107
	{
8108
		$filter_query = $this->getFilter($filters,true,true);
8109
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
8110
		$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
8111
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
8112
                    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
8113
                    ORDER BY route_count DESC";
8114
      
8115
		
8116
		$sth = $this->db->prepare($query);
8117
		$sth->execute(array(':ident' => $ident));
8118
      
8119
		$routes_array = array();
8120
		$temp_array = array();
8121
        
8122
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8123
		{
8124
			$temp_array['route_count'] = $row['route_count'];
8125
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8126
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8127
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8128
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8129
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8130
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8131
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8132
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8133
          
8134
			$routes_array[] = $temp_array;
8135
		}
8136
8137
		return $routes_array;
8138
	}
8139
	
8140
	
8141
	/**
8142
	* Gets all route combinations based on an manufacturer
8143
	*
8144
	* @return Array the route list
8145
	*
8146
	*/
8147
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
8148
	{
8149
		$filter_query = $this->getFilter($filters,true,true);
8150
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8151
		$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
8152
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
8153
                    GROUP BY route
8154
                    ORDER BY route_count DESC";
8155
      
8156
		
8157
		$sth = $this->db->prepare($query);
8158
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
8159
      
8160
		$routes_array = array();
8161
		$temp_array = array();
8162
        
8163
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8164
		{
8165
			$temp_array['route_count'] = $row['route_count'];
8166
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8167
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8168
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8169
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8170
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8171
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8172
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8173
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8174
          
8175
			$routes_array[] = $temp_array;
8176
		}
8177
8178
		return $routes_array;
8179
	}
8180
8181
	
8182
	
8183
	/**
8184
	* Gets all route combinations with waypoints
8185
	*
8186
	* @return Array the route list
8187
	*
8188
	*/
8189
	public function countAllRoutesWithWaypoints($filters = array())
8190
	{
8191
		$filter_query = $this->getFilter($filters,true,true);
8192
		$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
8193
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
8194
                    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
8195
                    ORDER BY route_count DESC
8196
		    LIMIT 10 OFFSET 0";
8197
      
8198
		
8199
		$sth = $this->db->prepare($query);
8200
		$sth->execute();
8201
      
8202
		$routes_array = array();
8203
		$temp_array = array();
8204
        
8205
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8206
		{
8207
			$temp_array['spotter_id'] = $row['spotter_id'];
8208
			$temp_array['route_count'] = $row['route_count'];
8209
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
8210
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
8211
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
8212
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
8213
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
8214
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
8215
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
8216
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
8217
          
8218
			$routes_array[] = $temp_array;
8219
		}
8220
8221
		return $routes_array;
8222
	}
8223
	
8224
	/**
8225
	* Gets all callsigns that have flown over
8226
	*
8227
	* @return Array the callsign list
8228
	*
8229
	*/
8230
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array(),$year = '', $month = '', $day = '')
8231
	{
8232
		global $globalDBdriver;
8233
		$filter_query = $this->getFilter($filters,true,true);
8234
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
8235
                    FROM spotter_output".$filter_query." spotter_output.ident <> '' ";
8236
		 if ($olderthanmonths > 0) {
8237
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
8238
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
8239
		}
8240
		if ($sincedate != '') {
8241
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
8242
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
8243
		}
8244
		$query_values = array();
8245
		if ($year != '') {
8246
			if ($globalDBdriver == 'mysql') {
8247
				$query .= " AND YEAR(spotter_output.date) = :year";
8248
				$query_values = array_merge($query_values,array(':year' => $year));
8249
			} else {
8250
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
8251
				$query_values = array_merge($query_values,array(':year' => $year));
8252
			}
8253
		}
8254
		if ($month != '') {
8255
			if ($globalDBdriver == 'mysql') {
8256
				$query .= " AND MONTH(spotter_output.date) = :month";
8257
				$query_values = array_merge($query_values,array(':month' => $month));
8258
			} else {
8259
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
8260
				$query_values = array_merge($query_values,array(':month' => $month));
8261
			}
8262
		}
8263
		if ($day != '') {
8264
			if ($globalDBdriver == 'mysql') {
8265
				$query .= " AND DAY(spotter_output.date) = :day";
8266
				$query_values = array_merge($query_values,array(':day' => $day));
8267
			} else {
8268
				$query .= " AND EXTRACT(DAY FROM spotter_output.date) = :day";
8269
				$query_values = array_merge($query_values,array(':day' => $day));
8270
			}
8271
		}
8272
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
8273
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8274
      		
8275
		$sth = $this->db->prepare($query);
8276
		$sth->execute($query_values);
8277
      
8278
		$callsign_array = array();
8279
		$temp_array = array();
8280
        
8281
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8282
		{
8283
			$temp_array['callsign_icao'] = $row['ident'];
8284
			$temp_array['airline_name'] = $row['airline_name'];
8285
			$temp_array['airline_icao'] = $row['airline_icao'];
8286
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
8287
          
8288
			$callsign_array[] = $temp_array;
8289
		}
8290
8291
		return $callsign_array;
8292
	}
8293
8294
	/**
8295
	* Gets all callsigns that have flown over
8296
	*
8297
	* @return Array the callsign list
8298
	*
8299
	*/
8300
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
8301
	{
8302
		global $globalDBdriver;
8303
		$filter_query = $this->getFilter($filters,true,true);
8304
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
8305
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
8306
		 if ($olderthanmonths > 0) {
8307
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
8308
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
8309
		}
8310
		if ($sincedate != '') {
8311
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
8312
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
8313
		}
8314
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
8315
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
8316
      		
8317
		$sth = $this->db->prepare($query);
8318
		$sth->execute();
8319
      
8320
		$callsign_array = array();
8321
		$temp_array = array();
8322
        
8323
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8324
		{
8325
			$temp_array['callsign_icao'] = $row['ident'];
8326
			$temp_array['airline_name'] = $row['airline_name'];
8327
			$temp_array['airline_icao'] = $row['airline_icao'];
8328
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
8329
          
8330
			$callsign_array[] = $temp_array;
8331
		}
8332
8333
		return $callsign_array;
8334
	}
8335
8336
8337
8338
8339
	/**
8340
	* Counts all dates
8341
	*
8342
	* @return Array the date list
8343
	*
8344
	*/
8345
	public function countAllDates($filters = array())
8346
	{
8347
		global $globalTimezone, $globalDBdriver;
8348
		if ($globalTimezone != '') {
8349
			date_default_timezone_set($globalTimezone);
8350
			$datetime = new DateTime();
8351
			$offset = $datetime->format('P');
8352
		} else $offset = '+00:00';
8353
8354
		if ($globalDBdriver == 'mysql') {
8355
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8356
								FROM spotter_output";
8357
			$query .= $this->getFilter($filters);
8358
			$query .= " GROUP BY date_name 
8359
								ORDER BY date_count DESC
8360
								LIMIT 10 OFFSET 0";
8361
		} else {
8362
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
8363
								FROM spotter_output";
8364
			$query .= $this->getFilter($filters);
8365
			$query .= " GROUP BY date_name 
8366
								ORDER BY date_count DESC
8367
								LIMIT 10 OFFSET 0";
8368
		}
8369
      
8370
		
8371
		$sth = $this->db->prepare($query);
8372
		$sth->execute(array(':offset' => $offset));
8373
      
8374
		$date_array = array();
8375
		$temp_array = array();
8376
        
8377
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8378
		{
8379
			$temp_array['date_name'] = $row['date_name'];
8380
			$temp_array['date_count'] = $row['date_count'];
8381
8382
			$date_array[] = $temp_array;
8383
		}
8384
8385
		return $date_array;
8386
	}
8387
	
8388
	/**
8389
	* Counts all dates
8390
	*
8391
	* @return Array the date list
8392
	*
8393
	*/
8394
	public function countAllDatesByAirlines($filters = array())
8395
	{
8396
		global $globalTimezone, $globalDBdriver;
8397
		if ($globalTimezone != '') {
8398
			date_default_timezone_set($globalTimezone);
8399
			$datetime = new DateTime();
8400
			$offset = $datetime->format('P');
8401
		} else $offset = '+00:00';
8402
		$filter_query = $this->getFilter($filters,true,true);
8403
		if ($globalDBdriver == 'mysql') {
8404
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8405
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8406
								GROUP BY spotter_output.airline_icao, date_name 
8407
								ORDER BY date_count DESC
8408
								LIMIT 10 OFFSET 0";
8409
		} else {
8410
			$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
8411
								FROM spotter_output 
8412
								WHERE spotter_output.airline_icao <> '' 
8413
								GROUP BY spotter_output.airline_icao, date_name 
8414
								ORDER BY date_count DESC
8415
								LIMIT 10 OFFSET 0";
8416
		}
8417
      
8418
		
8419
		$sth = $this->db->prepare($query);
8420
		$sth->execute(array(':offset' => $offset));
8421
      
8422
		$date_array = array();
8423
		$temp_array = array();
8424
        
8425
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8426
		{
8427
			$temp_array['date_name'] = $row['date_name'];
8428
			$temp_array['date_count'] = $row['date_count'];
8429
			$temp_array['airline_icao'] = $row['airline_icao'];
8430
8431
			$date_array[] = $temp_array;
8432
		}
8433
8434
		return $date_array;
8435
	}	
8436
	
8437
	/**
8438
	* Counts all dates during the last 7 days
8439
	*
8440
	* @return Array the date list
8441
	*
8442
	*/
8443
	public function countAllDatesLast7Days($filters = array())
8444
	{
8445
		global $globalTimezone, $globalDBdriver;
8446
		if ($globalTimezone != '') {
8447
			date_default_timezone_set($globalTimezone);
8448
			$datetime = new DateTime();
8449
			$offset = $datetime->format('P');
8450
		} else $offset = '+00:00';
8451
		$filter_query = $this->getFilter($filters,true,true);
8452
		if ($globalDBdriver == 'mysql') {
8453
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8454
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
8455
			$query .= " GROUP BY date_name 
8456
								ORDER BY spotter_output.date ASC";
8457
			$query_data = array(':offset' => $offset);
8458
		} else {
8459
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
8460
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
8461
			$query .= " GROUP BY date_name 
8462
								ORDER BY date_name ASC";
8463
			$query_data = array(':offset' => $offset);
8464
    		}
8465
		
8466
		$sth = $this->db->prepare($query);
8467
		$sth->execute($query_data);
8468
      
8469
		$date_array = array();
8470
		$temp_array = array();
8471
        
8472
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8473
		{
8474
			$temp_array['date_name'] = $row['date_name'];
8475
			$temp_array['date_count'] = $row['date_count'];
8476
          
8477
			$date_array[] = $temp_array;
8478
		}
8479
8480
		return $date_array;
8481
	}
8482
8483
	/**
8484
	* Counts all dates during the last month
8485
	*
8486
	* @return Array the date list
8487
	*
8488
	*/
8489
	public function countAllDatesLastMonth($filters = array())
8490
	{
8491
		global $globalTimezone, $globalDBdriver;
8492
		if ($globalTimezone != '') {
8493
			date_default_timezone_set($globalTimezone);
8494
			$datetime = new DateTime();
8495
			$offset = $datetime->format('P');
8496
		} else $offset = '+00:00';
8497
		$filter_query = $this->getFilter($filters,true,true);
8498
		if ($globalDBdriver == 'mysql') {
8499
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8500
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
8501
			$query .= " GROUP BY date_name 
8502
								ORDER BY spotter_output.date ASC";
8503
			$query_data = array(':offset' => $offset);
8504
		} else {
8505
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
8506
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
8507
			$query .= " GROUP BY date_name 
8508
								ORDER BY date_name ASC";
8509
			$query_data = array(':offset' => $offset);
8510
    		}
8511
		
8512
		$sth = $this->db->prepare($query);
8513
		$sth->execute($query_data);
8514
      
8515
		$date_array = array();
8516
		$temp_array = array();
8517
        
8518
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8519
		{
8520
			$temp_array['date_name'] = $row['date_name'];
8521
			$temp_array['date_count'] = $row['date_count'];
8522
          
8523
			$date_array[] = $temp_array;
8524
		}
8525
8526
		return $date_array;
8527
	}
8528
8529
8530
	/**
8531
	* Counts all dates during the last month
8532
	*
8533
	* @return Array the date list
8534
	*
8535
	*/
8536
	public function countAllDatesLastMonthByAirlines($filters = array())
8537
	{
8538
		global $globalTimezone, $globalDBdriver;
8539
		$filter_query = $this->getFilter($filters,true,true);
8540
		if ($globalTimezone != '') {
8541
			date_default_timezone_set($globalTimezone);
8542
			$datetime = new DateTime();
8543
			$offset = $datetime->format('P');
8544
		} else $offset = '+00:00';
8545
		
8546
		if ($globalDBdriver == 'mysql') {
8547
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8548
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
8549
								GROUP BY spotter_output.airline_icao, date_name 
8550
								ORDER BY spotter_output.date ASC";
8551
			$query_data = array(':offset' => $offset);
8552
		} else {
8553
			$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
8554
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
8555
								GROUP BY spotter_output.airline_icao, date_name 
8556
								ORDER BY date_name ASC";
8557
			$query_data = array(':offset' => $offset);
8558
    		}
8559
		
8560
		$sth = $this->db->prepare($query);
8561
		$sth->execute($query_data);
8562
      
8563
		$date_array = array();
8564
		$temp_array = array();
8565
        
8566
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8567
		{
8568
			$temp_array['date_name'] = $row['date_name'];
8569
			$temp_array['date_count'] = $row['date_count'];
8570
			$temp_array['airline_icao'] = $row['airline_icao'];
8571
          
8572
			$date_array[] = $temp_array;
8573
		}
8574
8575
		return $date_array;
8576
	}
8577
	
8578
8579
	/**
8580
	* Counts all month
8581
	*
8582
	* @return Array the month list
8583
	*
8584
	*/
8585
	public function countAllMonths($filters = array())
8586
	{
8587
		global $globalTimezone, $globalDBdriver;
8588
		if ($globalTimezone != '') {
8589
			date_default_timezone_set($globalTimezone);
8590
			$datetime = new DateTime();
8591
			$offset = $datetime->format('P');
8592
		} else $offset = '+00:00';
8593
8594
		if ($globalDBdriver == 'mysql') {
8595
			$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
8596
								FROM spotter_output";
8597
			$query .= $this->getFilter($filters);
8598
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
8599
		} else {
8600
			$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
8601
								FROM spotter_output";
8602
			$query .= $this->getFilter($filters);
8603
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
8604
		}
8605
      
8606
		
8607
		$sth = $this->db->prepare($query);
8608
		$sth->execute(array(':offset' => $offset));
8609
      
8610
		$date_array = array();
8611
		$temp_array = array();
8612
        
8613
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8614
		{
8615
			$temp_array['month_name'] = $row['month_name'];
8616
			$temp_array['year_name'] = $row['year_name'];
8617
			$temp_array['date_count'] = $row['date_count'];
8618
8619
			$date_array[] = $temp_array;
8620
		}
8621
8622
		return $date_array;
8623
	}
8624
8625
	/**
8626
	* Counts all month
8627
	*
8628
	* @return Array the month list
8629
	*
8630
	*/
8631
	public function countAllMonthsByAirlines($filters = array())
8632
	{
8633
		global $globalTimezone, $globalDBdriver;
8634
		$filter_query = $this->getFilter($filters,true,true);
8635
		if ($globalTimezone != '') {
8636
			date_default_timezone_set($globalTimezone);
8637
			$datetime = new DateTime();
8638
			$offset = $datetime->format('P');
8639
		} else $offset = '+00:00';
8640
8641
		if ($globalDBdriver == 'mysql') {
8642
			$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
8643
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8644
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8645
								ORDER BY date_count DESC";
8646
		} else {
8647
			$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
8648
								FROM spotter_output 
8649
								WHERE spotter_output.airline_icao <> '' 
8650
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8651
								ORDER BY date_count DESC";
8652
		}
8653
      
8654
		
8655
		$sth = $this->db->prepare($query);
8656
		$sth->execute(array(':offset' => $offset));
8657
      
8658
		$date_array = array();
8659
		$temp_array = array();
8660
        
8661
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8662
		{
8663
			$temp_array['month_name'] = $row['month_name'];
8664
			$temp_array['year_name'] = $row['year_name'];
8665
			$temp_array['date_count'] = $row['date_count'];
8666
			$temp_array['airline_icao'] = $row['airline_icao'];
8667
8668
			$date_array[] = $temp_array;
8669
		}
8670
8671
		return $date_array;
8672
	}
8673
8674
	/**
8675
	* Counts all military month
8676
	*
8677
	* @return Array the month list
8678
	*
8679
	*/
8680
	public function countAllMilitaryMonths($filters = array())
8681
	{
8682
		global $globalTimezone, $globalDBdriver;
8683
		if ($globalTimezone != '') {
8684
			date_default_timezone_set($globalTimezone);
8685
			$datetime = new DateTime();
8686
			$offset = $datetime->format('P');
8687
		} else $offset = '+00:00';
8688
		$filter_query = $this->getFilter($filters,true,true);
8689
		if ($globalDBdriver == 'mysql') {
8690
			$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
8691
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
8692
								GROUP BY year_name, month_name 
8693
								ORDER BY date_count DESC";
8694
		} else {
8695
			$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
8696
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
8697
								GROUP BY year_name, month_name 
8698
								ORDER BY date_count DESC";
8699
		}
8700
		
8701
		$sth = $this->db->prepare($query);
8702
		$sth->execute(array(':offset' => $offset));
8703
      
8704
		$date_array = array();
8705
		$temp_array = array();
8706
        
8707
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8708
		{
8709
			$temp_array['month_name'] = $row['month_name'];
8710
			$temp_array['year_name'] = $row['year_name'];
8711
			$temp_array['date_count'] = $row['date_count'];
8712
8713
			$date_array[] = $temp_array;
8714
		}
8715
8716
		return $date_array;
8717
	}
8718
	
8719
	/**
8720
	* Counts all month owners
8721
	*
8722
	* @return Array the month list
8723
	*
8724
	*/
8725
	public function countAllMonthsOwners($filters = array())
8726
	{
8727
		global $globalTimezone, $globalDBdriver;
8728
		if ($globalTimezone != '') {
8729
			date_default_timezone_set($globalTimezone);
8730
			$datetime = new DateTime();
8731
			$offset = $datetime->format('P');
8732
		} else $offset = '+00:00';
8733
		$filter_query = $this->getFilter($filters,true,true);
8734
8735
		if ($globalDBdriver == 'mysql') {
8736
			$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
8737
								FROM spotter_output".$filter_query." owner_name <> ''
8738
								GROUP BY year_name, month_name
8739
								ORDER BY date_count DESC";
8740
		} else {
8741
			$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
8742
								FROM spotter_output".$filter_query." owner_name <> ''
8743
								GROUP BY year_name, month_name
8744
								ORDER BY date_count DESC";
8745
		}
8746
		
8747
		$sth = $this->db->prepare($query);
8748
		$sth->execute(array(':offset' => $offset));
8749
      
8750
		$date_array = array();
8751
		$temp_array = array();
8752
        
8753
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8754
		{
8755
			$temp_array['month_name'] = $row['month_name'];
8756
			$temp_array['year_name'] = $row['year_name'];
8757
			$temp_array['date_count'] = $row['date_count'];
8758
8759
			$date_array[] = $temp_array;
8760
		}
8761
8762
		return $date_array;
8763
	}
8764
	
8765
	/**
8766
	* Counts all month owners
8767
	*
8768
	* @return Array the month list
8769
	*
8770
	*/
8771
	public function countAllMonthsOwnersByAirlines($filters = array())
8772
	{
8773
		global $globalTimezone, $globalDBdriver;
8774
		$filter_query = $this->getFilter($filters,true,true);
8775
		if ($globalTimezone != '') {
8776
			date_default_timezone_set($globalTimezone);
8777
			$datetime = new DateTime();
8778
			$offset = $datetime->format('P');
8779
		} else $offset = '+00:00';
8780
8781
		if ($globalDBdriver == 'mysql') {
8782
			$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
8783
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8784
								GROUP BY spotter_output.airline_icao, year_name, month_name
8785
								ORDER BY date_count DESC";
8786
		} else {
8787
			$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
8788
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8789
								GROUP BY spotter_output.airline_icao, year_name, month_name
8790
								ORDER BY date_count DESC";
8791
		}
8792
		
8793
		$sth = $this->db->prepare($query);
8794
		$sth->execute(array(':offset' => $offset));
8795
      
8796
		$date_array = array();
8797
		$temp_array = array();
8798
        
8799
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8800
		{
8801
			$temp_array['month_name'] = $row['month_name'];
8802
			$temp_array['year_name'] = $row['year_name'];
8803
			$temp_array['date_count'] = $row['date_count'];
8804
			$temp_array['airline_icao'] = $row['airline_icao'];
8805
8806
			$date_array[] = $temp_array;
8807
		}
8808
8809
		return $date_array;
8810
	}
8811
8812
	/**
8813
	* Counts all month pilot
8814
	*
8815
	* @return Array the month list
8816
	*
8817
	*/
8818
	public function countAllMonthsPilots($filters = array())
8819
	{
8820
		global $globalTimezone, $globalDBdriver;
8821
		if ($globalTimezone != '') {
8822
			date_default_timezone_set($globalTimezone);
8823
			$datetime = new DateTime();
8824
			$offset = $datetime->format('P');
8825
		} else $offset = '+00:00';
8826
		$filter_query = $this->getFilter($filters,true,true);
8827
8828
		if ($globalDBdriver == 'mysql') {
8829
			$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
8830
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8831
								GROUP BY year_name, month_name
8832
								ORDER BY date_count DESC";
8833
		} else {
8834
			$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
8835
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8836
								GROUP BY year_name, month_name
8837
								ORDER BY date_count DESC";
8838
		}
8839
		
8840
		$sth = $this->db->prepare($query);
8841
		$sth->execute(array(':offset' => $offset));
8842
      
8843
		$date_array = array();
8844
		$temp_array = array();
8845
        
8846
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8847
		{
8848
			$temp_array['month_name'] = $row['month_name'];
8849
			$temp_array['year_name'] = $row['year_name'];
8850
			$temp_array['date_count'] = $row['date_count'];
8851
8852
			$date_array[] = $temp_array;
8853
		}
8854
8855
		return $date_array;
8856
	}
8857
	
8858
	/**
8859
	* Counts all month pilot
8860
	*
8861
	* @return Array the month list
8862
	*
8863
	*/
8864
	public function countAllMonthsPilotsByAirlines($filters = array())
8865
	{
8866
		global $globalTimezone, $globalDBdriver;
8867
		$filter_query = $this->getFilter($filters,true,true);
8868
		if ($globalTimezone != '') {
8869
			date_default_timezone_set($globalTimezone);
8870
			$datetime = new DateTime();
8871
			$offset = $datetime->format('P');
8872
		} else $offset = '+00:00';
8873
8874
		if ($globalDBdriver == 'mysql') {
8875
			$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
8876
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8877
								GROUP BY spotter_output.airline_icao,year_name, month_name
8878
								ORDER BY date_count DESC";
8879
		} else {
8880
			$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
8881
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8882
								GROUP BY spotter_output.airline_icao, year_name, month_name
8883
								ORDER BY date_count DESC";
8884
		}
8885
		
8886
		$sth = $this->db->prepare($query);
8887
		$sth->execute(array(':offset' => $offset));
8888
      
8889
		$date_array = array();
8890
		$temp_array = array();
8891
        
8892
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8893
		{
8894
			$temp_array['month_name'] = $row['month_name'];
8895
			$temp_array['year_name'] = $row['year_name'];
8896
			$temp_array['date_count'] = $row['date_count'];
8897
			$temp_array['airline_icao'] = $row['airline_icao'];
8898
8899
			$date_array[] = $temp_array;
8900
		}
8901
8902
		return $date_array;
8903
	}
8904
8905
	/**
8906
	* Counts all month airline
8907
	*
8908
	* @return Array the month list
8909
	*
8910
	*/
8911
	public function countAllMonthsAirlines($filters = array())
8912
	{
8913
		global $globalTimezone, $globalDBdriver;
8914
		$filter_query = $this->getFilter($filters,true,true);
8915
		if ($globalTimezone != '') {
8916
			date_default_timezone_set($globalTimezone);
8917
			$datetime = new DateTime();
8918
			$offset = $datetime->format('P');
8919
		} else $offset = '+00:00';
8920
8921
		if ($globalDBdriver == 'mysql') {
8922
			$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
8923
								FROM spotter_output".$filter_query." airline_icao <> '' 
8924
								GROUP BY year_name, month_name
8925
								ORDER BY date_count DESC";
8926
		} else {
8927
			$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
8928
								FROM spotter_output".$filter_query." airline_icao <> '' 
8929
								GROUP BY year_name, month_name
8930
								ORDER BY date_count DESC";
8931
		}
8932
		
8933
		$sth = $this->db->prepare($query);
8934
		$sth->execute(array(':offset' => $offset));
8935
      
8936
		$date_array = array();
8937
		$temp_array = array();
8938
        
8939
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8940
		{
8941
			$temp_array['month_name'] = $row['month_name'];
8942
			$temp_array['year_name'] = $row['year_name'];
8943
			$temp_array['date_count'] = $row['date_count'];
8944
8945
			$date_array[] = $temp_array;
8946
		}
8947
8948
		return $date_array;
8949
	}
8950
	
8951
	/**
8952
	* Counts all month aircraft
8953
	*
8954
	* @return Array the month list
8955
	*
8956
	*/
8957
	public function countAllMonthsAircrafts($filters = array())
8958
	{
8959
		global $globalTimezone, $globalDBdriver;
8960
		if ($globalTimezone != '') {
8961
			date_default_timezone_set($globalTimezone);
8962
			$datetime = new DateTime();
8963
			$offset = $datetime->format('P');
8964
		} else $offset = '+00:00';
8965
		$filter_query = $this->getFilter($filters,true,true);
8966
8967
		if ($globalDBdriver == 'mysql') {
8968
			$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
8969
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
8970
								GROUP BY year_name, month_name
8971
								ORDER BY date_count DESC";
8972
		} else {
8973
			$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
8974
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
8975
								GROUP BY year_name, month_name
8976
								ORDER BY date_count DESC";
8977
		}
8978
		
8979
		$sth = $this->db->prepare($query);
8980
		$sth->execute(array(':offset' => $offset));
8981
      
8982
		$date_array = array();
8983
		$temp_array = array();
8984
        
8985
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8986
		{
8987
			$temp_array['month_name'] = $row['month_name'];
8988
			$temp_array['year_name'] = $row['year_name'];
8989
			$temp_array['date_count'] = $row['date_count'];
8990
8991
			$date_array[] = $temp_array;
8992
		}
8993
8994
		return $date_array;
8995
	}
8996
	
8997
8998
	/**
8999
	* Counts all month aircraft
9000
	*
9001
	* @return Array the month list
9002
	*
9003
	*/
9004
	public function countAllMonthsAircraftsByAirlines($filters = array())
9005
	{
9006
		global $globalTimezone, $globalDBdriver;
9007
		$filter_query = $this->getFilter($filters,true,true);
9008
		if ($globalTimezone != '') {
9009
			date_default_timezone_set($globalTimezone);
9010
			$datetime = new DateTime();
9011
			$offset = $datetime->format('P');
9012
		} else $offset = '+00:00';
9013
9014
		if ($globalDBdriver == 'mysql') {
9015
			$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
9016
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
9017
								GROUP BY spotter_output.airline_icao, year_name, month_name
9018
								ORDER BY date_count DESC";
9019
		} else {
9020
			$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
9021
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
9022
								GROUP BY spotter_output.airline_icao, year_name, month_name
9023
								ORDER BY date_count DESC";
9024
		}
9025
		
9026
		$sth = $this->db->prepare($query);
9027
		$sth->execute(array(':offset' => $offset));
9028
      
9029
		$date_array = array();
9030
		$temp_array = array();
9031
        
9032
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9033
		{
9034
			$temp_array['month_name'] = $row['month_name'];
9035
			$temp_array['year_name'] = $row['year_name'];
9036
			$temp_array['date_count'] = $row['date_count'];
9037
			$temp_array['airline_icao'] = $row['airline_icao'];
9038
9039
			$date_array[] = $temp_array;
9040
		}
9041
9042
		return $date_array;
9043
	}
9044
9045
	/**
9046
	* Counts all month real arrival
9047
	*
9048
	* @return Array the month list
9049
	*
9050
	*/
9051
	public function countAllMonthsRealArrivals($filters = array())
9052
	{
9053
		global $globalTimezone, $globalDBdriver;
9054
		if ($globalTimezone != '') {
9055
			date_default_timezone_set($globalTimezone);
9056
			$datetime = new DateTime();
9057
			$offset = $datetime->format('P');
9058
		} else $offset = '+00:00';
9059
		$filter_query = $this->getFilter($filters,true,true);
9060
9061
		if ($globalDBdriver == 'mysql') {
9062
			$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
9063
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
9064
								GROUP BY year_name, month_name
9065
								ORDER BY date_count DESC";
9066
		} else {
9067
			$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
9068
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
9069
								GROUP BY year_name, month_name
9070
								ORDER BY date_count DESC";
9071
		}
9072
		
9073
		$sth = $this->db->prepare($query);
9074
		$sth->execute(array(':offset' => $offset));
9075
      
9076
		$date_array = array();
9077
		$temp_array = array();
9078
        
9079
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9080
		{
9081
			$temp_array['month_name'] = $row['month_name'];
9082
			$temp_array['year_name'] = $row['year_name'];
9083
			$temp_array['date_count'] = $row['date_count'];
9084
9085
			$date_array[] = $temp_array;
9086
		}
9087
9088
		return $date_array;
9089
	}
9090
	
9091
9092
	/**
9093
	* Counts all month real arrival
9094
	*
9095
	* @return Array the month list
9096
	*
9097
	*/
9098
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
9099
	{
9100
		global $globalTimezone, $globalDBdriver;
9101
		$filter_query = $this->getFilter($filters,true,true);
9102
		if ($globalTimezone != '') {
9103
			date_default_timezone_set($globalTimezone);
9104
			$datetime = new DateTime();
9105
			$offset = $datetime->format('P');
9106
		} else $offset = '+00:00';
9107
9108
		if ($globalDBdriver == 'mysql') {
9109
			$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
9110
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
9111
								GROUP BY spotter_output.airline_icao, year_name, month_name
9112
								ORDER BY date_count DESC";
9113
		} else {
9114
			$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
9115
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
9116
								GROUP BY spotter_output.airline_icao, year_name, month_name
9117
								ORDER BY date_count DESC";
9118
		}
9119
		
9120
		$sth = $this->db->prepare($query);
9121
		$sth->execute(array(':offset' => $offset));
9122
      
9123
		$date_array = array();
9124
		$temp_array = array();
9125
        
9126
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9127
		{
9128
			$temp_array['month_name'] = $row['month_name'];
9129
			$temp_array['year_name'] = $row['year_name'];
9130
			$temp_array['date_count'] = $row['date_count'];
9131
			$temp_array['airline_icao'] = $row['airline_icao'];
9132
9133
			$date_array[] = $temp_array;
9134
		}
9135
9136
		return $date_array;
9137
	}
9138
	
9139
9140
	/**
9141
	* Counts all dates during the last year
9142
	*
9143
	* @return Array the date list
9144
	*
9145
	*/
9146
	public function countAllMonthsLastYear($filters)
9147
	{
9148
		global $globalTimezone, $globalDBdriver;
9149
		if ($globalTimezone != '') {
9150
			date_default_timezone_set($globalTimezone);
9151
			$datetime = new DateTime();
9152
			$offset = $datetime->format('P');
9153
		} else $offset = '+00:00';
9154
		$filter_query = $this->getFilter($filters,true,true);
9155
		if ($globalDBdriver == 'mysql') {
9156
			$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
9157
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
9158
			$query .= " GROUP BY year_name, month_name
9159
								ORDER BY year_name, month_name ASC";
9160
			$query_data = array(':offset' => $offset);
9161
		} else {
9162
			$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
9163
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
9164
			$query .= " GROUP BY year_name, month_name
9165
								ORDER BY year_name, month_name ASC";
9166
			$query_data = array(':offset' => $offset);
9167
    		}
9168
		
9169
		$sth = $this->db->prepare($query);
9170
		$sth->execute($query_data);
9171
      
9172
		$date_array = array();
9173
		$temp_array = array();
9174
        
9175
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9176
		{
9177
			$temp_array['year_name'] = $row['year_name'];
9178
			$temp_array['month_name'] = $row['month_name'];
9179
			$temp_array['date_count'] = $row['date_count'];
9180
          
9181
			$date_array[] = $temp_array;
9182
		}
9183
9184
		return $date_array;
9185
	}
9186
	
9187
	
9188
	
9189
	/**
9190
	* Counts all hours
9191
	*
9192
	* @return Array the hour list
9193
	*
9194
	*/
9195
	public function countAllHours($orderby,$filters = array())
9196
	{
9197
		global $globalTimezone, $globalDBdriver;
9198
		if ($globalTimezone != '') {
9199
			date_default_timezone_set($globalTimezone);
9200
			$datetime = new DateTime();
9201
			$offset = $datetime->format('P');
9202
		} else $offset = '+00:00';
9203
9204
		$orderby_sql = '';
9205
		if ($orderby == "hour")
9206
		{
9207
			$orderby_sql = "ORDER BY hour_name ASC";
9208
		}
9209
		if ($orderby == "count")
9210
		{
9211
			$orderby_sql = "ORDER BY hour_count DESC";
9212
		}
9213
		
9214
		if ($globalDBdriver == 'mysql') {
9215
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9216
								FROM spotter_output";
9217
			$query .= $this->getFilter($filters);
9218
			$query .= " GROUP BY hour_name 
9219
								".$orderby_sql;
9220
9221
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
9222
								FROM spotter_output 
9223
								GROUP BY hour_name 
9224
								".$orderby_sql."
9225
								LIMIT 10 OFFSET 00";
9226
  */    
9227
		$query_data = array(':offset' => $offset);
9228
		} else {
9229
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9230
								FROM spotter_output";
9231
			$query .= $this->getFilter($filters);
9232
			$query .= " GROUP BY hour_name 
9233
								".$orderby_sql;
9234
			$query_data = array(':offset' => $offset);
9235
		}
9236
		
9237
		$sth = $this->db->prepare($query);
9238
		$sth->execute($query_data);
9239
      
9240
		$hour_array = array();
9241
		$temp_array = array();
9242
        
9243
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9244
		{
9245
			$temp_array['hour_name'] = $row['hour_name'];
9246
			$temp_array['hour_count'] = $row['hour_count'];
9247
          
9248
			$hour_array[] = $temp_array;
9249
		}
9250
9251
		return $hour_array;
9252
	}
9253
	
9254
	/**
9255
	* Counts all hours
9256
	*
9257
	* @return Array the hour list
9258
	*
9259
	*/
9260
	public function countAllHoursByAirlines($orderby, $filters = array())
9261
	{
9262
		global $globalTimezone, $globalDBdriver;
9263
		$filter_query = $this->getFilter($filters,true,true);
9264
		if ($globalTimezone != '') {
9265
			date_default_timezone_set($globalTimezone);
9266
			$datetime = new DateTime();
9267
			$offset = $datetime->format('P');
9268
		} else $offset = '+00:00';
9269
9270
		$orderby_sql = '';
9271
		if ($orderby == "hour")
9272
		{
9273
			$orderby_sql = "ORDER BY hour_name ASC";
9274
		}
9275
		if ($orderby == "count")
9276
		{
9277
			$orderby_sql = "ORDER BY hour_count DESC";
9278
		}
9279
		
9280
		if ($globalDBdriver == 'mysql') {
9281
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9282
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9283
								GROUP BY spotter_output.airline_icao, hour_name 
9284
								".$orderby_sql;
9285
9286
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
9287
								FROM spotter_output 
9288
								GROUP BY hour_name 
9289
								".$orderby_sql."
9290
								LIMIT 10 OFFSET 00";
9291
  */    
9292
		$query_data = array(':offset' => $offset);
9293
		} else {
9294
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9295
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
9296
								GROUP BY spotter_output.airline_icao, hour_name 
9297
								".$orderby_sql;
9298
			$query_data = array(':offset' => $offset);
9299
		}
9300
		
9301
		$sth = $this->db->prepare($query);
9302
		$sth->execute($query_data);
9303
      
9304
		$hour_array = array();
9305
		$temp_array = array();
9306
        
9307
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9308
		{
9309
			$temp_array['hour_name'] = $row['hour_name'];
9310
			$temp_array['hour_count'] = $row['hour_count'];
9311
			$temp_array['airline_icao'] = $row['airline_icao'];
9312
          
9313
			$hour_array[] = $temp_array;
9314
		}
9315
9316
		return $hour_array;
9317
	}
9318
9319
9320
9321
	/**
9322
	* Counts all hours by airline
9323
	*
9324
	* @return Array the hour list
9325
	*
9326
	*/
9327
	public function countAllHoursByAirline($airline_icao, $filters = array())
9328
	{
9329
		global $globalTimezone, $globalDBdriver;
9330
		$filter_query = $this->getFilter($filters,true,true);
9331
		if ($globalTimezone != '') {
9332
			date_default_timezone_set($globalTimezone);
9333
			$datetime = new DateTime();
9334
			$offset = $datetime->format('P');
9335
		} else $offset = '+00:00';
9336
9337
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
9338
9339
		if ($globalDBdriver == 'mysql') {
9340
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9341
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
9342
								GROUP BY hour_name 
9343
								ORDER BY hour_name ASC";
9344
		} else {
9345
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9346
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
9347
								GROUP BY hour_name 
9348
								ORDER BY hour_name ASC";
9349
		}
9350
		
9351
		$sth = $this->db->prepare($query);
9352
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
9353
      
9354
		$hour_array = array();
9355
		$temp_array = array();
9356
        
9357
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9358
		{
9359
			$temp_array['hour_name'] = $row['hour_name'];
9360
			$temp_array['hour_count'] = $row['hour_count'];
9361
          
9362
			$hour_array[] = $temp_array;
9363
		}
9364
9365
		return $hour_array;
9366
	}
9367
	
9368
	
9369
	
9370
	
9371
	/**
9372
	* Counts all hours by aircraft
9373
	*
9374
	* @return Array the hour list
9375
	*
9376
	*/
9377
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
9378
	{
9379
		global $globalTimezone, $globalDBdriver;
9380
		$filter_query = $this->getFilter($filters,true,true);
9381
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
9382
		if ($globalTimezone != '') {
9383
			date_default_timezone_set($globalTimezone);
9384
			$datetime = new DateTime();
9385
			$offset = $datetime->format('P');
9386
		} else $offset = '+00:00';
9387
9388
		if ($globalDBdriver == 'mysql') {
9389
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9390
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
9391
								GROUP BY hour_name 
9392
								ORDER BY hour_name ASC";
9393
		} else {
9394
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9395
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
9396
								GROUP BY hour_name 
9397
								ORDER BY hour_name ASC";
9398
		}
9399
		
9400
		$sth = $this->db->prepare($query);
9401
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
9402
      
9403
		$hour_array = array();
9404
		$temp_array = array();
9405
        
9406
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9407
		{
9408
			$temp_array['hour_name'] = $row['hour_name'];
9409
			$temp_array['hour_count'] = $row['hour_count'];
9410
          
9411
			$hour_array[] = $temp_array;
9412
		}
9413
9414
		return $hour_array;
9415
	}
9416
	
9417
	
9418
	/**
9419
	* Counts all hours by aircraft registration
9420
	*
9421
	* @return Array the hour list
9422
	*
9423
	*/
9424
	public function countAllHoursByRegistration($registration, $filters = array())
9425
	{
9426
		global $globalTimezone, $globalDBdriver;
9427
		$filter_query = $this->getFilter($filters,true,true);
9428
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9429
		if ($globalTimezone != '') {
9430
			date_default_timezone_set($globalTimezone);
9431
			$datetime = new DateTime();
9432
			$offset = $datetime->format('P');
9433
		} else $offset = '+00:00';
9434
9435
		if ($globalDBdriver == 'mysql') {
9436
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9437
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
9438
								GROUP BY hour_name 
9439
								ORDER BY hour_name ASC";
9440
		} else {
9441
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9442
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
9443
								GROUP BY hour_name 
9444
								ORDER BY hour_name ASC";
9445
		}
9446
		
9447
		$sth = $this->db->prepare($query);
9448
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
9449
      
9450
		$hour_array = array();
9451
		$temp_array = array();
9452
        
9453
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9454
		{
9455
			$temp_array['hour_name'] = $row['hour_name'];
9456
			$temp_array['hour_count'] = $row['hour_count'];
9457
          
9458
			$hour_array[] = $temp_array;
9459
		}
9460
9461
		return $hour_array;
9462
	}
9463
	
9464
	
9465
	/**
9466
	* Counts all hours by airport
9467
	*
9468
	* @return Array the hour list
9469
	*
9470
	*/
9471
	public function countAllHoursByAirport($airport_icao, $filters = array())
9472
	{
9473
		global $globalTimezone, $globalDBdriver;
9474
		$filter_query = $this->getFilter($filters,true,true);
9475
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
9476
		if ($globalTimezone != '') {
9477
			date_default_timezone_set($globalTimezone);
9478
			$datetime = new DateTime();
9479
			$offset = $datetime->format('P');
9480
		} else $offset = '+00:00';
9481
9482
		if ($globalDBdriver == 'mysql') {
9483
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9484
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
9485
								GROUP BY hour_name 
9486
								ORDER BY hour_name ASC";
9487
		} else {
9488
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9489
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
9490
								GROUP BY hour_name 
9491
								ORDER BY hour_name ASC";
9492
		}
9493
		
9494
		$sth = $this->db->prepare($query);
9495
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
9496
      
9497
		$hour_array = array();
9498
		$temp_array = array();
9499
        
9500
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9501
		{
9502
			$temp_array['hour_name'] = $row['hour_name'];
9503
			$temp_array['hour_count'] = $row['hour_count'];
9504
          
9505
			$hour_array[] = $temp_array;
9506
		}
9507
9508
		return $hour_array;
9509
	}
9510
	
9511
	
9512
	
9513
	/**
9514
	* Counts all hours by manufacturer
9515
	*
9516
	* @return Array the hour list
9517
	*
9518
	*/
9519
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
9520
	{
9521
		global $globalTimezone, $globalDBdriver;
9522
		$filter_query = $this->getFilter($filters,true,true);
9523
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
9524
		if ($globalTimezone != '') {
9525
			date_default_timezone_set($globalTimezone);
9526
			$datetime = new DateTime();
9527
			$offset = $datetime->format('P');
9528
		} else $offset = '+00:00';
9529
9530
		if ($globalDBdriver == 'mysql') {
9531
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9532
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
9533
								GROUP BY hour_name 
9534
								ORDER BY hour_name ASC";
9535
		} else {
9536
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9537
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
9538
								GROUP BY hour_name 
9539
								ORDER BY hour_name ASC";
9540
		}
9541
		
9542
		$sth = $this->db->prepare($query);
9543
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
9544
      
9545
		$hour_array = array();
9546
		$temp_array = array();
9547
        
9548
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9549
		{
9550
			$temp_array['hour_name'] = $row['hour_name'];
9551
			$temp_array['hour_count'] = $row['hour_count'];
9552
          
9553
			$hour_array[] = $temp_array;
9554
		}
9555
9556
		return $hour_array;
9557
	}
9558
	
9559
	
9560
	
9561
	/**
9562
	* Counts all hours by date
9563
	*
9564
	* @return Array the hour list
9565
	*
9566
	*/
9567
	public function countAllHoursByDate($date, $filters = array())
9568
	{
9569
		global $globalTimezone, $globalDBdriver;
9570
		$filter_query = $this->getFilter($filters,true,true);
9571
		$date = filter_var($date,FILTER_SANITIZE_STRING);
9572
		if ($globalTimezone != '') {
9573
			date_default_timezone_set($globalTimezone);
9574
			$datetime = new DateTime($date);
9575
			$offset = $datetime->format('P');
9576
		} else $offset = '+00:00';
9577
9578
		if ($globalDBdriver == 'mysql') {
9579
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9580
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
9581
								GROUP BY hour_name 
9582
								ORDER BY hour_name ASC";
9583
		} else {
9584
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9585
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
9586
								GROUP BY hour_name 
9587
								ORDER BY hour_name ASC";
9588
		}
9589
		
9590
		$sth = $this->db->prepare($query);
9591
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9592
      
9593
		$hour_array = array();
9594
		$temp_array = array();
9595
        
9596
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9597
		{
9598
			$temp_array['hour_name'] = $row['hour_name'];
9599
			$temp_array['hour_count'] = $row['hour_count'];
9600
          
9601
			$hour_array[] = $temp_array;
9602
		}
9603
9604
		return $hour_array;
9605
	}
9606
	
9607
	
9608
	
9609
	/**
9610
	* Counts all hours by a ident/callsign
9611
	*
9612
	* @return Array the hour list
9613
	*
9614
	*/
9615
	public function countAllHoursByIdent($ident, $filters = array())
9616
	{
9617
		global $globalTimezone, $globalDBdriver;
9618
		$filter_query = $this->getFilter($filters,true,true);
9619
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9620
		if ($globalTimezone != '') {
9621
			date_default_timezone_set($globalTimezone);
9622
			$datetime = new DateTime();
9623
			$offset = $datetime->format('P');
9624
		} else $offset = '+00:00';
9625
9626
		if ($globalDBdriver == 'mysql') {
9627
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9628
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
9629
								GROUP BY hour_name 
9630
								ORDER BY hour_name ASC";
9631
		} else {
9632
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9633
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
9634
								GROUP BY hour_name 
9635
								ORDER BY hour_name ASC";
9636
		}
9637
      
9638
		
9639
		$sth = $this->db->prepare($query);
9640
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
9641
      
9642
		$hour_array = array();
9643
		$temp_array = array();
9644
        
9645
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9646
		{
9647
			$temp_array['hour_name'] = $row['hour_name'];
9648
			$temp_array['hour_count'] = $row['hour_count'];
9649
          
9650
			$hour_array[] = $temp_array;
9651
		}
9652
9653
		return $hour_array;
9654
	}
9655
	
9656
	
9657
	
9658
	/**
9659
	* Counts all hours by route
9660
	*
9661
	* @return Array the hour list
9662
	*
9663
	*/
9664
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
9665
	{
9666
		global $globalTimezone, $globalDBdriver;
9667
		$filter_query = $this->getFilter($filters,true,true);
9668
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
9669
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
9670
		if ($globalTimezone != '') {
9671
			date_default_timezone_set($globalTimezone);
9672
			$datetime = new DateTime();
9673
			$offset = $datetime->format('P');
9674
		} else $offset = '+00:00';
9675
9676
		if ($globalDBdriver == 'mysql') {
9677
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9678
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9679
								GROUP BY hour_name 
9680
								ORDER BY hour_name ASC";
9681
		} else {
9682
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9683
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9684
								GROUP BY hour_name 
9685
								ORDER BY hour_name ASC";
9686
		}
9687
		
9688
		$sth = $this->db->prepare($query);
9689
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
9690
      
9691
		$hour_array = array();
9692
		$temp_array = array();
9693
        
9694
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9695
		{
9696
			$temp_array['hour_name'] = $row['hour_name'];
9697
			$temp_array['hour_count'] = $row['hour_count'];
9698
          
9699
			$hour_array[] = $temp_array;
9700
		}
9701
9702
		return $hour_array;
9703
	}
9704
	
9705
	
9706
	/**
9707
	* Counts all hours by country
9708
	*
9709
	* @return Array the hour list
9710
	*
9711
	*/
9712
	public function countAllHoursByCountry($country, $filters = array())
9713
	{
9714
		global $globalTimezone, $globalDBdriver;
9715
		$filter_query = $this->getFilter($filters,true,true);
9716
		$country = filter_var($country,FILTER_SANITIZE_STRING);
9717
		if ($globalTimezone != '') {
9718
			date_default_timezone_set($globalTimezone);
9719
			$datetime = new DateTime();
9720
			$offset = $datetime->format('P');
9721
		} else $offset = '+00:00';
9722
9723
		if ($globalDBdriver == 'mysql') {
9724
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9725
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9726
								GROUP BY hour_name 
9727
								ORDER BY hour_name ASC";
9728
		} else {
9729
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9730
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9731
								GROUP BY hour_name 
9732
								ORDER BY hour_name ASC";
9733
		}
9734
		
9735
		$sth = $this->db->prepare($query);
9736
		$sth->execute(array(':country' => $country,':offset' => $offset));
9737
      
9738
		$hour_array = array();
9739
		$temp_array = array();
9740
        
9741
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9742
		{
9743
			$temp_array['hour_name'] = $row['hour_name'];
9744
			$temp_array['hour_count'] = $row['hour_count'];
9745
          
9746
			$hour_array[] = $temp_array;
9747
		}
9748
9749
		return $hour_array;
9750
	}
9751
9752
9753
9754
9755
	/**
9756
	* Counts all aircraft that have flown over
9757
	*
9758
	* @return Integer the number of aircrafts
9759
	*
9760
	*/
9761
	public function countOverallAircrafts($filters = array(),$year = '',$month = '')
9762
	{
9763
		global $globalDBdriver;
9764
		$filter_query = $this->getFilter($filters,true,true);
9765
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
9766
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9767
		$query_values = array();
9768
		if ($year != '') {
9769
			if ($globalDBdriver == 'mysql') {
9770
				$query .= " AND YEAR(spotter_output.date) = :year";
9771
				$query_values = array_merge($query_values,array(':year' => $year));
9772
			} else {
9773
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9774
				$query_values = array_merge($query_values,array(':year' => $year));
9775
			}
9776
		}
9777
		if ($month != '') {
9778
			if ($globalDBdriver == 'mysql') {
9779
				$query .= " AND MONTH(spotter_output.date) = :month";
9780
				$query_values = array_merge($query_values,array(':month' => $month));
9781
			} else {
9782
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9783
				$query_values = array_merge($query_values,array(':month' => $month));
9784
			}
9785
		}
9786
9787
		$sth = $this->db->prepare($query);
9788
		$sth->execute($query_values);
9789
		return $sth->fetchColumn();
9790
	}
9791
9792
	/**
9793
	* Counts all flight that really arrival
9794
	*
9795
	* @return Integer the number of aircrafts
9796
	*
9797
	*/
9798
	public function countOverallArrival($filters = array(),$year = '',$month = '')
9799
	{
9800
		global $globalDBdriver;
9801
		$filter_query = $this->getFilter($filters,true,true);
9802
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
9803
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
9804
		$query_values = array();
9805
		if ($year != '') {
9806
			if ($globalDBdriver == 'mysql') {
9807
				$query .= " AND YEAR(spotter_output.date) = :year";
9808
				$query_values = array_merge($query_values,array(':year' => $year));
9809
			} else {
9810
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9811
				$query_values = array_merge($query_values,array(':year' => $year));
9812
			}
9813
		}
9814
		if ($month != '') {
9815
			if ($globalDBdriver == 'mysql') {
9816
				$query .= " AND MONTH(spotter_output.date) = :month";
9817
				$query_values = array_merge($query_values,array(':month' => $month));
9818
			} else {
9819
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9820
				$query_values = array_merge($query_values,array(':month' => $month));
9821
			}
9822
		}
9823
		
9824
		$sth = $this->db->prepare($query);
9825
		$sth->execute($query_values);
9826
		return $sth->fetchColumn();
9827
	}
9828
9829
	/**
9830
	* Counts all pilots that have flown over
9831
	*
9832
	* @return Integer the number of pilots
9833
	*
9834
	*/
9835
	public function countOverallPilots($filters = array(),$year = '',$month = '')
9836
	{
9837
		$filter_query = $this->getFilter($filters,true,true);
9838
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
9839
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
9840
		$query_values = array();
9841
		if ($year != '') {
9842
			if ($globalDBdriver == 'mysql') {
0 ignored issues
show
Bug introduced by
The variable $globalDBdriver does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
9843
				$query .= " AND YEAR(spotter_output.date) = :year";
9844
				$query_values = array_merge($query_values,array(':year' => $year));
9845
			} else {
9846
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9847
				$query_values = array_merge($query_values,array(':year' => $year));
9848
			}
9849
		}
9850
		if ($month != '') {
9851
			if ($globalDBdriver == 'mysql') {
9852
				$query .= " AND MONTH(spotter_output.date) = :month";
9853
				$query_values = array_merge($query_values,array(':month' => $month));
9854
			} else {
9855
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9856
				$query_values = array_merge($query_values,array(':month' => $month));
9857
			}
9858
		}
9859
		$sth = $this->db->prepare($query);
9860
		$sth->execute($query_values);
9861
		return $sth->fetchColumn();
9862
	}
9863
9864
	/**
9865
	* Counts all owners that have flown over
9866
	*
9867
	* @return Integer the number of owners
9868
	*
9869
	*/
9870
	public function countOverallOwners($filters = array(),$year = '',$month = '')
9871
	{
9872
		global $globalDBdriver;
9873
		$filter_query = $this->getFilter($filters,true,true);
9874
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
9875
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
9876
		$query_values = array();
9877
		if ($year != '') {
9878
			if ($globalDBdriver == 'mysql') {
9879
				$query .= " AND YEAR(spotter_output.date) = :year";
9880
				$query_values = array_merge($query_values,array(':year' => $year));
9881
			} else {
9882
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9883
				$query_values = array_merge($query_values,array(':year' => $year));
9884
			}
9885
		}
9886
		if ($month != '') {
9887
			if ($globalDBdriver == 'mysql') {
9888
				$query .= " AND MONTH(spotter_output.date) = :month";
9889
				$query_values = array_merge($query_values,array(':month' => $month));
9890
			} else {
9891
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9892
				$query_values = array_merge($query_values,array(':month' => $month));
9893
			}
9894
		}
9895
		$sth = $this->db->prepare($query);
9896
		$sth->execute($query_values);
9897
		return $sth->fetchColumn();
9898
	}
9899
	
9900
	
9901
	/**
9902
	* Counts all flights that have flown over
9903
	*
9904
	* @return Integer the number of flights
9905
	*
9906
	*/
9907
	public function countOverallFlights($filters = array(),$year = '',$month = '')
9908
	{
9909
		global $globalDBdriver;
9910
		$queryi  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count FROM spotter_output";
9911
		$query_values = array();
9912
		$query = '';
9913
		if ($year != '') {
9914
			if ($globalDBdriver == 'mysql') {
9915
				$query .= " AND YEAR(spotter_output.date) = :year";
9916
				$query_values = array_merge($query_values,array(':year' => $year));
9917
			} else {
9918
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9919
				$query_values = array_merge($query_values,array(':year' => $year));
9920
			}
9921
		}
9922
		if ($month != '') {
9923
			if ($globalDBdriver == 'mysql') {
9924
				$query .= " AND MONTH(spotter_output.date) = :month";
9925
				$query_values = array_merge($query_values,array(':month' => $month));
9926
			} else {
9927
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9928
				$query_values = array_merge($query_values,array(':month' => $month));
9929
			}
9930
		}
9931
		if (empty($query_values)) $queryi .= $this->getFilter($filters);
9932
		else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
9933
		
9934
		//echo $query;
9935
		$sth = $this->db->prepare($queryi);
9936
		$sth->execute($query_values);
9937
		return $sth->fetchColumn();
9938
	}
9939
	
9940
	/**
9941
	* Counts all military flights that have flown over
9942
	*
9943
	* @return Integer the number of flights
9944
	*
9945
	*/
9946
	public function countOverallMilitaryFlights($filters = array(),$year = '',$month = '')
9947
	{
9948
		global $globalDBdriver;
9949
		$filter_query = $this->getFilter($filters,true,true);
9950
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
9951
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
9952
		$query_values = array();
9953
		if ($year != '') {
9954
			if ($globalDBdriver == 'mysql') {
9955
				$query .= " AND YEAR(spotter_output.date) = :year";
9956
				$query_values = array_merge($query_values,array(':year' => $year));
9957
			} else {
9958
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9959
				$query_values = array_merge($query_values,array(':year' => $year));
9960
			}
9961
		}
9962
		if ($month != '') {
9963
			if ($globalDBdriver == 'mysql') {
9964
				$query .= " AND MONTH(spotter_output.date) = :month";
9965
				$query_values = array_merge($query_values,array(':month' => $month));
9966
			} else {
9967
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
9968
				$query_values = array_merge($query_values,array(':month' => $month));
9969
			}
9970
		}
9971
      
9972
		$sth = $this->db->prepare($query);
9973
		$sth->execute($query_values);
9974
		return $sth->fetchColumn();
9975
	}
9976
	
9977
	
9978
	
9979
	/**
9980
	* Counts all airlines that have flown over
9981
	*
9982
	* @return Integer the number of airlines
9983
	*
9984
	*/
9985
	public function countOverallAirlines($filters = array(),$year = '',$month = '')
9986
	{
9987
		global $globalDBdriver;
9988
		$queryi  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
9989
							FROM spotter_output";
9990
      
9991
		$query_values = array();
9992
		$query = '';
9993
		if ($year != '') {
9994
			if ($globalDBdriver == 'mysql') {
9995
				$query .= " AND YEAR(spotter_output.date) = :year";
9996
				$query_values = array_merge($query_values,array(':year' => $year));
9997
			} else {
9998
				$query .= " AND EXTRACT(YEAR FROM spotter_output.date) = :year";
9999
				$query_values = array_merge($query_values,array(':year' => $year));
10000
			}
10001
		}
10002
		if ($month != '') {
10003
			if ($globalDBdriver == 'mysql') {
10004
				$query .= " AND MONTH(spotter_output.date) = :month";
10005
				$query_values = array_merge($query_values,array(':month' => $month));
10006
			} else {
10007
				$query .= " AND EXTRACT(MONTH FROM spotter_output.date) = :month";
10008
				$query_values = array_merge($query_values,array(':month' => $month));
10009
			}
10010
		}
10011
                if ($query == '') $queryi .= $this->getFilter($filters);
10012
                else $queryi .= $this->getFilter($filters,true,true).substr($query,4);
10013
10014
10015
		$sth = $this->db->prepare($queryi);
10016
		$sth->execute($query_values);
10017
		return $sth->fetchColumn();
10018
	}
10019
10020
  
10021
	/**
10022
	* Counts all hours of today
10023
	*
10024
	* @return Array the hour list
10025
	*
10026
	*/
10027
	public function countAllHoursFromToday($filters = array())
10028
	{
10029
		global $globalTimezone, $globalDBdriver;
10030
		$filter_query = $this->getFilter($filters,true,true);
10031
		if ($globalTimezone != '') {
10032
			date_default_timezone_set($globalTimezone);
10033
			$datetime = new DateTime();
10034
			$offset = $datetime->format('P');
10035
		} else $offset = '+00:00';
10036
10037
		if ($globalDBdriver == 'mysql') {
10038
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
10039
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
10040
								GROUP BY hour_name 
10041
								ORDER BY hour_name ASC";
10042
		} else {
10043
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
10044
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
10045
								GROUP BY hour_name 
10046
								ORDER BY hour_name ASC";
10047
		}
10048
		
10049
		$sth = $this->db->prepare($query);
10050
		$sth->execute(array(':offset' => $offset));
10051
      
10052
		$hour_array = array();
10053
		$temp_array = array();
10054
        
10055
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10056
		{
10057
			$temp_array['hour_name'] = $row['hour_name'];
10058
			$temp_array['hour_count'] = $row['hour_count'];
10059
			$hour_array[] = $temp_array;
10060
		}
10061
10062
		return $hour_array;
10063
	}
10064
    
10065
	/**
10066
	* Gets all the spotter information based on calculated upcoming flights
10067
	*
10068
	* @return Array the spotter information
10069
	*
10070
	*/
10071
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
10072
	{
10073
		global $global_query, $globalDBdriver, $globalTimezone;
10074
		$filter_query = $this->getFilter($filters,true,true);
10075
		date_default_timezone_set('UTC');
10076
		$limit_query = '';
10077
		if ($limit != "")
10078
		{
10079
			$limit_array = explode(",", $limit);
10080
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
10081
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
10082
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
10083
			{
10084
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
10085
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
10086
			}
10087
		}
10088
		$currentHour = date("G");
10089
		$next3Hours = date("G", strtotime("+3 hour"));
10090
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
10091
		if ($currentHour >= 21 && $next3Hours >= 00)
10092
		{
10093
			$next3Hours = 24;
10094
		}
10095
		$currentDayofWeek = date("l");
10096
		if ($globalDBdriver == 'mysql') {
10097
			if ($sort != "")
10098
			{
10099
				$search_orderby_array = $this->getOrderBy();
10100
				$orderby_query = $search_orderby_array[$sort]['sql'];
10101
			} else {
10102
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
10103
			}
10104
/*
10105
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
10106
			    FROM spotter_output
10107
			    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'
10108
			    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";
10109
*/
10110
/*			$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
10111
			    FROM spotter_output
10112
			    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'
10113
			    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";
10114
*/
10115
			$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 
10116
			    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'
10117
			    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
10118
			    HAVING count(spotter_output.ident) > 5$orderby_query";
10119
10120
			$spotter_array = $this->getDataFromDB($query.$limit_query);
10121
		} else {
10122
			if ($sort != "")
10123
			{
10124
				$search_orderby_array = $this->getOrderBy();
10125
				$orderby_query = $search_orderby_array[$sort]['sql'];
10126
			} else {
10127
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
10128
			}
10129
			$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') 
10130
			    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 <> '' 
10131
			    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')
10132
			    HAVING count(spotter_output.ident) > 5$orderby_query";
10133
			//echo $query;
10134
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
10135
			/*
10136
			$sth = $this->db->prepare($query);
10137
			$sth->execute(array(':timezone' => $globalTimezone));
10138
			return $sth->fetchAll(PDO::FETCH_ASSOC);
10139
			*/
10140
		}
10141
		return $spotter_array;
10142
	}
10143
    
10144
    
10145
     /**
10146
	* Gets the Barrie Spotter ID based on the FlightAware ID
10147
	*
10148
	* @return Integer the Barrie Spotter ID
10149
q	*
10150
	*/
10151
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
10152
	{
10153
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
10154
10155
		$query  = "SELECT spotter_output.spotter_id
10156
								FROM spotter_output 
10157
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
10158
        
10159
		
10160
		$sth = $this->db->prepare($query);
10161
		$sth->execute();
10162
10163
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10164
		{
10165
			return $row['spotter_id'];
10166
		}
10167
	}
10168
  
10169
 
10170
	/**
10171
	* Parses a date string
10172
	*
10173
	* @param String $dateString the date string
10174
	* @param String $timezone the timezone of a user
10175
	* @return Array the time information
10176
	*
10177
	*/
10178
	public function parseDateString($dateString, $timezone = '')
10179
	{
10180
		$time_array = array();
10181
	
10182
		if ($timezone != "")
10183
		{
10184
			date_default_timezone_set($timezone);
10185
		}
10186
		
10187
		$current_date = date("Y-m-d H:i:s");
10188
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
10189
		
10190
		$diff = abs(strtotime($current_date) - strtotime($date));
10191
10192
		$time_array['years'] = floor($diff / (365*60*60*24)); 
10193
		$years = $time_array['years'];
10194
		
10195
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
10196
		$months = $time_array['months'];
10197
		
10198
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
10199
		$days = $time_array['days'];
10200
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
10201
		$hours = $time_array['hours'];
10202
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
10203
		$minutes = $time_array['minutes'];
10204
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
10205
		
10206
		return $time_array;	
10207
	}	
10208
	
10209
	
10210
	
10211
	
10212
	/**
10213
	* Parses the direction degrees to working
10214
	*
10215
	* @param Float $direction the direction in degrees
10216
	* @return Array the direction information
10217
	*
10218
	*/
10219
	public function parseDirection($direction = 0)
10220
	{
10221
		if ($direction == '') $direction = 0;
10222
		$direction_array = array();
10223
		$temp_array = array();
10224
10225
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
10226
		{
10227
			$temp_array['direction_degree'] = $direction;
10228
			$temp_array['direction_shortname'] = "N";
10229
			$temp_array['direction_fullname'] = "North";
10230
		} elseif ($direction >= 22.5 && $direction < 45){
10231
			$temp_array['direction_degree'] = $direction;
10232
			$temp_array['direction_shortname'] = "NNE";
10233
			$temp_array['direction_fullname'] = "North-Northeast";
10234
		} elseif ($direction >= 45 && $direction < 67.5){
10235
			$temp_array['direction_degree'] = $direction;
10236
			$temp_array['direction_shortname'] = "NE";
10237
			$temp_array['direction_fullname'] = "Northeast";
10238
		} elseif ($direction >= 67.5 && $direction < 90){
10239
			$temp_array['direction_degree'] = $direction;
10240
			$temp_array['direction_shortname'] = "ENE";
10241
			$temp_array['direction_fullname'] = "East-Northeast";
10242
		} elseif ($direction >= 90 && $direction < 112.5){
10243
			$temp_array['direction_degree'] = $direction;
10244
			$temp_array['direction_shortname'] = "E";
10245
			$temp_array['direction_fullname'] = "East";
10246
		} elseif ($direction >= 112.5 && $direction < 135){
10247
			$temp_array['direction_degree'] = $direction;
10248
			$temp_array['direction_shortname'] = "ESE";
10249
			$temp_array['direction_fullname'] = "East-Southeast";
10250
		} elseif ($direction >= 135 && $direction < 157.5){
10251
			$temp_array['direction_degree'] = $direction;
10252
			$temp_array['direction_shortname'] = "SE";
10253
			$temp_array['direction_fullname'] = "Southeast";
10254
		} elseif ($direction >= 157.5 && $direction < 180){
10255
			$temp_array['direction_degree'] = $direction;
10256
			$temp_array['direction_shortname'] = "SSE";
10257
			$temp_array['direction_fullname'] = "South-Southeast";
10258
		} elseif ($direction >= 180 && $direction < 202.5){
10259
			$temp_array['direction_degree'] = $direction;
10260
			$temp_array['direction_shortname'] = "S";
10261
			$temp_array['direction_fullname'] = "South";
10262
		} elseif ($direction >= 202.5 && $direction < 225){
10263
			$temp_array['direction_degree'] = $direction;
10264
			$temp_array['direction_shortname'] = "SSW";
10265
			$temp_array['direction_fullname'] = "South-Southwest";
10266
		} elseif ($direction >= 225 && $direction < 247.5){
10267
			$temp_array['direction_degree'] = $direction;
10268
			$temp_array['direction_shortname'] = "SW";
10269
			$temp_array['direction_fullname'] = "Southwest";
10270
		} elseif ($direction >= 247.5 && $direction < 270){
10271
			$temp_array['direction_degree'] = $direction;
10272
			$temp_array['direction_shortname'] = "WSW";
10273
			$temp_array['direction_fullname'] = "West-Southwest";
10274
		} elseif ($direction >= 270 && $direction < 292.5){
10275
			$temp_array['direction_degree'] = $direction;
10276
			$temp_array['direction_shortname'] = "W";
10277
			$temp_array['direction_fullname'] = "West";
10278
		} elseif ($direction >= 292.5 && $direction < 315){
10279
			$temp_array['direction_degree'] = $direction;
10280
			$temp_array['direction_shortname'] = "WNW";
10281
			$temp_array['direction_fullname'] = "West-Northwest";
10282
		} elseif ($direction >= 315 && $direction < 337.5){
10283
			$temp_array['direction_degree'] = $direction;
10284
			$temp_array['direction_shortname'] = "NW";
10285
			$temp_array['direction_fullname'] = "Northwest";
10286
		} elseif ($direction >= 337.5 && $direction < 360){
10287
			$temp_array['direction_degree'] = $direction;
10288
			$temp_array['direction_shortname'] = "NNW";
10289
			$temp_array['direction_fullname'] = "North-Northwest";
10290
		}
10291
		$direction_array[] = $temp_array;
10292
		return $direction_array;
10293
	}
10294
	
10295
	
10296
	/**
10297
	* Gets the aircraft registration
10298
	*
10299
	* @param String $flightaware_id the flight aware id
10300
	* @return String the aircraft registration
10301
	*
10302
	*/
10303
	
10304
	public function getAircraftRegistration($flightaware_id)
10305
	{
10306
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
10307
        
10308
		$options = array(
10309
			'trace' => true,
10310
			'exceptions' => 0,
10311
			'login' => $globalFlightAwareUsername,
10312
			'password' => $globalFlightAwarePassword,
10313
		);
10314
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
10315
		
10316
		$params = array('faFlightID' => $flightaware_id);
10317
		$result = $client->AirlineFlightInfo($params);
10318
		
10319
		if (isset($result->AirlineFlightInfoResult))
10320
		{
10321
			$registration = $result->AirlineFlightInfoResult->tailnumber;
10322
		} else return '';
10323
		
10324
		$registration = $this->convertAircraftRegistration($registration);
10325
		
10326
		return $registration;
10327
	}
10328
10329
10330
	/**
10331
	* Gets the aircraft registration from ModeS
10332
	*
10333
	* @param String $aircraft_modes the flight ModeS in hex
10334
	* @return String the aircraft registration
10335
	*
10336
	*/
10337
	public function getAircraftRegistrationBymodeS($aircraft_modes)
10338
	{
10339
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
10340
	
10341
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
10342
		
10343
		$sth = $this->db->prepare($query);
10344
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
10345
    
10346
		$row = $sth->fetch(PDO::FETCH_ASSOC);
10347
		$sth->closeCursor();
10348
		if (count($row) > 0) {
10349
		    //return $row['Registration'];
10350
		    return $row['registration'];
10351
		} else return '';
10352
	
10353
	}
10354
10355
	/**
10356
	* Gets the aircraft type from ModeS
10357
	*
10358
	* @param String $aircraft_modes the flight ModeS in hex
10359
	* @return String the aircraft type
10360
	*
10361
	*/
10362
	public function getAircraftTypeBymodeS($aircraft_modes)
10363
	{
10364
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
10365
	
10366
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
10367
		
10368
		$sth = $this->db->prepare($query);
10369
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
10370
    
10371
		$row = $sth->fetch(PDO::FETCH_ASSOC);
10372
		$sth->closeCursor();
10373
		if (count($row) > 0) {
10374
		    if ($row['type_flight'] == null) return '';
10375
		    else return $row['type_flight'];
10376
		} else return '';
10377
	
10378
	}
10379
10380
	/**
10381
	* Gets Country from latitude/longitude
10382
	*
10383
	* @param Float $latitude latitute of the flight
10384
	* @param Float $longitude longitute of the flight
10385
	* @return String the countrie
10386
	*/
10387
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
10388
	{
10389
		global $globalDBdriver, $globalDebug;
10390
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
10391
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
10392
	
10393
		$Connection = new Connection($this->db);
10394
		if (!$Connection->tableExists('countries')) return '';
10395
	
10396
		try {
10397
			/*
10398
			if ($globalDBdriver == 'mysql') {
10399
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
10400
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
10401
			}
10402
			*/
10403
			// This query seems to work both for MariaDB and PostgreSQL
10404
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
10405
		
10406
			$sth = $this->db->prepare($query);
10407
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
10408
			$sth->execute();
10409
    
10410
			$row = $sth->fetch(PDO::FETCH_ASSOC);
10411
			$sth->closeCursor();
10412
			if (count($row) > 0) {
10413
				return $row;
10414
			} else return '';
10415
		} catch (PDOException $e) {
10416
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
10417
			return '';
10418
		}
10419
	
10420
	}
10421
10422
	/**
10423
	* Gets Country from iso2
10424
	*
10425
	* @param String $iso2 ISO2 country code
10426
	* @return String the countrie
10427
	*/
10428
	public function getCountryFromISO2($iso2)
10429
	{
10430
		global $globalDBdriver, $globalDebug;
10431
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
10432
	
10433
		$Connection = new Connection($this->db);
10434
		if (!$Connection->tableExists('countries')) return '';
10435
	
10436
		try {
10437
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
10438
		
10439
			$sth = $this->db->prepare($query);
10440
			$sth->execute(array(':iso2' => $iso2));
10441
    
10442
			$row = $sth->fetch(PDO::FETCH_ASSOC);
10443
			$sth->closeCursor();
10444
			if (count($row) > 0) {
10445
				return $row;
10446
			} else return '';
10447
		} catch (PDOException $e) {
10448
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
10449
			return '';
10450
		}
10451
	
10452
	}
10453
10454
	/**
10455
	* converts the registration code using the country prefix
10456
	*
10457
	* @param String $registration the aircraft registration
10458
	* @return String the aircraft registration
10459
	*
10460
	*/
10461
	public function convertAircraftRegistration($registration)
10462
	{
10463
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10464
		$registration_prefix = '';
10465
		$registration_1 = substr($registration, 0, 1);
10466
		$registration_2 = substr($registration, 0, 2);
10467
10468
		//first get the prefix based on two characters
10469
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
10470
      
10471
		
10472
		$sth = $this->db->prepare($query);
10473
		$sth->execute(array(':registration_2' => $registration_2));
10474
        
10475
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10476
		{
10477
			$registration_prefix = $row['registration_prefix'];
10478
		}
10479
10480
		//if we didn't find a two chracter prefix lets just search the one with one character
10481
		if ($registration_prefix == '')
10482
		{
10483
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
10484
			$sth = $this->db->prepare($query);
10485
			$sth->execute(array(':registration_1' => $registration_1));
10486
	        
10487
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10488
			{
10489
				$registration_prefix = $row['registration_prefix'];
10490
			}
10491
		}
10492
10493
		//determine which characters are being used and convert the registration code appropiately
10494
		if (strlen($registration_prefix) == 1)
10495
		{
10496
			if (0 === strpos($registration, 'N')) {
10497
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
10498
			} else {
10499
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
10500
			}
10501
		} else if(strlen($registration_prefix) == 2){
10502
			if (0 === strpos($registration, 'N')) {
10503
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
10504
			} else {
10505
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
10506
			}
10507
		}
10508
		return $registration;
10509
	}
10510
10511
	/**
10512
	* Country from the registration code
10513
	*
10514
	* @param String $registration the aircraft registration
10515
	* @return String the country
10516
	*
10517
	*/
10518
	public function countryFromAircraftRegistration($registration)
10519
	{
10520
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10521
		
10522
		$registration_prefix = '';
10523
		$registration_test = explode('-',$registration);
10524
		$country = '';
10525
		if ($registration_test[0] != $registration) {
10526
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
10527
	      
10528
			$sth = $this->db->prepare($query);
10529
			$sth->execute(array(':registration_1' => $registration_test[0]));
10530
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10531
			{
10532
				//$registration_prefix = $row['registration_prefix'];
10533
				$country = $row['country'];
10534
			}
10535
		} else {
10536
    			$registration_1 = substr($registration, 0, 1);
10537
		        $registration_2 = substr($registration, 0, 2);
10538
10539
			$country = '';
10540
			//first get the prefix based on two characters
10541
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
10542
      
10543
			
10544
			$sth = $this->db->prepare($query);
10545
			$sth->execute(array(':registration_2' => $registration_2));
10546
        
10547
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10548
			{
10549
				$registration_prefix = $row['registration_prefix'];
10550
				$country = $row['country'];
10551
			}
10552
10553
			//if we didn't find a two chracter prefix lets just search the one with one character
10554
			if ($registration_prefix == "")
10555
			{
10556
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
10557
	      
10558
				$sth = $this->db->prepare($query);
10559
				$sth->execute(array(':registration_1' => $registration_1));
10560
	        
10561
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
10562
				{
10563
					//$registration_prefix = $row['registration_prefix'];
10564
					$country = $row['country'];
10565
				}
10566
			}
10567
		}
10568
    
10569
		return $country;
10570
	}
10571
10572
	/**
10573
	* Registration prefix from the registration code
10574
	*
10575
	* @param String $registration the aircraft registration
10576
	* @return String the registration prefix
10577
	*
10578
	*/
10579
	public function registrationPrefixFromAircraftRegistration($registration)
10580
	{
10581
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10582
		
10583
		$registration_prefix = '';
10584
		$registration_test = explode('-',$registration);
10585
		//$country = '';
10586
		if ($registration_test[0] != $registration) {
10587
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
10588
	      
10589
			$sth = $this->db->prepare($query);
10590
			$sth->execute(array(':registration_1' => $registration_test[0]));
10591
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10592
			{
10593
				$registration_prefix = $row['registration_prefix'];
10594
				//$country = $row['country'];
10595
			}
10596
		} else {
10597
    			$registration_1 = substr($registration, 0, 1);
10598
		        $registration_2 = substr($registration, 0, 2);
10599
10600
			//first get the prefix based on two characters
10601
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
10602
      
10603
			
10604
			$sth = $this->db->prepare($query);
10605
			$sth->execute(array(':registration_2' => $registration_2));
10606
        
10607
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
10608
			{
10609
				$registration_prefix = $row['registration_prefix'];
10610
				//$country = $row['country'];
10611
			}
10612
10613
			//if we didn't find a two chracter prefix lets just search the one with one character
10614
			if ($registration_prefix == "")
10615
			{
10616
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
10617
	      
10618
				$sth = $this->db->prepare($query);
10619
				$sth->execute(array(':registration_1' => $registration_1));
10620
	        
10621
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
10622
				{
10623
					$registration_prefix = $row['registration_prefix'];
10624
					//$country = $row['country'];
10625
				}
10626
			}
10627
		}
10628
    
10629
		return $registration_prefix;
10630
	}
10631
10632
10633
	/**
10634
	* Country from the registration code
10635
	*
10636
	* @param String $registration the aircraft registration
10637
	* @return String the country
10638
	*
10639
	*/
10640
	public function countryFromAircraftRegistrationCode($registration)
10641
	{
10642
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
10643
		
10644
		$country = '';
10645
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
10646
		$sth = $this->db->prepare($query);
10647
		$sth->execute(array(':registration' => $registration));
10648
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10649
		{
10650
			$country = $row['country'];
10651
		}
10652
		return $country;
10653
	}
10654
	
10655
	/**
10656
	* Set a new highlight value for a flight
10657
	*
10658
	* @param String $flightaware_id flightaware_id from spotter_output table
10659
	* @param String $highlight New highlight value
10660
	*/
10661
	public function setHighlightFlight($flightaware_id,$highlight) {
10662
		
10663
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
10664
		$sth = $this->db->prepare($query);
10665
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
10666
	}
10667
10668
	/**
10669
	* Set a new highlight value for a flight by Registration
10670
	*
10671
	* @param String $registration Registration of the aircraft
10672
	* @param String $date Date of spotted aircraft
10673
	* @param String $highlight New highlight value
10674
	*/
10675
	public function setHighlightFlightByRegistration($registration,$highlight, $date = '') {
10676
		if ($date == '') {
10677
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE spotter_id IN (SELECT MAX(spotter_id) FROM spotter_output WHERE registration = :registration)";
10678
			$query_values = array(':registration' => $registration, ':highlight' => $highlight);
10679
		} else {
10680
			$query  = "UPDATE spotter_output SET highlight = :highlight WHERE registration = :registration AND date(date) = :date";
10681
			$query_values = array(':registration' => $registration, ':highlight' => $highlight,':date' => $date);
10682
		}
10683
		$sth = $this->db->prepare($query);
10684
		$sth->execute($query_values);
10685
	}
10686
	
10687
	/**
10688
	* Gets the short url from bit.ly
10689
	*
10690
	* @param String $url the full url
10691
	* @return String the bit.ly url
10692
	*
10693
	*/
10694
	public function getBitlyURL($url)
10695
	{
10696
		global $globalBitlyAccessToken;
10697
		
10698
		if ($globalBitlyAccessToken == '') return $url;
10699
        
10700
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
10701
		
10702
		$ch = curl_init();
10703
		curl_setopt($ch, CURLOPT_HEADER, 0);
10704
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
10705
		curl_setopt($ch, CURLOPT_URL, $google_url);
10706
		$bitly_data = curl_exec($ch);
10707
		curl_close($ch);
10708
		
10709
		$bitly_data = json_decode($bitly_data);
10710
		$bitly_url = '';
10711
		if ($bitly_data->status_txt = "OK"){
10712
			$bitly_url = $bitly_data->data->url;
10713
		}
10714
10715
		return $bitly_url;
10716
	}
10717
10718
10719
	public function getOrderBy()
10720
	{
10721
		$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"));
10722
		
10723
		return $orderby;
10724
		
10725
	}
10726
    
10727
/*
10728
	public function importFromFlightAware()
10729
	{
10730
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
10731
		$Spotter = new Spotter($this->db);
10732
		$SpotterLive = new SpotterLive($this->db);
10733
		$options = array(
10734
		            'trace' => true,
10735
		            'exceptions' => 0,
10736
		            'login' => $globalFlightAwareUsername,
10737
		            'password' => $globalFlightAwarePassword,
10738
		);
10739
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
10740
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
10741
		$result = $client->SearchBirdseyeInFlight($params);
10742
		$dataFound = false;
10743
		$ignoreImport = false;
10744
		if (isset($result->SearchBirdseyeInFlightResult))
10745
		{
10746
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
10747
			{
10748
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
10749
				{
10750
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
10751
					{
10752
						foreach($globalAirportIgnore as $airportIgnore)
10753
						{
10754
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
10755
							{
10756
								$ignoreImport = true; 
10757
							}
10758
						}
10759
						if ($ignoreImport == false)
10760
						{
10761
							$flightaware_id = $aircraft->faFlightID;
10762
							$ident = $aircraft->ident;
10763
							$aircraft_type = $aircraft->type;
10764
							$departure_airport = $aircraft->origin;
10765
							$arrival_airport = $aircraft->destination;
10766
							$latitude = $aircraft->latitude;
10767
							$longitude = $aircraft->longitude;
10768
							$waypoints = $aircraft->waypoints;
10769
							$altitude = $aircraft->altitude;
10770
							$heading = $aircraft->heading;
10771
							$groundspeed = $aircraft->groundspeed;
10772
							$dataFound = true;
10773
							//gets the callsign from the last hour
10774
							$last_hour_ident = $this->getIdentFromLastHour($ident);
10775
							//change the departure/arrival airport to NA if its not available
10776
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
10777
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
10778
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
10779
							if($last_hour_ident == "")
10780
							{
10781
								//adds the spotter data for the archive
10782
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10783
							}
10784
10785
							//adds the spotter LIVE data
10786
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10787
						}
10788
					}
10789
					$ignoreImport = false;
10790
				}
10791
			} else {
10792
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
10793
				{
10794
					foreach($globalAirportIgnore as $airportIgnore)
10795
					{
10796
						foreach($globalAirportIgnore as $airportIgnore)
10797
						{
10798
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
10799
							{
10800
								$ignoreImport = true; 
10801
							}
10802
						}
10803
						if ($ignoreImport == false)
10804
						{
10805
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
10806
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
10807
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
10808
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
10809
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
10810
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
10811
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
10812
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
10813
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
10814
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
10815
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
10816
							$dataFound = true;
10817
							//gets the callsign from the last hour
10818
							$last_hour_ident = $this->getIdentFromLastHour($ident);
10819
							//change the departure/arrival airport to NA if its not available
10820
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
10821
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
10822
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
10823
							if($last_hour_ident == "")
10824
							{
10825
								//adds the spotter data for the archive
10826
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10827
							}
10828
							//adds the spotter LIVE data
10829
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10830
						}
10831
						$ignoreImport = false;
10832
					}
10833
				}
10834
			}
10835
		} 
10836
	}
10837
*/
10838
10839
	// Update flights data when new data in DB
10840
	public function updateFieldsFromOtherTables()
10841
	{
10842
		global $globalDebug, $globalDBdriver;
10843
		$Image = new Image($this->db);
10844
		
10845
10846
		// routes
10847
		if ($globalDebug) print "Routes...\n";
10848
		if ($globalDBdriver == 'mysql') {
10849
			$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)";
10850
		} else {
10851
			$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'";
10852
		}
10853
		$sth = $this->db->prepare($query);
10854
		$sth->execute();
10855
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10856
		{
10857
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
10858
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
10859
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
10860
				$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";
10861
				$sthu = $this->db->prepare($update_query);
10862
				$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']));
10863
			}
10864
		}
10865
		
10866
		if ($globalDebug) print "Airlines...\n";
10867
		//airlines
10868
		if ($globalDBdriver == 'mysql') {
10869
			$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)";
10870
		} elseif ($globalDBdriver == 'pgsql') {
10871
			$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'";
10872
		}
10873
		$sth = $this->db->prepare($query);
10874
		$sth->execute();
10875
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10876
		{
10877
			if (is_numeric(substr($row['ident'], -1, 1)))
10878
			{
10879
				$fromsource = NULL;
10880
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
10881
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
10882
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
10883
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
10884
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
10885
				if (isset($airline_array[0]['name'])) {
10886
					$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";
10887
					$sthu = $this->db->prepare($update_query);
10888
					$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']));
10889
				}
10890
			}
10891
		}
10892
10893
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
10894
		//duplicate modes
10895
		$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";
10896
		$sth = $this->db->prepare($query);
10897
		$sth->execute();
10898
		
10899
		if ($globalDebug) print "Aircraft...\n";
10900
		//aircraft
10901
		if ($globalDBdriver == 'mysql') {
10902
			$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)";
10903
		} elseif ($globalDBdriver == 'pgsql') {
10904
			$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'";
10905
		}
10906
		$sth = $this->db->prepare($query);
10907
		$sth->execute();
10908
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10909
		{
10910
			if ($row['aircraft_icao'] != '') {
10911
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
10912
				if ($row['registration'] != ""){
10913
					$image_array = $Image->getSpotterImage($row['registration']);
10914
					if (!isset($image_array[0]['registration'])) {
10915
						$Image->addSpotterImage($row['registration']);
10916
					}
10917
				}
10918
				if (count($aircraft_name) > 0) {
10919
					$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";
10920
					$sthu = $this->db->prepare($update_query);
10921
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
10922
				}
10923
			}
10924
		}
10925
	}	
10926
10927
	// Update arrival airports for data already in DB
10928
	public function updateArrivalAirports()
10929
	{
10930
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
10931
		$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";
10932
		$sth = $this->db->prepare($query);
10933
		$sth->execute();
10934
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10935
		{
10936
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
10937
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
10938
				$airport_icao = '';
10939
				 if (isset($closestAirports[0])) {
10940
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
10941
						$airport_icao = $closestAirports[0]['icao'];
10942
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10943
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
10944
						foreach ($closestAirports as $airport) {
10945
							if ($row['arrival_airport_icao'] == $airport['icao']) {
10946
								$airport_icao = $airport['icao'];
10947
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10948
								break;
10949
							}
10950
						}
10951
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
10952
						$airport_icao = $closestAirports[0]['icao'];
10953
						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";
10954
					} else {
10955
						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";
10956
					}
10957
				} else {
10958
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
10959
				}
10960
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
10961
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
10962
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
10963
					$sthu = $this->db->prepare($update_query);
10964
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
10965
				}
10966
			}
10967
		}
10968
	}
10969
	
10970
	public function closestAirports($origLat,$origLon,$dist = 10) {
10971
		global $globalDBdriver;
10972
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
10973
/*
10974
		$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 
10975
                      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)) 
10976
                      having distance < $dist ORDER BY distance limit 100;";
10977
*/
10978
		if ($globalDBdriver == 'mysql') {
10979
			$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 
10980
	                      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)) 
10981
	                      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;";
10982
                } else {
10983
			$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 
10984
	                      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)) 
10985
	                      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;";
10986
    		}
10987
		$sth = $this->db->prepare($query);
10988
		$sth->execute();
10989
		return $sth->fetchAll(PDO::FETCH_ASSOC);
10990
	}
10991
}
10992
/*
10993
$Spotter = new Spotter();
10994
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
10995
*/
10996
/*
10997
$Spotter = new Spotter();
10998
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
10999
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
11000
print_r($da);
11001
print_r($aa);
11002
print_r(array_merge($da,$aa));
11003
*/
11004
?>