Completed
Push — master ( e47bfe...1fed4c )
by Yannick
05:31
created

Spotter::addSpotterData()   F

Complexity

Conditions 99
Paths > 20000

Size

Total Lines 304
Code Lines 192

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 99
eloc 192
nc 429496.7295
nop 25
dl 0
loc 304
rs 2
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

Long Method

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

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

Commonly applied refactorings include:

Many Parameters

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

There are several approaches to avoid long parameter lists:

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $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' 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
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1496
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1497
			}
1498
		}
1499
		
1500
		if ($limit != "")
1501
		{
1502
			$limit_array = explode(",", $limit);
1503
			
1504
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1505
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1506
			
1507
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1508
			{
1509
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1510
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1511
			}
1512
		}
1513
1514
		if ($sort != "")
1515
		{
1516
			$search_orderby_array = $this->getOrderBy();
1517
			$orderby_query = $search_orderby_array[$sort]['sql'];
1518
		} else {
1519
			$orderby_query = " ORDER BY spotter_output.date DESC";
1520
		}
1521
1522
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1523
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1524
		return $spotter_array;
1525
	}
1526
1527
1528
1529
	/**
1530
	* Gets all the spotter information based on the country name
1531
	*
1532
	* @return Array the spotter information
1533
	*
1534
	*/
1535
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1536
	{
1537
		global $global_query;
1538
		
1539
		date_default_timezone_set('UTC');
1540
		
1541
		$query_values = array();
1542
		$limit_query = '';
1543
		$additional_query = '';
1544
		$filter_query = $this->getFilter($filters,true,true);
1545
		if ($country != "")
1546
		{
1547
			if (!is_string($country))
1548
			{
1549
				return false;
1550
			} else {
1551
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1552
				$additional_query .= " OR spotter_output.airline_country = :country";
1553
				$query_values = array(':country' => $country);
1554
			}
1555
		}
1556
		
1557
		if ($limit != "")
1558
		{
1559
			$limit_array = explode(",", $limit);
1560
			
1561
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1562
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1563
			
1564
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1565
			{
1566
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1567
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1568
			}
1569
		}
1570
					
1571
		if ($sort != "")
1572
		{
1573
			$search_orderby_array = $this->getOrderBy();
1574
			$orderby_query = $search_orderby_array[$sort]['sql'];
1575
		} else {
1576
			$orderby_query = " ORDER BY spotter_output.date DESC";
1577
		}
1578
1579
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1580
1581
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1582
1583
		return $spotter_array;
1584
	}	
1585
	
1586
	
1587
	/**
1588
	* Gets all the spotter information based on the manufacturer name
1589
	*
1590
	* @return Array the spotter information
1591
	*
1592
	*/
1593
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1594
	{
1595
		global $global_query;
1596
		
1597
		date_default_timezone_set('UTC');
1598
		
1599
		$query_values = array();
1600
		$additional_query = '';
1601
		$limit_query = '';
1602
		$filter_query = $this->getFilter($filters,true,true);
1603
		
1604
		if ($aircraft_manufacturer != "")
1605
		{
1606
			if (!is_string($aircraft_manufacturer))
1607
			{
1608
				return false;
1609
			} else {
1610
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1611
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1612
			}
1613
		}
1614
		
1615
		if ($limit != "")
1616
		{
1617
			$limit_array = explode(",", $limit);
1618
			
1619
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1620
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1621
			
1622
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1623
			{
1624
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1625
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1626
			}
1627
		}
1628
1629
		if ($sort != "")
1630
		{
1631
			$search_orderby_array = $this->getOrderBy();
1632
			$orderby_query = $search_orderby_array[$sort]['sql'];
1633
		} else {
1634
			$orderby_query = " ORDER BY spotter_output.date DESC";
1635
		}
1636
1637
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1638
1639
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1640
1641
		return $spotter_array;
1642
	}
1643
1644
1645
  
1646
  
1647
	/**
1648
	* Gets a list of all aircraft that take a route
1649
	*
1650
	* @param String $departure_airport_icao ICAO code of departure airport
1651
	* @param String $arrival_airport_icao ICAO code of arrival airport
1652
	* @return Array the spotter information
1653
	*
1654
	*/
1655
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1656
	{
1657
		global $global_query;
1658
		
1659
		$query_values = array();
1660
		$additional_query = '';
1661
		$limit_query = '';
1662
		$filter_query = $this->getFilter($filters,true,true);
1663
		if ($departure_airport_icao != "")
1664
		{
1665
			if (!is_string($departure_airport_icao))
1666
			{
1667
				return false;
1668
			} else {
1669
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1670
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1671
				//$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";
1672
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1673
			}
1674
		}
1675
		
1676
		if ($arrival_airport_icao != "")
1677
		{
1678
			if (!is_string($arrival_airport_icao))
1679
			{
1680
				return false;
1681
			} else {
1682
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1683
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1684
				//$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)";
1685
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1686
			}
1687
		}
1688
		
1689
		if ($limit != "")
1690
		{
1691
			$limit_array = explode(",", $limit);
1692
			
1693
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1694
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1695
			
1696
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1697
			{
1698
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1699
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1700
			}
1701
		}
1702
	
1703
		if ($sort != "")
1704
		{
1705
			$search_orderby_array = $this->getOrderBy();
1706
			$orderby_query = $search_orderby_array[$sort]['sql'];
1707
		} else {
1708
			$orderby_query = " ORDER BY spotter_output.date DESC";
1709
		}
1710
1711
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1712
          
1713
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1714
1715
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1716
1717
		return $spotter_array;
1718
	}
1719
	
1720
	
1721
	
1722
	/**
1723
	* Gets all the spotter information based on the special column in the table
1724
	*
1725
	* @return Array the spotter information
1726
	*
1727
	*/
1728
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1729
	{
1730
		global $global_query;
1731
		
1732
		date_default_timezone_set('UTC');
1733
		$filter_query = $this->getFilter($filter,true,true);
1734
		$limit_query = '';
1735
		
1736
		if ($limit != "")
1737
		{
1738
			$limit_array = explode(",", $limit);
1739
			
1740
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1741
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1742
			
1743
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1744
			{
1745
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1746
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1747
			}
1748
		}
1749
		
1750
		if ($sort != "")
1751
		{
1752
			$search_orderby_array = $this->getOrderBy();
1753
			$orderby_query = $search_orderby_array[$sort]['sql'];
1754
		} else {
1755
			$orderby_query = " ORDER BY spotter_output.date DESC";
1756
		}
1757
1758
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1759
1760
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1761
1762
		return $spotter_array;
1763
	}
1764
1765
	/**
1766
	* Gets all the highlight based on a aircraft registration
1767
	*
1768
	* @return String the highlight text
1769
	*
1770
	*/
1771
	public function getHighlightByRegistration($registration,$filter = array())
1772
	{
1773
		global $global_query;
1774
		
1775
		date_default_timezone_set('UTC');
1776
		$filter_query = $this->getFilter($filter,true,true);
1777
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1778
		
1779
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1780
		$sth = $this->db->prepare($query);
1781
		$sth->execute(array(':registration' => $registration));
1782
1783
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1784
		{
1785
			$highlight = $row['highlight'];
1786
		}
1787
		if (isset($highlight)) return $highlight;
1788
	}
1789
1790
	
1791
	/**
1792
	* Gets the squawk usage from squawk code
1793
	*
1794
	* @param String $squawk squawk code
1795
	* @param String $country country
1796
	* @return String usage
1797
	*
1798
	*/
1799
	public function getSquawkUsage($squawk = '',$country = 'FR')
1800
	{
1801
		
1802
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1803
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1804
1805
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1806
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1807
		
1808
		$sth = $this->db->prepare($query);
1809
		$sth->execute($query_values);
1810
    
1811
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1812
		$sth->closeCursor();
1813
		if (count($row) > 0) {
1814
			return $row['usage'];
1815
		} else return '';
1816
	}
1817
1818
	/**
1819
	* Gets the airport icao from the iata
1820
	*
1821
	* @param String $airport_iata the iata code of the airport
1822
	* @return String airport iata
1823
	*
1824
	*/
1825
	public function getAirportIcao($airport_iata = '')
1826
	{
1827
		
1828
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1829
1830
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1831
		$query_values = array(':airport' => $airport_iata);
1832
		
1833
		$sth = $this->db->prepare($query);
1834
		$sth->execute($query_values);
1835
		
1836
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1837
		$sth->closeCursor();
1838
		if (count($row) > 0) {
1839
			return $row['icao'];
1840
		} else return '';
1841
	}
1842
1843
	/**
1844
	* Gets the airport distance
1845
	*
1846
	* @param String $airport_icao the icao code of the airport
1847
	* @param Float $latitude the latitude
1848
	* @param Float $longitude the longitude
1849
	* @return Float distance to the airport
1850
	*
1851
	*/
1852
	public function getAirportDistance($airport_icao,$latitude,$longitude)
1853
	{
1854
		
1855
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
1856
1857
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
1858
		$query_values = array(':airport' => $airport_icao);
1859
		$sth = $this->db->prepare($query);
1860
		$sth->execute($query_values);
1861
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1862
		$sth->closeCursor();
1863
		if (count($row) > 0) {
1864
			$airport_latitude = $row['latitude'];
1865
			$airport_longitude = $row['longitude'];
1866
			$Common = new Common();
1867
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
1868
		} else return '';
1869
	}
1870
	
1871
	/**
1872
	* Gets the airport info based on the icao
1873
	*
1874
	* @param String $airport the icao code of the airport
1875
	* @return Array airport information
1876
	*
1877
	*/
1878
	public function getAllAirportInfo($airport = '')
1879
	{
1880
		
1881
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
1882
1883
		$query_values = array();
1884
		if ($airport == 'NA') {
1885
			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' => ''));
1886
		} elseif ($airport == '') {
1887
			$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";
1888
		} else {
1889
			$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";
1890
			$query_values = array(':airport' => $airport);
1891
		}
1892
		
1893
		$sth = $this->db->prepare($query);
1894
		$sth->execute($query_values);
1895
		/*
1896
		$airport_array = array();
1897
		$temp_array = array();
1898
		
1899
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1900
		{
1901
			$temp_array['name'] = $row['name'];
1902
			$temp_array['city'] = $row['city'];
1903
			$temp_array['country'] = $row['country'];
1904
			$temp_array['iata'] = $row['iata'];
1905
			$temp_array['icao'] = $row['icao'];
1906
			$temp_array['latitude'] = $row['latitude'];
1907
			$temp_array['longitude'] = $row['longitude'];
1908
			$temp_array['altitude'] = $row['altitude'];
1909
			$temp_array['home_link'] = $row['home_link'];
1910
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
1911
			$temp_array['image'] = $row['image'];
1912
			$temp_array['image_thumb'] = $row['image_thumb'];
1913
1914
			$airport_array[] = $temp_array;
1915
		}
1916
1917
		return $airport_array;
1918
		*/
1919
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1920
	}
1921
	
1922
	/**
1923
	* Gets the airport info based on the country
1924
	*
1925
	* @param Array $countries Airports countries
1926
	* @return Array airport information
1927
	*
1928
	*/
1929
	public function getAllAirportInfobyCountry($countries)
1930
	{
1931
		$lst_countries = '';
1932
		foreach ($countries as $country) {
1933
			$country = filter_var($country,FILTER_SANITIZE_STRING);
1934
			if ($lst_countries == '') {
1935
				$lst_countries = "'".$country."'";
1936
			} else {
1937
				$lst_countries .= ",'".$country."'";
1938
			}
1939
		}
1940
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
1941
		
1942
		$sth = $this->db->prepare($query);
1943
		$sth->execute();
1944
    
1945
		$airport_array = array();
1946
		$temp_array = array();
1947
		
1948
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1949
		{
1950
			$temp_array['name'] = $row['name'];
1951
			$temp_array['city'] = $row['city'];
1952
			$temp_array['country'] = $row['country'];
1953
			$temp_array['iata'] = $row['iata'];
1954
			$temp_array['icao'] = $row['icao'];
1955
			$temp_array['latitude'] = $row['latitude'];
1956
			$temp_array['longitude'] = $row['longitude'];
1957
			$temp_array['altitude'] = $row['altitude'];
1958
1959
			$airport_array[] = $temp_array;
1960
		}
1961
1962
		return $airport_array;
1963
	}
1964
	
1965
	/**
1966
	* Gets airports info based on the coord
1967
	*
1968
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
1969
	* @return Array airport information
1970
	*
1971
	*/
1972
	public function getAllAirportInfobyCoord($coord)
1973
	{
1974
		global $globalDBdriver;
1975
		if (is_array($coord)) {
1976
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1977
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1978
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1979
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1980
		} else return array();
1981
		if ($globalDBdriver == 'mysql') {
1982
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1983
		} else {
1984
			$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'";
1985
		}
1986
		$sth = $this->db->prepare($query);
1987
		$sth->execute();
1988
    
1989
		$airport_array = array();
1990
		
1991
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1992
		{
1993
			$temp_array = $row;
1994
1995
			$airport_array[] = $temp_array;
1996
		}
1997
1998
		return $airport_array;
1999
	}
2000
2001
	/**
2002
	* Gets waypoints info based on the coord
2003
	*
2004
	* @param Array $coord waypoints coord
2005
	* @return Array airport information
2006
	*
2007
	*/
2008
	public function getAllWaypointsInfobyCoord($coord)
2009
	{
2010
		if (is_array($coord)) {
2011
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2012
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2013
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2014
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2015
		} else return array();
2016
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2017
		$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.")";
2018
		//$query  = "SELECT waypoints.* FROM waypoints";
2019
		//$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";
2020
		//$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;
2021
		//$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;
2022
		//echo $query;
2023
		
2024
		$sth = $this->db->prepare($query);
2025
		$sth->execute();
2026
    
2027
		$waypoints_array = array();
2028
		
2029
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2030
		{
2031
			$temp_array = $row;
2032
2033
			$waypoints_array[] = $temp_array;
2034
		}
2035
2036
		return $waypoints_array;
2037
	}
2038
	
2039
	
2040
	/**
2041
	* Gets the airline info based on the icao code or iata code
2042
	*
2043
	* @param String $airline_icao the iata code of the airport
2044
	* @return Array airport information
2045
	*
2046
	*/
2047
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2048
	{
2049
		global $globalUseRealAirlines;
2050
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2051
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2052
		if ($airline_icao == 'NA') {
2053
			$airline_array = array();
2054
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2055
			return $airline_array;
2056
		} else {
2057
			if (strlen($airline_icao) == 2) {
2058
				if ($fromsource === NULL) {
2059
					$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";
2060
				} else {
2061
					$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";
2062
				}
2063
			} else {
2064
				if ($fromsource === NULL) {
2065
					$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";
2066
				} else {
2067
					$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";
2068
				}
2069
			}
2070
			
2071
			$sth = $this->db->prepare($query);
2072
			if ($fromsource === NULL) {
2073
				$sth->execute(array(':airline_icao' => $airline_icao));
2074
			} else {
2075
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2076
			}
2077
                        /*
2078
			$airline_array = array();
2079
			$temp_array = array();
2080
		
2081
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2082
			{
2083
				$temp_array['name'] = $row['name'];
2084
				$temp_array['iata'] = $row['iata'];
2085
				$temp_array['icao'] = $row['icao'];
2086
				$temp_array['callsign'] = $row['callsign'];
2087
				$temp_array['country'] = $row['country'];
2088
				$temp_array['type'] = $row['type'];
2089
				$airline_array[] = $temp_array;
2090
			}
2091
			return $airline_array;
2092
			*/
2093
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2094
			if (empty($result) && $fromsource !== NULL) {
2095
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2096
				$sth = $this->db->prepare($query);
2097
				$sth->execute(array(':fromsource' => $fromsource));
2098
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2099
				$sth->closeCursor();
2100
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2101
			}
2102
			return $result;
2103
		}
2104
	}
2105
	
2106
	
2107
	
2108
	/**
2109
	* Gets the aircraft info based on the aircraft type
2110
	*
2111
	* @param String $aircraft_type the aircraft type
2112
	* @return Array aircraft information
2113
	*
2114
	*/
2115
	public function getAllAircraftInfo($aircraft_type)
2116
	{
2117
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2118
2119
		if ($aircraft_type == 'NA') {
2120
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2121
		}
2122
		$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";
2123
		
2124
		$sth = $this->db->prepare($query);
2125
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2126
		/*
2127
		$aircraft_array = array();
2128
		$temp_array = array();
2129
		
2130
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2131
		{
2132
			$temp_array = array();
2133
			$temp_array['icao'] = $row['icao'];
2134
			$temp_array['type'] = $row['type'];
2135
			$temp_array['manufacturer'] = $row['manufacturer'];
2136
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2137
2138
			$aircraft_array[] = $temp_array;
2139
		}
2140
		return $aircraft_array;
2141
		*/
2142
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2143
	}
2144
2145
	/**
2146
	* Gets the aircraft icao based on the aircraft name/type
2147
	*
2148
	* @param String $aircraft_type the aircraft type
2149
	* @return String aircraft information
2150
	*
2151
	*/
2152
	public function getAircraftIcao($aircraft_type)
2153
	{
2154
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2155
		$all_aircraft = array('737-300' => 'B733',
2156
				'777-200' => 'B772',
2157
				'777-200ER' => 'B772',
2158
				'777-300ER' => 'B77W',
2159
				'c172p' => 'C172',
2160
				'aerostar' => 'AEST',
2161
				'A320-211' => 'A320',
2162
				'747-8i' => 'B748',
2163
				'A380' => 'A388');
2164
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2165
2166
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2167
		$aircraft_type = strtoupper($aircraft_type);
2168
		$sth = $this->db->prepare($query);
2169
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2170
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2171
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2172
		else return '';
2173
	}
2174
	
2175
	/**
2176
	* Gets the aircraft info based on the aircraft modes
2177
	*
2178
	* @param String $aircraft_modes the aircraft ident (hex)
2179
	* @return String aircraft type
2180
	*
2181
	*/
2182
	public function getAllAircraftType($aircraft_modes)
2183
	{
2184
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2185
2186
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
2187
		
2188
		$sth = $this->db->prepare($query);
2189
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2190
2191
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2192
		$sth->closeCursor();
2193
		if (isset($row['icaotypecode'])) {
2194
			return $row['icaotypecode'];
2195
		} else return '';
2196
	}
2197
2198
	/**
2199
	* Gets the aircraft info based on the aircraft registration
2200
	*
2201
	* @param String $aircraft_registration the aircraft registration
0 ignored issues
show
Documentation introduced by
There is no parameter named $aircraft_registration. Did you maybe mean $registration?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
2202
	* @return String aircraft type
2203
	*
2204
	*/
2205
	public function getAllAircraftTypeByRegistration($registration)
2206
	{
2207
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2208
2209
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2210
		
2211
		$sth = $this->db->prepare($query);
2212
		$sth->execute(array(':registration' => $registration));
2213
2214
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2215
		$sth->closeCursor();
2216
		if (isset($row['icaotypecode'])) {
2217
			return $row['icaotypecode'];
2218
		} else return '';
2219
	}
2220
2221
	/**
2222
	* Gets correct aircraft operator corde
2223
	*
2224
	* @param String $operator the aircraft operator code (callsign)
2225
	* @return String aircraft operator code
2226
	*
2227
	*/
2228
	public function getOperator($operator)
2229
	{
2230
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2231
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2232
		
2233
		$sth = $this->db->prepare($query);
2234
		$sth->execute(array(':operator' => $operator));
2235
2236
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2237
		$sth->closeCursor();
2238
		if (isset($row['operator_correct'])) {
2239
			return $row['operator_correct'];
2240
		} else return $operator;
2241
	}
2242
2243
	/**
2244
	* Gets the aircraft route based on the aircraft callsign
2245
	*
2246
	* @param String $callsign the aircraft callsign
2247
	* @return Array aircraft type
2248
	*
2249
	*/
2250
	public function getRouteInfo($callsign)
2251
	{
2252
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2253
                if ($callsign == '') return array();
2254
		$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";
2255
		
2256
		$sth = $this->db->prepare($query);
2257
		$sth->execute(array(':callsign' => $callsign));
2258
2259
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2260
		$sth->closeCursor();
2261
		if (count($row) > 0) {
2262
			return $row;
2263
		} else return array();
2264
	}
2265
	
2266
	/**
2267
	* Gets the aircraft info based on the aircraft registration
2268
	*
2269
	* @param String $registration the aircraft registration
2270
	* @return Array aircraft information
2271
	*
2272
	*/
2273
	public function getAircraftInfoByRegistration($registration)
2274
	{
2275
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2276
2277
		$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";
2278
		
2279
		$sth = $this->db->prepare($query);
2280
		$sth->execute(array(':registration' => $registration));
2281
2282
		$aircraft_array = array();
2283
		$temp_array = array();
2284
		
2285
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2286
		{
2287
			$temp_array['airline_icao'] = $row['airline_icao'];
2288
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2289
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2290
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2291
2292
			$aircraft_array[] = $temp_array;
2293
		}
2294
2295
		return $aircraft_array;
2296
	}
2297
	
2298
	/**
2299
	* Gets the aircraft owner & base based on the aircraft registration
2300
	*
2301
	* @param String $registration the aircraft registration
2302
	* @return Array aircraft information
2303
	*
2304
	*/
2305
	public function getAircraftOwnerByRegistration($registration)
2306
	{
2307
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2308
		$Connection = new Connection($this->db);
2309
		if ($Connection->tableExists('aircraft_owner')) {
2310
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2311
			$sth = $this->db->prepare($query);
2312
			$sth->execute(array(':registration' => $registration));
2313
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2314
			$sth->closeCursor();
2315
			return $result;
2316
		} else return array();
2317
	}
2318
	
2319
  
2320
  /**
2321
	* Gets all flights (but with only little info)
2322
	*
2323
	* @return Array basic flight information
2324
	*
2325
	*/
2326
	public function getAllFlightsforSitemap()
2327
	{
2328
		//$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 ";
2329
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2330
		
2331
		$sth = $this->db->prepare($query);
2332
		$sth->execute();
2333
                  /*
2334
		$flight_array = array();
2335
		$temp_array = array();
2336
		
2337
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2338
		{
2339
			$temp_array['spotter_id'] = $row['spotter_id'];
2340
//			$temp_array['ident'] = $row['ident'];
2341
//			$temp_array['airline_name'] = $row['airline_name'];
2342
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2343
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2344
			//$temp_array['image'] = $row['image'];
2345
2346
			$flight_array[] = $temp_array;
2347
		}
2348
2349
		return $flight_array;
2350
		*/
2351
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2352
	}
2353
  
2354
	/**
2355
	* Gets a list of all aircraft manufacturers
2356
	*
2357
	* @return Array list of aircraft types
2358
	*
2359
	*/
2360
	public function getAllManufacturers()
2361
	{
2362
		/*
2363
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2364
								FROM spotter_output
2365
								WHERE spotter_output.aircraft_manufacturer <> '' 
2366
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2367
		  */
2368
		
2369
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2370
		$sth = $this->db->prepare($query);
2371
		$sth->execute();
2372
2373
		$manufacturer_array = array();
2374
		$temp_array = array();
2375
		
2376
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2377
		{
2378
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2379
2380
			$manufacturer_array[] = $temp_array;
2381
		}
2382
2383
		return $manufacturer_array;
2384
	}
2385
  
2386
  
2387
  /**
2388
	* Gets a list of all aircraft types
2389
	*
2390
	* @return Array list of aircraft types
2391
	*
2392
	*/
2393
	public function getAllAircraftTypes($filters = array())
2394
	{
2395
		/*
2396
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2397
								FROM spotter_output  
2398
								WHERE spotter_output.aircraft_icao <> '' 
2399
								ORDER BY spotter_output.aircraft_name ASC";
2400
								
2401
		*/
2402
		$filter_query = $this->getFilter($filters,true,true);
2403
		$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";
2404
		
2405
		$sth = $this->db->prepare($query);
2406
		$sth->execute();
2407
2408
		$aircraft_array = array();
2409
		$temp_array = array();
2410
		
2411
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2412
		{
2413
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2414
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2415
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2416
2417
			$aircraft_array[] = $temp_array;
2418
		}
2419
2420
		return $aircraft_array;
2421
	}
2422
	
2423
	
2424
	/**
2425
	* Gets a list of all aircraft registrations
2426
	*
2427
	* @return Array list of aircraft registrations
2428
	*
2429
	*/
2430
	public function getAllAircraftRegistrations($filters = array())
2431
	{
2432
		$filter_query = $this->getFilter($filters,true,true);
2433
		$query  = "SELECT DISTINCT spotter_output.registration 
2434
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2435
				ORDER BY spotter_output.registration ASC";
2436
2437
		$sth = $this->db->prepare($query);
2438
		$sth->execute();
2439
2440
		$aircraft_array = array();
2441
		$temp_array = array();
2442
		
2443
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2444
		{
2445
			$temp_array['registration'] = $row['registration'];
2446
2447
			$aircraft_array[] = $temp_array;
2448
		}
2449
2450
		return $aircraft_array;
2451
	}
2452
2453
	/**
2454
	* Gets all source name
2455
	*
2456
	* @param String type format of source
2457
	* @return Array list of source name
2458
	*
2459
	*/
2460
	public function getAllSourceName($type = '',$filters = array())
2461
	{
2462
		$filter_query = $this->getFilter($filters,true,true);
2463
		$query_values = array();
2464
		$query  = "SELECT DISTINCT spotter_output.source_name 
2465
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2466
		if ($type != '') {
2467
			$query_values = array(':type' => $type);
2468
			$query .= " AND format_source = :type";
2469
		}
2470
		$query .= " ORDER BY spotter_output.source_name ASC";
2471
2472
		$sth = $this->db->prepare($query);
2473
		if (!empty($query_values)) $sth->execute($query_values);
2474
		else $sth->execute();
2475
2476
		$source_array = array();
2477
		$temp_array = array();
2478
		
2479
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2480
		{
2481
			$temp_array['source_name'] = $row['source_name'];
2482
			$source_array[] = $temp_array;
2483
		}
2484
		return $source_array;
2485
	}
2486
2487
2488
2489
	/**
2490
	* Gets a list of all airline names
2491
	*
2492
	* @return Array list of airline names
2493
	*
2494
	*/
2495
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2496
	{
2497
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2498
		$filter_query = $this->getFilter($filters,true,true);
2499
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2500
		if ($airline_type == '' || $airline_type == 'all') {
2501
			/*
2502
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2503
								FROM spotter_output
2504
								WHERE spotter_output.airline_icao <> '' 
2505
								ORDER BY spotter_output.airline_name ASC";
2506
			*/
2507
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2508
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2509
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2510
			if ($forsource === NULL) {
2511
				$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";
2512
				$query_data = array();
2513
			} else {
2514
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2515
				$query_data = array(':forsource' => $forsource);
2516
			}
2517
		} else {
2518
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2519
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2520
					AND spotter_output.airline_type = :airline_type 
2521
					ORDER BY spotter_output.airline_icao ASC";
2522
			$query_data = array(':airline_type' => $airline_type);
2523
		}
2524
		
2525
		$sth = $this->db->prepare($query);
2526
		$sth->execute($query_data);
2527
    
2528
		$airline_array = array();
2529
		$temp_array = array();
2530
		
2531
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2532
		{
2533
			$temp_array['airline_icao'] = $row['airline_icao'];
2534
			$temp_array['airline_name'] = $row['airline_name'];
2535
			$temp_array['airline_type'] = $row['airline_type'];
2536
2537
			$airline_array[] = $temp_array;
2538
		}
2539
		return $airline_array;
2540
	}
2541
	
2542
	
2543
	/**
2544
	* Gets a list of all airline countries
2545
	*
2546
	* @return Array list of airline countries
2547
	*
2548
	*/
2549
	public function getAllAirlineCountries($filters = array())
2550
	{
2551
		$filter_query = $this->getFilter($filters,true,true);
2552
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2553
				FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2554
				ORDER BY spotter_output.airline_country ASC";
2555
		
2556
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2557
		$sth = $this->db->prepare($query);
2558
		$sth->execute();
2559
2560
		$airline_array = array();
2561
		$temp_array = array();
2562
		
2563
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2564
		{
2565
			$temp_array['airline_country'] = $row['airline_country'];
2566
2567
			$airline_array[] = $temp_array;
2568
		}
2569
2570
		return $airline_array;
2571
	}
2572
2573
	
2574
	
2575
	/**
2576
	* Gets a list of all departure & arrival names
2577
	*
2578
	* @return Array list of airport names
2579
	*
2580
	*/
2581
	public function getAllAirportNames($filters = array())
2582
	{
2583
		$filter_query = $this->getFilter($filters,true,true);
2584
		$airport_array = array();
2585
		$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
2586
				FROM spotter_output".$filter_query." spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2587
				ORDER BY spotter_output.departure_airport_city ASC";
2588
		
2589
		//$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";
2590
		$sth = $this->db->prepare($query);
2591
		$sth->execute();
2592
2593
		$temp_array = array();
2594
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2595
		{
2596
			$temp_array['airport_icao'] = $row['airport_icao'];
2597
			$temp_array['airport_name'] = $row['airport_name'];
2598
			$temp_array['airport_city'] = $row['airport_city'];
2599
			$temp_array['airport_country'] = $row['airport_country'];
2600
2601
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2602
		}
2603
2604
		$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
2605
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2606
								ORDER BY spotter_output.arrival_airport_city ASC";
2607
					
2608
		$sth = $this->db->prepare($query);
2609
		$sth->execute();
2610
2611
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2612
			{
2613
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2614
		//	{
2615
				$temp_array['airport_icao'] = $row['airport_icao'];
2616
				$temp_array['airport_name'] = $row['airport_name'];
2617
				$temp_array['airport_city'] = $row['airport_city'];
2618
				$temp_array['airport_country'] = $row['airport_country'];
2619
				
2620
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2621
		//	}
2622
		}
2623
2624
		return $airport_array;
2625
	} 
2626
	
2627
	
2628
	/**
2629
	* Gets a list of all departure & arrival airport countries
2630
	*
2631
	* @return Array list of airport countries
2632
	*
2633
	*/
2634
	public function getAllAirportCountries($filters = array())
2635
	{
2636
		$airport_array = array();
2637
					
2638
		  /*
2639
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2640
								FROM spotter_output
2641
								WHERE spotter_output.departure_airport_country <> '' 
2642
								ORDER BY spotter_output.departure_airport_country ASC";
2643
		*/
2644
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2645
		
2646
		$sth = $this->db->prepare($query);
2647
		$sth->execute();
2648
   
2649
		$temp_array = array();
2650
		
2651
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2652
		{
2653
			$temp_array['airport_country'] = $row['airport_country'];
2654
2655
			$airport_array[$row['airport_country']] = $temp_array;
2656
		}
2657
		$filter_query = $this->getFilter($filters,true,true);
2658
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2659
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2660
								ORDER BY spotter_output.arrival_airport_country ASC";
2661
					
2662
		$sth = $this->db->prepare($query);
2663
		$sth->execute();
2664
		
2665
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2666
		{
2667
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2668
			{
2669
				$temp_array['airport_country'] = $row['airport_country'];
2670
				$airport_array[$row['airport_country']] = $temp_array;
2671
			}
2672
		}
2673
2674
		return $airport_array;
2675
	} 
2676
	
2677
	
2678
	
2679
	
2680
	/**
2681
	* Gets a list of all countries (airline, departure airport & arrival airport)
2682
	*
2683
	* @return Array list of countries
2684
	*
2685
	*/
2686
	public function getAllCountries($filters = array())
2687
	{
2688
		$Connection= new Connection($this->db);
2689
		if ($Connection->tableExists('countries')) {
2690
			$query  = "SELECT countries.name AS airport_country
2691
				FROM countries
2692
				ORDER BY countries.name ASC";
2693
			$sth = $this->db->prepare($query);
2694
			$sth->execute();
2695
   
2696
			$temp_array = array();
2697
			$country_array = array();
2698
		
2699
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2700
			{
2701
				$temp_array['country'] = $row['airport_country'];
2702
				$country_array[$row['airport_country']] = $temp_array;
2703
			}
2704
		} else {
2705
			$filter_query = $this->getFilter($filters,true,true);
2706
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2707
								FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' 
2708
								ORDER BY spotter_output.departure_airport_country ASC";
2709
2710
			$sth = $this->db->prepare($query);
2711
			$sth->execute();
2712
   
2713
			$temp_array = array();
2714
			$country_array = array();
2715
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2716
			{
2717
				$temp_array['country'] = $row['airport_country'];
2718
				$country_array[$row['airport_country']] = $temp_array;
2719
			}
2720
2721
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2722
								FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' 
2723
								ORDER BY spotter_output.arrival_airport_country ASC";
2724
					
2725
		$sth = $this->db->prepare($query);
2726
		$sth->execute();
2727
		
2728
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2729
		{
2730
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
2731
			{
2732
				$temp_array['country'] = $row['airport_country'];
2733
				
2734
				$country_array[$row['country']] = $temp_array;
2735
			}
2736
		}
2737
		
2738
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2739
								FROM spotter_output".$filter_query." spotter_output.airline_country <> '' 
2740
								ORDER BY spotter_output.airline_country ASC";
2741
					
2742
		$sth = $this->db->prepare($query);
2743
		$sth->execute();
2744
		
2745
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2746
		{
2747
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
2748
			{
2749
				$temp_array['country'] = $row['airline_country'];
2750
				
2751
				$country_array[$row['country']] = $temp_array;
2752
			}
2753
		}
2754
		}  
2755
		return $country_array;
2756
	} 
