Completed
Push — master ( e47bfe...1fed4c )
by Yannick
05:31
created

Spotter::countAllAircraftManufacturerByDate()   B

Complexity

Conditions 4
Paths 8

Size

Total Lines 38
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

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

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

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