Completed
Push — master ( ba9f5e...7f1c9f )
by Yannick
14:25
created

Spotter::getSpotterDataByCountry()   C

Complexity

Conditions 7
Paths 13

Size

Total Lines 49
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 27
nc 13
nop 3
dl 0
loc 49
rs 6.7272
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()) {
21
		global $globalFilter;
22
		if (is_array($globalFilter)) $filter = array_merge($globalFilter,$filter);
23
		$filter_query = '';
24
		if (isset($filter['source']) && !empty($filter['source'])) {
25
			$filter_query = " AND format_source IN ('".implode("','",$filter['source'])."')";
26
		}
27
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
28
			$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";
29
		}
30
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
31
			$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 ";
32
		}
33
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
34
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
35
		}
36
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
37
			$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";
38
		}
39
		return $filter_query;
40
	}
41
42
	/**
43
	* Executes the SQL statements to get the spotter information
44
	*
45
	* @param String $query the SQL query
46
	* @param Array $params parameter of the query
47
	* @param String $limitQuery the limit query
48
	* @return Array the spotter information
49
	*
50
	*/
51
	public function getDataFromDB($query, $params = array(), $limitQuery = '')
52
	{
53
		global $globalSquawkCountry, $globalIVAO, $globalVATSIM, $globalphpVMS;
54
		$Image = new Image($this->db);
55
		$Schedule = new Schedule($this->db);
56
		$ACARS = new ACARS($this->db);
57
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
58
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
59
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
60
		date_default_timezone_set('UTC');
61
		
62
		if (!is_string($query))
63
		{
64
			return false;
65
		}
66
		
67
		if ($limitQuery != "")
68
		{
69
			if (!is_string($limitQuery))
70
			{
71
				return false;
72
			}
73
		}
74
75
		
76
		try {
77
			$sth = $this->db->prepare($query.$limitQuery);
78
			$sth->execute($params);
79
		} catch (PDOException $e) {
80
			printf("Invalid query : %s\nWhole query: %s\n",$e->getMessage(), $query.$limitQuery);
81
			exit();
82
		}
83
		
84
	//	$num_rows = count($sth->fetchAll());
85
		$num_rows = 0;
86
87
		$spotter_array = array();
88
		
89
90
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
91
		{
92
			$num_rows++;
93
			$temp_array = array();
94
			if (isset($row['spotter_live_id'])) {
95
				//$temp_array['spotter_id'] = $row['spotter_live_id'];
96
				$temp_array['spotter_id'] = $this->getSpotterIDBasedOnFlightAwareID($row['flightaware_id']);
97
			} elseif (isset($row['spotter_archive_id'])) {
98
				$temp_array['spotter_id'] = $row['spotter_archive_id'];
99
			} elseif (isset($row['spotter_archive_output_id'])) {
100
				$temp_array['spotter_id'] = $row['spotter_archive_output_id'];
101
			} elseif (isset($row['spotter_id'])) {
102
				$temp_array['spotter_id'] = $row['spotter_id'];
103
			} else {
104
				$temp_array['spotter_id'] = '';
105
			}
106
			if (isset($row['flightaware_id'])) $temp_array['flightaware_id'] = $row['flightaware_id'];
107
			if (isset($row['modes'])) $temp_array['modes'] = $row['modes'];
108
			$temp_array['ident'] = $row['ident'];
109
			if (isset($row['registration']) && $row['registration'] != '') {
110
				$temp_array['registration'] = $row['registration'];
111
			} elseif (isset($temp_array['modes'])) {
112
				$temp_array['registration'] = $this->getAircraftRegistrationBymodeS($temp_array['modes']);
113
			} else $temp_array['registration'] = '';
114
			if (isset($row['aircraft_icao'])) $temp_array['aircraft_type'] = $row['aircraft_icao'];
115
			
116
			$temp_array['departure_airport'] = $row['departure_airport_icao'];
117
			$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
118
			if (isset($row['real_arrival_airport_icao']) && $row['real_arrival_airport_icao'] != NULL) $temp_array['real_arrival_airport'] = $row['real_arrival_airport_icao'];
119
			if (isset($row['latitude'])) $temp_array['latitude'] = $row['latitude'];
120
			if (isset($row['longitude'])) $temp_array['longitude'] = $row['longitude'];
121
			/*
122
			if (Connection->tableExists('countries')) {
123
				$country_info = $this->getCountryFromLatitudeLongitude($temp_array['latitude'],$temp_array['longitude']);
124
				if (is_array($country_info) && isset($country_info['name']) && isset($country_info['iso2'])) {
125
				    $temp_array['country'] = $country_info['name'];
126
				    $temp_array['country_iso2'] = $country_info['iso2'];
127
				}
128
			}
129
			*/
130
			if (isset($row['waypoints'])) $temp_array['waypoints'] = $row['waypoints'];
131
			if (isset($row['format_source'])) $temp_array['format_source'] = $row['format_source'];
132
			if (isset($row['route_stop'])) {
133
				$temp_array['route_stop'] = $row['route_stop'];
134
				if ($row['route_stop'] != '') {
135
					$allroute = explode(' ',$row['route_stop']);
136
			
137
					foreach ($allroute as $route) {
138
						$route_airport_array = $this->getAllAirportInfo($route);
139
						if (isset($route_airport_array[0]['name'])) {
140
							$route_stop_details = array();
141
							$route_stop_details['airport_name'] = $route_airport_array[0]['name'];
142
							$route_stop_details['airport_city'] = $route_airport_array[0]['city'];
143
							$route_stop_details['airport_country'] = $route_airport_array[0]['country'];
144
							$route_stop_details['airport_icao'] = $route_airport_array[0]['icao'];
145
							$temp_array['route_stop_details'][] = $route_stop_details;
146
						}
147
					}
148
				}
149
			}
150
			if (isset($row['altitude'])) $temp_array['altitude'] = $row['altitude'];
151
			if (isset($row['heading'])) {
152
				$temp_array['heading'] = $row['heading'];
153
				$heading_direction = $this->parseDirection($row['heading']);
154
				if (isset($heading_direction[0]['direction_fullname'])) $temp_array['heading_name'] = $heading_direction[0]['direction_fullname'];
155
			}
156
			if (isset($row['ground_speed'])) $temp_array['ground_speed'] = $row['ground_speed'];
157
			$temp_array['image'] = "";
158
			$temp_array['image_thumbnail'] = "";
159
			$temp_array['image_source'] = "";
160
			$temp_array['image_copyright'] = "";
161
 
162
			if (isset($row['highlight'])) {
163
				$temp_array['highlight'] = $row['highlight'];
164
			} else $temp_array['highlight'] = '';
165
			
166
			if (isset($row['date'])) {
167
				$dateArray = $this->parseDateString($row['date']);
168
				if ($dateArray['seconds'] < 10)
169
				{
170
					$temp_array['date'] = "a few seconds ago";
171
				} elseif ($dateArray['seconds'] >= 5 && $dateArray['seconds'] < 30)
172
				{
173
					$temp_array['date'] = "half a minute ago";
174
				} elseif ($dateArray['seconds'] >= 30 && $dateArray['seconds'] < 60)
175
				{
176
					$temp_array['date'] = "about a minute ago";
177
				} elseif ($dateArray['minutes'] < 5)
178
				{
179
					$temp_array['date'] = "a few minutes ago";
180
				} elseif ($dateArray['minutes'] >= 5 && $dateArray['minutes'] < 60)
181
				{
182
					$temp_array['date'] = "about ".$dateArray['minutes']." minutes ago";
183
				} elseif ($dateArray['hours'] < 2)
184
				{
185
					$temp_array['date'] = "about an hour ago";
186
				} elseif ($dateArray['hours'] >= 2 && $dateArray['hours'] < 24)
187
				{
188
					$temp_array['date'] = "about ".$dateArray['hours']." hours ago";
189
				} else {
190
					$temp_array['date'] = date("M j Y, g:i a",strtotime($row['date']." UTC"));
191
				}
192
				$temp_array['date_minutes_past'] = $dateArray['minutes'];
193
				$temp_array['date_iso_8601'] = date("c",strtotime($row['date']." UTC"));
194
				$temp_array['date_rfc_2822'] = date("r",strtotime($row['date']." UTC"));
195
				$temp_array['date_unix'] = strtotime($row['date']." UTC");
196
			}
197
			
198
			if (isset($row['aircraft_name']) && $row['aircraft_name'] != '' && isset($row['aircraft_shadow']) && $row['aircraft_shadow'] != '') {
199
				$temp_array['aircraft_name'] = $row['aircraft_name'];
200
				$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
201
				if (isset($row['aircraft_shadow'])) {
202
					$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
203
				}
204
			} elseif (isset($row['aircraft_icao'])) {
205
				$aircraft_array = $this->getAllAircraftInfo($row['aircraft_icao']);
206
				if (count($aircraft_array) > 0) {
207
					$temp_array['aircraft_name'] = $aircraft_array[0]['type'];
208
					$temp_array['aircraft_manufacturer'] = $aircraft_array[0]['manufacturer'];
209
				
210
					if ($aircraft_array[0]['aircraft_shadow'] != NULL) {
211
						$temp_array['aircraft_shadow'] = $aircraft_array[0]['aircraft_shadow'];
212
					} else $temp_array['aircraft_shadow'] = 'default.png';
213
                                } else {
214
                            		$temp_array['aircraft_shadow'] = 'default.png';
215
					$temp_array['aircraft_name'] = 'N/A';
216
					$temp_array['aircraft_manufacturer'] = 'N/A';
217
                            	}
218
			}
219
			$fromsource = NULL;
220
			if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
221
			elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
222
			elseif (isset($globalVATSIM) && $globalVATSIM) $fromsource = 'vatsim';
223
			elseif (isset($globalIVAO) && $globalIVAO) $fromsource = 'ivao';
224
			if (!isset($row['airline_name']) || $row['airline_name'] == '') {
225
				if (!is_numeric(substr($row['ident'], 0, 3))) {
226
					if (is_numeric(substr($row['ident'], 2, 1))) {
227
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 2),$fromsource);
228
					} elseif (is_numeric(substr($row['ident'], 3, 1))) {
229
						$airline_array = $this->getAllAirlineInfo(substr($row['ident'], 0, 3),$fromsource);
230
					} else {
231
						$airline_array = $this->getAllAirlineInfo('NA');
232
					}
233
				} else {
234
					$airline_array = $this->getAllAirlineInfo('NA');
235
				}
236
				if (count($airline_array) > 0) {
237
					$temp_array['airline_icao'] = $airline_array[0]['icao'];
238
					$temp_array['airline_iata'] = $airline_array[0]['iata'];
239
					$temp_array['airline_name'] = $airline_array[0]['name'];
240
					$temp_array['airline_country'] = $airline_array[0]['country'];
241
					$temp_array['airline_callsign'] = $airline_array[0]['callsign'];
242
					$temp_array['airline_type'] = $airline_array[0]['type'];
243
				}
244
			} else {
245
				$temp_array['airline_icao'] = $row['airline_icao'];
246
				if (isset($row['airline_iata'])) $temp_array['airline_iata'] = $row['airline_iata'];
247
				else $temp_array['airline_iata'] = '';
248
				$temp_array['airline_name'] = $row['airline_name'];
249
				$temp_array['airline_country'] = $row['airline_country'];
250
				if (isset($row['airline_callsign'])) $temp_array['airline_callsign'] = $row['airline_callsign'];
251
				else $temp_array['airline_callsign'] = 'N/A';
252
				$temp_array['airline_type'] = $row['airline_type'];
253
			}
254
			if (isset($temp_array['airline_iata']) && $temp_array['airline_iata'] != '') {
255
				$acars_array = $ACARS->getLiveAcarsData($temp_array['airline_iata'].substr($temp_array['ident'],3));
256
				//$acars_array = ACARS->getLiveAcarsData('BA40YL');
257
				if (count($acars_array) > 0) {
258
					$temp_array['acars'] = $acars_array;
259
					//print_r($acars_array);
260
				}
261
			}
262
			if (isset($row['owner_name']) && $row['owner_name'] != '' && $row['owner_name'] != NULL) {
263
				$temp_array['aircraft_owner'] = $row['owner_name'];
264
			}
265
			if ($temp_array['registration'] != "" && !$globalIVAO && !$globalVATSIM && !$globalphpVMS && !isset($temp_array['aircraft_owner'])) {
266
				$owner_info = $this->getAircraftOwnerByRegistration($temp_array['registration']);
267
				if ($owner_info['owner'] != '') $temp_array['aircraft_owner'] = ucwords(strtolower($owner_info['owner']));
268
				$temp_array['aircraft_base'] = $owner_info['base'];
269
				$temp_array['aircraft_date_first_reg'] = $owner_info['date_first_reg'];
270
			}
271
272
			if($temp_array['registration'] != "" || ($globalIVAO && isset($temp_array['aircraft_type']) && $temp_array['aircraft_type'] != ''))
273
			{
274
				if ($globalIVAO) {
275
					if (isset($temp_array['airline_icao']))	$image_array = $Image->getSpotterImage('',$temp_array['aircraft_type'],$temp_array['airline_icao']);
276
					else $image_array = $Image->getSpotterImage('',$temp_array['aircraft_type']);
277
				} else $image_array = $Image->getSpotterImage($temp_array['registration']);
278
				if (count($image_array) > 0) {
279
					$temp_array['image'] = $image_array[0]['image'];
280
					$temp_array['image_thumbnail'] = $image_array[0]['image_thumbnail'];
281
					$temp_array['image_source'] = $image_array[0]['image_source'];
282
					$temp_array['image_source_website'] = $image_array[0]['image_source_website'];
283
					if ($temp_array['image_source_website'] == '' && $temp_array['image_source'] == 'planespotters') {
284
						$planespotter_url_array = explode("_", $temp_array['image']);
285
						$planespotter_id = str_replace(".jpg", "", $planespotter_url_array[1]);
286
						$temp_array['image_source_website'] = 'http://www.planespotters.net/Aviation_Photos/photo.show?id='.$planespotter_id;
287
					 }
288
					$temp_array['image_copyright'] = $image_array[0]['image_copyright'];
289
				}
290
			}
291
292
293
			if (isset($row['departure_airport_time']) && $row['departure_airport_time'] != '') {
294
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
295
			}
