Completed
Push — master ( e0ac49...7ff500 )
by Yannick
08:01
created

Spotter::addSpotterData()   F

Complexity

Conditions 93
Paths > 20000

Size

Total Lines 300
Code Lines 189

Duplication

Lines 0
Ratio 0 %

Importance

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