Completed
Push — master ( 2b23bd...e29629 )
by Yannick
10:29
created

Spotter::updateLatestSpotterData()   A

Complexity

Conditions 3
Paths 6

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 6
nop 10
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

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

There are several approaches to avoid long parameter lists:

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