296
			if (isset($row['arrival_airport_time']) && $row['arrival_airport_time'] != '') {
297
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
298
			}
299
			if ((!isset($globalIVAO) || ! $globalIVAO) && (!isset($globalVATSIM) || !$globalVATSIM) && (!isset($globalphpVMS) || !$globalphpVMS)) {
300
				$schedule_array = $Schedule->getSchedule($temp_array['ident']);
301
				//print_r($schedule_array);
302
				if (count($schedule_array) > 0) {
303
					if ($schedule_array['departure_airport_icao'] != '') {
304
						$row['departure_airport_icao'] = $schedule_array['departure_airport_icao'];
305
						 $temp_array['departure_airport'] = $row['departure_airport_icao'];
306
					}
307
					if ($schedule_array['arrival_airport_icao'] != '') {
308
						$row['arrival_airport_icao'] = $schedule_array['arrival_airport_icao'];
309
						$temp_array['arrival_airport'] = $row['arrival_airport_icao'];
310
					}
311
312
					$temp_array['departure_airport_time'] = $schedule_array['departure_airport_time'];
313
					$temp_array['arrival_airport_time'] = $schedule_array['arrival_airport_time'];
314
				}
315
			} else {
316
				if (isset($row['real_departure_airport_time']) && $row['real_departure_airport_time'] != '') {
317
					$temp_array['departure_airport_time'] = $row['real_departure_airport_time'];
318
				}
319
				if (isset($row['real_arrival_airport_time']) && $row['real_arrival_airport_time'] != '') {
320
					$temp_array['real_arrival_airport_time'] = $row['real_arrival_airport_time'];
321
				}
322
			}
323
			
324
			//if ($row['departure_airport_icao'] != '' && $row['departure_airport_name'] == '') {
325
			if ($row['departure_airport_icao'] != '') {
326
				$departure_airport_array = $this->getAllAirportInfo($row['departure_airport_icao']);
327
				if (!isset($departure_airport_array[0]['name'])) $departure_airport_array = $this->getAllAirportInfo('NA');
328
			/*
329
			} elseif ($row['departure_airport_name'] != '') {
330
				$temp_array['departure_airport_name'] = $row['departure_airport_name'];
331
				$temp_array['departure_airport_city'] = $row['departure_airport_city'];
332
				$temp_array['departure_airport_country'] = $row['departure_airport_country'];
333
				$temp_array['departure_airport_icao'] = $row['departure_airport_icao'];
334
			*/
335
			} else $departure_airport_array = $this->getAllAirportInfo('NA');
336
			if (isset($departure_airport_array[0]['name'])) {
337
				$temp_array['departure_airport_name'] = $departure_airport_array[0]['name'];
338
				$temp_array['departure_airport_city'] = $departure_airport_array[0]['city'];
339
				$temp_array['departure_airport_country'] = $departure_airport_array[0]['country'];
340
				$temp_array['departure_airport_iata'] = $departure_airport_array[0]['iata'];
341
				$temp_array['departure_airport_icao'] = $departure_airport_array[0]['icao'];
342
				$temp_array['departure_airport_latitude'] = $departure_airport_array[0]['latitude'];
343
				$temp_array['departure_airport_longitude'] = $departure_airport_array[0]['longitude'];
344
				$temp_array['departure_airport_altitude'] = $departure_airport_array[0]['altitude'];
345
			}
346
347
			/*
348
			if (isset($row['departure_airport_time'])) {
349
				$temp_array['departure_airport_time'] = $row['departure_airport_time'];
350
			}
351
			*/
352
			
353
			if ($row['arrival_airport_icao'] != '') {
354
				$arrival_airport_array = $this->getAllAirportInfo($row['arrival_airport_icao']);
355
				if (count($arrival_airport_array) == 0) $arrival_airport_array = $this->getAllAirportInfo('NA');
356
			} else $arrival_airport_array = $this->getAllAirportInfo('NA');
357
			if (isset($arrival_airport_array[0]['name'])) {
358
				$temp_array['arrival_airport_name'] = $arrival_airport_array[0]['name'];
359
				$temp_array['arrival_airport_city'] = $arrival_airport_array[0]['city'];
360
				$temp_array['arrival_airport_country'] = $arrival_airport_array[0]['country'];
361
				$temp_array['arrival_airport_iata'] = $arrival_airport_array[0]['iata'];
362
				$temp_array['arrival_airport_icao'] = $arrival_airport_array[0]['icao'];
363
				$temp_array['arrival_airport_latitude'] = $arrival_airport_array[0]['latitude'];
364
				$temp_array['arrival_airport_longitude'] = $arrival_airport_array[0]['longitude'];
365
				$temp_array['arrival_airport_altitude'] = $arrival_airport_array[0]['altitude'];
366
			}
367
			/*
368
			if (isset($row['arrival_airport_time'])) {
369
				$temp_array['arrival_airport_time'] = $row['arrival_airport_time'];
370
			}
371
			*/
372
			if (isset($row['pilot_id']) && $row['pilot_id'] != '') $temp_array['pilot_id'] = $row['pilot_id'];
373
			if (isset($row['pilot_name']) && $row['pilot_name'] != '') $temp_array['pilot_name'] = $row['pilot_name'];
374
			if (isset($row['source_name']) && $row['source_name'] != '') $temp_array['source_name'] = $row['source_name'];
375
			if (isset($row['over_country']) && $row['over_country'] != '') $temp_array['over_country'] = $row['over_country'];
376
			if (isset($row['distance']) && $row['distance'] != '') $temp_array['distance'] = $row['distance'];
377
			if (isset($row['squawk'])) {
378
				$temp_array['squawk'] = $row['squawk'];
379
				if ($row['squawk'] != '' && isset($temp_array['country_iso2'])) {
380
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['country_iso2']);
381
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
382
				} elseif ($row['squawk'] != '' && isset($temp_array['over_country'])) {
383
					$temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$temp_array['over_country']);
384
					if ($temp_array['squawk_usage'] == '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
385
				} elseif ($row['squawk'] != '' && isset($globalSquawkCountry)) $temp_array['squawk_usage'] = $this->getSquawkUsage($row['squawk'],$globalSquawkCountry);
386
			}
387
    			
388
			$temp_array['query_number_rows'] = $num_rows;
389
			
390
			$spotter_array[] = $temp_array;
391
		}
392
		if ($num_rows == 0) return array();
393
		$spotter_array[0]['query_number_rows'] = $num_rows;
394
		return $spotter_array;
395
	}	
396
	
397
	
398
	/**
399
	* Gets all the spotter information
400
	*
401
	* @return Array the spotter information
402
	*
403
	*/
404
	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())
405
	{
406
		global $globalTimezone, $globalDBdriver;
407
		require_once(dirname(__FILE__).'/class.Translation.php');
408
		$Translation = new Translation();
409
410
		date_default_timezone_set('UTC');
411
412
		$query_values = array();
413
		$additional_query = '';
414
		$filter_query = $this->getFilter($filter);
415
		if ($q != "")
416
		{
417
			if (!is_string($q))
418
			{
419
				return false;
420
			} else {
421
				$q_array = explode(" ", $q);
422
				foreach ($q_array as $q_item){
423
					$q_item = filter_var($q_item,FILTER_SANITIZE_STRING);
424
					$additional_query .= " AND (";
425
					if (is_int($q_item)) $additional_query .= "(spotter_output.spotter_id like '%".$q_item."%') OR ";
426
					$additional_query .= "(spotter_output.aircraft_icao like '%".$q_item."%') OR ";
427
					$additional_query .= "(spotter_output.aircraft_name like '%".$q_item."%') OR ";
428
					$additional_query .= "(spotter_output.aircraft_manufacturer like '%".$q_item."%') OR ";
429
					$additional_query .= "(spotter_output.airline_icao like '%".$q_item."%') OR ";
430
					$additional_query .= "(spotter_output.airline_name like '%".$q_item."%') OR ";
431
					$additional_query .= "(spotter_output.airline_country like '%".$q_item."%') OR ";
432
					$additional_query .= "(spotter_output.departure_airport_icao like '%".$q_item."%') OR ";
433
					$additional_query .= "(spotter_output.departure_airport_name like '%".$q_item."%') OR ";
434
					$additional_query .= "(spotter_output.departure_airport_city like '%".$q_item."%') OR ";
435
					$additional_query .= "(spotter_output.departure_airport_country like '%".$q_item."%') OR ";
436
					$additional_query .= "(spotter_output.arrival_airport_icao like '%".$q_item."%') OR ";
437
					$additional_query .= "(spotter_output.arrival_airport_name like '%".$q_item."%') OR ";
438
					$additional_query .= "(spotter_output.arrival_airport_city like '%".$q_item."%') OR ";
439
					$additional_query .= "(spotter_output.arrival_airport_country like '%".$q_item."%') OR ";
440
					$additional_query .= "(spotter_output.registration like '%".$q_item."%') OR ";
441
					$additional_query .= "(spotter_output.owner_name like '%".$q_item."%') OR ";
442
					$additional_query .= "(spotter_output.pilot_id like '%".$q_item."%') OR ";
443
					$additional_query .= "(spotter_output.pilot_name like '%".$q_item."%') OR ";
444
					$additional_query .= "(spotter_output.ident like '%".$q_item."%') OR ";
445
					$translate = $Translation->ident2icao($q_item);
446
					if ($translate != $q_item) $additional_query .= "(spotter_output.ident like '%".$translate."%') OR ";
447
					$additional_query .= "(spotter_output.highlight like '%".$q_item."%')";
448
					$additional_query .= ")";
449
				}
450
			}
451
		}
452
453
		if ($registration != "")
454
		{
455
			$registration = filter_var($registration,FILTER_SANITIZE_STRING);
456
			if (!is_string($registration))
457
			{
458
				return false;
459
			} else {
460
				$additional_query .= " AND spotter_output.registration = :registration";
461
				$query_values = array_merge($query_values,array(':registration' => $registration));
462
			}
463
		}
464
465
		if ($aircraft_icao != "")
466
		{
467
			$aircraft_icao = filter_var($aircraft_icao,FILTER_SANITIZE_STRING);
468
			if (!is_string($aircraft_icao))
469
			{
470
				return false;
471
			} else {
472
				$additional_query .= " AND spotter_output.aircraft_icao = :aircraft_icao";
473
				$query_values = array_merge($query_values,array(':aircraft_icao' => $aircraft_icao));
474
			}
475
		}
476
477
		if ($aircraft_manufacturer != "")
478
		{
479
			$aircraft_manufacturer = filter_var($aircraft_manufacturer,FILTER_SANITIZE_STRING);
480
			if (!is_string($aircraft_manufacturer))
481
			{
482
				return false;
483
			} else {
484
				$additional_query .= " AND spotter_output.aircraft_manufacturer = :aircraft_manufacturer";
485
				$query_values = array_merge($query_values,array(':aircraft_manufacturer' => $aircraft_manufacturer));
486
			}
487
		}
488
489
		if ($highlights == "true")
490
		{
491
			if (!is_string($highlights))
492
			{
493
				return false;
494
			} else {
495
				$additional_query .= " AND (spotter_output.highlight <> '')";
496
			}
497
		}
498
499
		if ($airline_icao != "")
500
		{
501
			$airline_icao = filter_var($airline_icao,FILTER_SANITIZE_STRING);
502
			if (!is_string($airline_icao))
503
			{
504
				return false;
505
			} else {
506
				$additional_query .= " AND spotter_output.airline_icao = :airline_icao";
507
				$query_values = array_merge($query_values,array(':airline_icao' => $airline_icao));
508
			}
509
		}
510
511
		if ($airline_country != "")
512
		{
513
			$airline_country = filter_var($airline_country,FILTER_SANITIZE_STRING);
514
			if (!is_string($airline_country))
515
			{
516
				return false;
517
			} else {
518
				$additional_query .= " AND spotter_output.airline_country = :airline_country";
519
				$query_values = array_merge($query_values,array(':airline_country' => $airline_country));
520
			}
521
		}
522
523
		if ($airline_type != "")
524
		{
525
			if (!is_string($airline_type))
526
			{
527
				return false;
528
			} else {
529
				if ($airline_type == "passenger")
530
				{
531
					$additional_query .= " AND (spotter_output.airline_type = 'passenger')";
532
				}
533
				if ($airline_type == "cargo")
534
				{
535
					$additional_query .= " AND (spotter_output.airline_type = 'cargo')";
536
				}
537
				if ($airline_type == "military")
538
				{
539
					$additional_query .= " AND (spotter_output.airline_type = 'military')";
540
				}
541
			}
542
		}
543
544
		if ($airport != "")
545
		{
546
			$airport = filter_var($airport,FILTER_SANITIZE_STRING);
547
			if (!is_string($airport))
548
			{
549
				return false;
550
			} else {
551
				$additional_query .= " AND (spotter_output.departure_airport_icao = :airport OR spotter_output.arrival_airport_icao = :airport)";
552
				$query_values = array_merge($query_values,array(':airport' => $airport));
553
			}
554
		}
555
556
		if ($airport_country != "")
557
		{
558
			$airport_country = filter_var($airport_country,FILTER_SANITIZE_STRING);
559
			if (!is_string($airport_country))
560
			{
561
				return false;
562
			} else {
563
				$additional_query .= " AND (spotter_output.departure_airport_country = :airport_country OR spotter_output.arrival_airport_country = :airport_country)";
564
				$query_values = array_merge($query_values,array(':airport_country' => $airport_country));
565
			}
566
		}
567
    
568
		if ($callsign != "")
569
		{
570
			$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
571
			if (!is_string($callsign))
572
			{
573
				return false;
574
			} else {
575
				$translate = $Translation->ident2icao($callsign);
576
				if ($translate != $callsign) {
577
					$additional_query .= " AND (spotter_output.ident = :callsign OR spotter_output.ident = :translate)";
578
					$query_values = array_merge($query_values,array(':callsign' => $callsign,':translate' => $translate));
579
				} else {
580
					$additional_query .= " AND spotter_output.ident = :callsign";
581
					$query_values = array_merge($query_values,array(':callsign' => $callsign));
582
				}
583
			}
584
		}
585
586
		if ($owner != "")
587
		{
588
			$owner = filter_var($owner,FILTER_SANITIZE_STRING);
589
			if (!is_string($owner))
590
			{
591
				return false;
592
			} else {
593
				$additional_query .= " AND spotter_output.owner_name = :owner";
594
				$query_values = array_merge($query_values,array(':owner' => $owner));
595
			}
596
		}
597
598
		if ($pilot_name != "")
599
		{
600
			$pilot_name = filter_var($pilot_name,FILTER_SANITIZE_STRING);
601
			if (!is_string($pilot_name))
602
			{
603
				return false;
604
			} else {
605
				$additional_query .= " AND spotter_output.pilot_name = :pilot_name";
606
				$query_values = array_merge($query_values,array(':pilot_name' => $pilot_name));
607
			}
608
		}
609
610
		if ($pilot_id != "")
611
		{
612
			$pilot_id = filter_var($pilot_id,FILTER_SANITIZE_NUMBER_INT);
613
			if (!is_string($pilot_id))
614
			{
615
				return false;
616
			} else {
617
				$additional_query .= " AND spotter_output.pilot_id = :pilot_id";
618
				$query_values = array_merge($query_values,array(':pilot_id' => $pilot_id));
619
			}
620
		}
621
622
		if ($departure_airport_route != "")
623
		{
624
			$departure_airport_route = filter_var($departure_airport_route,FILTER_SANITIZE_STRING);
625
			if (!is_string($departure_airport_route))
626
			{
627
				return false;
628
			} else {
629
				$additional_query .= " AND spotter_output.departure_airport_icao = :departure_airport_route";
630
				$query_values = array_merge($query_values,array(':departure_airport_route' => $departure_airport_route));
631
			}
632
		}
633
634
		if ($arrival_airport_route != "")
635
		{
636
			$arrival_airport_route = filter_var($arrival_airport_route,FILTER_SANITIZE_STRING);
637
			if (!is_string($arrival_airport_route))
638
			{
639
				return false;
640
			} else {
641
				$additional_query .= " AND spotter_output.arrival_airport_icao = :arrival_airport_route";
642
				$query_values = array_merge($query_values,array(':arrival_airport_route' => $arrival_airport_route));
643
			}
644
		}
645
646
		if ($altitude != "")
647
		{
648
			$altitude_array = explode(",", $altitude);
649
			$altitude_array[0] = filter_var($altitude_array[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
650
			$altitude_array[1] = filter_var($altitude_array[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
651
652
			if ($altitude_array[1] != "")
653
			{                
654
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
655
				$altitude_array[1] = substr($altitude_array[1], 0, -2);
656
				$additional_query .= " AND altitude BETWEEN '".$altitude_array[0]."' AND '".$altitude_array[1]."' ";
657
			} else {
658
				$altitude_array[0] = substr($altitude_array[0], 0, -2);
659
				$additional_query .= " AND altitude <= '".$altitude_array[0]."' ";
660
			}
661
		}
662
663
		if ($date_posted != "")
664
		{
665
			$date_array = explode(",", $date_posted);
666
			$date_array[0] = filter_var($date_array[0],FILTER_SANITIZE_STRING);
667
			$date_array[1] = filter_var($date_array[1],FILTER_SANITIZE_STRING);
668
669
			if ($globalTimezone != '') {
670
				date_default_timezone_set($globalTimezone);
671
				$datetime = new DateTime();
672
				$offset = $datetime->format('P');
673
			} else $offset = '+00:00';
674
675
			if ($date_array[1] != "")
676
			{
677
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
678
				$date_array[1] = date("Y-m-d H:i:s", strtotime($date_array[1]));
679
				if ($globalDBdriver == 'mysql') {
680
					$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]."' ";
681
				} else {
682
					$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]."' ";
683
				}
684
			} else {
685
				$date_array[0] = date("Y-m-d H:i:s", strtotime($date_array[0]));
686
				if ($globalDBdriver == 'mysql') {
687
					$additional_query .= " AND TIMESTAMP(CONVERT_TZ(spotter_output.date,'+00:00', '".$offset."')) >= '".$date_array[0]."' ";
688
				} else {
689
					$additional_query .= " AND CAST(spotter_output.date AT TIME ZONE INTERVAL ".$offset." AS TIMESTAMP) >= '".$date_array[0]."' ";
690
				}
691
			}
692
		}
693
694
		if ($limit != "")
695
		{
696
			$limit_array = explode(",", $limit);
697
			
698
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
699
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
700
			
701
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
702
			{
703
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
704
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
705
			} else $limit_query = "";
706
		} else $limit_query = "";
707
708
709
		if ($sort != "")
710
		{
711
			$search_orderby_array = $this->getOrderBy();
712
			$orderby_query = $search_orderby_array[$sort]['sql'];
713
		} else {
714
			if ($origLat != "" && $origLon != "" && $dist != "") {
715
				$orderby_query = "  ORDER BY distance ASC";
716
			} else {
717
				$orderby_query = " ORDER BY spotter_output.date DESC";
718
			}
719
		}
720
721
		if ($includegeodata == "true")
722
		{
723
			$additional_query .= " AND spotter_output.waypoints <> ''";
724
		}
725
726
727
		if ($origLat != "" && $origLon != "" && $dist != "") {
728
			$dist = number_format($dist*0.621371,2,'.',''); // convert km to mile
729
730
			if ($globalDBdriver == 'mysql') {
731
				$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 
732
						FROM spotter_output, spotter_archive WHERE 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)) 
733
						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".$filter_query.$orderby_query;
734
			} else {
735
				$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 
736
						FROM spotter_output, spotter_archive WHERE 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)) 
737
						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;
738
			}
