Completed
Push — master ( d89c41...b8fcbd )
by Yannick
06:01
created

Spotter::countOverallPilots()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

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