Completed
Push — master ( 2285a7...8ce5a2 )
by Yannick
06:42
created

Spotter::countAllDepartureAirportsByManufacturer()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 29
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

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

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

Loading history...
2431
	{
2432
		/*
2433
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2434
								FROM spotter_output  
2435
								WHERE spotter_output.aircraft_icao <> '' 
2436
								ORDER BY spotter_output.aircraft_name ASC";
2437
								
2438
		*/
2439
		//$filter_query = $this->getFilter($filters,true,true);
2440
		//$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft".$filter_query." icao <> '' ORDER BY aircraft_manufacturer ASC";
2441
2442
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2443
		
2444
		$sth = $this->db->prepare($query);
2445
		$sth->execute();
2446
2447
		$aircraft_array = array();
2448
		$temp_array = array();
2449
		
2450
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2451
		{
2452
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2453
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2454
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2455
2456
			$aircraft_array[] = $temp_array;
2457
		}
2458
2459
		return $aircraft_array;
2460
	}
2461
	
2462
	
2463
	/**
2464
	* Gets a list of all aircraft registrations
2465
	*
2466
	* @return Array list of aircraft registrations
2467
	*
2468
	*/
2469
	public function getAllAircraftRegistrations($filters = array())
2470
	{
2471
		$filter_query = $this->getFilter($filters,true,true);
2472
		$query  = "SELECT DISTINCT spotter_output.registration 
2473
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2474
				ORDER BY spotter_output.registration ASC";
2475
2476
		$sth = $this->db->prepare($query);
2477
		$sth->execute();
2478
2479
		$aircraft_array = array();
2480
		$temp_array = array();
2481
		
2482
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2483
		{
2484
			$temp_array['registration'] = $row['registration'];
2485
2486
			$aircraft_array[] = $temp_array;
2487
		}
2488
2489
		return $aircraft_array;
2490
	}
2491
2492
	/**
2493
	* Gets all source name
2494
	*
2495
	* @param String type format of source
2496
	* @return Array list of source name
2497
	*
2498
	*/
2499
	public function getAllSourceName($type = '',$filters = array())
2500
	{
2501
		$filter_query = $this->getFilter($filters,true,true);
2502
		$query_values = array();
2503
		$query  = "SELECT DISTINCT spotter_output.source_name 
2504
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2505
		if ($type != '') {
2506
			$query_values = array(':type' => $type);
2507
			$query .= " AND format_source = :type";
2508
		}
2509
		$query .= " ORDER BY spotter_output.source_name ASC";
2510
2511
		$sth = $this->db->prepare($query);
2512
		if (!empty($query_values)) $sth->execute($query_values);
2513
		else $sth->execute();
2514
2515
		$source_array = array();
2516
		$temp_array = array();
2517
		
2518
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2519
		{
2520
			$temp_array['source_name'] = $row['source_name'];
2521
			$source_array[] = $temp_array;
2522
		}
2523
		return $source_array;
2524
	}
2525
2526
2527
2528
	/**
2529
	* Gets a list of all airline names
2530
	*
2531
	* @return Array list of airline names
2532
	*
2533
	*/
2534
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2535
	{
2536
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2537
		$filter_query = $this->getFilter($filters,true,true);
2538
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2539
		if ($airline_type == '' || $airline_type == 'all') {
2540
			/*
2541
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2542
								FROM spotter_output
2543
								WHERE spotter_output.airline_icao <> '' 
2544
								ORDER BY spotter_output.airline_name ASC";
2545
			*/
2546
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2547
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2548
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2549
			if ($forsource === NULL) {
2550
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource IS NULL ORDER BY name ASC";
2551
				$query_data = array();
2552
			} else {
2553
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2554
				$query_data = array(':forsource' => $forsource);
2555
			}
2556
		} else {
2557
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2558
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2559
					AND spotter_output.airline_type = :airline_type 
2560
					ORDER BY spotter_output.airline_icao ASC";
2561
			$query_data = array(':airline_type' => $airline_type);
2562
		}
2563
		
2564
		$sth = $this->db->prepare($query);
2565
		$sth->execute($query_data);
2566
    
2567
		$airline_array = array();
2568
		$temp_array = array();
2569
		
2570
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2571
		{
2572
			$temp_array['airline_icao'] = $row['airline_icao'];
2573
			$temp_array['airline_name'] = $row['airline_name'];
2574
			$temp_array['airline_type'] = $row['airline_type'];
2575
2576
			$airline_array[] = $temp_array;
2577
		}
2578
		return $airline_array;
2579
	}
2580
	
2581
	/**
2582
	* Gets a list of all alliance names
2583
	*
2584
	* @return Array list of alliance names
2585
	*
2586
	*/
2587
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2588
	{
2589
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2590
		$filter_query = $this->getFilter($filters,true,true);
0 ignored issues
show
Unused Code introduced by
$filter_query is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2591
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2592
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2593
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2594
		if ($forsource === NULL) {
2595
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2596
			$query_data = array();
2597
		} else {
2598
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2599
			$query_data = array(':forsource' => $forsource);
2600
		}
2601
		
2602
		$sth = $this->db->prepare($query);
2603
		$sth->execute($query_data);
2604
    
2605
		$alliance_array = array();
0 ignored issues
show
Unused Code introduced by
$alliance_array is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

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