739
		} else {		
740
			$query  = "SELECT spotter_output.* FROM spotter_output 
741
					WHERE spotter_output.ident <> '' 
742
					".$additional_query."
743
					".$filter_query.$orderby_query;
744
		}
745
		$spotter_array = $this->getDataFromDB($query, $query_values,$limit_query);
746
		return $spotter_array;
747
	}
748
	
749
	
750
	/**
751
	* Gets all the spotter information based on the latest data entry
752
	*
753
	* @return Array the spotter information
754
	*
755
	*/
756
	public function getLatestSpotterData($limit = '', $sort = '', $filter = array())
757
	{
758
		global $global_query;
759
		
760
		date_default_timezone_set('UTC');
761
762
		$filter_query = $this->getFilter($filter);
763
		
764
		if ($limit != "")
765
		{
766
			$limit_array = explode(",", $limit);
767
			
768
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
769
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
770
			
771
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
772
			{
773
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
774
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
775
			} else $limit_query = "";
776
		} else $limit_query = "";
777
		
778
		if ($sort != "")
779
		{
780
			$search_orderby_array = $this->getOrderBy();
781
			$orderby_query = $search_orderby_array[$sort]['sql'];
782
		} else {
783
			$orderby_query = " ORDER BY spotter_output.date DESC";
784
		}
785
786
		$query  = $global_query.$filter_query." ".$orderby_query;
787
788
		$spotter_array = $this->getDataFromDB($query, array(),$limit_query);
789
790
		return $spotter_array;
791
	}
792
    
793
    
794
    /**
795
	* Gets all the spotter information based on a user's latitude and longitude
796
	*
797
	* @return Array the spotter information
798
	*
799
	*/
800
	public function getLatestSpotterForLayar($lat, $lng, $radius, $interval)
801
	{
802
		date_default_timezone_set('UTC');
803
		$limit_query = '';
804
		if ($lat != "")
805
		{
806
			if (!is_numeric($lat))
807
			{
808
				return false;
809
			}
810
		}
811
        
812
		if ($lng != "")
813
		{
814
			if (!is_numeric($lng))
815
			{
816
				return false;
817
			}
818
		}
819
		
820
		if ($radius != "")
821
		{
822
			if (!is_numeric($radius))
823
			{
824
				return false;
825
			}
826
		}
827
    		$additional_query = '';
828
		if ($interval != "")
829
		{
830
			if (!is_string($interval))
831
			{
832
				return false;
833
			} else {
834
				if ($interval == "30m"){
835
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 MINUTE) <= $this_output.date ';
836
				} else if ($interval == "1h"){
837
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 1 HOUR) <= $this_output.date ';
838
				} else if ($interval == "3h"){
839
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 3 HOUR) <= $this_output.date ';
840
				} else if ($interval == "6h"){
841
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 6 HOUR) <= $this_output.date ';
842
				} else if ($interval == "12h"){
843
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 12 HOUR) <= $this_output.date ';
844
				} else if ($interval == "24h"){
845
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 24 HOUR) <= $this_output.date ';
846
				} else if ($interval == "7d"){
847
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 7 DAY) <= $this_output.date ';
848
				} else if ($interval == "30d"){
849
					$additional_query = ' AND DATE_SUB(UTC_TIMESTAMP(),INTERVAL 30 DAY) <= $this_output.date ';
850
				} 
851
			}
852
		}
853
854
		$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 
855
                   WHERE spotter_output.latitude <> '' 
856
				   AND spotter_output.longitude <> '' 
857
                   ".$additional_query."
858
                   HAVING distance < :radius  
859
				   ORDER BY distance";
860
861
		$spotter_array = $this->getDataFromDB($query, array(':radius' => $radius),$limit_query);
862
863
		return $spotter_array;
864
	}
865
    
866
    
867
    /**
868
	* Gets all the spotter information sorted by the newest aircraft type
869
	*
870
	* @return Array the spotter information
871
	*
872
	*/
873
	public function getNewestSpotterDataSortedByAircraftType($limit = '', $sort = '',$filter = array())
874
	{
875
		global $global_query;
876
		
877
		date_default_timezone_set('UTC');
878
879
		$filter_query = $this->getFilter($filter);
880
881
		$limit_query = '';
882
		if ($limit != "")
883
		{
884
			$limit_array = explode(",", $limit);
885
			
886
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
887
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
888
			
889
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
890
			{
891
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
892
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
893
			}
894
		}
895
		
896
		if ($sort != "")
897
		{
898
			$search_orderby_array = $this->getOrderBy();
899
			$orderby_query = $search_orderby_array[$sort]['sql'];
900
		} else {
901
			$orderby_query = " ORDER BY spotter_output.date DESC ";
902
		}
903
904
		$query  = $global_query." WHERE 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 ".$filter_query.$orderby_query;
905
906
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
907
908
		return $spotter_array;
909
	}
910
    
911
    
912
	/**
913
	* Gets all the spotter information sorted by the newest aircraft registration
914
	*
915
	* @return Array the spotter information
916
	*
917
	*/
918
	public function getNewestSpotterDataSortedByAircraftRegistration($limit = '', $sort = '', $filter = array())
919
	{
920
		global $global_query;
921
		
922
		date_default_timezone_set('UTC');
923
		$filter_query = $this->getFilter($filter);
924
925
		$limit_query = '';
926
		if ($limit != "")
927
		{
928
			$limit_array = explode(",", $limit);
929
			
930
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
931
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
932
			
933
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
934
			{
935
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
936
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
937
			}
938
		}
939
		
940
		if ($sort != "")
941
		{
942
			$search_orderby_array = $this->getOrderBy();
943
			$orderby_query = $search_orderby_array[$sort]['sql'];
944
		} else {
945
			$orderby_query = " ORDER BY spotter_output.date DESC ";
946
		}
947
948
		$query  = $global_query." WHERE 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 ".$filter_query.$orderby_query;
949
950
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
951
952
		return $spotter_array;
953
	}
954
955
956
	/**
957
	* Gets all the spotter information sorted by the newest airline
958
	*
959
	* @return Array the spotter information
960
	*
961
	*/
962
	public function getNewestSpotterDataSortedByAirline($limit = '', $sort = '',$filter = array())
963
	{
964
		global $global_query;
965
		
966
		date_default_timezone_set('UTC');
967
		$filter_query = $this->getFilter($filter);
968
		
969
		$limit_query = '';
970
		if ($limit != "")
971
		{
972
			$limit_array = explode(",", $limit);
973
			
974
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
975
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
976
			
977
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
978
			{
979
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
980
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
981
			}
982
		}
983
		
984
		if ($sort != "")
985
		{
986
			$search_orderby_array = $this->getOrderBy();
987
			$orderby_query = $search_orderby_array[$sort]['sql'];
988
		} else {
989
			$orderby_query = " ORDER BY spotter_output.date DESC ";
990
		}
991
992
		$query  = $global_query." WHERE 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 ".$filter_query.$orderby_query;
993
994
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
995
996
		return $spotter_array;
997
	}
998
    
999
    
1000
    /**
1001
	* Gets all the spotter information sorted by the newest departure airport
1002
	*
1003
	* @return Array the spotter information
1004
	*
1005
	*/
1006
	public function getNewestSpotterDataSortedByDepartureAirport($limit = '', $sort = '', $filter = array())
1007
	{
1008
		global $global_query;
1009
		
1010
		date_default_timezone_set('UTC');
1011
		
1012
		$filter_query = $this->getFilter($filter);
1013
		
1014
		$limit_query = '';
1015
		
1016
		if ($limit != "")
1017
		{
1018
			$limit_array = explode(",", $limit);
1019
			
1020
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1021
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1022
			
1023
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1024
			{
1025
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1026
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1027
			}
1028
		}
1029
		
1030
		if ($sort != "")
1031
		{
1032
			$search_orderby_array = $this->getOrderBy();
1033
			$orderby_query = $search_orderby_array[$sort]['sql'];
1034
		} else {
1035
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1036
		}
1037
1038
		$query  = $global_query." WHERE 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 ".$filter_query.$orderby_query;
1039
1040
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1041
1042
		return $spotter_array;
1043
	}
1044
1045
1046
	/**
1047
	* Gets all the spotter information sorted by the newest arrival airport
1048
	*
1049
	* @return Array the spotter information
1050
	*
1051
	*/
1052
	public function getNewestSpotterDataSortedByArrivalAirport($limit = '', $sort = '', $filter = array())
