Completed
Push — master ( d1c288...d0d974 )
by Yannick
08:03
created

Spotter::searchSpotterData()   F

Complexity

Conditions 59
Paths > 20000

Size

Total Lines 343
Code Lines 218

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 59
eloc 218
nc 645409407
nop 25
dl 0
loc 343
rs 2
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

Long Method

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

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

Commonly applied refactorings include:

Many Parameters

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

There are several approaches to avoid long parameter lists:

1
<?php
2
require_once(dirname(__FILE__).'/class.Scheduler.php');
3
require_once(dirname(__FILE__).'/class.ACARS.php');
4
require_once(dirname(__FILE__).'/class.Image.php');
5
$global_query = "SELECT spotter_output.* FROM spotter_output";
6
7
class Spotter{
8
	public $db;
9
	
10
	public function __construct($dbc = null) {
11
		$Connection = new Connection($dbc);
12
		$this->db = $Connection->db();
13
	}
14
15
	/**
16
	* Get SQL query part for filter used
17
	* @param Array $filter the filter
18
	* @return Array the SQL part
19
	*/
20
	public function getFilter($filter = array(),$where = false,$and = false) {
21
		global $globalFilter, $globalStatsFilters, $globalFilterName;
22
		$filters = array();
23
		if (is_array($globalStatsFilters) && isset($globalStatsFilters[$globalFilterName])) {
24
			if (isset($globalStatsFilters[$globalFilterName][0]['source'])) {
25
				$filters = $globalStatsFilters[$globalFilterName];
26
			} else {
27
				$filter = array_merge($filter,$globalStatsFilters[$globalFilterName]);
28
			}
29
		}
30
		if (is_array($globalFilter)) $filter = array_merge($filter,$globalFilter);
31
		$filter_query_join = '';
32
		$filter_query_where = '';
33
		foreach($filters as $flt) {
34
			if (isset($flt['airlines']) && !empty($flt['airlines'])) {
35
				if ($flt['airlines'][0] != '') {
36
					if (isset($flt['source'])) {
37
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
38
					} else {
39
						$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$flt['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
40
					}
41
				}
42
			}
43
			if (isset($flt['pilots_id']) && !empty($flt['pilots_id'])) {
44
				if (isset($flt['source'])) {
45
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."') AND spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
46
				} else {
47
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.pilot_id IN ('".implode("','",$flt['pilots_id'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
48
				}
49
			}
50
			if ((isset($flt['airlines']) && empty($flt['airlines']) && isset($flt['pilots_id']) && empty($flt['pilots_id'])) || (!isset($flt['airlines']) && !isset($flt['pilots_id']))) {
51
				if (isset($flt['source'])) {
52
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.format_source IN ('".implode("','",$flt['source'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
53
				}
54
			}
55
		}
56
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
57
			if ($filter['airlines'][0] != '') {
58
					$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_icao IN ('".implode("','",$filter['airlines'])."')) so ON so.flightaware_id = spotter_output.flightaware_id";
59
			}
60
		}
61
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
62
			$filter_query_join .= " INNER JOIN (SELECT flightaware_id FROM spotter_output WHERE spotter_output.airline_type = '".$filter['airlinestype']."') sa ON sa.flightaware_id = spotter_output.flightaware_id ";
63
		}
64
		if (isset($filter['alliance']) && !empty($filter['alliance'])) {
65
			$filter_query_join .= " INNER JOIN (SELECT icao FROM airlines WHERE alliance = '".$filter['alliance']."') sal ON sal.icao = spotter_output.airline_icao ";
66
		}
67
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
68
				$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";
69
			}
70
		if (isset($filter['source']) && !empty($filter['source'])) {
71
			$filter_query_where = " WHERE format_source IN ('".implode("','",$filter['source'])."')";
72
		}
73
		if (isset($filter['ident']) && !empty($filter['ident'])) {
74
			$filter_query_where = " WHERE ident = '".$filter['ident']."'";
75
		}
76
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
77
			if ($filter_query_where == '') {
78
				$filter_query_where = " WHERE format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
79
			} else {
80
				$filter_query_where .= " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
81
			}
82
		}
83
		if ($filter_query_where == '' && $where) $filter_query_where = ' WHERE';
84
		elseif ($filter_query_where != '' && $and) $filter_query_where .= ' AND';
85
		$filter_query = $filter_query_join.$filter_query_where;
86
		return $filter_query;
87
	}
88
89
	/**
90
	* Executes the SQL statements to get the spotter information
91
	*
92
	* @param String $query the SQL query
93
	* @param Array $params parameter of the query
94
	* @param String $limitQuery the limit query
95
	* @return Array the spotter information
96
	*
97
	*/
98
	public function getDataFromDB($query, $params = array(), $limitQuery = '',$schedules = false)
99
	{
100
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalAirlinesSource, $globalVAM;
101
		$Image = new Image($this->db);
102
		$Schedule = new Schedule($this->db);
103
		$ACARS = new ACARS($this->db);
104
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
105
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
106
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
107
		if (!isset($globalVAM)) $globalVAM = FALSE;
108
		date_default_timezone_set('UTC');
109
		
110
		if (!is_string($query))
111
		{
112
			return false;
113
		}
114
		
115
		if ($limitQuery != "")
116
		{
117
			if (!is_string($limitQuery))
118
			{
119
				return false;
120
			}
121
		}
122
123
		
124
		try {
125
			$sth = $this->db->prepare($query.$limitQuery);
126
			$sth->execute($params);
127
		} catch (PDOException $e) {
128
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
129
			exit();
130
		}
131
		
132
	//	$num_rows = count($sth->fetchAll());
133
		$num_rows = 0;
134
135
		$spotter_array = array();
136
		
137
138
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
139
		{
140
			$num_rows++;
141
			$temp_array = array();
142
			if (isset($row['spotter_live_id'])) {
143
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
144
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
145
			} elseif (isset($row['spotter_archive_id'])) {
146
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
147
			} elseif (isset($row['spotter_archive_output_id'])) {
148
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
149
			} elseif (isset($row['spotter_id'])) {
150
				$temp_array['spotter_id'] = $row['spotter_id'];
151
			} else {
152
				$temp_array['spotter_id'] = '';
153
			}
154
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
155
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
156
			$temp_array['ident'] = $row['ident'];
157
			if (isset($row['registration']) && $row['registration'] != '') {
158
				$temp_array['registration'] = $row['registration'];
159
			} elseif (isset($temp_array['modes'])) {
160
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
161
			} else $temp_array['registration'] = '';
162
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
163
			
164
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
165
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
166
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
167
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
168
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
169
			/*
170
			if (Connection->tableExists('countries')) {
171
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
172
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
173
				    $temp_array['country'] = $country_info['name'];
174
				    $temp_array['country_iso2'] = $country_info['iso2'];
175
				}
176
			}
177
			*/
178
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
179
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
180
			if (isset($row['route_stop'])) {
181
				$temp_array['route_stop'] = $row['route_stop'];
182
				if ($row['route_stop'] != '') {
183
					$allroute = explode(' ',$row['route_stop']);
184
			
185
					foreach ($allroute as $route) {
186
						$route_airport_array = $this->getAllAirportInfo($route);
187
						if (isset($route_airport_array[0]['name'])) {
188
							$route_stop_details = array();
189
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
190
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
191
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
192
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
193
							$temp_array['route_stop_details'][] = $route_stop_details;
194
						}
195
					}
196
				}
197
			}
198
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
199
			if (isset($row['heading'])) {
200
				$temp_array['heading'] = $row['heading'];
201
				$heading_direction = $this->parseDirection($row['heading']);
202
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
203
			}
204
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
205
			$temp_array['image'] = "";
206
			$temp_array['image_thumbnail'] = "";
207
			$temp_array['image_source'] = "";
208
			$temp_array['image_copyright'] = "";
209
 
210
			if (isset($row['highlight'])) {
211
				$temp_array['highlight'] = $row['highlight'];
212
			} else $temp_array['highlight'] = '';
213
			
214
			if (isset($row['date'])) {
215
				$dateArray = $this->parseDateString($row['date']);
216
				if ($dateArray['seconds'] < 10)
217
				{
218
					$temp_array['date'] = "a few seconds ago";
219
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
220
				{
221
					$temp_array['date'] = "half a minute ago";
222
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
223
				{
224
					$temp_array['date'] = "about a minute ago";
225
				} elseif ($dateArray['minutes'] < 5)
226
				{
227
					$temp_array['date'] = "a few minutes ago";
228
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
229
				{
230
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
231
				} elseif ($dateArray['hours'] < 2)
232
				{
233
					$temp_array['date'] = "about an hour ago";
234
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
235
				{
236
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
237
				} else {
238
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
239
				}
240
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
241
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
242
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
243
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
244
			}
245
			
246
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
247
				$temp_array['aircraft_name'] = $row['aircraft_name'];
248
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
249
				if (isset($row['aircraft_shadow'])) {
250
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
251
				}
252
			} elseif (isset($row['aircraft_icao'])) {
253
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
254
				if (count($aircraft_array) > 0) {
255
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
256
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
257
				
258
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
259
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
260
					} else $temp_array['aircraft_shadow'] = 'default.png';
261
                                } else {
262
                            		$temp_array['aircraft_shadow'] = 'default.png';
263
					$temp_array['aircraft_name'] = 'N/A';
264
					$temp_array['aircraft_manufacturer'] = 'N/A';
265
                            	}
266
			}
267
			$fromsource = NULL;
268
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $fromsource = $globalAirlinesSource;
269
			elseif (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
270
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
271
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
272
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
273
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
274
				if (!is_numeric(substr($row['ident'], 0, 3))) {
275
					if (is_numeric(substr($row['ident'], 2, 1))) {
276
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
277
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
278
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
279
					} else {
280
						$airline_array = $this->getAllAirlineInfo('NA');
281
					}
282
				} else {
283
					$airline_array = $this->getAllAirlineInfo('NA');
284
				}
285
				if (count($airline_array) > 0) {
286
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
287
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
288
					$temp_array['airline_name'] = $airline_array[0]['name'];
289
					$temp_array['airline_country'] = $airline_array[0]['country'];
290
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
291
					$temp_array['airline_type'] = $airline_array[0]['type'];
292
				}
293
			} else {
294
				$temp_array['airline_icao'] = $row['airline_icao'];
295
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
296
				else $temp_array['airline_iata'] = 'N/A';
297
				$temp_array['airline_name'] = $row['airline_name'];
298
				$temp_array['airline_country'] = $row['airline_country'];
299
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
300
				else $temp_array['airline_callsign'] = 'N/A';
301
				$temp_array['airline_type'] = $row['airline_type'];
302
				if ($temp_array['airline_icao'] != '' && $temp_array['airline_iata'] == 'N/A') {
303
					$airline_array = $this->getAllAirlineInfo($temp_array['airline_icao']);
304
					if (count($airline_array) > 0) {
305
						$temp_array['airline_icao'] = $airline_array[0]['icao'];
306
						$temp_array['airline_iata'] = $airline_array[0]['iata'];
307
						$temp_array['airline_name'] = $airline_array[0]['name'];
308
						$temp_array['airline_country'] = $airline_array[0]['country'];
309
						$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
310
						$temp_array['airline_type'] = $airline_array[0]['type'];
311
					}
312
				}
313
			}
314
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
315
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
316
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
317
				if (count($acars_array) > 0) {
318
					$temp_array['acars'] = $acars_array;
319
					//print_r($acars_array);
320
				}
321
			}
322
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
323
				$temp_array['aircraft_owner'] = $row['owner_name'];
324
			}
325
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !$globalVAM && !isset($temp_array['aircraft_owner'])) {
326
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
327
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
328
				$temp_array['aircraft_base'] = $owner_info['base'];
329
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
330
			}
331
332
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
333
			{
334
				if ($globalIVAO) {
335
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
336
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
337
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
338
				if (count($image_array) > 0) {
339
					$temp_array['image'] = $image_array[0]['image'];
340
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
341
					$temp_array['image_source'] = $image_array[0]['image_source'];
342
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
343
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
344
						$planespotter_url_array = explode("_", $temp_array['image']);
345
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
346
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
347
					 }
348
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
349
				}
350
			}
351
352
353
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
354
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
355
			}