2757
	
2758
	
2759
	
2760
	
2761
	/**
2762
	* Gets a list of all idents/callsigns
2763
	*
2764
	* @return Array list of ident/callsign names
2765
	*
2766
	*/
2767
	public function getAllIdents($filters = array())
2768
	{
2769
		$filter_query = $this->getFilter($filters,true,true);
2770
		$query  = "SELECT DISTINCT spotter_output.ident
2771
								FROM spotter_output".$filter_query." spotter_output.ident <> '' 
2772
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
2773
2774
		$sth = $this->db->prepare($query);
2775
		$sth->execute();
2776
    
2777
		$ident_array = array();
2778
		$temp_array = array();
2779
		
2780
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2781
		{
2782
			$temp_array['ident'] = $row['ident'];
2783
			$ident_array[] = $temp_array;
2784
		}
2785
2786
		return $ident_array;
2787
	}
2788
2789
	/**
2790
	* Get a list of flights from airport since 7 days
2791
	* @return Array number, icao, name and city of airports
2792
	*/
2793
2794
	public function getLast7DaysAirportsDeparture($airport_icao = '',$filters = array()) {
2795
		global $globalTimezone, $globalDBdriver;
2796
		$filter_query = $this->getFilter($filters,true,true);
2797
		if ($globalTimezone != '') {
2798
			date_default_timezone_set($globalTimezone);
2799
			$datetime = new DateTime();
2800
			$offset = $datetime->format('P');
2801
		} else $offset = '+00:00';
2802
		if ($airport_icao == '') {
2803
			if ($globalDBdriver == 'mysql') {
2804
				$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' 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";
2805
			} else {
2806
				$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' 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";
2807
			}
2808
			$sth = $this->db->prepare($query);
2809
			$sth->execute(array(':offset' => $offset));
2810
		} else {
2811
			if ($globalDBdriver == 'mysql') {
2812
				$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";
2813
			} else {
2814
				$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";
2815
			}
2816
			$sth = $this->db->prepare($query);
2817
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2818
		}
2819
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2820
	}
2821
2822
	/**
2823
	* Get a list of flights from airport since 7 days
2824
	* @return Array number, icao, name and city of airports
2825
	*/
2826
2827
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
2828
		global $globalTimezone, $globalDBdriver;
2829
		if ($globalTimezone != '') {
2830
			date_default_timezone_set($globalTimezone);
2831
			$datetime = new DateTime();
2832
			$offset = $datetime->format('P');
2833
		} else $offset = '+00:00';
2834
		if ($airport_icao == '') {
2835
			if ($globalDBdriver == 'mysql') {
2836
				$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 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";
2837
			} else {
2838
				$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 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";
2839
			}
2840
			$sth = $this->db->prepare($query);
2841
			$sth->execute(array(':offset' => $offset));
2842
		} else {
2843
			if ($globalDBdriver == 'mysql') {
2844
				$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";
2845
			} else {
2846
				$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";
2847
			}
2848
			$sth = $this->db->prepare($query);
2849
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2850
		}
2851
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2852
	}
2853
2854
	/**
2855
	* Get a list of flights from detected airport since 7 days
2856
	* @return Array number, icao, name and city of airports
2857
	*/
2858
2859
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '', $filters = array()) {
2860
		global $globalTimezone, $globalDBdriver;
2861
		$filter_query = $this->getFilter($filters,true,true);
2862
		if ($globalTimezone != '') {
2863
			date_default_timezone_set($globalTimezone);
2864
			$datetime = new DateTime();
2865
			$offset = $datetime->format('P');
2866
		} else $offset = '+00:00';
2867
		if ($airport_icao == '') {
2868
			if ($globalDBdriver == 'mysql') {
2869
				$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 
2870
				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' 
2871
				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";
2872
			} else {
2873
				$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 
2874
				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' 
2875
				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";
2876
			}
2877
			$sth = $this->db->prepare($query);
2878
			$sth->execute(array(':offset' => $offset));
2879
		} else {
2880
			if ($globalDBdriver == 'mysql') {
2881
				$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 
2882
				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 
2883
				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";
2884
			} else {
2885
				$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 
2886
				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";
2887
			}
2888
			$sth = $this->db->prepare($query);
2889
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2890
		}
2891
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2892
	}
2893
2894
	/**
2895
	* Get a list of flights from detected airport since 7 days
2896
	* @return Array number, icao, name and city of airports
2897
	*/
2898
2899
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
2900
		global $globalTimezone, $globalDBdriver;
2901
		if ($globalTimezone != '') {
2902
			date_default_timezone_set($globalTimezone);
2903
			$datetime = new DateTime();
2904
			$offset = $datetime->format('P');
2905
		} else $offset = '+00:00';
2906
		if ($airport_icao == '') {
2907
			if ($globalDBdriver == 'mysql') {
2908
				$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 
2909
				FROM `spotter_output`, airport 
2910
				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' 
2911
				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";
2912
			} else {
2913
				$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 
2914
				FROM spotter_output, airport 
2915
				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' 
2916
				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";
2917
			}
2918
			$sth = $this->db->prepare($query);
2919
			$sth->execute(array(':offset' => $offset));
2920
		} else {
2921
			if ($globalDBdriver == 'mysql') {
2922
				$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 
2923
				FROM `spotter_output`, airport 
2924
				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 
2925
				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";
2926
			} else {
2927
				$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 
2928
				FROM spotter_output, airport 
2929
				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";
2930
			}
2931
			$sth = $this->db->prepare($query);
2932
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2933
		}
2934
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2935
	}
2936
2937
2938
	/**
2939
	* Get a list of flights to airport since 7 days
2940
	* @return Array number, icao, name and city of airports
2941
	*/
2942
2943
	public function getLast7DaysAirportsArrival($airport_icao = '', $filters = array()) {
2944
		global $globalTimezone, $globalDBdriver;
2945
		$filter_query = $this->getFilter($filters,true,true);
2946
		if ($globalTimezone != '') {
2947
			date_default_timezone_set($globalTimezone);
2948
			$datetime = new DateTime();
2949
			$offset = $datetime->format('P');
2950
		} else $offset = '+00:00';
2951
		if ($airport_icao == '') {
2952
			if ($globalDBdriver == 'mysql') {
2953
				$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' 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";
2954
			} else {
2955
				$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' 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";
2956
			}
2957
			$sth = $this->db->prepare($query);
2958
			$sth->execute(array(':offset' => $offset));
2959
		} else {
2960
			if ($globalDBdriver == 'mysql') {
2961
				$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";
2962
			} else {
2963
				$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";
2964
			}
2965
			$sth = $this->db->prepare($query);
2966
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2967
		}
2968
		
2969
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2970
	}
2971
2972
2973
	/**
2974
	* Get a list of flights detected to airport since 7 days
2975
	* @return Array number, icao, name and city of airports
2976
	*/
2977
2978
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '',$filters = array()) {
2979
		global $globalTimezone, $globalDBdriver;
2980
		$filter_query = $this->getFilter($filters,true,true);
2981
		if ($globalTimezone != '') {
2982
			date_default_timezone_set($globalTimezone);
2983
			$datetime = new DateTime();
2984
			$offset = $datetime->format('P');
2985
		} else $offset = '+00:00';
2986
		if ($airport_icao == '') {
2987
			if ($globalDBdriver == 'mysql') {
2988
				$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 
2989
				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' 
2990
				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";
2991
			} else {
2992
				$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 
2993
				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' 
2994
				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";
2995
			}
2996
			$sth = $this->db->prepare($query);
2997
			$sth->execute(array(':offset' => $offset));
2998
		} else {
2999
			if ($globalDBdriver == 'mysql') {
3000
				$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 
3001
				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 
3002
				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";
3003
			} else {
3004
				$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 
3005
				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 
3006
				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";
3007
			}
3008
			$sth = $this->db->prepare($query);
3009
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3010
		}
3011
		
3012
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3013
	}
3014
3015
3016
	/**
3017
	* Get a list of flights to airport since 7 days
3018
	* @return Array number, icao, name and city of airports
3019
	*/
3020
3021
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
3022
		global $globalTimezone, $globalDBdriver;
3023
		if ($globalTimezone != '') {
3024
			date_default_timezone_set($globalTimezone);
3025
			$datetime = new DateTime();
3026
			$offset = $datetime->format('P');
3027
		} else $offset = '+00:00';
3028
		if ($airport_icao == '') {
3029
			if ($globalDBdriver == 'mysql') {
3030
				$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 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";
3031
			} else {
3032
				$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 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";
3033
			}
3034
			$sth = $this->db->prepare($query);
3035
			$sth->execute(array(':offset' => $offset));
3036
		} else {
3037
			if ($globalDBdriver == 'mysql') {
3038
				$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";
3039
			} else {
3040
				$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";
3041
			}
3042
			$sth = $this->db->prepare($query);
3043
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3044
		}
3045
		
3046
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3047
	}
3048
3049
3050
	/**
3051
	* Get a list of flights detected to airport since 7 days
3052
	* @return Array number, icao, name and city of airports
3053
	*/
3054
3055
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
3056
		global $globalTimezone, $globalDBdriver;
3057
		if ($globalTimezone != '') {
3058
			date_default_timezone_set($globalTimezone);
3059
			$datetime = new DateTime();
3060
			$offset = $datetime->format('P');
3061
		} else $offset = '+00:00';
3062
		if ($airport_icao == '') {
3063
			if ($globalDBdriver == 'mysql') {
3064
				$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 
3065
				FROM `spotter_output`, airport 
3066
				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' 
3067
				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";
3068
			} else {
3069
				$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 
3070
				FROM spotter_output, airport 
3071
				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' 
3072
				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";
3073
			}
3074
			$sth = $this->db->prepare($query);
3075
			$sth->execute(array(':offset' => $offset));
3076
		} else {
3077
			if ($globalDBdriver == 'mysql') {
3078
				$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 
3079
				FROM `spotter_output`, airport 
3080
				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 
3081
				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";
3082
			} else {
3083
				$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 
3084
				FROM spotter_output, airport 
3085
				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 
3086
				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";
3087
			}
3088
			$sth = $this->db->prepare($query);
3089
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3090
		}
3091
		
3092
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3093
	}
3094
3095
3096
	/**
3097
	* Gets a list of all dates
3098
	*
3099
	* @return Array list of date names
3100
	*
3101
	*/
3102
	public function getAllDates()
3103
	{
3104
		global $globalTimezone, $globalDBdriver;
3105
		if ($globalTimezone != '') {
3106
			date_default_timezone_set($globalTimezone);
3107
			$datetime = new DateTime();
3108
			$offset = $datetime->format('P');
3109
		} else $offset = '+00:00';
3110
3111
		if ($globalDBdriver == 'mysql') {
3112
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3113
								FROM spotter_output
3114
								WHERE spotter_output.date <> '' 
3115
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3116
		} else {
3117
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3118
								FROM spotter_output
3119
								WHERE spotter_output.date <> '' 
3120
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3121
		}
3122
		
3123
		$sth = $this->db->prepare($query);
3124
		$sth->execute(array(':offset' => $offset));
3125
    
3126
		$date_array = array();
3127
		$temp_array = array();
3128
		
3129
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3130
		{
3131
			$temp_array['date'] = $row['date'];
3132
3133
			$date_array[] = $temp_array;
3134
		}
3135
3136
		return $date_array;
3137
	}
3138
	
3139
	
3140
	
3141
	/**
3142
	* Gets all route combinations
3143
	*
3144
	* @return Array the route list
3145
	*
3146
	*/
3147
	public function getAllRoutes()
3148
	{
3149
		$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 
3150
				FROM spotter_output
3151
				WHERE spotter_output.ident <> '' 
3152
				GROUP BY route
3153
				ORDER BY route ASC";
3154
3155
		$sth = $this->db->prepare($query);
3156
		$sth->execute();
3157
3158
		$routes_array = array();
3159
		$temp_array = array();
3160
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3161
		{
3162
			$temp_array['route'] = $row['route'];
3163
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3164
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3165
3166
			$routes_array[] = $temp_array;
3167
		}
3168
		return $routes_array;
3169
	}
3170
3171
	/**
3172
	* Update ident spotter data
3173
	*
3174
	* @param String $flightaware_id the ID from flightaware
3175
	* @param String $ident the flight ident
3176
	* @return String success or false
3177
	*
3178
	*/	
3179
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3180
	{
3181
		if (!is_numeric(substr($ident, 0, 3)))
3182
		{
3183
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3184
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3185
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3186
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3187
			} else {
3188
				$airline_array = $this->getAllAirlineInfo("NA");
3189
			}
3190
			if (count($airline_array) == 0) {
3191
				$airline_array = $this->getAllAirlineInfo("NA");
3192
			}
3193
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3194
				$airline_array = $this->getAllAirlineInfo("NA");
3195
			}
3196
		} else {
3197
			$airline_array = $this->getAllAirlineInfo("NA");
3198
		}
3199
                $airline_name = $airline_array[0]['name'];
3200
                $airline_icao = $airline_array[0]['icao'];
3201
                $airline_country = $airline_array[0]['country'];
3202
                $airline_type = $airline_array[0]['type'];
3203
3204
3205
		$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';
3206
                $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);
3207
3208
		try {
3209
			$sth = $this->db->prepare($query);
3210
			$sth->execute($query_values);
3211
		} catch (PDOException $e) {
3212
			return "error : ".$e->getMessage();
3213
		}
3214
		
3215
		return "success";
3216
3217
	}
3218
	/**
3219
	* Update latest spotter data
3220
	*
3221
	* @param String $flightaware_id the ID from flightaware
3222
	* @param String $ident the flight ident
3223
	* @param String $arrival_airport_icao the arrival airport
3224
	* @return String success or false
3225
	*
3226
	*/	
3227
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3228
	{
3229
		if ($groundspeed == '') $groundspeed = NULL;
3230
		$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';
3231
                $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);
3232
3233
		try {
3234
			$sth = $this->db->prepare($query);
3235
			$sth->execute($query_values);
3236
		} catch (PDOException $e) {
3237
			return "error : ".$e->getMessage();
3238
		}
3239
		
3240
		return "success";
3241
3242
	}
3243
3244
	/**
3245
	* Adds a new spotter data
3246
	*
3247
	* @param String $flightaware_id the ID from flightaware
3248
	* @param String $ident the flight ident
3249
	* @param String $aircraft_icao the aircraft type
3250
	* @param String $departure_airport_icao the departure airport
3251
	* @param String $arrival_airport_icao the arrival airport
3252
	* @param String $latitude latitude of flight
3253
	* @param String $longitude latitude of flight
3254
	* @param String $waypoints waypoints of flight
3255
	* @param String $altitude altitude of flight
3256
	* @param String $heading heading of flight
3257
	* @param String $groundspeed speed of flight
3258
	* @param String $date date of flight
3259
	* @param String $departure_airport_time departure time of flight
3260
	* @param String $arrival_airport_time arrival time of flight
3261
	* @param String $squawk squawk code of flight
3262
	* @param String $route_stop route stop of flight
3263
	* @param String $highlight highlight or not
3264
	* @param String $ModeS ModesS code of flight
3265
	* @param String $registration registration code of flight
3266
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3267
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3268
	* @param String $verticalrate vertival rate of flight
3269
	* @return String success or false
3270
	*/
3271
	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 = '')
3272
	{
3273
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed, $globalAirlinesSource, $globalVAM;
3274
		
3275
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3276
		$Image = new Image($this->db);
3277
		$Common = new Common();
3278
		
3279
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3280
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3281
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3282
		if (!isset($globalVAM)) $globalVAM = FALSE;
3283
		date_default_timezone_set('UTC');
3284
		
3285
		//getting the registration
3286
		if ($flightaware_id != "" && $registration == '')
3287
		{
3288
			if (!is_string($flightaware_id))
3289
			{
3290
				return false;
3291
			} else {
3292
				if ($ModeS != '') {
3293
					$timeelapsed = microtime(true);
3294
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3295
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3296
				} else {
3297
					$myhex = explode('-',$flightaware_id);
3298
					if (count($myhex) > 0) {
3299
						$timeelapsed = microtime(true);
3300
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3301
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3302
					}
3303
				}
3304
			}
3305
		}
3306
		$fromsource = NULL;
3307
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
3308
		elseif ($format_source == 'vatsimtxt') $fromsource = 'vatsim';
3309
		elseif ($format_source == 'whazzup') $fromsource = 'ivao';
3310
		elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
3311
		elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
3312
		//getting the airline information
3313
		if ($ident != "")
3314
		{
3315
			if (!is_string($ident))
3316
			{
3317
				return false;
3318
			} else {
3319
				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'))
3320
				{
3321
					$timeelapsed = microtime(true);
3322
					if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3323
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3324
					} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3325
						$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3326
					} else {
3327
						$airline_array = $this->getAllAirlineInfo("NA");
3328
					}
3329
					if (count($airline_array) == 0) {
3330
						$airline_array = $this->getAllAirlineInfo("NA");
3331
					}
3332
					if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3333
						$airline_array = $this->getAllAirlineInfo("NA");
3334
					}
3335
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3336
3337
				} else {
3338
					$timeelapsed = microtime(true);
3339
					$airline_array = $this->getAllAirlineInfo("NA");
3340
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAirlineInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3341
				}
3342
			}
3343
		} else $airline_array = array();
3344
		
3345
		//getting the aircraft information
3346
		$aircraft_array = array();
3347
		if ($aircraft_icao != "")
3348
		{
3349
			if (!is_string($aircraft_icao))
3350
			{
3351
				return false;
3352
			} else {
3353
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3354
				{
3355
					$timeelapsed = microtime(true);
3356
					$aircraft_array = $this->getAllAircraftInfo("NA");
3357
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3358
				} else {
3359
					$timeelapsed = microtime(true);
3360
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3361
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3362
				}
3363
			}
3364
		} else {
3365
			if ($ModeS != '') {
3366
				$timeelapsed = microtime(true);
3367
				$aircraft_icao = $this->getAllAircraftType($ModeS);
3368
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAircraftType : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3369
				if ($aircraft_icao == "" || $aircraft_icao == "XXXX")
3370
				{
3371
					$timeelapsed = microtime(true);
3372
					$aircraft_array = $this->getAllAircraftInfo("NA");
3373
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo(NA) : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3374
				} else {
3375
					$timeelapsed = microtime(true);
3376
					$aircraft_array = $this->getAllAircraftInfo($aircraft_icao);
3377
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3378
				}
3379
			}
3380
		}
3381
		
3382
		//getting the departure airport information
3383
		$departure_airport_array = array();
3384
		if ($departure_airport_icao != "")
3385
		{
3386
			if (!is_string($departure_airport_icao))
3387
			{
3388
				return false;
3389
			} else {
3390
				$timeelapsed = microtime(true);
3391
				$departure_airport_array = $this->getAllAirportInfo($departure_airport_icao);
3392
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3393
			}
3394
		}
3395
		
3396
		//getting the arrival airport information
3397
		$arrival_airport_array = array();
3398
		if ($arrival_airport_icao != "")
3399
		{
3400
			if (!is_string($arrival_airport_icao))
3401
			{
3402
				return false;
3403
			} else {
3404
				$timeelapsed = microtime(true);
3405
				$arrival_airport_array = $this->getAllAirportInfo($arrival_airport_icao);
3406
				if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAllAirportInfo : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3407
			}
3408
		}
3409
3410
						
3411
		if ($latitude != "")
3412
		{
3413
			if (!is_numeric($latitude))
3414
			{
3415
				return false;
3416
			}
3417
		}
3418
		
3419
		if ($longitude != "")
3420
		{
3421
			if (!is_numeric($longitude))
3422
			{
3423
				return false;
3424
			}
3425
		}
3426
		
3427
		if ($waypoints != "")
3428
		{
3429
			if (!is_string($waypoints))
3430
			{
3431
				return false;
3432
			}
3433
		}
3434
		
3435
		if ($altitude != "")
3436
		{
3437
			if (!is_numeric($altitude))
3438
			{
3439
				return false;
3440
			}
3441
		} else $altitude = 0;
3442
		
3443
		if ($heading != "")
3444
		{
3445
			if (!is_numeric($heading))
3446
			{
3447
				return false;
3448
			}
3449
		}
3450
		
3451
		if ($groundspeed != "")
3452
		{
3453
			if (!is_numeric($groundspeed))
3454
			{
3455
				return false;
3456
			}
3457
		}
3458
3459
    
3460
		if ($date == "")
3461
		{
3462
			$date = date("Y-m-d H:i:s", time());
3463
		}
3464
3465
		//getting the aircraft image
3466
		if (($registration != "" || $registration != 'NA') && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM)
3467
		{
3468
			$timeelapsed = microtime(true);
3469
			$image_array = $Image->getSpotterImage($registration);
3470
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getSpotterImage : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3471
			if (!isset($image_array[0]['registration']))
3472
			{
3473
				//echo "Add image !!!! \n";
3474
				$Image->addSpotterImage($registration);
3475
			}
3476
			$timeelapsed = microtime(true);
3477
			$owner_info = $this->getAircraftOwnerByRegistration($registration);
3478
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftOwnerByRegistration : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3479
			if ($owner_info['owner'] != '') $aircraft_owner = ucwords(strtolower($owner_info['owner']));
3480
		}
3481
    
3482
		if ($globalIVAO && $aircraft_icao != '')
3483
		{
3484
            		if (isset($airline_array[0]['icao'])) $airline_icao = $airline_array[0]['icao'];
3485
            		else $airline_icao = '';
3486
			$image_array = $Image->getSpotterImage('',$aircraft_icao,$airline_icao);
3487
			if (!isset($image_array[0]['registration']))
3488
			{
3489
				//echo "Add image !!!! \n";
3490
				$Image->addSpotterImage('',$aircraft_icao,$airline_icao);
3491
			}
3492
		}
3493
    
3494
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
3495
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
3496
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
3497
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3498
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
3499
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
3500
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3501
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3502
		$waypoints = filter_var($waypoints,FILTER_SANITIZE_STRING);
3503
		$altitude = filter_var($altitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3504
		$heading = filter_var($heading,FILTER_SANITIZE_NUMBER_INT);
3505
		$groundspeed = filter_var($groundspeed,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
3506
		$squawk = filter_var($squawk,FILTER_SANITIZE_NUMBER_INT);
3507
		$route_stop = filter_var($route_stop,FILTER_SANITIZE_STRING);
3508
		$ModeS = filter_var($ModeS,FILTER_SANITIZE_STRING);
3509
		$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_STRING);
3510
		$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
3511
		$format_source = filter_var($format_source,FILTER_SANITIZE_STRING);
3512
		$verticalrate = filter_var($verticalrate,FILTER_SANITIZE_NUMBER_INT);
3513
	
3514
		if (count($airline_array) == 0) 
3515
		{
3516
                        $airline_array = $this->getAllAirlineInfo('NA');
3517
                }
3518
                if (count($aircraft_array) == 0) 
3519
                {
3520
                        $aircraft_array = $this->getAllAircraftInfo('NA');
3521
                }
3522
                if (count($departure_airport_array) == 0) 
3523
                {
3524
                        $departure_airport_array = $this->getAllAirportInfo('NA');
3525
                }
3526
                if (count($arrival_airport_array) == 0) 
3527
                {
3528
                        $arrival_airport_array = $this->getAllAirportInfo('NA');
3529
                }
3530
                if ($registration == '') $registration = 'NA';
3531
                if ($latitude == '' && $longitude == '') {
3532
            		$latitude = 0;
3533
            		$longitude = 0;
3534
            	}
3535
                if ($squawk == '' || $Common->isInteger($squawk) === false) $squawk = NULL;
3536
                if ($verticalrate == '' || $Common->isInteger($verticalrate) === false) $verticalrate = NULL;
3537
                if ($heading == '' || $Common->isInteger($heading) === false) $heading = 0;
3538
                if ($groundspeed == '' || $Common->isInteger($groundspeed) === false) $groundspeed = 0;
3539
                if (!isset($aircraft_owner)) $aircraft_owner = NULL;
3540
                $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) 
3541
                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)";
3542
3543
                $airline_name = $airline_array[0]['name'];
3544
                $airline_icao = $airline_array[0]['icao'];
3545
                $airline_country = $airline_array[0]['country'];
3546
                $airline_type = $airline_array[0]['type'];
3547
		if ($airline_type == '') {
3548
			$timeelapsed = microtime(true);
3549
			$airline_type = $this->getAircraftTypeBymodeS($ModeS);
3550
			if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftTypeBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3551
		}
3552
		if ($airline_type == null) $airline_type = '';
3553
                $aircraft_type = $aircraft_array[0]['type'];
3554
                $aircraft_manufacturer = $aircraft_array[0]['manufacturer'];
3555
                $departure_airport_name = $departure_airport_array[0]['name'];
3556
                $departure_airport_city = $departure_airport_array[0]['city'];
3557
                $departure_airport_country = $departure_airport_array[0]['country'];
3558
                $arrival_airport_name = $arrival_airport_array[0]['name'];
3559
                $arrival_airport_city = $arrival_airport_array[0]['city'];
3560
                $arrival_airport_country = $arrival_airport_array[0]['country'];
3561
                $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);
3562
3563
		try {
3564
		        
3565
			$sth = $this->db->prepare($query);
3566
			$sth->execute($query_values);
3567
			$this->db = null;
3568
		} catch (PDOException $e) {
3569
		    return "error : ".$e->getMessage();
3570
		}
3571
		
3572
		return "success";
3573
3574
	}
3575
	
3576
  
3577
	/**
3578
	* Gets the aircraft ident within the last hour
3579
	*
3580
	* @return String the ident
3581
	*
3582
	*/
3583
	public function getIdentFromLastHour($ident)
3584
	{
3585
		global $globalDBdriver, $globalTimezone;
3586
		if ($globalDBdriver == 'mysql') {
3587
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3588
								WHERE spotter_output.ident = :ident 
3589
								AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) 
3590
								AND spotter_output.date < UTC_TIMESTAMP()";
3591
			$query_data = array(':ident' => $ident);
3592
		} else {
3593
			$query  = "SELECT spotter_output.ident FROM spotter_output 
3594
								WHERE spotter_output.ident = :ident 
3595
								AND spotter_output.date >= now() AT TIME ZONE 'UTC' - INTERVAL '1 HOURS'
3596
								AND spotter_output.date < now() AT TIME ZONE 'UTC'";
3597
			$query_data = array(':ident' => $ident);
3598
    		}
3599
		
3600
		$sth = $this->db->prepare($query);
3601
		$sth->execute($query_data);
3602
    		$ident_result='';
3603
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3604
		{
3605
			$ident_result = $row['ident'];
3606
		}
3607
3608
		return $ident_result;
3609
	}
3610
	
3611
	
3612
	/**
3613
	* Gets the aircraft data from the last 20 seconds
3614
	*
3615
	* @return Array the spotter data
3616
	*
3617
	*/
3618
	public function getRealTimeData($q = '')
3619
	{
3620
		global $globalDBdriver;
3621
		$additional_query = '';
3622
		if ($q != "")
3623
		{
3624
			if (!is_string($q))
3625
			{
3626
				return false;
3627
			} else {
3628
				$q_array = explode(" ", $q);
3629
				foreach ($q_array as $q_item){
3630
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
3631
					$additional_query .= " AND (";
3632
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
3633
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
3634
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
3635
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
3636
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
3637
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
3638
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
3639
					$additional_query .= "(spotter_output.ident like '%".$q_item."%')";
3640
					$additional_query .= ")";
3641
				}
3642
			}
3643
		}
3644
		if ($globalDBdriver == 'mysql') {
3645
			$query  = "SELECT spotter_output.* FROM spotter_output 
3646
				WHERE spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 20 SECOND) ".$additional_query." 
3647
				AND spotter_output.date < UTC_TIMESTAMP()";
3648
		} else {
3649
			$query  = "SELECT spotter_output.* FROM spotter_output 
3650
				WHERE spotter_output.date::timestamp >= CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '20 SECONDS' ".$additional_query." 
3651
				AND spotter_output.date::timestamp < CURRENT_TIMESTAMP AT TIME ZONE 'UTC'";
3652
		}
3653
		$spotter_array = $this->getDataFromDB($query, array());
3654
3655
		return $spotter_array;
3656
	}
3657
	
3658
	
3659
	
3660
	 /**
3661
	* Gets all airlines that have flown over
3662
	*
3663
	* @return Array the airline list
3664
	*
3665
	*/
3666
	public function countAllAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3667
	{
3668
		global $globalDBdriver;
3669
		$filter_query = $this->getFilter($filters,true,true);
3670
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3671
		 			FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.airline_icao <> 'NA' ";
3672
		if ($olderthanmonths > 0) {
3673
			if ($globalDBdriver == 'mysql') {
3674
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3675
			} else {
3676
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3677
			}
3678
		}
3679
                if ($sincedate != '') {
3680
			if ($globalDBdriver == 'mysql') {
3681
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3682
			} else {
3683
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3684
			}
3685
		}
3686
		$query .= "GROUP BY spotter_output.airline_name,spotter_output.airline_icao, spotter_output.airline_country ORDER BY airline_count DESC";
3687
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3688
		
3689
		$sth = $this->db->prepare($query);
3690
		$sth->execute();
3691
 
3692
		$airline_array = array();
3693
		$temp_array = array();
3694
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3695
		{
3696
			$temp_array['airline_name'] = $row['airline_name'];
3697
			$temp_array['airline_icao'] = $row['airline_icao'];
3698
			$temp_array['airline_count'] = $row['airline_count'];
3699
			$temp_array['airline_country'] = $row['airline_country'];
3700
			$airline_array[] = $temp_array;
3701
		}
3702
		return $airline_array;
3703
	}
3704
3705
	 /**
3706
	* Gets all pilots that have flown over
3707
	*
3708
	* @return Array the pilots list
3709
	*
3710
	*/
3711
	public function countAllPilots($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3712
	{
3713
		global $globalDBdriver;
3714
		$filter_query = $this->getFilter($filters,true,true);
3715
		$query  = "SELECT DISTINCT spotter_output.pilot_id, spotter_output.pilot_name, COUNT(spotter_output.pilot_id) AS pilot_count, spotter_output.format_source
3716
		 			FROM spotter_output".$filter_query." spotter_output.pilot_id <> '' ";
3717
                if ($olderthanmonths > 0) {
3718
            		if ($globalDBdriver == 'mysql') {
3719
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3720
			} else {
3721
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3722
			}
3723
		}
3724
                if ($sincedate != '') {
3725
            		if ($globalDBdriver == 'mysql') {
3726
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3727
			} else {
3728
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3729
			}
3730
		}
3731
		$query .= "GROUP BY spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
3732
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3733
      
3734
		
3735
		$sth = $this->db->prepare($query);
3736
		$sth->execute();
3737
      
3738
		$airline_array = array();
3739
		$temp_array = array();
3740
        
3741
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3742
		{
3743
			$temp_array['pilot_name'] = $row['pilot_name'];
3744
			$temp_array['pilot_id'] = $row['pilot_id'];
3745
			$temp_array['pilot_count'] = $row['pilot_count'];
3746
			$temp_array['format_source'] = $row['format_source'];
3747
			$airline_array[] = $temp_array;
3748
		}
3749
		return $airline_array;
3750
	}
3751
	
3752
		 /**
3753
	* Gets all pilots that have flown over
3754
	*
3755
	* @return Array the pilots list
3756
	*
3757
	*/
3758
	public function countAllPilotsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '')
3759
	{
3760
		global $globalDBdriver;
3761
		$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
3762
		 			FROM spotter_output WHERE spotter_output.pilot_id <> '' ";
3763
                if ($olderthanmonths > 0) {
3764
            		if ($globalDBdriver == 'mysql') {
3765
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3766
			} else {
3767
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3768
			}
3769
		}
3770
                if ($sincedate != '') {
3771
            		if ($globalDBdriver == 'mysql') {
3772
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3773
			} else {
3774
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3775
			}
3776
		}
3777
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.format_source ORDER BY pilot_count DESC";
3778
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3779
      
3780
		
3781
		$sth = $this->db->prepare($query);
3782
		$sth->execute();
3783
      
3784
		$airline_array = array();
3785
		$temp_array = array();
3786
        
3787
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3788
		{
3789
			$temp_array['pilot_name'] = $row['pilot_name'];
3790
			$temp_array['pilot_id'] = $row['pilot_id'];
3791
			$temp_array['pilot_count'] = $row['pilot_count'];
3792
			$temp_array['airline_icao'] = $row['airline_icao'];
3793
			$temp_array['format_source'] = $row['format_source'];
3794
			$airline_array[] = $temp_array;
3795
		}
3796
		return $airline_array;
3797
	}
3798
	
3799
	 /**
3800
	* Gets all owner that have flown over
3801
	*
3802
	* @return Array the pilots list
3803
	*
3804
	*/