1053
	{
1054
		global $global_query;
1055
		
1056
		date_default_timezone_set('UTC');
1057
		$filter_query = $this->getFilter($filter);
1058
		$limit_query = '';
1059
		if ($limit != "")
1060
		{
1061
			$limit_array = explode(",", $limit);
1062
			
1063
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1064
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1065
			
1066
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1067
			{
1068
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1069
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1070
			}
1071
		}
1072
		
1073
		if ($sort != "")
1074
		{
1075
			$search_orderby_array = $this->getOrderBy();
1076
			$orderby_query = $search_orderby_array[$sort]['sql'];
1077
		} else {
1078
			$orderby_query = " ORDER BY spotter_output.date DESC ";
1079
		}
1080
1081
		$query  = $global_query." WHERE 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 ".$filter_query.$orderby_query;
1082
1083
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1084
1085
		return $spotter_array;
1086
	}
1087
	
1088
1089
	/**
1090
	* Gets all the spotter information based on the spotter id
1091
	*
1092
	* @return Array the spotter information
1093
	*
1094
	*/
1095
	public function getSpotterDataByID($id = '')
1096
	{
1097
		global $global_query;
1098
		
1099
		date_default_timezone_set('UTC');
1100
		if ($id == '') return array();
1101
		$additional_query = "spotter_output.spotter_id = :id";
1102
		$query_values = array(':id' => $id);
1103
1104
		//$query  = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ";
1105
		$query  = $global_query." WHERE ".$additional_query." ";
1106
1107
		$spotter_array = $this->getDataFromDB($query,$query_values);
1108
1109
		return $spotter_array;
1110
	}
1111
1112
	
1113
	
1114
	
1115
	/**
1116
	* Gets all the spotter information based on the callsign
1117
	*
1118
	* @return Array the spotter information
1119
	*
1120
	*/
1121
	public function getSpotterDataByIdent($ident = '', $limit = '', $sort = '')
1122
	{
1123
		global $global_query;
1124
		
1125
		date_default_timezone_set('UTC');
1126
		
1127
		$query_values = array();
1128
		$limit_query = '';
1129
		$additional_query = '';
1130
		if ($ident != "")
1131
		{
1132
			if (!is_string($ident))
1133
			{
1134
				return false;
1135
			} else {
1136
				$additional_query = " AND (spotter_output.ident = :ident)";
1137
				$query_values = array(':ident' => $ident);
1138
			}
1139
		}
1140
		
1141
		if ($limit != "")
1142
		{
1143
			$limit_array = explode(",", $limit);
1144
			
1145
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1146
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1147
			
1148
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1149
			{
1150
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1151
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1152
			}
1153
		}
1154
1155
		if ($sort != "")
1156
		{
1157
			$search_orderby_array = $this->getOrderBy();
1158
			$orderby_query = $search_orderby_array[$sort]['sql'];
1159
		} else {
1160
			$orderby_query = " ORDER BY spotter_output.date DESC";
1161
		}
1162
1163
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1164
1165
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1166
1167
		return $spotter_array;
1168
	}
1169
	
1170
	
1171
	
1172
	/**
1173
	* Gets all the spotter information based on the aircraft type
1174
	*
1175
	* @return Array the spotter information
1176
	*
1177
	*/
1178
	public function getSpotterDataByAircraft($aircraft_type = '', $limit = '', $sort = '', $filter = array())
1179
	{
1180
		global $global_query;
1181
		
1182
		date_default_timezone_set('UTC');
1183
		
1184
		$query_values = array();
1185
		$limit_query = '';
1186
		$additional_query = '';
1187
		$filter_query = $this->getFilter($filter);
1188
		
1189
		if ($aircraft_type != "")
1190
		{
1191
			if (!is_string($aircraft_type))
1192
			{
1193
				return false;
1194
			} else {
1195
				$additional_query = " AND (spotter_output.aircraft_icao = :aircraft_type)";
1196
				$query_values = array(':aircraft_type' => $aircraft_type);
1197
			}
1198
		}
1199
		
1200
		if ($limit != "")
1201
		{
1202
			$limit_array = explode(",", $limit);
1203
			
1204
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1205
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1206
			
1207
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1208
			{
1209
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1210
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1211
			}
1212
		}
1213
1214
		if ($sort != "")
1215
		{
1216
			$search_orderby_array = $this->getOrderBy();
1217
			$orderby_query = $search_orderby_array[$sort]['sql'];
1218
		} else {
1219
			$orderby_query = " ORDER BY spotter_output.date DESC";
1220
		}
1221
1222
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$filter_query.$orderby_query;
1223
1224
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1225
1226
		return $spotter_array;
1227
	}
1228
	
1229
	
1230
	/**
1231
	* Gets all the spotter information based on the aircraft registration
1232
	*
1233
	* @return Array the spotter information
1234
	*
1235
	*/
1236
	public function getSpotterDataByRegistration($registration = '', $limit = '', $sort = '', $filter = array())
1237
	{
1238
		global $global_query;
1239
		
1240
		date_default_timezone_set('UTC');
1241
		
1242
		$query_values = array();
1243
		$limit_query = '';
1244
		$additional_query = '';
1245
		$filter_query = $this->getFilter($filter);
1246
		
1247
		if ($registration != "")
1248
		{
1249
			if (!is_string($registration))
1250
			{
1251
				return false;
1252
			} else {
1253
				$additional_query = " AND (spotter_output.registration = :registration)";
1254
				$query_values = array(':registration' => $registration);
1255
			}
1256
		}
1257
		
1258
		if ($limit != "")
1259
		{
1260
			$limit_array = explode(",", $limit);
1261
			
1262
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1263
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1264
			
1265
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1266
			{
1267
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1268
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1269
			}
1270
		}
1271
1272
		if ($sort != "")
1273
		{
1274
			$search_orderby_array = $this->getOrderBy();
1275
			$orderby_query = $search_orderby_array[$sort]['sql'];
1276
		} else {
1277
			$orderby_query = " ORDER BY spotter_output.date DESC";
1278
		}
1279
1280
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$filter_query.$orderby_query;
1281
1282
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1283
1284
		return $spotter_array;
1285
	}
1286
1287
	
1288
	
1289
	
1290
	/**
1291
	* Gets all the spotter information based on the airline
1292
	*
1293
	* @return Array the spotter information
1294
	*
1295
	*/
1296
	public function getSpotterDataByAirline($airline = '', $limit = '', $sort = '')
1297
	{
1298
		global $global_query;
1299
		
1300
		date_default_timezone_set('UTC');
1301
1302
		$query_values = array();
1303
		$limit_query = '';
1304
		$additional_query = '';
1305
		
1306
		if ($airline != "")
1307
		{
1308
			if (!is_string($airline))
1309
			{
1310
				return false;
1311
			} else {
1312
				$additional_query = " AND (spotter_output.airline_icao = :airline)";
1313
				$query_values = array(':airline' => $airline);
1314
			}
1315
		}
1316
		
1317
		if ($limit != "")
1318
		{
1319
			$limit_array = explode(",", $limit);
1320
			
1321
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1322
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1323
			
1324
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1325
			{
1326
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1327
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1328
			}
1329
		}
1330
		
1331
		if ($sort != "")
1332
		{
1333
			$search_orderby_array = $this->getOrderBy();
1334
			$orderby_query = $search_orderby_array[$sort]['sql'];
1335
		} else {
1336
			$orderby_query = " ORDER BY spotter_output.date DESC";
1337
		}
1338
1339
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1340
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1341
1342
		return $spotter_array;
1343
	}
1344
	
1345
	
1346
	/**
1347
	* Gets all the spotter information based on the airport
1348
	*
1349
	* @return Array the spotter information
1350
	*
1351
	*/
1352
	public function getSpotterDataByAirport($airport = '', $limit = '', $sort = '')
1353
	{
1354
		global $global_query;
1355
		
1356
		date_default_timezone_set('UTC');
1357
		$query_values = array();
1358
		$limit_query = '';
1359
		$additional_query = '';
1360
		
1361
		if ($airport != "")
1362
		{
1363
			if (!is_string($airport))
1364
			{
1365
				return false;
1366
			} else {
1367
				$additional_query .= " AND ((spotter_output.departure_airport_icao = :airport) OR (spotter_output.arrival_airport_icao = :airport))";
1368
				$query_values = array(':airport' => $airport);
1369
			}
1370
		}
1371
		
1372
		if ($limit != "")
1373
		{
1374
			$limit_array = explode(",", $limit);
1375
			
1376
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1377
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1378
			
1379
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1380
			{
1381
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1382
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1383
			}
1384
		}
1385
		
1386
		if ($sort != "")
1387
		{
1388
			$search_orderby_array = $this->getOrderBy();
1389
			$orderby_query = $search_orderby_array[$sort]['sql'];
1390
		} else {
1391
			$orderby_query = " ORDER BY spotter_output.date DESC";
1392
		}
1393
1394
		$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;
1395
1396
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1397
1398
		return $spotter_array;
1399
	}
1400
1401
1402
1403
	/**
1404
	* Gets all the spotter information based on the date
1405
	*
1406
	* @return Array the spotter information
1407
	*
1408
	*/
1409
	public function getSpotterDataByDate($date = '', $limit = '', $sort = '',$filter = array())
1410
	{
1411
		global $global_query, $globalTimezone, $globalDBdriver;
1412
		
1413
		$query_values = array();
1414
		$limit_query = '';
1415
		$additional_query = '';
1416
1417
		$filter_query = '';
1418
		if (isset($filter['source']) && !empty($filter['source'])) {
1419
			$filter_query = " AND format_source IN ('".implode("','",$filter['source'])."')";
1420
		}
1421
		if (isset($filter['airlines']) && !empty($filter['airlines'])) {
1422
			$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";
1423
		}
1424
		if (isset($filter['airlinestype']) && !empty($filter['airlinestype'])) {
1425
			$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 ";
1426
		}
1427
		if (isset($filter['source_aprs']) && !empty($filter['source_aprs'])) {
1428
			$filter_query = " AND format_source = 'aprs' AND source_name IN ('".implode("','",$filter['source_aprs'])."')";
1429
		}
1430
		if (isset($filter['pilots_id']) && !empty($filter['pilots_id'])) {
1431
			$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";
1432
		}
1433
	
1434
		
1435
		if ($date != "")
1436
		{
1437
			if ($globalTimezone != '') {
1438
				date_default_timezone_set($globalTimezone);
1439
				$datetime = new DateTime($date);
1440
				$offset = $datetime->format('P');
1441
			} else {
1442
				date_default_timezone_set('UTC');
1443
				$datetime = new DateTime($date);
1444
				$offset = '+00:00';
1445
			}
1446
			if ($globalDBdriver == 'mysql') {
1447
				$additional_query = " AND DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) = :date ";
1448
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':offset' => $offset);
1449
			} elseif ($globalDBdriver == 'pgsql') {
1450
				$additional_query = " AND to_char(spotter_output.date AT TIME ZONE :timezone,'YYYY-mm-dd') = :date ";
1451
				$query_values = array(':date' => $datetime->format('Y-m-d'), ':timezone' => $globalTimezone);
1452
			}
1453
		}
1454
		
1455
		if ($limit != "")
1456
		{
1457
			$limit_array = explode(",", $limit);
1458
			
1459
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1460
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1461
			
1462
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1463
			{
1464
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1465
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1466
			}
1467
		}
1468
1469
		if ($sort != "")
1470
		{
1471
			$search_orderby_array = $this->getOrderBy();
1472
			$orderby_query = $search_orderby_array[$sort]['sql'];
1473
		} else {
1474
			$orderby_query = " ORDER BY spotter_output.date DESC";
1475
		}
1476
1477
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query.$filter_array." ".$orderby_query;
0 ignored issues
show
Bug introduced by
The variable $filter_array does not exist. Did you mean $filter?

This check looks for variables that are accessed but have not been defined. It raises an issue if it finds another variable that has a similar name.

The variable may have been renamed without also renaming all references.

Loading history...
1478
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1479
		return $spotter_array;
1480
	}
1481
1482
1483
1484
	/**
1485
	* Gets all the spotter information based on the country name
1486
	*
1487
	* @return Array the spotter information
1488
	*
1489
	*/
1490
	public function getSpotterDataByCountry($country = '', $limit = '', $sort = '')
1491
	{
1492
		global $global_query;
1493
		
1494
		date_default_timezone_set('UTC');
1495
		
1496
		$query_values = array();
1497
		$limit_query = '';
1498
		$additional_query = '';
1499
		if ($country != "")
1500
		{
1501
			if (!is_string($country))
1502
			{
1503
				return false;
1504
			} else {
1505
				$additional_query .= " AND ((spotter_output.departure_airport_country = :country) OR (spotter_output.arrival_airport_country = :country))";
1506
				$additional_query .= " OR spotter_output.airline_country = :country";
1507
				$query_values = array(':country' => $country);
1508
			}
1509
		}
1510
		
1511
		if ($limit != "")
1512
		{
1513
			$limit_array = explode(",", $limit);
1514
			
1515
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1516
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1517
			
1518
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1519
			{
1520
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1521
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1522
			}
1523
		}
1524
					
1525
		if ($sort != "")
1526
		{
1527
			$search_orderby_array = $this->getOrderBy();
1528
			$orderby_query = $search_orderby_array[$sort]['sql'];
1529
		} else {
1530
			$orderby_query = " ORDER BY spotter_output.date DESC";
1531
		}
1532
1533
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1534
1535
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1536
1537
		return $spotter_array;
1538
	}	
1539
	
1540
	
1541
	/**
1542
	* Gets all the spotter information based on the manufacturer name
1543
	*
1544
	* @return Array the spotter information
1545
	*
1546
	*/
1547
	public function getSpotterDataByManufacturer($aircraft_manufacturer = '', $limit = '', $sort = '')
1548
	{
1549
		global $global_query;
1550
		
1551
		date_default_timezone_set('UTC');
1552
		
1553
		$query_values = array();
1554
		$additional_query = '';
1555
		$limit_query = '';
1556
		
1557
		if ($aircraft_manufacturer != "")
1558
		{
1559
			if (!is_string($aircraft_manufacturer))
1560
			{
1561
				return false;
1562
			} else {
1563
				$additional_query .= " AND (spotter_output.aircraft_manufacturer = :aircraft_manufacturer)";
1564
				$query_values = array(':aircraft_manufacturer' => $aircraft_manufacturer);
1565
			}
1566
		}
1567
		
1568
		if ($limit != "")
1569
		{
1570
			$limit_array = explode(",", $limit);
1571
			
1572
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1573
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1574
			
1575
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1576
			{
1577
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1578
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1579
			}
1580
		}
1581
1582
		if ($sort != "")
1583
		{
1584
			$search_orderby_array = $this->getOrderBy();
1585
			$orderby_query = $search_orderby_array[$sort]['sql'];
1586
		} else {
1587
			$orderby_query = " ORDER BY spotter_output.date DESC";
1588
		}
1589
1590
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1591
1592
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1593
1594
		return $spotter_array;
1595
	}