356
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
357
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
358
			}
359
			
360
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS) && (!isset($globalVAM) || !$globalVAM)) {
361
				if ($schedules === true) {
362
					$schedule_array = $Schedule->getSchedule($temp_array['ident']);
363
					//print_r($schedule_array);
364
					if (count($schedule_array) > 0) {
365
						if ($schedule_array['departure_airport_icao'] != '') {
366
							$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
367
							$temp_array['departure_airport'] = $row['departure_airport_icao'];
368
						}
369
						if ($schedule_array['arrival_airport_icao'] != '') {
370
							$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
371
							$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
372
						}
373
						$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
374
						$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
375
					}
376
				}
377
			} else {
378
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
379
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
380
				}
381
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
382
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
383
				}
384
			}
385
			
386
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
387
			if ($row['departure_airport_icao'] != '') {
388
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
389
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
390
			/*
391
			} elseif ($row['departure_airport_name'] != '') {
392
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
393
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
394
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
395
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
396
			*/
397
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
398
			if (isset($departure_airport_array[0]['name'])) {
399
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
400
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
401
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
402
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
403
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
404
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
405
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
406
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
407
			}
408
409
			/*
410
			if (isset($row['departure_airport_time'])) {
411
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
412
			}
413
			*/
414
			
415
			if ($row['arrival_airport_icao'] != '') {
416
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
417
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
418
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
419
			if (isset($arrival_airport_array[0]['name'])) {
420
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
421
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
422
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
423
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
424
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
425
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
426
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
427
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
428
			}
429
			/*
430
			if (isset($row['arrival_airport_time'])) {
431
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
432
			}
433
			*/
434
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
435
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
436
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
437
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
438
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
439
			if (isset($row['squawk'])) {
440
				$temp_array['squawk'] = $row['squawk'];
441
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
442
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
443
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
444
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
445
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
446
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
447
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
448
			}
449
    			
450
			$temp_array['query_number_rows'] = $num_rows;
451
			
452
			$spotter_array[] = $temp_array;
453
		}
454
		if ($num_rows == 0) return array();
455
		$spotter_array[0]['query_number_rows'] = $num_rows;
456
		return $spotter_array;
457
	}	
458
	
459
	
460
	/**
461
	* Gets all the spotter information
462
	*
463
	* @return Array the spotter information
464
	*
465
	*/
466
	public function searchSpotterData($q = '', $registration = '', $aircraft_icao = '', $aircraft_manufacturer = '', $highlights = '', $airline_icao = '', $airline_country = '', $airline_type = '', $airport = '', $airport_country = '', $callsign = '', $departure_airport_route = '', $arrival_airport_route = '', $owner = '',$pilot_id = '',$pilot_name = '',$altitude = '', $date_posted = '', $limit = '', $sort = '', $includegeodata = '',$origLat = '',$origLon = '',$dist = '',$filters = array())
467
	{
468
		global $globalTimezone, $globalDBdriver;
469
		require_once(dirname(__FILE__).'/class.Translation.php');
470
		$Translation = new Translation();
471
472
		date_default_timezone_set('UTC');
473
474
		$query_values = array();
475
		$additional_query = '';
476
		$filter_query = $this->getFilter($filters,true,true);
477
		if ($q != "")
478
		{
479
			if (!is_string($q))
480
			{
481
				return false;
482
			} else {
483
				$q_array = explode(" ", $q);
484
				foreach ($q_array as $q_item){
485
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
486
					$additional_query .= " AND (";
487
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
488
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
489
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
490
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
491
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
492
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
493
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
494
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
495
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
496
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
497
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
498
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
499
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
500
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
501
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
502
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
503
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
504
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
505
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
506
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
507
					$translate = $Translation->ident2icao($q_item);
508
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
509
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
510
					$additional_query .= ")";
511
				}
512
			}
513
		}
514
515
		if ($registration != "")
516
		{
517
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
518
			if (!is_string($registration))
519
			{
520
				return false;
521
			} else {
522
				$additional_query .= " AND spotter_output.registration = :registration";
523
				$query_values = array_merge($query_values,array(':registration' => $registration));
524
			}
525
		}
526
527
		if ($aircraft_icao != "")
528
		{
529
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
530
			if (!is_string($aircraft_icao))
531
			{
532
				return false;
533
			} else {
534
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
535
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
536
			}
537
		}
538
539
		if ($aircraft_manufacturer != "")
540
		{
541
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
542
			if (!is_string($aircraft_manufacturer))
543
			{
544
				return false;
545
			} else {
546
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
547
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
548
			}
549
		}
550
551
		if ($highlights == "true")
552
		{
553
			if (!is_string($highlights))
554
			{
555
				return false;
556
			} else {
557
				$additional_query .= " AND (spotter_output.highlight <> '')";
558
			}
559
		}
560
561
		if ($airline_icao != "")
562
		{
563
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
564
			if (!is_string($airline_icao))
565
			{
566
				return false;
567
			} else {
568
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
569
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
570
			}
571
		}
572
573
		if ($airline_country != "")
574
		{
575
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
576
			if (!is_string($airline_country))
577
			{
578
				return false;
579
			} else {
580
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
581
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
582
			}
583
		}
584
585
		if ($airline_type != "")
586
		{
587
			if (!is_string($airline_type))
588
			{
589
				return false;
590
			} else {
591
				if ($airline_type == "passenger")
592
				{
593
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
594
				}
595
				if ($airline_type == "cargo")
596
				{
597
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
598
				}
599
				if ($airline_type == "military")
600
				{
601
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
602
				}
603
			}
604
		}
605
606
		if ($airport != "")
607
		{
608
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
609
			if (!is_string($airport))
610
			{
611
				return false;
612
			} else {
613
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
614
				$query_values = array_merge($query_values,array(':airport' => $airport));
615
			}
616
		}
617
618
		if ($airport_country != "")
619
		{
620
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
621
			if (!is_string($airport_country))
622
			{
623
				return false;
624
			} else {
625
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
626
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
627
			}
628
		}
629
    
630
		if ($callsign != "")
631
		{
632
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
633
			if (!is_string($callsign))
634
			{
635
				return false;
636
			} else {
637
				$translate = $Translation->ident2icao($callsign);
638
				if ($translate != $callsign) {
639
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
640
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
641
				} else {
642
					$additional_query .= " AND spotter_output.ident = :callsign";
643
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
644
				}
645
			}
646
		}
647
648
		if ($owner != "")
649
		{
650
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
651
			if (!is_string($owner))
652
			{
653
				return false;
654
			} else {
655
				$additional_query .= " AND spotter_output.owner_name = :owner";
656
				$query_values = array_merge($query_values,array(':owner' => $owner));
657
			}
658
		}
659
660
		if ($pilot_name != "")
661
		{
662
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
663
			if (!is_string($pilot_name))
664
			{
665
				return false;
666
			} else {
667
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
668
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
669
			}
670
		}
671
672
		if ($pilot_id != "")
673
		{
674
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
675
			if (!is_string($pilot_id))
676
			{
677
				return false;
678
			} else {
679
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
680
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
681
			}
682
		}
683
684
		if ($departure_airport_route != "")
685
		{
686
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
687
			if (!is_string($departure_airport_route))
688
			{
689
				return false;
690
			} else {
691
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
692
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
693
			}
694
		}
695
696
		if ($arrival_airport_route != "")
697
		{
698
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
699
			if (!is_string($arrival_airport_route))
700
			{
701
				return false;
702
			} else {
703
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
704
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
705
			}
706
		}
707
708
		if ($altitude != "")
709
		{
710
			$altitude_array = explode(",", $altitude);
711
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
712
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
713
714
			if ($altitude_array[1] != "")
715
			{                
716
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
717
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
718
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
719
			} else {
720
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
721
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
722
			}
723
		}
724
725
		if ($date_posted != "")
726
		{
727
			$date_array = explode(",", $date_posted);
728
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
729
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
730
731
			if ($globalTimezone != '') {
732
				date_default_timezone_set($globalTimezone);
733
				$datetime = new DateTime();
734
				$offset = $datetime->format('P');
735
			} else $offset = '+00:00';
736
737
			if ($date_array[1] != "")
738
			{
739
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
740
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
741
				if ($globalDBdriver == 'mysql') {
742
					$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]."' ";
743
				} else {
744
					$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]."' ";
745
				}
746
			} else {
747
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
748
				if ($globalDBdriver == 'mysql') {
749
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
750
				} else {
751
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
752
				}
753
			}