3805
	public function countAllOwners($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3806
	{
3807
		global $globalDBdriver;
3808
		$filter_query = $this->getFilter($filters,true,true);
3809
		$query  = "SELECT DISTINCT spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3810
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3811
                if ($olderthanmonths > 0) {
3812
            		if ($globalDBdriver == 'mysql') {
3813
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3814
			} else {
3815
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3816
			}
3817
		}
3818
                if ($sincedate != '') {
3819
            		if ($globalDBdriver == 'mysql') {
3820
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3821
			} else {
3822
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3823
			}
3824
		}
3825
		$query .= "GROUP BY spotter_output.owner_name ORDER BY owner_count DESC";
3826
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3827
      
3828
		
3829
		$sth = $this->db->prepare($query);
3830
		$sth->execute();
3831
      
3832
		$airline_array = array();
3833
		$temp_array = array();
3834
        
3835
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3836
		{
3837
			$temp_array['owner_name'] = $row['owner_name'];
3838
			$temp_array['owner_count'] = $row['owner_count'];
3839
			$airline_array[] = $temp_array;
3840
		}
3841
		return $airline_array;
3842
	}
3843
	
3844
	 /**
3845
	* Gets all owner that have flown over
3846
	*
3847
	* @return Array the pilots list
3848
	*
3849
	*/
3850
	public function countAllOwnersByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
3851
	{
3852
		global $globalDBdriver;
3853
		$filter_query = $this->getFilter($filters,true,true);
3854
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.owner_name, COUNT(spotter_output.owner_name) AS owner_count
3855
		 			FROM spotter_output".$filter_query." spotter_output.owner_name <> '' AND spotter_output.owner_name IS NOT NULL ";
3856
                if ($olderthanmonths > 0) {
3857
            		if ($globalDBdriver == 'mysql') {
3858
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
3859
			} else {
3860
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
3861
			}
3862
		}
3863
                if ($sincedate != '') {
3864
            		if ($globalDBdriver == 'mysql') {
3865
				$query .= "AND spotter_output.date > '".$sincedate."' ";
3866
			} else {
3867
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
3868
			}
3869
		}
3870
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.owner_name ORDER BY owner_count DESC";
3871
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
3872
      
3873
		
3874
		$sth = $this->db->prepare($query);
3875
		$sth->execute();
3876
      
3877
		$airline_array = array();
3878
		$temp_array = array();
3879
        
3880
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3881
		{
3882
			$temp_array['owner_name'] = $row['owner_name'];
3883
			$temp_array['owner_count'] = $row['owner_count'];
3884
			$temp_array['airline_icao'] = $row['airline_icao'];
3885
			$airline_array[] = $temp_array;
3886
		}
3887
		return $airline_array;
3888
	}
3889
3890
	/**
3891
	* Gets all airlines that have flown over by aircraft
3892
	*
3893
	* @return Array the airline list
3894
	*
3895
	*/
3896
	public function countAllAirlinesByAircraft($aircraft_icao,$filters = array())
3897
	{
3898
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3899
		$filter_query = $this->getFilter($filters,true,true);
3900
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3901
		 	    FROM spotter_output".$filter_query." spotter_output.airline_name <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
3902
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
3903
			    ORDER BY airline_count DESC";
3904
      
3905
		
3906
		$sth = $this->db->prepare($query);
3907
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3908
      
3909
		$airline_array = array();
3910
		$temp_array = array();
3911
        
3912
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3913
		{
3914
			$temp_array['airline_name'] = $row['airline_name'];
3915
			$temp_array['airline_icao'] = $row['airline_icao'];
3916
			$temp_array['airline_count'] = $row['airline_count'];
3917
			$temp_array['airline_country'] = $row['airline_country'];
3918
3919
			$airline_array[] = $temp_array;
3920
		}
3921
3922
		return $airline_array;
3923
	}
3924
3925
3926
	/**
3927
	* Gets all airline countries that have flown over by aircraft
3928
	*
3929
	* @return Array the airline country list
3930
	*
3931
	*/
3932
	public function countAllAirlineCountriesByAircraft($aircraft_icao,$filters = array())
3933
	{
3934
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
3935
		$filter_query = $this->getFilter($filters,true,true);
3936
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
3937
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
3938
                    GROUP BY spotter_output.airline_country
3939
					ORDER BY airline_country_count DESC
3940
					LIMIT 10 OFFSET 0";
3941
      
3942
		
3943
		$sth = $this->db->prepare($query);
3944
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
3945
      
3946
		$airline_country_array = array();
3947
		$temp_array = array();
3948
        
3949
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3950
		{
3951
			$temp_array['airline_country_count'] = $row['airline_country_count'];
3952
			$temp_array['airline_country'] = $row['airline_country'];
3953
 
3954
			$airline_country_array[] = $temp_array;
3955
		}
3956
		return $airline_country_array;
3957
	}
3958
3959
3960
	
3961
	
3962
	/**
3963
	* Gets all airlines that have flown over by airport
3964
	*
3965
	* @return Array the airline list
3966
	*
3967
	*/
3968
	public function countAllAirlinesByAirport($airport_icao,$filters = array())
3969
	{
3970
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
3971
		$filter_query = $this->getFilter($filters,true,true);
3972
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
3973
		    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 ) 
3974
                    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country
3975
		    ORDER BY airline_count DESC";
3976
      
3977
		
3978
		$sth = $this->db->prepare($query);
3979
		$sth->execute(array(':airport_icao' => $airport_icao));
3980
      
3981
		$airline_array = array();
3982
		$temp_array = array();
3983
        
3984
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3985
		{
3986
			$temp_array['airline_name'] = $row['airline_name'];
3987
			$temp_array['airline_icao'] = $row['airline_icao'];
3988
			$temp_array['airline_count'] = $row['airline_count'];
3989
			$temp_array['airline_country'] = $row['airline_country'];
3990
3991
			$airline_array[] = $temp_array;
3992
		}
3993
		return $airline_array;
3994
	}
3995
3996
3997
	/**
3998
	* Gets all airline countries that have flown over by airport icao
3999
	*
4000
	* @return Array the airline country list
4001
	*
4002
	*/
4003
	public function countAllAirlineCountriesByAirport($airport_icao,$filters = array())
4004
	{
4005
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4006
		$filter_query = $this->getFilter($filters,true,true);
4007
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4008
		 			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 )
4009
					GROUP BY spotter_output.airline_country
4010
					ORDER BY airline_country_count DESC
4011
					LIMIT 10 OFFSET 0";
4012
4013
		
4014
		$sth = $this->db->prepare($query);
4015
		$sth->execute(array(':airport_icao' => $airport_icao));
4016
4017
		$airline_country_array = array();
4018
		$temp_array = array();
4019
        
4020
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4021
		{
4022
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4023
			$temp_array['airline_country'] = $row['airline_country'];
4024
 
4025
			$airline_country_array[] = $temp_array;
4026
		}
4027
		return $airline_country_array;
4028
	}
4029
4030
4031
	/**
4032
	* Gets all airlines that have flown over by aircraft manufacturer
4033
	*
4034
	* @return Array the airline list
4035
	*
4036
	*/
4037
	public function countAllAirlinesByManufacturer($aircraft_manufacturer,$filters = array())
4038
	{
4039
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4040
		$filter_query = $this->getFilter($filters,true,true);
4041
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4042
		 			FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4043
					GROUP BY spotter_output.airline_name
4044
					ORDER BY airline_count DESC";
4045
 
4046
		$sth = $this->db->prepare($query);
4047
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4048
 
4049
		$airline_array = array();
4050
		$temp_array = array();
4051
        
4052
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4053
		{
4054
			$temp_array['airline_name'] = $row['airline_name'];
4055
			$temp_array['airline_icao'] = $row['airline_icao'];
4056
			$temp_array['airline_count'] = $row['airline_count'];
4057
			$temp_array['airline_country'] = $row['airline_country'];
4058
4059
			$airline_array[] = $temp_array;
4060
		}
4061
		return $airline_array;
4062
	}
4063
4064
4065
4066
	/**
4067
	* Gets all airline countries that have flown over by aircraft manufacturer
4068
	*
4069
	* @return Array the airline country list
4070
	*
4071
	*/
4072
	public function countAllAirlineCountriesByManufacturer($aircraft_manufacturer,$filters = array())
4073
	{
4074
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4075
		$filter_query = $this->getFilter($filters,true,true);
4076
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4077
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
4078
					GROUP BY spotter_output.airline_country
4079
					ORDER BY airline_country_count DESC
4080
					LIMIT 10 OFFSET 0";
4081
      
4082
		
4083
		$sth = $this->db->prepare($query);
4084
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4085
4086
		$airline_country_array = array();
4087
		$temp_array = array();
4088
        
4089
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4090
		{
4091
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4092
			$temp_array['airline_country'] = $row['airline_country'];
4093
			$airline_country_array[] = $temp_array;
4094
		}
4095
		return $airline_country_array;
4096
	}
4097
4098
4099
	/**
4100
	* Gets all airlines that have flown over by date
4101
	*
4102
	* @return Array the airline list
4103
	*
4104
	*/
4105
	public function countAllAirlinesByDate($date,$filters = array())
4106
	{
4107
		global $globalTimezone, $globalDBdriver;
4108
		$filter_query = $this->getFilter($filters,true,true);
4109
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4110
		if ($globalTimezone != '') {
4111
			date_default_timezone_set($globalTimezone);
4112
			$datetime = new DateTime($date);
4113
			$offset = $datetime->format('P');
4114
		} else $offset = '+00:00';
4115
4116
		if ($globalDBdriver == 'mysql') {
4117
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4118
		 			FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4119
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country 
4120
					ORDER BY airline_count DESC";
4121
		} else {
4122
			$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4123
		 			FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4124
					GROUP BY spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country
4125
					ORDER BY airline_count DESC";
4126
		}
4127
		
4128
		$sth = $this->db->prepare($query);
4129
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4130
4131
		$airline_array = array();
4132
		$temp_array = array();
4133
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4134
		{
4135
			$temp_array['airline_name'] = $row['airline_name'];
4136
			$temp_array['airline_icao'] = $row['airline_icao'];
4137
			$temp_array['airline_count'] = $row['airline_count'];
4138
			$temp_array['airline_country'] = $row['airline_country'];
4139
 
4140
			$airline_array[] = $temp_array;
4141
		}
4142
4143
		return $airline_array;
4144
	}	
4145
	
4146
	
4147
	/**
4148
	* Gets all airline countries that have flown over by date
4149
	*
4150
	* @return Array the airline country list
4151
	*
4152
	*/
4153
	public function countAllAirlineCountriesByDate($date,$filters = array())
4154
	{
4155
		global $globalTimezone, $globalDBdriver;
4156
		$filter_query = $this->getFilter($filters,true,true);
4157
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4158
		if ($globalTimezone != '') {
4159
			date_default_timezone_set($globalTimezone);
4160
			$datetime = new DateTime($date);
4161
			$offset = $datetime->format('P');
4162
		} else $offset = '+00:00';
4163
		
4164
		if ($globalDBdriver == 'mysql') {
4165
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4166
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4167
					GROUP BY spotter_output.airline_country
4168
					ORDER BY airline_country_count DESC
4169
					LIMIT 10 OFFSET 0";
4170
		} else {
4171
			$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4172
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
4173
					GROUP BY spotter_output.airline_country
4174
					ORDER BY airline_country_count DESC
4175
					LIMIT 10 OFFSET 0";
4176
		}
4177
4178
		$sth = $this->db->prepare($query);
4179
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4180
 
4181
		$airline_country_array = array();
4182
		$temp_array = array();
4183
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4184
		{
4185
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4186
			$temp_array['airline_country'] = $row['airline_country'];
4187
4188
			$airline_country_array[] = $temp_array;
4189
		}
4190
		return $airline_country_array;
4191
	}
4192
4193
4194
	/**
4195
	* Gets all airlines that have flown over by ident/callsign
4196
	*
4197
	* @return Array the airline list
4198
	*
4199
	*/
4200
	public function countAllAirlinesByIdent($ident,$filters = array())
4201
	{
4202
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
4203
		$filter_query = $this->getFilter($filters,true,true);
4204
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4205
		 		FROM spotter_output".$filter_query." spotter_output.ident = :ident  
4206
				GROUP BY spotter_output.airline_name
4207
				ORDER BY airline_count DESC";
4208
      
4209
		
4210
		$sth = $this->db->prepare($query);
4211
		$sth->execute(array(':ident' => $ident));
4212
      
4213
		$airline_array = array();
4214
		$temp_array = array();
4215
        
4216
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4217
		{
4218
			$temp_array['airline_name'] = $row['airline_name'];
4219
			$temp_array['airline_icao'] = $row['airline_icao'];
4220
			$temp_array['airline_count'] = $row['airline_count'];
4221
			$temp_array['airline_country'] = $row['airline_country'];
4222
4223
			$airline_array[] = $temp_array;
4224
		}
4225
		return $airline_array;
4226
	}
4227
4228
	/**
4229
	* Gets all airlines that have flown over by route
4230
	*
4231
	* @return Array the airline list
4232
	*
4233
	*/
4234
	public function countAllAirlinesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
4235
	{
4236
		$filter_query = $this->getFilter($filters,true,true);
4237
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4238
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4239
4240
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4241
		 			FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao) 
4242
					GROUP BY spotter_output.airline_name
4243
					ORDER BY airline_count DESC";
4244
      
4245
		
4246
		$sth = $this->db->prepare($query);
4247
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4248
      
4249
		$airline_array = array();
4250
		$temp_array = array();
4251
        
4252
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4253
		{
4254
			$temp_array['airline_name'] = $row['airline_name'];
4255
			$temp_array['airline_icao'] = $row['airline_icao'];
4256
			$temp_array['airline_count'] = $row['airline_count'];
4257
			$temp_array['airline_country'] = $row['airline_country'];
4258
4259
			$airline_array[] = $temp_array;
4260
		}
4261
		return $airline_array;
4262
	}
4263
4264
	/**
4265
	* Gets all airline countries that have flown over by route
4266
	*
4267
	* @return Array the airline country list
4268
	*
4269
	*/
4270
	public function countAllAirlineCountriesByRoute($departure_airport_icao, $arrival_airport_icao,$filters= array())
4271
	{
4272
		$filter_query = $this->getFilter($filters,true,true);
4273
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
4274
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
4275
      
4276
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4277
		 		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) 
4278
				GROUP BY spotter_output.airline_country
4279
				ORDER BY airline_country_count DESC
4280
				LIMIT 10 OFFSET 0";
4281
      
4282
		
4283
		$sth = $this->db->prepare($query);
4284
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
4285
      
4286
		$airline_country_array = array();
4287
		$temp_array = array();
4288
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4289
		{
4290
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4291
			$temp_array['airline_country'] = $row['airline_country'];
4292
4293
			$airline_country_array[] = $temp_array;
4294
		}
4295
4296
		return $airline_country_array;
4297
	}
4298
4299
4300
	/**
4301
	* Gets all airlines that have flown over by country
4302
	*
4303
	* @return Array the airline list
4304
	*
4305
	*/
4306
	public function countAllAirlinesByCountry($country,$filters = array())
4307
	{
4308
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4309
		$filter_query = $this->getFilter($filters,true,true);
4310
		$query  = "SELECT DISTINCT spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country, COUNT(spotter_output.airline_name) AS airline_count
4311
		 	    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
4312
			    GROUP BY spotter_output.airline_name, spotter_output.airline_icao, spotter_output.airline_country 
4313
			    ORDER BY airline_count DESC";
4314
      
4315
		
4316
		$sth = $this->db->prepare($query);
4317
		$sth->execute(array(':country' => $country));
4318
4319
		$airline_array = array();
4320
		$temp_array = array();
4321
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4322
		{
4323
			$temp_array['airline_name'] = $row['airline_name'];
4324
			$temp_array['airline_icao'] = $row['airline_icao'];
4325
			$temp_array['airline_count'] = $row['airline_count'];
4326
			$temp_array['airline_country'] = $row['airline_country'];
4327
 
4328
			$airline_array[] = $temp_array;
4329
		}
4330
		return $airline_array;
4331
	}
4332
4333
4334
	/**
4335
	* Gets all airline countries that have flown over by country
4336
	*
4337
	* @return Array the airline country list
4338
	*
4339
	*/
4340
	public function countAllAirlineCountriesByCountry($country,$filters = array())
4341
	{
4342
		$filter_query = $this->getFilter($filters,true,true);
4343
		$country = filter_var($country,FILTER_SANITIZE_STRING);
4344
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4345
		 		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 
4346
				GROUP BY spotter_output.airline_country
4347
				ORDER BY airline_country_count DESC
4348
				LIMIT 10 OFFSET 0";
4349
      
4350
		
4351
		$sth = $this->db->prepare($query);
4352
		$sth->execute(array(':country' => $country));
4353
4354
		$airline_country_array = array();
4355
		$temp_array = array();
4356
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4357
		{
4358
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4359
			$temp_array['airline_country'] = $row['airline_country'];
4360
4361
			$airline_country_array[] = $temp_array;
4362
		}
4363
		return $airline_country_array;
4364
	}
4365
4366
4367
	/**
4368
	* Gets all airlines countries
4369
	*
4370
	* @return Array the airline country list
4371
	*
4372
	*/
4373
	public function countAllAirlineCountries($limit = true, $filters = array())
4374
	{
4375
		$filter_query = $this->getFilter($filters,true,true);
4376
		$query  = "SELECT DISTINCT spotter_output.airline_country, COUNT(spotter_output.airline_country) AS airline_country_count
4377
		 			FROM spotter_output".$filter_query." spotter_output.airline_country <> '' AND spotter_output.airline_country <> 'NA' 
4378
					GROUP BY spotter_output.airline_country
4379
					ORDER BY airline_country_count DESC";
4380
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4381
      
4382
		$sth = $this->db->prepare($query);
4383
		$sth->execute();
4384
4385
		$airline_array = array();
4386
		$temp_array = array();
4387
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4388
		{
4389
			$temp_array['airline_country_count'] = $row['airline_country_count'];
4390
			$temp_array['airline_country'] = $row['airline_country'];
4391
4392
			$airline_array[] = $temp_array;
4393
		}
4394
		return $airline_array;
4395
	}
4396
4397
	/**
4398
	* Gets all number of flight over countries
4399
	*
4400
	* @return Array the airline country list
4401
	*
4402
	*/
4403
	public function countAllFlightOverCountries($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4404
	{
4405
		global $globalDBdriver;
4406
		//$filter_query = $this->getFilter($filters,true,true);
4407
		$Connection= new Connection($this->db);
4408
		if (!$Connection->tableExists('countries')) return array();
4409
		/*
4410
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4411
					FROM countries c, spotter_output s
4412
					WHERE Within(GeomFromText(CONCAT('POINT(',s.longitude,' ',s.latitude,')')), ogc_geom) ";
4413
		*/
4414
/*
4415
		$query = "SELECT c.name, c.iso3, c.iso2, count(c.name) as nb 
4416
					FROM countries c, spotter_live s
4417
					WHERE c.iso2 = s.over_country ";
4418
		$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 ";
4419
*/
4420
		require_once('class.SpotterLive.php');
4421
		$SpotterLive = new SpotterLive();
4422
		$filter_query = $SpotterLive->getFilter($filters,true,true);
4423
		$filter_query .= ' over_country IS NOT NULL';
4424
                if ($olderthanmonths > 0) {
4425
			if ($globalDBdriver == 'mysql') {
4426
				$filter_query .= ' AND spotter_live.date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
4427
			} else {
4428
				$filter_query .= " AND spotter_live.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4429
			}
4430
		}
4431
                if ($sincedate != '') {
4432
            		if ($globalDBdriver == 'mysql') {
4433
				$filter_query .= " AND spotter_live.date > '".$sincedate."' ";
4434
			} else {
4435
				$filter_query .= " AND spotter_live.date > CAST('".$sincedate."' AS TIMESTAMP)";
4436
			}
4437
		}
4438
		$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 ";
4439
		$query .= "GROUP BY c.name,c.iso3,c.iso2 ORDER BY nb DESC";
4440
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4441
      
4442
		
4443
		$sth = $this->db->prepare($query);
4444
		$sth->execute();
4445
 
4446
		$flight_array = array();
4447
		$temp_array = array();
4448
        
4449
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4450
		{
4451
			$temp_array['flight_count'] = $row['nb'];
4452
			$temp_array['flight_country'] = $row['name'];
4453
			$temp_array['flight_country_iso3'] = $row['iso3'];
4454
			$temp_array['flight_country_iso2'] = $row['iso2'];
4455
			$flight_array[] = $temp_array;
4456
		}
4457
		return $flight_array;
4458
	}
4459
	
4460
	
4461
	/**
4462
	* Gets all aircraft types that have flown over
4463
	*
4464
	* @return Array the aircraft list
4465
	*
4466
	*/
4467
	public function countAllAircraftTypes($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4468
	{
4469
		global $globalDBdriver;
4470
		$filter_query = $this->getFilter($filters,true,true);
4471
4472
		$query  = "SELECT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer 
4473
		    FROM spotter_output ".$filter_query." spotter_output.aircraft_name  <> '' AND spotter_output.aircraft_icao  <> ''";
4474
		if ($olderthanmonths > 0) {
4475
			if ($globalDBdriver == 'mysql') {
4476
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
4477
			} else {
4478
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
4479
			}
4480
		}
4481
		if ($sincedate != '') {
4482
			if ($globalDBdriver == 'mysql') {
4483
				$query .= " AND spotter_output.date > '".$sincedate."'";
4484
			} else {
4485
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4486
			}
4487
		}
4488
4489
		$query .= " GROUP BY spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.aircraft_manufacturer ORDER BY aircraft_icao_count DESC";
4490
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4491
 
4492
		$sth = $this->db->prepare($query);
4493
		$sth->execute();
4494
4495
		$aircraft_array = array();
4496
		$temp_array = array();
4497
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4498
		{
4499
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4500
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4501
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4502
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4503
			$aircraft_array[] = $temp_array;
4504
		}
4505
		return $aircraft_array;
4506
	}
4507
4508
	/**
4509
	* Gets all aircraft types that have flown over by airline
4510
	*
4511
	* @return Array the aircraft list
4512
	*
4513
	*/
4514
	public function countAllAircraftTypesByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4515
	{
4516
		global $globalDBdriver;
4517
		$filter_query = $this->getFilter($filters,true,true);
4518
		$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 
4519
		    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' ";
4520
		if ($olderthanmonths > 0) {
4521
			if ($globalDBdriver == 'mysql') {
4522
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4523
			} else {
4524
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4525
			}
4526
		}
4527
		if ($sincedate != '') {
4528
			if ($globalDBdriver == 'mysql') {
4529
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4530
			} else {
4531
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4532
			}
4533
		}
4534
4535
		$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";
4536
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4537
 
4538
		$sth = $this->db->prepare($query);
4539
		$sth->execute();
4540
4541
		$aircraft_array = array();
4542
		$temp_array = array();
4543
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4544
		{
4545
			$temp_array['airline_icao'] = $row['airline_icao'];
4546
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4547
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4548
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4549
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4550
			$aircraft_array[] = $temp_array;
4551
		}
4552
		return $aircraft_array;
4553
	}
4554
4555
	/**
4556
	* Gets all aircraft types that have flown over by months
4557
	*
4558
	* @return Array the aircraft list
4559
	*
4560
	*/
4561
	public function countAllAircraftTypesByMonths($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
4562
	{
4563
		global $globalDBdriver;
4564
		$filter_query = $this->getFilter($filters,true,true);
4565
		$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 
4566
		    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' ";
4567
		if ($olderthanmonths > 0) {
4568
			if ($globalDBdriver == 'mysql') {
4569
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
4570
			} else {
4571
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
4572
			}
4573
		}
4574
		if ($sincedate != '') {
4575
			if ($globalDBdriver == 'mysql') {
4576
				$query .= "AND spotter_output.date > '".$sincedate."' ";
4577
			} else {
4578
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
4579
			}
4580
		}
4581
4582
		$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";
4583
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
4584
 
4585
		$sth = $this->db->prepare($query);
4586
		$sth->execute();
4587
4588
		$aircraft_array = array();
4589
		$temp_array = array();
4590
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4591
		{
4592
			//$temp_array['airline_icao'] = $row['airline_icao'];
4593
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4594
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4595
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4596
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4597
			$aircraft_array[] = $temp_array;
4598
		}
4599
		return $aircraft_array;
4600
	}
4601
4602
4603
	/**
4604
	* Gets all aircraft registration that have flown over by aircaft icao
4605
	*
4606
	* @return Array the aircraft list
4607
	*
4608
	*/
4609
	public function countAllAircraftRegistrationByAircraft($aircraft_icao,$filters = array())
4610
	{
4611
		$Image = new Image($this->db);
4612
		$filter_query = $this->getFilter($filters,true,true);
4613
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
4614
4615
		$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  
4616
				FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_icao = :aircraft_icao  
4617
				GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.registration, spotter_output.airline_name  
4618
				ORDER BY registration_count DESC";
4619
4620
		$sth = $this->db->prepare($query);
4621
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
4622
4623
		$aircraft_array = array();
4624
		$temp_array = array();
4625
        
4626
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4627
		{
4628
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4629
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4630
			$temp_array['registration'] = $row['registration'];
4631
			$temp_array['airline_name'] = $row['airline_name'];
4632
			$temp_array['image_thumbnail'] = "";
4633
			if($row['registration'] != "")
4634
			{
4635
				$image_array = $Image->getSpotterImage($row['registration']);
4636
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4637
			}
4638
			$temp_array['registration_count'] = $row['registration_count'];
4639
4640
			$aircraft_array[] = $temp_array;
4641
		}
4642
		return $aircraft_array;
4643
	}
4644
4645
4646
	/**
4647
	* Gets all aircraft types that have flown over by airline icao
4648
	*
4649
	* @return Array the aircraft list
4650
	*
4651
	*/
4652
	public function countAllAircraftTypesByAirline($airline_icao,$filters = array())
4653
	{
4654
		$filter_query = $this->getFilter($filters,true,true);
4655
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4656
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4657
			    FROM spotter_output".$filter_query." spotter_output.aircraft_icao <> '' AND spotter_output.airline_icao = :airline_icao 
4658
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4659
			    ORDER BY aircraft_icao_count DESC";
4660
4661
		$sth = $this->db->prepare($query);
4662
		$sth->execute(array(':airline_icao' => $airline_icao));
4663
4664
		$aircraft_array = array();
4665
		$temp_array = array();
4666
4667
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4668
		{
4669
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4670
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4671
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4672
4673
			$aircraft_array[] = $temp_array;
4674
		}
4675
		return $aircraft_array;
4676
	}
4677
4678
4679
	/**
4680
	* Gets all aircraft registration that have flown over by airline icao
4681
	*
4682
	* @return Array the aircraft list
4683
	*
4684
	*/
4685
	public function countAllAircraftRegistrationByAirline($airline_icao,$filters = array())
4686
	{
4687
		$filter_query = $this->getFilter($filters,true,true);
4688
		$Image = new Image($this->db);
4689
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4690
4691
		$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 
4692
			    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.airline_icao = :airline_icao 
4693
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
4694
			    ORDER BY registration_count DESC";
4695
4696
		$sth = $this->db->prepare($query);
4697
		$sth->execute(array(':airline_icao' => $airline_icao));
4698
4699
		$aircraft_array = array();
4700
		$temp_array = array();
4701
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4702
		{
4703
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4704
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4705
			$temp_array['registration'] = $row['registration'];
4706
			$temp_array['airline_name'] = $row['airline_name'];
4707
			$temp_array['image_thumbnail'] = "";
4708
			if($row['registration'] != "")
4709
			{
4710
				$image_array = $Image->getSpotterImage($row['registration']);
4711
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4712
			}
4713
			$temp_array['registration_count'] = $row['registration_count'];
4714
4715
			$aircraft_array[] = $temp_array;
4716
		}
4717
		return $aircraft_array;
4718
	}
4719
4720
4721
	/**
4722
	* Gets all aircraft manufacturer that have flown over by airline icao
4723
	*
4724
	* @return Array the aircraft list
4725
	*
4726
	*/
4727
	public function countAllAircraftManufacturerByAirline($airline_icao,$filters = array())
4728
	{
4729
		$filter_query = $this->getFilter($filters,true,true);
4730
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
4731
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4732
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.airline_icao = :airline_icao 
4733
				GROUP BY spotter_output.aircraft_manufacturer 
4734
				ORDER BY aircraft_manufacturer_count DESC";
4735
4736
		$sth = $this->db->prepare($query);
4737
		$sth->execute(array(':airline_icao' => $airline_icao));
4738
4739
		$aircraft_array = array();
4740
		$temp_array = array();
4741
4742
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4743
		{
4744
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4745
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4746
4747
			$aircraft_array[] = $temp_array;
4748
		}
4749
		return $aircraft_array;
4750
	}
4751
4752
4753
	/**
4754
	* Gets all aircraft types that have flown over by airline icao
4755
	*
4756
	* @return Array the aircraft list
4757
	*
4758
	*/
4759
	public function countAllAircraftTypesByAirport($airport_icao,$filters = array())
4760
	{
4761
		$filter_query = $this->getFilter($filters,true,true);
4762
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4763
4764
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4765
				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) 
4766
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4767
				ORDER BY aircraft_icao_count DESC";
4768
 
4769
		$sth = $this->db->prepare($query);
4770
		$sth->execute(array(':airport_icao' => $airport_icao));
4771
4772
		$aircraft_array = array();
4773
		$temp_array = array();
4774
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4775
		{
4776
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4777
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4778
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4779
4780
			$aircraft_array[] = $temp_array;
4781
		}
4782
		return $aircraft_array;
4783
	}
4784
4785
4786
	/**
4787
	* Gets all aircraft registration that have flown over by airport icao
4788
	*
4789
	* @return Array the aircraft list
4790
	*
4791
	*/
4792
	public function countAllAircraftRegistrationByAirport($airport_icao,$filters = array())
4793
	{
4794
		$filter_query = $this->getFilter($filters,true,true);
4795
		$Image = new Image($this->db);
4796
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4797
4798
		$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  
4799
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)   
4800
                    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
4801
		    ORDER BY registration_count DESC";
4802
4803
		$sth = $this->db->prepare($query);
4804
		$sth->execute(array(':airport_icao' => $airport_icao));
4805
4806
		$aircraft_array = array();
4807
		$temp_array = array();
4808
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4809
		{
4810
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4811
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4812
			$temp_array['registration'] = $row['registration'];
4813
			$temp_array['airline_name'] = $row['airline_name'];
4814
			$temp_array['image_thumbnail'] = "";
4815
			if($row['registration'] != "")
4816
			{
4817
				$image_array = $Image->getSpotterImage($row['registration']);
4818
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4819
			}
4820
			$temp_array['registration_count'] = $row['registration_count'];
4821
			$aircraft_array[] = $temp_array;
4822
		}
4823
		return $aircraft_array;
4824
	}
4825
	
4826
	
4827
	/**
4828
	* Gets all aircraft manufacturer that have flown over by airport icao
4829
	*
4830
	* @return Array the aircraft list
4831
	*
4832
	*/
4833
	public function countAllAircraftManufacturerByAirport($airport_icao,$filters = array())
4834
	{
4835
		$filter_query = $this->getFilter($filters,true,true);
4836
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
4837
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
4838
                    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)  
4839
                    GROUP BY spotter_output.aircraft_manufacturer 
4840
					ORDER BY aircraft_manufacturer_count DESC";
4841
4842
		
4843
		$sth = $this->db->prepare($query);
4844
		$sth->execute(array(':airport_icao' => $airport_icao));
4845
4846
		$aircraft_array = array();
4847
		$temp_array = array();
4848
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4849
		{
4850
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
4851
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
4852
			$aircraft_array[] = $temp_array;
4853
		}
4854
		return $aircraft_array;
4855
	}
4856
4857
	/**
4858
	* Gets all aircraft types that have flown over by aircraft manufacturer
4859
	*
4860
	* @return Array the aircraft list
4861
	*
4862
	*/
4863
	public function countAllAircraftTypesByManufacturer($aircraft_manufacturer,$filters = array())
4864
	{
4865
		$filter_query = $this->getFilter($filters,true,true);
4866
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4867
4868
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4869
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
4870
                    GROUP BY spotter_output.aircraft_name 
4871
					ORDER BY aircraft_icao_count DESC";
4872
4873
		$sth = $this->db->prepare($query);
4874
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4875
		$aircraft_array = array();
4876
		$temp_array = array();
4877
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4878
		{
4879
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4880
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4881
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4882
			$aircraft_array[] = $temp_array;
4883
		}
4884
		return $aircraft_array;
4885
	}
4886
4887
4888
	/**
4889
	* Gets all aircraft registration that have flown over by aircaft manufacturer
4890
	*
4891
	* @return Array the aircraft list
4892
	*
4893
	*/
4894
	public function countAllAircraftRegistrationByManufacturer($aircraft_manufacturer, $filters = array())
4895
	{
4896
		$filter_query = $this->getFilter($filters,true,true);
4897
		$Image = new Image($this->db);
4898
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
4899
4900
		$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   
4901
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
4902
                    GROUP BY spotter_output.registration 
4903
					ORDER BY registration_count DESC";
4904
4905
		
4906
		$sth = $this->db->prepare($query);
4907
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
4908
		$aircraft_array = array();
4909
		$temp_array = array();
4910
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4911
		{
4912
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4913
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4914
			$temp_array['registration'] = $row['registration'];
4915
			$temp_array['airline_name'] = $row['airline_name'];
4916
			$temp_array['image_thumbnail'] = "";
4917
			if($row['registration'] != "")
4918
			{
4919
				$image_array = $Image->getSpotterImage($row['registration']);
4920
				$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
4921
			}
4922
			$temp_array['registration_count'] = $row['registration_count'];
4923
			$aircraft_array[] = $temp_array;
4924
		}
4925
		return $aircraft_array;
4926
	}