1596
1597
1598
  
1599
  
1600
	/**
1601
	* Gets a list of all aircraft that take a route
1602
	*
1603
	* @param String $departure_airport_icao ICAO code of departure airport
1604
	* @param String $arrival_airport_icao ICAO code of arrival airport
1605
	* @return Array the spotter information
1606
	*
1607
	*/
1608
	public function getSpotterDataByRoute($departure_airport_icao = '', $arrival_airport_icao = '', $limit = '', $sort = '')
1609
	{
1610
		global $global_query;
1611
		
1612
		$query_values = array();
1613
		$additional_query = '';
1614
		$limit_query = '';
1615
		if ($departure_airport_icao != "")
1616
		{
1617
			if (!is_string($departure_airport_icao))
1618
			{
1619
				return false;
1620
			} else {
1621
				$departure_airport_icao = filter_var($departure_airport_icao,FILTER_SANITIZE_STRING);
1622
				$additional_query .= " AND (spotter_output.departure_airport_icao = :departure_airport_icao)";
1623
				$query_values = array(':departure_airport_icao' => $departure_airport_icao);
1624
			}
1625
		}
1626
		
1627
		if ($arrival_airport_icao != "")
1628
		{
1629
			if (!is_string($arrival_airport_icao))
1630
			{
1631
				return false;
1632
			} else {
1633
				$arrival_airport_icao = filter_var($arrival_airport_icao,FILTER_SANITIZE_STRING);
1634
				$additional_query .= " AND (spotter_output.arrival_airport_icao = :arrival_airport_icao)";
1635
				$query_values = array_merge($query_values,array(':arrival_airport_icao' => $arrival_airport_icao));
1636
			}
1637
		}
1638
		
1639
		if ($limit != "")
1640
		{
1641
			$limit_array = explode(",", $limit);
1642
			
1643
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1644
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1645
			
1646
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1647
			{
1648
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1649
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1650
			}
1651
		}
1652
	
1653
		if ($sort != "")
1654
		{
1655
			$search_orderby_array = $this->getOrderBy();
1656
			$orderby_query = $search_orderby_array[$sort]['sql'];
1657
		} else {
1658
			$orderby_query = " ORDER BY spotter_output.date DESC";
1659
		}
1660
1661
		$query = $global_query." WHERE spotter_output.ident <> '' ".$additional_query." ".$orderby_query;
1662
          
1663
		//$result = mysqli_query($GLOBALS["___mysqli_ston"], $query);
1664
1665
		$spotter_array = $this->getDataFromDB($query, $query_values, $limit_query);
1666
1667
		return $spotter_array;
1668
	}
1669
	
1670
	
1671
	
1672
	/**
1673
	* Gets all the spotter information based on the special column in the table
1674
	*
1675
	* @return Array the spotter information
1676
	*
1677
	*/
1678
	public function getSpotterDataByHighlight($limit = '', $sort = '', $filter = array())
1679
	{
1680
		global $global_query;
1681
		
1682
		date_default_timezone_set('UTC');
1683
		$filter_query = $this->getFilter($filter);
1684
		$limit_query = '';
1685
		
1686
		if ($limit != "")
1687
		{
1688
			$limit_array = explode(",", $limit);
1689
			
1690
			$limit_array[0] = filter_var($limit_array[0],FILTER_SANITIZE_NUMBER_INT);
1691
			$limit_array[1] = filter_var($limit_array[1],FILTER_SANITIZE_NUMBER_INT);
1692
			
1693
			if ($limit_array[0] >= 0 && $limit_array[1] >= 0)
1694
			{
1695
				//$limit_query = " LIMIT ".$limit_array[0].",".$limit_array[1];
1696
				$limit_query = " LIMIT ".$limit_array[1]." OFFSET ".$limit_array[0];
1697
			}
1698
		}
1699
		
1700
		if ($sort != "")
1701
		{
1702
			$search_orderby_array = $this->getOrderBy();
1703
			$orderby_query = $search_orderby_array[$sort]['sql'];
1704
		} else {
1705
			$orderby_query = " ORDER BY spotter_output.date DESC";
1706
		}
1707
1708
		$query  = $global_query." WHERE spotter_output.highlight <> '' ".$filter_query.$orderby_query;
1709
1710
		$spotter_array = $this->getDataFromDB($query, array(), $limit_query);
1711
1712
		return $spotter_array;
1713
	}
1714
1715
	/**
1716
	* Gets all the highlight based on a aircraft registration
1717
	*
1718
	* @return String the highlight text
1719
	*
1720
	*/
1721
	public function getHighlightByRegistration($registration,$filter = array())
1722
	{
1723
		global $global_query;
1724
		
1725
		date_default_timezone_set('UTC');
1726
		$filter_query = $this->getFilter($filter);
1727
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
1728
		
1729
		$query  = $global_query." WHERE spotter_output.highlight <> '' AND spotter_output.registration = :registration";
1730
		$query .= $filter_query;
1731
		$sth = $this->db->prepare($query);
1732
		$sth->execute(array(':registration' => $registration));
1733
1734
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1735
		{
1736
			$highlight = $row['highlight'];
1737
		}
1738
		if (isset($highlight)) return $highlight;
1739
	}
1740
1741
	
1742
	/**
1743
	* Gets the squawk usage from squawk code
1744
	*
1745
	* @param String $squawk squawk code
1746
	* @param String $country country
1747
	* @return String usage
1748
	*
1749
	*/
1750
	public function getSquawkUsage($squawk = '',$country = 'FR')
1751
	{
1752
		
1753
		$squawk = filter_var($squawk,FILTER_SANITIZE_STRING);
1754
		$country = filter_var($country,FILTER_SANITIZE_STRING);
1755
1756
		$query  = "SELECT squawk.* FROM squawk WHERE squawk.code = :squawk AND squawk.country = :country LIMIT 1";
1757
		$query_values = array(':squawk' => ltrim($squawk,'0'), ':country' => $country);
1758
		
1759
		$sth = $this->db->prepare($query);
1760
		$sth->execute($query_values);
1761
    
1762
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1763
		if (count($row) > 0) {
1764
			return $row['usage'];
1765
		} else return '';
1766
	}
1767
1768
	/**
1769
	* Gets the airport icao from the iata
1770
	*
1771
	* @param String $airport_iata the iata code of the airport
1772
	* @return String airport iata
1773
	*
1774
	*/
1775
	public function getAirportIcao($airport_iata = '')
1776
	{
1777
		
1778
		$airport_iata = filter_var($airport_iata,FILTER_SANITIZE_STRING);
1779
1780
		$query  = "SELECT airport.* FROM airport WHERE airport.iata = :airport LIMIT 1";
1781
		$query_values = array(':airport' => $airport_iata);
1782
		
1783
		$sth = $this->db->prepare($query);
1784
		$sth->execute($query_values);
1785
		
1786
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1787
		if (count($row) > 0) {
1788
			return $row['icao'];
1789
		} else return '';
1790
	}
1791
1792
	/**
1793
	* Gets the airport distance
1794
	*
1795
	* @param String $airport_icao the icao code of the airport
1796
	* @param Float $latitude the latitude
1797
	* @param Float $longitude the longitude
1798
	* @return Float distance to the airport
1799
	*
1800
	*/
1801
	public function getAirportDistance($airport_icao,$latitude,$longitude)
1802
	{
1803
		
1804
		$airport_icao = filter_var($airport_icao,FILTER_SANITIZE_STRING);
1805
1806
		$query  = "SELECT airport.latitude, airport.longitude FROM airport WHERE airport.icao = :airport LIMIT 1";
1807
		$query_values = array(':airport' => $airport_icao);
1808
		$sth = $this->db->prepare($query);
1809
		$sth->execute($query_values);
1810
		$row = $sth->fetch(PDO::FETCH_ASSOC);
1811
		if (count($row) > 0) {
1812
			$airport_latitude = $row['latitude'];
1813
			$airport_longitude = $row['longitude'];
1814
			$Common = new Common();
1815
			return $Common->distance($latitude,$longitude,$airport_latitude,$airport_longitude);
1816
		} else return '';
1817
	}
1818
	
1819
	/**
1820
	* Gets the airport info based on the icao
1821
	*
1822
	* @param String $airport the icao code of the airport
1823
	* @return Array airport information
1824
	*
1825
	*/
1826
	public function getAllAirportInfo($airport = '')
1827
	{
1828
		
1829
		$airport = filter_var($airport,FILTER_SANITIZE_STRING);
1830
1831
		$query_values = array();
1832
		if ($airport == 'NA') {
1833
			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' => ''));
1834
		} elseif ($airport == '') {
1835
			$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";
1836
		} else {
1837
			$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";
1838
			$query_values = array(':airport' => $airport);
1839
		}
1840
		
1841
		$sth = $this->db->prepare($query);
1842
		$sth->execute($query_values);
1843
		/*
1844
		$airport_array = array();
1845
		$temp_array = array();
1846
		
1847
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1848
		{
1849
			$temp_array['name'] = $row['name'];
1850
			$temp_array['city'] = $row['city'];
1851
			$temp_array['country'] = $row['country'];
1852
			$temp_array['iata'] = $row['iata'];
1853
			$temp_array['icao'] = $row['icao'];
1854
			$temp_array['latitude'] = $row['latitude'];
1855
			$temp_array['longitude'] = $row['longitude'];
1856
			$temp_array['altitude'] = $row['altitude'];
1857
			$temp_array['home_link'] = $row['home_link'];
1858
			$temp_array['wikipedia_link'] = $row['wikipedia_link'];
1859
			$temp_array['image'] = $row['image'];
1860
			$temp_array['image_thumb'] = $row['image_thumb'];
1861
1862
			$airport_array[] = $temp_array;
1863
		}
1864
1865
		return $airport_array;
1866
		*/
1867
		return $sth->fetchAll(PDO::FETCH_ASSOC);
1868
	}
1869
	
1870
	/**
1871
	* Gets the airport info based on the country
1872
	*
1873
	* @param Array $countries Airports countries
1874
	* @return Array airport information
1875
	*
1876
	*/
1877
	public function getAllAirportInfobyCountry($countries)
1878
	{
1879
		$lst_countries = '';
1880
		foreach ($countries as $country) {
1881
			$country = filter_var($country,FILTER_SANITIZE_STRING);
1882
			if ($lst_countries == '') {
1883
				$lst_countries = "'".$country."'";
1884
			} else {
1885
				$lst_countries .= ",'".$country."'";
1886
			}
1887
		}
1888
		$query  = "SELECT airport.* FROM airport WHERE airport.country IN (".$lst_countries.")";
1889
		
1890
		$sth = $this->db->prepare($query);
1891
		$sth->execute();
1892
    
1893
		$airport_array = array();
1894
		$temp_array = array();
1895
		
1896
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1897
		{
1898
			$temp_array['name'] = $row['name'];
1899
			$temp_array['city'] = $row['city'];
1900
			$temp_array['country'] = $row['country'];
1901
			$temp_array['iata'] = $row['iata'];
1902
			$temp_array['icao'] = $row['icao'];
1903
			$temp_array['latitude'] = $row['latitude'];
1904
			$temp_array['longitude'] = $row['longitude'];
1905
			$temp_array['altitude'] = $row['altitude'];
1906
1907
			$airport_array[] = $temp_array;
1908
		}
1909
1910
		return $airport_array;
1911
	}
1912
	
1913
	/**
1914
	* Gets airports info based on the coord
1915
	*
1916
	* @param Array $coord Airports longitude min,latitude min, longitude max, latitude max
1917
	* @return Array airport information
1918
	*
1919
	*/
1920
	public function getAllAirportInfobyCoord($coord)
1921
	{
1922
		global $globalDBdriver;
1923
		if (is_array($coord)) {
1924
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1925
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1926
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1927
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1928
		} else return array();
1929
		if ($globalDBdriver == 'mysql') {
1930
			$query  = "SELECT airport.* FROM airport WHERE airport.latitude BETWEEN ".$minlat." AND ".$maxlat." AND airport.longitude BETWEEN ".$minlong." AND ".$maxlong." AND airport.type != 'closed'";
1931
		} else {
1932
			$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'";
1933
		}
1934
		$sth = $this->db->prepare($query);
1935
		$sth->execute();
1936
    
1937
		$airport_array = array();
1938
		
1939
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1940
		{
1941
			$temp_array = $row;
1942
1943
			$airport_array[] = $temp_array;
1944
		}
1945
1946
		return $airport_array;
1947
	}
1948
1949
	/**
1950
	* Gets waypoints info based on the coord
1951
	*
1952
	* @param Array $coord waypoints coord
1953
	* @return Array airport information
1954
	*
1955
	*/
1956
	public function getAllWaypointsInfobyCoord($coord)