754
		}
755
756
		if ($limit != "")
757
		{
758
			$limit_array = explode(",", $limit);
759
			
760
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
761
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
762
			
763
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
764
			{
765
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
766
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
767
			} else $limit_query = "";
768
		} else $limit_query = "";
769
770
771
		if ($sort != "")
772
		{
773
			$search_orderby_array = $this->getOrderBy();
774
			$orderby_query = $search_orderby_array[$sort]['sql'];
775
		} else {
776
			if ($origLat != "" && $origLon != "" && $dist != "") {
777
				$orderby_query = " ORDER BY distance ASC";
778
			} else {
779
				$orderby_query = " ORDER BY spotter_output.date DESC";
780
			}
781
		}
782
783
		if ($includegeodata == "true")
784
		{
785
			$additional_query .= " AND spotter_output.waypoints <> ''";
786
		}
787
788
789
		if ($origLat != "" && $origLon != "" && $dist != "") {
790
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
791
792
			if ($globalDBdriver == 'mysql') {
793
				$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 
794
						FROM spotter_archive,spotter_output".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND spotter_archive.longitude between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat)*69)) and spotter_archive.latitude between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
795
						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;
796
			} else {
797
				$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 
798
						FROM spotter_archive,spotter_output".$filter_query." spotter_output.flightaware_id = spotter_archive.flightaware_id AND spotter_output.ident <> '' ".$additional_query."AND CAST(spotter_archive.longitude as double precision) between ($origLon-$dist/cos(radians($origLat))*69) and ($origLon+$dist/cos(radians($origLat))*69) and CAST(spotter_archive.latitude as double precision) between ($origLat-($dist/69)) and ($origLat+($dist/69)) 
799
						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;
800
			}
801
		} else {		
802
			$query  = "SELECT spotter_output.* FROM spotter_output".$filter_query." spotter_output.ident <> '' 
803
					".$additional_query."
804
					".$orderby_query;
805
		}
806
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
807
		return $spotter_array;
808
	}
809
	
810
	
811
	/**
812
	* Gets all the spotter information based on the latest data entry
813
	*
814
	* @return Array the spotter information
815
	*
816
	*/
817
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
818
	{
819
		global $global_query;
820
		
821
		date_default_timezone_set('UTC');
822
823
		$filter_query = $this->getFilter($filter);
824
		
825
		if ($limit != "")
826
		{
827
			$limit_array = explode(",", $limit);
828
			
829
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
830
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
831
			
832
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
833
			{
834
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
835
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
836
			} else $limit_query = "";
837
		} else $limit_query = "";
838
		
839
		if ($sort != "")
840
		{
841
			$search_orderby_array = $this->getOrderBy();
842
			$orderby_query = $search_orderby_array[$sort]['sql'];
843
		} else {
844
			$orderby_query = " ORDER BY spotter_output.date DESC";
845
		}
846
847
		$query  = $global_query.$filter_query." ".$orderby_query;
848
849
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query,true);
850
851
		return $spotter_array;
852
	}
853
    
854
    
855
    /**
856
	* Gets all the spotter information based on a user's latitude and longitude
857
	*
858
	* @return Array the spotter information
859
	*
860
	*/
861
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
862
	{
863
		date_default_timezone_set('UTC');
864
		$limit_query = '';
865
		if ($lat != "")
866
		{
867
			if (!is_numeric($lat))
868
			{
869
				return false;
870
			}
871
		}
872
        
873
		if ($lng != "")
874
		{
875
			if (!is_numeric($lng))
876
			{
877
				return false;
878
			}
879
		}
880
		
881
		if ($radius != "")
882
		{
883
			if (!is_numeric($radius))
884
			{
885
				return false;
886
			}
887
		}
888
    		$additional_query = '';
889
		if ($interval != "")
890
		{
891
			if (!is_string($interval))
892
			{
893
				return false;
894
			} else {
895
				if ($interval == "30m"){
896
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
897
				} else if ($interval == "1h"){
898
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
899
				} else if ($interval == "3h"){
900
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
901
				} else if ($interval == "6h"){
902
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
903
				} else if ($interval == "12h"){
904
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
905
				} else if ($interval == "24h"){
906
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
907
				} else if ($interval == "7d"){
908
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
909
				} else if ($interval == "30d"){
910
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
911
				} 
912
			}
913
		}
914
915
		$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 
916
                   WHERE spotter_output.latitude <> '' 
917
				   AND spotter_output.longitude <> '' 
918
                   ".$additional_query."
919
                   HAVING distance < :radius  
920
				   ORDER BY distance";
921
922
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
923
924
		return $spotter_array;
925
	}
926
    
927
    
928
    /**
929
	* Gets all the spotter information sorted by the newest aircraft type
930
	*
931
	* @return Array the spotter information
932
	*
933
	*/
934
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
935
	{
936
		global $global_query;
937
		
938
		date_default_timezone_set('UTC');
939
940
		$filter_query = $this->getFilter($filter,true,true);
941
942
		$limit_query = '';
943
		if ($limit != "")
944
		{
945
			$limit_array = explode(",", $limit);
946
			
947
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
948
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
949
			
950
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
951
			{
952
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
953
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
954
			}
955
		}
956
		
957
		if ($sort != "")
958
		{
959
			$search_orderby_array = $this->getOrderBy();
960
			$orderby_query = $search_orderby_array[$sort]['sql'];
961
		} else {
962
			$orderby_query = " ORDER BY spotter_output.date DESC ";
963
		}
964
965
		$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;
966
967
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
968
969
		return $spotter_array;
970
	}
971
    
972
    
973
	/**
974
	* Gets all the spotter information sorted by the newest aircraft registration
975
	*
976
	* @return Array the spotter information
977
	*
978
	*/
979
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
980
	{
981
		global $global_query;
982
		
983
		date_default_timezone_set('UTC');
984
		$filter_query = $this->getFilter($filter,true,true);
985
986
		$limit_query = '';
987
		if ($limit != "")
988
		{
989
			$limit_array = explode(",", $limit);
990
			
991
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
992
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
993
			
994
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
995
			{
996
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
997
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
998
			}
999
		}
1000
		
1001
		if ($sort != "")
1002
		{
1003
			$search_orderby_array = $this->getOrderBy();
1004
			$orderby_query = $search_orderby_array[$sort]['sql'];
1005
		} else {
1006
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1007
		}
1008
1009
		$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;
1010
1011
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1012
1013
		return $spotter_array;
1014
	}
