Completed
Push — master ( 65bea5...fd736f )
by Yannick
09:26
created

Spotter::countAllHoursByAircraft()   B

Complexity

Conditions 4
Paths 8

Size

Total Lines 40
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

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