1957
	{
1958
		if (is_array($coord)) {
1959
			$minlong = filter_var($coord[0],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1960
			$minlat = filter_var($coord[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1961
			$maxlong = filter_var($coord[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1962
			$maxlat = filter_var($coord[3],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
1963
		} else return array();
1964
		//$query  = "SELECT waypoints.* FROM waypoints WHERE waypoints.latitude_begin BETWEEN ".$minlat." AND ".$maxlat." AND waypoints.longitude_begin BETWEEN ".$minlong." AND ".$maxlong;
1965
		$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.")";
1966
		//$query  = "SELECT waypoints.* FROM waypoints";
1967
		//$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";
1968
		//$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;
1969
		//$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;
1970
		//echo $query;
1971
		
1972
		$sth = $this->db->prepare($query);
1973
		$sth->execute();
1974
    
1975
		$waypoints_array = array();
1976
		
1977
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
1978
		{
1979
			$temp_array = $row;
1980
1981
			$waypoints_array[] = $temp_array;
1982
		}
1983
1984
		return $waypoints_array;
1985
	}
1986
	
1987
	
1988
	/**
1989
	* Gets the airline info based on the icao code or iata code
1990
	*
1991
	* @param String $airline_icao the iata code of the airport
1992
	* @return Array airport information
1993
	*
1994
	*/
1995
	public function getAllAirlineInfo($airline_icao, $fromsource = NULL)
1996
	{
1997
		$airline_icao = strtoupper(filter_var($airline_icao,FILTER_SANITIZE_STRING));
1998
		if ($airline_icao == 'NA') {
1999
			$airline_array = array();
2000
			$airline_array[] = array('name' => 'Not Available','iata' => 'NA', 'icao' => 'NA', 'callsign' => '', 'country' => 'NA', 'type' =>'');
2001
			return $airline_array;
2002
		} else {
2003
			if (strlen($airline_icao) == 2) {
2004
				if ($fromsource === NULL) {
2005
					$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";
2006
				} else {
2007
					$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";
2008
				}
2009
			} else {
2010
				if ($fromsource === NULL) {
2011
					$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";
2012
				} else {
2013
					$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";
2014
				}
2015
			}
2016
			
2017
			$sth = $this->db->prepare($query);
2018
			if ($fromsource === NULL) {
2019
				$sth->execute(array(':airline_icao' => $airline_icao));
2020
			} else {
2021
				$sth->execute(array(':airline_icao' => $airline_icao,':fromsource' => $fromsource));
2022
			}
2023
                        /*
2024
			$airline_array = array();
2025
			$temp_array = array();
2026
		
2027
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2028
			{
2029
				$temp_array['name'] = $row['name'];
2030
				$temp_array['iata'] = $row['iata'];
2031
				$temp_array['icao'] = $row['icao'];
2032
				$temp_array['callsign'] = $row['callsign'];
2033
				$temp_array['country'] = $row['country'];
2034
				$temp_array['type'] = $row['type'];
2035
				$airline_array[] = $temp_array;
2036
			}
2037
			return $airline_array;
2038
			*/
2039
			return $sth->fetchAll(PDO::FETCH_ASSOC);
2040
		}
2041
	}
2042
	
2043
	
2044
	
2045
	/**
2046
	* Gets the aircraft info based on the aircraft type
2047
	*
2048
	* @param String $aircraft_type the aircraft type
2049
	* @return Array aircraft information
2050
	*
2051
	*/
2052
	public function getAllAircraftInfo($aircraft_type)
2053
	{
2054
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2055
2056
		if ($aircraft_type == 'NA') {
2057
			return array(array('icao' => 'NA','type' => 'Not Available', 'manufacturer' => 'Not Available', 'aircraft_shadow' => NULL));
2058
		}
2059
		$query  = "SELECT aircraft.icao, aircraft.type,aircraft.manufacturer,aircraft.aircraft_shadow FROM aircraft WHERE aircraft.icao = :aircraft_type";
2060
		
2061
		$sth = $this->db->prepare($query);
2062
		$sth->execute(array(':aircraft_type' => $aircraft_type));
2063
		/*
2064
		$aircraft_array = array();
2065
		$temp_array = array();
2066
		
2067
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2068
		{
2069
			$temp_array = array();
2070
			$temp_array['icao'] = $row['icao'];
2071
			$temp_array['type'] = $row['type'];
2072
			$temp_array['manufacturer'] = $row['manufacturer'];
2073
			$temp_array['aircraft_shadow'] = $row['aircraft_shadow'];
2074
2075
			$aircraft_array[] = $temp_array;
2076
		}
2077
		return $aircraft_array;
2078
		*/
2079
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2080
	}
2081
2082
	/**
2083
	* Gets the aircraft icao based on the aircraft name/type
2084
	*
2085
	* @param String $aircraft_type the aircraft type
2086
	* @return String aircraft information
2087
	*
2088
	*/
2089
	public function getAircraftIcao($aircraft_type)
2090
	{
2091
		$aircraft_type = filter_var($aircraft_type,FILTER_SANITIZE_STRING);
2092
		$all_aircraft = array('737-300' => 'B733',
2093
				'777-200' => 'B772',
2094
				'777-200ER' => 'B772',
2095
				'777-300ER' => 'B77W',
2096
				'c172p' => 'C172',
2097
				'aerostar' => 'AEST',
2098
				'A320-211' => 'A320',
2099
				'747-8i' => 'B748',
2100
				'A380' => 'A388');
2101
		if (isset($all_aircraft[$aircraft_type])) return $all_aircraft[$aircraft_type];
2102
2103
		$query  = "SELECT aircraft.icao FROM aircraft WHERE aircraft.type LIKE :saircraft_type OR aircraft.type = :aircraft_type OR aircraft.icao = :aircraft_type LIMIT 1";
2104
		$aircraft_type = strtoupper($aircraft_type);
2105
		$sth = $this->db->prepare($query);
2106
		$sth->execute(array(':saircraft_type' => '%'.$aircraft_type.'%',':aircraft_type' => $aircraft_type,));
2107
		$result = $sth->fetchAll(PDO::FETCH_ASSOC);
2108
		if (isset($result[0]['icao'])) return $result[0]['icao'];
2109
		else return '';
2110
	}
2111
	
2112
	/**
2113
	* Gets the aircraft info based on the aircraft ident
2114
	*
2115
	* @param String $aircraft_modes the aircraft ident (hex)
2116
	* @return String aircraft type
2117
	*
2118
	*/
2119
	public function getAllAircraftType($aircraft_modes)
2120
	{
2121
		$aircraft_modes = filter_var($aircraft_modes,FILTER_SANITIZE_STRING);
2122
2123
		$query  = "SELECT aircraft_modes.ICAOTypeCode FROM aircraft_modes WHERE aircraft_modes.ModeS = :aircraft_modes LIMIT 1";
2124
		
2125
		$sth = $this->db->prepare($query);
2126
		$sth->execute(array(':aircraft_modes' => $aircraft_modes));
2127
2128
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2129
		if (isset($row['icaotypecode'])) {
2130
			return $row['icaotypecode'];
2131
		} else return '';
2132
	}
2133
2134
	/**
2135
	* Gets correct aircraft operator corde
2136
	*
2137
	* @param String $operator the aircraft operator code (callsign)
2138
	* @return String aircraft operator code
2139
	*
2140
	*/
2141
	public function getOperator($operator)
2142
	{
2143
		$operator = filter_var($operator,FILTER_SANITIZE_STRING);
2144
		$query  = "SELECT translation.operator_correct FROM translation WHERE translation.operator = :operator LIMIT 1";
2145
		
2146
		$sth = $this->db->prepare($query);
2147
		$sth->execute(array(':operator' => $operator));
2148
2149
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2150
		if (isset($row['operator_correct'])) {
2151
			return $row['operator_correct'];
2152
		} else return $operator;
2153
	}
2154
2155
	/**
2156
	* Gets the aircraft route based on the aircraft callsign
2157
	*
2158
	* @param String $callsign the aircraft callsign
2159
	* @return Array aircraft type
2160
	*
2161
	*/
2162
	public function getRouteInfo($callsign)
2163
	{
2164
		$callsign = filter_var($callsign,FILTER_SANITIZE_STRING);
2165
                if ($callsign == '') return array();
2166
		$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";
2167
		
2168
		$sth = $this->db->prepare($query);
2169
		$sth->execute(array(':callsign' => $callsign));
2170
2171
		$row = $sth->fetch(PDO::FETCH_ASSOC);
2172
		if (count($row) > 0) {
2173
			return $row;
2174
		} else return array();
2175
	}
2176
	
2177
	/**
2178
	* Gets the aircraft info based on the aircraft registration
2179
	*
2180
	* @param String $registration the aircraft registration
2181
	* @return Array aircraft information
2182
	*
2183
	*/
2184
	public function getAircraftInfoByRegistration($registration)
2185
	{
2186
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2187
2188
		$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";
2189
		
2190
		$sth = $this->db->prepare($query);
2191
		$sth->execute(array(':registration' => $registration));
2192
2193
		$aircraft_array = array();
2194
		$temp_array = array();
2195
		
2196
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2197
		{
2198
			$temp_array['airline_icao'] = $row['airline_icao'];
2199
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2200
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2201
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2202
2203
			$aircraft_array[] = $temp_array;
2204
		}
2205
2206
		return $aircraft_array;
2207
	}
2208
	
2209
	/**
2210
	* Gets the aircraft owner & base based on the aircraft registration
2211
	*
2212
	* @param String $registration the aircraft registration
2213
	* @return Array aircraft information
2214
	*
2215
	*/
2216
	public function getAircraftOwnerByRegistration($registration)
2217
	{
2218
		$registration = filter_var($registration,FILTER_SANITIZE_STRING);
2219
		$Connection = new Connection($this->db);
2220
		if ($Connection->tableExists('aircraft_owner')) {
2221
			$query  = "SELECT aircraft_owner.base, aircraft_owner.owner, aircraft_owner.date_first_reg FROM aircraft_owner WHERE registration = :registration LIMIT 1";
2222
			$sth = $this->db->prepare($query);
2223
			$sth->execute(array(':registration' => $registration));
2224
2225
			return $sth->fetch(PDO::FETCH_ASSOC);
2226
		} else return array();
2227
	}
2228
	
2229
  
2230
  /**
2231
	* Gets all flights (but with only little info)
2232
	*
2233
	* @return Array basic flight information
2234
	*
2235
	*/
2236
	public function getAllFlightsforSitemap()
2237
	{
2238
		//$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 ";
2239
		$query  = "SELECT spotter_output.spotter_id FROM spotter_output ORDER BY spotter_id DESC LIMIT 200 OFFSET 0";
2240
		
2241
		$sth = $this->db->prepare($query);
2242
		$sth->execute();
2243
                  /*
2244
		$flight_array = array();
2245
		$temp_array = array();
2246
		
2247
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2248
		{
2249
			$temp_array['spotter_id'] = $row['spotter_id'];
2250
//			$temp_array['ident'] = $row['ident'];
2251
//			$temp_array['airline_name'] = $row['airline_name'];
2252
//			$temp_array['aircraft_type'] = $row['aircraft_icao'];
2253
//			$temp_array['aircraft_name'] = $row['aircraft_name'];
2254
			//$temp_array['image'] = $row['image'];
2255
2256
			$flight_array[] = $temp_array;
2257
		}
2258
2259
		return $flight_array;
2260
		*/
2261
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2262
	}
2263
  
2264
	/**
2265
	* Gets a list of all aircraft manufacturers
2266
	*
2267
	* @return Array list of aircraft types
2268
	*
2269
	*/
2270
	public function getAllManufacturers()
2271
	{
2272
		/*
2273
		$query  = "SELECT DISTINCT spotter_output.aircraft_manufacturer AS aircraft_manufacturer
2274
								FROM spotter_output
2275
								WHERE spotter_output.aircraft_manufacturer <> '' 
2276
								ORDER BY spotter_output.aircraft_manufacturer ASC";
2277
		  */
2278
		
2279
		$query = "SELECT DISTINCT manufacturer AS aircraft_manufacturer FROM aircraft WHERE manufacturer <> '' ORDER BY manufacturer ASC";
2280
		$sth = $this->db->prepare($query);
2281
		$sth->execute();
2282
2283
		$manufacturer_array = array();
2284
		$temp_array = array();
2285
		
2286
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2287
		{
2288
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2289
2290
			$manufacturer_array[] = $temp_array;
2291
		}
2292
2293
		return $manufacturer_array;
2294
	}
2295
  
2296
  
2297
  /**
2298
	* Gets a list of all aircraft types
2299
	*
2300
	* @return Array list of aircraft types
2301
	*
2302
	*/
2303
	public function getAllAircraftTypes()
2304
	{
2305
		/*
2306
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2307
								FROM spotter_output  
2308
								WHERE spotter_output.aircraft_icao <> '' 
2309
								ORDER BY spotter_output.aircraft_name ASC";
2310
								
2311
		*/
2312
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2313
		
2314
		$sth = $this->db->prepare($query);
2315
		$sth->execute();
2316
2317
		$aircraft_array = array();
2318
		$temp_array = array();
2319
		
2320
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2321
		{
2322
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2323
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2324
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2325
2326
			$aircraft_array[] = $temp_array;
2327
		}
2328
2329
		return $aircraft_array;
2330
	}
2331
	
2332
	
2333
	/**
2334
	* Gets a list of all aircraft registrations
2335
	*
2336
	* @return Array list of aircraft registrations
2337
	*
2338
	*/
2339
	public function getAllAircraftRegistrations()
2340
	{
2341
		$query  = "SELECT DISTINCT spotter_output.registration 
2342
				FROM spotter_output  
2343
				WHERE spotter_output.registration <> '' 
2344
				ORDER BY spotter_output.registration ASC";
2345
2346
		$sth = $this->db->prepare($query);
2347
		$sth->execute();
2348
2349
		$aircraft_array = array();
2350
		$temp_array = array();
2351
		
2352
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2353
		{
2354
			$temp_array['registration'] = $row['registration'];
2355
2356
			$aircraft_array[] = $temp_array;
2357
		}
2358
2359
		return $aircraft_array;
2360
	}
2361
2362
	/**
2363
	* Gets all source name
2364
	*
2365
	* @param String type format of source
2366
	* @return Array list of source name
2367
	*
2368
	*/
2369
	public function getAllSourceName($type = '')
2370
	{
2371
		$query_values = array();
2372
		$query  = "SELECT DISTINCT spotter_output.source_name 
2373
				FROM spotter_output  
2374
				WHERE spotter_output.source_name <> ''";
2375
		if ($type != '') {
2376
			$query_values = array(':type' => $type);
2377
			$query .= " AND format_source = :type";
2378
		}
2379
		$query .= " ORDER BY spotter_output.source_name ASC";
2380
2381
		$sth = $this->db->prepare($query);
2382
		if (!empty($query_values)) $sth->execute($query_values);
2383
		else $sth->execute();
2384
2385
		$source_array = array();
2386
		$temp_array = array();
2387
		
2388
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2389
		{
2390
			$temp_array['source_name'] = $row['source_name'];
2391
			$source_array[] = $temp_array;
2392
		}
2393
		return $source_array;
2394
	}
2395
2396
2397
2398
	/**
2399
	* Gets a list of all airline names
2400
	*
2401
	* @return Array list of airline names
2402
	*
2403
	*/
2404
	public function getAllAirlineNames($airline_type = '')
2405
	{
2406
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2407
		if ($airline_type == '' || $airline_type == 'all') {
2408
			/*
2409
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2410
								FROM spotter_output
2411
								WHERE spotter_output.airline_icao <> '' 
2412
								ORDER BY spotter_output.airline_name ASC";
2413
			*/
2414
			$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines ORDER BY name ASC";
2415
		} else {
2416
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2417
					FROM spotter_output
2418
					WHERE spotter_output.airline_icao <> '' 
2419
					AND spotter_output.airline_type = :airline_type 
2420
					ORDER BY spotter_output.airline_icao ASC";
2421
		}
2422
		
2423
		$sth = $this->db->prepare($query);
2424
		if ($airline_type != '' || $airline_type == 'all') {
2425
			$sth->execute(array(':airline_type' => $airline_type));
2426
		} else {
2427
			$sth->execute();
2428
		}
2429
    
2430
		$airline_array = array();
2431
		$temp_array = array();
2432
		
2433
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2434
		{
2435
			$temp_array['airline_icao'] = $row['airline_icao'];
2436
			$temp_array['airline_name'] = $row['airline_name'];
2437
			$temp_array['airline_type'] = $row['airline_type'];
2438
2439
			$airline_array[] = $temp_array;
2440
		}
2441
		return $airline_array;
2442
	}
2443
	
2444
	
2445
	/**
2446
	* Gets a list of all airline countries
2447
	*
2448
	* @return Array list of airline countries
2449
	*
2450
	*/
2451
	public function getAllAirlineCountries()
2452
	{
2453
		
2454
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2455
				FROM spotter_output  
2456
				WHERE spotter_output.airline_country <> '' 
2457
				ORDER BY spotter_output.airline_country ASC";
2458
		
2459
		//$query = "SELECT DISTINCT country AS airline_country FROM airlines WHERE country <> '' AND active = 'Y' ORDER BY country ASC";
2460
		$sth = $this->db->prepare($query);
2461
		$sth->execute();
2462
2463
		$airline_array = array();
2464
		$temp_array = array();
2465
		
2466
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2467
		{
2468
			$temp_array['airline_country'] = $row['airline_country'];
2469
2470
			$airline_array[] = $temp_array;
2471
		}
2472
2473
		return $airline_array;
2474
	}
2475
2476
	
2477
	
2478
	/**
2479
	* Gets a list of all departure & arrival names
2480
	*
2481
	* @return Array list of airport names
2482
	*
2483
	*/
2484
	public function getAllAirportNames()
2485
	{
2486
		$airport_array = array();
2487
2488
		$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
2489
				FROM spotter_output 
2490
				WHERE spotter_output.departure_airport_icao <> '' AND spotter_output.departure_airport_icao <> 'NA' 
2491
				ORDER BY spotter_output.departure_airport_city ASC";
2492
		
2493
		//$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";
2494
		$sth = $this->db->prepare($query);
2495
		$sth->execute();
2496
2497
		$temp_array = array();
2498
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2499
		{
2500
			$temp_array['airport_icao'] = $row['airport_icao'];
2501
			$temp_array['airport_name'] = $row['airport_name'];
2502
			$temp_array['airport_city'] = $row['airport_city'];
2503
			$temp_array['airport_country'] = $row['airport_country'];
2504
2505
			$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2506
		}
2507
2508
		$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
2509
								FROM spotter_output 
2510
								WHERE spotter_output.arrival_airport_icao <> '' AND spotter_output.arrival_airport_icao <> 'NA' 
2511
								ORDER BY spotter_output.arrival_airport_city ASC";
2512
					
2513
		$sth = $this->db->prepare($query);
2514
		$sth->execute();
2515
2516
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2517
			{
2518
		//	if ($airport_array[$row['airport_city'].",".$row['airport_name']]['airport_icao'] != $row['airport_icao'])
2519
		//	{
2520
				$temp_array['airport_icao'] = $row['airport_icao'];
2521
				$temp_array['airport_name'] = $row['airport_name'];
2522
				$temp_array['airport_city'] = $row['airport_city'];
2523
				$temp_array['airport_country'] = $row['airport_country'];
2524
				
2525
				$airport_array[$row['airport_city'].",".$row['airport_name']] = $temp_array;
2526
		//	}
2527
		}
2528
2529
		return $airport_array;
2530
	} 
2531
	
2532
	
2533
	/**
2534
	* Gets a list of all departure & arrival airport countries
2535
	*
2536
	* @return Array list of airport countries
2537
	*
2538
	*/
2539
	public function getAllAirportCountries()
2540
	{
2541
		$airport_array = array();
2542
					
2543
		  /*
2544
		$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2545
								FROM spotter_output
2546
								WHERE spotter_output.departure_airport_country <> '' 
2547
								ORDER BY spotter_output.departure_airport_country ASC";
2548
		*/
2549
		$query = "SELECT DISTINCT country AS airport_country FROM airport ORDER BY country ASC";
2550
		
2551
		$sth = $this->db->prepare($query);
2552
		$sth->execute();
2553
   
2554
		$temp_array = array();
2555
		
2556
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2557
		{
2558
			$temp_array['airport_country'] = $row['airport_country'];
2559
2560
			$airport_array[$row['airport_country']] = $temp_array;
2561
		}
2562
								
2563
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2564
								FROM spotter_output
2565
								WHERE spotter_output.arrival_airport_country <> '' 
2566
								ORDER BY spotter_output.arrival_airport_country ASC";
2567
					
2568
		$sth = $this->db->prepare($query);
2569
		$sth->execute();
2570
		
2571
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2572
		{
2573
			if (isset($airport_array[$row['airport_country']]['airport_country']) && $airport_array[$row['airport_country']]['airport_country'] != $row['airport_country'])
2574
			{
2575
				$temp_array['airport_country'] = $row['airport_country'];
2576
				$airport_array[$row['airport_country']] = $temp_array;
2577
			}
2578
		}
2579
2580
		return $airport_array;
2581
	} 
2582
	
2583
	
2584
	
2585
	
2586
	/**
2587
	* Gets a list of all countries (airline, departure airport & arrival airport)
2588
	*
2589
	* @return Array list of countries
2590
	*
2591
	*/
2592
	public function getAllCountries()
2593
	{
2594
		$Connection= new Connection($this->db);
2595
		if ($Connection->tableExists('countries')) {
2596
			$query  = "SELECT countries.name AS airport_country
2597
				FROM countries
2598
				ORDER BY countries.name ASC";
2599
			$sth = $this->db->prepare($query);
2600
			$sth->execute();
2601
   
2602
			$temp_array = array();
2603
			$country_array = array();
2604
		
2605
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2606
			{
2607
				$temp_array['country'] = $row['airport_country'];
2608
				$country_array[$row['airport_country']] = $temp_array;
2609
			}
2610
		} else {
2611
			$query  = "SELECT DISTINCT spotter_output.departure_airport_country AS airport_country
2612
								FROM spotter_output
2613
								WHERE spotter_output.departure_airport_country <> '' 
2614
								ORDER BY spotter_output.departure_airport_country ASC";
2615
2616
			$sth = $this->db->prepare($query);
2617
			$sth->execute();
2618
   
2619
			$temp_array = array();
2620
			$country_array = array();
2621
			while($row = $sth->fetch(PDO::FETCH_ASSOC))
2622
			{
2623
				$temp_array['country'] = $row['airport_country'];
2624
				$country_array[$row['airport_country']] = $temp_array;
2625
			}
2626
2627
		$query  = "SELECT DISTINCT spotter_output.arrival_airport_country AS airport_country
2628
								FROM spotter_output
2629
								WHERE spotter_output.arrival_airport_country <> '' 
2630
								ORDER BY spotter_output.arrival_airport_country ASC";
2631
					
2632
		$sth = $this->db->prepare($query);
2633
		$sth->execute();
2634
		
2635
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2636
		{
2637
			if ($country_array[$row['airport_country']]['country'] != $row['airport_country'])
2638
			{
2639
				$temp_array['country'] = $row['airport_country'];
2640
				
2641
				$country_array[$row['country']] = $temp_array;
2642
			}
2643
		}
2644
		
2645
		$query  = "SELECT DISTINCT spotter_output.airline_country AS airline_country
2646
								FROM spotter_output  
2647
								WHERE spotter_output.airline_country <> '' 
2648
								ORDER BY spotter_output.airline_country ASC";
2649
					
2650
		$sth = $this->db->prepare($query);
2651
		$sth->execute();
2652
		
2653
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2654
		{
2655
			if (isset($country_array[$row['airline_country']]['country']) && $country_array[$row['airline_country']]['country'] != $row['airline_country'])
2656
			{
2657
				$temp_array['country'] = $row['airline_country'];
2658
				
2659
				$country_array[$row['country']] = $temp_array;
2660
			}
2661
		}
2662
		}  
2663
		return $country_array;
2664
	} 
2665
	
2666
	
2667
	
2668
	
2669
	/**
2670
	* Gets a list of all idents/callsigns
2671
	*
2672
	* @return Array list of ident/callsign names
2673
	*
2674
	*/
2675
	public function getAllIdents()
2676
	{
2677
		$query  = "SELECT DISTINCT spotter_output.ident
2678
								FROM spotter_output
2679
								WHERE spotter_output.ident <> '' 
2680
								ORDER BY spotter_output.date ASC LIMIT 700 OFFSET 0";
2681
2682
		$sth = $this->db->prepare($query);
2683
		$sth->execute();
2684
    
2685
		$ident_array = array();
2686
		$temp_array = array();
2687
		
2688
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2689
		{
2690
			$temp_array['ident'] = $row['ident'];
2691
			$ident_array[] = $temp_array;
2692
		}
2693
2694
		return $ident_array;
2695
	}
2696
2697
	/**
2698
	* Get a list of flights from airport since 7 days
2699
	* @return Array number, icao, name and city of airports
2700
	*/
2701
2702
	public function getLast7DaysAirportsDeparture($airport_icao = '') {
2703
		global $globalTimezone, $globalDBdriver;
2704
		if ($globalTimezone != '') {
2705
			date_default_timezone_set($globalTimezone);
2706
			$datetime = new DateTime();
2707
			$offset = $datetime->format('P');
2708
		} else $offset = '+00:00';
2709
		if ($airport_icao == '') {
2710
			if ($globalDBdriver == 'mysql') {
2711
				$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";
2712
			} else {
2713
				$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";
2714
			}
2715
			$sth = $this->db->prepare($query);
2716
			$sth->execute(array(':offset' => $offset));
2717
		} else {
2718
			if ($globalDBdriver == 'mysql') {
2719
				$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";
2720
			} else {
2721
				$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";
2722
			}
2723
			$sth = $this->db->prepare($query);
2724
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2725
		}
2726
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2727
	}
2728
2729
	/**
2730
	* Get a list of flights from airport since 7 days
2731
	* @return Array number, icao, name and city of airports
2732
	*/
2733
2734
	public function getLast7DaysAirportsDepartureByAirlines($airport_icao = '') {
2735
		global $globalTimezone, $globalDBdriver;
2736
		if ($globalTimezone != '') {
2737
			date_default_timezone_set($globalTimezone);
2738
			$datetime = new DateTime();
2739
			$offset = $datetime->format('P');
2740
		} else $offset = '+00:00';
2741
		if ($airport_icao == '') {
2742
			if ($globalDBdriver == 'mysql') {
2743
				$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";
2744
			} else {
2745
				$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";
2746
			}
2747
			$sth = $this->db->prepare($query);
2748
			$sth->execute(array(':offset' => $offset));
2749
		} else {
2750
			if ($globalDBdriver == 'mysql') {
2751
				$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";
2752
			} else {
2753
				$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";
2754
			}
2755
			$sth = $this->db->prepare($query);
2756
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2757
		}
2758
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2759
	}
2760
2761
	/**
2762
	* Get a list of flights from detected airport since 7 days
2763
	* @return Array number, icao, name and city of airports
2764
	*/
2765
2766
	public function getLast7DaysDetectedAirportsDeparture($airport_icao = '') {
2767
		global $globalTimezone, $globalDBdriver;
2768
		if ($globalTimezone != '') {
2769
			date_default_timezone_set($globalTimezone);
2770
			$datetime = new DateTime();
2771
			$offset = $datetime->format('P');
2772
		} else $offset = '+00:00';
2773
		if ($airport_icao == '') {
2774
			if ($globalDBdriver == 'mysql') {
2775
				$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 
2776
				FROM `spotter_output`, airport 
2777
				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' 
2778
				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";
2779
			} else {
2780
				$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 
2781
				FROM spotter_output, airport 
2782
				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' 
2783
				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";
2784
			}
2785
			$sth = $this->db->prepare($query);
2786
			$sth->execute(array(':offset' => $offset));
2787
		} else {
2788
			if ($globalDBdriver == 'mysql') {
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, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2790
				FROM `spotter_output`, airport 
2791
				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 
2792
				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";
2793
			} else {
2794
				$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 
2795
				FROM spotter_output, airport 
2796
				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";
2797
			}
2798
			$sth = $this->db->prepare($query);
2799
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2800
		}
2801
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2802
	}
2803
2804
	/**
2805
	* Get a list of flights from detected airport since 7 days
2806
	* @return Array number, icao, name and city of airports
2807
	*/
2808
2809
	public function getLast7DaysDetectedAirportsDepartureByAirlines($airport_icao = '') {
2810
		global $globalTimezone, $globalDBdriver;
2811
		if ($globalTimezone != '') {
2812
			date_default_timezone_set($globalTimezone);
2813
			$datetime = new DateTime();
2814
			$offset = $datetime->format('P');
2815
		} else $offset = '+00:00';
2816
		if ($airport_icao == '') {
2817
			if ($globalDBdriver == 'mysql') {
2818
				$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 
2819
				FROM `spotter_output`, airport 
2820
				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' 
2821
				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";
2822
			} else {
2823
				$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 
2824
				FROM spotter_output, airport 
2825
				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' 
2826
				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";
2827
			}
2828
			$sth = $this->db->prepare($query);
2829
			$sth->execute(array(':offset' => $offset));
2830
		} else {
2831
			if ($globalDBdriver == 'mysql') {
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, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') 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 >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND real_departure_airport_icao = :airport_icao 
2835
				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";
2836
			} else {
2837
				$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 
2838
				FROM spotter_output, airport 
2839
				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";
2840
			}
2841
			$sth = $this->db->prepare($query);
2842
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2843
		}
2844
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2845
	}
2846
2847
2848
	/**
2849
	* Get a list of flights to airport since 7 days
2850
	* @return Array number, icao, name and city of airports
2851
	*/
2852
2853
	public function getLast7DaysAirportsArrival($airport_icao = '') {
2854
		global $globalTimezone, $globalDBdriver;
2855
		if ($globalTimezone != '') {
2856
			date_default_timezone_set($globalTimezone);
2857
			$datetime = new DateTime();
2858
			$offset = $datetime->format('P');
2859
		} else $offset = '+00:00';
2860
		if ($airport_icao == '') {
2861
			if ($globalDBdriver == 'mysql') {
2862
				$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";
2863
			} else {
2864
				$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";
2865
			}
2866
			$sth = $this->db->prepare($query);
2867
			$sth->execute(array(':offset' => $offset));
2868
		} else {
2869
			if ($globalDBdriver == 'mysql') {
2870
				$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";
2871
			} else {
2872
				$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";
2873
			}
2874
			$sth = $this->db->prepare($query);
2875
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2876
		}
2877
		
2878
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2879
	}
2880
2881
2882
	/**
2883
	* Get a list of flights detected to airport since 7 days
2884
	* @return Array number, icao, name and city of airports
2885
	*/
2886
2887
	public function getLast7DaysDetectedAirportsArrival($airport_icao = '') {
2888
		global $globalTimezone, $globalDBdriver;
2889
		if ($globalTimezone != '') {
2890
			date_default_timezone_set($globalTimezone);
2891
			$datetime = new DateTime();
2892
			$offset = $datetime->format('P');
2893
		} else $offset = '+00:00';
2894
		if ($airport_icao == '') {
2895
			if ($globalDBdriver == 'mysql') {
2896
				$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 
2897
				FROM `spotter_output`, airport 
2898
				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' 
2899
				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";
2900
			} else {
2901
				$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 
2902
				FROM spotter_output, airport 
2903
				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' 
2904
				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";
2905
			}
2906
			$sth = $this->db->prepare($query);
2907
			$sth->execute(array(':offset' => $offset));
2908
		} else {
2909
			if ($globalDBdriver == 'mysql') {
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, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') as date 
2911
				FROM `spotter_output`, airport 
2912
				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 
2913
				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";
2914
			} else {
2915
				$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 
2916
				FROM spotter_output, airport 
2917
				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 
2918
				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";
2919
			}
2920
			$sth = $this->db->prepare($query);
2921
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2922
		}
2923
		
2924
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2925
	}
2926
2927
2928
	/**
2929
	* Get a list of flights to airport since 7 days
2930
	* @return Array number, icao, name and city of airports
2931
	*/
2932
2933
	public function getLast7DaysAirportsArrivalByAirlines($airport_icao = '') {
2934
		global $globalTimezone, $globalDBdriver;
2935
		if ($globalTimezone != '') {
2936
			date_default_timezone_set($globalTimezone);
2937
			$datetime = new DateTime();
2938
			$offset = $datetime->format('P');
2939
		} else $offset = '+00:00';
2940
		if ($airport_icao == '') {
2941
			if ($globalDBdriver == 'mysql') {
2942
				$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";
2943
			} else {
2944
				$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";
2945
			}
2946
			$sth = $this->db->prepare($query);
2947
			$sth->execute(array(':offset' => $offset));
2948
		} else {
2949
			if ($globalDBdriver == 'mysql') {
2950
				$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";
2951
			} else {
2952
				$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";
2953
			}
2954
			$sth = $this->db->prepare($query);
2955
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
2956
		}
2957
		
2958
		return $sth->fetchAll(PDO::FETCH_ASSOC);
2959
	}
2960
2961
2962
	/**
2963
	* Get a list of flights detected to airport since 7 days
2964
	* @return Array number, icao, name and city of airports
2965
	*/
2966
2967
	public function getLast7DaysDetectedAirportsArrivalByAirlines($airport_icao = '') {
2968
		global $globalTimezone, $globalDBdriver;
2969
		if ($globalTimezone != '') {
2970
			date_default_timezone_set($globalTimezone);
2971
			$datetime = new DateTime();
2972
			$offset = $datetime->format('P');
2973
		} else $offset = '+00:00';
2974
		if ($airport_icao == '') {
2975
			if ($globalDBdriver == 'mysql') {
2976
				$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 
2977
				FROM `spotter_output`, airport 
2978
				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' 
2979
				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";
2980
			} else {
2981
				$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 
2982
				FROM spotter_output, airport 
2983
				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' 
2984
				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";
2985
			}
2986
			$sth = $this->db->prepare($query);
2987
			$sth->execute(array(':offset' => $offset));
2988
		} else {
2989
			if ($globalDBdriver == 'mysql') {
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, DATE_FORMAT(DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)),'%Y-%m-%d') 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 >= DATE_SUB(UTC_TIMESTAMP(), INTERVAL 7 DAY) AND arrival_airport_icao = :airport_icao 
2993
				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";
2994
			} else {
2995
				$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 
2996
				FROM spotter_output, airport 
2997
				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 
2998
				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";
2999
			}
3000
			$sth = $this->db->prepare($query);
3001
			$sth->execute(array(':offset' => $offset, ':airport_icao' => $airport_icao));
3002
		}
3003
		
3004
		return $sth->fetchAll(PDO::FETCH_ASSOC);
3005
	}
3006
3007
3008
	/**
3009
	* Gets a list of all dates
3010
	*
3011
	* @return Array list of date names
3012
	*
3013
	*/
3014
	public function getAllDates()
3015
	{
3016
		global $globalTimezone, $globalDBdriver;
3017
		if ($globalTimezone != '') {
3018
			date_default_timezone_set($globalTimezone);
3019
			$datetime = new DateTime();
3020
			$offset = $datetime->format('P');
3021
		} else $offset = '+00:00';
3022
3023
		if ($globalDBdriver == 'mysql') {
3024
			$query  = "SELECT DISTINCT DATE(CONVERT_TZ(spotter_output.date,'+00:00', :offset)) as date
3025
								FROM spotter_output
3026
								WHERE spotter_output.date <> '' 
3027
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3028
		} else {
3029
			$query  = "SELECT DISTINCT to_char(spotter_output.date AT TIME ZONE INTERVAL :offset,'YYYY-mm-dd') as date
3030
								FROM spotter_output
3031
								WHERE spotter_output.date <> '' 
3032
								ORDER BY spotter_output.date ASC LIMIT 0,200";
3033
		}
3034
		
3035
		$sth = $this->db->prepare($query);
3036
		$sth->execute(array(':offset' => $offset));
3037
    
3038
		$date_array = array();
3039
		$temp_array = array();
3040
		
3041
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3042
		{
3043
			$temp_array['date'] = $row['date'];
3044
3045
			$date_array[] = $temp_array;
3046
		}
3047
3048
		return $date_array;
3049
	}
3050
	
3051
	
3052
	
3053
	/**
3054
	* Gets all route combinations
3055
	*
3056
	* @return Array the route list
3057
	*
3058
	*/
3059
	public function getAllRoutes()
3060
	{
3061
		$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 
3062
				FROM spotter_output
3063
				WHERE spotter_output.ident <> '' 
3064
				GROUP BY route
3065
				ORDER BY route ASC";
3066
3067
		$sth = $this->db->prepare($query);
3068
		$sth->execute();
3069
3070
		$routes_array = array();
3071
		$temp_array = array();
3072
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
3073
		{
3074
			$temp_array['route'] = $row['route'];
3075
			$temp_array['airport_departure_icao'] = $row['departure_airport_icao'];
3076
			$temp_array['airport_arrival_icao'] = $row['arrival_airport_icao'];
3077
3078
			$routes_array[] = $temp_array;
3079
		}
3080
		return $routes_array;
3081
	}
3082
3083
	/**
3084
	* Update ident spotter data
3085
	*
3086
	* @param String $flightaware_id the ID from flightaware
3087
	* @param String $ident the flight ident
3088
	* @return String success or false
3089
	*
3090
	*/	
3091
	public function updateIdentSpotterData($flightaware_id = '', $ident = '',$fromsource = NULL)
3092
	{
3093
		if (!is_numeric(substr($ident, 0, 3)))
3094
		{
3095
			if (is_numeric(substr(substr($ident, 0, 3), -1, 1))) {
3096
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 2),$fromsource);
3097
			} elseif (is_numeric(substr(substr($ident, 0, 4), -1, 1))) {
3098
				$airline_array = $this->getAllAirlineInfo(substr($ident, 0, 3),$fromsource);
3099
			} else {
3100
				$airline_array = $this->getAllAirlineInfo("NA");
3101
			}
3102
			if (count($airline_array) == 0) {
3103
				$airline_array = $this->getAllAirlineInfo("NA");
3104
			}
3105
			if (!isset($airline_array[0]['icao']) || $airline_array[0]['icao'] == ""){
3106
				$airline_array = $this->getAllAirlineInfo("NA");
3107
			}
3108
		} else {
3109
			$airline_array = $this->getAllAirlineInfo("NA");
3110
		}
3111
                $airline_name = $airline_array[0]['name'];
3112
                $airline_icao = $airline_array[0]['icao'];
3113
                $airline_country = $airline_array[0]['country'];
3114
                $airline_type = $airline_array[0]['type'];
3115
3116
3117
		$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';
3118
                $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);
3119
3120
		try {
3121
			$sth = $this->db->prepare($query);
3122
			$sth->execute($query_values);
3123
		} catch (PDOException $e) {
3124
			return "error : ".$e->getMessage();
3125
		}
3126
		
3127
		return "success";
3128
3129
	}
3130
	/**
3131
	* Update latest spotter data
3132
	*
3133
	* @param String $flightaware_id the ID from flightaware
3134
	* @param String $ident the flight ident
3135
	* @param String $arrival_airport_icao the arrival airport
3136
	* @return String success or false
3137
	*
3138
	*/	
3139
	public function updateLatestSpotterData($flightaware_id = '', $ident = '', $latitude = '', $longitude = '', $altitude = '', $ground = false, $groundspeed = NULL, $date = '', $arrival_airport_icao = '',$arrival_airport_time = '')
3140
	{
3141
		if ($groundspeed == '') $groundspeed = NULL;
3142
		$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';
3143
                $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);
3144
3145
		try {
3146
			$sth = $this->db->prepare($query);
3147
			$sth->execute($query_values);
3148
		} catch (PDOException $e) {
3149
			return "error : ".$e->getMessage();
3150
		}
3151
		
3152
		return "success";
3153
3154
	}