1015
1016
1017
	/**
1018
	* Gets all the spotter information sorted by the newest airline
1019
	*
1020
	* @return Array the spotter information
1021
	*
1022
	*/
1023
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
1024
	{
1025
		global $global_query;
1026
		
1027
		date_default_timezone_set('UTC');
1028
		$filter_query = $this->getFilter($filter,true,true);
1029
		
1030
		$limit_query = '';
1031
		if ($limit != "")
1032
		{
1033
			$limit_array = explode(",", $limit);
1034
			
1035
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1036
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1037
			
1038
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1039
			{
1040
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1041
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1042
			}
1043
		}
1044
		
1045
		if ($sort != "")
1046
		{
1047
			$search_orderby_array = $this->getOrderBy();
1048
			$orderby_query = $search_orderby_array[$sort]['sql'];
1049
		} else {
1050
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1051
		}
1052
1053
		$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;
1054
1055
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1056
1057
		return $spotter_array;
1058
	}
1059
    
1060
    
1061
    /**
1062
	* Gets all the spotter information sorted by the newest departure airport
1063
	*
1064
	* @return Array the spotter information
1065
	*
1066
	*/
1067
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1068
	{
1069
		global $global_query;
1070
		
1071
		date_default_timezone_set('UTC');
1072
		
1073
		$filter_query = $this->getFilter($filter,true,true);
1074
		
1075
		$limit_query = '';
1076
		
1077
		if ($limit != "")
1078
		{
1079
			$limit_array = explode(",", $limit);
1080
			
1081
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1082
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1083
			
1084
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1085
			{
1086
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1087
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1088
			}
1089
		}
1090
		
1091
		if ($sort != "")
1092
		{
1093
			$search_orderby_array = $this->getOrderBy();
1094
			$orderby_query = $search_orderby_array[$sort]['sql'];
1095
		} else {
1096
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1097
		}
1098
1099
		$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;
1100
1101
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1102
1103
		return $spotter_array;
1104
	}
1105
1106
1107
	/**
1108
	* Gets all the spotter information sorted by the newest arrival airport
1109
	*
1110
	* @return Array the spotter information
1111
	*
1112
	*/
1113
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1114
	{
1115
		global $global_query;
1116
		
1117
		date_default_timezone_set('UTC');
1118
		$filter_query = $this->getFilter($filter,true,true);
1119
		$limit_query = '';
1120
		if ($limit != "")
1121
		{
1122
			$limit_array = explode(",", $limit);
1123
			
1124
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1125
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1126
			
1127
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1128
			{
1129
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1130
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1131
			}
1132
		}
1133
		
1134
		if ($sort != "")
1135
		{
1136
			$search_orderby_array = $this->getOrderBy();
1137
			$orderby_query = $search_orderby_array[$sort]['sql'];
1138
		} else {
1139
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1140
		}
1141
1142
		$query  = $global_query.$filter_query." spotter_output.arrival_airport_name <> '' AND spotter_output.arrival_airport_icao <> 'NA' AND spotter_output.arrival_airport_icao <> '' GROUP BY spotter_output.arrival_airport_icao,spotter_output.ident,spotter_output.spotter_id, spotter_output.flightaware_id, spotter_output.registration,spotter_output.airline_name,spotter_output.airline_icao,spotter_output.airline_country,spotter_output.airline_type,spotter_output.aircraft_icao,spotter_output.aircraft_name,spotter_output.aircraft_manufacturer,spotter_output.departure_airport_icao,spotter_output.departure_airport_name,spotter_output.departure_airport_city,spotter_output.departure_airport_country,spotter_output.departure_airport_time,spotter_output.arrival_airport_icao,spotter_output.arrival_airport_name,spotter_output.arrival_airport_city,spotter_output.arrival_airport_country,spotter_output.arrival_airport_time,spotter_output.route_stop,spotter_output.date,spotter_output.latitude,spotter_output.longitude,spotter_output.waypoints,spotter_output.altitude,spotter_output.heading,spotter_output.ground_speed,spotter_output.highlight,spotter_output.squawk,spotter_output.ModeS,spotter_output.pilot_id,spotter_output.pilot_name,spotter_output.verticalrate,spotter_output.owner_name,spotter_output.format_source,spotter_output.source_name,spotter_output.ground,spotter_output.last_ground,spotter_output.last_seen,spotter_output.last_latitude,spotter_output.last_longitude,spotter_output.last_altitude,spotter_output.last_ground_speed,spotter_output.real_arrival_airport_icao,spotter_output.real_arrival_airport_time ".$orderby_query;
1143
1144
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1145
1146
		return $spotter_array;
1147
	}
1148
	
1149
1150
	/**
1151
	* Gets all the spotter information based on the spotter id
1152
	*
1153
	* @return Array the spotter information
1154
	*
1155
	*/
1156
	public function getSpotterDataByID($id = '')
1157
	{
1158
		global $global_query;
1159
		
1160
		date_default_timezone_set('UTC');
1161
		if ($id == '') return array();
1162
		$additional_query = "spotter_output.spotter_id = :id";
1163
		$query_values = array(':id' => $id);
1164
1165
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1166
		$query  = $global_query." WHERE ".$additional_query." ";
1167
1168
		$spotter_array = $this->getDataFromDB($query,$query_values);
1169
1170
		return $spotter_array;
1171
	}
1172
1173
	
1174
	
1175
	
1176
	/**
1177
	* Gets all the spotter information based on the callsign
1178
	*
1179
	* @return Array the spotter information
1180
	*
1181
	*/
1182
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1183
	{
1184
		global $global_query;
1185
		
1186
		date_default_timezone_set('UTC');
1187
		
1188
		$query_values = array();
1189
		$limit_query = '';
1190
		$additional_query = '';
1191
		if ($ident != "")
1192
		{
1193
			if (!is_string($ident))
1194
			{
1195
				return false;
1196
			} else {
1197
				$additional_query = " AND (spotter_output.ident = :ident)";
1198
				$query_values = array(':ident' => $ident);
1199
			}
1200
		}
1201
		
1202
		if ($limit != "")
1203
		{
1204
			$limit_array = explode(",", $limit);
1205
			
1206
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1207
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1208
			
1209
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1210
			{
1211
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1212
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1213
			}
1214
		}
1215
1216
		if ($sort != "")
1217
		{
1218
			$search_orderby_array = $this->getOrderBy();
1219
			$orderby_query = $search_orderby_array[$sort]['sql'];
1220
		} else {
1221
			$orderby_query = " ORDER BY spotter_output.date DESC";
1222
		}
1223
1224
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1225
1226
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1227
1228
		return $spotter_array;
1229
	}
1230
	
1231
	
1232
	
1233
	/**
1234
	* Gets all the spotter information based on the aircraft type
1235
	*
1236
	* @return Array the spotter information
1237
	*
1238
	*/
1239
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1240
	{
1241
		global $global_query;
1242
		
1243
		date_default_timezone_set('UTC');
1244
		
1245
		$query_values = array();
1246
		$limit_query = '';
1247
		$additional_query = '';
1248
		$filter_query = $this->getFilter($filter,true,true);
1249
		
1250
		if ($aircraft_type != "")
1251
		{
1252
			if (!is_string($aircraft_type))
1253
			{
1254
				return false;
1255
			} else {
1256
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1257
				$query_values = array(':aircraft_type' => $aircraft_type);
1258
			}
1259
		}
1260
		
1261
		if ($limit != "")
1262
		{
1263
			$limit_array = explode(",", $limit);
1264
			
1265
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1266
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1267
			
1268
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1269
			{
1270
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1271
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1272
			}
1273
		}
1274
1275
		if ($sort != "")
1276
		{
1277
			$search_orderby_array = $this->getOrderBy();
1278
			$orderby_query = $search_orderby_array[$sort]['sql'];
1279
		} else {
1280
			$orderby_query = " ORDER BY spotter_output.date DESC";
1281
		}
1282
1283
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1284
1285
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1286
1287
		return $spotter_array;
1288
	}
1289
	
1290
	
1291
	/**
1292
	* Gets all the spotter information based on the aircraft registration
1293
	*
1294
	* @return Array the spotter information
1295
	*
1296
	*/
1297
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1298
	{
1299
		global $global_query;
1300
		
1301
		date_default_timezone_set('UTC');
1302
		
1303
		$query_values = array();
1304
		$limit_query = '';
1305
		$additional_query = '';
1306
		
1307
		if ($registration != "")
1308
		{
1309
			if (!is_string($registration))
1310
			{
1311
				return false;
1312
			} else {
1313
				$additional_query = " (spotter_output.registration = :registration)";
1314
				$query_values = array(':registration' => $registration);
1315
			}
1316
		}
1317
		
1318
		if ($limit != "")
1319
		{
1320
			$limit_array = explode(",", $limit);
1321
			
1322
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1323
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1324
			
1325
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1326
			{
1327
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1328
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1329
			}
1330
		}
1331
1332
		if ($sort != "")
1333
		{
1334
			$search_orderby_array = $this->getOrderBy();
1335
			$orderby_query = $search_orderby_array[$sort]['sql'];
1336
		} else {
1337
			$orderby_query = " ORDER BY spotter_output.date DESC";
1338
		}
1339
		$filter_query = $this->getFilter($filter,true,true);
1340
1341
		//$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1342
		$query = $global_query.$filter_query." ".$additional_query." ".$orderby_query;
1343
1344
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1345
1346
		return $spotter_array;
1347
	}
