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

Spotter::countAllDetectedArrivalAirports()   F

Complexity

Conditions 14
Paths 1458

Size

Total Lines 74
Code Lines 54

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 14
eloc 54
nc 1458
nop 8
dl 0
loc 74
rs 2.2878
c 0
b 0
f 0

How to fix   Long Method    Complexity    Many Parameters   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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
?>