4927
4928
	/**
4929
	* Gets all aircraft types that have flown over by date
4930
	*
4931
	* @return Array the aircraft list
4932
	*
4933
	*/
4934
	public function countAllAircraftTypesByDate($date,$filters = array())
4935
	{
4936
		global $globalTimezone, $globalDBdriver;
4937
		$filter_query = $this->getFilter($filters,true,true);
4938
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4939
		if ($globalTimezone != '') {
4940
			date_default_timezone_set($globalTimezone);
4941
			$datetime = new DateTime($date);
4942
			$offset = $datetime->format('P');
4943
		} else $offset = '+00:00';
4944
4945
		if ($globalDBdriver == 'mysql') {
4946
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4947
					FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
4948
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4949
					ORDER BY aircraft_icao_count DESC";
4950
		} else {
4951
			$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
4952
					FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
4953
					GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
4954
					ORDER BY aircraft_icao_count DESC";
4955
		}
4956
		
4957
		$sth = $this->db->prepare($query);
4958
		$sth->execute(array(':date' => $date, ':offset' => $offset));
4959
4960
		$aircraft_array = array();
4961
		$temp_array = array();
4962
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
4963
		{
4964
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
4965
			$temp_array['aircraft_name'] = $row['aircraft_name'];
4966
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
4967
4968
			$aircraft_array[] = $temp_array;
4969
		}
4970
		return $aircraft_array;
4971
	}
4972
4973
4974
	/**
4975
	* Gets all aircraft registration that have flown over by date
4976
	*
4977
	* @return Array the aircraft list
4978
	*
4979
	*/
4980
	public function countAllAircraftRegistrationByDate($date,$filters = array())
4981
	{
4982
		global $globalTimezone, $globalDBdriver;
4983
		$filter_query = $this->getFilter($filters,true,true);
4984
		$Image = new Image($this->db);
4985
		$date = filter_var($date,FILTER_SANITIZE_STRING);
4986
		if ($globalTimezone != '') {
4987
			date_default_timezone_set($globalTimezone);
4988
			$datetime = new DateTime($date);
4989
			$offset = $datetime->format('P');
4990
		} else $offset = '+00:00';
4991
4992
		if ($globalDBdriver == 'mysql') {
4993
			$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 
4994
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
4995
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
4996
					ORDER BY registration_count DESC";
4997
		} else {
4998
			$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    
4999
					FROM spotter_output".$filter_query." spotter_output.registration <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5000
					GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5001
					ORDER BY registration_count DESC";
5002
		}
5003
		
5004
		$sth = $this->db->prepare($query);
5005
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5006
5007
		$aircraft_array = array();
5008
		$temp_array = array();
5009
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5010
		{
5011
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5012
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5013
			$temp_array['registration'] = $row['registration'];
5014
			$temp_array['airline_name'] = $row['airline_name'];
5015
			$temp_array['image_thumbnail'] = "";
5016
			if($row['registration'] != "")
5017
			{
5018
				$image_array = $Image->getSpotterImage($row['registration']);
5019
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5020
			}
5021
			$temp_array['registration_count'] = $row['registration_count'];
5022
 
5023
			$aircraft_array[] = $temp_array;
5024
		}
5025
		return $aircraft_array;
5026
	}
5027
5028
5029
	/**
5030
	* Gets all aircraft manufacturer that have flown over by date
5031
	*
5032
	* @return Array the aircraft manufacturer list
5033
	*
5034
	*/
5035
	public function countAllAircraftManufacturerByDate($date,$filters = array())
5036
	{
5037
		global $globalTimezone, $globalDBdriver;
5038
		$filter_query = $this->getFilter($filters,true,true);
5039
		$date = filter_var($date,FILTER_SANITIZE_STRING);
5040
		if ($globalTimezone != '') {
5041
			date_default_timezone_set($globalTimezone);
5042
			$datetime = new DateTime($date);
5043
			$offset = $datetime->format('P');
5044
		} else $offset = '+00:00';
5045
5046
		if ($globalDBdriver == 'mysql') {
5047
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5048
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
5049
				GROUP BY spotter_output.aircraft_manufacturer 
5050
				ORDER BY aircraft_manufacturer_count DESC";
5051
		} else {
5052
			$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5053
				FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date 
5054
				GROUP BY spotter_output.aircraft_manufacturer 
5055
				ORDER BY aircraft_manufacturer_count DESC";
5056
		}
5057
		
5058
		$sth = $this->db->prepare($query);
5059
		$sth->execute(array(':date' => $date, ':offset' => $offset));
5060
5061
		$aircraft_array = array();
5062
		$temp_array = array();
5063
5064
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5065
		{
5066
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5067
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5068
5069
			$aircraft_array[] = $temp_array;
5070
		}
5071
		return $aircraft_array;
5072
	}
5073
5074
5075
	/**
5076
	* Gets all aircraft types that have flown over by ident/callsign
5077
	*
5078
	* @return Array the aircraft list
5079
	*
5080
	*/
5081
	public function countAllAircraftTypesByIdent($ident,$filters = array())
5082
	{
5083
		$filter_query = $this->getFilter($filters,true,true);
5084
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5085
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5086
				FROM spotter_output".$filter_query." spotter_output.ident = :ident 
5087
				GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao
5088
				ORDER BY aircraft_icao_count DESC";
5089
5090
		$sth = $this->db->prepare($query);
5091
		$sth->execute(array(':ident' => $ident));
5092
      
5093
		$aircraft_array = array();
5094
		$temp_array = array();
5095
5096
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5097
		{
5098
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5099
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5100
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5101
5102
			$aircraft_array[] = $temp_array;
5103
		}
5104
		return $aircraft_array;
5105
	}
5106
5107
5108
	/**
5109
	* Gets all aircraft registration that have flown over by ident/callsign
5110
	*
5111
	* @return Array the aircraft list
5112
	*
5113
	*/
5114
	public function countAllAircraftRegistrationByIdent($ident,$filters = array())
5115
	{
5116
		$filter_query = $this->getFilter($filters,true,true);
5117
		$Image = new Image($this->db);
5118
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5119
5120
		$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  
5121
                    FROM spotter_output".$filter_query." spotter_output.registration <> '' AND spotter_output.ident = :ident   
5122
                    GROUP BY spotter_output.registration,spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name
5123
		    ORDER BY registration_count DESC";
5124
5125
		
5126
		$sth = $this->db->prepare($query);
5127
		$sth->execute(array(':ident' => $ident));
5128
      
5129
		$aircraft_array = array();
5130
		$temp_array = array();
5131
        
5132
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5133
		{
5134
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5135
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5136
			$temp_array['registration'] = $row['registration'];
5137
			$temp_array['airline_name'] = $row['airline_name'];
5138
			$temp_array['image_thumbnail'] = "";
5139
			if($row['registration'] != "")
5140
			{
5141
				$image_array = $Image->getSpotterImage($row['registration']);
5142
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5143
				else $temp_array['image_thumbnail'] = '';
5144
			}
5145
			$temp_array['registration_count'] = $row['registration_count'];
5146
			$aircraft_array[] = $temp_array;
5147
		}
5148
		return $aircraft_array;
5149
	}
5150
5151
5152
	/**
5153
	* Gets all aircraft manufacturer that have flown over by ident/callsign
5154
	*
5155
	* @return Array the aircraft manufacturer list
5156
	*
5157
	*/
5158
	public function countAllAircraftManufacturerByIdent($ident,$filters = array())
5159
	{
5160
		$filter_query = $this->getFilter($filters,true,true);
5161
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
5162
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5163
                    FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.ident = :ident  
5164
                    GROUP BY spotter_output.aircraft_manufacturer 
5165
					ORDER BY aircraft_manufacturer_count DESC";
5166
5167
		
5168
		$sth = $this->db->prepare($query);
5169
		$sth->execute(array(':ident' => $ident));
5170
		$aircraft_array = array();
5171
		$temp_array = array();
5172
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5173
		{
5174
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5175
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5176
			$aircraft_array[] = $temp_array;
5177
		}
5178
		return $aircraft_array;
5179
	}
5180
5181
5182
	/**
5183
	* Gets all aircraft types that have flown over by route
5184
	*
5185
	* @return Array the aircraft list
5186
	*
5187
	*/
5188
	public function countAllAircraftTypesByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5189
	{
5190
		$filter_query = $this->getFilter($filters,true,true);
5191
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5192
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5193
		
5194
5195
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5196
                    FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
5197
                    GROUP BY spotter_output.aircraft_name 
5198
					ORDER BY aircraft_icao_count DESC";
5199
 
5200
		
5201
		$sth = $this->db->prepare($query);
5202
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5203
		$aircraft_array = array();
5204
		$temp_array = array();
5205
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5206
		{
5207
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5208
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5209
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5210
			$aircraft_array[] = $temp_array;
5211
		}
5212
		return $aircraft_array;
5213
	}
5214
5215
	/**
5216
	* Gets all aircraft registration that have flown over by route
5217
	*
5218
	* @return Array the aircraft list
5219
	*
5220
	*/
5221
	public function countAllAircraftRegistrationByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5222
	{
5223
		$filter_query = $this->getFilter($filters,true,true);
5224
		$Image = new Image($this->db);
5225
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5226
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5227
5228
		$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   
5229
                    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)   
5230
                    GROUP BY spotter_output.registration 
5231
					ORDER BY registration_count DESC";
5232
5233
		
5234
		$sth = $this->db->prepare($query);
5235
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5236
      
5237
		$aircraft_array = array();
5238
		$temp_array = array();
5239
        
5240
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5241
		{
5242
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5243
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5244
			$temp_array['registration'] = $row['registration'];
5245
			$temp_array['airline_name'] = $row['airline_name'];
5246
			$temp_array['image_thumbnail'] = "";
5247
			if($row['registration'] != "")
5248
			{
5249
				$image_array = $Image->getSpotterImage($row['registration']);
5250
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5251
			}
5252
			$temp_array['registration_count'] = $row['registration_count'];
5253
          
5254
			$aircraft_array[] = $temp_array;
5255
		}
5256
5257
		return $aircraft_array;
5258
	}
5259
	
5260
	
5261
	/**
5262
	* Gets all aircraft manufacturer that have flown over by route
5263
	*
5264
	* @return Array the aircraft manufacturer list
5265
	*
5266
	*/
5267
	public function countAllAircraftManufacturerByRoute($departure_airport_icao, $arrival_airport_icao,$filters = array())
5268
	{
5269
		$filter_query = $this->getFilter($filters,true,true);
5270
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
5271
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
5272
5273
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5274
                    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) 
5275
                    GROUP BY spotter_output.aircraft_manufacturer 
5276
					ORDER BY aircraft_manufacturer_count DESC";
5277
5278
		
5279
		$sth = $this->db->prepare($query);
5280
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao));
5281
      
5282
		$aircraft_array = array();
5283
		$temp_array = array();
5284
        
5285
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5286
		{
5287
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5288
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5289
          
5290
			$aircraft_array[] = $temp_array;
5291
		}
5292
5293
		return $aircraft_array;
5294
	}	
5295
5296
	
5297
	
5298
	
5299
	/**
5300
	* Gets all aircraft types that have flown over by country
5301
	*
5302
	* @return Array the aircraft list
5303
	*
5304
	*/
5305
	public function countAllAircraftTypesByCountry($country,$filters = array())
5306
	{
5307
		$filter_query = $this->getFilter($filters,true,true);
5308
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5309
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao, COUNT(spotter_output.aircraft_icao) AS aircraft_icao_count, spotter_output.aircraft_name  
5310
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country 
5311
			    GROUP BY spotter_output.aircraft_name, spotter_output.aircraft_icao 
5312
			    ORDER BY aircraft_icao_count DESC";
5313
 
5314
		
5315
		$sth = $this->db->prepare($query);
5316
		$sth->execute(array(':country' => $country));
5317
      
5318
		$aircraft_array = array();
5319
		$temp_array = array();
5320
        
5321
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5322
		{
5323
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5324
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5325
			$temp_array['aircraft_icao_count'] = $row['aircraft_icao_count'];
5326
          
5327
			$aircraft_array[] = $temp_array;
5328
		}
5329
5330
		return $aircraft_array;
5331
	}
5332
5333
5334
	/**
5335
	* Gets all aircraft registration that have flown over by country
5336
	*
5337
	* @return Array the aircraft list
5338
	*
5339
	*/
5340
	public function countAllAircraftRegistrationByCountry($country,$filters = array())
5341
	{
5342
		$filter_query = $this->getFilter($filters,true,true);
5343
		$Image = new Image($this->db);
5344
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5345
		$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 
5346
			    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)    
5347
			    GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name 
5348
			    ORDER BY registration_count DESC";
5349
5350
		
5351
		$sth = $this->db->prepare($query);
5352
		$sth->execute(array(':country' => $country));
5353
      
5354
		$aircraft_array = array();
5355
		$temp_array = array();
5356
        
5357
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5358
		{
5359
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5360
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5361
			$temp_array['registration'] = $row['registration'];
5362
			$temp_array['airline_name'] = $row['airline_name'];
5363
			$temp_array['image_thumbnail'] = "";
5364
			if($row['registration'] != "")
5365
			{
5366
				$image_array = $Image->getSpotterImage($row['registration']);
5367
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5368
			}
5369
			$temp_array['registration_count'] = $row['registration_count'];
5370
          
5371
			$aircraft_array[] = $temp_array;
5372
		}
5373
5374
		return $aircraft_array;
5375
	}
5376
	
5377
	
5378
	/**
5379
	* Gets all aircraft manufacturer that have flown over by country
5380
	*
5381
	* @return Array the aircraft manufacturer list
5382
	*
5383
	*/
5384
	public function countAllAircraftManufacturerByCountry($country,$filters = array())
5385
	{
5386
		$filter_query = $this->getFilter($filters,true,true);
5387
		$country = filter_var($country,FILTER_SANITIZE_STRING);
5388
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5389
                    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) 
5390
                    GROUP BY spotter_output.aircraft_manufacturer 
5391
					ORDER BY aircraft_manufacturer_count DESC";
5392
5393
		
5394
		$sth = $this->db->prepare($query);
5395
		$sth->execute(array(':country' => $country));
5396
      
5397
		$aircraft_array = array();
5398
		$temp_array = array();
5399
        
5400
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5401
		{
5402
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5403
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5404
          
5405
			$aircraft_array[] = $temp_array;
5406
		}
5407
5408
		return $aircraft_array;
5409
	}	
5410
	
5411
	
5412
	
5413
	/**
5414
	* Gets all aircraft manufacturers that have flown over
5415
	*
5416
	* @return Array the aircraft list
5417
	*
5418
	*/
5419
	public function countAllAircraftManufacturers($filters = array())
5420
	{
5421
		$filter_query = $this->getFilter($filters,true,true);
5422
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer, COUNT(spotter_output.aircraft_manufacturer) AS aircraft_manufacturer_count  
5423
                    FROM spotter_output ".$filter_query." spotter_output.aircraft_manufacturer <> '' AND spotter_output.aircraft_manufacturer <> 'Not Available'";
5424
                $query .= " GROUP BY spotter_output.aircraft_manufacturer
5425
					ORDER BY aircraft_manufacturer_count DESC
5426
					LIMIT 10";
5427
      
5428
		
5429
		$sth = $this->db->prepare($query);
5430
		$sth->execute();
5431
      
5432
		$manufacturer_array = array();
5433
		$temp_array = array();
5434
        
5435
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5436
		{
5437
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
5438
			$temp_array['aircraft_manufacturer_count'] = $row['aircraft_manufacturer_count'];
5439
          
5440
			$manufacturer_array[] = $temp_array;
5441
		}
5442
5443
		return $manufacturer_array;
5444
	}
5445
	
5446
	
5447
	
5448
	/**
5449
	* Gets all aircraft registrations that have flown over
5450
	*
5451
	* @return Array the aircraft list
5452
	*
5453
	*/
5454
	public function countAllAircraftRegistrations($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5455
	{
5456
		global $globalDBdriver;
5457
		$Image = new Image($this->db);
5458
		$filter_query = $this->getFilter($filters,true,true);
5459
		$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    
5460
                    FROM spotter_output ".$filter_query." spotter_output.registration <> '' AND spotter_output.registration <> 'NA'";
5461
                if ($olderthanmonths > 0) {
5462
            		if ($globalDBdriver == 'mysql') {
5463
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5464
			} else {
5465
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5466
			}
5467
		}
5468
                if ($sincedate != '') {
5469
            		if ($globalDBdriver == 'mysql') {
5470
				$query .= " AND spotter_output.date > '".$sincedate."'";
5471
			} else {
5472
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5473
			}
5474
		}
5475
5476
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5477
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5478
                $query .= " GROUP BY spotter_output.registration, spotter_output.aircraft_icao, spotter_output.aircraft_name, spotter_output.airline_name ORDER BY aircraft_registration_count DESC";
5479
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5480
		
5481
		$sth = $this->db->prepare($query);
5482
		$sth->execute();
5483
      
5484
		$aircraft_array = array();
5485
		$temp_array = array();
5486
        
5487
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5488
		{
5489
			$temp_array['registration'] = $row['registration'];
5490
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5491
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5492
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5493
			$temp_array['airline_name'] = $row['airline_name'];
5494
			$temp_array['image_thumbnail'] = "";
5495
			if($row['registration'] != "")
5496
			{
5497
				$image_array = $Image->getSpotterImage($row['registration']);
5498
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5499
			}
5500
          
5501
			$aircraft_array[] = $temp_array;
5502
		}
5503
5504
		return $aircraft_array;
5505
	}
5506
5507
5508
	/**
5509
	* Gets all aircraft registrations that have flown over
5510
	*
5511
	* @return Array the aircraft list
5512
	*
5513
	*/
5514
	public function countAllAircraftRegistrationsByAirlines($limit = true,$olderthanmonths = 0,$sincedate = '',$filters = array())
5515
	{
5516
		global $globalDBdriver;
5517
		$filter_query = $this->getFilter($filters,true,true);
5518
		$Image = new Image($this->db);
5519
		$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    
5520
                    FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.registration <> '' AND spotter_output.registration <> 'NA' ";
5521
                if ($olderthanmonths > 0) {
5522
            		if ($globalDBdriver == 'mysql') {
5523
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5524
			} else {
5525
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5526
			}
5527
		}
5528
                if ($sincedate != '') {
5529
            		if ($globalDBdriver == 'mysql') {
5530
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5531
			} else {
5532
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5533
			}
5534
		}
5535
5536
		// if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5537
		//if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5538
                $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";
5539
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5540
		
5541
		$sth = $this->db->prepare($query);
5542
		$sth->execute();
5543
      
5544
		$aircraft_array = array();
5545
		$temp_array = array();
5546
        
5547
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5548
		{
5549
			$temp_array['registration'] = $row['registration'];
5550
			$temp_array['aircraft_registration_count'] = $row['aircraft_registration_count'];
5551
			$temp_array['airline_icao'] = $row['airline_icao'];
5552
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
5553
			$temp_array['aircraft_name'] = $row['aircraft_name'];
5554
			$temp_array['airline_name'] = $row['airline_name'];
5555
			$temp_array['image_thumbnail'] = "";
5556
			if($row['registration'] != "")
5557
			{
5558
				$image_array = $Image->getSpotterImage($row['registration']);
5559
				if (isset($image_array[0]['image_thumbnail'])) $temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
5560
			}
5561
          
5562
			$aircraft_array[] = $temp_array;
5563
		}
5564
5565
		return $aircraft_array;
5566
	}
5567
	
5568
	
5569
	/**
5570
	* Gets all departure airports of the airplanes that have flown over
5571
	*
5572
	* @return Array the airport list
5573
	*
5574
	*/
5575
	public function countAllDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5576
	{
5577
		global $globalDBdriver;
5578
		$filter_query = $this->getFilter($filters,true,true);
5579
		$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 
5580
				FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA'";
5581
                if ($olderthanmonths > 0) {
5582
            		if ($globalDBdriver == 'mysql') {
5583
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5584
			} else {
5585
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5586
			}
5587
                }
5588
                if ($sincedate != '') {
5589
            		if ($globalDBdriver == 'mysql') {
5590
				$query .= " AND spotter_output.date > '".$sincedate."'";
5591
			} else {
5592
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5593
			}
5594
		}
5595
5596
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5597
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5598
                $query .= " GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5599
				ORDER BY airport_departure_icao_count DESC";
5600
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5601
      
5602
		$sth = $this->db->prepare($query);
5603
		$sth->execute();
5604
      
5605
		$airport_array = array();
5606
		$temp_array = array();
5607
        
5608
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5609
		{
5610
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5611
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5612
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5613
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5614
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5615
          
5616
			$airport_array[] = $temp_array;
5617
		}
5618
		return $airport_array;
5619
	}
5620
5621
	/**
5622
	* Gets all departure airports of the airplanes that have flown over
5623
	*
5624
	* @return Array the airport list
5625
	*
5626
	*/
5627
	public function countAllDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5628
	{
5629
		global $globalDBdriver;
5630
		$filter_query = $this->getFilter($filters,true,true);
5631
		$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 
5632
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' ";
5633
                if ($olderthanmonths > 0) {
5634
            		if ($globalDBdriver == 'mysql') {
5635
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5636
			} else {
5637
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5638
			}
5639
                }
5640
                if ($sincedate != '') {
5641
            		if ($globalDBdriver == 'mysql') {
5642
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5643
			} else {
5644
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5645
			}
5646
		}
5647
5648
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5649
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5650
                $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
5651
				ORDER BY airport_departure_icao_count DESC";
5652
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5653
      
5654
		$sth = $this->db->prepare($query);
5655
		$sth->execute();
5656
      
5657
		$airport_array = array();
5658
		$temp_array = array();
5659
        
5660
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5661
		{
5662
			$temp_array['airline_icao'] = $row['airline_icao'];
5663
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5664
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5665
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5666
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5667
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5668
          
5669
			$airport_array[] = $temp_array;
5670
		}
5671
		return $airport_array;
5672
	}
5673
5674
	/**
5675
	* Gets all detected departure airports of the airplanes that have flown over
5676
	*
5677
	* @return Array the airport list
5678
	*
5679
	*/
5680
	public function countAllDetectedDepartureAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5681
	{
5682
		global $globalDBdriver;
5683
		$filter_query = $this->getFilter($filters,true,true);
5684
		$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
5685
				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";
5686
                if ($olderthanmonths > 0) {
5687
            		if ($globalDBdriver == 'mysql') {
5688
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
5689
			} else {
5690
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
5691
			}
5692
                }
5693
                if ($sincedate != '') {
5694
            		if ($globalDBdriver == 'mysql') {
5695
				$query .= " AND spotter_output.date > '".$sincedate."'";
5696
			} else {
5697
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
5698
			}
5699
		}
5700
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5701
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5702
                $query .= " GROUP BY spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5703
				ORDER BY airport_departure_icao_count DESC";
5704
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5705
    		//echo $query;
5706
		$sth = $this->db->prepare($query);
5707
		$sth->execute();
5708
      
5709
		$airport_array = array();
5710
		$temp_array = array();
5711
        
5712
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5713
		{
5714
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5715
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5716
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5717
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5718
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5719
          
5720
			$airport_array[] = $temp_array;
5721
		}
5722
		return $airport_array;
5723
	}
5724
	
5725
	/**
5726
	* Gets all detected departure airports of the airplanes that have flown over
5727
	*
5728
	* @return Array the airport list
5729
	*
5730
	*/
5731
	public function countAllDetectedDepartureAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
5732
	{
5733
		global $globalDBdriver;
5734
		$filter_query = $this->getFilter($filters,true,true);
5735
		$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
5736
				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 ";
5737
                if ($olderthanmonths > 0) {
5738
            		if ($globalDBdriver == 'mysql') {
5739
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
5740
			} else {
5741
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
5742
			}
5743
                }
5744
                if ($sincedate != '') {
5745
            		if ($globalDBdriver == 'mysql') {
5746
				$query .= "AND spotter_output.date > '".$sincedate."' ";
5747
			} else {
5748
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
5749
			}
5750
		}
5751
5752
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
5753
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
5754
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_departure_airport_icao, airport.name, airport.city, airport.country
5755
				ORDER BY airport_departure_icao_count DESC";
5756
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
5757
      
5758
		$sth = $this->db->prepare($query);
5759
		$sth->execute();
5760
      
5761
		$airport_array = array();
5762
		$temp_array = array();
5763
        
5764
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5765
		{
5766
			$temp_array['airline_icao'] = $row['airline_icao'];
5767
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5768
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5769
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5770
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5771
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5772
          
5773
			$airport_array[] = $temp_array;
5774
		}
5775
		return $airport_array;
5776
	}	
5777
	
5778
	/**
5779
	* Gets all departure airports of the airplanes that have flown over based on an airline icao
5780
	*
5781
	* @return Array the airport list
5782
	*
5783
	*/
5784
	public function countAllDepartureAirportsByAirline($airline_icao,$filters = array())
5785
	{
5786
		$filter_query = $this->getFilter($filters,true,true);
5787
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
5788
		$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 
5789
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao 
5790
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
5791
			    ORDER BY airport_departure_icao_count DESC";
5792
      
5793
		
5794
		$sth = $this->db->prepare($query);
5795
		$sth->execute(array(':airline_icao' => $airline_icao));
5796
      
5797
		$airport_array = array();
5798
		$temp_array = array();
5799
        
5800
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5801
		{
5802
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5803
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5804
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5805
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5806
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5807
          
5808
			$airport_array[] = $temp_array;
5809
		}
5810
5811
		return $airport_array;
5812
	}
5813
	
5814
	
5815
	
5816
	/**
5817
	* Gets all departure airports by country of the airplanes that have flown over based on an airline icao
5818
	*
5819
	* @return Array the airport list
5820
	*
5821
	*/
5822
	public function countAllDepartureAirportCountriesByAirline($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_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5827
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
5828
                    GROUP BY spotter_output.departure_airport_country
5829
					ORDER BY airport_departure_country_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['departure_airport_country'] = $row['departure_airport_country'];
5841
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5842
          
5843
			$airport_array[] = $temp_array;
5844
		}
5845
5846
		return $airport_array;
5847
	}
5848
	
5849
	
5850
	
5851
	/**
5852
	* Gets all departure airports of the airplanes that have flown over based on an aircraft icao
5853
	*
5854
	* @return Array the airport list
5855
	*
5856
	*/
5857
	public function countAllDepartureAirportsByAircraft($aircraft_icao,$filters = array())
5858
	{
5859
		$filter_query = $this->getFilter($filters,true,true);
5860
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5861
		$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 
5862
			    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao 
5863
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
5864
			    ORDER BY airport_departure_icao_count DESC";
5865
      
5866
		
5867
		$sth = $this->db->prepare($query);
5868
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5869
      
5870
		$airport_array = array();
5871
		$temp_array = array();
5872
        
5873
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5874
		{
5875
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5876
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5877
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5878
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5879
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5880
          
5881
			$airport_array[] = $temp_array;
5882
		}
5883
5884
		return $airport_array;
5885
	}
5886
	
5887
	
5888
	/**
5889
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
5890
	*
5891
	* @return Array the airport list
5892
	*
5893
	*/
5894
	public function countAllDepartureAirportCountriesByAircraft($aircraft_icao,$filters = array())
5895
	{
5896
		$filter_query = $this->getFilter($filters,true,true);
5897
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
5898
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5899
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
5900
                    GROUP BY spotter_output.departure_airport_country
5901
					ORDER BY airport_departure_country_count DESC";
5902
      
5903
		
5904
		$sth = $this->db->prepare($query);
5905
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
5906
      
5907
		$airport_array = array();
5908
		$temp_array = array();
5909
        
5910
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5911
		{
5912
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5913
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5914
          
5915
			$airport_array[] = $temp_array;
5916
		}
5917
5918
		return $airport_array;
5919
	}
5920
	
5921
	
5922
	/**
5923
	* Gets all departure airports of the airplanes that have flown over based on an aircraft registration
5924
	*
5925
	* @return Array the airport list
5926
	*
5927
	*/
5928
	public function countAllDepartureAirportsByRegistration($registration,$filters = array())
5929
	{
5930
		$filter_query = $this->getFilter($filters,true,true);
5931
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5932
		$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 
5933
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.registration = :registration 
5934
                    GROUP BY spotter_output.departure_airport_icao
5935
					ORDER BY airport_departure_icao_count DESC";
5936
      
5937
		
5938
		$sth = $this->db->prepare($query);
5939
		$sth->execute(array(':registration' => $registration));
5940
      
5941
		$airport_array = array();
5942
		$temp_array = array();
5943
        
5944
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5945
		{
5946
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
5947
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
5948
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
5949
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
5950
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
5951
          
5952
			$airport_array[] = $temp_array;
5953
		}
5954
5955
		return $airport_array;
5956
	}
5957
	
5958
	
5959
	/**
5960
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft registration
5961
	*
5962
	* @return Array the airport list
5963
	*
5964
	*/
5965
	public function countAllDepartureAirportCountriesByRegistration($registration,$filters = array())
5966
	{
5967
		$filter_query = $this->getFilter($filters,true,true);
5968
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
5969
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
5970
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.registration = :registration 
5971
                    GROUP BY spotter_output.departure_airport_country
5972
					ORDER BY airport_departure_country_count DESC";
5973
      
5974
		
5975
		$sth = $this->db->prepare($query);
5976
		$sth->execute(array(':registration' => $registration));
5977
      
5978
		$airport_array = array();
5979
		$temp_array = array();
5980
        
5981
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
5982
		{
5983
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
5984
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
5985
          
5986
			$airport_array[] = $temp_array;
5987
		}
5988
5989
		return $airport_array;
5990
	}
5991
	
5992
	
5993
	/**
5994
	* Gets all departure airports of the airplanes that have flown over based on an arrivl airport icao
5995
	*
5996
	* @return Array the airport list
5997
	*
5998
	*/
5999
	public function countAllDepartureAirportsByAirport($airport_icao,$filters = array())
6000
	{
6001
		$filter_query = $this->getFilter($filters,true,true);
6002
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6003
		$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 
6004
			    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 
6005
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6006
			    ORDER BY airport_departure_icao_count DESC";
6007
      
6008
		
6009
		$sth = $this->db->prepare($query);
6010
		$sth->execute(array(':airport_icao' => $airport_icao));
6011
      
6012
		$airport_array = array();
6013
		$temp_array = array();
6014
        
6015
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6016
		{
6017
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6018
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6019
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6020
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6021
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6022
          
6023
			$airport_array[] = $temp_array;
6024
		}
6025
6026
		return $airport_array;
6027
	}
6028
	
6029
	
6030
	/**
6031
	* Gets all departure airports by country of the airplanes that have flown over based on an airport icao
6032
	*
6033
	* @return Array the airport list
6034
	*
6035
	*/
6036
	public function countAllDepartureAirportCountriesByAirport($airport_icao,$filters = array())
6037
	{
6038
		$filter_query = $this->getFilter($filters,true,true);
6039
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6040
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6041
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.arrival_airport_icao = :airport_icao 
6042
                    GROUP BY spotter_output.departure_airport_country
6043
					ORDER BY airport_departure_country_count DESC";
6044
      
6045
		
6046
		$sth = $this->db->prepare($query);
6047
		$sth->execute(array(':airport_icao' => $airport_icao));
6048
      
6049
		$airport_array = array();
6050
		$temp_array = array();
6051
        
6052
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6053
		{
6054
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6055
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6056
          
6057
			$airport_array[] = $temp_array;
6058
		}
6059
6060
		return $airport_array;
6061
	}
6062
	
6063
	
6064
	
6065
	/**
6066
	* Gets all departure airports of the airplanes that have flown over based on an aircraft manufacturer
6067
	*
6068
	* @return Array the airport list
6069
	*
6070
	*/
6071
	public function countAllDepartureAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6072
	{
6073
		$filter_query = $this->getFilter($filters,true,true);
6074
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6075
		$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 
6076
			FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6077
                    GROUP BY spotter_output.departure_airport_icao
6078
					ORDER BY airport_departure_icao_count DESC";
6079
      
6080
		
6081
		$sth = $this->db->prepare($query);
6082
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6083
      
6084
		$airport_array = array();
6085
		$temp_array = array();
6086
        
6087
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6088
		{
6089
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6090
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6091
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6092
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6093
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6094
          
6095
			$airport_array[] = $temp_array;
6096
		}
6097
6098
		return $airport_array;
6099
	}
6100
	
6101
	
6102
	/**
6103
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft manufacturer
6104
	*
6105
	* @return Array the airport list
6106
	*
6107
	*/
6108
	public function countAllDepartureAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6109
	{
6110
		$filter_query = $this->getFilter($filters,true,true);
6111
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6112
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6113
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6114
                    GROUP BY spotter_output.departure_airport_country
6115
					ORDER BY airport_departure_country_count DESC";
6116
      
6117
		
6118
		$sth = $this->db->prepare($query);
6119
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6120
      
6121
		$airport_array = array();
6122
		$temp_array = array();
6123
        
6124
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6125
		{
6126
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6127
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6128
          
6129
			$airport_array[] = $temp_array;
6130
		}
6131
6132
		return $airport_array;
6133
	}
6134
	
6135
	