3155
3156
	/**
3157
	* Adds a new spotter data
3158
	*
3159
	* @param String $flightaware_id the ID from flightaware
3160
	* @param String $ident the flight ident
3161
	* @param String $aircraft_icao the aircraft type
3162
	* @param String $departure_airport_icao the departure airport
3163
	* @param String $arrival_airport_icao the arrival airport
3164
	* @param String $latitude latitude of flight
3165
	* @param String $longitude latitude of flight
3166
	* @param String $waypoints waypoints of flight
3167
	* @param String $altitude altitude of flight
3168
	* @param String $heading heading of flight
3169
	* @param String $groundspeed speed of flight
3170
	* @param String $date date of flight
3171
	* @param String $departure_airport_time departure time of flight
3172
	* @param String $arrival_airport_time arrival time of flight
3173
	* @param String $squawk squawk code of flight
3174
	* @param String $route_stop route stop of flight
3175
	* @param String $highlight highlight or not
3176
	* @param String $ModeS ModesS code of flight
3177
	* @param String $registration registration code of flight
3178
	* @param String $pilot_id pilot id of flight (for virtual airlines)
3179
	* @param String $pilot_name pilot name of flight (for virtual airlines)
3180
	* @param String $verticalrate vertival rate of flight
3181
	* @return String success or false
3182
	*/