1348
1349
	
1350
	
1351
	
1352
	/**
1353
	* Gets all the spotter information based on the airline
1354
	*
1355
	* @return Array the spotter information
1356
	*
1357
	*/
1358
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '',$filters = array())
1359
	{
1360
		global $global_query;
1361
		
1362
		date_default_timezone_set('UTC');
1363
1364
		$query_values = array();
1365
		$limit_query = '';
1366
		$additional_query = '';
1367
		$filter_query = $this->getFilter($filters,true,true);
1368
		
1369
		if ($airline != "")
1370
		{
1371
			if (!is_string($airline))
1372
			{
1373
				return false;
1374
			} else {
1375
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1376
				$query_values = array(':airline' => $airline);
1377
			}
1378
		}
1379
		
1380
		if ($limit != "")
1381
		{
1382
			$limit_array = explode(",", $limit);
1383
			
1384
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1385
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1386
			
1387
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1388
			{
1389
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1390
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1391
			}
1392
		}
1393
		
1394
		if ($sort != "")
1395
		{
1396
			$search_orderby_array = $this->getOrderBy();
1397
			$orderby_query = $search_orderby_array[$sort]['sql'];
1398
		} else {
1399
			$orderby_query = " ORDER BY spotter_output.date DESC";
1400
		}
1401
1402
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1403
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1404
1405
		return $spotter_array;
1406
	}
1407
	
1408
	
1409
	/**
1410
	* Gets all the spotter information based on the airport
1411
	*
1412
	* @return Array the spotter information
1413
	*
1414
	*/
1415
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '',$filters = array())
1416
	{
1417
		global $global_query;
1418
		
1419
		date_default_timezone_set('UTC');
1420
		$query_values = array();
1421
		$limit_query = '';
1422
		$additional_query = '';
1423
		$filter_query = $this->getFilter($filters,true,true);
1424
		
1425
		if ($airport != "")
1426
		{
1427
			if (!is_string($airport))
1428
			{
1429
				return false;
1430
			} else {
1431
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1432
				$query_values = array(':airport' => $airport);
1433
			}
1434
		}
1435
		
1436
		if ($limit != "")
1437
		{
1438
			$limit_array = explode(",", $limit);
1439
			
1440
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1441
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1442
			
1443
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1444
			{
1445
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1446
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1447
			}
1448
		}
1449
		
1450
		if ($sort != "")
1451
		{
1452
			$search_orderby_array = $this->getOrderBy();
1453
			$orderby_query = $search_orderby_array[$sort]['sql'];
1454
		} else {
1455
			$orderby_query = " ORDER BY spotter_output.date DESC";
1456
		}
1457
1458
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." AND ((spotter_output.departure_airport_icao <> 'NA') AND (spotter_output.arrival_airport_icao <> 'NA')) ".$orderby_query;
1459
1460
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1461
1462
		return $spotter_array;
1463
	}
1464
1465
1466
1467
	/**
1468
	* Gets all the spotter information based on the date
1469
	*
1470
	* @return Array the spotter information
1471
	*
1472
	*/
1473
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1474
	{
1475
		global $global_query, $globalTimezone, $globalDBdriver;
1476
		
1477
		$query_values = array();
1478
		$limit_query = '';
1479
		$additional_query = '';
1480
1481
		$filter_query = $this->getFilter($filter,true,true);
1482
		
1483
		if ($date != "")
1484
		{
1485
			if ($globalTimezone != '') {
1486
				date_default_timezone_set($globalTimezone);
1487
				$datetime = new DateTime($date);
1488
				$offset = $datetime->format('P');
1489
			} else {
1490
				date_default_timezone_set('UTC');
1491
				$datetime = new DateTime($date);
1492
				$offset = '+00:00';
1493
			}
1494
			if ($globalDBdriver == 'mysql') {
1495
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1496
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1497
			} elseif ($globalDBdriver == 'pgsql') {
1498
				//$globalTimezone = 'UTC';
1499
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1500
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1501
				//$additional_query = " AND to_char(spotter_output.date,'YYYY-mm-dd') = :date ";
1502
				//$query_values = array(':date' => $datetime->format('Y-m-d'));
1503
			}
1504
		}
1505
		
1506
		if ($limit != "")
1507
		{
1508
			$limit_array = explode(",", $limit);
1509
			
1510
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1511
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1512
			
1513
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1514
			{
1515
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1516
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1517
			}
1518
		}
1519
1520
		if ($sort != "")
1521
		{
1522
			$search_orderby_array = $this->getOrderBy();
1523
			$orderby_query = $search_orderby_array[$sort]['sql'];
1524
		} else {
1525
			$orderby_query = " ORDER BY spotter_output.date DESC";
1526
		}
1527
1528
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query.$orderby_query;
1529
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1530
		return $spotter_array;
1531
	}
1532
1533
1534
1535
	/**
1536
	* Gets all the spotter information based on the country name
1537
	*
1538
	* @return Array the spotter information
1539
	*
1540
	*/
1541
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '',$filters = array())
1542
	{
1543
		global $global_query;
1544
		
1545
		date_default_timezone_set('UTC');
1546
		
1547
		$query_values = array();
1548
		$limit_query = '';
1549
		$additional_query = '';
1550
		$filter_query = $this->getFilter($filters,true,true);
1551
		if ($country != "")
1552
		{
1553
			if (!is_string($country))
1554
			{
1555
				return false;
1556
			} else {
1557
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1558
				$additional_query .= " OR spotter_output.airline_country = :country";
1559
				$query_values = array(':country' => $country);
1560
			}
1561
		}
1562
		
1563
		if ($limit != "")
1564
		{
1565
			$limit_array = explode(",", $limit);
1566
			
1567
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1568
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1569
			
1570
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1571
			{
1572
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1573
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1574
			}
1575
		}
1576
					
1577
		if ($sort != "")
1578
		{
1579
			$search_orderby_array = $this->getOrderBy();
1580
			$orderby_query = $search_orderby_array[$sort]['sql'];
1581
		} else {
1582
			$orderby_query = " ORDER BY spotter_output.date DESC";
1583
		}
1584
1585
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1586
1587
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1588
1589
		return $spotter_array;
1590
	}	
1591
	
1592
	
1593
	/**
1594
	* Gets all the spotter information based on the manufacturer name
1595
	*
1596
	* @return Array the spotter information
1597
	*
1598
	*/
1599
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '', $filters = array())
1600
	{
1601
		global $global_query;
1602
		
1603
		date_default_timezone_set('UTC');
1604
		
1605
		$query_values = array();
1606
		$additional_query = '';
1607
		$limit_query = '';
1608
		$filter_query = $this->getFilter($filters,true,true);
1609
		
1610
		if ($aircraft_manufacturer != "")
1611
		{
1612
			if (!is_string($aircraft_manufacturer))
1613
			{
1614
				return false;
1615
			} else {
1616
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1617
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1618
			}
1619
		}
1620
		
1621
		if ($limit != "")
1622
		{
1623
			$limit_array = explode(",", $limit);
1624
			
1625
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1626
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1627
			
1628
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1629
			{
1630
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1631
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1632
			}
1633
		}
1634
1635
		if ($sort != "")
1636
		{
1637
			$search_orderby_array = $this->getOrderBy();
1638
			$orderby_query = $search_orderby_array[$sort]['sql'];
1639
		} else {
1640
			$orderby_query = " ORDER BY spotter_output.date DESC";
1641
		}
1642
1643
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1644
1645
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1646
1647
		return $spotter_array;
1648
	}
1649
1650
1651
  
1652
  
1653
	/**
1654
	* Gets a list of all aircraft that take a route
1655
	*
1656
	* @param String $departure_airport_icao ICAO code of departure airport
1657
	* @param String $arrival_airport_icao ICAO code of arrival airport
1658
	* @return Array the spotter information
1659
	*
1660
	*/