6136
	/**
6137
	* Gets all departure airports of the airplanes that have flown over based on a date
6138
	*
6139
	* @return Array the airport list
6140
	*
6141
	*/
6142
	public function countAllDepartureAirportsByDate($date,$filters = array())
6143
	{
6144
		global $globalTimezone, $globalDBdriver;
6145
		$filter_query = $this->getFilter($filters,true,true);
6146
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6147
		if ($globalTimezone != '') {
6148
			date_default_timezone_set($globalTimezone);
6149
			$datetime = new DateTime($date);
6150
			$offset = $datetime->format('P');
6151
		} else $offset = '+00:00';
6152
6153
		if ($globalDBdriver == 'mysql') {
6154
			$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 
6155
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
6156
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6157
					ORDER BY airport_departure_icao_count DESC";
6158
		} else {
6159
			$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 
6160
					FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date
6161
					GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6162
					ORDER BY airport_departure_icao_count DESC";
6163
		}
6164
6165
		$sth = $this->db->prepare($query);
6166
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6167
      
6168
		$airport_array = array();
6169
		$temp_array = array();
6170
        
6171
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6172
		{
6173
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6174
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6175
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6176
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6177
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6178
          
6179
			$airport_array[] = $temp_array;
6180
		}
6181
		return $airport_array;
6182
	}
6183
	
6184
	
6185
	
6186
	/**
6187
	* Gets all departure airports by country of the airplanes that have flown over based on a date
6188
	*
6189
	* @return Array the airport list
6190
	*
6191
	*/
6192
	public function countAllDepartureAirportCountriesByDate($date,$filters = array())
6193
	{
6194
		global $globalTimezone, $globalDBdriver;
6195
		$filter_query = $this->getFilter($filters,true,true);
6196
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6197
		if ($globalTimezone != '') {
6198
			date_default_timezone_set($globalTimezone);
6199
			$datetime = new DateTime($date);
6200
			$offset = $datetime->format('P');
6201
		} else $offset = '+00:00';
6202
6203
		if ($globalDBdriver == 'mysql') {
6204
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6205
					FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
6206
					GROUP BY spotter_output.departure_airport_country
6207
					ORDER BY airport_departure_country_count DESC";
6208
		} else {
6209
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6210
					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 
6211
					GROUP BY spotter_output.departure_airport_country
6212
					ORDER BY airport_departure_country_count DESC";
6213
		}
6214
		
6215
		$sth = $this->db->prepare($query);
6216
		$sth->execute(array(':date' => $date, ':offset' => $offset));
6217
      
6218
		$airport_array = array();
6219
		$temp_array = array();
6220
        
6221
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6222
		{
6223
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6224
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6225
          
6226
			$airport_array[] = $temp_array;
6227
		}
6228
		return $airport_array;
6229
	}
6230
	
6231
	
6232
	
6233
	/**
6234
	* Gets all departure airports of the airplanes that have flown over based on a ident/callsign
6235
	*
6236
	* @return Array the airport list
6237
	*
6238
	*/
6239
	public function countAllDepartureAirportsByIdent($ident,$filters = array())
6240
	{
6241
		$filter_query = $this->getFilter($filters,true,true);
6242
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
6243
		$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 
6244
		    FROM spotter_output".$filter_query." spotter_output.departure_airport_name <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.ident = :ident 
6245
                    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country
6246
		    ORDER BY airport_departure_icao_count DESC";
6247
      
6248
		
6249
		$sth = $this->db->prepare($query);
6250
		$sth->execute(array(':ident' => $ident));
6251
      
6252
		$airport_array = array();
6253
		$temp_array = array();
6254
        
6255
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6256
		{
6257
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6258
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6259
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6260
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6261
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6262
          
6263
			$airport_array[] = $temp_array;
6264
		}
6265
6266
		return $airport_array;
6267
	}
6268
	
6269
	
6270
	
6271
	/**
6272
	* Gets all departure airports by country of the airplanes that have flown over based on a callsign/ident
6273
	*
6274
	* @return Array the airport list
6275
	*
6276
	*/
6277
	public function countAllDepartureAirportCountriesByIdent($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_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6282
			FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.ident = :ident 
6283
                    GROUP BY spotter_output.departure_airport_country
6284
					ORDER BY airport_departure_country_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['departure_airport_country'] = $row['departure_airport_country'];
6296
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6297
          
6298
			$airport_array[] = $temp_array;
6299
		}
6300
6301
		return $airport_array;
6302
	}
6303
	
6304
	
6305
	
6306
	/**
6307
	* Gets all departure airports of the airplanes that have flown over based on a country
6308
	*
6309
	* @return Array the airport list
6310
	*
6311
	*/
6312
	public function countAllDepartureAirportsByCountry($country,$filters = array())
6313
	{
6314
		$filter_query = $this->getFilter($filters,true,true);
6315
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6316
6317
		$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 
6318
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
6319
			    GROUP BY spotter_output.departure_airport_icao, spotter_output.departure_airport_name, spotter_output.departure_airport_city, spotter_output.departure_airport_country 
6320
			    ORDER BY airport_departure_icao_count DESC";
6321
      
6322
		
6323
		$sth = $this->db->prepare($query);
6324
		$sth->execute(array(':country' => $country));
6325
      
6326
		$airport_array = array();
6327
		$temp_array = array();
6328
        
6329
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6330
		{
6331
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
6332
			$temp_array['airport_departure_icao_count'] = $row['airport_departure_icao_count'];
6333
			$temp_array['airport_departure_name'] = $row['departure_airport_name'];
6334
			$temp_array['airport_departure_city'] = $row['departure_airport_city'];
6335
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
6336
          
6337
			$airport_array[] = $temp_array;
6338
		}
6339
6340
		return $airport_array;
6341
	}
6342
6343
6344
	/**
6345
	* Gets all departure airports by country of the airplanes that have flown over based on an aircraft icao
6346
	*
6347
	* @return Array the airport list
6348
	*
6349
	*/
6350
	public function countAllDepartureAirportCountriesByCountry($country,$filters = array())
6351
	{
6352
		$filter_query = $this->getFilter($filters,true,true);
6353
		$country = filter_var($country,FILTER_SANITIZE_STRING);
6354
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
6355
			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 
6356
                    GROUP BY spotter_output.departure_airport_country
6357
					ORDER BY airport_departure_country_count DESC";
6358
      
6359
		
6360
		$sth = $this->db->prepare($query);
6361
		$sth->execute(array(':country' => $country));
6362
      
6363
		$airport_array = array();
6364
		$temp_array = array();
6365
        
6366
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6367
		{
6368
			$temp_array['departure_airport_country'] = $row['departure_airport_country'];
6369
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
6370
          
6371
			$airport_array[] = $temp_array;
6372
		}
6373
6374
		return $airport_array;
6375
	}
6376
	
6377
6378
	/**
6379
	* Gets all arrival airports of the airplanes that have flown over
6380
	*
6381
	* @return Array the airport list
6382
	*
6383
	*/
6384
	public function countAllArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6385
	{
6386
		global $globalDBdriver;
6387
		$filter_query = $this->getFilter($filters,true,true);
6388
		$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 
6389
				FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA'";
6390
                if ($olderthanmonths > 0) {
6391
            		if ($globalDBdriver == 'mysql') {
6392
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6393
			} else {
6394
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6395
			}
6396
                if ($sincedate != '') {
6397
            		if ($globalDBdriver == 'mysql') {
6398
				$query .= " AND spotter_output.date > '".$sincedate."'";
6399
			} else {
6400
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6401
			}
6402
		}
6403
            		if ($globalDBdriver == 'mysql') {
6404
				$query .= " AND spotter_output.date > '".$sincedate."'";
6405
			} else {
6406
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6407
			}
6408
		}
6409
6410
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6411
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6412
                $query .= " GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6413
					ORDER BY airport_arrival_icao_count DESC";
6414
		if ($limit) $query .= " LIMIT 10";
6415
      
6416
		
6417
		$sth = $this->db->prepare($query);
6418
		$sth->execute();
6419
      
6420
		$airport_array = array();
6421
		$temp_array = array();
6422
        
6423
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6424
		{
6425
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6426
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6427
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6428
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6429
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6430
          
6431
			if ($icaoaskey) {
6432
				$icao = $row['arrival_airport_icao'];
6433
				$airport_array[$icao] = $temp_array;
6434
			} else $airport_array[] = $temp_array;
6435
		}
6436
6437
		return $airport_array;
6438
	}
6439
6440
	/**
6441
	* Gets all arrival airports of the airplanes that have flown over
6442
	*
6443
	* @return Array the airport list
6444
	*
6445
	*/
6446
	public function countAllArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $icaoaskey = false,$filters = array())
6447
	{
6448
		global $globalDBdriver;
6449
		$filter_query = $this->getFilter($filters,true,true);
6450
		$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 
6451
			FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' ";
6452
                if ($olderthanmonths > 0) {
6453
            		if ($globalDBdriver == 'mysql') {
6454
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6455
			} else {
6456
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6457
			}
6458
                if ($sincedate != '') {
6459
            		if ($globalDBdriver == 'mysql') {
6460
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6461
			} else {
6462
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6463
			}
6464
		}
6465
            		if ($globalDBdriver == 'mysql') {
6466
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6467
			} else {
6468
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6469
			}
6470
		}
6471
6472
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6473
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6474
                $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
6475
					ORDER BY airport_arrival_icao_count DESC";
6476
		if ($limit) $query .= " LIMIT 10";
6477
      
6478
		
6479
		$sth = $this->db->prepare($query);
6480
		$sth->execute();
6481
      
6482
		$airport_array = array();
6483
		$temp_array = array();
6484
        
6485
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6486
		{
6487
			$temp_array['airline_icao'] = $row['airline_icao'];
6488
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6489
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6490
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6491
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6492
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6493
          
6494
			if ($icaoaskey) {
6495
				$icao = $row['arrival_airport_icao'];
6496
				$airport_array[$icao] = $temp_array;
6497
			} else $airport_array[] = $temp_array;
6498
		}
6499
6500
		return $airport_array;
6501
	}
6502
6503
6504
	/**
6505
	* Gets all detected arrival airports of the airplanes that have flown over
6506
	*
6507
	* @return Array the airport list
6508
	*
6509
	*/
6510
	public function countAllDetectedArrivalAirports($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
6511
	{
6512
		global $globalDBdriver;
6513
		$filter_query = $this->getFilter($filters,true,true);
6514
		$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 
6515
			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";
6516
                if ($olderthanmonths > 0) {
6517
            		if ($globalDBdriver == 'mysql') {
6518
				$query .= ' AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH)';
6519
			} else {
6520
				$query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
6521
			}
6522
                if ($sincedate != '') {
6523
            		if ($globalDBdriver == 'mysql') {
6524
				$query .= " AND spotter_output.date > '".$sincedate."'";
6525
			} else {
6526
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6527
			}
6528
		}
6529
            		if ($globalDBdriver == 'mysql') {
6530
				$query .= " AND spotter_output.date > '".$sincedate."'";
6531
			} else {
6532
				$query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6533
			}
6534
		}
6535
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6536
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6537
                $query .= " GROUP BY spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6538
					ORDER BY airport_arrival_icao_count DESC";
6539
		if ($limit) $query .= " LIMIT 10";
6540
      
6541
		
6542
		$sth = $this->db->prepare($query);
6543
		$sth->execute();
6544
      
6545
		$airport_array = array();
6546
		$temp_array = array();
6547
        
6548
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6549
		{
6550
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6551
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6552
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6553
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6554
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6555
          
6556
			if ($icaoaskey) {
6557
				$icao = $row['arrival_airport_icao'];
6558
				$airport_array[$icao] = $temp_array;
6559
			} else $airport_array[] = $temp_array;
6560
		}
6561
6562
		return $airport_array;
6563
	}
6564
	
6565
	/**
6566
	* Gets all detected arrival airports of the airplanes that have flown over
6567
	*
6568
	* @return Array the airport list
6569
	*
6570
	*/
6571
	public function countAllDetectedArrivalAirportsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '',$icaoaskey = false,$filters = array())
6572
	{
6573
		global $globalDBdriver;
6574
		$filter_query = $this->getFilter($filters,true,true);
6575
		$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 
6576
			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 ";
6577
                if ($olderthanmonths > 0) {
6578
            		if ($globalDBdriver == 'mysql') {
6579
				$query .= 'AND spotter_output.date < DATE_SUB(UTC_TIMESTAMP(), INTERVAL '.$olderthanmonths.' MONTH) ';
6580
			} else {
6581
				$query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
6582
			}
6583
                if ($sincedate != '') {
6584
            		if ($globalDBdriver == 'mysql') {
6585
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6586
			} else {
6587
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6588
			}
6589
		}
6590
            		if ($globalDBdriver == 'mysql') {
6591
				$query .= "AND spotter_output.date > '".$sincedate."' ";
6592
			} else {
6593
				$query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
6594
			}
6595
		}
6596
6597
            	//if ($olderthanmonths > 0) $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
6598
                //if ($sincedate != '') $query .= "AND date > '".$sincedate."' ";
6599
                $query .= "GROUP BY spotter_output.airline_icao, spotter_output.real_arrival_airport_icao, airport.name, airport.city, airport.country
6600
					ORDER BY airport_arrival_icao_count DESC";
6601
		if ($limit) $query .= " LIMIT 10";
6602
      
6603
		
6604
		$sth = $this->db->prepare($query);
6605
		$sth->execute();
6606
      
6607
		$airport_array = array();
6608
		$temp_array = array();
6609
        
6610
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6611
		{
6612
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6613
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6614
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6615
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6616
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6617
			$temp_array['airline_icao'] = $row['airline_icao'];
6618
          
6619
			if ($icaoaskey) {
6620
				$icao = $row['arrival_airport_icao'];
6621
				$airport_array[$icao] = $temp_array;
6622
			} else $airport_array[] = $temp_array;
6623
		}
6624
6625
		return $airport_array;
6626
	}	
6627
	
6628
	/**
6629
	* Gets all arrival airports of the airplanes that have flown over based on an airline icao
6630
	*
6631
	* @return Array the airport list
6632
	*
6633
	*/
6634
	public function countAllArrivalAirportsByAirline($airline_icao, $filters = array())
6635
	{
6636
		$filter_query = $this->getFilter($filters,true,true);
6637
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6638
		$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 
6639
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.airline_icao = :airline_icao 
6640
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6641
			    ORDER BY airport_arrival_icao_count DESC";
6642
		
6643
		$sth = $this->db->prepare($query);
6644
		$sth->execute(array(':airline_icao' => $airline_icao));
6645
      
6646
		$airport_array = array();
6647
		$temp_array = array();
6648
        
6649
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6650
		{
6651
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6652
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6653
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6654
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6655
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6656
          
6657
			$airport_array[] = $temp_array;
6658
		}
6659
6660
		return $airport_array;
6661
	}
6662
	
6663
	
6664
	/**
6665
	* Gets all arrival airports by country of the airplanes that have flown over based on an airline icao
6666
	*
6667
	* @return Array the airport list
6668
	*
6669
	*/
6670
	public function countAllArrivalAirportCountriesByAirline($airline_icao,$filters = array())
6671
	{
6672
		$filter_query = $this->getFilter($filters,true,true);
6673
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
6674
					
6675
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6676
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.airline_icao = :airline_icao 
6677
                    GROUP BY spotter_output.arrival_airport_country
6678
					ORDER BY airport_arrival_country_count DESC";
6679
      
6680
		
6681
		$sth = $this->db->prepare($query);
6682
		$sth->execute(array(':airline_icao' => $airline_icao));
6683
      
6684
		$airport_array = array();
6685
		$temp_array = array();
6686
        
6687
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6688
		{
6689
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6690
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6691
          
6692
			$airport_array[] = $temp_array;
6693
		}
6694
6695
		return $airport_array;
6696
	}
6697
	
6698
	
6699
	/**
6700
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft icao
6701
	*
6702
	* @return Array the airport list
6703
	*
6704
	*/
6705
	public function countAllArrivalAirportsByAircraft($aircraft_icao,$filters = array())
6706
	{
6707
		$filter_query = $this->getFilter($filters,true,true);
6708
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6709
		$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 
6710
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.aircraft_icao = :aircraft_icao 
6711
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
6712
			    ORDER BY airport_arrival_icao_count DESC";
6713
      
6714
		
6715
		$sth = $this->db->prepare($query);
6716
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6717
      
6718
		$airport_array = array();
6719
		$temp_array = array();
6720
        
6721
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6722
		{
6723
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6724
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6725
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6726
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6727
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6728
          
6729
			$airport_array[] = $temp_array;
6730
		}
6731
6732
		return $airport_array;
6733
	}
6734
	
6735
	
6736
	
6737
	/**
6738
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft icao
6739
	*
6740
	* @return Array the airport list
6741
	*
6742
	*/
6743
	public function countAllArrivalAirportCountriesByAircraft($aircraft_icao,$filters = array())
6744
	{
6745
		$filter_query = $this->getFilter($filters,true,true);
6746
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
6747
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6748
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_icao = :aircraft_icao
6749
                    GROUP BY spotter_output.arrival_airport_country
6750
					ORDER BY airport_arrival_country_count DESC";
6751
      
6752
		
6753
		$sth = $this->db->prepare($query);
6754
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
6755
      
6756
		$airport_array = array();
6757
		$temp_array = array();
6758
        
6759
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6760
		{
6761
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6762
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6763
          
6764
			$airport_array[] = $temp_array;
6765
		}
6766
6767
		return $airport_array;
6768
	}
6769
	
6770
	
6771
	/**
6772
	* Gets all arrival airports of the airplanes that have flown over based on an aircraft registration
6773
	*
6774
	* @return Array the airport list
6775
	*
6776
	*/
6777
	public function countAllArrivalAirportsByRegistration($registration,$filters = array())
6778
	{
6779
		$filter_query = $this->getFilter($filters,true,true);
6780
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6781
6782
		$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 
6783
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.registration = :registration 
6784
                    GROUP BY spotter_output.arrival_airport_icao
6785
					ORDER BY airport_arrival_icao_count DESC";
6786
      
6787
		
6788
		$sth = $this->db->prepare($query);
6789
		$sth->execute(array(':registration' => $registration));
6790
      
6791
		$airport_array = array();
6792
		$temp_array = array();
6793
        
6794
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6795
		{
6796
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6797
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6798
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6799
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6800
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6801
          
6802
			$airport_array[] = $temp_array;
6803
		}
6804
6805
		return $airport_array;
6806
	}
6807
	
6808
	
6809
	/**
6810
	* Gets all arrival airports by country of the airplanes that have flown over based on an aircraft registration
6811
	*
6812
	* @return Array the airport list
6813
	*
6814
	*/
6815
	public function countAllArrivalAirportCountriesByRegistration($registration,$filters = array())
6816
	{
6817
		$filter_query = $this->getFilter($filters,true,true);
6818
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
6819
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6820
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.registration = :registration 
6821
                    GROUP BY spotter_output.arrival_airport_country
6822
					ORDER BY airport_arrival_country_count DESC";
6823
      
6824
		
6825
		$sth = $this->db->prepare($query);
6826
		$sth->execute(array(':registration' => $registration));
6827
      
6828
		$airport_array = array();
6829
		$temp_array = array();
6830
        
6831
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6832
		{
6833
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6834
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6835
          
6836
			$airport_array[] = $temp_array;
6837
		}
6838
6839
		return $airport_array;
6840
	}
6841
	
6842
	
6843
	
6844
	/**
6845
	* Gets all arrival airports of the airplanes that have flown over based on an departure airport
6846
	*
6847
	* @return Array the airport list
6848
	*
6849
	*/
6850
	public function countAllArrivalAirportsByAirport($airport_icao,$filters = array())
6851
	{
6852
		$filter_query = $this->getFilter($filters,true,true);
6853
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6854
		$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 
6855
			    FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.departure_airport_icao = :airport_icao 
6856
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
6857
			    ORDER BY airport_arrival_icao_count DESC";
6858
      
6859
		
6860
		$sth = $this->db->prepare($query);
6861
		$sth->execute(array(':airport_icao' => $airport_icao));
6862
      
6863
		$airport_array = array();
6864
		$temp_array = array();
6865
        
6866
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6867
		{
6868
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6869
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6870
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6871
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6872
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6873
          
6874
			$airport_array[] = $temp_array;
6875
		}
6876
6877
		return $airport_array;
6878
	}
6879
	
6880
	
6881
	/**
6882
	* Gets all arrival airports by country of the airplanes that have flown over based on an airport icao
6883
	*
6884
	* @return Array the airport list
6885
	*
6886
	*/
6887
	public function countAllArrivalAirportCountriesByAirport($airport_icao,$filters = array())
6888
	{
6889
		$filter_query = $this->getFilter($filters,true,true);
6890
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
6891
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6892
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.departure_airport_icao = :airport_icao 
6893
                    GROUP BY spotter_output.arrival_airport_country
6894
					ORDER BY airport_arrival_country_count DESC";
6895
      
6896
		
6897
		$sth = $this->db->prepare($query);
6898
		$sth->execute(array(':airport_icao' => $airport_icao));
6899
      
6900
		$airport_array = array();
6901
		$temp_array = array();
6902
        
6903
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6904
		{
6905
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6906
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6907
          
6908
			$airport_array[] = $temp_array;
6909
		}
6910
6911
		return $airport_array;
6912
	}
6913
	
6914
	
6915
	/**
6916
	* Gets all arrival airports of the airplanes that have flown over based on a aircraft manufacturer
6917
	*
6918
	* @return Array the airport list
6919
	*
6920
	*/
6921
	public function countAllArrivalAirportsByManufacturer($aircraft_manufacturer,$filters = array())
6922
	{
6923
		$filter_query = $this->getFilter($filters,true,true);
6924
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6925
		$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 
6926
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6927
                    GROUP BY spotter_output.arrival_airport_icao
6928
					ORDER BY airport_arrival_icao_count DESC";
6929
      
6930
		
6931
		$sth = $this->db->prepare($query);
6932
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6933
      
6934
		$airport_array = array();
6935
		$temp_array = array();
6936
        
6937
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6938
		{
6939
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
6940
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
6941
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
6942
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
6943
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
6944
          
6945
			$airport_array[] = $temp_array;
6946
		}
6947
6948
		return $airport_array;
6949
	}
6950
	
6951
	
6952
	
6953
	/**
6954
	* Gets all arrival airports by country of the airplanes that have flown over based on a aircraft manufacturer
6955
	*
6956
	* @return Array the airport list
6957
	*
6958
	*/
6959
	public function countAllArrivalAirportCountriesByManufacturer($aircraft_manufacturer,$filters = array())
6960
	{
6961
		$filter_query = $this->getFilter($filters,true,true);
6962
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
6963
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
6964
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer 
6965
                    GROUP BY spotter_output.arrival_airport_country
6966
					ORDER BY airport_arrival_country_count DESC";
6967
      
6968
		
6969
		$sth = $this->db->prepare($query);
6970
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
6971
      
6972
		$airport_array = array();
6973
		$temp_array = array();
6974
        
6975
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
6976
		{
6977
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
6978
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
6979
          
6980
			$airport_array[] = $temp_array;
6981
		}
6982
6983
		return $airport_array;
6984
	}
6985
	
6986
	
6987
	
6988
	/**
6989
	* Gets all arrival airports of the airplanes that have flown over based on a date
6990
	*
6991
	* @return Array the airport list
6992
	*
6993
	*/
6994
	public function countAllArrivalAirportsByDate($date,$filters = array())
6995
	{
6996
		global $globalTimezone, $globalDBdriver;
6997
		$filter_query = $this->getFilter($filters,true,true);
6998
		$date = filter_var($date,FILTER_SANITIZE_STRING);
6999
		if ($globalTimezone != '') {
7000
			date_default_timezone_set($globalTimezone);
7001
			$datetime = new DateTime($date);
7002
			$offset = $datetime->format('P');
7003
		} else $offset = '+00:00';
7004
7005
		if ($globalDBdriver == 'mysql') {
7006
			$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 
7007
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
7008
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7009
					ORDER BY airport_arrival_icao_count DESC";
7010
		} else {
7011
			$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 
7012
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
7013
					GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7014
					ORDER BY airport_arrival_icao_count DESC";
7015
		}
7016
		
7017
		$sth = $this->db->prepare($query);
7018
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7019
      
7020
		$airport_array = array();
7021
		$temp_array = array();
7022
        
7023
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7024
		{
7025
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7026
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7027
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7028
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7029
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7030
          
7031
			$airport_array[] = $temp_array;
7032
		}
7033
		return $airport_array;
7034
	}
7035
	
7036
	
7037
	
7038
	/**
7039
	* Gets all arrival airports by country of the airplanes that have flown over based on a date
7040
	*
7041
	* @return Array the airport list
7042
	*
7043
	*/
7044
	public function countAllArrivalAirportCountriesByDate($date, $filters = array())
7045
	{
7046
		global $globalTimezone, $globalDBdriver;
7047
		$filter_query = $this->getFilter($filters,true,true);
7048
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7049
		if ($globalTimezone != '') {
7050
			date_default_timezone_set($globalTimezone);
7051
			$datetime = new DateTime($date);
7052
			$offset = $datetime->format('P');
7053
		} else $offset = '+00:00';
7054
7055
		if ($globalDBdriver == 'mysql') {
7056
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7057
					FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date 
7058
					GROUP BY spotter_output.arrival_airport_country
7059
					ORDER BY airport_arrival_country_count DESC";
7060
		} else {
7061
			$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7062
					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 
7063
					GROUP BY spotter_output.arrival_airport_country
7064
					ORDER BY airport_arrival_country_count DESC";
7065
		}
7066
		
7067
		$sth = $this->db->prepare($query);
7068
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7069
      
7070
		$airport_array = array();
7071
		$temp_array = array();
7072
        
7073
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7074
		{
7075
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7076
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7077
          
7078
			$airport_array[] = $temp_array;
7079
		}
7080
		return $airport_array;
7081
	}
7082
	
7083
	
7084
	
7085
	/**
7086
	* Gets all arrival airports of the airplanes that have flown over based on a ident/callsign
7087
	*
7088
	* @return Array the airport list
7089
	*
7090
	*/
7091
	public function countAllArrivalAirportsByIdent($ident,$filters = array())
7092
	{
7093
		$filter_query = $this->getFilter($filters,true,true);
7094
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7095
		$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 
7096
		    FROM spotter_output".$filter_query." WHERE spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.ident = :ident  
7097
                    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country
7098
		    ORDER BY airport_arrival_icao_count DESC";
7099
      
7100
		
7101
		$sth = $this->db->prepare($query);
7102
		$sth->execute(array(':ident' => $ident));
7103
      
7104
		$airport_array = array();
7105
		$temp_array = array();
7106
        
7107
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7108
		{
7109
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7110
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7111
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7112
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7113
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7114
          
7115
			$airport_array[] = $temp_array;
7116
		}
7117
7118
		return $airport_array;
7119
	}
7120
	
7121
	
7122
	/**
7123
	* Gets all arrival airports by country of the airplanes that have flown over based on a callsign/ident
7124
	*
7125
	* @return Array the airport list
7126
	*
7127
	*/
7128
	public function countAllArrivalAirportCountriesByIdent($ident, $filters = array())
7129
	{
7130
		$filter_query = $this->getFilter($filters,true,true);
7131
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7132
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7133
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.ident = :ident 
7134
                    GROUP BY spotter_output.arrival_airport_country
7135
					ORDER BY airport_arrival_country_count DESC";
7136
      
7137
		
7138
		$sth = $this->db->prepare($query);
7139
		$sth->execute(array(':ident' => $ident));
7140
      
7141
		$airport_array = array();
7142
		$temp_array = array();
7143
        
7144
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7145
		{
7146
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7147
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7148
          
7149
			$airport_array[] = $temp_array;
7150
		}
7151
7152
		return $airport_array;
7153
	}
7154
	
7155
	
7156
	
7157
	/**
7158
	* Gets all arrival airports of the airplanes that have flown over based on a country
7159
	*
7160
	* @return Array the airport list
7161
	*
7162
	*/
7163
	public function countAllArrivalAirportsByCountry($country,$filters = array())
7164
	{
7165
		$filter_query = $this->getFilter($filters,true,true);
7166
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7167
		$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 
7168
			    FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country  
7169
			    GROUP BY spotter_output.arrival_airport_icao, spotter_output.arrival_airport_name, spotter_output.arrival_airport_city, spotter_output.arrival_airport_country 
7170
			    ORDER BY airport_arrival_icao_count DESC";
7171
      
7172
		
7173
		$sth = $this->db->prepare($query);
7174
		$sth->execute(array(':country' => $country));
7175
      
7176
		$airport_array = array();
7177
		$temp_array = array();
7178
        
7179
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7180
		{
7181
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7182
			$temp_array['airport_arrival_icao_count'] = $row['airport_arrival_icao_count'];
7183
			$temp_array['airport_arrival_name'] = $row['arrival_airport_name'];
7184
			$temp_array['airport_arrival_city'] = $row['arrival_airport_city'];
7185
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7186
          
7187
			$airport_array[] = $temp_array;
7188
		}
7189
7190
		return $airport_array;
7191
	}
7192
	
7193
	
7194
	/**
7195
	* Gets all arrival airports by country of the airplanes that have flown over based on a country
7196
	*
7197
	* @return Array the airport list
7198
	*
7199
	*/
7200
	public function countAllArrivalAirportCountriesByCountry($country,$filters = array())
7201
	{
7202
		$filter_query = $this->getFilter($filters,true,true);
7203
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7204
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7205
			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 
7206
                    GROUP BY spotter_output.arrival_airport_country
7207
					ORDER BY airport_arrival_country_count DESC";
7208
      
7209
		
7210
		$sth = $this->db->prepare($query);
7211
		$sth->execute(array(':country' => $country));
7212
      
7213
		$airport_array = array();
7214
		$temp_array = array();
7215
        
7216
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7217
		{
7218
			$temp_array['arrival_airport_country'] = $row['arrival_airport_country'];
7219
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7220
          
7221
			$airport_array[] = $temp_array;
7222
		}
7223
7224
		return $airport_array;
7225
	}
7226
7227
7228
7229
	/**
7230
	* Counts all airport departure countries
7231
	*
7232
	* @return Array the airport departure list
7233
	*
7234
	*/
7235
	public function countAllDepartureCountries($filters = array())
7236
	{
7237
		$filter_query = $this->getFilter($filters,true,true);
7238
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country, COUNT(spotter_output.departure_airport_country) AS airport_departure_country_count 
7239
				FROM spotter_output".$filter_query." spotter_output.departure_airport_country <> '' AND spotter_output.departure_airport_icao <> 'NA'";
7240
		$query .= " GROUP BY spotter_output.departure_airport_country
7241
					ORDER BY airport_departure_country_count DESC
7242
					LIMIT 10 OFFSET 0";
7243
      
7244
		
7245
		$sth = $this->db->prepare($query);
7246
		$sth->execute();
7247
      
7248
		$airport_array = array();
7249
		$temp_array = array();
7250
        
7251
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7252
		{
7253
			$temp_array['airport_departure_country_count'] = $row['airport_departure_country_count'];
7254
			$temp_array['airport_departure_country'] = $row['departure_airport_country'];
7255
          
7256
			$airport_array[] = $temp_array;
7257
		}
7258
7259
		return $airport_array;
7260
	}
7261
	
7262
	
7263
	/**
7264
	* Counts all airport arrival countries
7265
	*
7266
	* @return Array the airport arrival list
7267
	*
7268
	*/
7269
	public function countAllArrivalCountries($limit = true,$filters = array())
7270
	{
7271
		$filter_query = $this->getFilter($filters,true,true);
7272
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country, COUNT(spotter_output.arrival_airport_country) AS airport_arrival_country_count 
7273
			FROM spotter_output".$filter_query." spotter_output.arrival_airport_country <> '' AND spotter_output.arrival_airport_icao <> 'NA'";
7274
		$query .= " GROUP BY spotter_output.arrival_airport_country
7275
					ORDER BY airport_arrival_country_count DESC";
7276
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7277
      
7278
		
7279
		$sth = $this->db->prepare($query);
7280
		$sth->execute();
7281
      
7282
		$airport_array = array();
7283
		$temp_array = array();
7284
        
7285
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7286
		{
7287
			$temp_array['airport_arrival_country_count'] = $row['airport_arrival_country_count'];
7288
			$temp_array['airport_arrival_country'] = $row['arrival_airport_country'];
7289
          
7290
			$airport_array[] = $temp_array;
7291
		}
7292
7293
		return $airport_array;
7294
	}
7295
7296
7297
7298
7299
7300
	/**
7301
	* Gets all route combinations
7302
	*
7303
	* @return Array the route list
7304
	*
7305
	*/
7306
	public function countAllRoutes($filters = array())
7307
	{
7308
		$filter_query = $this->getFilter($filters,true,true);
7309
		$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
7310
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.departure_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> 'NA'
7311
                    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
7312
                    ORDER BY route_count DESC
7313
		    LIMIT 10 OFFSET 0";
7314
      
7315
		
7316
		$sth = $this->db->prepare($query);
7317
		$sth->execute();
7318
      
7319
		$routes_array = array();
7320
		$temp_array = array();
7321
        
7322
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7323
		{
7324
			$temp_array['route_count'] = $row['route_count'];
7325
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7326
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7327
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7328
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7329
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7330
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7331
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7332
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7333
          
7334
			$routes_array[] = $temp_array;
7335
		}
7336
7337
		return $routes_array;
7338
	}
