Completed
Push — master ( bc3cb2...533a00 )
by Yannick
08:24
created

Spotter::addSpotterData()   F

Complexity

Conditions 103
Paths > 20000

Size

Total Lines 306
Code Lines 194

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 103
eloc 194
nc 4294967295
nop 25
dl 0
loc 306
rs 2
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

Long Method

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

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

Commonly applied refactorings include:

Many Parameters

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

There are several approaches to avoid long parameter lists:

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

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

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