Completed
Push — master ( 4407ee...8e145a )
by Yannick
06:51
created

Spotter::countAllAircraftRegistrationByPilot()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 37
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

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

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

Loading history...
2607
	{
2608
		/*
2609
		$query  = "SELECT DISTINCT spotter_output.aircraft_icao AS aircraft_icao, spotter_output.aircraft_name AS aircraft_name
2610
								FROM spotter_output  
2611
								WHERE spotter_output.aircraft_icao <> '' 
2612
								ORDER BY spotter_output.aircraft_name ASC";
2613
								
2614
		*/
2615
		//$filter_query = $this->getFilter($filters,true,true);
2616
		//$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";
2617
2618
		$query = "SELECT DISTINCT icao AS aircraft_icao, type AS aircraft_name, manufacturer AS aircraft_manufacturer FROM aircraft WHERE icao <> '' ORDER BY aircraft_manufacturer ASC";
2619
		
2620
		$sth = $this->db->prepare($query);
2621
		$sth->execute();
2622
2623
		$aircraft_array = array();
2624
		$temp_array = array();
2625
		
2626
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2627
		{
2628
			$temp_array['aircraft_icao'] = $row['aircraft_icao'];
2629
			$temp_array['aircraft_manufacturer'] = $row['aircraft_manufacturer'];
2630
			$temp_array['aircraft_name'] = $row['aircraft_name'];
2631
2632
			$aircraft_array[] = $temp_array;
2633
		}
2634
2635
		return $aircraft_array;
2636
	}
2637
	
2638
	
2639
	/**
2640
	* Gets a list of all aircraft registrations
2641
	*
2642
	* @return Array list of aircraft registrations
2643
	*
2644
	*/
2645
	public function getAllAircraftRegistrations($filters = array())
2646
	{
2647
		$filter_query = $this->getFilter($filters,true,true);
2648
		$query  = "SELECT DISTINCT spotter_output.registration 
2649
				FROM spotter_output".$filter_query." spotter_output.registration <> '' 
2650
				ORDER BY spotter_output.registration ASC";
2651
2652
		$sth = $this->db->prepare($query);
2653
		$sth->execute();
2654
2655
		$aircraft_array = array();
2656
		$temp_array = array();
2657
		
2658
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2659
		{
2660
			$temp_array['registration'] = $row['registration'];
2661
2662
			$aircraft_array[] = $temp_array;
2663
		}
2664
2665
		return $aircraft_array;
2666
	}
2667
2668
	/**
2669
	* Gets all source name
2670
	*
2671
	* @param String type format of source
2672
	* @return Array list of source name
2673
	*
2674
	*/
2675
	public function getAllSourceName($type = '',$filters = array())
2676
	{
2677
		$filter_query = $this->getFilter($filters,true,true);
2678
		$query_values = array();
2679
		$query  = "SELECT DISTINCT spotter_output.source_name 
2680
				FROM spotter_output".$filter_query." spotter_output.source_name <> ''";
2681
		if ($type != '') {
2682
			$query_values = array(':type' => $type);
2683
			$query .= " AND format_source = :type";
2684
		}
2685
		$query .= " ORDER BY spotter_output.source_name ASC";
2686
2687
		$sth = $this->db->prepare($query);
2688
		if (!empty($query_values)) $sth->execute($query_values);
2689
		else $sth->execute();
2690
2691
		$source_array = array();
2692
		$temp_array = array();
2693
		
2694
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2695
		{
2696
			$temp_array['source_name'] = $row['source_name'];
2697
			$source_array[] = $temp_array;
2698
		}
2699
		return $source_array;
2700
	}
2701
2702
2703
2704
	/**
2705
	* Gets a list of all airline names
2706
	*
2707
	* @return Array list of airline names
2708
	*
2709
	*/
2710
	public function getAllAirlineNames($airline_type = '',$forsource = NULL,$filters = array())
2711
	{
2712
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2713
		$filter_query = $this->getFilter($filters,true,true);
2714
		$airline_type = filter_var($airline_type,FILTER_SANITIZE_STRING);
2715
		if ($airline_type == '' || $airline_type == 'all') {
2716
			/*
2717
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2718
								FROM spotter_output
2719
								WHERE spotter_output.airline_icao <> '' 
2720
								ORDER BY spotter_output.airline_name ASC";
2721
			*/
2722
			if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2723
			elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2724
			elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2725
			if ($forsource === NULL) {
2726
				$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";
2727
				$query_data = array();
2728
			} else {
2729
				$query = "SELECT DISTINCT icao AS airline_icao, name AS airline_name, type AS airline_type FROM airlines WHERE forsource = :forsource ORDER BY name ASC";
2730
				$query_data = array(':forsource' => $forsource);
2731
			}
2732
		} else {
2733
			$query  = "SELECT DISTINCT spotter_output.airline_icao AS airline_icao, spotter_output.airline_name AS airline_name, spotter_output.airline_type AS airline_type
2734
					FROM spotter_output".$filter_query." spotter_output.airline_icao <> '' 
2735
					AND spotter_output.airline_type = :airline_type 
2736
					ORDER BY spotter_output.airline_icao ASC";
2737
			$query_data = array(':airline_type' => $airline_type);
2738
		}
2739
		
2740
		$sth = $this->db->prepare($query);
2741
		$sth->execute($query_data);
2742
    
2743
		$airline_array = array();
2744
		$temp_array = array();
2745
		
2746
		while($row = $sth->fetch(PDO::FETCH_ASSOC))
2747
		{
2748
			$temp_array['airline_icao'] = $row['airline_icao'];
2749
			$temp_array['airline_name'] = $row['airline_name'];
2750
			$temp_array['airline_type'] = $row['airline_type'];
2751
2752
			$airline_array[] = $temp_array;
2753
		}
2754
		return $airline_array;
2755
	}
2756
	
2757
	/**
2758
	* Gets a list of all alliance names
2759
	*
2760
	* @return Array list of alliance names
2761
	*
2762
	*/
2763
	public function getAllAllianceNames($forsource = NULL,$filters = array())
2764
	{
2765
		global $globalAirlinesSource,$globalVATSIM, $globalIVAO;
2766
		$filter_query = $this->getFilter($filters,true,true);
0 ignored issues
show
Unused Code introduced by
$filter_query is not used, you could remove the assignment.

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

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

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

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

Loading history...
2767
		if (isset($globalAirlinesSource) && $globalAirlinesSource != '') $forsource = $globalAirlinesSource;
2768
		elseif (isset($globalVATSIM) && $globalVATSIM) $forsource = 'vatsim';
2769
		elseif (isset($globalIVAO) && $globalIVAO) $forsource = 'ivao';
2770
		if ($forsource === NULL) {
2771
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND forsource IS NULL ORDER BY alliance ASC";
2772
			$query_data = array();
2773
		} else {
2774
			$query = "SELECT DISTINCT alliance FROM airlines WHERE alliance IS NOT NULL AND  forsource = :forsource ORDER BY alliance ASC";
2775
			$query_data = array(':forsource' => $forsource);
2776
		}
2777
		
2778
		$sth = $this->db->prepare($query);
2779
		$sth->execute($query_data);
2780
    
2781
		$alliance_array = array();
0 ignored issues
show
Unused Code introduced by
$alliance_array is not used, you could remove the assignment.

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

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

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

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

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