1661
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '', $filters = array())
1662
	{
1663
		global $global_query;
1664
		
1665
		$query_values = array();
1666
		$additional_query = '';
1667
		$limit_query = '';
1668
		$filter_query = $this->getFilter($filters,true,true);
1669
		if ($departure_airport_icao != "")
1670
		{
1671
			if (!is_string($departure_airport_icao))
1672
			{
1673
				return false;
1674
			} else {
1675
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1676
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1677
				//$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao AND spotter_output.real_departure_airport_icao IS NULL) OR spotter_output.real_departure_airport_icao = :departure_airport_icao";
1678
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1679
			}
1680
		}
1681
		
1682
		if ($arrival_airport_icao != "")
1683
		{
1684
			if (!is_string($arrival_airport_icao))
1685
			{
1686
				return false;
1687
			} else {
1688
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1689
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1690
				//$additional_query .= " AND ((spotter_output.arrival_airport_icao = :arrival_airport_icao AND spotter_output.real_arrival_airport_icao IS NULL) OR spotter_output.real_arrival_airport_icao = :arrival_airport_icao)";
1691
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1692
			}
1693
		}
1694
		
1695
		if ($limit != "")
1696
		{
1697
			$limit_array = explode(",", $limit);
1698
			
1699
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1700
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1701
			
1702
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1703
			{
1704
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1705
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1706
			}
1707
		}
1708
	
1709
		if ($sort != "")
1710
		{
1711
			$search_orderby_array = $this->getOrderBy();
1712
			$orderby_query = $search_orderby_array[$sort]['sql'];
1713
		} else {
1714
			$orderby_query = " ORDER BY spotter_output.date DESC";
1715
		}
1716
1717
		$query = $global_query.$filter_query." spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1718
          
1719
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1720
1721
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1722
1723
		return $spotter_array;
1724
	}
1725
	
1726
	
1727
	
1728
	/**
1729
	* Gets all the spotter information based on the special column in the table
1730
	*
1731
	* @return Array the spotter information
1732
	*
1733
	*/
1734
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1735
	{
1736
		global $global_query;
1737
		
1738
		date_default_timezone_set('UTC');
1739
		$filter_query = $this->getFilter($filter,true,true);
1740
		$limit_query = '';
1741
		
1742
		if ($limit != "")
1743
		{
1744
			$limit_array = explode(",", $limit);
1745
			
1746
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1747
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1748
			
1749
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1750
			{
1751
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1752
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1753
			}
1754
		}
1755
		
1756
		if ($sort != "")
1757
		{
1758
			$search_orderby_array = $this->getOrderBy();
1759
			$orderby_query = $search_orderby_array[$sort]['sql'];
1760
		} else {
1761
			$orderby_query = " ORDER BY spotter_output.date DESC";
1762
		}
1763
1764
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' ".$orderby_query;
1765
1766
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1767
1768
		return $spotter_array;
1769
	}
1770
1771
	/**
1772
	* Gets all the highlight based on a aircraft registration
1773
	*
1774
	* @return String the highlight text
1775
	*
1776
	*/
1777
	public function getHighlightByRegistration($registration,$filter = array())
1778
	{
1779
		global $global_query;
1780
		
1781
		date_default_timezone_set('UTC');
1782
		$filter_query = $this->getFilter($filter,true,true);
1783
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1784
		
1785
		$query  = $global_query.$filter_query." spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1786
		$sth = $this->db->prepare($query);
1787
		$sth->execute(array(':registration' => $registration));
1788
1789
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1790
		{
1791
			$highlight = $row['highlight'];
1792
		}
1793
		if (isset($highlight)) return $highlight;
1794
	}
1795
1796
	
1797
	/**
1798
	* Gets the squawk usage from squawk code
1799
	*
1800
	* @param String $squawk squawk code
1801
	* @param String $country country
1802
	* @return String usage
1803
	*
1804
	*/
1805
	public function getSquawkUsage($squawk = '',$country = 'FR')
1806
	{
1807
		
1808
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1809
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1810
1811
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1812
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1813
		
1814
		$sth = $this->db->prepare($query);
1815
		$sth->execute($query_values);
1816
    
1817
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1818
		$sth->closeCursor();
1819
		if (count($row) > 0) {
1820
			return $row['usage'];
1821
		} else return '';
1822
	}
1823
1824
	/**
1825
	* Gets the airport icao from the iata
1826
	*
1827
	* @param String $airport_iata the iata code of the airport
1828
	* @return String airport iata
1829
	*
1830
	*/
1831
	public function getAirportIcao($airport_iata = '')
1832
	{
1833
		
1834
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1835
1836
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1837
		$query_values = array(':airport' => $airport_iata);
1838
		
1839
		$sth = $this->db->prepare($query);
1840
		$sth->execute($query_values);
1841
		
1842
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1843
		$sth->closeCursor();
1844
		if (count($row) > 0) {
1845
			return $row['icao'];
1846
		} else return '';
1847
	}
1848
1849
	/**
1850
	* Gets the airport distance
1851
	*
1852
	* @param String $airport_icao the icao code of the airport
1853
	* @param Float $latitude the latitude
1854
	* @param Float $longitude the longitude
1855
	* @return Float distance to the airport
1856
	*
1857
	*/
1858
	public function getAirportDistance($airport_icao,$latitude,$longitude)
1859
	{
1860
		
1861
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
1862
1863
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
1864
		$query_values = array(':airport' => $airport_icao);
1865
		$sth = $this->db->prepare($query);
1866
		$sth->execute($query_values);
1867
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1868
		$sth->closeCursor();
1869
		if (count($row) > 0) {
1870
			$airport_latitude = $row['latitude'];
1871
			$airport_longitude = $row['longitude'];
1872
			$Common = new Common();
1873
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
1874
		} else return '';
1875
	}
1876
	
1877
	/**
1878
	* Gets the airport info based on the icao
1879
	*
1880
	* @param String $airport the icao code of the airport
1881
	* @return Array airport information
1882
	*
1883
	*/
1884
	public function getAllAirportInfo($airport = '')
1885
	{
1886
		
1887
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
1888
1889
		$query_values = array();
1890
		if ($airport == 'NA') {
1891
			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' => ''));
1892
		} elseif ($airport == '') {
1893
			$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";
1894
		} else {
1895
			$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";
1896
			$query_values = array(':airport' => $airport);
1897
		}
1898
		
1899
		$sth = $this->db->prepare($query);
1900
		$sth->execute($query_values);
1901
		/*
1902
		$airport_array = array();
1903
		$temp_array = array();
1904
		
1905
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1906
		{
1907
			$temp_array['name'] = $row['name'];
1908
			$temp_array['city'] = $row['city'];
1909
			$temp_array['country'] = $row['country'];
1910
			$temp_array['iata'] = $row['iata'];
1911
			$temp_array['icao'] = $row['icao'];
1912
			$temp_array['latitude'] = $row['latitude'];
1913
			$temp_array['longitude'] = $row['longitude'];
1914
			$temp_array['altitude'] = $row['altitude'];
1915
			$temp_array['home_link'] = $row['home_link'];
1916
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
1917
			$temp_array['image'] = $row['image'];
1918
			$temp_array['image_thumb'] = $row['image_thumb'];
1919
1920
			$airport_array[] = $temp_array;
1921
		}
1922
1923
		return $airport_array;
1924
		*/
1925
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1926
	}
1927
	
1928
	/**
1929
	* Gets the airport info based on the country
1930
	*
1931
	* @param Array $countries Airports countries
1932
	* @return Array airport information
1933
	*
1934
	*/
1935
	public function getAllAirportInfobyCountry($countries)
1936
	{
1937
		$lst_countries = '';
1938
		foreach ($countries as $country) {
1939
			$country = filter_var($country,FILTER_SANITIZE_STRING);
1940
			if ($lst_countries == '') {
1941
				$lst_countries = "'".$country."'";
1942
			} else {
1943
				$lst_countries .= ",'".$country."'";
1944
			}
1945
		}
1946
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
1947
		
1948
		$sth = $this->db->prepare($query);
1949
		$sth->execute();
1950
    
1951
		$airport_array = array();
1952
		$temp_array = array();
1953
		
1954
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1955
		{
1956
			$temp_array['name'] = $row['name'];
1957
			$temp_array['city'] = $row['city'];
1958
			$temp_array['country'] = $row['country'];
1959
			$temp_array['iata'] = $row['iata'];
1960
			$temp_array['icao'] = $row['icao'];
1961
			$temp_array['latitude'] = $row['latitude'];
1962
			$temp_array['longitude'] = $row['longitude'];
1963
			$temp_array['altitude'] = $row['altitude'];
1964
1965
			$airport_array[] = $temp_array;
1966
		}
1967
1968
		return $airport_array;
1969
	}
1970
	
1971
	/**
1972
	* Gets airports info based on the coord
1973
	*
1974
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
1975
	* @return Array airport information
1976
	*
1977
	*/
1978
	public function getAllAirportInfobyCoord($coord)
1979
	{
1980
		global $globalDBdriver;
1981
		if (is_array($coord)) {
1982
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1983
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1984
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1985
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1986
		} else return array();
1987
		if ($globalDBdriver == 'mysql') {
1988
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1989
		} else {
1990
			$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'";
1991
		}
1992
		$sth = $this->db->prepare($query);
1993
		$sth->execute();
1994
    
1995
		$airport_array = array();
1996
		
1997
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1998
		{
1999
			$temp_array = $row;
2000
2001
			$airport_array[] = $temp_array;
2002
		}
2003
2004
		return $airport_array;
2005
	}