7339
	
7340
	
7341
	
7342
	
7343
	/**
7344
	* Gets all route combinations based on an aircraft
7345
	*
7346
	* @return Array the route list
7347
	*
7348
	*/
7349
	public function countAllRoutesByAircraft($aircraft_icao,$filters = array())
7350
	{
7351
		$filter_query = $this->getFilter($filters,true,true);
7352
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
7353
		$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
7354
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_icao = :aircraft_icao 
7355
			    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 
7356
			    ORDER BY route_count DESC";
7357
		
7358
		$sth = $this->db->prepare($query);
7359
		$sth->execute(array(':aircraft_icao' => $aircraft_icao));
7360
      
7361
		$routes_array = array();
7362
		$temp_array = array();
7363
        
7364
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7365
		{
7366
			$temp_array['route_count'] = $row['route_count'];
7367
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7368
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7369
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7370
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7371
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7372
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7373
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7374
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7375
          
7376
			$routes_array[] = $temp_array;
7377
		}
7378
7379
		return $routes_array;
7380
	}
7381
	
7382
	
7383
	/**
7384
	* Gets all route combinations based on an aircraft registration
7385
	*
7386
	* @return Array the route list
7387
	*
7388
	*/
7389
	public function countAllRoutesByRegistration($registration, $filters = array())
7390
	{
7391
		$filter_query = $this->getFilter($filters,true,true);
7392
		$registration = filter_var($registration, FILTER_SANITIZE_STRING);
7393
		$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
7394
			FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.registration = :registration 
7395
                    GROUP BY route
7396
                    ORDER BY route_count DESC";
7397
      
7398
		
7399
		$sth = $this->db->prepare($query);
7400
		$sth->execute(array(':registration' => $registration));
7401
      
7402
		$routes_array = array();
7403
		$temp_array = array();
7404
        
7405
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7406
		{
7407
			$temp_array['route_count'] = $row['route_count'];
7408
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7409
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7410
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7411
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7412
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7413
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7414
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7415
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7416
          
7417
			$routes_array[] = $temp_array;
7418
		}
7419
7420
		return $routes_array;
7421
	}
7422
	
7423
	
7424
	
7425
	/**
7426
	* Gets all route combinations based on an airline
7427
	*
7428
	* @return Array the route list
7429
	*
7430
	*/
7431
	public function countAllRoutesByAirline($airline_icao, $filters = array())
7432
	{
7433
		$filter_query = $this->getFilter($filters,true,true);
7434
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
7435
		$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
7436
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.airline_icao = :airline_icao 
7437
			    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 
7438
			    ORDER BY route_count DESC";
7439
      
7440
		
7441
		$sth = $this->db->prepare($query);
7442
		$sth->execute(array(':airline_icao' => $airline_icao));
7443
      
7444
		$routes_array = array();
7445
		$temp_array = array();
7446
        
7447
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7448
		{
7449
			$temp_array['route_count'] = $row['route_count'];
7450
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7451
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7452
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7453
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7454
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7455
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7456
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7457
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7458
          
7459
			$routes_array[] = $temp_array;
7460
		}
7461
7462
		return $routes_array;
7463
	}
7464
	
7465
	
7466
	
7467
	/**
7468
	* Gets all route combinations based on an airport
7469
	*
7470
	* @return Array the route list
7471
	*
7472
	*/
7473
	public function countAllRoutesByAirport($airport_icao, $filters = array())
7474
	{
7475
		$filter_query = $this->getFilter($filters,true,true);
7476
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
7477
		$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
7478
			    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
7479
			    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 
7480
			    ORDER BY route_count DESC";
7481
		
7482
		$sth = $this->db->prepare($query);
7483
		$sth->execute(array(':airport_icao' => $airport_icao));
7484
      
7485
		$routes_array = array();
7486
		$temp_array = array();
7487
        
7488
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7489
		{
7490
			$temp_array['route_count'] = $row['route_count'];
7491
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7492
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7493
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7494
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7495
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7496
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7497
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7498
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7499
          
7500
			$routes_array[] = $temp_array;
7501
		}
7502
7503
		return $routes_array;
7504
	}
7505
	
7506
	
7507
	
7508
	/**
7509
	* Gets all route combinations based on an country
7510
	*
7511
	* @return Array the route list
7512
	*
7513
	*/
7514
	public function countAllRoutesByCountry($country, $filters = array())
7515
	{
7516
		$filter_query = $this->getFilter($filters,true,true);
7517
		$country = filter_var($country,FILTER_SANITIZE_STRING);
7518
		$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
7519
			    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 
7520
			    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 
7521
			    ORDER BY route_count DESC";
7522
		
7523
		$sth = $this->db->prepare($query);
7524
		$sth->execute(array(':country' => $country));
7525
      
7526
		$routes_array = array();
7527
		$temp_array = array();
7528
        
7529
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7530
		{
7531
			$temp_array['route_count'] = $row['route_count'];
7532
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7533
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7534
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7535
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7536
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7537
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7538
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7539
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7540
          
7541
			$routes_array[] = $temp_array;
7542
		}
7543
7544
		return $routes_array;
7545
	}
7546
7547
7548
	/**
7549
	* Gets all route combinations based on an date
7550
	*
7551
	* @return Array the route list
7552
	*
7553
	*/
7554
	public function countAllRoutesByDate($date, $filters = array())
7555
	{
7556
		global $globalTimezone, $globalDBdriver;
7557
		$filter_query = $this->getFilter($filters,true,true);
7558
		$date = filter_var($date,FILTER_SANITIZE_STRING);
7559
		if ($globalTimezone != '') {
7560
			date_default_timezone_set($globalTimezone);
7561
			$datetime = new DateTime($date);
7562
			$offset = $datetime->format('P');
7563
		} else $offset = '+00:00';
7564
		
7565
		if ($globalDBdriver == 'mysql') {
7566
			$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
7567
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date  
7568
				    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
7569
				    ORDER BY route_count DESC";
7570
		} else {
7571
			$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
7572
				    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = :date  
7573
				    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
7574
				    ORDER BY route_count DESC";
7575
		}
7576
		
7577
		$sth = $this->db->prepare($query);
7578
		$sth->execute(array(':date' => $date, ':offset' => $offset));
7579
      
7580
		$routes_array = array();
7581
		$temp_array = array();
7582
        
7583
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7584
		{
7585
			$temp_array['route_count'] = $row['route_count'];
7586
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7587
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7588
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7589
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7590
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7591
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7592
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7593
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7594
          
7595
			$routes_array[] = $temp_array;
7596
		}
7597
7598
		return $routes_array;
7599
	}
7600
	
7601
	
7602
	/**
7603
	* Gets all route combinations based on an ident/callsign
7604
	*
7605
	* @return Array the route list
7606
	*
7607
	*/
7608
	public function countAllRoutesByIdent($ident, $filters = array())
7609
	{
7610
		$filter_query = $this->getFilter($filters,true,true);
7611
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
7612
		$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
7613
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.ident = :ident   
7614
                    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
7615
                    ORDER BY route_count DESC";
7616
      
7617
		
7618
		$sth = $this->db->prepare($query);
7619
		$sth->execute(array(':ident' => $ident));
7620
      
7621
		$routes_array = array();
7622
		$temp_array = array();
7623
        
7624
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7625
		{
7626
			$temp_array['route_count'] = $row['route_count'];
7627
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7628
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7629
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7630
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7631
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7632
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7633
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7634
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7635
          
7636
			$routes_array[] = $temp_array;
7637
		}
7638
7639
		return $routes_array;
7640
	}
7641
	
7642
	
7643
	/**
7644
	* Gets all route combinations based on an manufacturer
7645
	*
7646
	* @return Array the route list
7647
	*
7648
	*/
7649
	public function countAllRoutesByManufacturer($aircraft_manufacturer, $filters = array())
7650
	{
7651
		$filter_query = $this->getFilter($filters,true,true);
7652
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
7653
		$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
7654
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer   
7655
                    GROUP BY route
7656
                    ORDER BY route_count DESC";
7657
      
7658
		
7659
		$sth = $this->db->prepare($query);
7660
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer));
7661
      
7662
		$routes_array = array();
7663
		$temp_array = array();
7664
        
7665
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7666
		{
7667
			$temp_array['route_count'] = $row['route_count'];
7668
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7669
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7670
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7671
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7672
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7673
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7674
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7675
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7676
          
7677
			$routes_array[] = $temp_array;
7678
		}
7679
7680
		return $routes_array;
7681
	}
7682
7683
	
7684
	
7685
	/**
7686
	* Gets all route combinations with waypoints
7687
	*
7688
	* @return Array the route list
7689
	*
7690
	*/
7691
	public function countAllRoutesWithWaypoints($filters = array())
7692
	{
7693
		$filter_query = $this->getFilter($filters,true,true);
7694
		$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
7695
		    FROM spotter_output".$filter_query." spotter_output.ident <> '' AND spotter_output.waypoints <> '' 
7696
                    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
7697
                    ORDER BY route_count DESC
7698
		    LIMIT 10 OFFSET 0";
7699
      
7700
		
7701
		$sth = $this->db->prepare($query);
7702
		$sth->execute();
7703
      
7704
		$routes_array = array();
7705
		$temp_array = array();
7706
        
7707
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7708
		{
7709
			$temp_array['spotter_id'] = $row['spotter_id'];
7710
			$temp_array['route_count'] = $row['route_count'];
7711
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
7712
			$temp_array['airport_departure_name'] = $row['airport_departure_name'];
7713
			$temp_array['airport_departure_city'] = $row['airport_departure_city'];
7714
			$temp_array['airport_departure_country'] = $row['airport_departure_country'];
7715
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
7716
			$temp_array['airport_arrival_name'] = $row['airport_arrival_name'];
7717
			$temp_array['airport_arrival_city'] = $row['airport_arrival_city'];
7718
			$temp_array['airport_arrival_country'] = $row['airport_arrival_country'];
7719
          
7720
			$routes_array[] = $temp_array;
7721
		}
7722
7723
		return $routes_array;
7724
	}
7725
	
7726
	/**
7727
	* Gets all callsigns that have flown over
7728
	*
7729
	* @return Array the callsign list
7730
	*
7731
	*/
7732
	public function countAllCallsigns($limit = true, $olderthanmonths = 0, $sincedate = '',$filters = array())
7733
	{
7734
		global $globalDBdriver;
7735
		$filter_query = $this->getFilter($filters,true,true);
7736
		$query  = "SELECT DISTINCT spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name, spotter_output.airline_icao  
7737
                    FROM spotter_output".$filter_query." spotter_output.ident <> '' ";
7738
		 if ($olderthanmonths > 0) {
7739
			if ($globalDBdriver == 'mysql') $query .= ' AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH)';
7740
			else $query .= " AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS'";
7741
		}
7742
		if ($sincedate != '') {
7743
			if ($globalDBdriver == 'mysql') $query .= " AND spotter_output.date > '".$sincedate."'";
7744
			else $query .= " AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP)";
7745
		}
7746
		$query .= " GROUP BY spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7747
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7748
      		
7749
		$sth = $this->db->prepare($query);
7750
		$sth->execute();
7751
      
7752
		$callsign_array = array();
7753
		$temp_array = array();
7754
        
7755
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7756
		{
7757
			$temp_array['callsign_icao'] = $row['ident'];
7758
			$temp_array['airline_name'] = $row['airline_name'];
7759
			$temp_array['airline_icao'] = $row['airline_icao'];
7760
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7761
          
7762
			$callsign_array[] = $temp_array;
7763
		}
7764
7765
		return $callsign_array;
7766
	}
7767
7768
	/**
7769
	* Gets all callsigns that have flown over
7770
	*
7771
	* @return Array the callsign list
7772
	*
7773
	*/
7774
	public function countAllCallsignsByAirlines($limit = true, $olderthanmonths = 0, $sincedate = '', $filters = array())
7775
	{
7776
		global $globalDBdriver;
7777
		$filter_query = $this->getFilter($filters,true,true);
7778
		$query  = "SELECT DISTINCT spotter_output.airline_icao, spotter_output.ident, COUNT(spotter_output.ident) AS callsign_icao_count, spotter_output.airline_name  
7779
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''  AND spotter_output.airline_icao <> '' ";
7780
		 if ($olderthanmonths > 0) {
7781
			if ($globalDBdriver == 'mysql') $query .= 'AND date < DATE_SUB(UTC_TIMESTAMP(),INTERVAL '.$olderthanmonths.' MONTH) ';
7782
			else $query .= "AND spotter_output.date < CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - INTERVAL '".$olderthanmonths." MONTHS' ";
7783
		}
7784
		if ($sincedate != '') {
7785
			if ($globalDBdriver == 'mysql') $query .= "AND spotter_output.date > '".$sincedate."' ";
7786
			else $query .= "AND spotter_output.date > CAST('".$sincedate."' AS TIMESTAMP) ";
7787
		}
7788
		$query .= "GROUP BY spotter_output.airline_icao, spotter_output.ident, spotter_output.airline_name, spotter_output.airline_icao ORDER BY callsign_icao_count DESC";
7789
		if ($limit) $query .= " LIMIT 10 OFFSET 0";
7790
      		
7791
		$sth = $this->db->prepare($query);
7792
		$sth->execute();
7793
      
7794
		$callsign_array = array();
7795
		$temp_array = array();
7796
        
7797
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7798
		{
7799
			$temp_array['callsign_icao'] = $row['ident'];
7800
			$temp_array['airline_name'] = $row['airline_name'];
7801
			$temp_array['airline_icao'] = $row['airline_icao'];
7802
			$temp_array['callsign_icao_count'] = $row['callsign_icao_count'];
7803
          
7804
			$callsign_array[] = $temp_array;
7805
		}
7806
7807
		return $callsign_array;
7808
	}
7809
7810
7811
7812
7813
	/**
7814
	* Counts all dates
7815
	*
7816
	* @return Array the date list
7817
	*
7818
	*/
7819
	public function countAllDates($filters = array())
7820
	{
7821
		global $globalTimezone, $globalDBdriver;
7822
		if ($globalTimezone != '') {
7823
			date_default_timezone_set($globalTimezone);
7824
			$datetime = new DateTime();
7825
			$offset = $datetime->format('P');
7826
		} else $offset = '+00:00';
7827
7828
		if ($globalDBdriver == 'mysql') {
7829
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7830
								FROM spotter_output";
7831
			$query .= $this->getFilter($filters);
7832
			$query .= " GROUP BY date_name 
7833
								ORDER BY date_count DESC
7834
								LIMIT 10 OFFSET 0";
7835
		} else {
7836
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7837
								FROM spotter_output";
7838
			$query .= $this->getFilter($filters);
7839
			$query .= " GROUP BY date_name 
7840
								ORDER BY date_count DESC
7841
								LIMIT 10 OFFSET 0";
7842
		}
7843
      
7844
		
7845
		$sth = $this->db->prepare($query);
7846
		$sth->execute(array(':offset' => $offset));
7847
      
7848
		$date_array = array();
7849
		$temp_array = array();
7850
        
7851
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7852
		{
7853
			$temp_array['date_name'] = $row['date_name'];
7854
			$temp_array['date_count'] = $row['date_count'];
7855
7856
			$date_array[] = $temp_array;
7857
		}
7858
7859
		return $date_array;
7860
	}
7861
	
7862
	/**
7863
	* Counts all dates
7864
	*
7865
	* @return Array the date list
7866
	*
7867
	*/
7868
	public function countAllDatesByAirlines($filters = array())
7869
	{
7870
		global $globalTimezone, $globalDBdriver;
7871
		if ($globalTimezone != '') {
7872
			date_default_timezone_set($globalTimezone);
7873
			$datetime = new DateTime();
7874
			$offset = $datetime->format('P');
7875
		} else $offset = '+00:00';
7876
		$filter_query = $this->getFilter($filters,true,true);
7877
		if ($globalDBdriver == 'mysql') {
7878
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7879
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
7880
								GROUP BY spotter_output.airline_icao, date_name 
7881
								ORDER BY date_count DESC
7882
								LIMIT 10 OFFSET 0";
7883
		} else {
7884
			$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
7885
								FROM spotter_output 
7886
								WHERE spotter_output.airline_icao <> '' 
7887
								GROUP BY spotter_output.airline_icao, date_name 
7888
								ORDER BY date_count DESC
7889
								LIMIT 10 OFFSET 0";
7890
		}
7891
      
7892
		
7893
		$sth = $this->db->prepare($query);
7894
		$sth->execute(array(':offset' => $offset));
7895
      
7896
		$date_array = array();
7897
		$temp_array = array();
7898
        
7899
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7900
		{
7901
			$temp_array['date_name'] = $row['date_name'];
7902
			$temp_array['date_count'] = $row['date_count'];
7903
			$temp_array['airline_icao'] = $row['airline_icao'];
7904
7905
			$date_array[] = $temp_array;
7906
		}
7907
7908
		return $date_array;
7909
	}	
7910
	
7911
	/**
7912
	* Counts all dates during the last 7 days
7913
	*
7914
	* @return Array the date list
7915
	*
7916
	*/
7917
	public function countAllDatesLast7Days($filters = array())
7918
	{
7919
		global $globalTimezone, $globalDBdriver;
7920
		if ($globalTimezone != '') {
7921
			date_default_timezone_set($globalTimezone);
7922
			$datetime = new DateTime();
7923
			$offset = $datetime->format('P');
7924
		} else $offset = '+00:00';
7925
		$filter_query = $this->getFilter($filters,true,true);
7926
		if ($globalDBdriver == 'mysql') {
7927
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7928
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY)";
7929
			$query .= " GROUP BY date_name 
7930
								ORDER BY spotter_output.date ASC";
7931
			$query_data = array(':offset' => $offset);
7932
		} else {
7933
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7934
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '7 DAYS'";
7935
			$query .= " GROUP BY date_name 
7936
								ORDER BY date_name ASC";
7937
			$query_data = array(':offset' => $offset);
7938
    		}
7939
		
7940
		$sth = $this->db->prepare($query);
7941
		$sth->execute($query_data);
7942
      
7943
		$date_array = array();
7944
		$temp_array = array();
7945
        
7946
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7947
		{
7948
			$temp_array['date_name'] = $row['date_name'];
7949
			$temp_array['date_count'] = $row['date_count'];
7950
          
7951
			$date_array[] = $temp_array;
7952
		}
7953
7954
		return $date_array;
7955
	}
7956
7957
	/**
7958
	* Counts all dates during the last month
7959
	*
7960
	* @return Array the date list
7961
	*
7962
	*/
7963
	public function countAllDatesLastMonth($filters = array())
7964
	{
7965
		global $globalTimezone, $globalDBdriver;
7966
		if ($globalTimezone != '') {
7967
			date_default_timezone_set($globalTimezone);
7968
			$datetime = new DateTime();
7969
			$offset = $datetime->format('P');
7970
		} else $offset = '+00:00';
7971
		$filter_query = $this->getFilter($filters,true,true);
7972
		if ($globalDBdriver == 'mysql') {
7973
			$query  = "SELECT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
7974
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)";
7975
			$query .= " GROUP BY date_name 
7976
								ORDER BY spotter_output.date ASC";
7977
			$query_data = array(':offset' => $offset);
7978
		} else {
7979
			$query  = "SELECT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') AS date_name, count(*) as date_count
7980
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'";
7981
			$query .= " GROUP BY date_name 
7982
								ORDER BY date_name ASC";
7983
			$query_data = array(':offset' => $offset);
7984
    		}
7985
		
7986
		$sth = $this->db->prepare($query);
7987
		$sth->execute($query_data);
7988
      
7989
		$date_array = array();
7990
		$temp_array = array();
7991
        
7992
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
7993
		{
7994
			$temp_array['date_name'] = $row['date_name'];
7995
			$temp_array['date_count'] = $row['date_count'];
7996
          
7997
			$date_array[] = $temp_array;
7998
		}
7999
8000
		return $date_array;
8001
	}
8002
8003
8004
	/**
8005
	* Counts all dates during the last month
8006
	*
8007
	* @return Array the date list
8008
	*
8009
	*/
8010
	public function countAllDatesLastMonthByAirlines($filters = array())
8011
	{
8012
		global $globalTimezone, $globalDBdriver;
8013
		$filter_query = $this->getFilter($filters,true,true);
8014
		if ($globalTimezone != '') {
8015
			date_default_timezone_set($globalTimezone);
8016
			$datetime = new DateTime();
8017
			$offset = $datetime->format('P');
8018
		} else $offset = '+00:00';
8019
		
8020
		if ($globalDBdriver == 'mysql') {
8021
			$query  = "SELECT spotter_output.airline_icao, DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS date_name, count(*) as date_count
8022
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 MONTH)
8023
								GROUP BY spotter_output.airline_icao, date_name 
8024
								ORDER BY spotter_output.date ASC";
8025
			$query_data = array(':offset' => $offset);
8026
		} else {
8027
			$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
8028
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 MONTHS'
8029
								GROUP BY spotter_output.airline_icao, date_name 
8030
								ORDER BY date_name ASC";
8031
			$query_data = array(':offset' => $offset);
8032
    		}
8033
		
8034
		$sth = $this->db->prepare($query);
8035
		$sth->execute($query_data);
8036
      
8037
		$date_array = array();
8038
		$temp_array = array();
8039
        
8040
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8041
		{
8042
			$temp_array['date_name'] = $row['date_name'];
8043
			$temp_array['date_count'] = $row['date_count'];
8044
			$temp_array['airline_icao'] = $row['airline_icao'];
8045
          
8046
			$date_array[] = $temp_array;
8047
		}
8048
8049
		return $date_array;
8050
	}
8051
	
8052
8053
	/**
8054
	* Counts all month
8055
	*
8056
	* @return Array the month list
8057
	*
8058
	*/
8059
	public function countAllMonths($filters = array())
8060
	{
8061
		global $globalTimezone, $globalDBdriver;
8062
		if ($globalTimezone != '') {
8063
			date_default_timezone_set($globalTimezone);
8064
			$datetime = new DateTime();
8065
			$offset = $datetime->format('P');
8066
		} else $offset = '+00:00';
8067
8068
		if ($globalDBdriver == 'mysql') {
8069
			$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
8070
								FROM spotter_output";
8071
			$query .= $this->getFilter($filters);
8072
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
8073
		} else {
8074
			$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
8075
								FROM spotter_output";
8076
			$query .= $this->getFilter($filters);
8077
			$query .= " GROUP BY year_name, month_name ORDER BY date_count DESC";
8078
		}
8079
      
8080
		
8081
		$sth = $this->db->prepare($query);
8082
		$sth->execute(array(':offset' => $offset));
8083
      
8084
		$date_array = array();
8085
		$temp_array = array();
8086
        
8087
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8088
		{
8089
			$temp_array['month_name'] = $row['month_name'];
8090
			$temp_array['year_name'] = $row['year_name'];
8091
			$temp_array['date_count'] = $row['date_count'];
8092
8093
			$date_array[] = $temp_array;
8094
		}
8095
8096
		return $date_array;
8097
	}
8098
8099
	/**
8100
	* Counts all month
8101
	*
8102
	* @return Array the month list
8103
	*
8104
	*/
8105
	public function countAllMonthsByAirlines($filters = array())
8106
	{
8107
		global $globalTimezone, $globalDBdriver;
8108
		$filter_query = $this->getFilter($filters,true,true);
8109
		if ($globalTimezone != '') {
8110
			date_default_timezone_set($globalTimezone);
8111
			$datetime = new DateTime();
8112
			$offset = $datetime->format('P');
8113
		} else $offset = '+00:00';
8114
8115
		if ($globalDBdriver == 'mysql') {
8116
			$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
8117
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8118
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8119
								ORDER BY date_count DESC";
8120
		} else {
8121
			$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
8122
								FROM spotter_output 
8123
								WHERE spotter_output.airline_icao <> '' 
8124
								GROUP BY spotter_output.airline_icao, year_name, month_name 
8125
								ORDER BY date_count DESC";
8126
		}
8127
      
8128
		
8129
		$sth = $this->db->prepare($query);
8130
		$sth->execute(array(':offset' => $offset));
8131
      
8132
		$date_array = array();
8133
		$temp_array = array();
8134
        
8135
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8136
		{
8137
			$temp_array['month_name'] = $row['month_name'];
8138
			$temp_array['year_name'] = $row['year_name'];
8139
			$temp_array['date_count'] = $row['date_count'];
8140
			$temp_array['airline_icao'] = $row['airline_icao'];
8141
8142
			$date_array[] = $temp_array;
8143
		}
8144
8145
		return $date_array;
8146
	}
8147
8148
	/**
8149
	* Counts all military month
8150
	*
8151
	* @return Array the month list
8152
	*
8153
	*/
8154
	public function countAllMilitaryMonths($filters = array())
8155
	{
8156
		global $globalTimezone, $globalDBdriver;
8157
		if ($globalTimezone != '') {
8158
			date_default_timezone_set($globalTimezone);
8159
			$datetime = new DateTime();
8160
			$offset = $datetime->format('P');
8161
		} else $offset = '+00:00';
8162
		$filter_query = $this->getFilter($filters,true,true);
8163
		if ($globalDBdriver == 'mysql') {
8164
			$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
8165
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
8166
								GROUP BY year_name, month_name 
8167
								ORDER BY date_count DESC";
8168
		} else {
8169
			$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
8170
								FROM spotter_output".$filter_query." spotter_output.airline_type = 'military'
8171
								GROUP BY year_name, month_name 
8172
								ORDER BY date_count DESC";
8173
		}
8174
		
8175
		$sth = $this->db->prepare($query);
8176
		$sth->execute(array(':offset' => $offset));
8177
      
8178
		$date_array = array();
8179
		$temp_array = array();
8180
        
8181
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8182
		{
8183
			$temp_array['month_name'] = $row['month_name'];
8184
			$temp_array['year_name'] = $row['year_name'];
8185
			$temp_array['date_count'] = $row['date_count'];
8186
8187
			$date_array[] = $temp_array;
8188
		}
8189
8190
		return $date_array;
8191
	}
8192
	
8193
	/**
8194
	* Counts all month owners
8195
	*
8196
	* @return Array the month list
8197
	*
8198
	*/
8199
	public function countAllMonthsOwners($filters = array())
8200
	{
8201
		global $globalTimezone, $globalDBdriver;
8202
		if ($globalTimezone != '') {
8203
			date_default_timezone_set($globalTimezone);
8204
			$datetime = new DateTime();
8205
			$offset = $datetime->format('P');
8206
		} else $offset = '+00:00';
8207
		$filter_query = $this->getFilter($filters,true,true);
8208
8209
		if ($globalDBdriver == 'mysql') {
8210
			$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
8211
								FROM spotter_output".$filter_query." owner_name <> ''
8212
								GROUP BY year_name, month_name
8213
								ORDER BY date_count DESC";
8214
		} else {
8215
			$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
8216
								FROM spotter_output".$filter_query." owner_name <> ''
8217
								GROUP BY year_name, month_name
8218
								ORDER BY date_count DESC";
8219
		}
8220
		
8221
		$sth = $this->db->prepare($query);
8222
		$sth->execute(array(':offset' => $offset));
8223
      
8224
		$date_array = array();
8225
		$temp_array = array();
8226
        
8227
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8228
		{
8229
			$temp_array['month_name'] = $row['month_name'];
8230
			$temp_array['year_name'] = $row['year_name'];
8231
			$temp_array['date_count'] = $row['date_count'];
8232
8233
			$date_array[] = $temp_array;
8234
		}
8235
8236
		return $date_array;
8237
	}
8238
	
8239
	/**
8240
	* Counts all month owners
8241
	*
8242
	* @return Array the month list
8243
	*
8244
	*/
8245
	public function countAllMonthsOwnersByAirlines($filters = array())
8246
	{
8247
		global $globalTimezone, $globalDBdriver;
8248
		$filter_query = $this->getFilter($filters,true,true);
8249
		if ($globalTimezone != '') {
8250
			date_default_timezone_set($globalTimezone);
8251
			$datetime = new DateTime();
8252
			$offset = $datetime->format('P');
8253
		} else $offset = '+00:00';
8254
8255
		if ($globalDBdriver == 'mysql') {
8256
			$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
8257
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8258
								GROUP BY spotter_output.airline_icao, year_name, month_name
8259
								ORDER BY date_count DESC";
8260
		} else {
8261
			$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
8262
								FROM spotter_output".$filter_query." owner_name <> '' AND spotter_output.airline_icao <> '' 
8263
								GROUP BY spotter_output.airline_icao, year_name, month_name
8264
								ORDER BY date_count DESC";
8265
		}
8266
		
8267
		$sth = $this->db->prepare($query);
8268
		$sth->execute(array(':offset' => $offset));
8269
      
8270
		$date_array = array();
8271
		$temp_array = array();
8272
        
8273
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8274
		{
8275
			$temp_array['month_name'] = $row['month_name'];
8276
			$temp_array['year_name'] = $row['year_name'];
8277
			$temp_array['date_count'] = $row['date_count'];
8278
			$temp_array['airline_icao'] = $row['airline_icao'];
8279
8280
			$date_array[] = $temp_array;
8281
		}
8282
8283
		return $date_array;
8284
	}
8285
8286
	/**
8287
	* Counts all month pilot
8288
	*
8289
	* @return Array the month list
8290
	*
8291
	*/
8292
	public function countAllMonthsPilots($filters = array())
8293
	{
8294
		global $globalTimezone, $globalDBdriver;
8295
		if ($globalTimezone != '') {
8296
			date_default_timezone_set($globalTimezone);
8297
			$datetime = new DateTime();
8298
			$offset = $datetime->format('P');
8299
		} else $offset = '+00:00';
8300
		$filter_query = $this->getFilter($filters,true,true);
8301
8302
		if ($globalDBdriver == 'mysql') {
8303
			$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
8304
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8305
								GROUP BY year_name, month_name
8306
								ORDER BY date_count DESC";
8307
		} else {
8308
			$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
8309
								FROM spotter_output".$filter_query." pilot_id <> '' AND pilot_id IS NOT NULL
8310
								GROUP BY year_name, month_name
8311
								ORDER BY date_count DESC";
8312
		}
8313
		
8314
		$sth = $this->db->prepare($query);
8315
		$sth->execute(array(':offset' => $offset));
8316
      
8317
		$date_array = array();
8318
		$temp_array = array();
8319
        
8320
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8321
		{
8322
			$temp_array['month_name'] = $row['month_name'];
8323
			$temp_array['year_name'] = $row['year_name'];
8324
			$temp_array['date_count'] = $row['date_count'];
8325
8326
			$date_array[] = $temp_array;
8327
		}
8328
8329
		return $date_array;
8330
	}
8331
	
8332
	/**
8333
	* Counts all month pilot
8334
	*
8335
	* @return Array the month list
8336
	*
8337
	*/
8338
	public function countAllMonthsPilotsByAirlines($filters = array())
8339
	{
8340
		global $globalTimezone, $globalDBdriver;
8341
		$filter_query = $this->getFilter($filters,true,true);
8342
		if ($globalTimezone != '') {
8343
			date_default_timezone_set($globalTimezone);
8344
			$datetime = new DateTime();
8345
			$offset = $datetime->format('P');
8346
		} else $offset = '+00:00';
8347
8348
		if ($globalDBdriver == 'mysql') {
8349
			$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
8350
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8351
								GROUP BY spotter_output.airline_icao,year_name, month_name
8352
								ORDER BY date_count DESC";
8353
		} else {
8354
			$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
8355
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' AND pilot_id <> '' AND pilot_id IS NOT NULL
8356
								GROUP BY spotter_output.airline_icao, year_name, month_name
8357
								ORDER BY date_count DESC";
8358
		}
8359
		
8360
		$sth = $this->db->prepare($query);
8361
		$sth->execute(array(':offset' => $offset));
8362
      
8363
		$date_array = array();
8364
		$temp_array = array();
8365
        
8366
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8367
		{
8368
			$temp_array['month_name'] = $row['month_name'];
8369
			$temp_array['year_name'] = $row['year_name'];
8370
			$temp_array['date_count'] = $row['date_count'];
8371
			$temp_array['airline_icao'] = $row['airline_icao'];
8372
8373
			$date_array[] = $temp_array;
8374
		}
8375
8376
		return $date_array;
8377
	}
8378
8379
	/**
8380
	* Counts all month airline
8381
	*
8382
	* @return Array the month list
8383
	*
8384
	*/
8385
	public function countAllMonthsAirlines($filters = array())
8386
	{
8387
		global $globalTimezone, $globalDBdriver;
8388
		$filter_query = $this->getFilter($filters,true,true);
8389
		if ($globalTimezone != '') {
8390
			date_default_timezone_set($globalTimezone);
8391
			$datetime = new DateTime();
8392
			$offset = $datetime->format('P');
8393
		} else $offset = '+00:00';
8394
8395
		if ($globalDBdriver == 'mysql') {
8396
			$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
8397
								FROM spotter_output".$filter_query." airline_icao <> '' 
8398
								GROUP BY year_name, month_name
8399
								ORDER BY date_count DESC";
8400
		} else {
8401
			$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
8402
								FROM spotter_output".$filter_query." airline_icao <> '' 
8403
								GROUP BY year_name, month_name
8404
								ORDER BY date_count DESC";
8405
		}
8406
		
8407
		$sth = $this->db->prepare($query);
8408
		$sth->execute(array(':offset' => $offset));
8409
      
8410
		$date_array = array();
8411
		$temp_array = array();
8412
        
8413
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8414
		{
8415
			$temp_array['month_name'] = $row['month_name'];
8416
			$temp_array['year_name'] = $row['year_name'];
8417
			$temp_array['date_count'] = $row['date_count'];
8418
8419
			$date_array[] = $temp_array;
8420
		}
8421
8422
		return $date_array;
8423
	}