3183
	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 = '')
3184
	{
3185
		global $globalURL, $globalIVAO, $globalVATSIM, $globalphpVMS, $globalDebugTimeElapsed;
3186
		
3187
		//if (isset($globalDebugTimeElapsed) || $globalDebugTimeElapsed == '') $globalDebugTimeElapsed = FALSE;
3188
		$Image = new Image($this->db);
3189
		$Common = new Common();
3190
		
3191
		if (!isset($globalIVAO)) $globalIVAO = FALSE;
3192
		if (!isset($globalVATSIM)) $globalVATSIM = FALSE;
3193
		if (!isset($globalphpVMS)) $globalphpVMS = FALSE;
3194
		date_default_timezone_set('UTC');
3195
		
3196
		//getting the registration
3197
		if ($flightaware_id != "" && $registration == '')
3198
		{
3199
			if (!is_string($flightaware_id))
3200
			{
3201
				return false;
3202
			} else {
3203
				if ($ModeS != '') {
3204
					$timeelapsed = microtime(true);
3205
					$registration = $this->getAircraftRegistrationBymodeS($ModeS);
3206
					if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3207
				} else {
3208
					$myhex = explode('-',$flightaware_id);
3209
					if (count($myhex) > 0) {
3210
						$timeelapsed = microtime(true);
3211
						$registration = $this->getAircraftRegistrationBymodeS($myhex[0]);
3212
						if ($globalDebugTimeElapsed) echo 'ADD SPOTTER DATA : Time elapsed for getAircraftRegistrationBymodes : '.round(microtime(true)-$timeelapsed,2).'s'."\n";
3213
					}
3214
				}
3215
			}
3216
		}
3217
		$fromsource = NULL;
3218
		if (isset($row['format_source']) && $row['format_source'] == 'vatsimtxt') $fromsource = 'vatsim';
3219
		elseif (isset($row['format_source']) && $row['format_source'] == 'whazzup') $fromsource = 'ivao';
0 ignored issues
show
Bug introduced by
The variable $row seems to never exist, and therefore isset should always return false. Did you maybe rename this variable?

This check looks for calls to isset(...) or empty() on variables that are yet undefined. These calls will always produce the same result and can be removed.

This is most likely caused by the renaming of a variable or the removal of a function/method parameter.

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