2006
2007
	/**
2008
	* Gets waypoints info based on the coord
2009
	*
2010
	* @param Array $coord waypoints coord
2011
	* @return Array airport information
2012
	*
2013
	*/
2014
	public function getAllWaypointsInfobyCoord($coord)
2015
	{
2016
		if (is_array($coord)) {
2017
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2018
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2019
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2020
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
2021
		} else return array();
2022
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
2023
		$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.")";
2024
		//$query  = "SELECT waypoints.* FROM waypoints";
2025
		//$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";
2026
		//$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;
2027
		//$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;
2028
		//echo $query;
2029
		
2030
		$sth = $this->db->prepare($query);
2031
		$sth->execute();
2032
    
2033
		$waypoints_array = array();
2034
		
2035
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2036
		{
2037
			$temp_array = $row;
2038
2039
			$waypoints_array[] = $temp_array;
2040
		}
2041
2042
		return $waypoints_array;
2043
	}
2044
	
2045
	
2046
	/**
2047
	* Gets the airline info based on the icao code or iata code
2048
	*
2049
	* @param String $airline_icao the iata code of the airport
2050
	* @return Array airport information
2051
	*
2052
	*/
2053
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
2054
	{
2055
		global $globalUseRealAirlines;
2056
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2057
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
2058
		if ($airline_icao == 'NA') {
2059
			$airline_array = array();
2060
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2061
			return $airline_array;
2062
		} else {
2063
			if (strlen($airline_icao) == 2) {
2064
				if ($fromsource === NULL) {
2065
					$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";
2066
				} else {
2067
					$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";
2068
				}
2069
			} else {
2070
				if ($fromsource === NULL) {
2071
					$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";
2072
				} else {
2073
					$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";
2074
				}
2075
			}
2076
			
2077
			$sth = $this->db->prepare($query);
2078
			if ($fromsource === NULL) {
2079
				$sth->execute(array(':airline_icao' => $airline_icao));
2080
			} else {
2081
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2082
			}
2083
                        /*
2084
			$airline_array = array();
2085
			$temp_array = array();
2086
		
2087
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2088
			{
2089
				$temp_array['name'] = $row['name'];
2090
				$temp_array['iata'] = $row['iata'];
2091
				$temp_array['icao'] = $row['icao'];
2092
				$temp_array['callsign'] = $row['callsign'];
2093
				$temp_array['country'] = $row['country'];
2094
				$temp_array['type'] = $row['type'];
2095
				$airline_array[] = $temp_array;
2096
			}
2097
			return $airline_array;
2098
			*/
2099
			$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2100
			if (empty($result) && $fromsource !== NULL) {
2101
				$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2102
				$sth = $this->db->prepare($query);
2103
				$sth->execute(array(':fromsource' => $fromsource));
2104
				$row = $sth->fetch(PDO::FETCH_ASSOC);
2105
				$sth->closeCursor();
2106
				if ($row['nb'] == 0) $result = $this->getAllAirlineInfo($airline_icao);
2107
			}
2108
			return $result;
2109
		}
2110
	}
2111
	
2112
	/**
2113
	* Gets the airline info based on the airline name
2114
	*
2115
	* @param String $airline_name the name of the airline
2116
	* @return Array airline information
2117
	*
2118
	*/
2119
	public function getAllAirlineInfoByName($airline_name, $fromsource = NULL)
2120
	{
2121
		global $globalUseRealAirlines;
2122
		if (isset($globalUseRealAirlines) && $globalUseRealAirlines) $fromsource = NULL;
2123
		$airline_name = strtolower(filter_var($airline_name,FILTER_SANITIZE_STRING));
2124
		$query  = "SELECT airlines.name, airlines.iata, airlines.icao, airlines.callsign, airlines.country, airlines.type FROM airlines WHERE lower(airlines.name) = :airline_name AND airlines.active = 'Y' AND airlines.forsource IS NULL LIMIT 1";
2125
		$sth = $this->db->prepare($query);
2126
		if ($fromsource === NULL) {
2127
			$sth->execute(array(':airline_name' => $airline_name));
2128
		} else {
2129
			$sth->execute(array(':airline_name' => $airline_name,':fromsource' => $fromsource));
2130
		}
2131
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2132
		if (empty($result) && $fromsource !== NULL) {
2133
			$query = 'SELECT COUNT(*) AS nb FROM airlines WHERE forsource = :fromsource';
2134
			$sth = $this->db->prepare($query);
2135
			$sth->execute(array(':fromsource' => $fromsource));
2136
			$row = $sth->fetch(PDO::FETCH_ASSOC);
2137
			$sth->closeCursor();
2138
			if ($row['nb'] == 0) $result = $this->getAllAirlineInfoByName($airline_name);
2139
		}
2140
		return $result;
2141
	}
2142
	
2143
	
2144
	
2145
	/**
2146
	* Gets the aircraft info based on the aircraft type
2147
	*
2148
	* @param String $aircraft_type the aircraft type
2149
	* @return Array aircraft information
2150
	*
2151
	*/
2152
	public function getAllAircraftInfo($aircraft_type)
2153
	{
2154
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2155
2156
		if ($aircraft_type == 'NA') {
2157
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2158
		}
2159
		$query  = "SELECT aircraft.icao, aircraft.type,aircraft.manufacturer,aircraft.aircraft_shadow, aircraft.official_page, aircraft.aircraft_description, aircraft.engine_type, aircraft.engine_count, aircraft.wake_category FROM aircraft WHERE aircraft.icao = :aircraft_type";
2160
		
2161
		$sth = $this->db->prepare($query);
2162
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2163
		/*
2164
		$aircraft_array = array();
2165
		$temp_array = array();
2166
		
2167
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2168
		{
2169
			$temp_array = array();
2170
			$temp_array['icao'] = $row['icao'];
2171
			$temp_array['type'] = $row['type'];
2172
			$temp_array['manufacturer'] = $row['manufacturer'];
2173
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2174
2175
			$aircraft_array[] = $temp_array;
2176
		}
2177
		return $aircraft_array;
2178
		*/
2179
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2180
	}
2181
2182
	/**
2183
	* Gets the aircraft icao based on the aircraft name/type
2184
	*
2185
	* @param String $aircraft_type the aircraft type
2186
	* @return String aircraft information
2187
	*
2188
	*/
2189
	public function getAircraftIcao($aircraft_type)
2190
	{
2191
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2192
		$all_aircraft = array('737-300' => 'B733',
2193
				'777-200' => 'B772',
2194
				'777-200ER' => 'B772',
2195
				'777-300ER' => 'B77W',
2196
				'c172p' => 'C172',
2197
				'aerostar' => 'AEST',
2198
				'A320-211' => 'A320',
2199
				'747-8i' => 'B748',
2200
				'A380' => 'A388');
2201
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2202
2203
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2204
		$aircraft_type = strtoupper($aircraft_type);
2205
		$sth = $this->db->prepare($query);
2206
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2207
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2208
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2209
		else return '';
2210
	}
2211
	
2212
	/**
2213
	* Gets the aircraft info based on the aircraft modes
2214
	*
2215
	* @param String $aircraft_modes the aircraft ident (hex)
2216
	* @return String aircraft type
2217
	*
2218
	*/
2219
	public function getAllAircraftType($aircraft_modes)
2220
	{
2221
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2222
2223
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes ORDER BY FirstCreated DESC LIMIT 1";
2224
		
2225
		$sth = $this->db->prepare($query);
2226
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2227
2228
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2229
		$sth->closeCursor();
2230
		if (isset($row['icaotypecode'])) {
2231
			return $row['icaotypecode'];
2232
		} else return '';
2233
	}
2234
2235
	/**
2236
	* Gets the aircraft info based on the aircraft registration
2237
	*
2238
	* @param String $registration the aircraft registration
2239
	* @return String aircraft type
2240
	*
2241
	*/
2242
	public function getAllAircraftTypeByRegistration($registration)
2243
	{
2244
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2245
2246
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.registration = :registration ORDER BY FirstCreated DESC LIMIT 1";
2247
		
2248
		$sth = $this->db->prepare($query);
2249
		$sth->execute(array(':registration' => $registration));
2250
2251
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2252
		$sth->closeCursor();
2253
		if (isset($row['icaotypecode'])) {
2254
			return $row['icaotypecode'];
2255
		} else return '';
2256
	}
2257
2258
	/**
2259
	* Gets correct aircraft operator corde
2260
	*
2261
	* @param String $operator the aircraft operator code (callsign)
2262
	* @return String aircraft operator code
2263
	*
2264
	*/
2265
	public function getOperator($operator)
2266
	{
2267
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2268
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2269
		
2270
		$sth = $this->db->prepare($query);
2271
		$sth->execute(array(':operator' => $operator));
2272
2273
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2274
		$sth->closeCursor();
2275
		if (isset($row['operator_correct'])) {
2276
			return $row['operator_correct'];
2277
		} else return $operator;
2278
	}