8424
	
8425
	/**
8426
	* Counts all month aircraft
8427
	*
8428
	* @return Array the month list
8429
	*
8430
	*/
8431
	public function countAllMonthsAircrafts($filters = array())
8432
	{
8433
		global $globalTimezone, $globalDBdriver;
8434
		if ($globalTimezone != '') {
8435
			date_default_timezone_set($globalTimezone);
8436
			$datetime = new DateTime();
8437
			$offset = $datetime->format('P');
8438
		} else $offset = '+00:00';
8439
		$filter_query = $this->getFilter($filters,true,true);
8440
8441
		if ($globalDBdriver == 'mysql') {
8442
			$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
8443
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
8444
								GROUP BY year_name, month_name
8445
								ORDER BY date_count DESC";
8446
		} else {
8447
			$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
8448
								FROM spotter_output".$filter_query." aircraft_icao <> '' 
8449
								GROUP BY year_name, month_name
8450
								ORDER BY date_count DESC";
8451
		}
8452
		
8453
		$sth = $this->db->prepare($query);
8454
		$sth->execute(array(':offset' => $offset));
8455
      
8456
		$date_array = array();
8457
		$temp_array = array();
8458
        
8459
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8460
		{
8461
			$temp_array['month_name'] = $row['month_name'];
8462
			$temp_array['year_name'] = $row['year_name'];
8463
			$temp_array['date_count'] = $row['date_count'];
8464
8465
			$date_array[] = $temp_array;
8466
		}
8467
8468
		return $date_array;
8469
	}
8470
	
8471
8472
	/**
8473
	* Counts all month aircraft
8474
	*
8475
	* @return Array the month list
8476
	*
8477
	*/
8478
	public function countAllMonthsAircraftsByAirlines($filters = array())
8479
	{
8480
		global $globalTimezone, $globalDBdriver;
8481
		$filter_query = $this->getFilter($filters,true,true);
8482
		if ($globalTimezone != '') {
8483
			date_default_timezone_set($globalTimezone);
8484
			$datetime = new DateTime();
8485
			$offset = $datetime->format('P');
8486
		} else $offset = '+00:00';
8487
8488
		if ($globalDBdriver == 'mysql') {
8489
			$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
8490
								FROM spotter_output".$filter_query." aircraft_icao <> ''  AND spotter_output.airline_icao <> '' 
8491
								GROUP BY spotter_output.airline_icao, year_name, month_name
8492
								ORDER BY date_count DESC";
8493
		} else {
8494
			$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
8495
								FROM spotter_output".$filter_query." aircraft_icao <> '' AND spotter_output.airline_icao <> '' 
8496
								GROUP BY spotter_output.airline_icao, year_name, month_name
8497
								ORDER BY date_count DESC";
8498
		}
8499
		
8500
		$sth = $this->db->prepare($query);
8501
		$sth->execute(array(':offset' => $offset));
8502
      
8503
		$date_array = array();
8504
		$temp_array = array();
8505
        
8506
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8507
		{
8508
			$temp_array['month_name'] = $row['month_name'];
8509
			$temp_array['year_name'] = $row['year_name'];
8510
			$temp_array['date_count'] = $row['date_count'];
8511
			$temp_array['airline_icao'] = $row['airline_icao'];
8512
8513
			$date_array[] = $temp_array;
8514
		}
8515
8516
		return $date_array;
8517
	}
8518
8519
	/**
8520
	* Counts all month real arrival
8521
	*
8522
	* @return Array the month list
8523
	*
8524
	*/
8525
	public function countAllMonthsRealArrivals($filters = array())
8526
	{
8527
		global $globalTimezone, $globalDBdriver;
8528
		if ($globalTimezone != '') {
8529
			date_default_timezone_set($globalTimezone);
8530
			$datetime = new DateTime();
8531
			$offset = $datetime->format('P');
8532
		} else $offset = '+00:00';
8533
		$filter_query = $this->getFilter($filters,true,true);
8534
8535
		if ($globalDBdriver == 'mysql') {
8536
			$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
8537
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
8538
								GROUP BY year_name, month_name
8539
								ORDER BY date_count DESC";
8540
		} else {
8541
			$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
8542
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' 
8543
								GROUP BY year_name, month_name
8544
								ORDER BY date_count DESC";
8545
		}
8546
		
8547
		$sth = $this->db->prepare($query);
8548
		$sth->execute(array(':offset' => $offset));
8549
      
8550
		$date_array = array();
8551
		$temp_array = array();
8552
        
8553
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8554
		{
8555
			$temp_array['month_name'] = $row['month_name'];
8556
			$temp_array['year_name'] = $row['year_name'];
8557
			$temp_array['date_count'] = $row['date_count'];
8558
8559
			$date_array[] = $temp_array;
8560
		}
8561
8562
		return $date_array;
8563
	}
8564
	
8565
8566
	/**
8567
	* Counts all month real arrival
8568
	*
8569
	* @return Array the month list
8570
	*
8571
	*/
8572
	public function countAllMonthsRealArrivalsByAirlines($filters = array())
8573
	{
8574
		global $globalTimezone, $globalDBdriver;
8575
		$filter_query = $this->getFilter($filters,true,true);
8576
		if ($globalTimezone != '') {
8577
			date_default_timezone_set($globalTimezone);
8578
			$datetime = new DateTime();
8579
			$offset = $datetime->format('P');
8580
		} else $offset = '+00:00';
8581
8582
		if ($globalDBdriver == 'mysql') {
8583
			$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
8584
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
8585
								GROUP BY spotter_output.airline_icao, year_name, month_name
8586
								ORDER BY date_count DESC";
8587
		} else {
8588
			$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
8589
								FROM spotter_output".$filter_query." real_arrival_airport_icao <> '' AND spotter_output.airline_icao <> '' 
8590
								GROUP BY spotter_output.airline_icao, year_name, month_name
8591
								ORDER BY date_count DESC";
8592
		}
8593
		
8594
		$sth = $this->db->prepare($query);
8595
		$sth->execute(array(':offset' => $offset));
8596
      
8597
		$date_array = array();
8598
		$temp_array = array();
8599
        
8600
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8601
		{
8602
			$temp_array['month_name'] = $row['month_name'];
8603
			$temp_array['year_name'] = $row['year_name'];
8604
			$temp_array['date_count'] = $row['date_count'];
8605
			$temp_array['airline_icao'] = $row['airline_icao'];
8606
8607
			$date_array[] = $temp_array;
8608
		}
8609
8610
		return $date_array;
8611
	}
8612
	
8613
8614
	/**
8615
	* Counts all dates during the last year
8616
	*
8617
	* @return Array the date list
8618
	*
8619
	*/
8620
	public function countAllMonthsLastYear($filters)
8621
	{
8622
		global $globalTimezone, $globalDBdriver;
8623
		if ($globalTimezone != '') {
8624
			date_default_timezone_set($globalTimezone);
8625
			$datetime = new DateTime();
8626
			$offset = $datetime->format('P');
8627
		} else $offset = '+00:00';
8628
		$filter_query = $this->getFilter($filters,true,true);
8629
		if ($globalDBdriver == 'mysql') {
8630
			$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
8631
								FROM spotter_output".$filter_query." spotter_output.date >= DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 YEAR)";
8632
			$query .= " GROUP BY year_name, month_name
8633
								ORDER BY year_name, month_name ASC";
8634
			$query_data = array(':offset' => $offset);
8635
		} else {
8636
			$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
8637
								FROM spotter_output".$filter_query." spotter_output.date >= CURRENT_TIMESTAMP AT TIME ZONE INTERVAL :offset - INTERVAL '1 YEARS'";
8638
			$query .= " GROUP BY year_name, month_name
8639
								ORDER BY year_name, month_name ASC";
8640
			$query_data = array(':offset' => $offset);
8641
    		}
8642
		
8643
		$sth = $this->db->prepare($query);
8644
		$sth->execute($query_data);
8645
      
8646
		$date_array = array();
8647
		$temp_array = array();
8648
        
8649
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8650
		{
8651
			$temp_array['year_name'] = $row['year_name'];
8652
			$temp_array['month_name'] = $row['month_name'];
8653
			$temp_array['date_count'] = $row['date_count'];
8654
          
8655
			$date_array[] = $temp_array;
8656
		}
8657
8658
		return $date_array;
8659
	}
8660
	
8661
	
8662
	
8663
	/**
8664
	* Counts all hours
8665
	*
8666
	* @return Array the hour list
8667
	*
8668
	*/
8669
	public function countAllHours($orderby,$filters = array())
8670
	{
8671
		global $globalTimezone, $globalDBdriver;
8672
		if ($globalTimezone != '') {
8673
			date_default_timezone_set($globalTimezone);
8674
			$datetime = new DateTime();
8675
			$offset = $datetime->format('P');
8676
		} else $offset = '+00:00';
8677
8678
		$orderby_sql = '';
8679
		if ($orderby == "hour")
8680
		{
8681
			$orderby_sql = "ORDER BY hour_name ASC";
8682
		}
8683
		if ($orderby == "count")
8684
		{
8685
			$orderby_sql = "ORDER BY hour_count DESC";
8686
		}
8687
		
8688
		if ($globalDBdriver == 'mysql') {
8689
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8690
								FROM spotter_output";
8691
			$query .= $this->getFilter($filters);
8692
			$query .= " GROUP BY hour_name 
8693
								".$orderby_sql;
8694
8695
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
8696
								FROM spotter_output 
8697
								GROUP BY hour_name 
8698
								".$orderby_sql."
8699
								LIMIT 10 OFFSET 00";
8700
  */    
8701
		$query_data = array(':offset' => $offset);
8702
		} else {
8703
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8704
								FROM spotter_output";
8705
			$query .= $this->getFilter($filters);
8706
			$query .= " GROUP BY hour_name 
8707
								".$orderby_sql;
8708
			$query_data = array(':offset' => $offset);
8709
		}
8710
		
8711
		$sth = $this->db->prepare($query);
8712
		$sth->execute($query_data);
8713
      
8714
		$hour_array = array();
8715
		$temp_array = array();
8716
        
8717
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8718
		{
8719
			$temp_array['hour_name'] = $row['hour_name'];
8720
			$temp_array['hour_count'] = $row['hour_count'];
8721
          
8722
			$hour_array[] = $temp_array;
8723
		}
8724
8725
		return $hour_array;
8726
	}
8727
	
8728
	/**
8729
	* Counts all hours
8730
	*
8731
	* @return Array the hour list
8732
	*
8733
	*/
8734
	public function countAllHoursByAirlines($orderby, $filters = array())
8735
	{
8736
		global $globalTimezone, $globalDBdriver;
8737
		$filter_query = $this->getFilter($filters,true,true);
8738
		if ($globalTimezone != '') {
8739
			date_default_timezone_set($globalTimezone);
8740
			$datetime = new DateTime();
8741
			$offset = $datetime->format('P');
8742
		} else $offset = '+00:00';
8743
8744
		$orderby_sql = '';
8745
		if ($orderby == "hour")
8746
		{
8747
			$orderby_sql = "ORDER BY hour_name ASC";
8748
		}
8749
		if ($orderby == "count")
8750
		{
8751
			$orderby_sql = "ORDER BY hour_count DESC";
8752
		}
8753
		
8754
		if ($globalDBdriver == 'mysql') {
8755
			$query  = "SELECT spotter_output.airline_icao, HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8756
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8757
								GROUP BY spotter_output.airline_icao, hour_name 
8758
								".$orderby_sql;
8759
8760
/*		$query  = "SELECT HOUR(spotter_output.date) AS hour_name, count(*) as hour_count
8761
								FROM spotter_output 
8762
								GROUP BY hour_name 
8763
								".$orderby_sql."
8764
								LIMIT 10 OFFSET 00";
8765
  */    
8766
		$query_data = array(':offset' => $offset);
8767
		} else {
8768
			$query  = "SELECT spotter_output.airline_icao, EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8769
								FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
8770
								GROUP BY spotter_output.airline_icao, hour_name 
8771
								".$orderby_sql;
8772
			$query_data = array(':offset' => $offset);
8773
		}
8774
		
8775
		$sth = $this->db->prepare($query);
8776
		$sth->execute($query_data);
8777
      
8778
		$hour_array = array();
8779
		$temp_array = array();
8780
        
8781
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8782
		{
8783
			$temp_array['hour_name'] = $row['hour_name'];
8784
			$temp_array['hour_count'] = $row['hour_count'];
8785
			$temp_array['airline_icao'] = $row['airline_icao'];
8786
          
8787
			$hour_array[] = $temp_array;
8788
		}
8789
8790
		return $hour_array;
8791
	}
8792
8793
8794
8795
	/**
8796
	* Counts all hours by airline
8797
	*
8798
	* @return Array the hour list
8799
	*
8800
	*/
8801
	public function countAllHoursByAirline($airline_icao, $filters = array())
8802
	{
8803
		global $globalTimezone, $globalDBdriver;
8804
		$filter_query = $this->getFilter($filters,true,true);
8805
		if ($globalTimezone != '') {
8806
			date_default_timezone_set($globalTimezone);
8807
			$datetime = new DateTime();
8808
			$offset = $datetime->format('P');
8809
		} else $offset = '+00:00';
8810
8811
		$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
8812
8813
		if ($globalDBdriver == 'mysql') {
8814
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8815
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
8816
								GROUP BY hour_name 
8817
								ORDER BY hour_name ASC";
8818
		} else {
8819
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8820
								FROM spotter_output".$filter_query." spotter_output.airline_icao = :airline_icao
8821
								GROUP BY hour_name 
8822
								ORDER BY hour_name ASC";
8823
		}
8824
		
8825
		$sth = $this->db->prepare($query);
8826
		$sth->execute(array(':airline_icao' => $airline_icao,':offset' => $offset));
8827
      
8828
		$hour_array = array();
8829
		$temp_array = array();
8830
        
8831
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8832
		{
8833
			$temp_array['hour_name'] = $row['hour_name'];
8834
			$temp_array['hour_count'] = $row['hour_count'];
8835
          
8836
			$hour_array[] = $temp_array;
8837
		}
8838
8839
		return $hour_array;
8840
	}
8841
	
8842
	
8843
	
8844
	
8845
	/**
8846
	* Counts all hours by aircraft
8847
	*
8848
	* @return Array the hour list
8849
	*
8850
	*/
8851
	public function countAllHoursByAircraft($aircraft_icao, $filters = array())
8852
	{
8853
		global $globalTimezone, $globalDBdriver;
8854
		$filter_query = $this->getFilter($filters,true,true);
8855
		$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
8856
		if ($globalTimezone != '') {
8857
			date_default_timezone_set($globalTimezone);
8858
			$datetime = new DateTime();
8859
			$offset = $datetime->format('P');
8860
		} else $offset = '+00:00';
8861
8862
		if ($globalDBdriver == 'mysql') {
8863
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8864
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
8865
								GROUP BY hour_name 
8866
								ORDER BY hour_name ASC";
8867
		} else {
8868
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8869
								FROM spotter_output".$filter_query." spotter_output.aircraft_icao = :aircraft_icao
8870
								GROUP BY hour_name 
8871
								ORDER BY hour_name ASC";
8872
		}
8873
		
8874
		$sth = $this->db->prepare($query);
8875
		$sth->execute(array(':aircraft_icao' => $aircraft_icao,':offset' => $offset));
8876
      
8877
		$hour_array = array();
8878
		$temp_array = array();
8879
        
8880
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8881
		{
8882
			$temp_array['hour_name'] = $row['hour_name'];
8883
			$temp_array['hour_count'] = $row['hour_count'];
8884
          
8885
			$hour_array[] = $temp_array;
8886
		}
8887
8888
		return $hour_array;
8889
	}
8890
	
8891
	
8892
	/**
8893
	* Counts all hours by aircraft registration
8894
	*
8895
	* @return Array the hour list
8896
	*
8897
	*/
8898
	public function countAllHoursByRegistration($registration, $filters = array())
8899
	{
8900
		global $globalTimezone, $globalDBdriver;
8901
		$filter_query = $this->getFilter($filters,true,true);
8902
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
8903
		if ($globalTimezone != '') {
8904
			date_default_timezone_set($globalTimezone);
8905
			$datetime = new DateTime();
8906
			$offset = $datetime->format('P');
8907
		} else $offset = '+00:00';
8908
8909
		if ($globalDBdriver == 'mysql') {
8910
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8911
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
8912
								GROUP BY hour_name 
8913
								ORDER BY hour_name ASC";
8914
		} else {
8915
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8916
								FROM spotter_output".$filter_query." spotter_output.registration = :registration
8917
								GROUP BY hour_name 
8918
								ORDER BY hour_name ASC";
8919
		}
8920
		
8921
		$sth = $this->db->prepare($query);
8922
		$sth->execute(array(':registration' => $registration,':offset' => $offset));
8923
      
8924
		$hour_array = array();
8925
		$temp_array = array();
8926
        
8927
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8928
		{
8929
			$temp_array['hour_name'] = $row['hour_name'];
8930
			$temp_array['hour_count'] = $row['hour_count'];
8931
          
8932
			$hour_array[] = $temp_array;
8933
		}
8934
8935
		return $hour_array;
8936
	}
8937
	
8938
	
8939
	/**
8940
	* Counts all hours by airport
8941
	*
8942
	* @return Array the hour list
8943
	*
8944
	*/
8945
	public function countAllHoursByAirport($airport_icao, $filters = array())
8946
	{
8947
		global $globalTimezone, $globalDBdriver;
8948
		$filter_query = $this->getFilter($filters,true,true);
8949
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
8950
		if ($globalTimezone != '') {
8951
			date_default_timezone_set($globalTimezone);
8952
			$datetime = new DateTime();
8953
			$offset = $datetime->format('P');
8954
		} else $offset = '+00:00';
8955
8956
		if ($globalDBdriver == 'mysql') {
8957
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
8958
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8959
								GROUP BY hour_name 
8960
								ORDER BY hour_name ASC";
8961
		} else {
8962
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
8963
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :airport_icao OR spotter_output.arrival_airport_icao = :airport_icao)
8964
								GROUP BY hour_name 
8965
								ORDER BY hour_name ASC";
8966
		}
8967
		
8968
		$sth = $this->db->prepare($query);
8969
		$sth->execute(array(':airport_icao' => $airport_icao,':offset' => $offset));
8970
      
8971
		$hour_array = array();
8972
		$temp_array = array();
8973
        
8974
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
8975
		{
8976
			$temp_array['hour_name'] = $row['hour_name'];
8977
			$temp_array['hour_count'] = $row['hour_count'];
8978
          
8979
			$hour_array[] = $temp_array;
8980
		}
8981
8982
		return $hour_array;
8983
	}
8984
	
8985
	
8986
	
8987
	/**
8988
	* Counts all hours by manufacturer
8989
	*
8990
	* @return Array the hour list
8991
	*
8992
	*/
8993
	public function countAllHoursByManufacturer($aircraft_manufacturer,$filters =array())
8994
	{
8995
		global $globalTimezone, $globalDBdriver;
8996
		$filter_query = $this->getFilter($filters,true,true);
8997
		$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
8998
		if ($globalTimezone != '') {
8999
			date_default_timezone_set($globalTimezone);
9000
			$datetime = new DateTime();
9001
			$offset = $datetime->format('P');
9002
		} else $offset = '+00:00';
9003
9004
		if ($globalDBdriver == 'mysql') {
9005
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9006
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
9007
								GROUP BY hour_name 
9008
								ORDER BY hour_name ASC";
9009
		} else {
9010
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9011
								FROM spotter_output".$filter_query." spotter_output.aircraft_manufacturer = :aircraft_manufacturer
9012
								GROUP BY hour_name 
9013
								ORDER BY hour_name ASC";
9014
		}
9015
		
9016
		$sth = $this->db->prepare($query);
9017
		$sth->execute(array(':aircraft_manufacturer' => $aircraft_manufacturer,':offset' => $offset));
9018
      
9019
		$hour_array = array();
9020
		$temp_array = array();
9021
        
9022
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9023
		{
9024
			$temp_array['hour_name'] = $row['hour_name'];
9025
			$temp_array['hour_count'] = $row['hour_count'];
9026
          
9027
			$hour_array[] = $temp_array;
9028
		}
9029
9030
		return $hour_array;
9031
	}
9032
	
9033
	
9034
	
9035
	/**
9036
	* Counts all hours by date
9037
	*
9038
	* @return Array the hour list
9039
	*
9040
	*/
9041
	public function countAllHoursByDate($date, $filters = array())
9042
	{
9043
		global $globalTimezone, $globalDBdriver;
9044
		$filter_query = $this->getFilter($filters,true,true);
9045
		$date = filter_var($date,FILTER_SANITIZE_STRING);
9046
		if ($globalTimezone != '') {
9047
			date_default_timezone_set($globalTimezone);
9048
			$datetime = new DateTime($date);
9049
			$offset = $datetime->format('P');
9050
		} else $offset = '+00:00';
9051
9052
		if ($globalDBdriver == 'mysql') {
9053
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9054
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date
9055
								GROUP BY hour_name 
9056
								ORDER BY hour_name ASC";
9057
		} else {
9058
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9059
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset, 'YYYY-mm-dd') = :date
9060
								GROUP BY hour_name 
9061
								ORDER BY hour_name ASC";
9062
		}
9063
		
9064
		$sth = $this->db->prepare($query);
9065
		$sth->execute(array(':date' => $date, ':offset' => $offset));
9066
      
9067
		$hour_array = array();
9068
		$temp_array = array();
9069
        
9070
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9071
		{
9072
			$temp_array['hour_name'] = $row['hour_name'];
9073
			$temp_array['hour_count'] = $row['hour_count'];
9074
          
9075
			$hour_array[] = $temp_array;
9076
		}
9077
9078
		return $hour_array;
9079
	}
9080
	
9081
	
9082
	
9083
	/**
9084
	* Counts all hours by a ident/callsign
9085
	*
9086
	* @return Array the hour list
9087
	*
9088
	*/
9089
	public function countAllHoursByIdent($ident, $filters = array())
9090
	{
9091
		global $globalTimezone, $globalDBdriver;
9092
		$filter_query = $this->getFilter($filters,true,true);
9093
		$ident = filter_var($ident,FILTER_SANITIZE_STRING);
9094
		if ($globalTimezone != '') {
9095
			date_default_timezone_set($globalTimezone);
9096
			$datetime = new DateTime();
9097
			$offset = $datetime->format('P');
9098
		} else $offset = '+00:00';
9099
9100
		if ($globalDBdriver == 'mysql') {
9101
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9102
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
9103
								GROUP BY hour_name 
9104
								ORDER BY hour_name ASC";
9105
		} else {
9106
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9107
								FROM spotter_output".$filter_query." spotter_output.ident = :ident 
9108
								GROUP BY hour_name 
9109
								ORDER BY hour_name ASC";
9110
		}
9111
      
9112
		
9113
		$sth = $this->db->prepare($query);
9114
		$sth->execute(array(':ident' => $ident,':offset' => $offset));
9115
      
9116
		$hour_array = array();
9117
		$temp_array = array();
9118
        
9119
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9120
		{
9121
			$temp_array['hour_name'] = $row['hour_name'];
9122
			$temp_array['hour_count'] = $row['hour_count'];
9123
          
9124
			$hour_array[] = $temp_array;
9125
		}
9126
9127
		return $hour_array;
9128
	}
9129
	
9130
	
9131
	
9132
	/**
9133
	* Counts all hours by route
9134
	*
9135
	* @return Array the hour list
9136
	*
9137
	*/
9138
	public function countAllHoursByRoute($departure_airport_icao, $arrival_airport_icao, $filters =array())
9139
	{
9140
		global $globalTimezone, $globalDBdriver;
9141
		$filter_query = $this->getFilter($filters,true,true);
9142
		$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
9143
		$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
9144
		if ($globalTimezone != '') {
9145
			date_default_timezone_set($globalTimezone);
9146
			$datetime = new DateTime();
9147
			$offset = $datetime->format('P');
9148
		} else $offset = '+00:00';
9149
9150
		if ($globalDBdriver == 'mysql') {
9151
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9152
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9153
								GROUP BY hour_name 
9154
								ORDER BY hour_name ASC";
9155
		} else {
9156
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9157
								FROM spotter_output".$filter_query." (spotter_output.departure_airport_icao = :departure_airport_icao) AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)
9158
								GROUP BY hour_name 
9159
								ORDER BY hour_name ASC";
9160
		}
9161
		
9162
		$sth = $this->db->prepare($query);
9163
		$sth->execute(array(':departure_airport_icao' => $departure_airport_icao,':arrival_airport_icao' => $arrival_airport_icao,':offset' => $offset));
9164
      
9165
		$hour_array = array();
9166
		$temp_array = array();
9167
        
9168
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9169
		{
9170
			$temp_array['hour_name'] = $row['hour_name'];
9171
			$temp_array['hour_count'] = $row['hour_count'];
9172
          
9173
			$hour_array[] = $temp_array;
9174
		}
9175
9176
		return $hour_array;
9177
	}
9178
	
9179
	
9180
	/**
9181
	* Counts all hours by country
9182
	*
9183
	* @return Array the hour list
9184
	*
9185
	*/
9186
	public function countAllHoursByCountry($country, $filters = array())
9187
	{
9188
		global $globalTimezone, $globalDBdriver;
9189
		$filter_query = $this->getFilter($filters,true,true);
9190
		$country = filter_var($country,FILTER_SANITIZE_STRING);
9191
		if ($globalTimezone != '') {
9192
			date_default_timezone_set($globalTimezone);
9193
			$datetime = new DateTime();
9194
			$offset = $datetime->format('P');
9195
		} else $offset = '+00:00';
9196
9197
		if ($globalDBdriver == 'mysql') {
9198
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9199
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9200
								GROUP BY hour_name 
9201
								ORDER BY hour_name ASC";
9202
		} else {
9203
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9204
								FROM spotter_output".$filter_query." ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country)) OR spotter_output.airline_country = :country
9205
								GROUP BY hour_name 
9206
								ORDER BY hour_name ASC";
9207
		}
9208
		
9209
		$sth = $this->db->prepare($query);
9210
		$sth->execute(array(':country' => $country,':offset' => $offset));
9211
      
9212
		$hour_array = array();
9213
		$temp_array = array();
9214
        
9215
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9216
		{
9217
			$temp_array['hour_name'] = $row['hour_name'];
9218
			$temp_array['hour_count'] = $row['hour_count'];
9219
          
9220
			$hour_array[] = $temp_array;
9221
		}
9222
9223
		return $hour_array;
9224
	}
9225
9226
9227
9228
9229
	/**
9230
	* Counts all aircraft that have flown over
9231
	*
9232
	* @return Integer the number of aircrafts
9233
	*
9234
	*/
9235
	public function countOverallAircrafts($filters = array())
9236
	{
9237
		$filter_query = $this->getFilter($filters,true,true);
9238
		$query  = "SELECT COUNT(DISTINCT spotter_output.aircraft_icao) AS aircraft_count  
9239
                    FROM spotter_output".$filter_query." spotter_output.ident <> ''";
9240
		$sth = $this->db->prepare($query);
9241
		$sth->execute();
9242
		return $sth->fetchColumn();
9243
	}
9244
9245
	/**
9246
	* Counts all flight that really arrival
9247
	*
9248
	* @return Integer the number of aircrafts
9249
	*
9250
	*/
9251
	public function countOverallArrival($filters = array())
9252
	{
9253
		$filter_query = $this->getFilter($filters,true,true);
9254
		$query  = "SELECT COUNT(spotter_output.real_arrival_airport_icao) AS arrival_count  
9255
                    FROM spotter_output".$filter_query." spotter_output.arrival_airport_icao <> ''";
9256
		
9257
		$sth = $this->db->prepare($query);
9258
		$sth->execute();
9259
		return $sth->fetchColumn();
9260
	}
9261
9262
	/**
9263
	* Counts all pilots that have flown over
9264
	*
9265
	* @return Integer the number of pilots
9266
	*
9267
	*/
9268
	public function countOverallPilots($filters = array())
9269
	{
9270
		$filter_query = $this->getFilter($filters,true,true);
9271
		$query  = "SELECT COUNT(DISTINCT spotter_output.pilot_id) AS pilot_count  
9272
                    FROM spotter_output".$filter_query." spotter_output.pilot_id <> ''";
9273
		$sth = $this->db->prepare($query);
9274
		$sth->execute();
9275
		return $sth->fetchColumn();
9276
	}
9277
9278
	/**
9279
	* Counts all owners that have flown over
9280
	*
9281
	* @return Integer the number of owners
9282
	*
9283
	*/
9284
	public function countOverallOwners($filters = array())
9285
	{
9286
		$filter_query = $this->getFilter($filters,true,true);
9287
		$query  = "SELECT COUNT(DISTINCT spotter_output.owner_name) AS owner_count  
9288
                    FROM spotter_output".$filter_query." spotter_output.owner_name <> ''";
9289
		$sth = $this->db->prepare($query);
9290
		$sth->execute();
9291
		return $sth->fetchColumn();
9292
	}
9293
	
9294
	
9295
	/**
9296
	* Counts all flights that have flown over
9297
	*
9298
	* @return Integer the number of flights
9299
	*
9300
	*/
9301
	public function countOverallFlights($filters = array())
9302
	{
9303
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
9304
                    FROM spotter_output";
9305
		$query .= $this->getFilter($filters);
9306
		//echo $query;
9307
		$sth = $this->db->prepare($query);
9308
		$sth->execute();
9309
		return $sth->fetchColumn();
9310
	}
9311
	
9312
	/**
9313
	* Counts all military flights that have flown over
9314
	*
9315
	* @return Integer the number of flights
9316
	*
9317
	*/
9318
	public function countOverallMilitaryFlights($filters = array())
9319
	{
9320
		$filter_query = $this->getFilter($filters,true,true);
9321
		$query  = "SELECT COUNT(spotter_output.spotter_id) AS flight_count  
9322
                    FROM airlines,spotter_output".$filter_query." spotter_output.airline_icao = airlines.icao AND airlines.type = 'military'";
9323
      
9324
		$sth = $this->db->prepare($query);
9325
		$sth->execute();
9326
		return $sth->fetchColumn();
9327
	}
9328
	
9329
	
9330
	
9331
	/**
9332
	* Counts all airlines that have flown over
9333
	*
9334
	* @return Integer the number of airlines
9335
	*
9336
	*/
9337
	public function countOverallAirlines($filters = array())
9338
	{
9339
		$query  = "SELECT COUNT(DISTINCT spotter_output.airline_name) AS airline_count 
9340
							FROM spotter_output";
9341
      
9342
		$query .= $this->getFilter($filters);
9343
		$sth = $this->db->prepare($query);
9344
		$sth->execute();
9345
		return $sth->fetchColumn();
9346
	}
9347
9348
  
9349
	/**
9350
	* Counts all hours of today
9351
	*
9352
	* @return Array the hour list
9353
	*
9354
	*/
9355
	public function countAllHoursFromToday($filters = array())
9356
	{
9357
		global $globalTimezone, $globalDBdriver;
9358
		$filter_query = $this->getFilter($filters,true,true);
9359
		if ($globalTimezone != '') {
9360
			date_default_timezone_set($globalTimezone);
9361
			$datetime = new DateTime();
9362
			$offset = $datetime->format('P');
9363
		} else $offset = '+00:00';
9364
9365
		if ($globalDBdriver == 'mysql') {
9366
			$query  = "SELECT HOUR(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) AS hour_name, count(*) as hour_count
9367
								FROM spotter_output".$filter_query." DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = CURDATE()
9368
								GROUP BY hour_name 
9369
								ORDER BY hour_name ASC";
9370
		} else {
9371
			$query  = "SELECT EXTRACT(HOUR FROM spotter_output.date AT TIME ZONE INTERVAL :offset) AS hour_name, count(*) as hour_count
9372
								FROM spotter_output".$filter_query." to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') = CAST(NOW() AS date)
9373
								GROUP BY hour_name 
9374
								ORDER BY hour_name ASC";
9375
		}
9376
		
9377
		$sth = $this->db->prepare($query);
9378
		$sth->execute(array(':offset' => $offset));
9379
      
9380
		$hour_array = array();
9381
		$temp_array = array();
9382
        
9383
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9384
		{
9385
			$temp_array['hour_name'] = $row['hour_name'];
9386
			$temp_array['hour_count'] = $row['hour_count'];
9387
			$hour_array[] = $temp_array;
9388
		}
9389
9390
		return $hour_array;
9391
	}
9392
    
9393
	/**
9394
	* Gets all the spotter information based on calculated upcoming flights
9395
	*
9396
	* @return Array the spotter information
9397
	*
9398
	*/
9399
	public function getUpcomingFlights($limit = '', $sort = '', $filters = array())
