Completed
Push — master ( 8a4155...eb4f96 )
by Yannick
07:53
created

Spotter::countAllAirlinesByDate()   B

Complexity

Conditions 4
Paths 8

Size

Total Lines 42
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

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