2279
2280
	/**
2281
	* Gets the aircraft route based on the aircraft callsign
2282
	*
2283
	* @param String $callsign the aircraft callsign
2284
	* @return Array aircraft type
2285
	*
2286
	*/
2287
	public function getRouteInfo($callsign)
2288
	{
2289
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2290
                if ($callsign == '') return array();
2291
		$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";
2292
		
2293
		$sth = $this->db->prepare($query);
2294
		$sth->execute(array(':callsign' => $callsign));
2295
2296
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2297
		$sth->closeCursor();
2298
		if (count($row) > 0) {
2299
			return $row;
2300
		} else return array();
2301
	}
2302
	
2303
	/**
2304
	* Gets the aircraft info based on the aircraft registration
2305
	*
2306
	* @param String $registration the aircraft registration
2307
	* @return Array aircraft information
2308
	*
2309
	*/
2310
	public function getAircraftInfoByRegistration($registration)
2311
	{
2312
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2313
2314
		$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";
2315
		
2316
		$sth = $this->db->prepare($query);
2317
		$sth->execute(array(':registration' => $registration));
2318
2319
		$aircraft_array = array();
2320
		$temp_array = array();
2321
		
2322
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2323
		{
2324
			$temp_array['airline_icao'] = $row['airline_icao'];
2325
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2326
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2327
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2328
2329
			$aircraft_array[] = $temp_array;
2330
		}
2331
2332
		return $aircraft_array;
2333
	}
2334
	
2335
	/**
2336
	* Gets the aircraft owner & base based on the aircraft registration
2337
	*
2338
	* @param String $registration the aircraft registration
2339
	* @return Array aircraft information
2340
	*
2341
	*/
2342
	public function getAircraftOwnerByRegistration($registration)
2343
	{
2344
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2345
		$Connection = new Connection($this->db);
2346
		if ($Connection->tableExists('aircraft_owner')) {
2347
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2348
			$sth = $this->db->prepare($query);
2349
			$sth->execute(array(':registration' => $registration));
2350
			$result = $sth->fetch(PDO::FETCH_ASSOC);
2351
			$sth->closeCursor();
2352
			return $result;
2353
		} else return array();
2354
	}
2355
	
2356
  
2357
  /**
2358
	* Gets all flights (but with only little info)
2359
	*
2360
	* @return Array basic flight information
2361
	*
2362
	*/
2363
	public function getAllFlightsforSitemap()
2364
	{
2365
		//$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 ";
2366
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2367
		
2368
		$sth = $this->db->prepare($query);
2369
		$sth->execute();
2370
                  /*
2371
		$flight_array = array();
2372
		$temp_array = array();
2373
		
2374
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2375
		{
2376
			$temp_array['spotter_id'] = $row['spotter_id'];
2377
//			$temp_array['ident'] = $row['ident'];
2378
//			$temp_array['airline_name'] = $row['airline_name'];
2379
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2380
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2381
			//$temp_array['image'] = $row['image'];
2382
2383
			$flight_array[] = $temp_array;
2384
		}
2385
2386
		return $flight_array;
2387
		*/
2388
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2389
	}
2390
  
2391
	/**
2392
	* Gets a list of all aircraft manufacturers
2393
	*
2394
	* @return Array list of aircraft types
2395
	*
2396
	*/
2397
	public function getAllManufacturers()
2398
	{
2399
		/*
2400
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2401
								FROM spotter_output
2402
								WHERE spotter_output.aircraft_manufacturer <> '' 
2403
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2404
		  */
2405
		
2406
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2407
		$sth = $this->db->prepare($query);
2408
		$sth->execute();
2409
2410
		$manufacturer_array = array();
2411
		$temp_array = array();
2412
		
2413
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2414
		{
2415
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2416
2417
			$manufacturer_array[] = $temp_array;
2418
		}
2419
2420
		return $manufacturer_array;
2421
	}
2422
  
2423
  
2424
  /**
2425
	* Gets a list of all aircraft types
2426
	*
2427
	* @return Array list of aircraft types
2428
	*
2429
	*/
2430
	public function getAllAircraftTypes($filters = array())
0 ignored issues
show
Unused Code introduced by
The parameter $filters is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2431
	{
2432
		/*
2433
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2434
								FROM spotter_output  
2435
								WHERE spotter_output.aircraft_icao <> '' 
2436
								ORDER BY spotter_output.aircraft_name ASC";
2437
								
2438
		*/
2439
		//$filter_query = $this->getFilter($filters,true,true);
2440
		//$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";
2441
2442
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2443
		
2444
		$sth = $this->db->prepare($query);
2445
		$sth->execute();
2446
2447
		$aircraft_array = array();
2448
		$temp_array = array();
2449
		
2450
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2451
		{
2452
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2453
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2454
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2455
2456
			$aircraft_array[] = $temp_array;
2457
		}
2458
2459
		return $aircraft_array;
2460
	}
2461
	
2462
	
2463
	/**
2464
	* Gets a list of all aircraft registrations
2465
	*
2466
	* @return Array list of aircraft registrations
2467
	*
2468
	*/
2469
	public function getAllAircraftRegistrations($filters = array())
2470
	{
2471
		$filter_query = $this->getFilter($filters,true,true);
2472
		$query  = "SELECT DISTINCT spotter_output.registration 
2473
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2474
				ORDER BY spotter_output.registration ASC";
2475
2476
		$sth = $this->db->prepare($query);
2477
		$sth->execute();
2478
2479
		$aircraft_array = array();
2480
		$temp_array = array();
2481
		
2482
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2483
		{
2484
			$temp_array['registration'] = $row['registration'];
2485
2486
			$aircraft_array[] = $temp_array;
2487
		}
2488
2489
		return $aircraft_array;
2490
	}
2491
2492
	/**
2493
	* Gets all source name
2494
	*
2495
	* @param String type format of source
2496
	* @return Array list of source name
2497
	*
2498
	*/
2499
	public function getAllSourceName($type = '',$filters = array())
2500
	{
2501
		$filter_query = $this->getFilter($filters,true,true);
2502
		$query_values = array();
2503
		$query  = "SELECT DISTINCT spotter_output.source_name 
2504
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2505
		if ($type != '') {
2506
			$query_values = array(':type' => $type);
2507
			$query .= " AND format_source = :type";
2508
		}
2509
		$query .= " ORDER BY spotter_output.source_name ASC";
2510
2511
		$sth = $this->db->prepare($query);
2512
		if (!empty($query_values)) $sth->execute($query_values);
2513
		else $sth->execute();
2514
2515
		$source_array = array();
2516
		$temp_array = array();
2517
		
2518
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2519
		{
2520
			$temp_array['source_name'] = $row['source_name'];
2521
			$source_array[] = $temp_array;
2522
		}
2523
		return $source_array;
2524
	}
2525
2526
2527
2528
	/**
2529
	* Gets a list of all airline names
2530
	*
2531
	* @return Array list of airline names
2532
	*
2533
	*/
2534
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2535
	{
2536
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2537
		$filter_query = $this->getFilter($filters,true,true);
2538
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2539
		if ($airline_type == '' || $airline_type == 'all') {
2540
			/*
2541
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2542
								FROM spotter_output
2543
								WHERE spotter_output.airline_icao <> '' 
2544
								ORDER BY spotter_output.airline_name ASC";
2545
			*/
2546
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2547
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2548
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2549
			if ($forsource === NULL) {
2550
				$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";
2551
				$query_data = array();
2552
			} else {
2553
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2554
				$query_data = array(':forsource' => $forsource);
2555
			}
2556
		} else {
2557
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2558
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2559
					AND spotter_output.airline_type = :airline_type 
2560
					ORDER BY spotter_output.airline_icao ASC";
2561
			$query_data = array(':airline_type' => $airline_type);
2562
		}
2563
		
2564
		$sth = $this->db->prepare($query);
2565
		$sth->execute($query_data);
2566
    
2567
		$airline_array = array();
2568
		$temp_array = array();
2569
		
2570
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2571
		{
2572
			$temp_array['airline_icao'] = $row['airline_icao'];
2573
			$temp_array['airline_name'] = $row['airline_name'];
2574
			$temp_array['airline_type'] = $row['airline_type'];
2575
2576
			$airline_array[] = $temp_array;
2577
		}
2578
		return $airline_array;
2579
	}
2580
	
2581
	/**
2582
	* Gets a list of all alliance names
2583
	*
2584
	* @return Array list of alliance names
2585
	*
2586
	*/
2587
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2588
	{
2589
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2590
		$filter_query = $this->getFilter($filters,true,true);
0 ignored issues
show
Unused Code introduced by
$filter_query is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2591
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2592
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2593
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2594
		if ($forsource === NULL) {
2595
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2596
			$query_data = array();
2597
		} else {
2598
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2599
			$query_data = array(':forsource' => $forsource);
2600
		}
2601
		
2602
		$sth = $this->db->prepare($query);
2603
		$sth->execute($query_data);
2604
    
2605
		$alliance_array = array();
0 ignored issues
show
Unused Code introduced by
$alliance_array is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

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