9400
	{
9401
		global $global_query, $globalDBdriver, $globalTimezone;
9402
		$filter_query = $this->getFilter($filters,true,true);
9403
		date_default_timezone_set('UTC');
9404
		$limit_query = '';
9405
		if ($limit != "")
9406
		{
9407
			$limit_array = explode(",", $limit);
9408
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
9409
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
9410
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
9411
			{
9412
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
9413
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
9414
			}
9415
		}
9416
		$currentHour = date("G");
9417
		$next3Hours = date("G", strtotime("+3 hour"));
9418
		//if the next 3 hours is already equal to/past midnight, we limit it to stay there, otherwise the query will fail
9419
		if ($currentHour >= 21 && $next3Hours >= 00)
9420
		{
9421
			$next3Hours = 24;
9422
		}
9423
		$currentDayofWeek = date("l");
9424
		if ($globalDBdriver == 'mysql') {
9425
			if ($sort != "")
9426
			{
9427
				$search_orderby_array = $this->getOrderBy();
9428
				$orderby_query = $search_orderby_array[$sort]['sql'];
9429
			} else {
9430
				$orderby_query = " ORDER BY HOUR(spotter_output.date) ASC";
9431
			}
9432
/*
9433
			$query = "SELECT spotter_output.*, count(spotter_output.ident) as ident_count
9434
			    FROM spotter_output
9435
			    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'
9436
			    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";
9437
*/
9438
/*			$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
9439
			    FROM spotter_output
9440
			    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'
9441
			    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";
9442
*/
9443
			$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 
9444
			    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'
9445
			    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
9446
			    HAVING count(spotter_output.ident) > 5$orderby_query";
9447
9448
			$spotter_array = $this->getDataFromDB($query.$limit_query);
9449
		} else {
9450
			if ($sort != "")
9451
			{
9452
				$search_orderby_array = $this->getOrderBy();
9453
				$orderby_query = $search_orderby_array[$sort]['sql'];
9454
			} else {
9455
				$orderby_query = " ORDER BY to_char(spotter_output.date,'HH') ASC";
9456
			}
9457
			$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') 
9458
			    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 <> '' 
9459
			    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')
9460
			    HAVING count(spotter_output.ident) > 5$orderby_query";
9461
			//echo $query;
9462
			$spotter_array = $this->getDataFromDB($query.$limit_query,array(':timezone' => $globalTimezone));
9463
			/*
9464
			$sth = $this->db->prepare($query);
9465
			$sth->execute(array(':timezone' => $globalTimezone));
9466
			return $sth->fetchAll(PDO::FETCH_ASSOC);
9467
			*/
9468
		}
9469
		return $spotter_array;
9470
	}
9471
    
9472
    
9473
     /**
9474
	* Gets the Barrie Spotter ID based on the FlightAware ID
9475
	*
9476
	* @return Integer the Barrie Spotter ID
9477
q	*
9478
	*/
9479
	public function getSpotterIDBasedOnFlightAwareID($flightaware_id)
9480
	{
9481
		$flightaware_id = filter_var($flightaware_id,FILTER_SANITIZE_STRING);
9482
9483
		$query  = "SELECT spotter_output.spotter_id
9484
								FROM spotter_output 
9485
								WHERE spotter_output.flightaware_id = '".$flightaware_id."'";
9486
        
9487
		
9488
		$sth = $this->db->prepare($query);
9489
		$sth->execute();
9490
9491
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9492
		{
9493
			return $row['spotter_id'];
9494
		}
9495
	}
9496
  
9497
 
9498
	/**
9499
	* Parses a date string
9500
	*
9501
	* @param String $dateString the date string
9502
	* @param String $timezone the timezone of a user
9503
	* @return Array the time information
9504
	*
9505
	*/
9506
	public function parseDateString($dateString, $timezone = '')
9507
	{
9508
		$time_array = array();
9509
	
9510
		if ($timezone != "")
9511
		{
9512
			date_default_timezone_set($timezone);
9513
		}
9514
		
9515
		$current_date = date("Y-m-d H:i:s");
9516
		$date = date("Y-m-d H:i:s",strtotime($dateString." UTC"));
9517
		
9518
		$diff = abs(strtotime($current_date) - strtotime($date));
9519
9520
		$time_array['years'] = floor($diff / (365*60*60*24)); 
9521
		$years = $time_array['years'];
9522
		
9523
		$time_array['months'] = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
9524
		$months = $time_array['months'];
9525
		
9526
		$time_array['days'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
9527
		$days = $time_array['days'];
9528
		$time_array['hours'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*60));
9529
		$hours = $time_array['hours'];
9530
		$time_array['minutes'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60)/ 60);
9531
		$minutes = $time_array['minutes'];
9532
		$time_array['seconds'] = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hours*60*60 - $minutes*60));  
9533
		
9534
		return $time_array;	
9535
	}	
9536
	
9537
	
9538
	
9539
	
9540
	/**
9541
	* Parses the direction degrees to working
9542
	*
9543
	* @param Float $direction the direction in degrees
9544
	* @return Array the direction information
9545
	*
9546
	*/
9547
	public function parseDirection($direction = 0)
9548
	{
9549
		if ($direction == '') $direction = 0;
9550
		$direction_array = array();
9551
		$temp_array = array();
9552
9553
		if ($direction == 360 || ($direction >= 0 && $direction < 22.5))
9554
		{
9555
			$temp_array['direction_degree'] = $direction;
9556
			$temp_array['direction_shortname'] = "N";
9557
			$temp_array['direction_fullname'] = "North";
9558
		} elseif ($direction >= 22.5 && $direction < 45){
9559
			$temp_array['direction_degree'] = $direction;
9560
			$temp_array['direction_shortname'] = "NNE";
9561
			$temp_array['direction_fullname'] = "North-Northeast";
9562
		} elseif ($direction >= 45 && $direction < 67.5){
9563
			$temp_array['direction_degree'] = $direction;
9564
			$temp_array['direction_shortname'] = "NE";
9565
			$temp_array['direction_fullname'] = "Northeast";
9566
		} elseif ($direction >= 67.5 && $direction < 90){
9567
			$temp_array['direction_degree'] = $direction;
9568
			$temp_array['direction_shortname'] = "ENE";
9569
			$temp_array['direction_fullname'] = "East-Northeast";
9570
		} elseif ($direction >= 90 && $direction < 112.5){
9571
			$temp_array['direction_degree'] = $direction;
9572
			$temp_array['direction_shortname'] = "E";
9573
			$temp_array['direction_fullname'] = "East";
9574
		} elseif ($direction >= 112.5 && $direction < 135){
9575
			$temp_array['direction_degree'] = $direction;
9576
			$temp_array['direction_shortname'] = "ESE";
9577
			$temp_array['direction_fullname'] = "East-Southeast";
9578
		} elseif ($direction >= 135 && $direction < 157.5){
9579
			$temp_array['direction_degree'] = $direction;
9580
			$temp_array['direction_shortname'] = "SE";
9581
			$temp_array['direction_fullname'] = "Southeast";
9582
		} elseif ($direction >= 157.5 && $direction < 180){
9583
			$temp_array['direction_degree'] = $direction;
9584
			$temp_array['direction_shortname'] = "SSE";
9585
			$temp_array['direction_fullname'] = "South-Southeast";
9586
		} elseif ($direction >= 180 && $direction < 202.5){
9587
			$temp_array['direction_degree'] = $direction;
9588
			$temp_array['direction_shortname'] = "S";
9589
			$temp_array['direction_fullname'] = "South";
9590
		} elseif ($direction >= 202.5 && $direction < 225){
9591
			$temp_array['direction_degree'] = $direction;
9592
			$temp_array['direction_shortname'] = "SSW";
9593
			$temp_array['direction_fullname'] = "South-Southwest";
9594
		} elseif ($direction >= 225 && $direction < 247.5){
9595
			$temp_array['direction_degree'] = $direction;
9596
			$temp_array['direction_shortname'] = "SW";
9597
			$temp_array['direction_fullname'] = "Southwest";
9598
		} elseif ($direction >= 247.5 && $direction < 270){
9599
			$temp_array['direction_degree'] = $direction;
9600
			$temp_array['direction_shortname'] = "WSW";
9601
			$temp_array['direction_fullname'] = "West-Southwest";
9602
		} elseif ($direction >= 270 && $direction < 292.5){
9603
			$temp_array['direction_degree'] = $direction;
9604
			$temp_array['direction_shortname'] = "W";
9605
			$temp_array['direction_fullname'] = "West";
9606
		} elseif ($direction >= 292.5 && $direction < 315){
9607
			$temp_array['direction_degree'] = $direction;
9608
			$temp_array['direction_shortname'] = "WNW";
9609
			$temp_array['direction_fullname'] = "West-Northwest";
9610
		} elseif ($direction >= 315 && $direction < 337.5){
9611
			$temp_array['direction_degree'] = $direction;
9612
			$temp_array['direction_shortname'] = "NW";
9613
			$temp_array['direction_fullname'] = "Northwest";
9614
		} elseif ($direction >= 337.5 && $direction < 360){
9615
			$temp_array['direction_degree'] = $direction;
9616
			$temp_array['direction_shortname'] = "NNW";
9617
			$temp_array['direction_fullname'] = "North-Northwest";
9618
		}
9619
		$direction_array[] = $temp_array;
9620
		return $direction_array;
9621
	}
9622
	
9623
	
9624
	/**
9625
	* Gets the aircraft registration
9626
	*
9627
	* @param String $flightaware_id the flight aware id
9628
	* @return String the aircraft registration
9629
	*
9630
	*/
9631
	
9632
	public function getAircraftRegistration($flightaware_id)
9633
	{
9634
		global $globalFlightAwareUsername, $globalFlightAwarePassword;
9635
        
9636
		$options = array(
9637
			'trace' => true,
9638
			'exceptions' => 0,
9639
			'login' => $globalFlightAwareUsername,
9640
			'password' => $globalFlightAwarePassword,
9641
		);
9642
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
9643
		
9644
		$params = array('faFlightID' => $flightaware_id);
9645
		$result = $client->AirlineFlightInfo($params);
9646
		
9647
		if (isset($result->AirlineFlightInfoResult))
9648
		{
9649
			$registration = $result->AirlineFlightInfoResult->tailnumber;
9650
		} else return '';
9651
		
9652
		$registration = $this->convertAircraftRegistration($registration);
9653
		
9654
		return $registration;
9655
	}
9656
9657
9658
	/**
9659
	* Gets the aircraft registration from ModeS
9660
	*
9661
	* @param String $aircraft_modes the flight ModeS in hex
9662
	* @return String the aircraft registration
9663
	*
9664
	*/
9665
	public function getAircraftRegistrationBymodeS($aircraft_modes)
9666
	{
9667
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
9668
	
9669
		$query  = "SELECT aircraft_modes.Registration FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
9670
		
9671
		$sth = $this->db->prepare($query);
9672
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
9673
    
9674
		$row = $sth->fetch(PDO::FETCH_ASSOC);
9675
		$sth->closeCursor();
9676
		if (count($row) > 0) {
9677
		    //return $row['Registration'];
9678
		    return $row['registration'];
9679
		} else return '';
9680
	
9681
	}
9682
9683
	/**
9684
	* Gets the aircraft type from ModeS
9685
	*
9686
	* @param String $aircraft_modes the flight ModeS in hex
9687
	* @return String the aircraft type
9688
	*
9689
	*/
9690
	public function getAircraftTypeBymodeS($aircraft_modes)
9691
	{
9692
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
9693
	
9694
		$query  = "SELECT aircraft_modes.type_flight FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
9695
		
9696
		$sth = $this->db->prepare($query);
9697
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
9698
    
9699
		$row = $sth->fetch(PDO::FETCH_ASSOC);
9700
		$sth->closeCursor();
9701
		if (count($row) > 0) {
9702
		    if ($row['type_flight'] == null) return '';
9703
		    else return $row['type_flight'];
9704
		} else return '';
9705
	
9706
	}
9707
9708
	/**
9709
	* Gets Country from latitude/longitude
9710
	*
9711
	* @param Float $latitude latitute of the flight
9712
	* @param Float $longitude longitute of the flight
9713
	* @return String the countrie
9714
	*/
9715
	public function getCountryFromLatitudeLongitude($latitude,$longitude)
9716
	{
9717
		global $globalDBdriver, $globalDebug;
9718
		$latitude = filter_var($latitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
9719
		$longitude = filter_var($longitude,FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
9720
	
9721
		$Connection = new Connection($this->db);
9722
		if (!$Connection->tableExists('countries')) return '';
9723
	
9724
		try {
9725
			/*
9726
			if ($globalDBdriver == 'mysql') {
9727
				//$query  = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(:latitude :longitude)'), ogc_geom) LIMIT 1";
9728
				$query = "SELECT name, iso2, iso3 FROM countries WHERE Within(GeomFromText('POINT(".$longitude.' '.$latitude.")'), ogc_geom) LIMIT 1";
9729
			}
9730
			*/
9731
			// This query seems to work both for MariaDB and PostgreSQL
9732
			$query = "SELECT name,iso2,iso3 FROM countries WHERE ST_Within(ST_GeomFromText('POINT(".$longitude." ".$latitude.")',4326), ogc_geom) LIMIT 1";
9733
		
9734
			$sth = $this->db->prepare($query);
9735
			//$sth->execute(array(':latitude' => $latitude,':longitude' => $longitude));
9736
			$sth->execute();
9737
    
9738
			$row = $sth->fetch(PDO::FETCH_ASSOC);
9739
			$sth->closeCursor();
9740
			if (count($row) > 0) {
9741
				return $row;
9742
			} else return '';
9743
		} catch (PDOException $e) {
9744
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
9745
			return '';
9746
		}
9747
	
9748
	}
9749
9750
	/**
9751
	* Gets Country from iso2
9752
	*
9753
	* @param String $iso2 ISO2 country code
9754
	* @return String the countrie
9755
	*/
9756
	public function getCountryFromISO2($iso2)
9757
	{
9758
		global $globalDBdriver, $globalDebug;
9759
		$iso2 = filter_var($iso2,FILTER_SANITIZE_STRING);
9760
	
9761
		$Connection = new Connection($this->db);
9762
		if (!$Connection->tableExists('countries')) return '';
9763
	
9764
		try {
9765
			$query = "SELECT name,iso2,iso3 FROM countries WHERE iso2 = :iso2 LIMIT 1";
9766
		
9767
			$sth = $this->db->prepare($query);
9768
			$sth->execute(array(':iso2' => $iso2));
9769
    
9770
			$row = $sth->fetch(PDO::FETCH_ASSOC);
9771
			$sth->closeCursor();
9772
			if (count($row) > 0) {
9773
				return $row;
9774
			} else return '';
9775
		} catch (PDOException $e) {
9776
			if (isset($globalDebug) && $globalDebug) echo 'Error : '.$e->getMessage()."\n";
9777
			return '';
9778
		}
9779
	
9780
	}
9781
9782
	/**
9783
	* converts the registration code using the country prefix
9784
	*
9785
	* @param String $registration the aircraft registration
9786
	* @return String the aircraft registration
9787
	*
9788
	*/
9789
	public function convertAircraftRegistration($registration)
9790
	{
9791
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9792
		$registration_prefix = '';
9793
		$registration_1 = substr($registration, 0, 1);
9794
		$registration_2 = substr($registration, 0, 2);
9795
9796
		//first get the prefix based on two characters
9797
		$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_2";
9798
      
9799
		
9800
		$sth = $this->db->prepare($query);
9801
		$sth->execute(array(':registration_2' => $registration_2));
9802
        
9803
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9804
		{
9805
			$registration_prefix = $row['registration_prefix'];
9806
		}
9807
9808
		//if we didn't find a two chracter prefix lets just search the one with one character
9809
		if ($registration_prefix == '')
9810
		{
9811
			$query  = "SELECT aircraft_registration.registration_prefix FROM aircraft_registration WHERE registration_prefix = :registration_1";
9812
			$sth = $this->db->prepare($query);
9813
			$sth->execute(array(':registration_1' => $registration_1));
9814
	        
9815
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9816
			{
9817
				$registration_prefix = $row['registration_prefix'];
9818
			}
9819
		}
9820
9821
		//determine which characters are being used and convert the registration code appropiately
9822
		if (strlen($registration_prefix) == 1)
9823
		{
9824
			if (0 === strpos($registration, 'N')) {
9825
				$registration = preg_replace("/^(.{1})/", "$1", $registration);
9826
			} else {
9827
				$registration = preg_replace("/^(.{1})/", "$1-", $registration);
9828
			}
9829
		} else if(strlen($registration_prefix) == 2){
9830
			if (0 === strpos($registration, 'N')) {
9831
				$registration = preg_replace("/^(.{2})/", "$1", $registration);
9832
			} else {
9833
				$registration = preg_replace("/^(.{2})/", "$1-", $registration);
9834
			}
9835
		}
9836
		return $registration;
9837
	}
9838
9839
	/**
9840
	* Country from the registration code
9841
	*
9842
	* @param String $registration the aircraft registration
9843
	* @return String the country
9844
	*
9845
	*/
9846
	public function countryFromAircraftRegistration($registration)
9847
	{
9848
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9849
		
9850
		$registration_prefix = '';
9851
		$registration_test = explode('-',$registration);
9852
		$country = '';
9853
		if ($registration_test[0] != $registration) {
9854
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
9855
	      
9856
			$sth = $this->db->prepare($query);
9857
			$sth->execute(array(':registration_1' => $registration_test[0]));
9858
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9859
			{
9860
				//$registration_prefix = $row['registration_prefix'];
9861
				$country = $row['country'];
9862
			}
9863
		} else {
9864
    			$registration_1 = substr($registration, 0, 1);
9865
		        $registration_2 = substr($registration, 0, 2);
9866
9867
			$country = '';
9868
			//first get the prefix based on two characters
9869
			$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_2 LIMIT 1";
9870
      
9871
			
9872
			$sth = $this->db->prepare($query);
9873
			$sth->execute(array(':registration_2' => $registration_2));
9874
        
9875
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
9876
			{
9877
				$registration_prefix = $row['registration_prefix'];
9878
				$country = $row['country'];
9879
			}
9880
9881
			//if we didn't find a two chracter prefix lets just search the one with one character
9882
			if ($registration_prefix == "")
9883
			{
9884
				$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration_1 LIMIT 1";
9885
	      
9886
				$sth = $this->db->prepare($query);
9887
				$sth->execute(array(':registration_1' => $registration_1));
9888
	        
9889
				while($row = $sth->fetch(PDO::FETCH_ASSOC))
9890
				{
9891
					//$registration_prefix = $row['registration_prefix'];
9892
					$country = $row['country'];
9893
				}
9894
			}
9895
		}
9896
    
9897
		return $country;
9898
	}
9899
9900
	/**
9901
	* Country from the registration code
9902
	*
9903
	* @param String $registration the aircraft registration
9904
	* @return String the country
9905
	*
9906
	*/
9907
	public function countryFromAircraftRegistrationCode($registration)
9908
	{
9909
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
9910
		
9911
		$country = '';
9912
		$query  = "SELECT aircraft_registration.registration_prefix, aircraft_registration.country FROM aircraft_registration WHERE registration_prefix = :registration LIMIT 1";
9913
		$sth = $this->db->prepare($query);
9914
		$sth->execute(array(':registration' => $registration));
9915
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
9916
		{
9917
			$country = $row['country'];
9918
		}
9919
		return $country;
9920
	}
9921
	
9922
	/**
9923
	* Set a new highlight value for a flight
9924
	*
9925
	* @param String $flightaware_id flightaware_id from spotter_output table
9926
	* @param String $highlight New highlight value
9927
	*/
9928
	public function setHighlightFlight($flightaware_id,$highlight) {
9929
		
9930
		$query  = "UPDATE spotter_output SET highlight = :highlight WHERE flightaware_id = :flightaware_id";
9931
		$sth = $this->db->prepare($query);
9932
		$sth->execute(array(':flightaware_id' => $flightaware_id, ':highlight' => $highlight));
9933
	}
9934
	
9935
	/**
9936
	* Gets the short url from bit.ly
9937
	*
9938
	* @param String $url the full url
9939
	* @return String the bit.ly url
9940
	*
9941
	*/
9942
	public function getBitlyURL($url)
9943
	{
9944
		global $globalBitlyAccessToken;
9945
		
9946
		if ($globalBitlyAccessToken == '') return $url;
9947
        
9948
		$google_url = 'https://api-ssl.bitly.com/v3/shorten?access_token='.$globalBitlyAccessToken.'&longUrl='.$url;
9949
		
9950
		$ch = curl_init();
9951
		curl_setopt($ch, CURLOPT_HEADER, 0);
9952
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
9953
		curl_setopt($ch, CURLOPT_URL, $google_url);
9954
		$bitly_data = curl_exec($ch);
9955
		curl_close($ch);
9956
		
9957
		$bitly_data = json_decode($bitly_data);
9958
		$bitly_url = '';
9959
		if ($bitly_data->status_txt = "OK"){
9960
			$bitly_url = $bitly_data->data->url;
9961
		}
9962
9963
		return $bitly_url;
9964
	}
9965
9966
9967
	public function getOrderBy()
9968
	{
9969
		$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"));
9970
		
9971
		return $orderby;
9972
		
9973
	}
9974
    
9975
/*
9976
	public function importFromFlightAware()
9977
	{
9978
		global $globalFlightAwareUsername, $globalFlightAwarePassword, $globalLatitudeMax, $globalLatitudeMin, $globalLongitudeMax, $globalLongitudeMin, $globalAirportIgnore;
9979
		$Spotter = new Spotter($this->db);
9980
		$SpotterLive = new SpotterLive($this->db);
9981
		$options = array(
9982
		            'trace' => true,
9983
		            'exceptions' => 0,
9984
		            'login' => $globalFlightAwareUsername,
9985
		            'password' => $globalFlightAwarePassword,
9986
		);
9987
		$client = new SoapClient('http://flightxml.flightaware.com/soap/FlightXML2/wsdl', $options);
9988
		$params = array('query' => '{range lat '.$globalLatitudeMin.' '.$globalLatitudeMax.'} {range lon '.$globalLongitudeMax.' '.$globalLongitudeMin.'} {true inAir}', 'howMany' => '15', 'offset' => '0');
9989
		$result = $client->SearchBirdseyeInFlight($params);
9990
		$dataFound = false;
9991
		$ignoreImport = false;
9992
		if (isset($result->SearchBirdseyeInFlightResult))
9993
		{
9994
			if (is_array($result->SearchBirdseyeInFlightResult->aircraft))
9995
			{
9996
				foreach($result->SearchBirdseyeInFlightResult->aircraft as $aircraft)
9997
				{
9998
					if (!strstr($aircraft->origin, 'L ') && !strstr($aircraft->destination, 'L '))
9999
					{
10000
						foreach($globalAirportIgnore as $airportIgnore)
10001
						{
10002
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
10003
							{
10004
								$ignoreImport = true; 
10005
							}
10006
						}
10007
						if ($ignoreImport == false)
10008
						{
10009
							$flightaware_id = $aircraft->faFlightID;
10010
							$ident = $aircraft->ident;
10011
							$aircraft_type = $aircraft->type;
10012
							$departure_airport = $aircraft->origin;
10013
							$arrival_airport = $aircraft->destination;
10014
							$latitude = $aircraft->latitude;
10015
							$longitude = $aircraft->longitude;
10016
							$waypoints = $aircraft->waypoints;
10017
							$altitude = $aircraft->altitude;
10018
							$heading = $aircraft->heading;
10019
							$groundspeed = $aircraft->groundspeed;
10020
							$dataFound = true;
10021
							//gets the callsign from the last hour
10022
							$last_hour_ident = $this->getIdentFromLastHour($ident);
10023
							//change the departure/arrival airport to NA if its not available
10024
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
10025
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
10026
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
10027
							if($last_hour_ident == "")
10028
							{
10029
								//adds the spotter data for the archive
10030
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10031
							}
10032
10033
							//adds the spotter LIVE data
10034
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10035
						}
10036
					}
10037
					$ignoreImport = false;
10038
				}
10039
			} else {
10040
				if (!strstr($result->SearchBirdseyeInFlightResult->aircraft->origin, 'L ') && !strstr($result->SearchBirdseyeInFlightResult->aircraft->destination, 'L '))
10041
				{
10042
					foreach($globalAirportIgnore as $airportIgnore)
10043
					{
10044
						foreach($globalAirportIgnore as $airportIgnore)
10045
						{
10046
							if ($aircraft->origin == $airportIgnore || $aircraft->destination == $airportIgnore)
10047
							{
10048
								$ignoreImport = true; 
10049
							}
10050
						}
10051
						if ($ignoreImport == false)
10052
						{
10053
							$flightaware_id = $result->SearchBirdseyeInFlightResult->aircraft->faFlightID;
10054
							$ident = $result->SearchBirdseyeInFlightResult->aircraft->ident;
10055
							$aircraft_type = $result->SearchBirdseyeInFlightResult->aircraft->type;
10056
							$departure_airport = $result->SearchBirdseyeInFlightResult->aircraft->origin;
10057
							$arrival_airport = $result->SearchBirdseyeInFlightResult->aircraft->destination;
10058
							$latitude = $result->SearchBirdseyeInFlightResult->aircraft->latitude;
10059
							$longitude = $result->SearchBirdseyeInFlightResult->aircraft->longitude;
10060
							$waypoints = $result->SearchBirdseyeInFlightResult->aircraft->waypoints;
10061
							$altitude = $result->SearchBirdseyeInFlightResult->aircraft->altitude;
10062
							$heading = $result->SearchBirdseyeInFlightResult->aircraft->heading;
10063
							$groundspeed = $result->SearchBirdseyeInFlightResult->aircraft->groundspeed;
10064
							$dataFound = true;
10065
							//gets the callsign from the last hour
10066
							$last_hour_ident = $this->getIdentFromLastHour($ident);
10067
							//change the departure/arrival airport to NA if its not available
10068
							if ($departure_airport == "" || $departure_airport == "---" || $departure_airport == "ZZZ" || $departure_airport == "ZZZZ") { $departure_airport = "NA"; }
10069
							if ($arrival_airport == "" || $arrival_airport == "---" || $arrival_airport == "ZZZ" || $arrival_airport == "ZZZZ") { $arrival_airport = "NA"; }
10070
							//if there was no aircraft with the same callsign within the last hour and go post it into the archive
10071
							if($last_hour_ident == "")
10072
							{
10073
								//adds the spotter data for the archive
10074
								$Spotter->addSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10075
							}
10076
							//adds the spotter LIVE data
10077
							$SpotterLive->addLiveSpotterData($flightaware_id, $ident, $aircraft_type, $departure_airport, $arrival_airport, $latitude, $longitude, $waypoints, $altitude, $heading, $groundspeed);
10078
						}
10079
						$ignoreImport = false;
10080
					}
10081
				}
10082
			}
10083
		} 
10084
	}
10085
*/
10086
10087
	// Update flights data when new data in DB
10088
	public function updateFieldsFromOtherTables()
10089
	{
10090
		global $globalDebug, $globalDBdriver;
10091
		$Image = new Image($this->db);
10092
		
10093
10094
		// routes
10095
		if ($globalDebug) print "Routes...\n";
10096
		if ($globalDBdriver == 'mysql') {
10097
			$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)";
10098
		} else {
10099
			$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'";
10100
		}
10101
		$sth = $this->db->prepare($query);
10102
		$sth->execute();
10103
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10104
		{
10105
			$departure_airport_array = $this->getAllAirportInfo($row['fromairport_icao']);
10106
			$arrival_airport_array = $this->getAllAirportInfo($row['toairport_icao']);
10107
			if (count($departure_airport_array) > 0 && count($arrival_airport_array) > 0) {
10108
				$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";
10109
				$sthu = $this->db->prepare($update_query);
10110
				$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']));
10111
			}
10112
		}
10113
		
10114
		if ($globalDebug) print "Airlines...\n";
10115
		//airlines
10116
		if ($globalDBdriver == 'mysql') {
10117
			$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)";
10118
		} elseif ($globalDBdriver == 'pgsql') {
10119
			$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'";
10120
		}
10121
		$sth = $this->db->prepare($query);
10122
		$sth->execute();
10123
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10124
		{
10125
			if (is_numeric(substr($row['ident'], -1, 1)))
10126
			{
10127
				$fromsource = NULL;
10128
				if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
10129
				elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
10130
				elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
10131
				elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
10132
				$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
10133
				if (isset($airline_array[0]['name'])) {
10134
					$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";
10135
					$sthu = $this->db->prepare($update_query);
10136
					$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']));
10137
				}
10138
			}
10139
		}
10140
10141
		if ($globalDebug) print "Remove Duplicate in aircraft_modes...\n";
10142
		//duplicate modes
10143
		$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";
10144
		$sth = $this->db->prepare($query);
10145
		$sth->execute();
10146
		
10147
		if ($globalDebug) print "Aircraft...\n";
10148
		//aircraft
10149
		if ($globalDBdriver == 'mysql') {
10150
			$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)";
10151
		} elseif ($globalDBdriver == 'pgsql') {
10152
			$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'";
10153
		}
10154
		$sth = $this->db->prepare($query);
10155
		$sth->execute();
10156
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10157
		{
10158
			if ($row['aircraft_icao'] != '') {
10159
				$aircraft_name = $this->getAllAircraftInfo($row['aircraft_icao']);
10160
				if ($row['registration'] != ""){
10161
					$image_array = $Image->getSpotterImage($row['registration']);
10162
					if (!isset($image_array[0]['registration'])) {
10163
						$Image->addSpotterImage($row['registration']);
10164
					}
10165
				}
10166
				if (count($aircraft_name) > 0) {
10167
					$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";
10168
					$sthu = $this->db->prepare($update_query);
10169
					$sthu->execute(array(':aircraft_name' => $aircraft_name[0]['type'], ':aircraft_manufacturer' => $aircraft_name[0]['manufacturer'], ':spotter_id' => $row['spotter_id']));
10170
				}
10171
			}
10172
		}
10173
	}	
10174
10175
	// Update arrival airports for data already in DB
10176
	public function updateArrivalAirports()
10177
	{
10178
		global $globalDebug, $globalDBdriver, $globalClosestMinDist;
10179
		$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";
10180
		$sth = $this->db->prepare($query);
10181
		$sth->execute();
10182
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
10183
		{
10184
			if ($row['last_latitude'] != '' && $row['last_longitude'] != '') {
10185
				$closestAirports = $this->closestAirports($row['last_latitude'],$row['last_longitude'],$globalClosestMinDist);
10186
				$airport_icao = '';
10187
				 if (isset($closestAirports[0])) {
10188
					if ($row['arrival_airport_icao'] == $closestAirports[0]['icao']) {
10189
						$airport_icao = $closestAirports[0]['icao'];
10190
						if ($globalDebug) echo "\o/ 1st ---++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10191
					} elseif (count($closestAirports > 1) && $row['arrival_airport_icao'] != '' && $row['arrival_airport_icao'] != 'NA') {
10192
						foreach ($closestAirports as $airport) {
10193
							if ($row['arrival_airport_icao'] == $airport['icao']) {
10194
								$airport_icao = $airport['icao'];
10195
								if ($globalDebug) echo "\o/ try --++ Find arrival airport. airport_icao : ".$airport_icao."\n";
10196
								break;
10197
							}
10198
						}
10199
					} elseif ($row['last_altitude'] == 0 || ($row['last_altitude'] != '' && ($closestAirports[0]['altitude'] <= $row['last_altitude']*100+1000 && $row['last_altitude']*100 < $closestAirports[0]['altitude']+5000))) {
10200
						$airport_icao = $closestAirports[0]['icao'];
10201
						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";
10202
					} else {
10203
						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";
10204
					}
10205
				} else {
10206
					if ($globalDebug) echo "----- No Airport near last coord. Latitude : ".$row['last_latitude'].' - Longitude : '.$row['last_longitude'].' - MinDist : '.$globalClosestMinDist."\n";
10207
				}
10208
				if ($row['real_arrival_airport_icao'] != $airport_icao) {
10209
					if ($globalDebug) echo "Updating airport to ".$airport_icao."...\n";
10210
					$update_query="UPDATE spotter_output SET real_arrival_airport_icao = :airport_icao WHERE spotter_id = :spotter_id";
10211
					$sthu = $this->db->prepare($update_query);
10212
					$sthu->execute(array(':airport_icao' => $airport_icao,':spotter_id' => $row['spotter_id']));
10213
				}
10214
			}
10215
		}
10216
	}
10217
	
10218
	public function closestAirports($origLat,$origLon,$dist = 10) {
10219
		global $globalDBdriver;
10220
		$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
10221
/*
10222
		$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 
10223
                      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)) 
10224
                      having distance < $dist ORDER BY distance limit 100;";
10225
*/
10226
		if ($globalDBdriver == 'mysql') {
10227
			$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 
10228
	                      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)) 
10229
	                      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;";
10230
                } else {
10231
			$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 
10232
	                      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)) 
10233
	                      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;";
10234
    		}
10235
		$sth = $this->db->prepare($query);
10236
		$sth->execute();
10237
		return $sth->fetchAll(PDO::FETCH_ASSOC);
10238
	}
10239
}
10240
/*
10241
$Spotter = new Spotter();
10242
print_r($Spotter->closestAirports('-19.9813','-47.8286',10));
10243
*/
10244
/*
10245
$Spotter = new Spotter();
10246
$da = $Spotter->countAllDetectedArrivalAirports(true,0,'',true);
10247
$aa = $Spotter->countAllArrivalAirports(true,0,'',true);
10248
print_r($da);
10249
print_r($aa);
10250
print_r(array_merge($da,$aa));
10251
*/
10252
?>